unit vgapro;
interface
uses crt,dos, graph;
var DetectedDriver,GraphDriver,GraphMode, SuggestedMode,scri,euro,lcom,simp,tscr:integer;
    AutoDetectPointer:pointer;
    i:byte;

function detectvga16:integer;
function DetectVGA256 : integer;
procedure initialize256(mode:byte);
procedure initialize16(mode:byte);

implementation


function DetectVGA16 : integer;
{$F+}
{ Detects VGA or MCGA video cards }
var
  DetectedDriver : integer;
  SuggestedMode  : integer;
begin
  DetectGraph(DetectedDriver, SuggestedMode);
  if (DetectedDriver = EGA) or (DetectedDriver = VGA) then
  begin
   { Writeln('Which video mode would you like to use?');
    Writeln('  0) 320x200x16');
    Writeln('  1) 640x200x16');
    Writeln('  2) 640x350x16');
    Writeln('  3) 640x480x16');
    Writeln('  4) 800x600x16');
    Writeln('  5) 1024x768x16');
    Write('> ');
    Readln(SuggestedMode);    }
    suggestedmode:=i;
    DetectVGA16 := SuggestedMode;
  end
  else
    DetectVGA16 := grError; { Couldn't detect hardware }
{$F-}
end; { DetectVGA256 }


{$F+}
function DetectVGA256 : integer;
{$F+}
{ Detects VGA or MCGA video cards }
var
  DetectedDriver : integer;
  SuggestedMode  : integer;
begin
  DetectGraph(DetectedDriver, SuggestedMode);
  if (DetectedDriver = VGA) or (DetectedDriver = MCGA) then
  begin
    {Writeln('Which video mode would you like to use?');
    Writeln('  0) 320x200x256');
    Writeln('  1) 640x400x256');
    Writeln('  2) 640x480x256');
    Writeln('  3) 800x600x256');
    Writeln('  4) 1024x768x256');
    Writeln('  5) 640x350x256');
    Writeln('  6) 1280x1024x256');
    Write('> ');
    Readln(SuggestedMode);                }
    suggestedmode:=i;
    DetectVGA256 := SuggestedMode;
  end
  else
    DetectVGA256 := grError; { Couldn't detect hardware }
{$F-}
end; { DetectVGA256 }

function DetectVGA32k : Integer;
var Vid : Integer;

begin
 { Writeln('Which video mode would you like to use?');
  Writeln('  0) 320x200x32768');
  Writeln('  1) 640x350x32768');
  Writeln('  2) 640x400x32768');
  Writeln('  3) 640x480x32768');
  Writeln('  4) 800x600x32768');
  Write('> ');
  Readln(Vid);}
  DetectVGA32k := i;
end;

procedure initialize32k(mode:byte);
begin
i:=mode;
AutoDetectPointer := @DetectVGA32k;
      GraphDriver := InstallUserDriver('Svga32k',AutoDetectPointer);
      GraphDriver := Detect;
      InitGraph(GraphDriver, GraphMode, '');
end;

procedure initialize256(mode:byte);
begin
i:=mode;
AutoDetectPointer := @DetectVGA256;
      GraphDriver := InstallUserDriver('Svga256',AutoDetectPointer);
      GraphDriver := Detect;
      InitGraph(GraphDriver, GraphMode, '');
end;

procedure initialize16(mode:byte);
begin
i:=mode;
      AutoDetectPointer := @DetectVGA16;   { Point to detection routine }
      GraphDriver := InstallUserDriver('SVGA16', AutoDetectPointer);
      GraphDriver := Detect;
      InitGraph(GraphDriver, GraphMode, '');
end;


begin
scri:=installuserfont('scri');
euro:=installuserfont('euro');
lcom:=installuserfont('lcom');
simp:=installuserfont('simp');
tscr:=installuserfont('tscr');
end.