T15.mod 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. MODULE T15;
  2. IMPORT IO, SYSTEM, NumberIO, Strings, ASCII, STextIO;
  3. FROM Strings IMPORT Concat;
  4. VAR
  5. str : ARRAY[0..15] OF CHAR;
  6. i : CARDINAL;
  7. c : CHAR;
  8. cc : Strings.String1;
  9. cursorposStr : ARRAY[0..15] OF CHAR;
  10. PROCEDURE WriteString( str : ARRAY OF CHAR);
  11. VAR
  12. i : CARDINAL;
  13. BEGIN
  14. FOR i := 1 TO Strings.Length(str) DO
  15. IO.Write(str[i])
  16. END;
  17. END WriteString;
  18. PROCEDURE Card2Str ( x : CARDINAL; VAR str : ARRAY OF CHAR);
  19. BEGIN
  20. IF x < 10 THEN
  21. NumberIO.CardToStr(x,1,str);
  22. ELSIF x < 100 THEN
  23. NumberIO.CardToStr(x,2,str);
  24. ELSE
  25. NumberIO.CardToStr(x,3,str);
  26. END;
  27. END Card2Str;
  28. PROCEDURE cursorpos(x,y : CARDINAL);
  29. VAR
  30. tmpString : ARRAY[0..10] OF CHAR;
  31. tmpString1: ARRAY[0..5] OF CHAR;
  32. tmpString2: Strings.String1;
  33. BEGIN
  34. tmpString := "";
  35. Concat(tmpString,cursorposStr, tmpString);
  36. tmpString1 := "";
  37. Card2Str(y,tmpString1);
  38. Concat(tmpString,tmpString1, tmpString);
  39. tmpString2[0] := ";";
  40. Concat(tmpString, tmpString2,tmpString);
  41. tmpString1 := "";
  42. Card2Str(x,tmpString1);
  43. Concat(tmpString,tmpString1, tmpString);
  44. tmpString2[0] := "H";
  45. Concat(tmpString, tmpString2,tmpString);
  46. WriteString(tmpString);
  47. END cursorpos;
  48. BEGIN
  49. cursorposStr := "";
  50. Concat(cursorposStr,ASCII.esc,cursorposStr);
  51. Concat(cursorposStr,"[",cursorposStr);
  52. cursorpos(35,50);
  53. (* quering the position *)
  54. str := "";
  55. Strings.Concat(str,ASCII.esc,str);
  56. Strings.Concat(str,"[6n", str);
  57. (* PROCEDURE UnBufferedMode (fd: INTEGER; input: BOOLEAN) ; *)
  58. IO.UnBufferedMode(0,TRUE);
  59. IO.UnBufferedMode(1,TRUE);
  60. (* PROCEDURE Read (VAR ch: CHAR) ;
  61. PROCEDURE Write (ch: CHAR) ; *)
  62. (* sending request *)
  63. FOR i := 0 TO 3 DO
  64. IO.Write(str[i])
  65. END;
  66. (* getting answer *)
  67. str := "";
  68. REPEAT
  69. IO.Read(c);
  70. cc[0] := c;
  71. Strings.Concat(str,cc,str);
  72. UNTIL c = "R";
  73. (* changing the escape char to ? to avoid interpretation by the terminal*)
  74. str[0] := "?";
  75. IO.BufferedMode(0,TRUE);
  76. IO.BufferedMode(1,TRUE);
  77. NumberIO.WriteCard(Strings.Length(str),5);
  78. STextIO.WriteLn;
  79. STextIO.WriteString(str);
  80. END T15.