home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SCRNOUT.PAS *)
- (* ------------------------------------------------------ *)
- UNIT ScrnOut;
-
- INTERFACE
-
- USES Crt, ScrnStck;
-
- CONST
- GelbVorBlau : INTEGER = Yellow + 16*Blue;
- BlauVorHellgrau : INTEGER = Blue + 16*LightGray;
- DunkelgrauVorHellgrau : INTEGER = DarkGray + 16*LightGray;
- WeissVorRot : INTEGER = White + 16*Red;
-
- TYPE
- S80 = STRING [80];
- S25 = STRING [25];
-
- VAR
- Stack : ScrnStck.KELLER; (* Für Zwischenbildschirme *)
-
- (* Aus der Unit ScrnStck ist Screen
- (Zeiger auf den Bildspeicherbeginn) bekannt. *)
-
- PROCEDURE Farbe(Attr : BYTE);
-
- PROCEDURE ColXY(x, y : INTEGER;Attr : BYTE);
-
- PROCEDURE WrtXY(x, y : BYTE; S : S80);
-
- PROCEDURE Hintergrund(x1, y1, x2, y2 : BYTE;
- Zeichen : CHAR);
-
- PROCEDURE Rahmen(x1, y1, x2, y2 : BYTE;
- Schatten : BOOLEAN);
-
- PROCEDURE OeffneFenster(x1, y1, x2, y2 : INTEGER;
- Schatten : BOOLEAN);
-
- PROCEDURE SchliesseFenster;
-
-
- IMPLEMENTATION
-
- PROCEDURE Farbe(Attr : BYTE);
- BEGIN
- TextAttr := Attr;
- END;
-
- PROCEDURE ColXY(x, y : INTEGER;Attr : BYTE);
- BEGIN
- Screen^[y,x].Attr := Attr;
- END;
-
- PROCEDURE WrtXY(x, y : BYTE; S : S80);
- VAR
- i : BYTE;
- BEGIN
- FOR i := 1 TO Length(S) DO
- Screen^[y,x-1+i].CH := S[i];
- END;
-
- PROCEDURE Hintergrund(x1, y1, x2, y2 : BYTE;
- Zeichen : CHAR);
- VAR
- i, j : BYTE;
- BEGIN
- FOR i := y1 TO y2 DO
- FOR j := x1 TO x2 DO
- Screen^[i,j].CH := Zeichen;
- END;
-
- PROCEDURE Rahmen(x1, y1, x2, y2 : BYTE;
- Schatten : BOOLEAN);
- VAR
- i : BYTE;
- k : STRING [6];
- BEGIN
- Window(x1, y1, x2, y2); ClrScr;
- Window(1, 1, 80, 25);
- k := '┌┐└┘─│';
- WrtXY(x1, y1, k[1]);
- FOR i := x1+1 TO x2-1 DO WrtXY(i, y1, k[5]);
- WrtXY(x2, y1, k[2]); WrtXY(x1, y2, k[3]);
- FOR i := x1+1 TO x2-1 DO WrtXY(i, y2, k[5]);
- WrtXY(x2, y2, k[4]);
- FOR i := y1+1 TO y2-1 DO BEGIN
- WrtXY(x1, i, k[6]);
- WrtXY(x2, i, k[6]);
- END;
- IF Schatten (* gewünscht *) THEN BEGIN
- FOR i := x1+2 TO x2+2 DO Screen^[y2+1,i].Attr := 8;
- FOR i := y1+1 TO y2 DO Screen^[i,x2+1].Attr := 8;
- FOR i := y1+1 TO y2 DO Screen^[i,x2+2].Attr := 8;
- END;
- END;
-
- PROCEDURE OeffneFenster(x1, y1, x2, y2 : INTEGER;
- Schatten : BOOLEAN);
- BEGIN
- (* Lege alten Bildschirm auf den Stack *)
- ScrnStck.PUSH(Stack, Screen^);
- (* Zeichne Rahmen *)
- Rahmen(x1, y1, x2, y2, Schatten)
- END;
-
- PROCEDURE SchliesseFenster;
- VAR
- Scrn : ScrnStck.ElTyp;
- BEGIN
- (* Hole nächstalten Bildschirm vom Stack *)
- ScrnStck.POP(Stack, Scrn);
- (* Aktualisiere den Bildschirm *)
- Screen^ := Scrn;
- END;
-
- BEGIN
- ScrnStck.StackInit(Stack);
- IF Mem[$40:$49]=7 THEN (* Monochrombildschirm *)
- Screen := Ptr($B000,0)
- ELSE Screen := Ptr($B800,0) (* Colorbildschirm *)
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SCRNOUT.PAS *)
-