home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* WINDOW.PAS *)
- (* (c) 1989 Knut Reuther & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM window_programm;
-
- USES
- Crt;
-
- CONST
- scrvar = 12;
- { Speicherbedarf der Recordvariablen in Bytes }
-
- TYPE
- ScreenZeiger = ^ScreenRecord;
- Coordfeld = ARRAY[1..4] OF BYTE;
- ymax = 1..25;
- xmax = 1..80;
- ScreenRecord = RECORD
- coord : Coordfeld;
- bytes : WORD;
- start : BYTE;
- last : ScreenZeiger;
- Attr : BYTE;
- ScreenSave : WORD;
- END;
- VAR
- lastscreen, newscreen, oldscreen : ScreenZeiger;
- aktuellcoord : Coordfeld;
- { aktuelle bildschrimgröße }
- monoscreen : ARRAY[1..2000] OF WORD ABSOLUTE $b000:0;
- colorscreen : ARRAY[1..2000] OF WORD ABSOLUTE $b800:0;
- ab : CHAR;
- a : INTEGER;
-
-
- PROCEDURE WindowInit;
- BEGIN
- lastscreen := NIL;
- END;
-
- PROCEDURE Window(x1 : xmax; y1 : ymax; x2 : xmax;
- y2 : ymax);
- VAR
- menge : WORD;
- BEGIN
- IF (y2 > y1) AND (x2 > x1) THEN BEGIN
- menge := (y2 - y1 + 1) * 160 + scrvar;
- GetMem(newscreen, menge);
- IF (lastscreen = NIL) THEN BEGIN
- newscreen^.last := NIL;
- lastscreen := newscreen;
- aktuellcoord[1] := 1;
- aktuellcoord[2] := 25;
- aktuellcoord[3] := 1;
- aktuellcoord[4] := 80;
- END ELSE BEGIN
- newscreen^.last := lastscreen;
- lastscreen := newscreen;
- END;
- WITH newscreen^ DO BEGIN
- coord := aktuellcoord;
- start := y1;
- bytes := menge-scrvar;
- Attr := TextAttr;
- IF (LastMode = 7) THEN
- Move(monoscreen[(y1-1)*80+1],
- screensave, menge - scrvar)
- ELSE
- Move(colorscreen[(y1-1)*80+1], screensave,
- menge - scrvar);
- END;
- Crt.Window(x1, y1, x2, y2);
- aktuellcoord[1] := y1;
- aktuellcoord[2] := y2;
- aktuellcoord[3] := x1;
- aktuellcoord[4] := x2;
- END;
- END;
-
- PROCEDURE closewindow;
- BEGIN
- oldscreen := lastscreen;
- IF (lastscreen<>NIL) THEN BEGIN
- WITH lastscreen^ DO BEGIN
- IF (LastMode=7) THEN
- Move(screensave, monoscreen[(start-1)*80+1],bytes)
- ELSE
- Move(screensave,
- colorscreen[(start-1)*80+1],bytes);
- Crt.Window(coord[3], coord[1], coord[4], coord[2]);
- TextAttr := Attr;
- lastscreen := last;
- FreeMem(oldscreen, bytes+scrvar);
- END;
- END;
- END;
-
- BEGIN
- windowinit;
- TextBackground(Black);
- ClrScr;
- LowVideo;
- FOR a := 1 TO 2000 DO Write('-');
- HighVideo;
- GotoXY(2,10);
- WriteLn(MemAvail);
- Window(1,1,80,5);
- TextBackground(Blue);
- TextColor(11);
- ClrScr;
- WriteLn('dies ist ein Window',
- '12345678901234567890123456789012345678901234567890');
- WriteLn(MemAvail);
- ab := ReadKey;
- Window (10,10,75,15);
- TextBackground(Red);
- ClrScr;
- WriteLn(MemAvail);
- WriteLn('dies ist ein 2.Window');
- ab := ReadKey;
- Window(10,7,60,17);
- TextBackground(Green);
- ClrScr;
- WriteLn(MemAvail);
- WriteLn('dies ist ein 3.Window');
- ab := ReadKey;
- closewindow;
- WriteLn(MemAvail);
- ab := ReadKey;
- closewindow;
- WriteLn(MemAvail);
- ClrScr;
- ab := ReadKey;
- closewindow;
- GotoXY(10,20);
- WriteLn(MemAvail);
- ab := ReadKey;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von WINDOW.PAS *)