home *** CD-ROM | disk | FTP | other *** search
- {$A+,B-,D-,E-,F+,I-,L-,N-,O+,R-,S-,V-}
- unit VGAVESA;
-
- {*****************************************************************
- Einbindung BGI-Treiber VGA256
- ******************************************************************
-
- (c) ████████████████
- ██ ▐██ Dr. Dieter Weirauch
- ██ W & B │ █ Karl-Laux-Str. 38
- ██ │ █ Dresden, O-8020
- ██ Software │ █
- ██▄──────────┘ █ Dipl.-Ing. Frank Behrens
- ███▄▄▄▄▄▄▄▄▄▄▄▄█
-
-
- ******************************************************************
-
-
- Ergänzung der Unit Graph zur Einbindung des BGI-Treibers VGAVESA
- ****************************************************************
-
- Diese Unit wird nur in die USES-Anweisung nach der Unit Graph aufgenommen.
-
- Es ist zusätzlich die Konstante VGA256 für die Treibernummer deklariert,
- mit der InitGraph aufgerufen werden kann.
-
- Die höherauflösenden Modi (>0) sind nur nutzbar, wenn vorher eine ent-
- sprechende VESA-Erweiterung geladen wurde bzw. eine VESA-Karte verwendet
- wird!
-
- Es macht sich eine unterschiedliche Behandlung für die Versionen 4/5.x
- und 6 von Turbo-Pascal erforderlich. In der Version 6.0 sind die unten
- beschriebenen Fehler offensichtlich behoben worden, sodaß alles so
- funktioniert wie im Handbuch beschrieben.
- }
-
- interface
-
- uses Graph; { DetectGraph, InitGraph }
-
- const
- VGA256 = 11; { Treibernummer }
-
- { Für die Grafik-Modi sind folgende Konstanten vereinbart }
- V320_200 = 0; { Funktioniert auch ohne VESA-Treiber! }
- V640_400 = 1;
- V640_480 = 2;
- V800_600 = 3;
- V1024_768 = 4;
- V1280_1024 = 5;
-
- {
- Für Version 4/5.x:
- ******************
-
- Mit der angegebenen Treibernummer VGA256 = 11 kann auch direkt InitGraph
- aufgerufen werden. Das funktionierte bisher immer zuverlässig, ist aber
- von Borland nicht beschrieben. Auf keinen Fall funktioniert der von
- Borland beschriebene Weg, die in InstallUserDriver zurückgegebene Nummer
- als Parameter zu verwenden. Bei InstallUserDriver wird die Nummer der
- Treiberdatei zurückgegeben. Da mehrere Werte für GraphDriver (z. B. EGA und
- VGA) auf die gleiche Treiberdatei zurückgreifen (EGAVGA) ist hier die
- korrekte Zuordnung nicht mehr gegeben.
- }
-
-
-
-
- procedure DetectGraph(var GraphDriver : integer;
- var GraphMode : integer);
-
- procedure InitGraph(var GraphDriver : integer;
- var GraphMode : integer; Path : string);
-
- {----------------------------------------------------------------------
- Es steht eine zusätzliche Funktion zur Verfügung, mit der schon vor der
- Initialisierung des Grafikpaketes die Verfügbarkeit einer bestimmten
- Auflösung getestet werden kann. Die Informationen werden der VESA-
- Erweiterung entnommen.
- }
-
- function validGraphMode(GraphMode : integer) : boolean;
-
- {-----------------------------------------------------------------------}
-
-
- implementation
-
- {$F+} { far Aufrufe }
- {$L vesadet.obj}
-
- { Die Erkennung des höchstmöglichen VESA-Modus }
- function detectVESA : integer;
- external;
-
- function validGraphMode(GraphMode : integer) : boolean;
- external;
-
-
- {$ifdef REGISTER_BGI}
- {$L vgavesa.obj}
-
- procedure BGIVesa; external; { der BGI-Treiber als Obj }
- {$endif}
-
- {$F-} { wieder near Aufrufe }
-
-
- {$ifndef VER60}
-
- procedure DetectGraph(var GraphDriver : integer;
- var GraphMode : integer);
-
- var
- mode : integer;
-
- begin
- mode := detectVESA;
- if (mode <= 0) then { Fehler oder nur 320x200}
- Graph.DetectGraph(GraphDriver, GraphMode)
- else
- begin
- GraphDriver := VGA256;
- GraphMode := mode { maximale Auflösung }
- end
- end;
-
-
- procedure InitGraph(var GraphDriver : integer;
- var GraphMode : integer; Path : string);
-
- var
- DriverNumber : integer;
-
- begin {InitGraph}
- if GraphDriver = detect then
- DetectGraph(GraphDriver, GraphMode);
- if GraphDriver = VGA256 then { VGA256-Treiber }
- begin
- DriverNumber := InstallUserDriver('VGAVESA', @detectVESA);
- {$ifdef REGISTER_BGI}
- if RegisterBGIDriver(@BGIVesa) < 0 then
- begin
- writeln('Fehler Treiberregistrierung!');
- halt(20)
- end;
- {$endif}
- end;
- { jetzt "normal" initialisieren }
- Graph.InitGraph(GraphDriver, GraphMode, Path);
- end;
-
- {$else} { TP 6.0 }
-
- const
- installed : boolean = false;
-
- var
- DriverNumber : integer;
-
-
- procedure DetectGraph(var GraphDriver : integer;
- var GraphMode : integer);
-
- begin
- if not installed then
- begin
- DriverNumber := InstallUserDriver('VGAVESA', @detectVESA);
- {$ifdef REGISTER_BGI}
- if RegisterBGIDriver(@BGIVesa) < 0 then
- begin
- writeln('Fehler Treiberregistrierung!');
- halt(20)
- end;
- {$endif}
- installed := true
- end;
- Graph.DetectGraph(GraphDriver, GraphMode);
- end;
-
-
- procedure InitGraph(var GraphDriver : integer;
- var GraphMode : integer; Path : string);
-
-
- begin {InitGraph}
- if not installed then
- begin
- DriverNumber := InstallUserDriver('VGAVESA', @detectVESA);
- {$ifdef REGISTER_BGI}
- if RegisterBGIDriver(@BGIVesa) < 0 then
- begin
- writeln('Fehler Treiberregistrierung!');
- halt(20)
- end;
- {$endif}
- installed := true
- end;
- if GraphDriver = VGA256 then
- GraphDriver := DriverNumber;
- { jetzt "normal" initialisieren }
- Graph.InitGraph(GraphDriver, GraphMode, Path);
- end;
-
-
- {$endif}
-
- end.