IMPLEMENTATION MODULE GSXIN; FROM GSXMAIN IMPORT simple, simplESC, CARDIN, CARDOUT, PTSIN, PTSOUT, CB; PROCEDURE Tablet ( ) : BOOLEAN; BEGIN simplESC ( 16 ); RETURN CARDOUT[1] > 0; END Tablet; PROCEDURE Locator ( Device : CARDINAL; VAR C : CHAR; VAR Moved, Terminated : BOOLEAN ); BEGIN CARDIN[1] := Device; PTSIN[1].X := CursorX; PTSIN[1].Y := CursorY; PTSOUT[1] := PTSIN[1]; (* ...if not moved at all *) WITH CB DO CINLEN := 1; PINLEN := 1; END; simple ( 28 ); CursorX := PTSOUT[1].X; CursorY := PTSOUT[1].Y; C := CHAR ( CARDOUT[1] ); Moved := CB.POUTLEN > 0; Terminated := CB.COUTLEN > 0; END Locator; PROCEDURE Valuator ( VAR C : CHAR; VAR Changed, Terminated : BOOLEAN ); BEGIN CARDIN[2] := Value; CARDOUT[1] := Value; CB.CINLEN := 2; simple ( 29 ); Value := CARDOUT[1]; C := CHAR ( CARDOUT[2] ); Changed := CB.COUTLEN > 0; Terminated := CB.COUTLEN = 2; END Valuator; PROCEDURE Choice ( Device : CARDINAL; VAR N : CARDINAL; VAR C : CHAR; VAR Choiced, Terminated : BOOLEAN ); BEGIN CARDIN[1] := Device; CB.CINLEN := 1; simple ( 30 ); N := CARDOUT[1]; C := CHAR ( CARDOUT[2] ); Choiced := CB.COUTLEN = 1; Terminated := CB.COUTLEN = 2; END Choice; PROCEDURE String ( Device : CARDINAL; Echo : BOOLEAN; X,Y : CARDINAL; VAR Text : ARRAY OF CHAR; VAR Done : BOOLEAN ); VAR i, m : CARDINAL; BEGIN CARDIN[1] := Device; CARDIN[2] := HIGH ( Text ); CARDIN[3] := ORD ( Echo ); PTSIN[1].X := X; PTSIN[1].Y := Y; WITH CB DO CINLEN := 3; PINLEN := 1; END; simple ( 31 ); m := CB.COUTLEN; Done := m > 0; IF Done THEN FOR i := 1 TO m DO Text[i-1] := CHAR ( CARDOUT[i] ); END; END; Text[m] := CHAR ( 0 ); END String; PROCEDURE InputMode ( Device, Mode : CARDINAL ); BEGIN CARDIN[1] := Device; CARDIN[2] := Mode; CB.CINLEN := 2; simple ( 33 ); END InputMode; BEGIN CursorX := 16384; CursorY := 16384; END GSXIN.