home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 06 / cgatr / setpage.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-01-08  |  4.5 KB  |  170 lines

  1. (* ------------------------------------------------------ *)
  2. (*                       SETPAGE.PAS                      *)
  3. (* Ersatz von sechs GRAPH-Routinen, um Programme, die     *)
  4. (* Grafikseiten benötigen, auch auf der CGA-Karte         *)
  5. (* lauffähig zu machen.                                   *)
  6. (*                                                        *)
  7. (* Der Programmteil vom neuen InitGraph, der für das      *)
  8. (* Laden und Registrieren einer BGI-Datei zuständig ist,  *)
  9. (* entspricht teilweise dem Programmbeispiel, das das     *)
  10. (* amerikanische Handbuch für den Befehl                  *)
  11. (* "RegisterBGIDriver" gibt (4.0 Owner's Manual, S. 467;  *)
  12. (* 5.0 Reference Guide, Seite 340).                       *)
  13. (*      (c) 1991 Hanno-Ekkehard Müller & TOOLBOX          *)
  14. (* ------------------------------------------------------ *)
  15. UNIT SetPage;
  16.  
  17. INTERFACE
  18.  
  19. USES Graph, CGAPage;
  20.  
  21.   FUNCTION  GraphResult : INTEGER;
  22.   PROCEDURE InitGraph(VAR GraphDriver, GraphMode : INTEGER;
  23.                           PathToDriver : STRING);
  24.   PROCEDURE CloseGraph;
  25.   PROCEDURE SetActivePage(Page : WORD);
  26.   PROCEDURE SetVisualPage(Page : WORD);
  27.   PROCEDURE ClearDevice;
  28.  
  29.  
  30. IMPLEMENTATION
  31.  
  32. CONST
  33.     { Anzahl der Seiten, die SetPage verwenden soll }
  34.   NPage                = 2;
  35.     { die derzeit sichtbare Seite }
  36.   VPage      : WORD    = 1;
  37.     { die derzeit aktive Seite }
  38.   APage      : WORD    = 1;
  39.     { Gab es einen internen Fehler? }
  40.   GrResult   : INTEGER = grOK;
  41.     { Ist ein Treiber geladen? }
  42.   DriverFlag : BOOLEAN = FALSE;
  43.     { Ist CGAPage installiert? }
  44.   CGAFlag    : BOOLEAN = FALSE;
  45.  
  46. VAR
  47.   Driver     : Pointer;
  48.   DriverSize : WORD;
  49.  
  50.  
  51.   FUNCTION GraphResult : INTEGER;
  52.   BEGIN
  53.     IF GrResult = grOK THEN
  54.       GraphResult := Graph.GraphResult
  55.     ELSE BEGIN
  56.       GraphResult := GrResult;
  57.       GrResult    := grOK;
  58.     END;
  59.   END;
  60.  
  61.   PROCEDURE InitGraph(VAR GraphDriver, GraphMode : INTEGER;
  62.                           PathToDriver : STRING);
  63.   VAR
  64.     f       : FILE;
  65.     i       : INTEGER;
  66.     BGIName : STRING [8];
  67.   BEGIN
  68.     IF GraphDriver = Detect THEN
  69.       DetectGraph(GraphDriver, GraphMode);
  70.     IF Graph.GraphResult < 0 THEN
  71.       Exit;
  72.     CASE GraphDriver OF
  73.       CGA, MCGA    : BGIName := 'CGA';
  74.       EGA, EGA64,
  75.       EGAMono, VGA : BGIName := 'EGAVGA';
  76.      {$IFNDEF VER40}
  77.       IBM8514      : BGIName := 'IBM8514';
  78.      {$ENDIF}
  79.       HercMono     : BGIName := 'HERC';
  80.       ATT400       : BGIName := 'ATT';
  81.       PC3270       : BGIName := 'PC3270';
  82.     END;
  83.     IF DriverFlag THEN
  84.       FreeMem(Driver, DriverSize);
  85.     { Laden der Grafiktreiber-Datei }
  86.     Assign(f, PathToDriver + BGIName + '.BGI');
  87.     {$I-}
  88.     Reset(f,1);
  89.     {$I+}
  90.     IF IOResult <> 0 THEN BEGIN
  91.       GrResult := grFileNotFound;
  92.       Exit;
  93.     END;
  94.     DriverSize := FileSize(f);
  95.     IF MaxAvail < DriverSize THEN BEGIN
  96.       GrResult := grNoLoadMem;
  97.       Exit;
  98.     END;
  99.     GetMem(Driver, DriverSize);
  100.     BlockRead(f, Driver^, DriverSize);
  101.     Close(f);
  102.     GrResult := RegisterBGIdriver(Driver);
  103.     IF GrResult < grOK THEN
  104.       Exit;
  105.     IF CGAFlag THEN
  106.       ReInitCGAPage;
  107.     CGAFlag := (GraphDriver = CGA);
  108.     { Wenn nötig, CGAPage installieren }
  109.     IF CGAFlag THEN
  110.       InitCGAPage(NPage, Driver);
  111.     DriverFlag := TRUE;
  112.     { Originalroutine aufrufen }
  113.     Graph.InitGraph(GraphDriver, GraphMode, '');
  114.   END;
  115.  
  116.   PROCEDURE CloseGraph;
  117.   BEGIN
  118.     Graph.CloseGraph;
  119.       { Sofern nötig, CGAPage reinstallieren }
  120.     IF CGAFlag THEN BEGIN
  121.       ReInitCGAPage;
  122.       CGAFlag := FALSE;
  123.     END;
  124.       { Treiber vom Stack werfen }
  125.     FreeMem(Driver, DriverSize);
  126.     DriverFlag := FALSE;
  127.   END;
  128.  
  129.   PROCEDURE SetActivePage(Page : WORD);
  130.   BEGIN
  131.     IF CGAFlag THEN BEGIN
  132.       APage := Page+1;
  133.       IF VPage = APage THEN
  134.         UsePage(0)
  135.       ELSE
  136.         UsePage(APage);
  137.     END ELSE
  138.       Graph.SetActivePage(Page);
  139.   END;
  140.  
  141.   PROCEDURE SetVisualPage(Page : WORD);
  142.   BEGIN
  143.     IF CGAFlag THEN BEGIN
  144.       CopyPage(0, VPage);
  145.       VPage := Page+1;
  146.       ShowPage(VPage);
  147.       IF VPage = APage THEN
  148.         UsePage(0)
  149.       ELSE
  150.         UsePage(APage);
  151.     END ELSE
  152.       Graph.SetVisualPage(Page);
  153.   END;
  154.  
  155.   PROCEDURE ClearDevice;
  156.   BEGIN
  157.     IF CGAFlag THEN BEGIN
  158.       IF APage = VPage THEN
  159.         ClearPage(0)
  160.       ELSE
  161.         ClearPage(APage);
  162.       MoveTo(0, 0);
  163.     END ELSE
  164.       Graph.ClearDevice;
  165.   END;
  166.  
  167. END.
  168. (* ------------------------------------------------------ *)
  169. (*                  Ende von SETPAGE.PAS                  *)
  170.