home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* GRAPH2.PAS *)
- (* Prozeduren zur Beschleunigung der Hercules-Grafik *)
- (* unter Turbo Pascal 4.0 *)
- (* (c) 1989 Christian Ramsauer & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT Graph2;
-
- INTERFACE
-
- (* Die Beschleunigung der Grafikausgabe wird durch *)
- (* direktes Beschreiben des Bildschirmspeichers *)
- (* erreicht (MEM-ARRAY) *)
-
- USES Graph;
-
- PROCEDURE Seite(x : BYTE);
- (* Auswahl der Bildschirmseite in der gezeichnet *)
- (* werden soll (x=0 für Seite 1, x=1 für Seite 2) *)
-
- PROCEDURE Cls(x : BYTE);
- (* Löschen einer gesamten Bildschirmseite *)
-
- PROCEDURE Plot(x, y, c : INTEGER);
- (* Zeichnen eines Punktes (Ersatz für PutPixel) *)
- (* x,y: Koordinaten des Punktes, c: Zeichenfarbe *)
-
- PROCEDURE Waagerecht(y, x1, x2 : INTEGER);
- (* Zeichnen einer waagerechten Linie *)
- (* y: y-Koordinate, x1, x2: x-Koordinaten *)
-
- PROCEDURE Rechteck(x1, y1, x2, y2 : INTEGER);
- (* Zeichnen eines Rechtecks (Ersatz für Rectangle) *)
- (* x1, x2: x-Koordinaten, y1, y2: y-Koordinaten *)
-
- IMPLEMENTATION
-
- CONST HSeg : word = $B000;
-
- PROCEDURE Seite(x : BYTE);
- BEGIN
- IF x = 0 THEN HSeg := $B000 ELSE HSeg := $B800;
- IF x = 0 THEN SetActivePage(0) ELSE SetActivePage(1);
- END;
-
- PROCEDURE Cls(x : BYTE);
- VAR a : BYTE ABSOLUTE $B000:0;
- b : BYTE ABSOLUTE $B800:0;
- BEGIN
- IF x = 0 THEN FillChar(a, 32768, 0)
- ELSE FillChar(b, 32768, 0);
- END;
-
- PROCEDURE Plot(x, y, c : INTEGER);
- VAR ho, bx : INTEGER;
- CONST bit : ARRAY[1..8] OF BYTE=(1,2,4,8,16,32,64,128);
- BEGIN
- ho := ((y AND 3) SHL 13) + (90*(y SHR 2)) + (x SHR 3);
- bx := 8 - (x MOD 8);
- IF c = 0 THEN
- Mem[HSeg:ho] := Mem[HSeg:ho] AND (bit[bx] XOR $FF)
- ELSE
- Mem[HSeg:ho] := Mem[HSeg:ho] OR bit[bx];
- END;
-
- PROCEDURE Waagerecht(y, x1, x2 : INTEGER);
- VAR c, i, xs, xe : INTEGER;
- BEGIN
- c := GetColor;
- xs := x1 SHR 3;
- xe := x2 SHR 3;
- FOR i := x1 TO (xs SHL 3) + 7 DO Plot(i, y, c);
- FOR i := xs + 1 TO xe - 1 DO
- Mem[HSeg:((y AND 3) SHL 13) + 90*(y SHR 2)+i] := $FF*c;
- FOR i := xe SHL 3 TO x2 DO Plot(i, y, c);
- END;
-
- PROCEDURE Rechteck(x1, y1, x2, y2 : INTEGER);
- BEGIN
- Line(x1, y1, x1, y2);
- Waagerecht(y2, x1, x2);
- Line(x2, y2, x2, y1);
- Waagerecht(y1, x1, x2);
- END;
-
- END.
- (* ------------------------------------------------------ *)