|
|
@@ -0,0 +1,207 @@
|
|
|
+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 ^[<v><h> *)
|
|
|
+ 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.
|