IMPLEMENTATION MODULE VT52; FROM STextIO IMPORT WriteString, WriteChar, WriteLn; FROM NumberIO IMPORT WriteCard; FROM ASCII IMPORT esc; FROM Strings IMPORT Concat, Length, String1; FROM NumberIO IMPORT WriteHex; (* CONST ALTKEYPAD = "="; NUMKEYPAD = ">"; SETGR = "F"; RESETGR = "G"; CURSORUP = "A"; CURSORDN = "B"; CURSORRT = "C"; CURSORLF = "D"; CURSORHOME = "H"; CURSORPOS = "Y"; REVINDEX = "I"; CLEAREOL = "K"; CLEAREOS = "/Z"; IDENTRESP = "KL"; VT52C = "<"; *) VAR altkeypadStr : ARRAY[0..2] OF CHAR; numkeypadStr : ARRAY[0..2] OF CHAR; setgrStr : ARRAY[0..2] OF CHAR; resetgrStr : ARRAY[0..2] OF CHAR; cursorupStr : ARRAY[0..2] OF CHAR; cursordnStr : ARRAY[0..2] OF CHAR; cursorrtStr : ARRAY[0..2] OF CHAR; cursorlfStr : ARRAY[0..2] OF CHAR; cursorhomeStr : ARRAY[0..2] OF CHAR; cursorposStr : ARRAY[0..2] OF CHAR; revindexStr : ARRAY[0..2] OF CHAR; cleareolStr : ARRAY[0..2] OF CHAR; cleareosStr : ARRAY[0..2] OF CHAR; identStr : ARRAY[0..2] OF CHAR; identrespStr : ARRAY[0..2] OF CHAR; clsStr : ARRAY[0..5] OF CHAR; vt52Str : ARRAY[0..3] OF CHAR; VAR i : CARDINAL; PROCEDURE vt52; (* Enter/exit ANSI mode (VT52) ^[< *) BEGIN WriteString(vt52Str) END vt52; PROCEDURE altkeypad; (* Enter alternate keypad mode ^[= *) BEGIN WriteString(altkeypadStr) END altkeypad; PROCEDURE numkeypad; (* Exit alternate keypad mode ^[> *) BEGIN WriteString(numkeypadStr) END numkeypad; PROCEDURE setgr; (* Use special graphics character set ^[F *) BEGIN WriteString(setgrStr) END setgr; PROCEDURE resetgr; (* Use normal US/UK character set ^[G *) BEGIN WriteString(resetgrStr) END resetgr; PROCEDURE cursorup; (* Move cursor up one line ^[A *) BEGIN WriteString(cursorupStr) END cursorup; PROCEDURE cursordn; (* Move cursor down one line ^[B *) BEGIN WriteString(cursordnStr) END cursordn; PROCEDURE cursorrt; (* Move cursor right one char ^[C *) BEGIN WriteString(cursorrtStr) END cursorrt; PROCEDURE cursorlf; (* Move cursor left one char ^[D *) BEGIN WriteString(cursorlfStr) END cursorlf; PROCEDURE cursorhome; (* Move cursor to upper left corner ^[H *) BEGIN WriteString(cursorhomeStr) END cursorhome; PROCEDURE cursorpos(x : CARDINAL; y : CARDINAL); (* Move cursor to v,h location ^[ *) VAR tempString : ARRAY[0..15] OF CHAR; tempString1, tempString2, tempString3 : String1; xPos, yPos : CARDINAL; BEGIN tempString := ""; (* tempString3[0] := "f"; *) Concat(tempString,cursorposStr, tempString); xPos := x + 31; yPos := y + 31; tempString1[0] := CHR(yPos); tempString2[0] := CHR(xPos); Concat(tempString,tempString1, tempString); Concat(tempString,tempString2, tempString); (* Concat(tempString,tempString3, tempString); *) WriteString(tempString); END cursorpos; PROCEDURE revindex; (* Generate a reverse line-feed ^[I *) BEGIN WriteString(revindexStr) END revindex; PROCEDURE cleareol; (* Erase to end of current line ^[K *) BEGIN WriteString(cleareolStr) END cleareol; PROCEDURE cleareos; (* Erase to end of screen ^[J *) BEGIN WriteString(cleareosStr) END cleareos; PROCEDURE ident; (* Identify what the terminal is ^[Z *) BEGIN WriteString(identStr) END ident; PROCEDURE identresp; (* Correct response to ident ^[/Z *) BEGIN WriteString(identrespStr) END identresp; PROCEDURE cls; BEGIN WriteString(clsStr) END cls; BEGIN (**** VT52 *****) Concat(esc,"[<",vt52Str); (**** altkeypad *****) Concat(esc,"[=", altkeypadStr); (**** numkeypad *****) Concat(esc,"[=>",numkeypadStr); (**** setgr *****) Concat(esc,"[F",setgrStr); (**** resetgr *****) Concat(esc,"[G",resetgrStr); (**** cursorup *****) Concat(esc,"[A",cursorupStr); (**** cursordn *****) Concat(esc,"[B",cursordnStr); (**** cursorrt *****) Concat(esc,"[C",cursorrtStr); (**** cursorlf *****) Concat(esc,"[D",cursorlfStr); (**** cursorhome *****) Concat(esc,"[H",cursorhomeStr); (**** cursorpos *****) Concat(esc,"[Y",cursorposStr); (**** revindex *****) Concat(esc,"[I",revindexStr); (**** cleareol *****) Concat(esc,"[K",cleareolStr); (**** cleareos *****) Concat(esc,"[J",cleareosStr); (**** ident *****) Concat(esc,"[Z",identStr); (**** identresp *****) Concat(esc,"[/Z",identrespStr); (**** cls *****) clsStr := ""; Concat(esc,"[H",clsStr); Concat(clsStr,esc,clsStr); Concat(clsStr,"[J",clsStr); (****) END VT52.