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