home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SETPAGE.PAS *)
- (* Ersatz von sechs GRAPH-Routinen, um Programme, die *)
- (* Grafikseiten benötigen, auch auf der CGA-Karte *)
- (* lauffähig zu machen. *)
- (* *)
- (* Der Programmteil vom neuen InitGraph, der für das *)
- (* Laden und Registrieren einer BGI-Datei zuständig ist, *)
- (* entspricht teilweise dem Programmbeispiel, das das *)
- (* amerikanische Handbuch für den Befehl *)
- (* "RegisterBGIDriver" gibt (4.0 Owner's Manual, S. 467; *)
- (* 5.0 Reference Guide, Seite 340). *)
- (* (c) 1991 Hanno-Ekkehard Müller & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT SetPage;
-
- INTERFACE
-
- USES Graph, CGAPage;
-
- FUNCTION GraphResult : INTEGER;
- PROCEDURE InitGraph(VAR GraphDriver, GraphMode : INTEGER;
- PathToDriver : STRING);
- PROCEDURE CloseGraph;
- PROCEDURE SetActivePage(Page : WORD);
- PROCEDURE SetVisualPage(Page : WORD);
- PROCEDURE ClearDevice;
-
-
- IMPLEMENTATION
-
- CONST
- { Anzahl der Seiten, die SetPage verwenden soll }
- NPage = 2;
- { die derzeit sichtbare Seite }
- VPage : WORD = 1;
- { die derzeit aktive Seite }
- APage : WORD = 1;
- { Gab es einen internen Fehler? }
- GrResult : INTEGER = grOK;
- { Ist ein Treiber geladen? }
- DriverFlag : BOOLEAN = FALSE;
- { Ist CGAPage installiert? }
- CGAFlag : BOOLEAN = FALSE;
-
- VAR
- Driver : Pointer;
- DriverSize : WORD;
-
-
- FUNCTION GraphResult : INTEGER;
- BEGIN
- IF GrResult = grOK THEN
- GraphResult := Graph.GraphResult
- ELSE BEGIN
- GraphResult := GrResult;
- GrResult := grOK;
- END;
- END;
-
- PROCEDURE InitGraph(VAR GraphDriver, GraphMode : INTEGER;
- PathToDriver : STRING);
- VAR
- f : FILE;
- i : INTEGER;
- BGIName : STRING [8];
- BEGIN
- IF GraphDriver = Detect THEN
- DetectGraph(GraphDriver, GraphMode);
- IF Graph.GraphResult < 0 THEN
- Exit;
- CASE GraphDriver OF
- CGA, MCGA : BGIName := 'CGA';
- EGA, EGA64,
- EGAMono, VGA : BGIName := 'EGAVGA';
- {$IFNDEF VER40}
- IBM8514 : BGIName := 'IBM8514';
- {$ENDIF}
- HercMono : BGIName := 'HERC';
- ATT400 : BGIName := 'ATT';
- PC3270 : BGIName := 'PC3270';
- END;
- IF DriverFlag THEN
- FreeMem(Driver, DriverSize);
- { Laden der Grafiktreiber-Datei }
- Assign(f, PathToDriver + BGIName + '.BGI');
- {$I-}
- Reset(f,1);
- {$I+}
- IF IOResult <> 0 THEN BEGIN
- GrResult := grFileNotFound;
- Exit;
- END;
- DriverSize := FileSize(f);
- IF MaxAvail < DriverSize THEN BEGIN
- GrResult := grNoLoadMem;
- Exit;
- END;
- GetMem(Driver, DriverSize);
- BlockRead(f, Driver^, DriverSize);
- Close(f);
- GrResult := RegisterBGIdriver(Driver);
- IF GrResult < grOK THEN
- Exit;
- IF CGAFlag THEN
- ReInitCGAPage;
- CGAFlag := (GraphDriver = CGA);
- { Wenn nötig, CGAPage installieren }
- IF CGAFlag THEN
- InitCGAPage(NPage, Driver);
- DriverFlag := TRUE;
- { Originalroutine aufrufen }
- Graph.InitGraph(GraphDriver, GraphMode, '');
- END;
-
- PROCEDURE CloseGraph;
- BEGIN
- Graph.CloseGraph;
- { Sofern nötig, CGAPage reinstallieren }
- IF CGAFlag THEN BEGIN
- ReInitCGAPage;
- CGAFlag := FALSE;
- END;
- { Treiber vom Stack werfen }
- FreeMem(Driver, DriverSize);
- DriverFlag := FALSE;
- END;
-
- PROCEDURE SetActivePage(Page : WORD);
- BEGIN
- IF CGAFlag THEN BEGIN
- APage := Page+1;
- IF VPage = APage THEN
- UsePage(0)
- ELSE
- UsePage(APage);
- END ELSE
- Graph.SetActivePage(Page);
- END;
-
- PROCEDURE SetVisualPage(Page : WORD);
- BEGIN
- IF CGAFlag THEN BEGIN
- CopyPage(0, VPage);
- VPage := Page+1;
- ShowPage(VPage);
- IF VPage = APage THEN
- UsePage(0)
- ELSE
- UsePage(APage);
- END ELSE
- Graph.SetVisualPage(Page);
- END;
-
- PROCEDURE ClearDevice;
- BEGIN
- IF CGAFlag THEN BEGIN
- IF APage = VPage THEN
- ClearPage(0)
- ELSE
- ClearPage(APage);
- MoveTo(0, 0);
- END ELSE
- Graph.ClearDevice;
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SETPAGE.PAS *)