T17.mod 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. MODULE T17;
  2. IMPORT IO, Strings, ASCII, NumberIO, termios, FIO, Delay, SplitV1, STextIO;
  3. VAR
  4. cursorposStr : ARRAY [0..15] OF CHAR;
  5. resultStr : ARRAY [0..15] OF CHAR;
  6. tmpString : ARRAY[0..10] OF CHAR;
  7. tmpString1: ARRAY[0..5] OF CHAR;
  8. tmpString2, cc : Strings.String1;
  9. x,y : CARDINAL;
  10. i : CARDINAL;
  11. theTermios : termios.TERMIOS;
  12. TCSAFLUSH : INTEGER;
  13. str : ARRAY [0..15] OF CHAR;
  14. c : CHAR;
  15. theStructure : SplitV1.Structure;
  16. PROCEDURE Card2Str ( x : CARDINAL; VAR str : ARRAY OF CHAR);
  17. BEGIN
  18. IF x < 10 THEN
  19. NumberIO.CardToStr(x,1,str);
  20. ELSIF x < 100 THEN
  21. NumberIO.CardToStr(x,2,str);
  22. ELSE
  23. NumberIO.CardToStr(x,3,str);
  24. END;
  25. END Card2Str;
  26. BEGIN
  27. TCSAFLUSH := termios.tcsflush ();
  28. theTermios := termios.InitTermios();
  29. IF termios.tcgetattr(FIO.StdIn, theTermios) = -1 THEN
  30. HALT
  31. END;
  32. IO.UnBufferedMode(0,TRUE);
  33. IO.UnBufferedMode(1,TRUE);
  34. (* very far positions to get the size of the window *)
  35. (* there is an ioctl() call in the libc which can get the same result *)
  36. (* but I didn't get it to wok for now *)
  37. x := 45;
  38. y := 30;
  39. (* setting the cursor position *)
  40. cursorposStr := "";
  41. Strings.Concat(cursorposStr, ASCII.esc,cursorposStr);
  42. Strings.Concat(cursorposStr, "[",cursorposStr);
  43. tmpString := "";
  44. Strings.Concat(tmpString,cursorposStr, tmpString);
  45. tmpString1 := "";
  46. Card2Str(y,tmpString1);
  47. Strings.Concat(tmpString,tmpString1, tmpString);
  48. tmpString2[0] := ";";
  49. Strings.Concat(tmpString, tmpString2,tmpString);
  50. tmpString1 := "";
  51. Card2Str(x,tmpString1);
  52. Strings.Concat(tmpString,tmpString1, tmpString);
  53. tmpString2[0] := "H";
  54. Strings.Concat(tmpString, tmpString2,tmpString);
  55. FOR i := 0 TO Strings.Length(tmpString) DO
  56. IO.Write(tmpString[i])
  57. END;
  58. (* getting the cursor position *)
  59. (* sending request *)
  60. str := "";
  61. Strings.Concat(str,ASCII.esc,str);
  62. Strings.Concat(str,"[6n", str);
  63. (* sending request *)
  64. FOR i := 0 TO 3 DO
  65. IO.Write(str[i])
  66. END;
  67. (* getting answer *)
  68. str := "";
  69. REPEAT
  70. IO.Read(c);
  71. cc[0] := c;
  72. Strings.Concat(str,cc,str);
  73. UNTIL c = "R";
  74. (* displaying the retour , changing the escape to ? *)
  75. (* str[0] := "?";
  76. FOR i := 0 TO Strings.Length(str) DO
  77. IO.Write(str[i])
  78. END; *)
  79. (* extracting the coordinates *)
  80. Strings.Delete(str,0,2);
  81. Strings.Delete(str,Strings.Length(str) -1 ,1);
  82. SplitV1.SplitStr(str, ";", theStructure);
  83. NumberIO.StrToCard(theStructure[0].element,x);
  84. NumberIO.StrToCard(theStructure[1].element,y);
  85. (* Delay.Delay(2000); *)
  86. IO.BufferedMode(0,TRUE);
  87. IO.BufferedMode(1,TRUE);
  88. IF termios.tcsetattr(FIO.StdIn, TCSAFLUSH, theTermios) = -1 THEN
  89. HALT
  90. END;
  91. NumberIO.WriteCard(x, 5);
  92. NumberIO.WriteCard(y, 5);
  93. (* Delay.Delay(2000); *)
  94. END T17.