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

  1. (*-------------------------------------------------------------------------*)
  2. (*                           DFEDITOR.INC                                  *)
  3. (*  Der Editor dient zur Erstellung der Text, die im Onlinemodus zeilen-   *)
  4. (*               weise eingespielt werden koennen.                         *)
  5.  
  6. OVERLAY PROCEDURE Editor;
  7.  
  8. CONST MaxSpalte = 80;
  9.       MaxZeile = 24;
  10.       BACKSPACE = #8; (* <--- Muss ggf. an Rechner angepasst werden. Auf  *)
  11.                       (*      einigen Rechnern hat das Zeichen fuer den   *)
  12.                       (*      Rueckwaertsschritt die Nummer 127.          *)
  13.  
  14. VAR Zeichen          : CHAR;
  15.     Spalte, Zeile,
  16.     i, j             : INTEGER;
  17.  
  18. BEGIN
  19.   ClrScr;
  20.  
  21.   (* Rahmen zeichnen. *)
  22.   Write(INV_EIN);
  23.   GotoXY(1,1);
  24.   FOR i := 1 TO MaxSpalte DO Write('*');
  25.   GotoXY((MaxSpalte - 8) DIV 2,1);
  26.   Write(' EDITOR ');
  27.   GotoXY(1,MaxZeile);
  28.   FOR i := 1 TO MaxSpalte DO Write('*');
  29.   GotoXY(5,MaxZeile);
  30.   Write(' Ende mit ESC ');
  31.   FOR i := 2 TO MaxZeile - 1 DO BEGIN
  32.     GotoXY(1,i); Write('*');
  33.     GotoXY(MaxSpalte,i); Write('*')
  34.   END;
  35.   Write(INV_AUS);
  36.  
  37.   (* Alten Text ggf. wieder ausgeben. *)
  38.   GotoXY(MaxSpalte DIV 2,MaxZeile);
  39.   Write('-- Eine Moment bitte --');
  40.   FOR i := 2 TO MaxZeile - 1 DO BEGIN
  41.     GotoXY(3,i);
  42.     IF Length(MsgZeile[Pred(i)]) > 0 THEN
  43.       Write(MsgZeile[Pred(i)])
  44.   END;
  45.  
  46.   (* Strings mit Leerzeichen auffuellen, damit man die eingegebenen        *)
  47.   (* Zeichen direkt mit Array-Indizes in die Strings hineinschreiben kann. *)
  48.   FOR i := 1 TO 23 DO
  49.     FOR j := Succ(Length(MsgZeile[i])) TO MaxSpalte - 4 DO
  50.       MsgZeile[i] := Concat(MsgZeile[i],' ');
  51.   Write(INV_EIN);
  52.   GotoXY(MaxSpalte DIV 2,MaxZeile);
  53.   Write('***********************');
  54.   Write(INV_AUS);
  55.  
  56.   (* Zeichen einlesen und auswerten. *)
  57.   Spalte := 3;  Zeile := 2;
  58.   GotoXY(Spalte,Zeile);
  59.   REPEAT
  60.     REPEAT
  61.        Read(Kbd,Zeichen);
  62.     UNTIL Zeichen IN [ESC,RETURN,BACKSPACE,
  63.                       CURSOR_LINKS,CURSOR_RECHTS,CURSOR_HOCH,CURSOR_RUNTER,
  64.                       ' '..'~'];
  65.     CASE Zeichen OF
  66.              ' '..'~' : BEGIN
  67.                           GotoXY(Spalte,Zeile);
  68.                           Write(Zeichen);
  69.                           MsgZeile[Pred(Zeile)][Spalte - 2] := Zeichen;
  70.                           Spalte := Succ(Spalte);
  71.                           IF Spalte = MaxSpalte - 1 THEN BEGIN
  72.                             Spalte := 3;
  73.                             Zeile := Succ(Zeile);
  74.                             IF Zeile = MaxZeile THEN
  75.                             Zeile := 2;
  76.                           END
  77.                         END;
  78.             BACKSPACE : BEGIN
  79.                           Spalte := Pred(Spalte);
  80.                           IF Spalte = 2 THEN BEGIN
  81.                             Spalte := MaxSpalte - 2;
  82.                             Zeile := Pred(Zeile);
  83.                             IF Zeile = 1 THEN
  84.                               Zeile := Pred(MaxZeile)
  85.                           END;
  86.                           MsgZeile[Pred(Zeile)][Spalte - 2] := ' ';
  87.                           GotoXY(Spalte,Zeile);
  88.                           Write(' ')
  89.                         END;
  90.                RETURN : BEGIN
  91.                           Spalte := 3;
  92.                           Zeile := Succ(Zeile);
  93.                           IF Zeile = MaxZeile THEN
  94.                             Zeile := 2
  95.                         END;
  96.          CURSOR_LINKS : BEGIN
  97.                           Spalte := Pred(Spalte);
  98.                           IF Spalte = 2 THEN BEGIN
  99.                             Spalte := MaxSpalte -2;
  100.                             Zeile := Pred(Zeile);
  101.                           IF Zeile = 1 THEN
  102.                               Zeile := MaxZeile - 1
  103.                           END
  104.                         END;
  105.         CURSOR_RECHTS : BEGIN
  106.                           Spalte := Succ(Spalte);
  107.                           IF Spalte = MaxSpalte - 1 THEN BEGIN
  108.                             Spalte := 3;
  109.                             Zeile := Succ(Zeile);
  110.                             IF Zeile = MaxZeile THEN
  111.                               Zeile := 2;
  112.                           END
  113.                         END;
  114.         CURSOR_RUNTER : BEGIN
  115.                           Zeile := Succ(Zeile);
  116.                           IF Zeile = MaxZeile THEN
  117.                             Zeile := 2
  118.                         END;
  119.           CURSOR_HOCH : BEGIN
  120.                           Zeile := Pred(Zeile);
  121.                           IF Zeile = 1 THEN
  122.                             Zeile := Pred(MaxZeile)
  123.                         END;
  124.     END;
  125.     GotoXY(Spalte,Zeile)
  126.   UNTIL Zeichen = ESC;
  127.  
  128.   (* Ueberschuessige Leerzeichen wieder entfernen *)
  129.   GotoXY(MaxSpalte DIV 2,MaxZeile);
  130.   Write('-- Eine Moment bitte --');
  131.   FOR i := 1 TO 23 DO BEGIN
  132.     j := MaxSpalte - 4;
  133.     WHILE (j > 0) AND (MsgZeile[i][j] = ' ') DO j := Pred(j);
  134.     MsgZeile[i] := Copy(MsgZeile[i],1,j);
  135.   END;
  136.   Write(INV_EIN);
  137.   GotoXY(MaxSpalte DIV 2,MaxZeile);
  138.   Write('***********************');
  139.   Write(INV_AUS);
  140. END;
  141.  
  142. (*-------------------------------------------------------------------------*)
  143. (*                             Ende DFEDITOR.INC                           *)