home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / sonderh1 / dfdatei.inc < prev    next >
Text File  |  1987-06-10  |  4KB  |  148 lines

  1. (*---------------------------------------------------------------------------*)
  2. (*                 DFDATEI.INC (Datei senden und empfangen)                  *)
  3.  
  4. OVERLAY PROCEDURE Datei_Senden;
  5.  
  6. VAR Name          : STRING[16];
  7.     Zeichen       : CHAR;
  8.     Dummy         : BOOLEAN;
  9.     Datei1        : TEXT;
  10.  
  11. BEGIN
  12.   ClrScr;
  13.   WriteLn(Inv_Ein,'Datei Senden',Inv_Aus);
  14.   WriteLn;
  15.   REPEAT
  16.     Write('Namen der zu sendenden Datei (Abbruch mit leerer Eingabe):');
  17.     ReadLn(Name);
  18.     IF Length(Name) > 0 THEN BEGIN
  19.       Assign(Datei1,Name);
  20. (*$I-*)   (* IO-Kontrolle abschalten *)
  21.       ReSet(Datei1)
  22.     END
  23. (*$I+*)
  24.   UNTIL (NOT IOFEHLER) OR (Length(Name) = 0) ;
  25.  
  26.   IF Length(Name) > 0 THEN BEGIN
  27.     REPEAT UNTIL OutStatus;
  28.     OutSIO(XON);
  29.     WHILE NOT Eof(Datei1) DO BEGIN
  30.       IF InpStatus THEN BEGIN
  31.         Zeichen := INPSIO;
  32.         IF Zeichen = XOFF THEN
  33.           warte_auf_XON;
  34.         gib_Zeichen_aus(Zeichen);
  35.         IF Protokoll_An THEN
  36.           PushBuffer(Zeichen)
  37.       END;
  38.       IF Eoln(Datei1) THEN BEGIN
  39.         ReadLn(Datei1);
  40.         Zeichen := CR
  41.       END
  42.       ELSE
  43.         Read(Datei1,Zeichen);
  44.       REPEAT UNTIL OutStatus;
  45.       OutSIO(Zeichen);
  46.       IF NOT(VollDuplex) THEN
  47.         gib_Zeichen_aus(Zeichen);
  48.       IF Zeichen = CR THEN
  49.           Delay(Zeit)
  50.     END;
  51.     OutSIO(CTRL_Z);
  52. (*$I-*);
  53.     Close(Datei1);
  54. (*$I+*)
  55.     Dummy := IOFEHLER
  56.   END
  57. END;
  58.  
  59.  
  60. (* Prozedur DATEI_EMPFANGEN sichert eine beliebig lange Datei auf Diskette
  61.    nur der Diskettenplatz begrenzt die Groesse, Vorsicht!!, Diskettenfehler
  62.    werden nicht abgefangen *)
  63.  
  64.  
  65. OVERLAY PROCEDURE Datei_Empfangen;
  66.  
  67. CONST SBSize  = 1024; (* Datei gepuffert empfangen *)
  68.  
  69. VAR ch, ConZeichen,
  70.     Zeichen          : CHAR;
  71.     Name             : STRING[14];
  72.     i, SBZaehler     : INTEGER;
  73.     Dummy            : BOOLEAN;
  74.     Datei1           : TEXT;
  75.     SmallBuf         : ARRAY[1..SBSize] OF CHAR;
  76.  
  77. BEGIN
  78.   ClrScr;
  79.   WriteLn(Inv_Ein,' Datei empfangen ',Inv_Aus);
  80.   WriteLn; WriteLn;
  81.   SBZaehler := 1;
  82.   ConZeichen := ' ';
  83.   REPEAT
  84.     Write (' Namen der zu empfangenden Datei (Abbruch mit leerer Eingabe): ');
  85.     ReadLn(Name);
  86.     IF Length(Name) > 0 THEN BEGIN
  87.       Assign(Datei1,Name);
  88. (*$I-*)
  89.       ReWrite (Datei1)
  90. (*$I+*)
  91.     END;
  92.   UNTIL (NOT IOFEHLER) OR (Length(Name) = 0);
  93.   IF Length(Name) > 0 THEN BEGIN
  94.     WriteLn(' Starten sie bitte die Uebertragung mit ',
  95.             'dem vereinbarten Startzeichen !'           );
  96.     WriteLn;
  97.     REPEAT
  98.       IF KeyPressed THEN BEGIN
  99.         IF SBZaehler < SBSize - 20 THEN
  100.           ConZeichen := GetKey
  101.         ELSE ConZeichen := XOFF;
  102.         IF NOT VollDuplex THEN
  103.           Write (ConZeichen);
  104.         IF (NOT VollDuplex) AND Protokoll_An THEN
  105.           PushBuffer(ConZeichen);
  106.         IF ConZeichen <> ESC THEN BEGIN
  107.           IF OutStatus THEN
  108.             OutSIO(ConZeichen);
  109.           IF (ConZeichen = CR)  AND (LineFeed) THEN BEGIN
  110.             IF OutStatus THEN
  111.                 OutSIO(LF);
  112.             IF Protokoll_An AND (NOT VollDuplex) THEN
  113.               PushBuffer(LF)
  114.           END
  115.         END
  116.       END;
  117.       IF InpStatus THEN BEGIN
  118.         Zeichen := INPSIO;
  119.         gib_Zeichen_aus(Zeichen);
  120.         SmallBuf[SBZaehler] := Zeichen;
  121.         SBZaehler := Succ(SBZaehler)
  122.       END
  123.       ELSE
  124.         IF SBZaehler > SBSize - 20 THEN BEGIN
  125.           FOR i := 1 TO Pred(SBZaehler) DO BEGIN
  126.             IF SmallBuf[i] IN [LF,CR,' '..DEL] THEN
  127.                   Write(Datei1,SmallBuf[i]);
  128.             IF SmallBuf[i] = CR then
  129.               WriteLn(Datei1)
  130.           END;
  131.           SBZaehler := 1;
  132.           IF OutStatus THEN
  133.             OutSIO(XON)
  134.         END;
  135.     UNTIL (ConZeichen = ESC) OR (Zeichen = CTRL_Z);
  136.     FOR i := 1 TO Pred(SBZaehler) DO BEGIN
  137.       IF SmallBuf[i] IN [LF,CR,' '..DEL] THEN
  138.         Write(Datei1,SmallBuf[i]);
  139.       IF SmallBuf[i] = CR THEN
  140.         WriteLn(Datei1)
  141.     END;
  142.     Close(Datei1);
  143.     Dummy := IOFEHLER
  144.   END
  145. END;
  146.  
  147. (*                          Ende DFDATEI.INC                                 *)
  148. (*---------------------------------------------------------------------------*)