home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / communic / miniterm / miniterm.pas next >
Encoding:
Pascal/Delphi Source File  |  1990-07-27  |  6.8 KB  |  253 lines

  1. (*************************************************************************)
  2. (*                                                                       *)
  3. (* Programm MiniTerm                                                     *)
  4. (*                                                                       *)
  5. (*************************************************************************)
  6. (*                                                                       *)
  7. (* Programmierer ........ Stefan Graf / 4600 Dortmund 1 / BRD            *)
  8. (*                                                                       *)
  9. (* Programmiersprache ... Turbo-Pascal 5.0                               *)
  10. (*                                                                       *)
  11. (* Erststellt am ........ 02.10.89                                       *)
  12. (*                                                                       *)
  13. (* letzte Änderung am ... 06.01.90                                       *)
  14. (*                                                                       *)
  15. (*************************************************************************)
  16. (*                                                                       *)
  17. (* Beschreibung:                                                         *)
  18. (*                                                                       *)
  19. (* Test- und Demoprogramm für die Unit SeriellInterface.                 *)
  20. (* Terminal-Programm für die serielle Schnittstelle bei 02F8h mit IRQ3.  *)
  21. (*                                                                       *)
  22. (*************************************************************************)
  23.  
  24. PROGRAM MiniTerm;
  25.  
  26.   USES Crt,SeriellInterface;
  27.  
  28.  
  29.   CONST
  30.     WaitHangOn     = 5 * 18;
  31.     PortBufferSize = $1FF;
  32.  
  33.     AltH  = 35;
  34.     AltX  = 45;
  35.     AltC  = 46;
  36.     AltS  = 31;
  37.     AltB  = 48;
  38.  
  39. (*************************************************************************)
  40.  
  41.   VAR
  42.     TimeCounter : LONGINT ABSOLUTE $40:$6C;
  43.  
  44.     scan,
  45.     kanal      : WORD;
  46.  
  47.     wrapline,
  48.     prgstop    : BOOLEAN;
  49.  
  50.     taste,
  51.     zeichen    : CHAR;
  52.  
  53.     outputline : STRING;
  54.  
  55.  
  56. (*************************************************************************)
  57.  
  58. PROCEDURE ScreenWrite (zeichen : CHAR);
  59.  
  60. BEGIN
  61.   IF (zeichen = #10) THEN BEGIN
  62.     IF NOT (wrapline) THEN Write (#10);
  63.     wrapline:=FALSE;
  64.   END  (* of IF THEN *)
  65.   ELSE BEGIN
  66.     CASE zeichen OF
  67.         #13 : Write (#13);
  68.          #7 : Write (#7);
  69.          #8 : Write (#8);
  70.       ELSE   BEGIN
  71.                wrapline:=(WhereX = 80);
  72.                Write (zeichen);
  73.              END;
  74.     END;  (* of CASE *)
  75.   END;  (* of ELSE *)
  76. END;  (* of ScreenWrite *)
  77.  
  78.  
  79. (*************************************************************************)
  80.  
  81. PROCEDURE SeriellWriteStr (kanal : WORD ; line : STRING);
  82.  
  83.   VAR
  84.     i : WORD;
  85.  
  86. BEGIN
  87.   FOR i:=1 TO Length (line) DO SeriellWrite (kanal,line [i]);
  88. END;  (* of SeriellWriteStr *)
  89.  
  90.  
  91. (*************************************************************************)
  92.  
  93. PROCEDURE WriteParameter (kanal : WORD);
  94.  
  95.   VAR
  96.     comadr,
  97.     comir,
  98.     portnr,
  99.     buflen  : WORD;
  100.  
  101.     numstr  : STRING [10];
  102.  
  103.     line    : STRING [30];
  104.  
  105. BEGIN
  106.   GetHandlerInfo (kanal,comadr,comir,buflen);
  107.  
  108.   CASE comadr OF
  109.     $3F8 : portnr:=1;
  110.     $2F8 : portnr:=2;
  111.     $3E8 : portnr:=3;
  112.     $2E8 : portnr:=4;
  113.     ELSE   portnr:=0;
  114.   END;  (* of CASE *)
  115.  
  116.   line:='│ COM';
  117.   IF (portnr <> 0) THEN
  118.     line:=line + CHR (portnr + 48)
  119.   ELSE line:=line + '?';
  120.   Str (GetBaudRate (kanal):6,numstr);
  121.   line:=line + ' │ ' + numstr;
  122.  
  123.   line:=line + ' │ ' + CHR (GetStopBit (kanal) + 48);
  124.  
  125.   CASE GetParity (kanal) OF
  126.      None : line:=line + 'N';
  127.      Even : line:=line + 'E';
  128.       Odd : line:=line + 'O';
  129.      Mark : line:=line + 'M';
  130.     Space : line:=line + 'S';
  131.   END;  (* of CASE *)
  132.   line:=line + CHR (GetWordLen (kanal) + 48) + ' │';
  133.  
  134.   TextAttr:=LightGray * $10;
  135.   GotoXY (1,25);
  136.   ClrEol;
  137.   GotoXY (20,25);
  138.   Write (line);
  139.   TextAttr:=LightGray;
  140. END;  (* of WriteParameter *)
  141.  
  142.  
  143. (*************************************************************************)
  144.  
  145. PROCEDURE ModemRun (kanal : WORD);
  146.  
  147. BEGIN
  148.   RequestToSend (kanal,On);
  149. END;  (* of ModemRun *)
  150.  
  151.  
  152. (*************************************************************************)
  153.  
  154. PROCEDURE ModemStop (kanal : WORD);
  155.  
  156. BEGIN
  157.   RequestToSend (kanal,Off);
  158. END;  (* of ModemStop *)
  159.  
  160.  
  161. (*************************************************************************)
  162.  
  163. PROCEDURE Disconnect (kanal : WORD);
  164.  
  165.   VAR
  166.     time : LONGINT;
  167.  
  168. BEGIN
  169.   IF CarrierDetector (kanal) THEN BEGIN
  170.     DataTerminalReady (kanal,Off);
  171.     time:=TimeCounter + WaitHangOn;
  172.     REPEAT
  173.     UNTIL NOT (CarrierDetector (kanal)) OR (TimeCounter > time);
  174.     DataTerminalReady (kanal,On);
  175.   END  (* of IF THEN *)
  176.   ELSE SeriellWriteStr (kanal,'ATH0' + #13);
  177. END;  (* of Disconnect *)
  178.  
  179.  
  180. (*************************************************************************)
  181.  
  182. PROCEDURE ShowTransferStatistic (kanal : WORD);
  183.  
  184. BEGIN
  185.   WriteLn;
  186.   WriteLn ('Transferstatistic of channel ' + CHR ((kanal MOD 10) + 48));
  187.   WriteLn;
  188.   WriteLn ('Interrupt''s ........ ',GetIntCounter (kanal));
  189.   WriteLn ('Received char''s .... ',GetReceiveCounter (kanal));
  190.   WriteLn ('Sended char''s ...... ',GetSendCounter (kanal));
  191.   WriteLn ('Error dedicated .... ',GetErrorCounter (kanal));
  192.   WriteLn ('Overflow deicated .. ',GetOverflowCounter (kanal));
  193.   WriteLn;
  194. END;  (* of ShowTransferStatistik *)
  195.  
  196. (*************************************************************************)
  197.  
  198.  
  199. BEGIN
  200.   InstallSeriellHandler ($3E8,4,PortBufferSize,kanal);
  201.   SetParameter (kanal,9600,None,1,8);
  202.  
  203.   SetStatusMask (kanal,CTSInput);
  204.   SetTransmitMask (kanal,RTSOutput);
  205.   DataTerminalReady (kanal,On);
  206.  
  207.   wrapline:=FALSE;
  208.   prgstop:=FALSE;
  209.   outputline:='';
  210.  
  211.   ClrScr;
  212.  
  213.   WriteParameter (kanal);
  214.  
  215.   Window (1,1,80,24);
  216.  
  217.   ClearHandlerStatistic (kanal);
  218.  
  219.   REPEAT
  220.     IF ReceiverReady (kanal) THEN BEGIN
  221.       zeichen:=SeriellRead (kanal);
  222.       ScreenWrite (zeichen);
  223.     END;  (* of IF *)
  224.  
  225.     IF KeyPressed THEN BEGIN
  226.       taste:=ReadKey;
  227.       IF (taste = #0) THEN BEGIN
  228.         scan:=ORD (ReadKey);
  229.         CASE scan OF
  230.           AltH : taste:=ReadKey;
  231.           AltX : prgstop:=TRUE;
  232.           AltH : Disconnect (kanal);
  233.           AltC : ClrScr;
  234.           AltS : ShowTransferStatistic (kanal);
  235.           AltB : SendBreak (kanal);
  236.         END;  (* of CASE *)
  237.       END  (* of IF *)
  238.       ELSE outputline:=outputline + taste;
  239.     END;  (* of IF *)
  240.  
  241.     IF (Length (outputline) > 0) AND TransmitterReady (kanal) THEN BEGIN
  242.       SeriellWrite (kanal,outputline [1]);
  243.       Delete (outputline,1,1);
  244.     END;  (* of IF *)
  245.  
  246.   UNTIL prgstop;
  247.  
  248.   Window (1,1,80,25);
  249.   ClrScr;
  250.  
  251.   DeInstallSeriellHandler (kanal);
  252.  
  253. END.  (* of Terminal *)