home *** CD-ROM | disk | FTP | other *** search
- (*-----------------------------------------------------------------------*)
- (* DFKERNEL.INC *)
- (* Dieser Kernteil des Programms enthaelt *)
- (* rechnerunabhaengige Basisroutinen. *)
-
- (* die Prozedur gib_Zeichen_aus bringt ein Zeichen auf den Bildschirm. *)
-
- PROCEDURE gib_Zeichen_aus(Zeichen: CHAR);
-
- BEGIN
- IF Zeichen IN [CR,LF,BELL,' '..'{'] THEN
- Write(Zeichen);
- IF (Zeichen = CR) AND LineFeed THEN
- Write(LF)
- END;
-
-
- (* Procedure sende_Zeichen wartet bis die Schnittstelle frei ist und sendet *)
- (* dann ein Zeichen. *)
-
- PROCEDURE sende_Zeichen(Zeichen : CHAR);
-
- BEGIN
- REPEAT UNTIL OutStatus;
- OutSIO(Zeichen)
- END;
-
-
-
- (* Prozedur Warte_auf_XON wartet auf Senderlaubnis,wenn die Gegenstation
- das Senden abgebrochen hat. *)
-
- PROCEDURE warte_auf_XON;
-
- VAR Zeichen : CHAR;
-
- BEGIN
- Write(INV_EIN,'XOFF',INV_AUS);
- REPEAT
- Zeichen := InpSIO;
- UNTIL (Zeichen = XON) OR KeyPressed
- END;
-
-
-
- (* Funktion IOFEHLER liefert bei I/O-Result in einer Form, die die anderen
- Prozeduren verarbeiten koennen. *)
-
- FUNCTION IOFehler : BOOLEAN;
-
- VAR Fehler : INTEGER;
-
- BEGIN
- Fehler := IOResult;
- IF Fehler <> 0 THEN BEGIN
- WriteLn(BELL,INV_EIN,'I/O-Fehler aufgetreten',INV_AUS);
- Delay(5000);
- IOFehler := TRUE
- END
- ELSE
- IOFehler := FALSE
- END;
-
-
-
- (* die folgenden Funktionen wandeln eine Integerzahl in eine
- HexzahlSTRING um. ( Fuer Intel-Hex-Konvertierung ) *)
-
- FUNCTION hexb(bite: INTEGER) : String2;
-
- VAR highnibble,lownibble : INTEGER;
- hexdigit : ARRAY[0..15] OF CHAR;
-
- BEGIN
- hexdigit := '0123456789ABCDEF';
- highnibble := bite DIV 16;
- lownibble := bite MOD 16;
- hexb := hexdigit[highnibble] + hexdigit[lownibble];
- END;
-
-
-
- FUNCTION hexi(Int : INTEGER): String4;
-
- BEGIN
- hexi := hexb(Hi(Int)) + hexb(Lo(Int));
- END;
-
-
-
- (* Zeichen auf den Buffer schieben und ggf. speichern *)
- PROCEDURE PushBuffer(Zeichen : CHAR);
-
- CONST Geduld = 1000; (* Wie oft gucken ob noch was kommt ? *)
-
- VAR i : INTEGER;
-
- BEGIN
- TextBuf[Zaehler] := Zeichen;
- Zaehler := Succ(Zaehler);
- IF Zaehler > BUFEND - 500 THEN BEGIN
- OutSIO(XOFF);
- WHILE InpStatus DO BEGIN
- TextBuf[Zaehler] := InpSIO;
- Zaehler := Succ(Zaehler)
- END;
- FOR i := 1 TO Geduld DO (* Kommt noch was ? *)
- IF InpStatus THEN BEGIN
- TextBuf[Zaehler] := InpSIO;
- Zaehler := Succ(Zaehler)
- END;
- FOR i := 1 TO Pred(Zaehler) DO BEGIN
- IF TextBuf[i] IN [LF,CR,' '..'}'] THEN
- Write(Logfile,TextBuf[i]);
- IF TextBuf[i] = CR THEN
- WriteLn(Logfile)
- END;
- Zaehler := 1;
- OutSIO(XON)
- END
- END;
-
-
-
- (* Die Prozedur oeffnet ein Logfile unter dem Namen LOGFILE.xxx, wobei xxx
- bei Null beginnend fuer jedes Logfile hochgezaehlt wird. *)
-
- PROCEDURE oeffne_Protokoll;
-
- VAR Name : STRING[14];
- Ext : STRING[3];
- Nummer : INTEGER;
- Fehler : BOOLEAN;
-
- BEGIN
- Nummer := 0;
- REPEAT
- Str(Nummer,Ext);
- Name := Concat('LOGFILE.',Ext);
- Assign(Logfile,Name);
- (*$I-*)
- ReSet(Logfile);
- (*$I+*)
- Fehler := (IOResult <> 0);
- IF NOT Fehler THEN
- Close(Logfile);
- Nummer := Succ(Nummer)
- UNTIL Fehler OR (Nummer > 999);
- IF Nummer > 999 THEN
- Nummer := Nummer - 1000;
- Assign(Logfile,Name);
- ReWrite(Logfile)
- END;
-
-
- (* Ende DFKERNEL.INC *)
- (*---------------------------------------------------------------------------*)
-