home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* BOX.PAS *)
- (* Screen-Generator für Turbo Pascal ab 5.x *)
- (* (c) 1991 Achim Bergmeister & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM Box;
-
- USES Crt,BoxErg;
-
- CONST lo1 = #218; ro1 = #191; lu1 = #192; ru1 = #217;
- wa1 = #196; se1 = #179; om1 = #194; um1 = #193;
- lm1 = #195; rm1 = #180; mi1 = #197; nx = ' ';
-
- lo2 = #201; ro2 = #187; lu2 = #200; ru2 = #188;
- wa2 = #205; se2 = #186; om2 = #203; um2 = #202;
- lm2 = #204; rm2 = #185; mi2 = #206;
-
- TYPE Richtung = (keine,rauf,runter,links,rechts);
- Striche = (einfach,doppelt,definiert);
-
- VAR aktiv,Ende,Wahl,Anzeige,Nochmal : BOOLEAN;
- x, y, i, j, Code : BYTE;
- ch, c, Key : CHAR;
- SaveLine : ARRAY [1..3] OF s80;
- Dir : Richtung;
- Sorte : Striche;
- Datei : TEXT;
- Name : s80;
- Taste : INTEGER;
-
- PROCEDURE StatusZeile_An;
- BEGIN
- FOR j :=1 TO 3 DO
- FOR i := 1 TO 80 DO SaveLine[j,i] := Screen[22+j,i].ch;
- Normal; Rahmen (1,23,80,25,2);
- WrtXY (3,24,'F1-Hilfe Alt+F1-Anzeige ein/aus '+
- 'Zeile: Spalte: Zeichnen:');
- Invers;
- END;
-
- PROCEDURE StatusZeile_Aus;
- BEGIN
- FOR j := 1 TO 3 DO
- FOR i := 1 TO 80 DO WrtXY (i,22+j,SaveLine[j,i]);
- END;
-
- PROCEDURE Speichern;
- LABEL Schluss;
- VAR Spalte,Zeile,Max: BYTE; ch: CHAR;
- BEGIN
- SMem := Screen; Normal; Rahmen (10,5,70,9,2);
- WrtXY (12,7,'Dateiname:'); GotoXY (23,7);
- ReadLn (Name); Invers; Screen := SMem;
- IF Name <> '' THEN BEGIN
- IF Pos ('.',Name) = 0 THEN Name := Name + '.box';
- Assign (Datei,Name); {$I-} Reset (Datei); {$I+}
- IF IOResult = 0 THEN BEGIN
- SMem := Screen; Normal; Rahmen (10,5,70,9,2);
- WrtXY (12,7,'Datei existiert schon, überschreiben (J/N) ?');
- REPEAT ch := UpCase (ReadKey); UNTIL ch IN ['J','N'];
- Screen := SMem; Invers;
- IF ch = 'N' THEN GOTO Schluss;
- END;
- {$I-} ReWrite (Datei); {$I+}
- IF IOResult <> 0 THEN BEGIN
- SMem := Screen; Normal; Rahmen (10,5,70,9,2);
- WrtXY (15,7,'Fehler beim Speichern, bitte <ESC>..');
- REPEAT ch := UpCase (ReadKey); UNTIL ch = #27;
- Screen := SMem; Invers;
- END
- ELSE BEGIN
- IF Anzeige THEN StatusZeile_Aus;
- FOR Zeile := 1 TO 25 DO BEGIN
- Spalte := 81;
- REPEAT Dec(Spalte);
- UNTIL (Screen[Zeile,Spalte].ch <> nx) OR
- (Spalte = 0);
- Max := Spalte;
- IF Max > 0 THEN
- FOR Spalte := 1 TO Max DO
- Write (Datei,Screen[Zeile,Spalte].ch);
- WriteLn (Datei);
- END;
- Close (Datei); IF Anzeige THEN StatusZeile_An;
- END;
- END; Schluss:
- END;
-
- PROCEDURE Laden;
- VAR Zeile: s80; i,z: BYTE; WahlDat: s12;
- BEGIN
- WahlDat := ''; Normal;
- HoleDatei (5,3,15,WahlDat); Invers;
- IF WahlDat <> '' THEN BEGIN
- Assign (Datei,WahlDat); {$I-} Reset (Datei); {$I+}
- IF IOResult <> 0 THEN BEGIN
- SMem := Screen; Normal; Rahmen (20,5,60,9,2);
- WrtXY (24,7,'Dateilesefehler ! Bitte <ESC> ...');
- REPEAT ch := UpCase (ReadKey); UNTIL ch = #27;
- Screen := SMem; Invers;
- END
- ELSE BEGIN
- IF Anzeige THEN StatusZeile_Aus; z := 1;
- WHILE NOT EoF(Datei) DO BEGIN
- ReadLn (Datei,Zeile);
- FOR i := 1 TO Length(Zeile) DO
- Screen[z,i].ch := Zeile[i];
- Inc(z);
- END;
- Close (Datei); IF Anzeige THEN StatusZeile_An;
- END;
- END;
- IF NOT aktiv THEN CursorDick;
- END;
-
- PROCEDURE BildschirmLoeschen;
- VAR i: BYTE; ch: CHAR;
- BEGIN
- SMem := Screen; Normal; Rahmen (20,3,60,5,2);
- WrtXY (25,4,'Erfasstes Bild löschen (J/N) ?');
- REPEAT ch := UpCase(ReadKey); UNTIL ch IN ['J','N'];
- Screen := SMem; Invers;
- IF ch = 'J' THEN BEGIN
- IF Anzeige THEN StatusZeile_Aus; ClrScr;
- x:=1; y:=1; aktiv := FALSE; CursorDick;
- IF Anzeige THEN StatusZeile_An;
- END;
- END;
-
- PROCEDURE ZeileLoeschen (z: BYTE; An: BOOLEAN);
- VAR Zeile,Spalte: BYTE;
- BEGIN
- IF An THEN StatusZeile_Aus;
- FOR Zeile := z TO 24 DO
- FOR Spalte := 1 TO 80 DO
- Screen[Zeile,Spalte].ch := Screen[Zeile+1,Spalte].ch;
- FOR Spalte := 1 TO 80 DO Screen[25,Spalte].ch := nx;
- IF An THEN StatusZeile_An;
- END;
-
- PROCEDURE SpalteLoeschen (s: BYTE; An: BOOLEAN);
- VAR Zeile,Spalte: BYTE;
- BEGIN
- IF An THEN StatusZeile_Aus;
- FOR Zeile := 1 TO 25 DO
- FOR Spalte := s TO 79 DO
- Screen[Zeile,Spalte].ch := Screen[Zeile,Spalte+1].ch;
- FOR Zeile := 1 TO 25 DO Screen[Zeile,80].ch := nx;
- IF An THEN StatusZeile_An;
- END;
-
- PROCEDURE ZeileEinfuegen (z: BYTE; An: BOOLEAN);
- VAR Zeile,Spalte: BYTE;
- BEGIN
- IF An THEN StatusZeile_Aus;
- FOR Zeile := 25 DOWNTO z+1 DO
- FOR Spalte := 1 TO 80 DO
- Screen[Zeile,Spalte].ch := Screen[Zeile-1,Spalte].ch;
- FOR Spalte := 1 TO 80 DO Screen[z,Spalte].ch := nx;
- IF An THEN StatusZeile_An;
- END;
-
- PROCEDURE SpalteEinfuegen (s: BYTE; An: BOOLEAN);
- VAR Zeile,Spalte: BYTE;
- BEGIN
- IF An THEN StatusZeile_Aus;
- FOR Zeile := 1 TO 25 DO
- FOR Spalte := 80 DOWNTO s+1 DO
- Screen[Zeile,Spalte].ch := Screen[Zeile,Spalte-1].ch;
- FOR Zeile := 1 TO 25 DO Screen[Zeile,s].ch := nx;
- IF An THEN StatusZeile_An;
- END;
-
- PROCEDURE Hilfe;
- VAR
- f : TEXT; s : s80;
- BEGIN
- SMem := Screen;
- Assign(f, 'HILFE.BOX');
- Reset(f);
- GotoXY(1,1);
- WHILE NOT EoF(f) DO BEGIN
- ReadLn(f, s); WriteLn(s);
- END;
- REPEAT ch := ReadKey UNTIL ch = #27;
- Screen := SMem;
- END;
-
- PROCEDURE PfeilTasten (Pfeil: BYTE; Art: Striche);
- BEGIN
- WITH Screen[y,x] DO
- BEGIN
- IF Art = einfach THEN
- BEGIN
- CASE Pfeil OF
- 8 : BEGIN
- CASE Dir OF
- keine : ch := se1;
- runter: BEGIN
- CASE ch OF
- lo1,lm1 : ch := lm1;
- lo2,lm2 : ch := '╞';
- ro1,rm1 : ch := rm1;
- ro2,rm2 : ch := '╡';
- lu1,lu2 : ch := lu1;
- ru2 : ch := '╛';
- ru1 : ch := ru1;
- wa2,um2 : ch := '╧';
- um1,wa1 : ch := um1;
- om1,mi1,om2,mi2: ch := mi1;
- ELSE ch := se1;
- END;
- END;
- rauf : BEGIN
- CASE ch OF
- lo1,lu1,lm1 : ch := lm1;
- lo2,lu2,lm2 : ch := '╞';
- ro1,ru1,rm1 : ch := rm1;
- ro2,ru2,rm2 : ch := '╡';
- wa1,om1,um1,mi1 : ch := mi1;
- wa2,om2,um2,mi2 : ch := '╪';
- ELSE ch := se1;
- END;
- END;
- links : BEGIN
- CASE ch OF
- lo1,se1,lm1 : ch := lm1;
- lo2,se2,lm2 : ch := lm1;
- ro1,om1,rm1,mi1 : ch := mi1;
- ro2,om2,rm2,mi2 : ch := mi1;
- ru2,ru1,wa2,wa1,um1,um2: ch := um1;
- ELSE ch := lu1;
- END;
- END;
- rechts: BEGIN
- CASE ch OF
- lo1,lo2,om2,om1 : ch := mi1;
- lm2,lm1,mi2,mi1 : ch := mi1;
- ro2,ro1,se2,se1,rm2,rm1: ch := rm1;
- lu2,lu1,wa2,wa1,um1,um2: ch := um1;
- ELSE ch := ru1;
- END;
- END;
- END;
- Dec(y); Dir := rauf;
- END;
- 2 : BEGIN
- CASE Dir OF
- keine : ch := se1;
- runter: BEGIN
- CASE ch OF
- lo1,lu1,lm1 : ch := lm1;
- lo2,lu2,lm2 : ch := '╞';
- ro1,ru1,rm1 : ch := rm1;
- ro2,ru2,rm2 : ch := '╡';
- wa1,om1,um1,mi1 : ch := mi1;
- wa2,om2,um2,mi2 : ch := '╪';
- ELSE ch := se1;
- END;
- END;
- rauf : BEGIN
- CASE ch OF
- lo1 : ch := lo1;
- lo2 : ch := '╒';
- ro1 : ch := ro1;
- ro2 : ch := '╕';
- lu1,lm1 : ch := lm1;
- lu2,lm2 : ch := '╞';
- ru1,rm1 : ch := rm1;
- ru2,rm2 : ch := '╡';
- wa1,om1 : ch := om1;
- wa2,om2 : ch := '╤';
- um1,um2,mi2,mi1: ch := mi1;
- ELSE ch := se1;
- END;
- END;
- links : BEGIN
- CASE ch OF
- ro2,ro1,wa2,wa1,om2,om1 : ch := om1;
- lu2,lu1,se2,se1,lm2,lm1 : ch := lm1;
- ru2,ru1,rm2,rm1 : ch := rm1;
- um1,um2,mi2,mi1 : ch := mi1;
- ELSE ch := lo1;
- END;
- END;
- rechts: BEGIN
- CASE ch OF
- lo1,lo2 : ch := lo1;
- lu2,lu1 : ch := lm1;
- ru2,ru1,se2,se1,rm2,rm1: ch := rm1;
- wa2,wa1,om2,om1 : ch := om1;
- um1,um2,mi2,mi1,lm2,lm1: ch := mi1;
- ELSE ch := ro1;
- END;
- END;
- END;
- Inc(y); Dir := runter;
- END;
- 4 : BEGIN
- CASE Dir OF
- keine : ch := wa1;
- runter: BEGIN
- CASE ch OF
- lo1,lo2,om2,om1,lm2,lm1: ch := mi1;
- mi2,mi1 : ch := mi1;
- ro2,ro1,se2,se1,rm2,rm1: ch := rm1;
- lu2,lu1,wa2,wa1,um1,um2: ch := um1;
- ELSE ch := ru1;
- END;
- END;
- rauf : BEGIN
- CASE ch OF
- lo1,lo2,wa2,wa1,om2,om1: ch := om1;
- lu2,lu1,um1,um2,mi2,mi1: ch := mi1;
- lm2,lm1 : ch := mi1;
- ru2,ru1,se2,se1,rm2,rm1: ch := rm1;
- ELSE ch := ro1;
- END;
- END;
- links : BEGIN
- CASE ch OF
- lo1,ro1,om1 : ch := om1;
- lo2,ro2,om2 : ch := '╥';
- lu1,ru1,um1 : ch := um1;
- lu2,ru2,um2 : ch := '╨';
- se1,lm1,rm1,mi1 : ch := mi1;
- se2,lm2,rm2,mi2 : ch := '╫';
- ELSE ch := wa1;
- END;
- END;
- rechts: BEGIN
- CASE ch OF
- lo1,lo2,om2,om1 : ch := om1;
- ro2,ro1 : ch := ro1;
- ru2,ru1,um1,um2,lu2,lu1: ch := um1;
- se1,rm1 : ch := rm1;
- se2,rm2 : ch := '╢';
- lm1,mi1 : ch := mi1;
- lm2,mi2 : ch := '╫';
- ELSE ch := wa1;
- END;
- END;
- END;
- Dec(x); Dir := links;
- END;
- 6 : BEGIN
- CASE Dir OF
- keine : ch := wa1;
- runter: BEGIN
- CASE ch OF
- lo1,se1,lm1,lo2,se2,lm2: ch := lm1;
- ro2,ro1,om2,om1,rm2,rm1: ch := mi1;
- mi2,mi1 : ch := mi1;
- ru2,ru1,wa2,wa1,um1,um2: ch := um1;
- ELSE ch := lu1;
- END;
- END;
- rauf : BEGIN
- CASE ch OF
- ro2,ro1,wa2,wa1,om2,om1: ch := om1;
- lu2,lu1,se2,se1,lm2,lm1: ch := lm1;
- ru2,ru1,um1,um2,rm2,rm1: ch := mi1;
- mi2,mi1 : ch := mi1;
- ELSE ch := lo1;
- END;
- END;
- links : BEGIN
- CASE ch OF
- lo1 : ch := lo1;
- lo2 : ch := '╓';
- ro1,om1 : ch := om1;
- ro2,om2 : ch := '╥';
- lu1 : ch := lu1;
- ru1,um1 : ch := um1;
- lu2 : ch := '╙';
- ru2,um2 : ch := '╨';
- se1 : ch := lm1;
- se2 : ch := '╟';
- lm1,rm1,mi1 : ch := mi1;
- lm2,rm2,mi2 : ch := '╪';
- ELSE ch := wa1;
- END;
- END;
- rechts: BEGIN
- CASE ch OF
- lo1,ro1,om1 : ch := om1;
- lo2,ro2,om2 : ch := '╥';
- lu1,ru1,um1 : ch := um1;
- lu2,ru2,um2 : ch := '╨';
- se1,lm1,rm1,mi1: ch := mi1;
- se2,lm2,rm2,mi2: ch := '╫';
- ELSE ch := wa1;
- END;
- END;
- END;
- Inc(x); Dir := rechts;
- END;
- END;
- END;
- IF Art = doppelt THEN
- BEGIN
- CASE Pfeil OF
- 8 : BEGIN
- CASE Dir OF
- keine : ch := se2;
- runter: BEGIN
- CASE ch OF
- lo1,lo2,lm2,lm1 : ch := lm2;
- ro2,ro1,rm2,rm1 : ch := rm2;
- lu1,lu2 : ch := lu2;
- ru1,ru2 : ch := ru2;
- wa1,um1 : ch := '╨';
- wa2,um2 : ch := um2;
- om1,mi1 : ch := '╫';
- om2,mi2 : ch := mi2;
- ELSE ch := se2;
- END;
- END;
- rauf : BEGIN
- CASE ch OF
- lo1,lu1,lm1 : ch := '╟';
- lo2,lu2,lm2 : ch := lm2;
- ro1,ru1,rm1 : ch := '╢';
- ro2,ru2,rm2 : ch := rm2;
- wa1,om1,um1,mi1 : ch := '╫';
- wa2,om2,um2,mi2 : ch := mi2;
- ELSE ch := se2;
- END;
- END;
- links : BEGIN
- CASE ch OF
- lo1,lo2,se2,se1,lm2,lm1 : ch := lm2;
- ro2,ro1,om2,om1,rm2,rm1 : ch := mi2;
- mi2,mi1 : ch := mi2;
- ru2,ru1,wa2,wa1,um1,um2 : ch := um2;
- ELSE ch := lu2;
- END;
- END;
- rechts: BEGIN
- CASE ch OF
- lo1,lo2,om2,om1,lm2,lm1 : ch := mi2;
- mi2,mi1 : ch := mi2;
- ro2,ro1,se2,se1,rm2,rm1 : ch := rm2;
- lu2,lu1,wa2,wa1,um1,um2 : ch := um2;
- ELSE ch := ru2;
- END;
- END;
- END;
- Dec(y); Dir := rauf;
- END;
- 2 : BEGIN
- CASE Dir OF
- keine : ch := se2;
- runter: BEGIN
- CASE ch OF
- lo2,lu2,lm2 : ch := lm2;
- lo1,lu1,lm1 : ch := '╟';
- ro2,ru2,rm2 : ch := rm2;
- ro1,ru1,rm1 : ch := '╢';
- wa2,om2,um2,mi2 : ch := mi2;
- wa1,om1,um1,mi1 : ch := '╫';
- ELSE ch := se2;
- END;
- END;
- rauf : BEGIN
- CASE ch OF
- lo2 : ch := lo2;
- lo1 : ch := '╓';
- ro2 : ch := ro2;
- ro1 : ch := '╖';
- lu2,lm2 : ch := lm2;
- lu1,lm1 : ch := '╟';
- ru2,rm2 : ch := rm2;
- ru1,rm1 : ch := '╢';
- wa2,om2 : ch := om2;
- wa1,om1 : ch := '╥';
- um2,mi2 : ch := mi2;
- um1,mi1 : ch := '╫';
- ELSE ch := se2;
- END;
- END;
- links : BEGIN
- CASE ch OF
- ro2,ro1,wa2,wa1,om2,om1 : ch := om2;
- lu2,lu1,se2,se1,lm2,lm1 : ch := lm2;
- ru2,ru1,rm2,rm1 : ch := mi2;
- um1,um2,mi2,mi1 : ch := mi2;
- ELSE ch := lo2;
- END;
- END;
- rechts: BEGIN
- CASE ch OF
- lo1,lo2 : ch := om2;
- lu2,lu1 : ch := mi2;
- ru2,ru1,se2,se1,rm2,rm1 : ch := rm2;
- wa2,wa1,om2,om1 : ch := om2;
- um1,um2,mi2,mi1,lm2,lm1 : ch := mi2;
- ELSE ch := ro2;
- END;
- END;
- END;
- Inc(y); Dir := runter;
- END;
- 4 : BEGIN
- CASE Dir OF
- keine : ch := wa2;
- runter: BEGIN
- CASE ch OF
- lo1,lo2,om2,om1,lm2,lm1 : ch := mi2;
- mi2,mi1 : ch := mi2;
- ro2,ro1,se2,se1,rm2,rm1 : ch := rm2;
- lu2,lu1,wa2,wa1,um1,um2 : ch := um2;
- ELSE ch := ru2;
- END;
- END;
- rauf : BEGIN
- CASE ch OF
- lo1,lo2,wa2,wa1,om2,om1 : ch := om2;
- lu2,lu1,um1,um2,mi2,mi1 : ch := mi2;
- lm2,lm1 : ch := mi2;
- ru2,ru1,se2,se1,rm2,rm1 : ch := rm2;
- ELSE ch := ro2;
- END;
- END;
- links : BEGIN
- CASE ch OF
- lo2,ro2,om2 : ch := om2;
- lo1,ro1,om1 : ch := '╤';
- lu2,ru2,um2 : ch := um2;
- lu1,ru1,um1 : ch := '╧';
- se2,lm2,rm2,mi2 : ch := mi2;
- se1,lm1,rm1,mi1 : ch := '╪';
- ELSE ch := wa2;
- END;
- END;
- rechts: BEGIN
- CASE ch OF
- lo1,lo2,om2,om1: ch := om2;
- ro2 : ch := ro2;
- ro1 : ch := '╕';
- lu2,um2 : ch := um2;
- lu1,um1 : ch := '╧';
- ru2 : ch := ru2;
- ru1 : ch := '╛';
- se1,rm1 : ch := '╡';
- se2,rm2 : ch := rm2;
- lm2,mi2 : ch := mi2;
- lm1,mi1 : ch := '╪';
- ELSE ch := wa2;
- END;
- END;
- END;
- Dec(x); Dir := links;
- END;
- 6 : BEGIN
- CASE Dir OF
- keine : ch := wa2;
- runter: BEGIN
- CASE ch OF
- lo1,lo2,se2,se1,lm2,lm1 : ch := lm2;
- ro2,ro1,om2,om1,rm2,rm1 : ch := mi2;
- mi2,mi1 : ch := mi2;
- ru2,ru1,wa2,wa1,um1,um2 : ch := um2;
- ELSE ch := lu2;
- END;
- END;
- rauf : BEGIN
- CASE ch OF
- ro2,ro1,wa2,wa1,om2,om1 : ch := om2;
- lu2,lu1,se2,se1,lm2,lm1 : ch := lm2;
- ru2,ru1,um1,um2,rm2,rm1 : ch := mi2;
- mi2,mi1 : ch := mi2;
- ELSE ch := lo2;
- END;
- END;
- links : BEGIN
- CASE ch OF
- lo2 : ch := lo2;
- lo1 : ch := '╒';
- ro2,om2 : ch := om2;
- ro1,om1 : ch := '╤';
- ru2,um2 : ch := um2;
- lu2 : ch := lu2;
- ru1,um1 : ch := '╧';
- lu1 : ch := '╘';
- se1,lm1 : ch := '╞';
- se2,lm2 : ch := lm2;
- rm1,mi1 : ch := '╪';
- rm2,mi2 : ch := mi2;
- ELSE ch := wa2;
- END;
- END;
- rechts: BEGIN
- CASE ch OF
- lo2,ro2,om2 : ch := om2;
- lo1,ro1,om1 : ch := '╤';
- lu2,ru2,um2 : ch := um2;
- lu1,ru1,um1 : ch := '╧';
- se2,lm2,rm2,mi2: ch := mi2;
- se1,lm1,rm1,mi1: ch := '╪';
- ELSE ch := wa2;
- END;
- END;
- END;
- Inc(x); Dir := rechts;
- END;
- END;
- END;
- IF Art = definiert THEN
- BEGIN
- CASE Pfeil OF
- 8 : BEGIN ch := Key; Dec(y); END;
- 6 : BEGIN ch := Key; Inc(x); END;
- 2 : BEGIN ch := Key; Inc(y); END;
- 4 : BEGIN ch := Key; Dec(x); END;
- END;
- END;
- END;
- END;
-
- PROCEDURE ASCIITabelle (VAR Code: BYTE;
- VAR Wahl: BOOLEAN; VAR Wdh: BOOLEAN);
- VAR i,Zeile,Spalte,Save: BYTE; Ende: BOOLEAN;
- BEGIN
- SMem:=Screen; Wahl:=FALSE; Ende:=FALSE; Wdh:=FALSE;
- Rahmen (40,2,76,21,3);
- WrtXY (45,20,'Auswählen mit (Ctrl-)RETURN');
- FOR Zeile := 3 TO 18 DO
- FOR Spalte := 41 TO 75 DO Screen[Zeile,Spalte].ch := nx;
- FOR Zeile := 0 TO 15 DO
- FOR Spalte := 0 TO 15 DO
- Screen[Zeile+3,40+(Spalte*2+3)].ch:=Chr(Zeile*16+Spalte);
- REPEAT
- Spalte := 41 + (Code MOD 16 + 1)*2;
- Zeile := (Code SHR 4 + 3);
- Screen[Zeile,Spalte].ch := Chr(Code);
- Screen[Zeile,Spalte].Attr := 130;
- Save := Code; GetCode (Taste);
- CASE Taste OF
- 27 : Ende := TRUE;
- 13 : BEGIN Ende:=TRUE; Wahl:=TRUE; END;
- 10 : BEGIN Ende:=TRUE; Wahl:=TRUE; Wdh:=TRUE; END;
- 1075 : Dec(Code);
- 1077 : Inc(Code);
- 1072 : Dec(Code,16);
- 1080 : Inc(Code,16);
- 1079 : Code := (Code SHR 4) SHL 4 + 15;
- 1071 : Code := (Code SHR 4) SHL 4;
- 1073 : Code := Code MOD 16;
- 1081 : Code := Code MOD 16 + 240;
- END;
- Screen[Zeile,Spalte].ch := Chr(Save);
- Screen[Zeile,Spalte].Attr := 112;
- UNTIL Ende;
- Screen := SMem;
- END;
-
- PROCEDURE Position (x,y: BYTE; Art: Striche; aktiv: BOOLEAN);
- BEGIN
- Normal; GotoXY (49,24); Write(y:2);
- GotoXY (61,24); Write (x:2);
- IF aktiv THEN BEGIN
- CASE Art OF
- einfach : WrtXY (75,24,wa1+mi1+wa1);
- doppelt : WrtXY (75,24,wa2+mi2+wa2);
- definiert: WrtXY (75,24,Key+Key+Key);
- END;
- END ELSE WrtXY (75,24,'Aus');
- Invers;
- END;
-
- BEGIN
- x := 1; y := 1; aktiv := FALSE; Name := '';
- Key := ' '; Code := 176; Dir := keine;
- Ende := FALSE; Sorte := einfach; Nochmal := FALSE;
- Invers; ClrScr; CursorDick; StatusZeile_An;
- Anzeige := TRUE; Position (x,y,Sorte,aktiv);
- GotoXY (x,y);
- REPEAT
- IF KeyPressed THEN BEGIN
- GetCode (Taste);
- CASE Taste OF
- 27 : BEGIN
- SMem:=Screen; Normal; Rahmen (25,12,55,14,2);
- WrtXY(27,13,'Wirklich aufhören (J/N) ?');
- ch := UpCase(ReadKey);
- IF ch = 'J' THEN Ende := TRUE
- ELSE BEGIN Screen := SMem; Invers; END;
- END;
- 8 : IF x > 1 THEN
- BEGIN Dec(x); Screen[y,x].ch := nx; END;
- 13 : BEGIN x := 1; IF y < 25 THEN Inc(y); END;
- 32..255 : BEGIN
- Screen[y,x].ch := Chr(Taste);
- IF x < 80 THEN Inc(x)
- ELSE IF y < 25 THEN
- BEGIN x := 1; Inc(y); END;
- END;
- 1061: IF Sorte = einfach THEN Sorte := doppelt
- ELSE Sorte := einfach;
- 1063 : Speichern;
- 1064 : Laden;
- 1060 : BildschirmLoeschen;
- 1059 : Hilfe;
- 1065 : ZeileLoeschen (y,Anzeige);
- 1066 : SpalteLoeschen (x,Anzeige);
- 1067 : ZeileEinfuegen (y,Anzeige);
- 1068 : SpalteEinfuegen (x,Anzeige);
- 1071 : x := 1;
- 1079 : x := 80;
- 1073 : y := 1;
- 1081 : IF Anzeige THEN y := 22 ELSE y := 25;
- 1062 : IF aktiv = TRUE THEN
- BEGIN aktiv := FALSE; CursorDick; END
- ELSE BEGIN
- aktiv := TRUE; Dir := keine; CursorNormal;
- END;
- 1072 : IF y > 1 THEN BEGIN
- IF aktiv THEN PfeilTasten(8,Sorte)
- ELSE Dec(y);
- END;
- 1075 : IF x > 1 THEN BEGIN
- IF aktiv THEN PfeilTasten(4,Sorte)
- ELSE Dec(x);
- END;
- 1077 : IF x < 80 THEN BEGIN
- IF aktiv THEN PfeilTasten(6,Sorte)
- ELSE Inc(x);
- END;
- 1080 : IF ((Anzeige) AND (y < 22)) OR
- ((NOT Anzeige) AND (y < 25)) THEN BEGIN
- IF aktiv THEN PfeilTasten(2,Sorte)
- ELSE Inc(y);
- END;
- 1082 : BEGIN
- FOR i := 80 DOWNTO x+1 DO
- Screen[y,i] := Screen[y,i-1];
- Screen[y,x].ch := nx;
- END;
- 1083 : BEGIN
- FOR i := x TO 79 DO
- Screen[y,i] := Screen[y,i+1];
- Screen[y,80].ch := nx;
- END;
- 1104: IF Anzeige THEN
- BEGIN Invers; StatusZeile_Aus; Anzeige:=FALSE; END
- ELSE BEGIN StatusZeile_An; Anzeige:=TRUE; END;
- 1108: BEGIN
- Wahl := FALSE;
- ASCIITabelle(Code,Wahl,Nochmal);
- IF Wahl THEN BEGIN
- Sorte := definiert; Key := Chr(Code);
- END;
- END;
- 1109: BEGIN
- REPEAT
- Wahl := FALSE;
- ASCIITabelle (Code,Wahl,Nochmal);
- IF Wahl THEN BEGIN
- Screen[y,x].ch := Chr(Code);
- IF x < 80 THEN Inc(x);
- END;
- UNTIL NOT Nochmal;
- END;
- 1106: BEGIN
- i := Ord(Screen[y,x].ch);
- FOR j := 1 TO 80 DO
- Screen[y,j].ch := Chr(i);
- END;
- END;
- IF Anzeige THEN Position (x,y,Sorte,aktiv);
- GotoXY (x,y);
- END;
- UNTIL Ende;
- CursorNormal; Normal; ClrScr;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von BOX.PAS *)
-
-