VT100.mod 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999
  1. IMPLEMENTATION MODULE VT100;
  2. IMPORT ASCII;
  3. FROM STextIO IMPORT WriteString, WriteChar, WriteLn, ReadString;
  4. FROM NumberIO IMPORT WriteCard, CardToStr,StrToCard;
  5. FROM Strings IMPORT Concat, Length, String1, Assign, Delete;
  6. FROM NumberIO IMPORT WriteHex;
  7. FROM Delay IMPORT Delay;
  8. IMPORT SplitV1;
  9. IMPORT termios;
  10. (*
  11. Name DASCII.escription ASCII.esc Code
  12. setnl LMN Set new line mode ^[[20h
  13. setappl DECCKM Set cursor key to application ^[[?1h
  14. setansi DECANM Set ANSI (versus VT52) none
  15. setcol DECCOLM Set number of columns to 132 ^[[?3h
  16. setsmooth DECSCLM Set smooth scrolling ^[[?4h
  17. setrevscrn DECSCNM Set reverse video on screen ^[[?5h
  18. setorgrel DECOM Set origin to relative ^[[?6h
  19. setwrap DECAWM Set auto-wrap mode ^[[?7h
  20. setrep DECARM Set auto-repeat mode ^[[?8h
  21. setinter DECINLM Set interlacing mode ^[[?9h
  22. setlf LMN Set line feed mode ^[[20l
  23. setcursor DECCKM Set cursor key to cursor ^[[?1l
  24. setvt52 DECANM Set VT52 (versus ANSI) ^[[?2l
  25. resetcol DECCOLM Set number of columns to 80 ^[[?3l
  26. setjump DECSCLM Set jump scrolling ^[[?4l
  27. setnormscrn DECSCNM Set normal video on screen ^[[?5l
  28. setorgabs DECOM Set origin to absolute ^[[?6l
  29. resetwrap DECAWM Reset auto-wrap mode ^[[?7l
  30. resetrep DECARM Reset auto-repeat mode ^[[?8l
  31. resetinter DECINLM Reset interlacing mode ^[[?9l
  32. altkeypad DECKPAM Set alternate keypad mode ^[=
  33. numkeypad DECKPNM Set numeric keypad mode ^[>
  34. setukg0 Set United Kingdom G0 character set ^[(A
  35. setukg1 Set United Kingdom G1 character set ^[)A
  36. setusg0 Set United States G0 character set ^[(B
  37. setusg1 Set United States G1 character set ^[)B
  38. setspecg0 Set G0 special chars. & line set ^[(0
  39. setspecg1 Set G1 special chars. & line set ^[)0
  40. setaltg0 Set G0 alternate character ROM ^[(1
  41. setaltg1 Set G1 alternate character ROM ^[)1
  42. setaltspecg0 Set G0 alt char ROM and spec. graphics ^[(2
  43. setaltspecg1 Set G1 alt char ROM and spec. graphics ^[)2
  44. setss2 SS2 Set single shift 2 ^[N
  45. setss3 SS3 Set single shift 3 ^[O
  46. modesoff SGR0 Turn off character attributes ^[[m
  47. modesoff SGR0 Turn off character attributes ^[[0m
  48. bold SGR1 Turn bold mode on ^[[1m
  49. lowint SGR2 Turn low intensity mode on ^[[2m
  50. underline SGR4 Turn underline mode on ^[[4m
  51. blink SGR5 Turn blinking mode on ^[[5m
  52. reverse SGR7 Turn reverse video on ^[[7m
  53. invisible SGR8 Turn invisible text mode on ^[[8m
  54. setwin DECSTBM Set top and bottom line#s of a window ^[[<v>;<v>r
  55. cursorup(n) CUU Move cursor up n lines ^[[<n>A
  56. cursordn(n) CUD Move cursor down n lines ^[[<n>B
  57. cursorrt(n) CUF Move cursor right n lines ^[[<n>C
  58. cursorlf(n) CUB Move cursor left n lines ^[[<n>D
  59. cursorhome Move cursor to upper left corner ^[[H
  60. cursorhome Move cursor to upper left corner ^[[;H
  61. cursorpos(v,h) CUP Move cursor to screen location v,h ^[[<v>;<h>H
  62. hvhome Move cursor to upper left corner ^[[f
  63. hvhome Move cursor to upper left corner ^[[;f
  64. hvpos(v,h) CUP Move cursor to screen location v,h ^[[<v>;<h>f
  65. index IND Move/scroll window up one line ^[D
  66. revindex RI Move/scroll window down one line ^[M
  67. nextline NEL Move to next line ^[E
  68. savecursor DECSC Save cursor position and attributes ^[7
  69. restorecursor DECSC Restore cursor position and attributes ^[8
  70. tabset HTS Set a tab at the current column ^[H
  71. tabclr TBC Clear a tab at the current column ^[[g
  72. tabclr TBC Clear a tab at the current column ^[[0g
  73. tabclrall TBC Clear all tabs ^[[3g
  74. dhtop DECDHL Double-height letters, top half ^[#3
  75. dhbot DECDHL Double-height letters, bottom half ^[#4
  76. swsh DECSWL Single width, single height letters ^[#5
  77. dwsh DECDWL Double width, single height letters ^[#6
  78. cleareol EL0 Clear line from cursor right ^[[K
  79. cleareol EL0 Clear line from cursor right ^[[0K
  80. clearbol EL1 Clear line from cursor left ^[[1K
  81. clearline EL2 Clear entire line ^[[2K
  82. cleareos ED0 Clear screen from cursor down ^[[J
  83. cleareos ED0 Clear screen from cursor down ^[[0J
  84. clearbos ED1 Clear screen from cursor up ^[[1J
  85. clearscreen ED2 Clear entire screen ^[[2J
  86. devstat DSR Device status report ^[5n
  87. termok DSR Response: terminal is OK ^[0n
  88. termnok DSR Response: terminal is not OK ^[3n
  89. getcursor DSR Get cursor position ^[6n
  90. cursorpos CPR Response: cursor is at v,h ^[<v>;<h>R
  91. ident DA Identify what terminal type ^[[c
  92. ident DA Identify what terminal type (another) ^[[0c
  93. gettype DA Response: terminal type code n ^[[?1;<n>0c
  94. reset RIS Reset terminal to initial state ^[c
  95. align DECALN Screen alignment display ^[#8
  96. testpu DECTST Confidence power up test ^[[2;1y
  97. testlb DECTST Confidence loopback test ^[[2;2y
  98. testpurep DECTST Repeat power up test ^[[2;9y
  99. testlbrep DECTST Repeat loopback test ^[[2;10y
  100. ledsoff DECLL0 Turn off all four leds ^[[0q
  101. led1 DECLL1 Turn on LED #1 ^[[1q
  102. led2 DECLL2 Turn on LED #2 ^[[2q
  103. led3 DECLL3 Turn on LED #3 ^[[3q
  104. led4 DECLL4 Turn on LED #4 ^[[4q
  105. #
  106. # All codes below are for use in VT52 compatibility mode.
  107. #
  108. setansi Enter/exit ANSI mode (VT52) ^[<
  109. altkeypad Enter alternate keypad mode ^[=
  110. numkeypad Exit alternate keypad mode ^[>
  111. setgr Use special graphics character set ^[F
  112. resetgr Use normal US/UK character set ^[G
  113. cursorup Move cursor up one line ^[A
  114. cursordn Move cursor down one line ^[B
  115. cursorrt Move cursor right one char ^[C
  116. cursorlf Move cursor left one char ^[D
  117. cursorhome Move cursor to upper left corner ^[H
  118. cursorpos(v,h) Move cursor to v,h location ^[<v><h>
  119. revindex Generate a reverse line-feed ^[I
  120. cleareol Erase to end of current line ^[K
  121. cleareos Erase to end of screen ^[J
  122. ident Identify what the terminal is ^[Z
  123. identresp Correct response to ident ^[/Z
  124. *)
  125. (* VT52 compatibility mode *)
  126. TYPE
  127. Array2 = ARRAY[0..1] OF CHAR;
  128. Array3 = ARRAY[0..2] OF CHAR;
  129. Array4 = ARRAY[0..3] OF CHAR;
  130. Array5 = ARRAY[0..4] OF CHAR;
  131. Array6 = ARRAY[0..5] OF CHAR;
  132. Array7 = ARRAY[0..6] OF CHAR;
  133. Array8 = ARRAY[0..7] OF CHAR;
  134. Array10 = ARRAY[0..9] OF CHAR;
  135. VAR
  136. theterminal : termios.TERMIOS;
  137. savedFd : INTEGER;
  138. VAR (* cursor *)
  139. cursorupStr : Array4;
  140. cursordnStr : Array4;
  141. cursorrtStr : Array4;
  142. cursorlfStr : Array4;
  143. cursorhomeStr : Array4;
  144. cursorposStr : ARRAY [0..10] OF CHAR;
  145. revindexStr : Array4;
  146. cleareolStr : Array4;
  147. cleareosStr : Array4;
  148. VAR (* ident *)
  149. identStr : Array4;
  150. identrespStr : Array5;
  151. VAR (* graphic *)
  152. setgrStr : Array4;
  153. resetgrStr : Array4;
  154. VAR (* VT52 mode *)
  155. setansiStr : Array4;
  156. VAR (* keypad switch *)
  157. altkeypadStr : Array4;
  158. numkeypadStr : Array4;
  159. (* VT100 *)
  160. VAR
  161. setnlStr : Array3;
  162. setapplStr : Array3;
  163. setansi1Str : Array3;
  164. setcolStr : Array3;
  165. setsmoothStr : Array3;
  166. setrevscrnStr : Array3;
  167. setorgrelStr : Array3;
  168. setwrapStr : Array3;
  169. setrepStr : Array3;
  170. setinterStr : Array3;
  171. setlfStr : Array3;
  172. setcursorStr : Array3;
  173. setvt52Str : Array3;
  174. resetcolStr : Array3;
  175. setjumpStr : Array3;
  176. setnormscrnStr : Array3;
  177. setorgabsStr : Array3;
  178. resetwrapStr : Array3;
  179. resetrepStr : Array3;
  180. resetinterStr : Array3;
  181. altkeypad1Str : Array3;
  182. numkeypad1Str : Array3;
  183. setukg0Str : Array3;
  184. setukg1Str : Array3;
  185. setusg0Str : Array3;
  186. setusg1Str : Array3;
  187. setspecg0Str : Array3;
  188. setspecg1Str : Array3;
  189. setaltg0Str : Array3;
  190. setaltg1Str : Array3;
  191. setaltspecg0Str : Array3;
  192. setaltspecg1Str : Array3;
  193. setss2Str : Array3;
  194. setss3Str : Array3;
  195. modesoff0Str : Array4;
  196. modesoff1Str : Array5;
  197. boldStr : Array5;
  198. lowintStr : Array5;
  199. underlineStr : Array5;
  200. blinkStr : Array5;
  201. reverseStr : Array5;
  202. invisibleStr : Array5;
  203. italicStr : Array5;
  204. strikethroughStr : Array5;
  205. resetboldStr : Array6;
  206. resetlowintStr : Array6;
  207. resetunderlineStr : Array6;
  208. resetblinkStr : Array6;
  209. resetreverseStr : Array6;
  210. resetinvisibleStr : Array6;
  211. resetitalicStr : Array6;
  212. resetstrikethroughStr : Array6;
  213. setwinStr : Array3;
  214. cursorhome0Str : Array3;
  215. cursorhome1Str : Array5;
  216. hvhome0Str : Array3;
  217. hvhome1Str : Array3;
  218. hvposStr : Array3;
  219. indexStr : Array3;
  220. revindex1Str : Array3;
  221. nextlineStr : Array3;
  222. savecursStr : Array3;
  223. restorecursorStr: Array3;
  224. requestCursorPositionStr : Array5;
  225. tabsetStr : Array3;
  226. tabclr0Str : Array3;
  227. tabclr1Str : Array3;
  228. tabclrallStr : Array3;
  229. dhtopStr : Array3;
  230. dhbotStr : Array3;
  231. swshStr : Array3;
  232. dwshStr : Array3;
  233. cleareol0Str : Array3;
  234. cleareol1Str : Array3;
  235. clearbol2Str : Array3;
  236. clearlineStr : Array3;
  237. cleareos0Str : Array3;
  238. cleareos1Str : Array3;
  239. clearbos2Str : Array3;
  240. clearscreenStr : Array5;
  241. devstatStr : Array3;
  242. termokStr : Array3;
  243. termnokStr : Array3;
  244. getcursorStr : Array3;
  245. cursorpos2Str : Array3;
  246. cursorbnlStr : Array3;
  247. cursorblplStr : Array3;
  248. cursottocolStr : Array3;
  249. ident1Str : Array3;
  250. ident2Str : Array3;
  251. gettypeStr : Array3;
  252. resetStr : Array3;
  253. alignStr : Array3;
  254. testpuStr : Array3;
  255. testlbStr : Array3;
  256. testpurepStr : Array3;
  257. testlbrepStr : Array3;
  258. (* screen modes *)
  259. resetScreenModeStr : Array6;
  260. ledsoffStr : Array3;
  261. led1Str : Array3;
  262. led2Str : Array3;
  263. led3Str : Array3;
  264. led4Str : Array3;
  265. M40x25BWStr : Array6;
  266. M40x25CStr : Array6;
  267. M80x25BWStr : Array6;
  268. M80x25CStr : Array6;
  269. M320x200C4Str : Array6;
  270. M320x200BWStr : Array6;
  271. M640x200BWStr : Array6;
  272. M320x200C256Str : Array6;
  273. M640x200CStr : Array7;
  274. M640x350BWStr : Array7;
  275. M640x350CStr : Array7;
  276. M640x480BWStr : Array7;
  277. M640x480CStr : Array7;
  278. M320x200CStr : Array7;
  279. lineWrappingStr : Array6;
  280. resetLineWrappingStr : Array6;
  281. (* some proprietary extensions *)
  282. makeCursorInvisibleStr : Array7;
  283. makeCursorVisibleStr : Array7;
  284. restoreScreenStr : Array7;
  285. saveScreenStr : Array7;
  286. enableAlternativeBufferStr : Array10;
  287. disableAlternativeBufferStr : Array10;
  288. doubleUnderlineStr : Array6;
  289. resetDoubleUnderlineStr : Array6;
  290. (* colors *)
  291. VAR
  292. i : CARDINAL;
  293. PROCEDURE affiche ( m : ARRAY OF CHAR; s : ARRAY OF CHAR);
  294. BEGIN
  295. WriteString(m);WriteLn;
  296. FOR i := 0 TO Length(s) DO
  297. WriteHex(ORD(s[i]),2);
  298. WriteChar(" ")
  299. END;
  300. WriteLn;
  301. END affiche;
  302. PROCEDURE modesoff; (*OK*)
  303. (* SGR0 Turn off character attributes ^[[m *)
  304. BEGIN
  305. WriteString(modesoff0Str)
  306. END modesoff;
  307. PROCEDURE modesoff1; (*OK*)
  308. (* SGR0 Turn off character attributes ^[[0m *)
  309. BEGIN
  310. WriteString(modesoff1Str)
  311. END modesoff1;
  312. PROCEDURE bold; (*OK*)
  313. (* SGR1 Turn bold mode on ^[[1m *)
  314. BEGIN
  315. WriteString(boldStr);
  316. END bold;
  317. PROCEDURE lowint; (*OK*)
  318. (* SGR2 Turn low intensity mode on ^[[2m *)
  319. BEGIN
  320. WriteString(lowintStr)
  321. END lowint;
  322. PROCEDURE italic; (*OK*)
  323. (* set italic mode ESC[3m *)
  324. BEGIN
  325. WriteString(italicStr)
  326. END italic;
  327. PROCEDURE underline; (*OK*)
  328. (* SGR4 Turn underline mode on ^[[4m *)
  329. BEGIN
  330. WriteString(underlineStr)
  331. END underline;
  332. PROCEDURE blink; (*OK*)
  333. (* SGR5 Turn blinking mode on ^[[5m *)
  334. BEGIN
  335. WriteString(blinkStr)
  336. END blink;
  337. PROCEDURE reverse; (*OK*)
  338. (* SGR7 Turn reverse video on ^[[7m *)
  339. BEGIN
  340. WriteString(reverseStr)
  341. END reverse;
  342. PROCEDURE invisible; (*OK*)
  343. (* SGR8 Turn invisible text mode on ^[[8m *)
  344. BEGIN
  345. WriteString(invisibleStr)
  346. END invisible;
  347. PROCEDURE strikethrough; (*OK*)
  348. BEGIN
  349. WriteString(strikethroughStr)
  350. END strikethrough;
  351. PROCEDURE doubleUnderline;
  352. (* ESC[21m *)
  353. BEGIN
  354. WriteString(doubleUnderlineStr)
  355. END doubleUnderline;
  356. PROCEDURE resetbold; (*OK*)
  357. (* SGR1 Turn bold mode on ^[[21m *)
  358. BEGIN
  359. WriteString(resetboldStr)
  360. END resetbold;
  361. PROCEDURE resetlowint; (*OK*)
  362. (* SGR2 Turn low intensity mode on ^[[22m *)
  363. BEGIN
  364. WriteString(resetlowintStr)
  365. END resetlowint;
  366. PROCEDURE resetitalic; (*OK*)
  367. (* set italic mode ESC[23m *)
  368. BEGIN
  369. WriteString(resetitalicStr)
  370. END resetitalic;
  371. PROCEDURE resetunderline; (*OK*)
  372. (* SGR4 Turn underline mode on ^[[24m *)
  373. BEGIN
  374. WriteString(resetunderlineStr)
  375. END resetunderline;
  376. PROCEDURE resetblink; (*OK*)
  377. (* SGR5 Turn blinking mode on ^[[25m *)
  378. BEGIN
  379. WriteString(resetblinkStr)
  380. END resetblink;
  381. PROCEDURE resetreverse; (*OK*)
  382. (* SGR7 Turn reverse video on ^[[27m *)
  383. BEGIN
  384. WriteString(resetreverseStr)
  385. END resetreverse;
  386. PROCEDURE resetinvisible; (*OK*)
  387. (* SGR8 Turn invisible text mode on ^[[28m *)
  388. BEGIN
  389. WriteString(resetinvisibleStr)
  390. END resetinvisible;
  391. PROCEDURE resetstrikethrough; (*OK*)
  392. (* ESC[9m ESC[29m set strikethrough mode. *)
  393. BEGIN
  394. WriteString(resetstrikethroughStr)
  395. END resetstrikethrough;
  396. PROCEDURE resetDoubleUnderline;
  397. (* ESC[24m. *)
  398. BEGIN
  399. WriteString(resetDoubleUnderlineStr)
  400. END resetDoubleUnderline;
  401. PROCEDURE requestCursorPosition(VAR x,y : CARDINAL);
  402. (* ESC[6n request cursor position (reports as ESC[#;#R) *)
  403. VAR
  404. str : ARRAY [0..15] OF CHAR;
  405. theStructure : SplitV1.Structure;
  406. BEGIN
  407. SplitV1.InitStructure(theStructure);
  408. (* sending the request *)
  409. WriteString(requestCursorPositionStr);
  410. (* quering the answer *)
  411. ReadString(str);
  412. (* extracting coodinates from the answer *)
  413. (*PROCEDURE Delete (VAR stringVar: ARRAY OF CHAR; startIndex, numberToDelete: CARDINAL);
  414. D eletes at most numberToDelete characters from stringVar, starting at position startIndex.
  415. *)
  416. Delete(str,0,2);
  417. Delete(str,Length(str) -1 ,1);
  418. SplitV1.SplitStr(str, ";", theStructure);
  419. StrToCard(theStructure[0].element,x);
  420. StrToCard(theStructure[1].element,y);
  421. END requestCursorPosition;
  422. PROCEDURE cursorhome; (*OK*)
  423. (* Move cursor to upper left corner ^[[H *)
  424. BEGIN
  425. WriteString(cursorhomeStr)
  426. END cursorhome;
  427. PROCEDURE cursorhome1; (*OK*)
  428. (* Move cursor to upper left corner ^[[;H *)
  429. BEGIN
  430. WriteString(cursorhome1Str)
  431. END cursorhome1;
  432. PROCEDURE cursorpos(x,y : CARDINAL); (*OK*)
  433. (* CUP Move cursor to screen location v,h ^[[<v>;<h>H *)
  434. BEGIN
  435. WriteString(cursorblplStr);
  436. END cursorpos;
  437. PROCEDURE clearscreen; (*OK*)
  438. (* ED2 Clear entire screen ^[[2J *)
  439. BEGIN
  440. WriteString(clearscreenStr)
  441. END clearscreen;
  442. PROCEDURE screenMode(mode : screenModes);
  443. VAR
  444. tmpString : Array7;
  445. BEGIN
  446. tmpString := "";
  447. CASE mode OF
  448. M40x25BW: Assign(M40x25BWStr, tmpString); |
  449. M40x25C: Assign(M40x25CStr, tmpString); |
  450. M80x25BW: Assign(M80x25BWStr, tmpString); |
  451. M80x25C: Assign(M80x25CStr, tmpString); |
  452. M320x200C4: Assign(M320x200C4Str, tmpString); |
  453. M320x200BW: Assign(M320x200BWStr, tmpString); |
  454. M640x200BW: Assign(M640x200BWStr, tmpString); |
  455. M320x200C256: Assign(M320x200C256Str, tmpString); |
  456. M640x200C: Assign(M640x200CStr, tmpString); |
  457. M640x350BW: Assign(M640x350BWStr, tmpString); |
  458. M640x350C: Assign(M640x350CStr, tmpString); |
  459. M640x480BW: Assign(M640x480BWStr, tmpString); |
  460. M640x480C: Assign(M640x480CStr, tmpString); |
  461. M320x200C: Assign(M320x200CStr, tmpString);
  462. END;
  463. WriteString(tmpString)
  464. END screenMode;
  465. PROCEDURE resetScreenMode(mode : screenModes);
  466. BEGIN
  467. WriteString(resetScreenModeStr)
  468. END resetScreenMode;
  469. PROCEDURE lineWrapping;
  470. BEGIN
  471. WriteString(lineWrappingStr)
  472. END lineWrapping;
  473. PROCEDURE resetLineWrapping;
  474. BEGIN
  475. WriteString(resetLineWrappingStr)
  476. END resetLineWrapping;
  477. PROCEDURE makeCursorInvisible;
  478. BEGIN
  479. WriteString(makeCursorInvisibleStr)
  480. END makeCursorInvisible;
  481. PROCEDURE makeCursorVisible;
  482. BEGIN
  483. WriteString(makeCursorVisibleStr)
  484. END makeCursorVisible;
  485. PROCEDURE restoreScreen;
  486. BEGIN
  487. WriteString(restoreScreenStr)
  488. END restoreScreen;
  489. PROCEDURE saveScreen;
  490. BEGIN
  491. WriteString(saveScreenStr)
  492. END saveScreen;
  493. PROCEDURE enableAlternativeBuffer;
  494. BEGIN
  495. WriteString(enableAlternativeBufferStr)
  496. END enableAlternativeBuffer;
  497. PROCEDURE disableAlternativeBuffer;
  498. BEGIN
  499. WriteString(disableAlternativeBufferStr)
  500. END disableAlternativeBuffer;
  501. PROCEDURE setAttribut ( attribut : Attribut; front, back : Colors );
  502. (* esc + [ + attribut + ; + front + ; back + m, written directly. *)
  503. BEGIN
  504. WriteChar(ASCII.esc);
  505. WriteChar("[");
  506. (* attribute *)
  507. CASE attribut OF
  508. boldAt: WriteString("1"); |
  509. dimAt: WriteString("2"); |
  510. italicAt: WriteString("3"); |
  511. underlineAt: WriteString("4"); |
  512. blinkingAt: WriteString("5"); |
  513. inverseAt: WriteString("7"); |
  514. hiddenAt: WriteString("8"); |
  515. strikethroughAt: WriteString("9"); |
  516. doubleunderlineAt:WriteString("21");
  517. END;
  518. (* ; *)
  519. WriteChar(";");
  520. (* front *)
  521. CASE front OF
  522. Black: WriteString("30"); |
  523. Red: WriteString("31"); |
  524. Green: WriteString("32"); |
  525. Yellow: WriteString("33"); |
  526. Blue: WriteString("34"); |
  527. Magenta: WriteString("35"); |
  528. Cyan: WriteString("36"); |
  529. White: WriteString("37"); |
  530. Default: WriteString("39"); |
  531. BrightBlack: WriteString("90"); |
  532. BrightRed: WriteString("91"); |
  533. BrightGreen: WriteString("92"); |
  534. BrightYellow: WriteString("93"); |
  535. BrightBlue: WriteString("94"); |
  536. BrighMagenta: WriteString("95"); |
  537. BrightCyan: WriteString("96"); |
  538. BrightWhite: WriteString("97");
  539. END;
  540. WriteChar(";");
  541. (* back *)
  542. CASE back OF
  543. Black: WriteString("40"); |
  544. Red: WriteString("41"); |
  545. Green: WriteString("42"); |
  546. Yellow: WriteString("43"); |
  547. Blue: WriteString("44"); |
  548. Magenta: WriteString("45"); |
  549. Cyan: WriteString("46"); |
  550. White: WriteString("47"); |
  551. Default: WriteString("49"); |
  552. BrightBlack: WriteString("100"); |
  553. BrightRed: WriteString("101"); |
  554. BrightGreen: WriteString("102"); |
  555. BrightYellow: WriteString("103"); |
  556. BrightBlue: WriteString("104"); |
  557. BrighMagenta: WriteString("105"); |
  558. BrightCyan: WriteString("106"); |
  559. BrightWhite: WriteString("107");
  560. END;
  561. (* m *)
  562. WriteChar("m")
  563. END setAttribut;
  564. (*
  565. #
  566. # All codes below are for use in VT52 compatibility mode.
  567. #
  568. *)
  569. PROCEDURE VT52setansi; (*OK*)
  570. (* Enter/exit ANSI mode (VT52) ^[< *)
  571. BEGIN
  572. WriteString(setansiStr)
  573. END VT52setansi ;
  574. PROCEDURE VT52altkeypad;
  575. (* Enter alternate keypad mode ^[= *)
  576. BEGIN
  577. WriteString(altkeypadStr)
  578. END VT52altkeypad;
  579. PROCEDURE VT52numkeypad ;
  580. (* Exit alternate keypad mode ^[> *)
  581. BEGIN
  582. WriteString(numkeypadStr)
  583. END VT52numkeypad;
  584. PROCEDURE VT52setgr ;
  585. (* Use special graphics character set ^[F *)
  586. BEGIN
  587. WriteString(setgrStr)
  588. END VT52setgr;
  589. PROCEDURE VT52resetgr;
  590. (* Use normal US/UK character set ^[G *)
  591. BEGIN
  592. WriteString(resetgrStr)
  593. END VT52resetgr;
  594. PROCEDURE VT52cursorup; (*OK*)
  595. (* Move cursor up one line ^[A *)
  596. BEGIN
  597. WriteString(cursorupStr)
  598. END VT52cursorup;
  599. PROCEDURE VT52cursordn; (*OK*)
  600. (* Move cursor down one line ^[B *)
  601. BEGIN
  602. WriteString(cursordnStr)
  603. END VT52cursordn;
  604. PROCEDURE VT52cursorrt; (*OK*)
  605. (* Move cursor right one char ^[C *)
  606. BEGIN
  607. WriteString(cursorrtStr)
  608. END VT52cursorrt;
  609. PROCEDURE VT52cursorlf; (*OK*)
  610. (* Move cursor left one char ^[D *)
  611. BEGIN
  612. WriteString(cursorlfStr)
  613. END VT52cursorlf;
  614. PROCEDURE VT52cursorhome; (*OK*)
  615. (* Move cursor to upper left corner ^[H *)
  616. BEGIN
  617. WriteString(cursorhomeStr)
  618. END VT52cursorhome;
  619. PROCEDURE VT52cursorpos(y ,x : CARDINAL);
  620. (* Move cursor to v,h location ^[<v><h> *)
  621. VAR
  622. xPos, yPos : CARDINAL;
  623. BEGIN
  624. WriteString(cursorposStr);
  625. xPos := x + 31;
  626. yPos := y + 31;
  627. (* don't forget to flip x and y *)
  628. WriteChar(CHR(yPos));
  629. WriteChar(CHR(xPos))
  630. END VT52cursorpos;
  631. PROCEDURE VT52revindex;
  632. (* Generate a reverse line-feed ^[I *)
  633. BEGIN
  634. WriteString(revindexStr)
  635. END VT52revindex;
  636. PROCEDURE VT52cleareol; (*OK*)
  637. (* Erase to end of current line ^[K *)
  638. BEGIN
  639. WriteString(cleareolStr)
  640. END VT52cleareol;
  641. PROCEDURE VT52cleareos; (*OK*)
  642. (* Erase to end of screen ^[J *)
  643. BEGIN
  644. WriteString(cleareosStr)
  645. END VT52cleareos;
  646. PROCEDURE VT52ident;
  647. (* Identify what the terminal is ^[Z *)
  648. BEGIN
  649. WriteString(identStr)
  650. END VT52ident;
  651. PROCEDURE VT52identresp;
  652. (* Correct response to ident ^[/Z *)
  653. BEGIN
  654. WriteString(identrespStr)
  655. END VT52identresp;
  656. PROCEDURE CloseTerminal;
  657. (* PROCEDURE tcsetattr (fd: INTEGER; option: INTEGER; t: TERMIOS) : INTEGER ; *)
  658. VAR
  659. theResult : INTEGER;
  660. BEGIN
  661. theResult := termios.tcsetattr(savedFd,termios.lflusho,theterminal);
  662. IF theResult <> 0 THEN
  663. WriteString(" Terminal state properly restored !")
  664. ELSE
  665. WriteString("Terminal not properly restored !")
  666. END;
  667. END CloseTerminal;
  668. PROCEDURE InitTerminal;
  669. (* PROCEDURE tcgetattr (fd: INTEGER; t: TERMIOS) : INTEGER ; *)
  670. VAR
  671. theResult : INTEGER;
  672. BEGIN
  673. theterminal := termios.InitTermios();
  674. theResult := termios.tcgetattr(savedFd, theterminal);
  675. IF theResult <> -1 THEN
  676. WriteString(" Terminal state properly saved !")
  677. ELSE
  678. WriteString("Terminal state not properly saved")
  679. END;
  680. termios.cfmakeraw (theterminal) ;
  681. END InitTerminal;
  682. BEGIN
  683. (* VT 52 mode *)
  684. Concat(ASCII.esc,"[<",setansiStr);
  685. Concat(ASCII.esc,"[=",altkeypadStr);
  686. Concat(ASCII.esc,"[>",numkeypadStr);
  687. Concat(ASCII.esc,"[F",setgrStr);
  688. Concat(ASCII.esc,"[G",resetgrStr);
  689. Concat(ASCII.esc,"[A",cursorupStr);
  690. Concat(ASCII.esc,"[B",cursordnStr);
  691. Concat(ASCII.esc,"[C",cursorrtStr);
  692. Concat(ASCII.esc,"[D",cursorlfStr);
  693. Concat(ASCII.esc,"[H",cursorhomeStr);
  694. Concat(ASCII.esc,"[Y",cursorposStr);
  695. Concat(ASCII.esc,"[I",revindexStr);
  696. Concat(ASCII.esc,"[K",cleareolStr);
  697. Concat(ASCII.esc,"[J",cleareosStr);
  698. Concat(ASCII.esc,"[Z",identStr);
  699. Concat(ASCII.esc,"[/Z",identrespStr);
  700. (* VT100 mode *)
  701. Concat(ASCII.esc,"[",setnlStr);
  702. Concat(ASCII.esc,"[",setapplStr);
  703. Concat(ASCII.esc,"[",setansi1Str);
  704. Concat(ASCII.esc,"[",setcolStr);
  705. Concat(ASCII.esc,"[",setsmoothStr);
  706. Concat(ASCII.esc,"[",setrevscrnStr);
  707. Concat(ASCII.esc,"[",setorgrelStr);
  708. Concat(ASCII.esc,"[",setwrapStr);
  709. Concat(ASCII.esc,"[",setrepStr);
  710. Concat(ASCII.esc,"[",setinterStr);
  711. Concat(ASCII.esc,"[",setlfStr);
  712. Concat(ASCII.esc,"[",setcursorStr);
  713. Concat(ASCII.esc,"[",setvt52Str);
  714. Concat(ASCII.esc,"[",resetcolStr);
  715. Concat(ASCII.esc,"[",setjumpStr);
  716. Concat(ASCII.esc,"[",setnormscrnStr);
  717. Concat(ASCII.esc,"[",setorgabsStr);
  718. Concat(ASCII.esc,"[",resetwrapStr);
  719. Concat(ASCII.esc,"[",resetrepStr);
  720. Concat(ASCII.esc,"[",resetinterStr);
  721. Concat(ASCII.esc,"[",altkeypad1Str);
  722. Concat(ASCII.esc,"[",numkeypad1Str);
  723. Concat(ASCII.esc,"[",setukg0Str);
  724. Concat(ASCII.esc,"[",setukg1Str);
  725. Concat(ASCII.esc,"[",setusg0Str);
  726. Concat(ASCII.esc,"[",setusg1Str);
  727. Concat(ASCII.esc,"[",setspecg0Str);
  728. Concat(ASCII.esc,"[",setspecg1Str);
  729. Concat(ASCII.esc,"[",setaltg0Str);
  730. Concat(ASCII.esc,"[",setaltg1Str);
  731. Concat(ASCII.esc,"[",setaltspecg0Str);
  732. Concat(ASCII.esc,"[",setaltspecg1Str);
  733. Concat(ASCII.esc,"[",setss2Str);
  734. Concat(ASCII.esc,"[",setss3Str);
  735. Concat(ASCII.esc,"[m",modesoff0Str);
  736. Concat(ASCII.esc,"[0m",modesoff1Str);
  737. Concat(ASCII.esc,"[1m",boldStr);
  738. Concat(ASCII.esc,"[2m",lowintStr);
  739. Concat(ASCII.esc,"[3m",italicStr);
  740. Concat(ASCII.esc,"[4m",underlineStr);
  741. Concat(ASCII.esc,"[5m",blinkStr);
  742. Concat(ASCII.esc,"[7m",reverseStr);
  743. Concat(ASCII.esc,"[8m",invisibleStr);
  744. Concat(ASCII.esc,"[9m",strikethroughStr);
  745. Concat(ASCII.esc,"[22m",resetboldStr);
  746. Concat(ASCII.esc,"[22m",resetlowintStr);
  747. Concat(ASCII.esc,"[23m",resetitalicStr);
  748. Concat(ASCII.esc,"[24m",resetunderlineStr);
  749. Concat(ASCII.esc,"[25m",resetblinkStr);
  750. Concat(ASCII.esc,"[27m",resetreverseStr);
  751. Concat(ASCII.esc,"[28m",resetinvisibleStr);
  752. Concat(ASCII.esc,"[29m",resetstrikethroughStr);
  753. (*)
  754. Concat(ASCII.esc,"[",setwinStr);
  755. Concat(ASCII.esc,"[",cursorhome0Str);
  756. Concat(ASCII.esc,"[;H",cursorhome1Str);
  757. Concat(ASCII.esc,"[6n",requestCursorPositionStr);
  758. Concat(ASCII.esc,"[",hvhome0Str);
  759. Concat(ASCII.esc,"[",hvhome1Str);
  760. Concat(ASCII.esc,"[",cursorbnlStr);
  761. Concat(ASCII.esc,"[",cursorblplStr);
  762. Concat(ASCII.esc,"[",cursottocolStr);
  763. Concat(ASCII.esc,"[",hvposStr);
  764. Concat(ASCII.esc,"[",indexStr);
  765. Concat(ASCII.esc,"[",revindex1Str);
  766. Concat(ASCII.esc,"[",nextlineStr);
  767. Concat(ASCII.esc,"[",savecursStr);
  768. Concat(ASCII.esc,"[",restorecursorStr);
  769. Concat(ASCII.esc,"[",tabsetStr);
  770. Concat(ASCII.esc,"[",tabclr0Str);
  771. Concat(ASCII.esc,"[",tabclr1Str);
  772. Concat(ASCII.esc,"[",tabclrallStr);
  773. Concat(ASCII.esc,"[",dhtopStr);
  774. Concat(ASCII.esc,"[",dhbotStr);
  775. Concat(ASCII.esc,"[",swshStr);
  776. Concat(ASCII.esc,"[",dwshStr);
  777. Concat(ASCII.esc,"[",cleareol0Str);
  778. Concat(ASCII.esc,"[",cleareol1Str);
  779. Concat(ASCII.esc,"[",clearbol2Str);
  780. Concat(ASCII.esc,"[",clearlineStr);
  781. Concat(ASCII.esc,"[",cleareos0Str);
  782. Concat(ASCII.esc,"[",cleareos1Str);
  783. Concat(ASCII.esc,"[",clearbos2Str);
  784. Concat(ASCII.esc,"[2J",clearscreenStr);
  785. Concat(ASCII.esc,"[",devstatStr);
  786. Concat(ASCII.esc,"[",termokStr);
  787. Concat(ASCII.esc,"[",termnokStr);
  788. Concat(ASCII.esc,"[",getcursorStr);
  789. Concat(ASCII.esc,"[",cursorpos2Str);
  790. Concat(ASCII.esc,"[",ident1Str);
  791. Concat(ASCII.esc,"[",ident2Str);
  792. Concat(ASCII.esc,"[",gettypeStr);
  793. Concat(ASCII.esc,"[",resetStr);
  794. Concat(ASCII.esc,"[",alignStr);
  795. Concat(ASCII.esc,"[",testpuStr);
  796. Concat(ASCII.esc,"[",testlbStr);
  797. Concat(ASCII.esc,"[",testpurepStr);
  798. Concat(ASCII.esc,"[",testlbrepStr);
  799. Concat(ASCII.esc,"[",ledsoffStr);
  800. Concat(ASCII.esc,"[",led1Str);
  801. Concat(ASCII.esc,"[",led2Str);
  802. Concat(ASCII.esc,"[",led3Str);
  803. Concat(ASCII.esc,"[",led4Str);
  804. *)
  805. Concat(ASCII.esc,"[=0h",M40x25BWStr); (* 40 x 25 monochrome (text)*)
  806. Concat(ASCII.esc,"[=1h",M40x25CStr); (* 40 x 25 color (text)*)
  807. Concat(ASCII.esc,"[=2h",M80x25BWStr); (* 80 x 25 monochrome (text)*)
  808. Concat(ASCII.esc,"[=3h",M80x25CStr); (* 80 x 25 color (text)*)
  809. Concat(ASCII.esc,"[=4h",M320x200C4Str); (* 320 x 200 4-color (graphics)*)
  810. Concat(ASCII.esc,"[=5h",M320x200BWStr); (* 320 x 200 monochrome (graphics)*)
  811. Concat(ASCII.esc,"[=6h",M640x200BWStr); (* 640 x 200 monochrome (graphics)*)
  812. Concat(ASCII.esc,"[=7h",resetLineWrappingStr); (* Enables line wrapping*)
  813. (* [=13h "320x200 color" dropped: it overwrote M640x200BWStr and
  814. matches no declared mode variable; see M320x200CStr ([=19h)). *)
  815. Concat(ASCII.esc,"[=14h",M640x200CStr); (* 640 x 200 color (16-color graphics)*)
  816. Concat(ASCII.esc,"[=15h",M640x350BWStr);(* 640 x 350 monochrome (2-color graphics)*)
  817. Concat(ASCII.esc,"[=16h",M640x350CStr); (* 640 x 350 color (16-color graphics)*)
  818. Concat(ASCII.esc,"[=17h",M640x480BWStr); (* 640 x 480 monochrome (2-color graphics)*)
  819. Concat(ASCII.esc,"[=18h",M640x480CStr); (* 640 x 480 color (16-color graphics)*)
  820. Concat(ASCII.esc,"[=19h",M320x200CStr); (* 320 x 200 color (256-color graphics)*)
  821. (* ESC[={value}l *)
  822. Concat(ASCII.esc,"[?25l",makeCursorInvisibleStr); (* ESC[?25l make cursor invisible *)
  823. Concat(ASCII.esc,"[?25h",makeCursorVisibleStr); (* ESC[?25h make cursor visible *)
  824. Concat(ASCII.esc,"[?47l",restoreScreenStr); (* ESC[?47l restore screen *)
  825. Concat(ASCII.esc,"[?47h",saveScreenStr); (* ESC[?47h save screen *)
  826. Concat(ASCII.esc,"[?1049h",enableAlternativeBufferStr); (* ESC[?1049h enables the alternative buffer *)
  827. Concat(ASCII.esc,"[?1049l",disableAlternativeBufferStr); (* ESC[?1049l disables the alternative buffer *)
  828. Concat(ASCII.esc,"[28m",resetinvisibleStr); (* ESC[28m. *)
  829. Concat(ASCII.esc,"[21m",doubleUnderlineStr); (* ESC[21m *)
  830. Concat(ASCII.esc,"[24m",resetDoubleUnderlineStr); (* ESC[24m. *)
  831. END VT100.
  832. (*Debug*)
  833. (* chaine := "toto"; *)
  834. (* FOR i := 0 TO Length(tmpString) DO
  835. WriteHex(ORD(tmpString[i]),2);
  836. WriteChar(" ")
  837. END; *)
  838. (*End Debug*)