home *** CD-ROM | disk | FTP | other *** search
- (*-------------------------------------------------------------------------*)
- (* DFEDITOR.INC *)
- (* Der Editor dient zur Erstellung der Text, die im Onlinemodus zeilen- *)
- (* weise eingespielt werden koennen. *)
-
- OVERLAY PROCEDURE Editor;
-
- CONST MaxSpalte = 80;
- MaxZeile = 24;
- BACKSPACE = #8; (* <--- Muss ggf. an Rechner angepasst werden. Auf *)
- (* einigen Rechnern hat das Zeichen fuer den *)
- (* Rueckwaertsschritt die Nummer 127. *)
-
- VAR Zeichen : CHAR;
- Spalte, Zeile,
- i, j : INTEGER;
-
- BEGIN
- ClrScr;
-
- (* Rahmen zeichnen. *)
- Write(INV_EIN);
- GotoXY(1,1);
- FOR i := 1 TO MaxSpalte DO Write('*');
- GotoXY((MaxSpalte - 8) DIV 2,1);
- Write(' EDITOR ');
- GotoXY(1,MaxZeile);
- FOR i := 1 TO MaxSpalte DO Write('*');
- GotoXY(5,MaxZeile);
- Write(' Ende mit ESC ');
- FOR i := 2 TO MaxZeile - 1 DO BEGIN
- GotoXY(1,i); Write('*');
- GotoXY(MaxSpalte,i); Write('*')
- END;
- Write(INV_AUS);
-
- (* Alten Text ggf. wieder ausgeben. *)
- GotoXY(MaxSpalte DIV 2,MaxZeile);
- Write('-- Eine Moment bitte --');
- FOR i := 2 TO MaxZeile - 1 DO BEGIN
- GotoXY(3,i);
- IF Length(MsgZeile[Pred(i)]) > 0 THEN
- Write(MsgZeile[Pred(i)])
- END;
-
- (* Strings mit Leerzeichen auffuellen, damit man die eingegebenen *)
- (* Zeichen direkt mit Array-Indizes in die Strings hineinschreiben kann. *)
- FOR i := 1 TO 23 DO
- FOR j := Succ(Length(MsgZeile[i])) TO MaxSpalte - 4 DO
- MsgZeile[i] := Concat(MsgZeile[i],' ');
- Write(INV_EIN);
- GotoXY(MaxSpalte DIV 2,MaxZeile);
- Write('***********************');
- Write(INV_AUS);
-
- (* Zeichen einlesen und auswerten. *)
- Spalte := 3; Zeile := 2;
- GotoXY(Spalte,Zeile);
- REPEAT
- REPEAT
- Read(Kbd,Zeichen);
- UNTIL Zeichen IN [ESC,RETURN,BACKSPACE,
- CURSOR_LINKS,CURSOR_RECHTS,CURSOR_HOCH,CURSOR_RUNTER,
- ' '..'~'];
- CASE Zeichen OF
- ' '..'~' : BEGIN
- GotoXY(Spalte,Zeile);
- Write(Zeichen);
- MsgZeile[Pred(Zeile)][Spalte - 2] := Zeichen;
- Spalte := Succ(Spalte);
- IF Spalte = MaxSpalte - 1 THEN BEGIN
- Spalte := 3;
- Zeile := Succ(Zeile);
- IF Zeile = MaxZeile THEN
- Zeile := 2;
- END
- END;
- BACKSPACE : BEGIN
- Spalte := Pred(Spalte);
- IF Spalte = 2 THEN BEGIN
- Spalte := MaxSpalte - 2;
- Zeile := Pred(Zeile);
- IF Zeile = 1 THEN
- Zeile := Pred(MaxZeile)
- END;
- MsgZeile[Pred(Zeile)][Spalte - 2] := ' ';
- GotoXY(Spalte,Zeile);
- Write(' ')
- END;
- RETURN : BEGIN
- Spalte := 3;
- Zeile := Succ(Zeile);
- IF Zeile = MaxZeile THEN
- Zeile := 2
- END;
- CURSOR_LINKS : BEGIN
- Spalte := Pred(Spalte);
- IF Spalte = 2 THEN BEGIN
- Spalte := MaxSpalte -2;
- Zeile := Pred(Zeile);
- IF Zeile = 1 THEN
- Zeile := MaxZeile - 1
- END
- END;
- CURSOR_RECHTS : BEGIN
- Spalte := Succ(Spalte);
- IF Spalte = MaxSpalte - 1 THEN BEGIN
- Spalte := 3;
- Zeile := Succ(Zeile);
- IF Zeile = MaxZeile THEN
- Zeile := 2;
- END
- END;
- CURSOR_RUNTER : BEGIN
- Zeile := Succ(Zeile);
- IF Zeile = MaxZeile THEN
- Zeile := 2
- END;
- CURSOR_HOCH : BEGIN
- Zeile := Pred(Zeile);
- IF Zeile = 1 THEN
- Zeile := Pred(MaxZeile)
- END;
- END;
- GotoXY(Spalte,Zeile)
- UNTIL Zeichen = ESC;
-
- (* Ueberschuessige Leerzeichen wieder entfernen *)
- GotoXY(MaxSpalte DIV 2,MaxZeile);
- Write('-- Eine Moment bitte --');
- FOR i := 1 TO 23 DO BEGIN
- j := MaxSpalte - 4;
- WHILE (j > 0) AND (MsgZeile[i][j] = ' ') DO j := Pred(j);
- MsgZeile[i] := Copy(MsgZeile[i],1,j);
- END;
- Write(INV_EIN);
- GotoXY(MaxSpalte DIV 2,MaxZeile);
- Write('***********************');
- Write(INV_AUS);
- END;
-
- (*-------------------------------------------------------------------------*)
- (* Ende DFEDITOR.INC *)