VT52.mod 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. IMPLEMENTATION MODULE VT52;
  2. FROM STextIO IMPORT WriteString, WriteChar, WriteLn;
  3. FROM NumberIO IMPORT WriteCard;
  4. FROM ASCII IMPORT esc;
  5. FROM Strings IMPORT Concat, Length, String1;
  6. FROM NumberIO IMPORT WriteHex;
  7. (* CONST
  8. ALTKEYPAD = "=";
  9. NUMKEYPAD = ">";
  10. SETGR = "F";
  11. RESETGR = "G";
  12. CURSORUP = "A";
  13. CURSORDN = "B";
  14. CURSORRT = "C";
  15. CURSORLF = "D";
  16. CURSORHOME = "H";
  17. CURSORPOS = "Y";
  18. REVINDEX = "I";
  19. CLEAREOL = "K";
  20. CLEAREOS = "/Z";
  21. IDENTRESP = "KL";
  22. VT52C = "<"; *)
  23. VAR
  24. altkeypadStr : ARRAY[0..2] OF CHAR;
  25. numkeypadStr : ARRAY[0..2] OF CHAR;
  26. setgrStr : ARRAY[0..2] OF CHAR;
  27. resetgrStr : ARRAY[0..2] OF CHAR;
  28. cursorupStr : ARRAY[0..2] OF CHAR;
  29. cursordnStr : ARRAY[0..2] OF CHAR;
  30. cursorrtStr : ARRAY[0..2] OF CHAR;
  31. cursorlfStr : ARRAY[0..2] OF CHAR;
  32. cursorhomeStr : ARRAY[0..2] OF CHAR;
  33. cursorposStr : ARRAY[0..2] OF CHAR;
  34. revindexStr : ARRAY[0..2] OF CHAR;
  35. cleareolStr : ARRAY[0..2] OF CHAR;
  36. cleareosStr : ARRAY[0..2] OF CHAR;
  37. identStr : ARRAY[0..2] OF CHAR;
  38. identrespStr : ARRAY[0..2] OF CHAR;
  39. clsStr : ARRAY[0..5] OF CHAR;
  40. vt52Str : ARRAY[0..3] OF CHAR;
  41. VAR
  42. i : CARDINAL;
  43. PROCEDURE vt52; (* Enter/exit ANSI mode (VT52) ^[< *)
  44. BEGIN
  45. WriteString(vt52Str)
  46. END vt52;
  47. PROCEDURE altkeypad; (* Enter alternate keypad mode ^[= *)
  48. BEGIN
  49. WriteString(altkeypadStr)
  50. END altkeypad;
  51. PROCEDURE numkeypad; (* Exit alternate keypad mode ^[> *)
  52. BEGIN
  53. WriteString(numkeypadStr)
  54. END numkeypad;
  55. PROCEDURE setgr; (* Use special graphics character set ^[F *)
  56. BEGIN
  57. WriteString(setgrStr)
  58. END setgr;
  59. PROCEDURE resetgr; (* Use normal US/UK character set ^[G *)
  60. BEGIN
  61. WriteString(resetgrStr)
  62. END resetgr;
  63. PROCEDURE cursorup; (* Move cursor up one line ^[A *)
  64. BEGIN
  65. WriteString(cursorupStr)
  66. END cursorup;
  67. PROCEDURE cursordn; (* Move cursor down one line ^[B *)
  68. BEGIN
  69. WriteString(cursordnStr)
  70. END cursordn;
  71. PROCEDURE cursorrt; (* Move cursor right one char ^[C *)
  72. BEGIN
  73. WriteString(cursorrtStr)
  74. END cursorrt;
  75. PROCEDURE cursorlf; (* Move cursor left one char ^[D *)
  76. BEGIN
  77. WriteString(cursorlfStr)
  78. END cursorlf;
  79. PROCEDURE cursorhome; (* Move cursor to upper left corner ^[H *)
  80. BEGIN
  81. WriteString(cursorhomeStr)
  82. END cursorhome;
  83. PROCEDURE cursorpos(x : CARDINAL; y : CARDINAL); (* Move cursor to v,h location ^[<v><h> *)
  84. VAR
  85. tempString : ARRAY[0..15] OF CHAR;
  86. tempString1,
  87. tempString2,
  88. tempString3 : String1;
  89. xPos, yPos : CARDINAL;
  90. BEGIN
  91. tempString := "";
  92. (* tempString3[0] := "f"; *)
  93. Concat(tempString,cursorposStr, tempString);
  94. xPos := x + 31;
  95. yPos := y + 31;
  96. tempString1[0] := CHR(yPos);
  97. tempString2[0] := CHR(xPos);
  98. Concat(tempString,tempString1, tempString);
  99. Concat(tempString,tempString2, tempString);
  100. (* Concat(tempString,tempString3, tempString); *)
  101. WriteString(tempString);
  102. END cursorpos;
  103. PROCEDURE revindex; (* Generate a reverse line-feed ^[I *)
  104. BEGIN
  105. WriteString(revindexStr)
  106. END revindex;
  107. PROCEDURE cleareol; (* Erase to end of current line ^[K *)
  108. BEGIN
  109. WriteString(cleareolStr)
  110. END cleareol;
  111. PROCEDURE cleareos; (* Erase to end of screen ^[J *)
  112. BEGIN
  113. WriteString(cleareosStr)
  114. END cleareos;
  115. PROCEDURE ident; (* Identify what the terminal is ^[Z *)
  116. BEGIN
  117. WriteString(identStr)
  118. END ident;
  119. PROCEDURE identresp; (* Correct response to ident ^[/Z *)
  120. BEGIN
  121. WriteString(identrespStr)
  122. END identresp;
  123. PROCEDURE cls;
  124. BEGIN
  125. WriteString(clsStr)
  126. END cls;
  127. BEGIN
  128. (**** VT52 *****)
  129. Concat(esc,"[<",vt52Str);
  130. (**** altkeypad *****)
  131. Concat(esc,"[=", altkeypadStr);
  132. (**** numkeypad *****)
  133. Concat(esc,"[=>",numkeypadStr);
  134. (**** setgr *****)
  135. Concat(esc,"[F",setgrStr);
  136. (**** resetgr *****)
  137. Concat(esc,"[G",resetgrStr);
  138. (**** cursorup *****)
  139. Concat(esc,"[A",cursorupStr);
  140. (**** cursordn *****)
  141. Concat(esc,"[B",cursordnStr);
  142. (**** cursorrt *****)
  143. Concat(esc,"[C",cursorrtStr);
  144. (**** cursorlf *****)
  145. Concat(esc,"[D",cursorlfStr);
  146. (**** cursorhome *****)
  147. Concat(esc,"[H",cursorhomeStr);
  148. (**** cursorpos *****)
  149. Concat(esc,"[Y",cursorposStr);
  150. (**** revindex *****)
  151. Concat(esc,"[I",revindexStr);
  152. (**** cleareol *****)
  153. Concat(esc,"[K",cleareolStr);
  154. (**** cleareos *****)
  155. Concat(esc,"[J",cleareosStr);
  156. (**** ident *****)
  157. Concat(esc,"[Z",identStr);
  158. (**** identresp *****)
  159. Concat(esc,"[/Z",identrespStr);
  160. (**** cls *****)
  161. clsStr := "";
  162. Concat(esc,"[H",clsStr);
  163. Concat(clsStr,esc,clsStr);
  164. Concat(clsStr,"[J",clsStr);
  165. (****)
  166. END VT52.