VT100.mod 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594
  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. Array8 = ARRAY[0..7] OF CHAR;
  133. Array10 = ARRAY[0..9] OF CHAR;
  134. VAR
  135. theterminal : termios.TERMIOS;
  136. savedFd : INTEGER;
  137. VAR (* cursor *)
  138. cursorupStr : Array3;
  139. cursordnStr : Array3;
  140. cursorrtStr : Array3;
  141. cursorlfStr : Array3;
  142. cursorhomeStr : Array3;
  143. cursorposStr : ARRAY [0..10] OF CHAR;
  144. revindexStr : Array3;
  145. cleareolStr : Array3;
  146. cleareosStr : Array3;
  147. VAR (* ident *)
  148. identStr : Array3;
  149. identrespStr : ARRAY [0..3] OF CHAR;
  150. VAR (* graphic *)
  151. setgrStr : Array3;
  152. resetgrStr : Array3;
  153. VAR (* VT52 mode *)
  154. setansiStr : Array3;
  155. VAR (* keypad switch *)
  156. altkeypadStr : Array3;
  157. numkeypadStr : Array3;
  158. (* VT100 *)
  159. VAR
  160. setnlStr : Array3;
  161. setapplStr : Array3;
  162. setansi1Str : Array3;
  163. setcolStr : Array3;
  164. setsmoothStr : Array3;
  165. setrevscrnStr : Array3;
  166. setorgrelStr : Array3;
  167. setwrapStr : Array3;
  168. setrepStr : Array3;
  169. setinterStr : Array3;
  170. setlfStr : Array3;
  171. setcursorStr : Array3;
  172. setvt52Str : Array3;
  173. resetcolStr : Array3;
  174. setjumpStr : Array3;
  175. setnormscrnStr : Array3;
  176. setorgabsStr : Array3;
  177. resetwrapStr : Array3;
  178. resetrepStr : Array3;
  179. resetinterStr : Array3;
  180. altkeypad1Str : Array3;
  181. numkeypad1Str : Array3;
  182. setukg0Str : Array3;
  183. setukg1Str : Array3;
  184. setusg0Str : Array3;
  185. setusg1Str : Array3;
  186. setspecg0Str : Array3;
  187. setspecg1Str : Array3;
  188. setaltg0Str : Array3;
  189. setaltg1Str : Array3;
  190. setaltspecg0Str : Array3;
  191. setaltspecg1Str : Array3;
  192. setss2Str : Array3;
  193. setss3Str : Array3;
  194. modesoff0Str : Array3;
  195. modesoff1Str : Array4;
  196. boldStr : Array4;
  197. lowintStr : Array4;
  198. underlineStr : Array4;
  199. blinkStr : Array4;
  200. reverseStr : Array4;
  201. invisibleStr : Array4;
  202. italicStr : Array4;
  203. strikethroughStr: Array4;
  204. resetboldStr : Array5;
  205. resetlowintStr : Array5;
  206. resetunderlineStr : Array5;
  207. resetblinkStr : Array5;
  208. resetreverseStr : Array5;
  209. resetinvisibleStr : Array5;
  210. resetitalicStr : Array5;
  211. resetstrikethroughStr: Array5;
  212. setwinStr : Array3;
  213. cursorup1Str : Array3;
  214. cursordn1Str : Array3;
  215. cursorrt1Str : Array3;
  216. cursorlf1Str : Array3;
  217. cursorhome0Str : Array3;
  218. cursorhome1Str : Array4;
  219. cursorpos1Str : Array3;
  220. hvhome0Str : Array3;
  221. hvhome1Str : Array3;
  222. hvposStr : Array3;
  223. indexStr : Array3;
  224. revindex1Str : Array3;
  225. nextlineStr : Array3;
  226. savecursStr : Array3;
  227. restorecursorStr: Array3;
  228. requestCursorPositionStr: Array6;
  229. tabsetStr : Array3;
  230. tabclr0Str : Array3;
  231. tabclr1Str : Array3;
  232. tabclrallStr : Array3;
  233. dhtopStr : Array3;
  234. dhbotStr : Array3;
  235. swshStr : Array3;
  236. dwshStr : Array3;
  237. cleareol0Str : Array3;
  238. cleareol1Str : Array3;
  239. clearbol2Str : Array3;
  240. clearlineStr : Array3;
  241. cleareos0Str : Array3;
  242. cleareos1Str : Array3;
  243. clearbos2Str : Array3;
  244. clearscreenStr : Array4;
  245. devstatStr : Array3;
  246. termokStr : Array3;
  247. termnokStr : Array3;
  248. getcursorStr : Array3;
  249. cursorpos2Str : Array3;
  250. cursorbnlStr : Array3;
  251. cursorblplStr : Array3;
  252. cursottocolStr : Array3;
  253. ident1Str : Array3;
  254. ident2Str : Array3;
  255. gettypeStr : Array3;
  256. resetStr : Array3;
  257. alignStr : Array3;
  258. testpuStr : Array3;
  259. testlbStr : Array3;
  260. testpurepStr : Array3;
  261. testlbrepStr : Array3;
  262. (* screen modes *)
  263. resetScreenModeStr : Array6;
  264. ledsoffStr : Array3;
  265. led1Str : Array3;
  266. led2Str : Array3;
  267. led3Str : Array3;
  268. led4Str : Array3;
  269. M40x25BWStr : Array4;
  270. M40x25CStr : Array5;
  271. M80x25BWStr : Array5;
  272. M80x25CStr : Array5;
  273. M320x200C4Str : Array6;
  274. M320x200BWStr : Array6;
  275. M640x200BWStr : Array6;
  276. M320x200C256Str : Array6;
  277. M640x200CStr : Array6;
  278. M640x350BWStr : Array6;
  279. M640x350CStr : Array6;
  280. M640x480BWStr : Array6;
  281. M640x480CStr : Array6;
  282. M320x200CStr : Array6;
  283. lineWrappingStr : Array6;
  284. resetLineWrappingStr : Array6;
  285. (* some proprietary extensions *)
  286. makeCursorInvisibleStr : Array6;
  287. makeCursorVisibleStr : Array6;
  288. restoreScreenStr : Array6;
  289. saveScreenStr : Array6;
  290. enableAlternativeBufferStr : Array10;
  291. disableAlternativeBufferStr : Array10;
  292. doubleUnderlineStr : Array6;
  293. resetDoubleUnderlineStr : Array6;
  294. (* colors *)
  295. setAttributStr : Array2;
  296. VAR
  297. i : CARDINAL;
  298. PROCEDURE Card2Str ( x : CARDINAL; VAR str : ARRAY OF CHAR);
  299. BEGIN
  300. IF x < 10 THEN
  301. CardToStr(x,1,str);
  302. ELSIF x < 100 THEN
  303. CardToStr(x,2,str);
  304. ELSE
  305. CardToStr(x,3,str);
  306. END;
  307. END Card2Str;
  308. PROCEDURE affiche ( m : ARRAY OF CHAR; s : ARRAY OF CHAR);
  309. BEGIN
  310. WriteString(m);WriteLn;
  311. FOR i := 0 TO Length(s) DO
  312. WriteHex(ORD(s[i]),2);
  313. WriteChar(" ")
  314. END;
  315. WriteLn;
  316. END affiche;
  317. (*
  318. PROCEDURE setnl;
  319. (* LMN Set new line mode ^[[20h *)
  320. BEGIN
  321. END ;
  322. PROCEDURE setappl;
  323. (* DECCKM Set cursor key to application ^[[?1h *)
  324. BEGIN
  325. END ;
  326. PROCEDURE setansi;
  327. (* DECANM Set ANSI (versus VT52) none *)
  328. BEGIN
  329. END ;
  330. PROCEDURE setcol;
  331. (* DECCOLM Set number of columns to 132 ^[[?3h *)
  332. BEGIN
  333. END ;
  334. PROCEDURE setsmooth;
  335. (* DECSCLM Set smooth scrolling ^[[?4h *)
  336. BEGIN
  337. END ;
  338. PROCEDURE setrevscrn;
  339. (* DECSCNM Set reverse video on screen ^[[?5h *)
  340. BEGIN
  341. END ;
  342. PROCEDURE setorgrel;
  343. (* DECOM Set origin to relative ^[[?6h *)
  344. BEGIN
  345. END ;
  346. PROCEDURE setwrap;
  347. (* DECAWM Set auto-wrap mode ^[[?7h *)
  348. BEGIN
  349. END ;
  350. PROCEDURE setrep;
  351. (* DECARM Set auto-repeat mode ^[[?8h *)
  352. BEGIN
  353. END ;
  354. PROCEDURE setinter;
  355. (* DECINLM Set interlacing mode ^[[?9h *)
  356. BEGIN
  357. END ;
  358. PROCEDURE setlf;
  359. (* LMN Set line feed mode ^[[20l *)
  360. BEGIN
  361. END ;
  362. PROCEDURE setcursor;
  363. (* DECCKM Set cursor key to cursor ^[[?1l *)
  364. BEGIN
  365. END ;
  366. PROCEDURE setvt52;
  367. (* DECANM Set VT52 (versus ANSI) ^[[?2l *)
  368. BEGIN
  369. END ;
  370. PROCEDURE resetcol;
  371. (* DECCOLM Set number of columns to 80 ^[[?3l *)
  372. BEGIN
  373. END ;
  374. PROCEDURE setjump;
  375. (* DECSCLM Set jump scrolling ^[[?4l *)
  376. BEGIN
  377. END ;
  378. PROCEDURE setnormscrn;
  379. (* DECSCNM Set normal video on screen ^[[?5l *)
  380. BEGIN
  381. END ;
  382. PROCEDURE setorgabs;
  383. (* DECOM Set origin to absolute ^[[?6l *)
  384. BEGIN
  385. END ;
  386. PROCEDURE resetwrap;
  387. (* DECAWM Reset auto-wrap mode ^[[?7l *)
  388. BEGIN
  389. END ;
  390. PROCEDURE resetrep;
  391. (* DECARM Reset auto-repeat mode ^[[?8l *)
  392. BEGIN
  393. END ;
  394. PROCEDURE resetinter;
  395. (* DECINLM Reset interlacing mode ^[[?9l *)
  396. BEGIN
  397. END ;
  398. PROCEDURE altkeypad;
  399. (* DECKPAM Set alternate keypad mode ^[= *)
  400. BEGIN
  401. END ;
  402. PROCEDURE numkeypad;
  403. (* DECKPNM Set numeric keypad mode ^[> *)
  404. BEGIN
  405. END ;
  406. PROCEDURE setukg0;
  407. (* Set United Kingdom G0 character set ^[(A *)
  408. BEGIN
  409. END ;
  410. PROCEDURE setukg1;
  411. (* Set United Kingdom G1 character set ^[)A *)
  412. BEGIN
  413. END ;
  414. PROCEDURE setusg0;
  415. (* Set United States G0 character set ^[(B *)
  416. BEGIN
  417. END ;
  418. PROCEDURE setusg1;
  419. (* Set United States G1 character set ^[)B *)
  420. BEGIN
  421. END ;
  422. PROCEDURE setspecg0;
  423. (* Set G0 special chars. & line set ^[(0 *)
  424. BEGIN
  425. END ;
  426. PROCEDURE setspecg1;
  427. (* Set G1 special chars. & line set ^[)0 *)
  428. BEGIN
  429. END ;
  430. PROCEDURE setaltg0;
  431. (* Set G0 alternate character ROM ^[(1 *)
  432. BEGIN
  433. END ;
  434. PROCEDURE setaltg1;
  435. (* Set G1 alternate character ROM ^[)1 *)
  436. BEGIN
  437. END ;
  438. PROCEDURE setaltspecg0;
  439. (* Set G0 alt char ROM and spec. graphics ^[(2 *)
  440. BEGIN
  441. END ;
  442. PROCEDURE setaltspecg1;
  443. (* Set G1 alt char ROM and spec. graphics ^[)2 *)
  444. BEGIN
  445. END ;
  446. PROCEDURE setss2 ;
  447. (* SS2 Set single shift 2 ^[N *)
  448. BEGIN
  449. END ;
  450. PROCEDURE setss3;
  451. (* SS3 Set single shift 3 ^[O *)
  452. BEGIN
  453. END ;
  454. *)
  455. PROCEDURE modesoff;
  456. (* SGR0 Turn off character attributes ^[[m *)
  457. BEGIN
  458. WriteString(modesoff0Str)
  459. END modesoff;
  460. PROCEDURE modesoff1;
  461. (* SGR0 Turn off character attributes ^[[0m *)
  462. BEGIN
  463. WriteString(modesoff1Str)
  464. END modesoff1;
  465. PROCEDURE bold;
  466. (* SGR1 Turn bold mode on ^[[1m *)
  467. BEGIN
  468. WriteString(boldStr);
  469. END bold;
  470. PROCEDURE lowint;
  471. (* SGR2 Turn low intensity mode on ^[[2m *)
  472. BEGIN
  473. WriteString(lowintStr)
  474. END lowint;
  475. PROCEDURE italic;
  476. (* set italic mode ESC[3m *)
  477. BEGIN
  478. WriteString(italicStr)
  479. END italic;
  480. PROCEDURE underline;
  481. (* SGR4 Turn underline mode on ^[[4m *)
  482. BEGIN
  483. WriteString(underlineStr)
  484. END underline;
  485. PROCEDURE blink;
  486. (* SGR5 Turn blinking mode on ^[[5m *)
  487. BEGIN
  488. WriteString(blinkStr)
  489. END blink;
  490. PROCEDURE reverse;
  491. (* SGR7 Turn reverse video on ^[[7m *)
  492. BEGIN
  493. WriteString(reverseStr)
  494. END reverse;
  495. PROCEDURE invisible;
  496. (* SGR8 Turn invisible text mode on ^[[8m *)
  497. BEGIN
  498. WriteString(invisibleStr)
  499. END invisible;
  500. PROCEDURE strikethrough;
  501. BEGIN
  502. WriteString(strikethroughStr)
  503. END strikethrough;
  504. PROCEDURE doubleUnderline;
  505. (* ESC[21m *)
  506. BEGIN
  507. WriteString(doubleUnderlineStr)
  508. END doubleUnderline;
  509. PROCEDURE resetbold;
  510. (* SGR1 Turn bold mode on ^[[21m *)
  511. BEGIN
  512. WriteString(resetboldStr)
  513. END resetbold;
  514. PROCEDURE resetlowint;
  515. (* SGR2 Turn low intensity mode on ^[[22m *)
  516. BEGIN
  517. WriteString(resetlowintStr)
  518. END resetlowint;
  519. PROCEDURE resetitalic;
  520. (* set italic mode ESC[23m *)
  521. BEGIN
  522. WriteString(resetitalicStr)
  523. END resetitalic;
  524. PROCEDURE resetunderline;
  525. (* SGR4 Turn underline mode on ^[[24m *)
  526. BEGIN
  527. WriteString(resetunderlineStr)
  528. END resetunderline;
  529. PROCEDURE resetblink;
  530. (* SGR5 Turn blinking mode on ^[[25m *)
  531. BEGIN
  532. WriteString(resetblinkStr)
  533. END resetblink;
  534. PROCEDURE resetreverse;
  535. (* SGR7 Turn reverse video on ^[[27m *)
  536. BEGIN
  537. WriteString(resetreverseStr)
  538. END resetreverse;
  539. PROCEDURE resetinvisible;
  540. (* SGR8 Turn invisible text mode on ^[[28m *)
  541. BEGIN
  542. WriteString(resetinvisibleStr)
  543. END resetinvisible;
  544. PROCEDURE resetstrikethrough;
  545. (* ESC[9m ESC[29m set strikethrough mode. *)
  546. BEGIN
  547. WriteString(resetstrikethroughStr)
  548. END resetstrikethrough;
  549. PROCEDURE resetDoubleUnderline;
  550. (* ESC[24m. *)
  551. BEGIN
  552. WriteString(resetDoubleUnderlineStr)
  553. END resetDoubleUnderline;
  554. (*
  555. PROCEDURE setwin;
  556. (* DECSTBM Set top and bottom line#s of a window ^[[<v>;<v>r *)
  557. BEGIN
  558. END ;
  559. *)
  560. PROCEDURE cursorup(n : CARDINAL);
  561. (* CUU Move cursor up n lines ^[[<n>A *)
  562. VAR
  563. tmpString : ARRAY[0..5] OF CHAR;
  564. tmpString1: ARRAY[0..5] OF CHAR;
  565. tmpString2: String1;
  566. BEGIN
  567. tmpString := "";
  568. Card2Str(n,tmpString1);
  569. tmpString2[0] := "A";
  570. Concat(tmpString,cursorup1Str, tmpString);
  571. Concat(tmpString, tmpString1,tmpString);
  572. Concat(tmpString, tmpString2,tmpString);
  573. WriteString(tmpString)
  574. END cursorup;
  575. PROCEDURE cursordn(n : CARDINAL);
  576. (* CUD Move cursor down n lines ^[[<n>B *)
  577. VAR
  578. tmpString : ARRAY[0..5] OF CHAR;
  579. tmpString1: ARRAY[0..5] OF CHAR;
  580. tmpString2: String1;
  581. BEGIN
  582. tmpString := "";
  583. Card2Str(n,tmpString1);
  584. tmpString2[0] := "B";
  585. Concat(tmpString,cursordn1Str, tmpString);
  586. Concat(tmpString, tmpString1,tmpString);
  587. Concat(tmpString, tmpString2,tmpString);
  588. WriteString(tmpString)
  589. END cursordn;
  590. PROCEDURE cursorrt(n : CARDINAL);
  591. (* CUF Move cursor right n lines ^[[<n>C *)
  592. VAR
  593. tmpString : ARRAY[0..5] OF CHAR;
  594. tmpString1: ARRAY[0..5] OF CHAR;
  595. tmpString2: String1;
  596. BEGIN
  597. tmpString := "";
  598. Card2Str(n,tmpString1);
  599. tmpString2[0] := "C";
  600. Concat(tmpString,cursorrt1Str, tmpString);
  601. Concat(tmpString, tmpString1,tmpString);
  602. Concat(tmpString, tmpString2,tmpString);
  603. WriteString(tmpString)
  604. END cursorrt;
  605. PROCEDURE cursor1lf(n : CARDINAL);
  606. (* CUB Move cursor left n lines ^[[<n>D *)
  607. VAR
  608. tmpString : ARRAY[0..5] OF CHAR;
  609. tmpString1: ARRAY[0..5] OF CHAR;
  610. tmpString2: String1;
  611. BEGIN
  612. tmpString := "";
  613. Card2Str(n,tmpString1);
  614. tmpString2[0] := "D";
  615. Concat(tmpString,cursorlf1Str, tmpString);
  616. Concat(tmpString, tmpString1,tmpString);
  617. Concat(tmpString, tmpString2,tmpString);
  618. WriteString(tmpString)
  619. END cursor1lf;
  620. PROCEDURE cursorbnl(n : CARDINAL);
  621. (* ESC[#E moves cursor to beginning of next line, # lines down *)
  622. VAR
  623. tmpString : ARRAY[0..5] OF CHAR;
  624. tmpString1: ARRAY[0..5] OF CHAR;
  625. tmpString2: String1;
  626. BEGIN
  627. tmpString := "";
  628. tmpString2[0] := "E";
  629. Card2Str(n,tmpString1);
  630. Concat(tmpString,tmpString1,tmpString);
  631. Concat(tmpString,tmpString2,tmpString);
  632. WriteString(tmpString)
  633. END cursorbnl;
  634. PROCEDURE cursorblpl(n : CARDINAL);
  635. (* ESC[#F moves cursor to beginning of previous line, # lines up *)
  636. VAR
  637. tmpString : ARRAY[0..5] OF CHAR;
  638. tmpString1: ARRAY[0..5] OF CHAR;
  639. tmpString2: String1;
  640. BEGIN
  641. tmpString := "";
  642. tmpString2[0] := "F";
  643. Card2Str(n,tmpString1);
  644. Concat(tmpString,tmpString1,tmpString);
  645. Concat(tmpString,tmpString2,tmpString);
  646. WriteString(tmpString)
  647. END cursorblpl;
  648. PROCEDURE cursottocol(n : CARDINAL);
  649. (* ESC[#G moves cursor to column # *)
  650. VAR
  651. tmpString : ARRAY[0..5] OF CHAR;
  652. tmpString1: ARRAY[0..5] OF CHAR;
  653. tmpString2: String1;
  654. BEGIN
  655. tmpString := "";
  656. tmpString2[0] := "G";
  657. Card2Str(n,tmpString1);
  658. Concat(tmpString,tmpString1,tmpString);
  659. Concat(tmpString,tmpString2,tmpString);
  660. WriteString(tmpString)
  661. END cursottocol;
  662. PROCEDURE requestCursorPosition(VAR x,y : CARDINAL);
  663. (* ESC[6n request cursor position (reports as ESC[#;#R) *)
  664. VAR
  665. str : ARRAY [0..15] OF CHAR;
  666. theStructure : SplitV1.Structure;
  667. BEGIN
  668. SplitV1.InitStructure(theStructure);
  669. (* sending the request *)
  670. WriteString(requestCursorPositionStr);
  671. (* quering the answer *)
  672. ReadString(str);
  673. (* extracting coodinates from the answer *)
  674. (*PROCEDURE Delete (VAR stringVar: ARRAY OF CHAR; startIndex, numberToDelete: CARDINAL);
  675. D eletes at most numberToDelete characters from stringVar, starting at position startIndex.
  676. *)
  677. Delete(str,0,2);
  678. Delete(str,Length(str) -1 ,1);
  679. SplitV1.SplitStr(str, ";", theStructure);
  680. StrToCard(theStructure[0].element,x);
  681. StrToCard(theStructure[1].element,y);
  682. END requestCursorPosition;
  683. PROCEDURE cursorhome;
  684. (* Move cursor to upper left corner ^[[H *)
  685. BEGIN
  686. WriteString(cursorhomeStr)
  687. END cursorhome;
  688. PROCEDURE cursorhome1;
  689. (* Move cursor to upper left corner ^[[;H *)
  690. BEGIN
  691. WriteString(cursorhome1Str)
  692. END cursorhome1;
  693. PROCEDURE cursorpos(x,y : CARDINAL);
  694. (* CUP Move cursor to screen location v,h ^[[<v>;<h>H *)
  695. VAR
  696. tmpString : ARRAY[0..10] OF CHAR;
  697. tmpString1: ARRAY[0..5] OF CHAR;
  698. tmpString2: String1;
  699. BEGIN
  700. tmpString := "";
  701. (* the preamble *)
  702. Concat(tmpString,cursorpos1Str, tmpString);
  703. (* the first coordinate *)
  704. tmpString1 := "";
  705. Card2Str(y,tmpString1);
  706. Concat(tmpString,tmpString1, tmpString);
  707. (* the separator *)
  708. tmpString2[0] := ";";
  709. Concat(tmpString, tmpString2,tmpString);
  710. (* the second coordinate *)
  711. tmpString1 := "";
  712. Card2Str(x,tmpString1);
  713. Concat(tmpString,tmpString1, tmpString);
  714. (* the final *)
  715. tmpString2[0] := "H";
  716. Concat(tmpString, tmpString2,tmpString);
  717. (*End Debug*)
  718. WriteString(tmpString)
  719. END cursorpos;
  720. (*
  721. PROCEDURE hvhome;
  722. (* Move cursor to upper left corner ^[[f *)
  723. BEGIN
  724. END ;
  725. PROCEDURE hvhome;
  726. (* Move cursor to upper left corner ^[[;f *)
  727. BEGIN
  728. END ;
  729. PROCEDURE hvpos(v,h);
  730. (* CUP Move cursor to screen location v,h ^[[<v>;<h>f *)
  731. BEGIN
  732. END ;
  733. PROCEDURE index;
  734. (* IND Move/scroll window up one line ^[D *)
  735. PROCEDURE revindex;
  736. (* RI Move/scroll window down one line ^[M *)
  737. BEGIN
  738. END ;
  739. PROCEDURE nextline;
  740. (* NEL Move to next line ^[E *)
  741. BEGIN
  742. END ;
  743. PROCEDURE savecursor;
  744. (* DECSC Save cursor position and attributes ^[7 *)
  745. BEGIN
  746. END ;
  747. PROCEDURE restorecursor;
  748. (* DECSC Restore cursor position and attributes ^[8 *)
  749. BEGIN
  750. END ;
  751. PROCEDURE tabset;
  752. (* HTS Set a tab at the current column ^[H *)
  753. BEGIN
  754. END ;
  755. PROCEDURE tabclr;
  756. (* TBC Clear a tab at the current column ^[[g *)
  757. BEGIN
  758. END ;
  759. PROCEDURE tabclr;
  760. (* TBC Clear a tab at the current column ^[[0g *)
  761. BEGIN
  762. END ;
  763. PROCEDURE tabclrall;
  764. (* TBC Clear all tabs ^[[3g *)
  765. BEGIN
  766. END ;
  767. PROCEDURE dhtop;
  768. (* DECDHL Double-height letters, top half ^[#3 *)
  769. BEGIN
  770. END ;
  771. PROCEDURE dhbot;
  772. (* DECDHL Double-height letters, bottom half ^[#4 *)
  773. BEGIN
  774. END ;
  775. PROCEDURE swsh;
  776. (* DECSWL Single width, single height letters ^[#5 *)
  777. BEGIN
  778. END ;
  779. PROCEDURE dwsh;
  780. (* DECDWL Double width, single height letters ^[#6 *)
  781. BEGIN
  782. END ;
  783. PROCEDURE cleareol;
  784. (* EL0 Clear line from cursor right ^[[K *)
  785. BEGIN
  786. END ;
  787. PROCEDURE cleareol;
  788. (* EL0 Clear line from cursor right ^[[0K *)
  789. BEGIN
  790. END ;
  791. PROCEDURE clearbol;
  792. (* EL1 Clear line from cursor left ^[[1K *)
  793. BEGIN
  794. END ;
  795. PROCEDURE clearline;
  796. (* EL2 Clear entire line ^[[2K *)
  797. BEGIN
  798. END ;
  799. PROCEDURE cleareos;
  800. (* ED0 Clear screen from cursor down ^[[J *)
  801. BEGIN
  802. END ;
  803. PROCEDURE cleareos;
  804. (* ED0 Clear screen from cursor down ^[[0J *)
  805. BEGIN
  806. END ;
  807. PROCEDURE clearbos;
  808. (* ED1 Clear screen from cursor up ^[[1J *)
  809. BEGIN
  810. END ;
  811. *)
  812. PROCEDURE clearscreen;
  813. (* ED2 Clear entire screen ^[[2J *)
  814. BEGIN
  815. WriteString(clearscreenStr)
  816. END clearscreen;
  817. (*
  818. PROCEDURE devstat;
  819. (* DSR Device status report ^[5n *)
  820. BEGIN
  821. END ;
  822. PROCEDURE termok;
  823. (* DSR Response: terminal is OK ^[0n *)
  824. BEGIN
  825. END ;
  826. PROCEDURE termnok;
  827. (* DSR Response: terminal is not OK ^[3n *)
  828. BEGIN
  829. END ;
  830. PROCEDURE getcursor;
  831. (* DSR Get cursor position ^[6n *)
  832. BEGIN
  833. END ;
  834. PROCEDURE cursorpos;
  835. (* CPR Response: cursor is at v,h ^[<v>;<h>R *)
  836. BEGIN
  837. END ;
  838. PROCEDURE ident;
  839. (* DA Identify what terminal type ^[[c *)
  840. BEGIN
  841. END ;
  842. PROCEDURE ident;
  843. (* DA Identify what terminal type (another) ^[[0c *)
  844. BEGIN
  845. END ;
  846. PROCEDURE gettype;
  847. (* DA Response: terminal type code n ^[[?1;<n>0c *)
  848. BEGIN
  849. END ;
  850. PROCEDURE reset;
  851. (* RIS Reset terminal to initial state ^[c *)
  852. BEGIN
  853. END ;
  854. PROCEDURE align;
  855. (* DECALN Screen alignment display ^[#8 *)
  856. BEGIN
  857. END ;
  858. PROCEDURE testpu;
  859. (* DECTST Confidence power up test ^[[2;1y *)
  860. BEGIN
  861. END ;
  862. PROCEDURE testlb;
  863. (* DECTST Confidence loopback test ^[[2;2y *)
  864. BEGIN
  865. END ;
  866. PROCEDURE testpurep;
  867. (* DECTST Repeat power up test ^[[2;9y *)
  868. BEGIN
  869. END ;
  870. PROCEDURE testlbrep;
  871. (* DECTST Repeat loopback test ^[[2;10y *)
  872. BEGIN
  873. END ;
  874. PROCEDURE ledsoff;
  875. (* DECLL0 Turn off all four leds ^[[0q *)
  876. BEGIN
  877. END ;
  878. PROCEDURE led1;
  879. (* DECLL1 Turn on LED #1 ^[[1q *)
  880. BEGIN
  881. END ;
  882. PROCEDURE led2;
  883. (* DECLL2 Turn on LED #2 ^[[2q *)
  884. BEGIN
  885. END ;
  886. PROCEDURE led3;
  887. (* DECLL3 Turn on LED #3 ^[[3q *)
  888. BEGIN
  889. END ;
  890. PROCEDURE led4;
  891. (* DECLL4 Turn on LED #4 ^[[4q *)
  892. BEGIN
  893. END ;
  894. *)
  895. PROCEDURE screenMode(mode : screenModes);
  896. VAR
  897. tmpString : Array4;
  898. scrMode : screenModes;
  899. BEGIN
  900. tmpString := "";
  901. CASE scrMode OF
  902. M40x25BW: Assign(M40x25BWStr, tmpString); |
  903. M40x25C: Assign(M80x25BWStr, tmpString); |
  904. M80x25BW: Assign(M80x25BWStr, tmpString); |
  905. M80x25C: Assign(M80x25CStr, tmpString); |
  906. M320x200C4: Assign(M320x200C4Str, tmpString); |
  907. M320x200BW: Assign(M320x200BWStr, tmpString); |
  908. M640x200BW: Assign(M640x200BWStr, tmpString); |
  909. M320x200C256: Assign(M320x200C256Str, tmpString); |
  910. M640x200C: Assign(M640x200CStr, tmpString); |
  911. M640x350BW: Assign(M640x350BWStr, tmpString); |
  912. M640x350C: Assign(M640x350CStr, tmpString); |
  913. M640x480BW: Assign(M640x480BWStr, tmpString); |
  914. M640x480C: Assign(M640x480CStr, tmpString); |
  915. M320x200C: Assign(M320x200CStr, tmpString);
  916. END;
  917. WriteString(tmpString)
  918. END screenMode;
  919. PROCEDURE resetScreenMode(mode : screenModes);
  920. BEGIN
  921. WriteString(resetScreenModeStr)
  922. END resetScreenMode;
  923. PROCEDURE lineWrapping;
  924. BEGIN
  925. WriteString(lineWrappingStr)
  926. END lineWrapping;
  927. PROCEDURE resetLineWrapping;
  928. BEGIN
  929. WriteString(resetLineWrappingStr)
  930. END resetLineWrapping;
  931. PROCEDURE makeCursorInvisible;
  932. BEGIN
  933. WriteString(makeCursorInvisibleStr)
  934. END makeCursorInvisible;
  935. PROCEDURE makeCursorVisible;
  936. BEGIN
  937. WriteString(makeCursorVisibleStr)
  938. END makeCursorVisible;
  939. PROCEDURE restoreScreen;
  940. BEGIN
  941. WriteString(restoreScreenStr)
  942. END restoreScreen;
  943. PROCEDURE saveScreen;
  944. BEGIN
  945. WriteString(saveScreenStr)
  946. END saveScreen;
  947. PROCEDURE enableAlternativeBuffer;
  948. BEGIN
  949. WriteString(enableAlternativeBufferStr)
  950. END enableAlternativeBuffer;
  951. PROCEDURE disableAlternativeBuffer;
  952. BEGIN
  953. WriteString(disableAlternativeBufferStr)
  954. END disableAlternativeBuffer;
  955. PROCEDURE setAttribut ( attribut : Attribut; front, back : Colors );
  956. VAR
  957. tmpString : ARRAY [0..15] OF CHAR;
  958. tmpString1 : ARRAY [0..1] OF CHAR;
  959. tmpString2 : ARRAY [0..2] OF CHAR;
  960. tmpString3 : String1;
  961. tmpString4 : String1;
  962. tmpString5 : String1;
  963. (* esc + [ + attribut + ; + front + ; back + m *)
  964. BEGIN
  965. tmpString1 := "";
  966. tmpString2 := "";
  967. tmpString3[0] := ";";
  968. tmpString4[0] := "m";
  969. (* esc [ *)
  970. Concat(tmpString,setAttributStr,tmpString);
  971. (* attribute *)
  972. CASE attribut OF
  973. boldAt: tmpString5[0] := "1"; |
  974. dimAt: tmpString5[0] := "2"; |
  975. italicAt: tmpString5[0] := "3"; |
  976. underlineAt: tmpString5[0] := "4"; |
  977. blinkingAt: tmpString5[0] := "5"; |
  978. inverseAt: tmpString5[0] := "7"; |
  979. hiddenAt: tmpString5[0] := "8"; |
  980. strikethroughAt: tmpString5[0] := "9";
  981. (* doubleunderlineAt:tmpString2 := "21"; *)
  982. END;
  983. Concat(tmpString,tmpString5,tmpString);
  984. (* special case with double underline *)
  985. IF attribut = doubleunderlineAt THEN
  986. Concat(tmpString,"21",tmpString);
  987. END;
  988. (* ; *)
  989. Concat(tmpString,tmpString3,tmpString);
  990. (* front *)
  991. CASE front OF
  992. Black: tmpString1 := "30"; |
  993. Red: tmpString1 := "31"; |
  994. Green: tmpString1 := "32"; |
  995. Yellow: tmpString1 := "33"; |
  996. Blue: tmpString1 := "34"; |
  997. Magenta: tmpString1 := "35"; |
  998. Cyan: tmpString1 := "36"; |
  999. White: tmpString1 := "37"; |
  1000. Default: tmpString1 := "39"; |
  1001. BrightBlack: tmpString1 := "90"; |
  1002. BrightRed: tmpString1 := "91"; |
  1003. BrightGreen: tmpString1 := "92"; |
  1004. BrightYellow: tmpString1 := "93"; |
  1005. BrightBlue: tmpString1 := "94"; |
  1006. BrighMagenta: tmpString1 := "95"; |
  1007. BrightCyan: tmpString1 := "96"; |
  1008. BrightWhite: tmpString1 := "97";
  1009. END;
  1010. Concat(tmpString,tmpString1,tmpString);
  1011. Concat(tmpString,tmpString3,tmpString);
  1012. (* back *)
  1013. CASE back OF
  1014. Black: tmpString2 := "40"; |
  1015. Red: tmpString2 := "41"; |
  1016. Green: tmpString2 := "42"; |
  1017. Yellow: tmpString2 := "43"; |
  1018. Blue: tmpString2 := "44"; |
  1019. Magenta: tmpString2 := "45"; |
  1020. Cyan: tmpString2:= "46"; |
  1021. White: tmpString2 := "47"; |
  1022. Default: tmpString2 := "49"; |
  1023. BrightBlack: tmpString2 := "100"; |
  1024. BrightRed: tmpString2 := "101"; |
  1025. BrightGreen: tmpString2 := "102"; |
  1026. BrightYellow: tmpString2 := "103"; |
  1027. BrightBlue: tmpString2 := "104"; |
  1028. BrighMagenta: tmpString2 := "105"; |
  1029. BrightCyan: tmpString2 := "106"; |
  1030. BrightWhite: tmpString2 := "107";
  1031. END;
  1032. Concat(tmpString,tmpString2,tmpString);
  1033. (* m *)
  1034. Concat(tmpString,tmpString4,tmpString);
  1035. WriteString(tmpString)
  1036. END setAttribut;
  1037. (*
  1038. #
  1039. # All codes below are for use in VT52 compatibility mode.
  1040. #
  1041. *)
  1042. PROCEDURE VT52setansi;
  1043. (* Enter/exit ANSI mode (VT52) ^[< *)
  1044. BEGIN
  1045. WriteString(setansiStr)
  1046. END VT52setansi ;
  1047. PROCEDURE VT52altkeypad;
  1048. (* Enter alternate keypad mode ^[= *)
  1049. BEGIN
  1050. WriteString(altkeypadStr)
  1051. END VT52altkeypad;
  1052. PROCEDURE VT52numkeypad ;
  1053. (* Exit alternate keypad mode ^[> *)
  1054. BEGIN
  1055. WriteString(numkeypadStr)
  1056. END VT52numkeypad;
  1057. PROCEDURE VT52setgr ;
  1058. (* Use special graphics character set ^[F *)
  1059. BEGIN
  1060. WriteString(setgrStr)
  1061. END VT52setgr;
  1062. PROCEDURE VT52resetgr;
  1063. (* Use normal US/UK character set ^[G *)
  1064. BEGIN
  1065. WriteString(resetgrStr)
  1066. END VT52resetgr;
  1067. PROCEDURE VT52cursorup;
  1068. (* Move cursor up one line ^[A *)
  1069. BEGIN
  1070. WriteString(cursorupStr)
  1071. END VT52cursorup;
  1072. PROCEDURE VT52cursordn;
  1073. (* Move cursor down one line ^[B *)
  1074. BEGIN
  1075. WriteString(cursordnStr)
  1076. END VT52cursordn;
  1077. PROCEDURE VT52cursorrt;
  1078. (* Move cursor right one char ^[C *)
  1079. BEGIN
  1080. WriteString(cursorrtStr)
  1081. END VT52cursorrt;
  1082. PROCEDURE VT52cursorlf;
  1083. (* Move cursor left one char ^[D *)
  1084. BEGIN
  1085. WriteString(cursorlfStr)
  1086. END VT52cursorlf;
  1087. PROCEDURE VT52cursorhome;
  1088. (* Move cursor to upper left corner ^[H *)
  1089. BEGIN
  1090. WriteString(cursorhomeStr)
  1091. END VT52cursorhome;
  1092. PROCEDURE VT52cursorpos(y ,x : CARDINAL);
  1093. (* Move cursor to v,h location ^[<v><h> *)
  1094. VAR
  1095. tmpString : ARRAY [0..10] OF CHAR;
  1096. tmpString1,
  1097. tmpString2,
  1098. tmpString3 : String1;
  1099. xPos, yPos : CARDINAL;
  1100. BEGIN
  1101. Concat(tmpString,cursorposStr,tmpString);
  1102. xPos := x + 31;
  1103. yPos := y + 31;
  1104. (* don't forget to flip x and y *)
  1105. tmpString1[0] := CHR(yPos);
  1106. tmpString2[0] := CHR(xPos);
  1107. (* tmpString3[0] := "H"; *)
  1108. Concat(tmpString,tmpString1, tmpString);
  1109. Concat(tmpString,tmpString2, tmpString);
  1110. (* Concat(tmpString,tmpString3, tmpString); *)
  1111. WriteString(tmpString)
  1112. END VT52cursorpos;
  1113. PROCEDURE VT52revindex;
  1114. (* Generate a reverse line-feed ^[I *)
  1115. BEGIN
  1116. WriteString(revindexStr)
  1117. END VT52revindex;
  1118. PROCEDURE VT52cleareol;
  1119. (* Erase to end of current line ^[K *)
  1120. BEGIN
  1121. WriteString(cleareolStr)
  1122. END VT52cleareol;
  1123. PROCEDURE VT52cleareos;
  1124. (* Erase to end of screen ^[J *)
  1125. BEGIN
  1126. WriteString(cleareosStr)
  1127. END VT52cleareos;
  1128. PROCEDURE VT52ident;
  1129. (* Identify what the terminal is ^[Z *)
  1130. BEGIN
  1131. WriteString(identStr)
  1132. END VT52ident;
  1133. PROCEDURE VT52identresp;
  1134. (* Correct response to ident ^[/Z *)
  1135. BEGIN
  1136. WriteString(identrespStr)
  1137. END VT52identresp;
  1138. PROCEDURE CloseTerminal;
  1139. (* PROCEDURE tcsetattr (fd: INTEGER; option: INTEGER; t: TERMIOS) : INTEGER ; *)
  1140. VAR
  1141. theResult : INTEGER;
  1142. BEGIN
  1143. theResult := termios.tcsetattr(savedFd,termios.lflusho,theterminal);
  1144. IF theResult <> 0 THEN
  1145. WriteString(" Terminal state properly restored !")
  1146. ELSE
  1147. WriteString("Terminal not properly restored !")
  1148. END;
  1149. END CloseTerminal;
  1150. PROCEDURE InitTerminal;
  1151. (* PROCEDURE tcgetattr (fd: INTEGER; t: TERMIOS) : INTEGER ; *)
  1152. VAR
  1153. theResult : INTEGER;
  1154. BEGIN
  1155. theterminal := termios.InitTermios();
  1156. theResult := termios.tcgetattr(savedFd, theterminal);
  1157. IF theResult <> -1 THEN
  1158. WriteString(" Terminal state properly saved !")
  1159. ELSE
  1160. WriteString("Terminal state not properly saved")
  1161. END;
  1162. termios.cfmakeraw (theterminal) ;
  1163. END InitTerminal;
  1164. BEGIN
  1165. (* VT 52 mode *)
  1166. Concat(ASCII.esc,"[<",setansiStr);
  1167. Concat(ASCII.esc,"[=",altkeypadStr);
  1168. Concat(ASCII.esc,"[>",numkeypadStr);
  1169. Concat(ASCII.esc,"[F",setgrStr);
  1170. Concat(ASCII.esc,"[G",resetgrStr);
  1171. Concat(ASCII.esc,"[A",cursorupStr);
  1172. Concat(ASCII.esc,"[B",cursordnStr);
  1173. Concat(ASCII.esc,"[C",cursorrtStr);
  1174. Concat(ASCII.esc,"[D",cursorlfStr);
  1175. Concat(ASCII.esc,"[H",cursorhomeStr);
  1176. Concat(ASCII.esc,"[Y",cursorposStr);
  1177. Concat(ASCII.esc,"[I",revindexStr);
  1178. Concat(ASCII.esc,"[K",cleareolStr);
  1179. Concat(ASCII.esc,"[J",cleareosStr);
  1180. Concat(ASCII.esc,"[Z",identStr);
  1181. Concat(ASCII.esc,"[/Z",identrespStr);
  1182. (* VT100 mode *)
  1183. Concat(ASCII.esc,"[",setnlStr);
  1184. Concat(ASCII.esc,"[",setapplStr);
  1185. Concat(ASCII.esc,"[",setansi1Str);
  1186. Concat(ASCII.esc,"[",setcolStr);
  1187. Concat(ASCII.esc,"[",setsmoothStr);
  1188. Concat(ASCII.esc,"[",setrevscrnStr);
  1189. Concat(ASCII.esc,"[",setorgrelStr);
  1190. Concat(ASCII.esc,"[",setwrapStr);
  1191. Concat(ASCII.esc,"[",setrepStr);
  1192. Concat(ASCII.esc,"[",setinterStr);
  1193. Concat(ASCII.esc,"[",setlfStr);
  1194. Concat(ASCII.esc,"[",setcursorStr);
  1195. Concat(ASCII.esc,"[",setvt52Str);
  1196. Concat(ASCII.esc,"[",resetcolStr);
  1197. Concat(ASCII.esc,"[",setjumpStr);
  1198. Concat(ASCII.esc,"[",setnormscrnStr);
  1199. Concat(ASCII.esc,"[",setorgabsStr);
  1200. Concat(ASCII.esc,"[",resetwrapStr);
  1201. Concat(ASCII.esc,"[",resetrepStr);
  1202. Concat(ASCII.esc,"[",resetinterStr);
  1203. Concat(ASCII.esc,"[",altkeypad1Str);
  1204. Concat(ASCII.esc,"[",numkeypad1Str);
  1205. Concat(ASCII.esc,"[",setukg0Str);
  1206. Concat(ASCII.esc,"[",setukg1Str);
  1207. Concat(ASCII.esc,"[",setusg0Str);
  1208. Concat(ASCII.esc,"[",setusg1Str);
  1209. Concat(ASCII.esc,"[",setspecg0Str);
  1210. Concat(ASCII.esc,"[",setspecg1Str);
  1211. Concat(ASCII.esc,"[",setaltg0Str);
  1212. Concat(ASCII.esc,"[",setaltg1Str);
  1213. Concat(ASCII.esc,"[",setaltspecg0Str);
  1214. Concat(ASCII.esc,"[",setaltspecg1Str);
  1215. Concat(ASCII.esc,"[",setss2Str);
  1216. Concat(ASCII.esc,"[",setss3Str);
  1217. Concat(ASCII.esc,"[m",modesoff0Str);
  1218. Concat(ASCII.esc,"[0m",modesoff1Str);
  1219. Concat(ASCII.esc,"[1m",boldStr);
  1220. Concat(ASCII.esc,"[2m",lowintStr);
  1221. Concat(ASCII.esc,"[3m",italicStr);
  1222. Concat(ASCII.esc,"[4m",underlineStr);
  1223. Concat(ASCII.esc,"[5m",blinkStr);
  1224. Concat(ASCII.esc,"[7m",reverseStr);
  1225. Concat(ASCII.esc,"[8m",invisibleStr);
  1226. Concat(ASCII.esc,"[9m",strikethroughStr);
  1227. Concat(ASCII.esc,"[22m",resetboldStr);
  1228. Concat(ASCII.esc,"[22m",resetlowintStr);
  1229. Concat(ASCII.esc,"[23m",resetitalicStr);
  1230. Concat(ASCII.esc,"[24m",resetunderlineStr);
  1231. Concat(ASCII.esc,"[25m",resetblinkStr);
  1232. Concat(ASCII.esc,"[27m",resetreverseStr);
  1233. Concat(ASCII.esc,"[28m",resetinvisibleStr);
  1234. Concat(ASCII.esc,"[29m",resetstrikethroughStr);
  1235. Concat(ASCII.esc,"[",setwinStr);
  1236. Concat(ASCII.esc,"[",cursorup1Str);
  1237. Concat(ASCII.esc,"[",cursordn1Str);
  1238. Concat(ASCII.esc,"[",cursorrt1Str);
  1239. Concat(ASCII.esc,"[",cursorlf1Str);
  1240. Concat(ASCII.esc,"[",cursorhome0Str);
  1241. Concat(ASCII.esc,"[;H",cursorhome1Str);
  1242. Concat(ASCII.esc,"[",cursorpos1Str);
  1243. Concat(ASCII.esc,"[6n",requestCursorPositionStr);
  1244. Concat(ASCII.esc,"[",hvhome0Str);
  1245. Concat(ASCII.esc,"[",hvhome1Str);
  1246. Concat(ASCII.esc,"[",cursorbnlStr);
  1247. Concat(ASCII.esc,"[",cursorblplStr);
  1248. Concat(ASCII.esc,"[",cursottocolStr);
  1249. Concat(ASCII.esc,"[",hvposStr);
  1250. Concat(ASCII.esc,"[",indexStr);
  1251. Concat(ASCII.esc,"[",revindex1Str);
  1252. Concat(ASCII.esc,"[",nextlineStr);
  1253. Concat(ASCII.esc,"[",savecursStr);
  1254. Concat(ASCII.esc,"[",restorecursorStr);
  1255. Concat(ASCII.esc,"[",tabsetStr);
  1256. Concat(ASCII.esc,"[",tabclr0Str);
  1257. Concat(ASCII.esc,"[",tabclr1Str);
  1258. Concat(ASCII.esc,"[",tabclrallStr);
  1259. Concat(ASCII.esc,"[",dhtopStr);
  1260. Concat(ASCII.esc,"[",dhbotStr);
  1261. Concat(ASCII.esc,"[",swshStr);
  1262. Concat(ASCII.esc,"[",dwshStr);
  1263. Concat(ASCII.esc,"[",cleareol0Str);
  1264. Concat(ASCII.esc,"[",cleareol1Str);
  1265. Concat(ASCII.esc,"[",clearbol2Str);
  1266. Concat(ASCII.esc,"[",clearlineStr);
  1267. Concat(ASCII.esc,"[",cleareos0Str);
  1268. Concat(ASCII.esc,"[",cleareos1Str);
  1269. Concat(ASCII.esc,"[",clearbos2Str);
  1270. Concat(ASCII.esc,"[2J",clearscreenStr);
  1271. Concat(ASCII.esc,"[",devstatStr);
  1272. Concat(ASCII.esc,"[",termokStr);
  1273. Concat(ASCII.esc,"[",termnokStr);
  1274. Concat(ASCII.esc,"[",getcursorStr);
  1275. Concat(ASCII.esc,"[",cursorpos2Str);
  1276. Concat(ASCII.esc,"[",ident1Str);
  1277. Concat(ASCII.esc,"[",ident2Str);
  1278. Concat(ASCII.esc,"[",gettypeStr);
  1279. Concat(ASCII.esc,"[",resetStr);
  1280. Concat(ASCII.esc,"[",alignStr);
  1281. Concat(ASCII.esc,"[",testpuStr);
  1282. Concat(ASCII.esc,"[",testlbStr);
  1283. Concat(ASCII.esc,"[",testpurepStr);
  1284. Concat(ASCII.esc,"[",testlbrepStr);
  1285. Concat(ASCII.esc,"[",ledsoffStr);
  1286. Concat(ASCII.esc,"[",led1Str);
  1287. Concat(ASCII.esc,"[",led2Str);
  1288. Concat(ASCII.esc,"[",led3Str);
  1289. Concat(ASCII.esc,"[",led4Str);
  1290. Concat(ASCII.esc,"[=0h",M40x25BWStr); (* 40 x 25 monochrome (text)*)
  1291. Concat(ASCII.esc,"[=1h",M40x25CStr); (* 40 x 25 color (text)*)
  1292. Concat(ASCII.esc,"[=2h",M40x25CStr); (* 80 x 25 monochrome (text)*)
  1293. Concat(ASCII.esc,"[=3h",M80x25CStr); (* 80 x 25 color (text)*)
  1294. Concat(ASCII.esc,"[=4h",M320x200C4Str); (* 320 x 200 4-color (graphics)*)
  1295. Concat(ASCII.esc,"[=5h",M320x200BWStr); (* 320 x 200 monochrome (graphics)*)
  1296. Concat(ASCII.esc,"[=6h",M640x200BWStr); (* 640 x 200 monochrome (graphics)*)
  1297. Concat(ASCII.esc,"[=7h",resetLineWrappingStr); (* Enables line wrapping*)
  1298. Concat(ASCII.esc,"[=13h",M640x200BWStr); (* 320 x 200 color (graphics)*)
  1299. Concat(ASCII.esc,"[=14h",M640x200CStr); (* 640 x 200 color (16-color graphics)*)
  1300. Concat(ASCII.esc,"[=15h",M640x200CStr); (* 640 x 350 monochrome (2-color graphics)*)
  1301. Concat(ASCII.esc,"[=16h",M640x350CStr); (* 640 x 350 color (16-color graphics)*)
  1302. Concat(ASCII.esc,"[=17h",M640x480BWStr); (* 640 x 480 monochrome (2-color graphics)*)
  1303. Concat(ASCII.esc,"[=18h",M640x480CStr); (* 640 x 480 color (16-color graphics)*)
  1304. Concat(ASCII.esc,"[=19h",M320x200CStr); (* 320 x 200 color (256-color graphics)*)
  1305. (* ESC[={value}l *)
  1306. Concat(ASCII.esc,"[?25l",makeCursorInvisibleStr); (* ESC[?25l make cursor invisible *)
  1307. Concat(ASCII.esc,"[?25h",makeCursorVisibleStr); (* ESC[?25h make cursor visible *)
  1308. Concat(ASCII.esc,"[?47l",restoreScreenStr); (* ESC[?47l restore screen *)
  1309. Concat(ASCII.esc,"[?47h",saveScreenStr); (* ESC[?47h save screen *)
  1310. Concat(ASCII.esc,"[?1049h",enableAlternativeBufferStr); (* ESC[?1049h enables the alternative buffer *)
  1311. Concat(ASCII.esc,"[?1049l",disableAlternativeBufferStr); (* ESC[?1049l disables the alternative buffer *)
  1312. Concat(ASCII.esc,"[21m",resetinvisibleStr); (* ESC[21m *)
  1313. Concat(ASCII.esc,"[24m",resetDoubleUnderlineStr); (* ESC[24m. *)
  1314. Concat(ASCII.esc,"[", setAttributStr);
  1315. END VT100.
  1316. (*Debug*)
  1317. (* chaine := "toto"; *)
  1318. (* FOR i := 0 TO Length(tmpString) DO
  1319. WriteHex(ORD(tmpString[i]),2);
  1320. WriteChar(" ")
  1321. END; *)
  1322. (*End Debug*)