rdemo.mod 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. MODULE RDemo;
  2. IMPORT Window,rs,IO,Str,Lib;
  3. TYPE ConnectType = RECORD
  4. ConnectStr : ARRAY [0..15] OF CHAR;
  5. NoCon1Str : ARRAY [0..15] OF CHAR;
  6. NoCon2Str : ARRAY [0..15] OF CHAR;
  7. NoCon3Str : ARRAY [0..15] OF CHAR;
  8. NoCon4Str : ARRAY [0..15] OF CHAR;
  9. NoCon5Str : ARRAY [0..15] OF CHAR;
  10. END;
  11. CONST PortNr = 1; BaudRate = 1200;
  12. WT = Window.WinDef ( 0,0, Window.ScreenWidth-1,15,
  13. Window.White,Window.Black,TRUE,TRUE,FALSE,TRUE,
  14. Window.SingleFrame,Window.White,Window.Black );
  15. WT2 = Window.WinDef ( 0,0, 30,2,
  16. Window.White,Window.Black,TRUE,TRUE,FALSE,TRUE,
  17. Window.SingleFrame,Window.White,Window.Black );
  18. PhoneNr = '583 1200';
  19. HangupStr = '~~~~+++~~~AT H0!';
  20. InitString= 'AT E1 S7=60 S0=0 V1 X1 !~~AT DP '+PhoneNr+'!';
  21. Connect = ConnectType('CONNECT','NO CARRIER','BUSY','NO DIAL TONE',
  22. 'NO ANSWER','');
  23. VAR W,W2 : Window.WinType;
  24. PROCEDURE SendModemContr( str : ARRAY OF CHAR );
  25. VAR i : CARDINAL;
  26. BEGIN
  27. FOR i := 0 TO Str.Length(str)-1 DO
  28. IF str[i]='~' THEN
  29. Lib.Delay(500);
  30. ELSIF str[i]='!' THEN
  31. rs.Send( CHR(13),1 );
  32. ELSIF str[i]='`' THEN
  33. rs.Break( 500 );
  34. ELSE
  35. rs.Send( str[i],1 );
  36. Lib.Delay(100);
  37. END;
  38. END;
  39. END SendModemContr;
  40. PROCEDURE HangUp;
  41. BEGIN
  42. IO.WrLn;
  43. IO.WrStr('Hanging up please wait');
  44. IO.WrLn;
  45. SendModemContr( HangupStr );
  46. IO.WrStr('ok');
  47. END HangUp;
  48. PROCEDURE DoConnect():BOOLEAN;
  49. VAR str : ARRAY[0..100] OF CHAR; p : CARDINAL; c : CHAR;
  50. BEGIN
  51. W2 := Window.Open(WT2);
  52. IO.WrStr('Dialing');
  53. SendModemContr( InitString );
  54. p :=0;
  55. LOOP
  56. IF rs.RxCount()#0 THEN
  57. rs.Receive(str[p],1);
  58. IF str[p]=CHR(13) THEN
  59. str[p] := 0C;
  60. p := 0;
  61. IO.WrLn;
  62. IO.WrStr(str);
  63. IF Str.Pos(str,Connect.ConnectStr)#MAX(CARDINAL) THEN
  64. Window.Close(W2);
  65. RETURN TRUE;
  66. ELSIF (Str.Pos(str,Connect.NoCon1Str)#MAX(CARDINAL)) AND (Connect.NoCon1Str[0]#0C) OR
  67. (Str.Pos(str,Connect.NoCon2Str)#MAX(CARDINAL)) AND (Connect.NoCon2Str[0]#0C) OR
  68. (Str.Pos(str,Connect.NoCon3Str)#MAX(CARDINAL)) AND (Connect.NoCon3Str[0]#0C) OR
  69. (Str.Pos(str,Connect.NoCon4Str)#MAX(CARDINAL)) AND (Connect.NoCon4Str[0]#0C) OR
  70. (Str.Pos(str,Connect.NoCon5Str)#MAX(CARDINAL)) AND (Connect.NoCon5Str[0]#0C) THEN
  71. Lib.Delay(1000);
  72. Window.Close(W2);
  73. RETURN FALSE;
  74. END;
  75. ELSE
  76. p := p+1;
  77. END;
  78. END;
  79. END;
  80. END DoConnect;
  81. VAR c : CHAR;
  82. BEGIN
  83. rs.Install(PortNr);
  84. rs.Init( BaudRate,7,rs.Even,TRUE,FALSE );
  85. W := Window.Open(WT);
  86. IF NOT DoConnect() THEN
  87. IO.WrStr('No connection');
  88. HangUp;
  89. HALT;
  90. END;
  91. LOOP
  92. IF IO.KeyPressed() THEN
  93. c := IO.RdKey();
  94. (*Exit on F2*)
  95. IF (c=0C) AND (CHR(60)=IO.RdKey()) THEN
  96. HangUp;
  97. EXIT
  98. END;
  99. WHILE rs.TxFree()=0 DO END;
  100. rs.Send( c,1 );
  101. END;
  102. IF rs.RxCount()#0 THEN
  103. rs.Receive(c,1);
  104. IO.WrChar(c);
  105. END;
  106. END;
  107. END RDemo.
  108.