home *** CD-ROM | disk | FTP | other *** search
/ Kids Cube / 1_Art.iso / mvpp2 / example.pas < prev    next >
Pascal/Delphi Source File  |  1992-12-21  |  4KB  |  135 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.   MVP Paint.  You have to have a VGA monitor for this example to run, however,
  17.   Super VGA is not at all required.
  18. }
  19.  
  20.  
  21. Type
  22.     ColorRec = record
  23.         r,g,b: byte;
  24.     end;
  25.     PalType = array[0..255] of ColorRec;
  26.     PalFileType = file of PalType;
  27.  
  28.  
  29.  
  30. procedure Load256Image(var p:pointer; FName: string);
  31. var
  32.    VGAImageSize,ErrCode: word;
  33.    LoadFile: file;
  34.    i: word;
  35.    r: pointer;
  36. begin
  37.     {$I-}
  38.     Assign(LoadFile,FName);
  39.     Reset(LoadFile,1);
  40.     {$I+}
  41.     if IOResult=0 then begin
  42.         GetMem(r,FileSize(LoadFile));
  43.         {$I-}
  44.         BlockRead(LoadFile,r^,FileSize(LoadFile),ErrCode);
  45.         {$I+}
  46.         VGAImageSize := ImageSize(0,0,MemW[Seg(r^):Ofs(r^)],MemW[Seg(r^):Ofs(r^)+2]);
  47.         If (VGAImageSize < FileSize(LoadFile)) then
  48.             GetMem(p,FileSize(LoadFile)-768)
  49.         else
  50.             GetMem(p,FileSize(LoadFile));
  51.         for i := 1 to (VGAImageSize) do
  52.             Mem[Seg(p^):Ofs(p^)+i-1] := Mem[Seg(r^):Ofs(r^)+i-1];
  53.         If (VGAImageSize < FileSize(LoadFile)) then begin
  54.             for i := 0 to 255 do begin
  55.                Port[$3C8] := i;
  56.                Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize];
  57.                Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize+1];
  58.                Port[$3C9] := Mem[Seg(r^):Ofs(r^)+(i*3)+VGAImageSize+2];
  59.             end;
  60.         end;
  61.         FreeMem(r,FileSize(LoadFile));
  62.         if IOResult <> 0 then begin
  63.             textmode(c80);
  64.             writeln('Error: ',ErrCode);
  65.             halt(1);
  66.         end;
  67.         Close(LoadFile);
  68.     end else
  69.         Halt(0);
  70. end;
  71.  
  72. procedure Load256Palette(PalName: string);
  73. Var
  74.     PalFile: PalFileType;
  75.     Pal: ^PalType;
  76.     i: integer;
  77. begin
  78.     New(Pal);
  79.     Assign(PalFile,PalName);
  80.     Reset(PalFile);
  81.     Read(PalFile,Pal^);
  82.     Close(PalFile);
  83.     for i := 0 to 255 do begin
  84.         Port[$3C8] := i;
  85.         Port[$3C9] := Pal^[i].r;
  86.         Port[$3C9] := Pal^[i].g;
  87.         Port[$3C9] := Pal^[i].b;
  88.     end;
  89.     Dispose(Pal);
  90. end;
  91.  
  92.  
  93. function DetectVGA256 : integer;
  94. { Detects VGA or MCGA video cards }
  95. var
  96.    DetectedDriver : integer;
  97.    SuggestedMode  : integer;
  98.  
  99. begin
  100.      DetectGraph(DetectedDriver, SuggestedMode);
  101.      If (DetectedDriver < 9) then begin
  102.          TextMode(c80);
  103.          TextColor(LightGray);
  104.          writeln('This program requires a VGA System.');
  105.          halt;
  106.      end;
  107.      if (DetectedDriver = VGA) or (DetectedDriver = MCGA) then
  108.          DetectVGA256 := 0        { Default video mode = 0 }
  109.      else
  110.          DetectVGA256 := grError; { Couldn't detect hardware }
  111. end; { DetectVGA256 }
  112.  
  113.  
  114.  
  115. Var
  116.    gdrive,gmode: integer;
  117.    image: pointer;
  118.    ch: char;
  119.  
  120. begin
  121.      GDrive := DetectVGA256;
  122.      GDrive := InstallUserDriver('SVGA256', @DetectVGA256);
  123.      GDrive := Detect;
  124.      Gdrive := InstallUserDriver('SVGA256',Nil);
  125.  
  126.      gmode:=0;
  127.      InitGraph(Gdrive,Gmode,'');
  128.      SetGraphMode(Gmode);
  129.  
  130.      Load256Image(image,'Moon.VGA');
  131.      PutImage(0,0,image^,copyput);
  132.      FreeMem(image,imagesize(0,0,MemW[Seg(image^):Ofs(image^)],MemW[Seg(image^):Ofs(image^)+2]));
  133.      ch := readkey;
  134.      TextMode(c80);
  135. end.