home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* ATTRIBUT.PAS *)
- (* Attribute setzen in beliebigen *)
- (* Bereichen des Bildschirms im Textmodus *)
- (* Direktes Beschreiben des VideoSpeichers *)
- (* (c) 1989 Lorenz Holländer & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT Attribut;
-
- INTERFACE USES Crt, Dos;
-
- VAR
- DisplayRam : ARRAY [1..2000] OF WORD ABSOLUTE $B800:$0000;
- { Monochrome $B000:$0000 }
-
- FUNCTION MakeAttr(Vordergrund, Hintergrund : BYTE) : BYTE;
- FUNCTION PickAttr(x, y : BYTE) : BYTE;
- FUNCTION PickChr(x, y : BYTE) : CHAR;
- PROCEDURE WrtAttr(x, y : BYTE; At : BYTE);
- PROCEDURE WrtChr(x, y : BYTE; Ch : CHAR);
- PROCEDURE WrtStr(x, y : BYTE; St : STRING);
- PROCEDURE FillChr(x1, y1, x2, y2 : BYTE; Ch : CHAR);
- PROCEDURE FillAttr(x1, y1, x2, y2, At : BYTE);
- PROCEDURE Desktop(z, At : BYTE);
-
- IMPLEMENTATION
-
- FUNCTION MakeAttr(Vordergrund, Hintergrund : BYTE) : BYTE;
- BEGIN
- Vordergrund := Vordergrund MOD 16;
- Hintergrund := Hintergrund MOD 8;
- MakeAttr := Vordergrund + (Hintergrund SHL 4);
- END;
-
- FUNCTION PickAttr(x, y : BYTE) : BYTE;
- VAR
- Pos : WORD;
- BEGIN
- Pos := (y - 1) * 80 + x;
- PickAttr := Hi(DisplayRam[Pos]); { Attribut }
- END;
-
- FUNCTION PickChr(x, y : BYTE) : CHAR;
- VAR
- Pos : WORD;
- BEGIN
- Pos := (y - 1) * 80 + x; { Berechnet das Zeichen }
- PickChr := Chr(Lo(DisplayRam[Pos]));
- END;
-
- PROCEDURE WrtAttr(x, y : BYTE; At : BYTE);
- VAR
- Pos : WORD;
- BEGIN
- Pos := (y - 1) * 80 + x;
- DisplayRam[Pos] := Lo(DisplayRam[Pos]) + At SHL 8;
- { Ändert das Attribut / Text bleibt erhalten }
- END;
-
- PROCEDURE WrtChr(x, y : BYTE; Ch : CHAR);
- VAR
- c : BYTE;
- Pos : WORD;
- BEGIN
- Pos := (y - 1) * 80 + x;
- c := Ord(Ch);
- DisplayRam[Pos] := c + Hi(DisplayRam[Pos]) SHL 8;
- END;
-
- PROCEDURE WrtStr(x, y : BYTE; St : STRING);
- VAR
- l, c : BYTE;
- Pos : WORD;
- BEGIN
- Pos := (y - 1) * 80 + x - 1;
- IF Length(St)>0 THEN
- FOR l := 1 TO Length(St) DO BEGIN
- c := Ord(St[l]);
- DisplayRam[Pos+l] := c + Hi(DisplayRam[Pos+l]) SHL 8;
- END;
- END;
-
- PROCEDURE FillChr(x1, y1, x2, y2 : BYTE; Ch : CHAR);
- VAR
- k,j,c : BYTE;
- xpos : WORD;
- BEGIN
- IF (x2 >= x1) AND (y2 >= y1) THEN
- IF (x1 > 0) AND (y2 > 0) THEN
- IF (x2 <= 80) AND (y2 <= 25) THEN BEGIN
- c := Ord(Ch);
- FOR j := y1 TO y2 DO BEGIN
- xpos := (j - 1) * 80 + x1;
- FOR k := 0 TO x2 - x1 DO
- DisplayRam[xpos+k] := c +
- Hi(DisplayRam[xpos+k]) SHL 8;
- END;
- END;
- END;
-
- PROCEDURE FillAttr(x1, y1, x2, y2, At : BYTE);
- VAR
- k, j : BYTE;
- xpos : WORD;
- BEGIN
- IF (x2 >= x1) AND (y2 >= y1) THEN
- IF (x1 > 0) AND (y2 > 0) THEN
- IF (x2 <= 80) AND (y2 <= 25) THEN BEGIN
- FOR j := y1 TO y2 DO BEGIN
- xpos := (j - 1) * 80 + x1;
- FOR k := 0 TO x2 - x1 DO
- DisplayRam[xpos+k] := Lo(DisplayRam[xpos+k]) +
- At SHL 8;
- END;
- END;
- END;
-
- PROCEDURE Desktop(z, At : BYTE);
- VAR
- k : INTEGER;
- BEGIN
- FOR k := 81 TO 1920 DO DisplayRam[k] := z + At SHL 8;
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von ATTRIBUT.PAS *)
-
-