home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / Dloads / OTHERUTI / TPASCAL3.ZIP / TVDEMOS.ZIP / GRAPHAPP.PAS < prev    next >
Pascal/Delphi Source File  |  1991-06-11  |  4KB  |  164 lines

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Pascal 6.0                             }
  4. {   Turbo Vision Demo                            }
  5. {   Copyright (c) 1990 by Borland International  }
  6. {                                                }
  7. {************************************************}
  8.  
  9. unit GraphApp;
  10.  
  11. {$F+,O+,S-,D-}
  12.  
  13. { BGI support unit for use with Turbo Vision programs. See
  14.   TVBGI.PAS for an example of how to use this unit.
  15. }
  16.  
  17. interface
  18.  
  19. uses Objects;
  20.  
  21. function GraphAppInit(ADriver, AMode: Integer; ABGIPath: PString;
  22.   LoadAtInit: Boolean): Boolean;
  23. procedure GraphAppDone;
  24. function GraphicsStart: Boolean;
  25. procedure GraphicsStop;
  26. function GraphicsActive: Boolean;
  27.  
  28. implementation
  29.  
  30. uses Graph, Drivers, Memory, App;
  31.  
  32. const
  33.   GraphActive: Boolean = False;
  34.   DriverPtr:   Pointer = nil;
  35.   DriverSize:  Word = 0;
  36.   EmptyString: string[1] = '';
  37.   BGIPath:     PString = @EmptyString;
  38.   Driver:      Integer = Detect;
  39.   Mode:        Integer = 0;
  40.  
  41.   LastDriver = 10;
  42.   DriverName: array[1..LastDriver] of string[8] =
  43.     ('CGA',                {  1. CGA      }
  44.      'CGA',                {  2. MCGA     }
  45.      'EGAVGA',             {  3. EGA      }
  46.      'EGAVGA',             {  4. EGA64    }
  47.      'EGAVGA',             {  5. EGAMONO  }
  48.      'IBM8514',            {  6. IBM8514  }
  49.      'HERC',               {  7. HercMono }
  50.      'ATT',                {  8. ATT400   }
  51.      'EGAVGA',             {  9. VGA      }
  52.      'PC3270');            { 10. PC3270   }
  53.  
  54.  
  55. { Utility procedures }
  56. procedure FreeDriverMem(var P: Pointer; var S: Word);
  57. begin
  58.   if P <> nil then FreeMem(P, S);
  59.   P := nil;
  60.   S := 0;
  61. end;
  62.  
  63. function GraphAppLoadDriver(DriverNum: Integer): Boolean;
  64. var
  65.   F: File;
  66.   S: string[1];
  67. begin
  68.   GraphAppLoadDriver := False;
  69.   if DriverNum <= LastDriver then
  70.   begin
  71.     if BGIPath^[Length(BGIPath^)] = '\' then S := ''
  72.     else S := '\';
  73.     Assign(F, BGIPath^ + S + DriverName[Driver] + '.BGI');
  74.     {$I-}
  75.     Reset(F, 1);
  76.     {$I+}
  77.     if IOResult = 0 then
  78.     begin
  79.       DriverSize := FileSize(F);
  80.       if (DriverSize < 64 * 1024 - $F) and (DriverSize <= MaxAvail) then
  81.       begin
  82.         GetMem(DriverPtr, DriverSize);
  83.         BlockRead(F, DriverPtr^, DriverSize);
  84.         if (IOResult = 0) and (RegisterBGIdriver(DriverPtr) >= 0) then
  85.           GraphAppLoadDriver := True
  86.         else
  87.           FreeDriverMem(DriverPtr, DriverSize);
  88.       end;
  89.       Close(F);
  90.     end;
  91.   end;
  92. end;
  93.  
  94. { Init BGI. If LoadAtInit is true, try to locate and load driver.
  95.   Returns true if LoadAtInit succeeds or is set to False. Does
  96.   not "own" BGIPath, but instead is passed a pointer to a string
  97.   that is allocated elsewhere. Does not de-allocate BGIPath when
  98.   done.
  99. }
  100.  
  101. function GraphAppInit(ADriver, AMode: Integer;
  102.   ABGIPath: PString; LoadAtInit: Boolean): Boolean;
  103. begin
  104.   GraphAppInit := True;
  105.   if ABGIPath <> nil then BGIPath := ABGIPath;
  106.   Driver := ADriver;
  107.   Mode := AMode;
  108.   FreeDriverMem(DriverPtr, DriverSize);
  109.   if LoadAtInit then
  110.   begin
  111.     if Driver = 0 then DetectGraph(Driver, Mode);
  112.     if (Driver > 0) then GraphAppInit := GraphAppLoadDriver(Driver)
  113.     else GraphAppInit := False;
  114.   end;
  115. end;
  116.  
  117. procedure GraphAppDone;
  118. begin
  119.   if GraphActive then CloseGraph;
  120.   FreeDriverMem(DriverPtr, DriverSize);
  121.   GraphActive := False;
  122.   BGIPath := @EmptyString;
  123.   Driver := Detect;
  124.   Mode := 0;
  125. end;
  126.  
  127.  
  128. function GraphicsStart: Boolean;
  129. begin
  130.   GraphicsStart := True;
  131.   if GraphActive then Exit;
  132.   DoneSysError;
  133.   DoneEvents;
  134.   DoneVideo;
  135.   DoneMemory;
  136.   InitGraph(Driver, Mode, BGIPath^);
  137.  
  138.   if Driver < 0 then
  139.   begin
  140.     GraphicsStart := False;
  141.     GraphicsStop;
  142.   end
  143.   else
  144.     GraphActive := True;
  145. end;
  146.  
  147. function GraphicsActive: Boolean;
  148. begin
  149.   GraphicsActive := GraphActive;
  150. end;
  151.  
  152. procedure GraphicsStop;
  153. begin
  154.   if GraphActive then CloseGraph;
  155.   GraphActive := False;
  156.   InitMemory;
  157.   InitVideo;
  158.   InitEvents;
  159.   InitSysError;
  160.   Application^.Redraw;
  161. end;
  162.  
  163. end.
  164.