terminal.mod 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. (*$V-*)
  2. IMPLEMENTATION MODULE Terminal ;
  3. (* Core library interface *)
  4. IMPORT Str,IO,ASCII ;
  5. VAR
  6. CharBuffered : BOOLEAN ;
  7. SaveChar : CHAR ;
  8. PROCEDURE Read ( VAR v : CHAR ) ;
  9. BEGIN
  10. IF CharBuffered THEN
  11. v := SaveChar ;
  12. CharBuffered := FALSE ;
  13. ELSE
  14. SaveChar := IO.RdKey() ;
  15. v := SaveChar ;
  16. END ;
  17. END Read ;
  18. PROCEDURE ReadAgain ;
  19. BEGIN
  20. CharBuffered := TRUE ;
  21. END ReadAgain ;
  22. PROCEDURE ReadString ( VAR v : ARRAY OF CHAR ) ;
  23. VAR
  24. c : CHAR ;
  25. line : ARRAY[0..255] OF CHAR ;
  26. p : CARDINAL ;
  27. BEGIN
  28. p := 0 ;
  29. REPEAT Read(c) UNTIL c<>' ' ;
  30. LOOP
  31. IF (c=ASCII.bs)OR(c=ASCII.del) THEN
  32. IF p>0 THEN
  33. DEC(p) ;
  34. Write(ASCII.bs);
  35. Write(' ');
  36. Write(ASCII.bs);
  37. END ;
  38. ELSIF (c>' ')AND(c<CHR(80H)) THEN
  39. Write(c) ;
  40. IF p<SIZE(line) THEN
  41. line[p] := c ;
  42. INC(p) ;
  43. END ;
  44. ELSE EXIT ;
  45. END ;
  46. Read(c) ;
  47. END ;
  48. termCH := c ;
  49. IF p<SIZE(line) THEN line[p] := CHR(0) END ;
  50. Str.Copy(v,line) ;
  51. END ReadString ;
  52. PROCEDURE Write ( v : CHAR ) ;
  53. BEGIN
  54. IO.WrChar(v) ;
  55. END Write ;
  56. PROCEDURE WriteLn ;
  57. BEGIN
  58. IO.WrLn ;
  59. END WriteLn ;
  60. PROCEDURE WriteString ( s : ARRAY OF CHAR ) ;
  61. BEGIN
  62. IO.WrStr(s) ;
  63. END WriteString ;
  64. BEGIN
  65. CharBuffered := FALSE ;
  66. SaveChar := CHR(0) ;
  67. END Terminal.
  68.