home *** CD-ROM | disk | FTP | other *** search
- (*************************************************************************)
- (* *)
- (* Programm MiniTerm *)
- (* *)
- (*************************************************************************)
- (* *)
- (* Programmierer ........ Stefan Graf / 4600 Dortmund 1 / BRD *)
- (* *)
- (* Programmiersprache ... Turbo-Pascal 5.0 *)
- (* *)
- (* Erststellt am ........ 02.10.89 *)
- (* *)
- (* letzte Änderung am ... 06.01.90 *)
- (* *)
- (*************************************************************************)
- (* *)
- (* Beschreibung: *)
- (* *)
- (* Test- und Demoprogramm für die Unit SeriellInterface. *)
- (* Terminal-Programm für die serielle Schnittstelle bei 02F8h mit IRQ3. *)
- (* *)
- (*************************************************************************)
-
- PROGRAM MiniTerm;
-
- USES Crt,SeriellInterface;
-
-
- CONST
- WaitHangOn = 5 * 18;
- PortBufferSize = $1FF;
-
- AltH = 35;
- AltX = 45;
- AltC = 46;
- AltS = 31;
- AltB = 48;
-
- (*************************************************************************)
-
- VAR
- TimeCounter : LONGINT ABSOLUTE $40:$6C;
-
- scan,
- kanal : WORD;
-
- wrapline,
- prgstop : BOOLEAN;
-
- taste,
- zeichen : CHAR;
-
- outputline : STRING;
-
-
- (*************************************************************************)
-
- PROCEDURE ScreenWrite (zeichen : CHAR);
-
- BEGIN
- IF (zeichen = #10) THEN BEGIN
- IF NOT (wrapline) THEN Write (#10);
- wrapline:=FALSE;
- END (* of IF THEN *)
- ELSE BEGIN
- CASE zeichen OF
- #13 : Write (#13);
- #7 : Write (#7);
- #8 : Write (#8);
- ELSE BEGIN
- wrapline:=(WhereX = 80);
- Write (zeichen);
- END;
- END; (* of CASE *)
- END; (* of ELSE *)
- END; (* of ScreenWrite *)
-
-
- (*************************************************************************)
-
- PROCEDURE SeriellWriteStr (kanal : WORD ; line : STRING);
-
- VAR
- i : WORD;
-
- BEGIN
- FOR i:=1 TO Length (line) DO SeriellWrite (kanal,line [i]);
- END; (* of SeriellWriteStr *)
-
-
- (*************************************************************************)
-
- PROCEDURE WriteParameter (kanal : WORD);
-
- VAR
- comadr,
- comir,
- portnr,
- buflen : WORD;
-
- numstr : STRING [10];
-
- line : STRING [30];
-
- BEGIN
- GetHandlerInfo (kanal,comadr,comir,buflen);
-
- CASE comadr OF
- $3F8 : portnr:=1;
- $2F8 : portnr:=2;
- $3E8 : portnr:=3;
- $2E8 : portnr:=4;
- ELSE portnr:=0;
- END; (* of CASE *)
-
- line:='│ COM';
- IF (portnr <> 0) THEN
- line:=line + CHR (portnr + 48)
- ELSE line:=line + '?';
- Str (GetBaudRate (kanal):6,numstr);
- line:=line + ' │ ' + numstr;
-
- line:=line + ' │ ' + CHR (GetStopBit (kanal) + 48);
-
- CASE GetParity (kanal) OF
- None : line:=line + 'N';
- Even : line:=line + 'E';
- Odd : line:=line + 'O';
- Mark : line:=line + 'M';
- Space : line:=line + 'S';
- END; (* of CASE *)
- line:=line + CHR (GetWordLen (kanal) + 48) + ' │';
-
- TextAttr:=LightGray * $10;
- GotoXY (1,25);
- ClrEol;
- GotoXY (20,25);
- Write (line);
- TextAttr:=LightGray;
- END; (* of WriteParameter *)
-
-
- (*************************************************************************)
-
- PROCEDURE ModemRun (kanal : WORD);
-
- BEGIN
- RequestToSend (kanal,On);
- END; (* of ModemRun *)
-
-
- (*************************************************************************)
-
- PROCEDURE ModemStop (kanal : WORD);
-
- BEGIN
- RequestToSend (kanal,Off);
- END; (* of ModemStop *)
-
-
- (*************************************************************************)
-
- PROCEDURE Disconnect (kanal : WORD);
-
- VAR
- time : LONGINT;
-
- BEGIN
- IF CarrierDetector (kanal) THEN BEGIN
- DataTerminalReady (kanal,Off);
- time:=TimeCounter + WaitHangOn;
- REPEAT
- UNTIL NOT (CarrierDetector (kanal)) OR (TimeCounter > time);
- DataTerminalReady (kanal,On);
- END (* of IF THEN *)
- ELSE SeriellWriteStr (kanal,'ATH0' + #13);
- END; (* of Disconnect *)
-
-
- (*************************************************************************)
-
- PROCEDURE ShowTransferStatistic (kanal : WORD);
-
- BEGIN
- WriteLn;
- WriteLn ('Transferstatistic of channel ' + CHR ((kanal MOD 10) + 48));
- WriteLn;
- WriteLn ('Interrupt''s ........ ',GetIntCounter (kanal));
- WriteLn ('Received char''s .... ',GetReceiveCounter (kanal));
- WriteLn ('Sended char''s ...... ',GetSendCounter (kanal));
- WriteLn ('Error dedicated .... ',GetErrorCounter (kanal));
- WriteLn ('Overflow deicated .. ',GetOverflowCounter (kanal));
- WriteLn;
- END; (* of ShowTransferStatistik *)
-
- (*************************************************************************)
-
-
- BEGIN
- InstallSeriellHandler ($3E8,4,PortBufferSize,kanal);
- SetParameter (kanal,9600,None,1,8);
-
- SetStatusMask (kanal,CTSInput);
- SetTransmitMask (kanal,RTSOutput);
- DataTerminalReady (kanal,On);
-
- wrapline:=FALSE;
- prgstop:=FALSE;
- outputline:='';
-
- ClrScr;
-
- WriteParameter (kanal);
-
- Window (1,1,80,24);
-
- ClearHandlerStatistic (kanal);
-
- REPEAT
- IF ReceiverReady (kanal) THEN BEGIN
- zeichen:=SeriellRead (kanal);
- ScreenWrite (zeichen);
- END; (* of IF *)
-
- IF KeyPressed THEN BEGIN
- taste:=ReadKey;
- IF (taste = #0) THEN BEGIN
- scan:=ORD (ReadKey);
- CASE scan OF
- AltH : taste:=ReadKey;
- AltX : prgstop:=TRUE;
- AltH : Disconnect (kanal);
- AltC : ClrScr;
- AltS : ShowTransferStatistic (kanal);
- AltB : SendBreak (kanal);
- END; (* of CASE *)
- END (* of IF *)
- ELSE outputline:=outputline + taste;
- END; (* of IF *)
-
- IF (Length (outputline) > 0) AND TransmitterReady (kanal) THEN BEGIN
- SeriellWrite (kanal,outputline [1]);
- Delete (outputline,1,1);
- END; (* of IF *)
-
- UNTIL prgstop;
-
- Window (1,1,80,25);
- ClrScr;
-
- DeInstallSeriellHandler (kanal);
-
- END. (* of Terminal *)