home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / sonderh1 / dfue.pas < prev    next >
Pascal/Delphi Source File  |  1987-06-10  |  7KB  |  220 lines

  1. (*---------------------------------------------------------------------------*)
  2. (*                             DFUE.PAS                                      *)
  3. (*          Programm fuer Mailboxbetrieb und Rechnerkopplung                 *)
  4. (*                           Grundversion                                    *)
  5. (*---------------------------------------------------------------------------*)
  6.  
  7.  
  8. (*---------------------------------------------------------------------------*)
  9. (*                             COMPILEROPTION                                *)
  10. (* Diese Compileroption muss bei IBM-kompatiblen Rechnern gesetzt werden,    *)
  11. (* damit die Steuersequenzen nach ANSI-Norm benutzt werden koennen. Auf      *)
  12. (* anderen Systemen kann diese Option meistens ersatzlos gestrichen werden.  *)
  13.  
  14. (*$P512*) (* Output ueber das Betriebssystem *)
  15.  
  16. (*---------------------------------------------------------------------------*)
  17. (*                            Ende Compileroptionen                          *)
  18.  
  19. PROGRAM DFUE(Input,Output);
  20.  
  21. (* Konstanten und Variablendeklaration *)
  22.  
  23.  
  24. CONST BUFEND       = $7fff; (* Fuer MS-DOS. Auf CP/M Rechnern ca. 11000*)
  25.       (* Cursorsteuerung nach WordStar-Manier. *)
  26.       (* Ctrl-S = links, Ctrl-D = rechts,      *)
  27.       (* Ctrl-E = oben,  Ctrl-X = unten .      *)
  28.      CURSOR_RECHTS = #4;
  29.      CURSOR_LINKS  = #19;
  30.      CURSOR_HOCH   = #5;
  31.      CURSOR_RUNTER = #24;
  32.      RETURN        = #13;
  33.      DEL           = #127;
  34.      (* Hier muss eine Anpassung der Steuersequenzen *)
  35.      (*    fuer inverse Schrift an/aus erfolgen !    *)
  36.  
  37.      (*-- Steuersequenzen fuer eine ANSI-Terminal --*)
  38.      (*            Naeheres siehe Artikel.          *)
  39.      INV_EIN       = #27'[7m';
  40.      INV_AUS       = #27'[0m';
  41.      (*---------------------------------------------*)
  42.  
  43.      (*-- Steuersequenzen fuer eine VT52-Terminal --*)
  44.      (* INV_EIN       = #27'p';                     *)
  45.      (* INV_AUS       = #27'q';                     *)
  46.      (*---------------------------------------------*)
  47.  
  48.      (*-- Steuersequenzen fuer Schneider CPC --*)
  49.      (* INV_EIN       = #24;                   *)
  50.      (* INV_AUS       = #24;                   *)
  51.      (*----------------------------------------*)
  52.  
  53.      XON          = #17;
  54.      XOFF         = #19;
  55.      LF           = #10;
  56.      CR           = #13;
  57.      CTRL_P       = #16;
  58.      CTRL_Z       = #26;
  59.      ESC          = #27;  (* #252; fuer Schneider CPC *)
  60.      SOH          = #01;
  61.      EOT          = #4;
  62.      ACK          = #6;
  63.      BELL         = #7;
  64.      NAK          = #21;
  65.      CAN          = #24;
  66.  
  67.  
  68. TYPE String255    = STRING[255];
  69.      String79     = STRING[79];
  70.      String41     = STRING[41];
  71.      String2      = STRING[2];
  72.      String4      = STRING[4];
  73.      FunkStr      = STRING[40];
  74.      MsgStr       = STRING[80];
  75.  
  76. VAR  Zaehler, Altzaehler, Nummer           : INTEGER;
  77.      Zeit, i                               : INTEGER;
  78.      VollDuplex, LineFeed, Protokoll_An    : BOOLEAN;
  79.      Menue_Text                            : String255;
  80.      FunkText                              : ARRAY [1..6] OF FunkStr;
  81.      MBNr                                  : ARRAY [1..25] OF String79;
  82.      TextBuf                               : ARRAY [1..BUFEND] OF CHAR;
  83.      MsgZeile                              : ARRAY [1..23] OF MsgStr;
  84.      Param                                 : ARRAY [1..7] OF INTEGER;
  85.      Logfile                               : TEXT;
  86.  
  87. (*---------------------------------------------------------------------*)
  88.  
  89. (*------- Hier beginnen die rechnerspezifischen Unterprogramme --------*)
  90.  
  91. {$I DFMASCH2.INC }
  92.  
  93. (* Die Routinen in DFMASCHx.INC sorgen fuer die rechnerabhaengige  *)
  94. (* Ansteuerung der seriellen Schnittstelle.                        *)
  95.  
  96. {$I DF-MY.INC }
  97.  
  98. (* In DF-MY.INC sind Routinen enthalten, die rechnerabhaengige Sachen wie *)
  99. (* Tastaturabfrage und aehnliches erledigen.                              *)
  100.  
  101. (*--------- Hier enden die Rechnerspezifischen Unterprogramme -----------*)
  102.  
  103.  
  104. (* in DFKERNEL.LIB sind die rechnerunabhaengigen Basisroutinen enthalten *)
  105.  
  106. {$I DFKERNEL.INC }
  107.  
  108.  
  109. (* Die Funktion MENUE liefert ein multiplanaehnliches Menue,SP=Spalte,
  110.    ZL=Zeile, wo das Menue plaziert werden soll, Menue_Text ist der Text    *)
  111.  
  112. {$I DFMENUE.INC}
  113.  
  114.  
  115. (* die Prozedur PARAMETER erfragt im Dialog die notwendigen Ueber-
  116.    tragungsparameter.                                                      *)
  117.  
  118. {$I DFPARAM.INC}
  119.  
  120.  
  121. (* Prozedur ONLINE erlaubt Online-Dialog, ein Puffer dokumentiert
  122.    mit, wenn der Puffer sich fuellt, wird automatisch gesichert.           *)
  123.  
  124. {$I DFONLINE.INC}
  125.  
  126.  
  127. (* Prozedur Datei_Senden sendet eine beliebige Datei nach
  128.    dem XON-XOFF Protokoll , die Prozedur Datei_empfangen
  129.    empfaengt eine beliebige Datei nach dem XON-XOFF Protokoll.             *)
  130.  
  131. {$I DFDATEI.INC}
  132.  
  133.  
  134. (*  Die  Prozedure Status gibt die  augenblicklich  eingestellten
  135.     Parameter und den Bufferstatus zurueck.                                *)
  136.  
  137. {$I DFSTAT.INC}
  138.  
  139. (* Teil 2: die Funktionstasten                                             *)
  140.  
  141. (*$I DFFUNK.INC *)
  142.  
  143. (* Teil 2: das XMODEM-Protokoll                                            *)
  144.  
  145. (*$I DFXM.INC *)
  146.  
  147. (* Teil 2: der Editor                                                      *)
  148.  
  149. (*$I DFEDITOR.INC *)
  150.  
  151. (* Teil 3: die Hilfe *)
  152.  
  153. (*$I DFHELP.INC *)
  154.  
  155. (* Teil 3: Intel-Hex-Format-Konvertierer *)
  156.  
  157. (*$I DFUNLOAD.INC *)
  158.  
  159. (* Teil 3: Telephonregister *)
  160.  
  161. (*$I DFMBNR.INC *)
  162.  
  163.  
  164. (* HIER BEGINNT DAS HAUPTPROGRAMM *)
  165.  
  166. BEGIN
  167.   ClrScr;
  168.   FOR i := 1 TO 23 DO
  169.     MsgZeile[i] := '';
  170.   FOR i := 1 TO 6 DO
  171.     FunkText[i] := '';
  172.   FOR i := 1 TO 7 DO
  173.     param[i] := 1;
  174.   Setze_Parameter;
  175.   Zaehler := 1;
  176.   Altzaehler := 0;
  177.   Protokoll_An := FALSE;
  178.   oeffne_Protokoll;
  179.  
  180.   WriteLn;
  181.   WriteLn;
  182.   WriteLn(' P A S C A L  WE PROUDLY PRESENT : ');
  183.   WriteLn(' D F U E , EIN TERMINAL UND RECHNERKOPPLUNGSUTILITY');
  184.   WriteLn(' BITTE WAEHLEN SIE MIT DEN CURSORTASTEN AUS, ENTER');
  185.   WriteLn(' WAEHLT DANN AN');
  186.   WriteLn;WriteLn;
  187.   WriteLn('HELP GIBT EINE KURZE ERKLAERUNG');
  188.  
  189.   REPEAT
  190.     GotoXY(1,24);
  191.     ClearKeyBuf; (* Tastatur zuruecksetzen *)
  192.     Menue_Text := Concat(' Onl  Send  Empf  XMSen  XMEmp  Unl  ',
  193.                          'Ed  Stat  Help  Funk  MBNr  Par  Ende ');
  194.     Nummer := Menue(Menue_Text,1,25);
  195.     (* Die in dieser Version noch nicht         *)
  196.     (* vorhandenen Optionen sind ausgeklammert. *)
  197.     CASE Nummer OF
  198.       1   :  Online;
  199.       2   :  Datei_senden;
  200.       3   :  Datei_empfangen;
  201.       4   :  XMODEM_senden;
  202.       5   :  XMODEM_empfangen;
  203.       6   :  Unload;
  204.       7   :  Editor;
  205.       8   :  Status;
  206.       9   :  Help;
  207.       10  :  Funktionstasten;
  208.       11  :  Mailboxnummern;
  209.       12  :  Parameter;
  210.       13  :      (* Leerer Fall, um Fehler, die bei manchen Compilern auf- *)
  211.     END          (* tauchen koennen, zu vermeiden.                         *)
  212.   UNTIL Nummer = 13;
  213.   FOR i := 1 TO Pred(Zaehler) DO BEGIN
  214.     IF TextBuf[i] IN [LF,CR,' '..'}'] THEN
  215.       Write(Logfile,TextBuf[i]);
  216.     IF TextBuf[i] = CR THEN
  217.       WriteLn(Logfile)
  218.   END;
  219.   Close(Logfile)
  220. END.