home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / bgi / vesabgi / vgavesa.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-11-05  |  6.1 KB  |  210 lines

  1. {$A+,B-,D-,E-,F+,I-,L-,N-,O+,R-,S-,V-}
  2. unit VGAVESA;
  3.  
  4. {*****************************************************************
  5.               Einbindung BGI-Treiber VGA256
  6. ******************************************************************
  7.  
  8. (c)    ████████████████
  9.        ██           ▐██     Dr. Dieter Weirauch
  10.        ██   W & B   │ █         Karl-Laux-Str. 38
  11.        ██           │ █         Dresden, O-8020
  12.        ██  Software │ █
  13.        ██▄──────────┘ █     Dipl.-Ing. Frank Behrens
  14.        ███▄▄▄▄▄▄▄▄▄▄▄▄█
  15.  
  16.  
  17. ******************************************************************
  18.  
  19.  
  20. Ergänzung der Unit Graph zur Einbindung des BGI-Treibers VGAVESA
  21. ****************************************************************
  22.  
  23. Diese Unit wird nur in die USES-Anweisung nach der Unit Graph aufgenommen.
  24.  
  25. Es ist zusätzlich die Konstante VGA256 für die Treibernummer deklariert,
  26. mit der InitGraph aufgerufen werden kann.
  27.  
  28. Die höherauflösenden Modi (>0) sind nur nutzbar, wenn vorher eine ent-
  29. sprechende VESA-Erweiterung geladen wurde bzw. eine VESA-Karte verwendet
  30. wird!
  31.  
  32. Es macht sich eine unterschiedliche Behandlung für die Versionen 4/5.x
  33. und 6 von Turbo-Pascal erforderlich. In der Version 6.0 sind die unten
  34. beschriebenen Fehler offensichtlich behoben worden, sodaß alles so
  35. funktioniert wie im Handbuch beschrieben.
  36. }
  37.  
  38. interface
  39.  
  40. uses Graph;                                        { DetectGraph, InitGraph }
  41.  
  42. const
  43.    VGA256 = 11;                                             { Treibernummer }
  44.  
  45.    { Für die Grafik-Modi sind folgende Konstanten vereinbart }
  46.    V320_200 = 0;                     { Funktioniert auch ohne VESA-Treiber! }
  47.    V640_400 = 1;
  48.    V640_480 = 2;
  49.    V800_600 = 3;
  50.    V1024_768 = 4;
  51.    V1280_1024 = 5;
  52.  
  53. {
  54. Für Version 4/5.x:
  55. ******************
  56.  
  57. Mit der angegebenen Treibernummer VGA256 = 11 kann auch direkt InitGraph
  58. aufgerufen werden. Das funktionierte bisher immer zuverlässig, ist aber
  59. von Borland nicht beschrieben. Auf keinen Fall funktioniert der von
  60. Borland beschriebene Weg, die in InstallUserDriver zurückgegebene Nummer
  61. als Parameter zu verwenden. Bei InstallUserDriver wird die Nummer der
  62. Treiberdatei zurückgegeben. Da mehrere Werte für GraphDriver (z. B. EGA und
  63. VGA) auf die gleiche Treiberdatei zurückgreifen (EGAVGA) ist hier die
  64. korrekte Zuordnung nicht mehr gegeben.
  65. }
  66.  
  67.  
  68.  
  69.  
  70. procedure DetectGraph(var GraphDriver : integer;
  71.                       var GraphMode : integer);
  72.  
  73. procedure InitGraph(var GraphDriver : integer;
  74.                     var GraphMode : integer; Path : string);
  75.  
  76. {----------------------------------------------------------------------
  77. Es steht eine zusätzliche Funktion zur Verfügung, mit der schon vor der
  78. Initialisierung des Grafikpaketes die Verfügbarkeit einer bestimmten
  79. Auflösung getestet werden kann. Die Informationen werden der VESA-
  80. Erweiterung entnommen.
  81. }
  82.  
  83. function validGraphMode(GraphMode : integer) : boolean;
  84.  
  85. {-----------------------------------------------------------------------}
  86.  
  87.  
  88. implementation
  89.  
  90.    {$F+}                                                      { far Aufrufe }
  91.    {$L vesadet.obj}
  92.  
  93.    { Die Erkennung des höchstmöglichen VESA-Modus }
  94.    function detectVESA : integer;
  95.    external;
  96.  
  97.    function validGraphMode(GraphMode : integer) : boolean;
  98.    external;
  99.  
  100.  
  101.    {$ifdef REGISTER_BGI}
  102.    {$L vgavesa.obj}
  103.  
  104.    procedure BGIVesa; external;                   { der BGI-Treiber als Obj }
  105.    {$endif}
  106.  
  107.    {$F-}                                              { wieder near Aufrufe }
  108.  
  109.  
  110.    {$ifndef VER60}
  111.  
  112.    procedure DetectGraph(var GraphDriver : integer;
  113.                          var GraphMode : integer);
  114.  
  115.    var
  116.       mode : integer;
  117.  
  118.    begin
  119.    mode := detectVESA;
  120.    if (mode <= 0) then                             { Fehler oder nur 320x200}
  121.       Graph.DetectGraph(GraphDriver, GraphMode)
  122.    else
  123.       begin
  124.       GraphDriver := VGA256;
  125.       GraphMode := mode                                { maximale Auflösung }
  126.       end
  127.    end;
  128.  
  129.  
  130.    procedure InitGraph(var GraphDriver : integer;
  131.                        var GraphMode : integer; Path : string);
  132.  
  133.    var
  134.       DriverNumber : integer;
  135.  
  136.    begin                                                          {InitGraph}
  137.    if GraphDriver = detect then
  138.       DetectGraph(GraphDriver, GraphMode);
  139.    if GraphDriver = VGA256 then                            { VGA256-Treiber }
  140.       begin
  141.       DriverNumber := InstallUserDriver('VGAVESA', @detectVESA);
  142.       {$ifdef REGISTER_BGI}
  143.       if RegisterBGIDriver(@BGIVesa) < 0 then
  144.          begin
  145.          writeln('Fehler Treiberregistrierung!');
  146.          halt(20)
  147.          end;
  148.       {$endif}
  149.       end;
  150.    { jetzt "normal" initialisieren }
  151.    Graph.InitGraph(GraphDriver, GraphMode, Path);
  152.    end;
  153.  
  154. {$else}                                                            { TP 6.0 }
  155.  
  156. const
  157.    installed : boolean = false;
  158.  
  159. var
  160.    DriverNumber : integer;
  161.  
  162.  
  163.    procedure DetectGraph(var GraphDriver : integer;
  164.                          var GraphMode : integer);
  165.  
  166.    begin
  167.    if not installed then
  168.       begin
  169.       DriverNumber := InstallUserDriver('VGAVESA', @detectVESA);
  170.       {$ifdef REGISTER_BGI}
  171.       if RegisterBGIDriver(@BGIVesa) < 0 then
  172.          begin
  173.          writeln('Fehler Treiberregistrierung!');
  174.          halt(20)
  175.          end;
  176.       {$endif}
  177.       installed := true
  178.       end;
  179.    Graph.DetectGraph(GraphDriver, GraphMode);
  180.    end;
  181.  
  182.  
  183.    procedure InitGraph(var GraphDriver : integer;
  184.                        var GraphMode : integer; Path : string);
  185.  
  186.  
  187.    begin                                                          {InitGraph}
  188.    if not installed then
  189.       begin
  190.       DriverNumber := InstallUserDriver('VGAVESA', @detectVESA);
  191.       {$ifdef REGISTER_BGI}
  192.       if RegisterBGIDriver(@BGIVesa) < 0 then
  193.          begin
  194.          writeln('Fehler Treiberregistrierung!');
  195.          halt(20)
  196.          end;
  197.       {$endif}
  198.       installed := true
  199.       end;
  200.    if GraphDriver = VGA256 then
  201.       GraphDriver := DriverNumber;
  202.    { jetzt "normal" initialisieren }
  203.    Graph.InitGraph(GraphDriver, GraphMode, Path);
  204.    end;
  205.  
  206.  
  207.    {$endif}
  208.  
  209. end.
  210.