(****************************************************************************) (* *) (* GSX Input Module *) (* ================ *) (* This Module contains all GSX input functions. Input is available from *) (* CRT and (maybe) PLOTTER devices. Not all functions may be implemented. *) (* *) (* 16.5.1988 Wolfgang Muees, Hagenring 22, 3300 Braunschweig *) (* *) (****************************************************************************) CONST Keyboard = 1; Mouse = 2; (* Predefined Input Locator Devices *) locator = 1; valuator = 2; (* Constants for changing input modes *) choice = 3; strings = 4; request = 1; sample = 2; (* Available input modes *) CursorX : INTEGER = 16384; (* Actual cursor ( locator ) position *) CursorY : INTEGER = 16384; VAR Value : INTEGER; (* Actual valuator position *) FUNCTION Tablet : BOOLEAN; (* Returns TRUE if a graphic input, like a mouse, joystick, lightpen etc, is connected to this device. If Tablet is TRUE you can access the locator with Device = Mouse, else you have to use the Device Keyboard. *) BEGIN simplESC ( 16 ); Tablet := ( INTOUT[1] > 0 ); END; PROCEDURE GetLocator ( Device : INTEGER; (* Access Device, gets a coordinate and/or a *) VAR C : CHAR; (* terminator, and report this action. *) VAR Moved, Terminated : BOOLEAN ); BEGIN INTIN[1] := Device; PTSIN[1].X := CursorX; PTSIN[1].Y := CursorY; PTSOUT[1] := PTSIN[1]; (* ...if not moved at all *) WITH CB DO BEGIN IINLEN := 1; PINLEN := 1; END; simple ( 28 ); CursorX := PTSOUT[1].X; CursorY := PTSOUT[1].Y; C := CHAR ( INTOUT[1] ); Moved := CB.POUTLEN > 0; Terminated := CB.IOUTLEN > 0; END; PROCEDURE GetValuator ( VAR C : CHAR; (* Simulates a variable resistor. May be used to *) VAR Changed, (* regulate analog functions like intensities. *) Terminated : BOOLEAN ); BEGIN INTIN[2] := Value; INTOUT[1] := Value; CB.IINLEN := 2; simple ( 29 ); Value := INTOUT[1]; C := CHAR ( INTOUT[2] ); Changed := CB.IOUTLEN > 0; Terminated := CB.IOUTLEN = 2; END; PROCEDURE GetChoice ( Device : INTEGER; (* Request function keys, get a key number or *) VAR N : INTEGER; (* a nonchoice character. *) VAR C : CHAR; VAR Choiced, Terminated : BOOLEAN ); BEGIN INTIN[1] := Device; CB.IINLEN := 1; simple ( 30 ); N := INTOUT[1]; C := CHAR ( INTOUT[2] ); Choiced := CB.IOUTLEN = 1; Terminated := CB.IOUTLEN = 2; END; PROCEDURE GetString ( Device : INTEGER; (* Request input of string, echo string on screen *) Echo : BOOLEAN; (* if desired. *) X,Y : INTEGER; VAR Text : Lstring; VAR Done : BOOLEAN ); VAR i, m : INTEGER; BEGIN INTIN[1] := Device; INTIN[2] := Length ( Text ); INTIN[3] := ORD ( Echo ); PTSIN[1].X := X; PTSIN[1].Y := Y; WITH CB DO BEGIN IINLEN := 3; PINLEN := 1; END; simple ( 31 ); m := CB.IOUTLEN; Done := m > 0; IF Done THEN FOR i := 1 TO m DO Text[i] := CHAR ( INTOUT[i] ); Text[0] := CHAR ( m ); END; PROCEDURE InputMode ( Device, Mode : INTEGER ); (* Sets Device to request or sample. *) BEGIN INTIN[1] := Device; INTIN[2] := Mode; CB.IINLEN := 2; simple ( 33 ); END;