VT52.mod 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. IMPLEMENTATION MODULE VT52;
  2. IMPORT ASCII;
  3. FROM STextIO IMPORT WriteChar, WriteString;
  4. IMPORT IO, termios, FIO;
  5. VAR
  6. savedTerm : termios.TERMIOS;
  7. flushFlag : INTEGER;
  8. haveTerm : BOOLEAN;
  9. PROCEDURE Esc(c : CHAR);
  10. BEGIN
  11. WriteChar(ASCII.esc);
  12. WriteChar(c);
  13. END Esc;
  14. PROCEDURE EnterAnsi; BEGIN Esc("<"); END EnterAnsi;
  15. PROCEDURE SetAltKeypad; BEGIN Esc("="); END SetAltKeypad;
  16. PROCEDURE SetNumKeypad; BEGIN Esc(">"); END SetNumKeypad;
  17. PROCEDURE SetGraphics; BEGIN Esc("F"); END SetGraphics;
  18. PROCEDURE SetAscii; BEGIN Esc("G"); END SetAscii;
  19. PROCEDURE CursorUp; BEGIN Esc("A"); END CursorUp;
  20. PROCEDURE CursorDown; BEGIN Esc("B"); END CursorDown;
  21. PROCEDURE CursorRight; BEGIN Esc("C"); END CursorRight;
  22. PROCEDURE CursorLeft; BEGIN Esc("D"); END CursorLeft;
  23. PROCEDURE CursorHome; BEGIN Esc("H"); END CursorHome;
  24. PROCEDURE CursorPosition(row, col : CARDINAL);
  25. BEGIN
  26. WriteChar(ASCII.esc);
  27. WriteChar("Y");
  28. WriteChar(CHR(row + 31));
  29. WriteChar(CHR(col + 31));
  30. END CursorPosition;
  31. PROCEDURE ReverseFeed; BEGIN Esc("I"); END ReverseFeed;
  32. PROCEDURE ClearToEndOfLine; BEGIN Esc("K"); END ClearToEndOfLine;
  33. PROCEDURE ClearToEndOfScreen; BEGIN Esc("J"); END ClearToEndOfScreen;
  34. PROCEDURE Identify; BEGIN Esc("Z"); END Identify;
  35. PROCEDURE IdentifyResponse;
  36. BEGIN
  37. WriteChar(ASCII.esc);
  38. WriteChar("/");
  39. WriteChar("Z");
  40. END IdentifyResponse;
  41. (* Terminal input mode (cf. Editor/Tests/T17.mod): Unbuffered
  42. saves the termios state and disables line buffering so device
  43. replies can be read char by char; Buffered restores it. *)
  44. PROCEDURE Unbuffered;
  45. BEGIN
  46. flushFlag := termios.tcsflush();
  47. savedTerm := termios.InitTermios();
  48. haveTerm := termios.tcgetattr(FIO.StdIn, savedTerm) # -1;
  49. IO.UnBufferedMode(0, TRUE);
  50. IO.UnBufferedMode(1, TRUE);
  51. END Unbuffered;
  52. PROCEDURE Buffered;
  53. VAR res : INTEGER;
  54. BEGIN
  55. IO.BufferedMode(0, TRUE);
  56. IO.BufferedMode(1, TRUE);
  57. IF haveTerm THEN
  58. haveTerm := FALSE;
  59. res := termios.tcsetattr(FIO.StdIn, flushFlag, savedTerm);
  60. END;
  61. END Buffered;
  62. END VT52.