PROCEDURE FLIPFIELD(X,Y : INTEGER; VAR STATE : BOOLEAN; TRUSTRING : STRING30; FALSTRING : STRING30; VAR ESCAPE : BOOLEAN); VAR BLANKER : STRING80; KEYSTROKE : 0..255; WORKSTATE : BOOLEAN; CH : CHAR; PROCEDURE SHOWSTATE(NOWSTATE : BOOLEAN); BEGIN GOTOXY(X,Y); WRITE(BLANKER); { Erase the old label } IF NOWSTATE THEN BEGIN GOTOXY(X,Y); WRITE(TRUSTRING) { Write TRUSTRING for NOWSTATE = TRUE } END ELSE BEGIN GOTOXY(X,Y); WRITE(FALSTRING); { Write FALSTRING for NOWSTATE = FALSE } END END; BEGIN ESCAPE := FALSE; CH := CHR(0); LOWVIDEO; { Use highlighting } FILLCHAR(BLANKER,SIZEOF(BLANKER),' '); { Set up blanker string } WORKSTATE:=STATE; { Temporary Boolean } IF LENGTH(TRUSTRING)>LENGTH(FALSTRING) THEN { Adjust blanker } BLANKER[0]:=CHR(LENGTH(TRUSTRING)) ELSE { string for lengths } BLANKER[0]:=CHR(LENGTH(FALSTRING)); { of meaning labels } SHOWSTATE(WORKSTATE); { Display initial label } REPEAT WHILE NOT KEYSTAT(CH) DO BEGIN {NULL} END; { Calls KEYSTAT... } KEYSTROKE := ORD(CH); IF KEYSTROKE=27 THEN ESCAPE:=TRUE ELSE IF KEYSTROKE<>13 THEN WORKSTATE:=NOT WORKSTATE; SHOWSTATE(WORKSTATE); UNTIL (KEYSTROKE=13) OR ESCAPE; { ...until CR or ESC is pressed } IF NOT ESCAPE THEN STATE:=WORKSTATE; { Update STATE if CR } NORMVIDEO; SHOWSTATE(STATE); { Redisplay STATE in non-highlighted text } END;