TERMINAL.MOD 2.0 KB

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