RSDEMO.MOD 4.1 KB

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