home *** CD-ROM | disk | FTP | other *** search
- {************************************************}
- { }
- { Turbo Pascal 6.0 }
- { Turbo Vision Demo }
- { Copyright (c) 1990 by Borland International }
- { }
- {************************************************}
-
- unit GraphApp;
-
- {$F+,O+,S-,D-}
-
- { BGI support unit for use with Turbo Vision programs. See
- TVBGI.PAS for an example of how to use this unit.
- }
-
- interface
-
- uses Objects;
-
- function GraphAppInit(ADriver, AMode: Integer; ABGIPath: PString;
- LoadAtInit: Boolean): Boolean;
- procedure GraphAppDone;
- function GraphicsStart: Boolean;
- procedure GraphicsStop;
- function GraphicsActive: Boolean;
-
- implementation
-
- uses Graph, Drivers, Memory, App;
-
- const
- GraphActive: Boolean = False;
- DriverPtr: Pointer = nil;
- DriverSize: Word = 0;
- EmptyString: string[1] = '';
- BGIPath: PString = @EmptyString;
- Driver: Integer = Detect;
- Mode: Integer = 0;
-
- LastDriver = 10;
- DriverName: array[1..LastDriver] of string[8] =
- ('CGA', { 1. CGA }
- 'CGA', { 2. MCGA }
- 'EGAVGA', { 3. EGA }
- 'EGAVGA', { 4. EGA64 }
- 'EGAVGA', { 5. EGAMONO }
- 'IBM8514', { 6. IBM8514 }
- 'HERC', { 7. HercMono }
- 'ATT', { 8. ATT400 }
- 'EGAVGA', { 9. VGA }
- 'PC3270'); { 10. PC3270 }
-
-
- { Utility procedures }
- procedure FreeDriverMem(var P: Pointer; var S: Word);
- begin
- if P <> nil then FreeMem(P, S);
- P := nil;
- S := 0;
- end;
-
- function GraphAppLoadDriver(DriverNum: Integer): Boolean;
- var
- F: File;
- S: string[1];
- begin
- GraphAppLoadDriver := False;
- if DriverNum <= LastDriver then
- begin
- if BGIPath^[Length(BGIPath^)] = '\' then S := ''
- else S := '\';
- Assign(F, BGIPath^ + S + DriverName[Driver] + '.BGI');
- {$I-}
- Reset(F, 1);
- {$I+}
- if IOResult = 0 then
- begin
- DriverSize := FileSize(F);
- if (DriverSize < 64 * 1024 - $F) and (DriverSize <= MaxAvail) then
- begin
- GetMem(DriverPtr, DriverSize);
- BlockRead(F, DriverPtr^, DriverSize);
- if (IOResult = 0) and (RegisterBGIdriver(DriverPtr) >= 0) then
- GraphAppLoadDriver := True
- else
- FreeDriverMem(DriverPtr, DriverSize);
- end;
- Close(F);
- end;
- end;
- end;
-
- { Init BGI. If LoadAtInit is true, try to locate and load driver.
- Returns true if LoadAtInit succeeds or is set to False. Does
- not "own" BGIPath, but instead is passed a pointer to a string
- that is allocated elsewhere. Does not de-allocate BGIPath when
- done.
- }
-
- function GraphAppInit(ADriver, AMode: Integer;
- ABGIPath: PString; LoadAtInit: Boolean): Boolean;
- begin
- GraphAppInit := True;
- if ABGIPath <> nil then BGIPath := ABGIPath;
- Driver := ADriver;
- Mode := AMode;
- FreeDriverMem(DriverPtr, DriverSize);
- if LoadAtInit then
- begin
- if Driver = 0 then DetectGraph(Driver, Mode);
- if (Driver > 0) then GraphAppInit := GraphAppLoadDriver(Driver)
- else GraphAppInit := False;
- end;
- end;
-
- procedure GraphAppDone;
- begin
- if GraphActive then CloseGraph;
- FreeDriverMem(DriverPtr, DriverSize);
- GraphActive := False;
- BGIPath := @EmptyString;
- Driver := Detect;
- Mode := 0;
- end;
-
-
- function GraphicsStart: Boolean;
- begin
- GraphicsStart := True;
- if GraphActive then Exit;
- DoneSysError;
- DoneEvents;
- DoneVideo;
- DoneMemory;
- InitGraph(Driver, Mode, BGIPath^);
-
- if Driver < 0 then
- begin
- GraphicsStart := False;
- GraphicsStop;
- end
- else
- GraphActive := True;
- end;
-
- function GraphicsActive: Boolean;
- begin
- GraphicsActive := GraphActive;
- end;
-
- procedure GraphicsStop;
- begin
- if GraphActive then CloseGraph;
- GraphActive := False;
- InitMemory;
- InitVideo;
- InitEvents;
- InitSysError;
- Application^.Redraw;
- end;
-
- end.