home *** CD-ROM | disk | FTP | other *** search
/ World of Graphics / WOGRAPH.BIN / 069.EXAMPLE.PAS < prev    next >
Pascal/Delphi Source File  |  1992-06-03  |  4KB  |  136 lines

  1. Program Example;
  2. uses crt,graph;
  3.  
  4. {
  5.   This Turbo Pascal Code example is an example of a program that simply
  6.   loads the SVGA256 device driver, goes into graphics mode, loads an
  7.   image from disk (one with a palette), and displays it.
  8.  
  9.   Procedure Load256Image will load an image file and place it in the variable
  10.   pointer image.  If you are a registered user feel free to use Load256Image
  11.   in your programs.
  12.  
  13.   To run this demonstration, you will need to have Turbo Pascal as well as
  14.   the SVGA256.BGI device driver.  This driver is available as shareware,
  15.   through Jordan Hargave (see ReadMe.Doc), but it is also distributed with
  16.   256 Draw.  You have to have a VGA monitor for this example to run, however,
  17.   Super VGA is not at all required. Please read the note about device
  18.   drivers in the README.DOC file.
  19. }
  20.  
  21.  
  22. Type
  23.     ColorRec = record
  24.         r,g,b: byte;
  25.     end;
  26.     PalType = array[0..255] of ColorRec;
  27.     PalFileType = file of PalType;
  28.  
  29.  
  30.  
  31. procedure Load256Image(var p:pointer; FName: string);
  32. var
  33.    VGAImageSize,ErrCode: word;
  34.    LoadFile: file;
  35.    i: word;
  36.    r: pointer;
  37. begin
  38.     {$I-}
  39.     Assign(LoadFile,FName);
  40.     Reset(LoadFile,1);
  41.     {$I+}
  42.     if IOResult=0 then begin
  43.         GetMem(r,FileSize(LoadFile));
  44.         {$I-}
  45.         BlockRead(LoadFile,r^,FileSize(LoadFile),ErrCode);
  46.         {$I+}
  47.         VGAImageSize := ImageSize(0,0,MemW[Seg(r^):Ofs(r^)],MemW[Seg(r^):Ofs(r^)+2]);
  48.         If (VGAImageSize < FileSize(LoadFile)) then
  49.             GetMem(p,FileSize(LoadFile)-768)
  50.         else
  51.             GetMem(p,FileSize(LoadFile));
  52.         for i := 1 to (VGAImageSize) do
  53.             Mem[Seg(p^):Ofs(p^)+i-1] := Mem[Seg(r^):Ofs(r^)+i-1];
  54.         If (VGAImageSize < FileSize(LoadFile)) then begin
  55.             for i := 0 to 255 do begin
  56.                Port[$3C8] := i;
  57.                Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize];
  58.                Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize+1];
  59.                Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize+2];
  60.             end;
  61.         end;
  62.         FreeMem(r,FileSize(LoadFile));
  63.         if IOResult <> 0 then begin
  64.             textmode(c80);
  65.             writeln('Error: ',ErrCode);
  66.             halt(1);
  67.         end;
  68.         Close(LoadFile);
  69.     end else
  70.         Halt(0);
  71. end;
  72.  
  73. procedure Load256Palette(PalName: string);
  74. Var
  75.     PalFile: PalFileType;
  76.     Pal: ^PalType;
  77.     i: integer;
  78. begin
  79.     New(Pal);
  80.     Assign(PalFile,PalName);
  81.     Reset(PalFile);
  82.     Read(PalFile,Pal^);
  83.     Close(PalFile);
  84.     for i := 0 to 255 do begin
  85.         Port[$3C8] := i;
  86.         Port[$3C9] := Pal^[i].r;
  87.         Port[$3C9] := Pal^[i].g;
  88.         Port[$3C9] := Pal^[i].b;
  89.     end;
  90.     Dispose(Pal);
  91. end;
  92.  
  93.  
  94. function DetectVGA256 : integer;
  95. { Detects VGA or MCGA video cards }
  96. var
  97.    DetectedDriver : integer;
  98.    SuggestedMode  : integer;
  99.  
  100. begin
  101.      DetectGraph(DetectedDriver, SuggestedMode);
  102.      If (DetectedDriver < 9) then begin
  103.          TextMode(c80);
  104.          TextColor(LightGray);
  105.          writeln('This program requires a VGA System.');
  106.          halt;
  107.      end;
  108.      if (DetectedDriver = VGA) or (DetectedDriver = MCGA) then
  109.          DetectVGA256 := 0        { Default video mode = 0 }
  110.      else
  111.          DetectVGA256 := grError; { Couldn't detect hardware }
  112. end; { DetectVGA256 }
  113.  
  114.  
  115.  
  116. Var
  117.    gdrive,gmode: integer;
  118.    image: pointer;
  119.    ch: char;
  120.  
  121. begin
  122.      GDrive := DetectVGA256;
  123.      GDrive := InstallUserDriver('SVGA256', @DetectVGA256);
  124.      GDrive := Detect;
  125.      Gdrive := InstallUserDriver('SVGA256',Nil);
  126.  
  127.      gmode:=0;
  128.      InitGraph(Gdrive,Gmode,'');
  129.      SetGraphMode(Gmode);
  130.  
  131.      Load256Image(image,'256demo.VGA');
  132.      PutImage(0,0,image^,copyput);
  133.      FreeMem(image,imagesize(0,0,MemW[Seg(image^):Ofs(image^)],MemW[Seg(image^):Ofs(image^)+2]));
  134.      ch := readkey;
  135.      TextMode(c80);
  136. end.