home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / tvision / gravis / common / gr.int < prev   
Encoding:
Text File  |  1994-05-23  |  8.5 KB  |  353 lines

  1. unit Gr;
  2.  
  3. { Unit Gr, Version 1.21.002, Copyright 1993 by Matthias Köppe.
  4.  
  5.   gr.inf gr.txt gr.doc grdpmi
  6.  
  7.   Gr ist eine gemeinsam genutzte Graphikverwaltungsunit. Sie dient der
  8.   Bereitstellung von Graphikparametern und der Verwaltung der
  9.   Speicherbelegung.
  10. }
  11.  
  12.  
  13. interface
  14.  
  15. uses Objects;
  16.  
  17. const
  18.  
  19. { Konstanten für SetGrMode.
  20.  
  21.   Nur die mit einem Asterisk (*) versehenen Graphikmodus-Variationen dürfen
  22.   zusammen mit BGI- oder BIOS-Routinen verwendet werden. Bei den anderen
  23.   gibt es Konflikte mit der veränderten Seitenanordnung.
  24. }
  25.   grVgaLoStd    = 0;            { * 640 x 200, 2 Seiten, normale Anordnung }
  26.   grVgaLoPak    = 1;            {   640 x 200, 2 Seiten, gepackte Anordnung }
  27.   grVgaMedStd   = 2;            { * 640 x 350, 2 Seiten, normale Anordnung }
  28.   grVgaMedOne   = 3;            { * 640 x 350, 1 Seite }
  29.   grVgaMedPak   = 4;            {   640 x 350, 2 Seiten, gepackte Anordnung }
  30.   grVgaHiStd    = 5;            { * 640 x 480, 1 Seite }
  31.   grSvgaStd     = 6;            {   800 x 600, 1 Seite }
  32.   grVga256Std   = 7;            {   320 x 200, 1 Seite, 256 Farben }
  33.   grVgaWdMedStd = 8;            {   720 x 350, 2 Seiten, normale Anordnung }
  34.   grVgaWdMedOne = 9;            {   720 x 350, 1 Seite }
  35.   grVgaWdMedPak = 10;           {   720 x 350, 2 Seiten, gepackte Anordnung }
  36.   grVgaWdHiStd  = 11;           {   720 x 480, 1 Seite }
  37.  
  38. { SetGrMode setzt die Parameter des Graphikmodus, schaltet aber nicht in
  39.   diesen um. Das Umschalten in einen Graphikmodus sollte entweder über das
  40.   BGI (InitGraph), über SetBiosMode oder über systemspezifische Direkt-
  41.   zugriffe erfolgen.
  42. }
  43. procedure SetGrMode(Mode: Word);
  44.  
  45. { SetActivePage setzt die aktuellen Parameter ActivePage (die übergebene
  46.   Nummer) und ActiveSeg (die Segmentadresse der angesprochenen Seite).
  47. }
  48. procedure SetActivePage(Page: Word);
  49.  
  50. { SetVisualPage schaltet zur angegebenen Seite um. Dies geschieht durch einen
  51.   direkten Zugriff auf die Hardware.
  52. }
  53. procedure SetVisualPage(Page: Word);
  54.  
  55. { PageSeg ermittelt die Segmentadresse zu einer angegebenen Seite.
  56.   Wenn Page verschieden von 0 und 1 ist, so wird ActiveSeg zurückgegeben.
  57. }
  58. function PageSeg(Page: Word): Word;
  59.  
  60. { PageAddr ermittelt die gültige Segment:Offset-Adresse der angegebenen Seite.
  61.   Wenn Page verschieden von 0 und 1 ist, so wird ActivePSeg:ActivePOfs
  62.   zurückgegeben.
  63. }
  64. function PageAddr(Page: Word): pointer;
  65.  
  66. { ReserveSegs reserviert im freien VGA-Speicher (Size) Paragraphen. Das
  67.   Startsegment wird im niederwertigen Wort des Funktionsergebnisses zurück-
  68.   gegeben. Das höherwertige Wort gibt die reservierte Größe an.
  69.   Wenn Size = -1, so wird der größte verfügbare Speicherbereich reserviert.
  70. }
  71. function ReserveSegs(Size: Integer): LongInt;
  72.  
  73. { SetBiosMode initialisiert die Graphikkarte durch einen BIOS-Funktions-
  74.   aufruf. Der Parameter ist die BIOS-Nummer des gewünschten Graphikmodus.
  75. }
  76. procedure SetBiosMode(Mode: Byte);
  77.  
  78. { RestoreTextMode kehrt zu dem gespeicherten Textmodus zurück.
  79. }
  80. procedure RestoreTextMode;
  81.  
  82. { Extend überführt einen 640 Pixel breiten Modus in einen 720 Pixel
  83.   breiten Modus.
  84. }
  85. procedure Extend;
  86.  
  87. { Setzt den Zeichenursprung durch Koordinaten.
  88. }
  89. procedure SetDrawOrigin(x, y: Integer);
  90.  
  91. { Setzt den Zeichenursprung durch Datenstruktur.
  92. }
  93. procedure SetDrawOriginP(var P: TPoint);
  94.  
  95. { Setzt das Clipping-Rechteck durch Koordinaten.
  96. }
  97. procedure SetClipRect(x1, y1, x2, y2: Integer);
  98.  
  99. { Setzt das Clipping-Rechteck durch Datenstruktur.
  100. }
  101. procedure SetClipRectR(var R: TRect);
  102.  
  103. { Alle UserXX-Zeiger, die vor dem Aufruf des Initialisierungsteils nil sind,
  104.   werden mit @UserDummy versehen. Dieses verhindert nil-call- und stack-
  105.   param-Kollisionen.
  106. }
  107. procedure UserDummy;
  108.  
  109. { Versieht alle unbelegten UserXX-Zeiger mit @UserDummy.
  110. }
  111. procedure FillUserXX;
  112.  
  113. { Nummer des Graphikmodus
  114. }
  115. var
  116.   GrMode: Word;
  117.  
  118. { gespeicherte Bios-Modusnummer
  119. }
  120. var
  121.   SavedTextMode: Byte;
  122.  
  123. { Parameter des Graphikmodus
  124. }
  125. var
  126.   SizeX, SizeY: Word;
  127.   Page0Seg, Free0Seg, Page1Seg, Free1Seg, EndSeg: Word;
  128.   GrFlags: Word;
  129.   ScreenF: Word;
  130.   RealBytesPerLine: Word;
  131.  
  132. { aktuelle Parameter
  133. }
  134. var
  135.   ActivePage: Word;
  136.   ActiveSeg: Word;
  137.   ActivePSeg: Word;
  138.   ActivePOfs: Word;
  139.   BytesPerLine: Word;
  140.  
  141. { gemeinsam genutzte Zusatzparameter
  142. }
  143. var
  144.   DrawOrigin: TPoint;
  145.   ClipRect: TRect;
  146.  
  147. { Anzahl der frei verfügbaren Zeiger
  148. }
  149. const
  150.   UserCount = 16;
  151.  
  152. { Parameteranzahlvorgabe für Aufrufmodell
  153. }
  154. procedure UserParams(Count: Word);
  155. inline($58 {pop ax});
  156.  
  157. { Frei verfügbare Zeiger.
  158.   Aufrufmodell: AX param word count
  159. }
  160. var
  161.   User00: pointer;
  162.   User01: pointer;
  163.   User02: pointer;
  164.   User03: pointer;
  165.   User04: pointer;
  166.   User05: pointer;
  167.   User06: pointer;
  168.   User07: pointer;
  169.   User08: pointer;
  170.   User09: pointer;
  171.   User0A: pointer;
  172.   User0B: pointer;
  173.   User0C: pointer;
  174.   User0D: pointer;
  175.   User0E: pointer;
  176.   User0F: pointer;
  177.  
  178. { Qualitätsbytes
  179. }
  180. const
  181.   Quality00: Byte = 0;
  182.   Quality01: Byte = 0;
  183.   Quality02: Byte = 0;
  184.   Quality03: Byte = 0;
  185.   Quality04: Byte = 0;
  186.   Quality05: Byte = 0;
  187.   Quality06: Byte = 0;
  188.   Quality07: Byte = 0;
  189.   Quality08: Byte = 0;
  190.   Quality09: Byte = 0;
  191.   Quality0A: Byte = 0;
  192.   Quality0B: Byte = 0;
  193.   Quality0C: Byte = 0;
  194.   Quality0D: Byte = 0;
  195.   Quality0E: Byte = 0;
  196.   Quality0F: Byte = 0;
  197.  
  198. { MetaGraph-Unterstützung
  199. }
  200. const
  201.   ms_Draw       = 1;
  202.   ms_Record     = 2;
  203.   ms_BGI        = 4;
  204.   ms_Execute    = 8;
  205.  
  206. const
  207.   MetaState: Word = ms_Draw or ms_BGI;
  208.  
  209. var
  210.   MetaClipRect: TRect;
  211.   MetaOrigin: TPoint;
  212.  
  213. var
  214.    ExtSave: pointer                     absolute User00;
  215.   qExtSave: Byte                        absolute Quality00;
  216.  
  217. { Exportierte Line-Routine
  218. }
  219. type
  220.   TLineProc = procedure(x1, y1, x2, y2: Integer);
  221. var
  222.    LineProc: TLineProc                  absolute User01;
  223.   qLineProc: Byte                       absolute Quality01;
  224.  
  225. { Gr Clipping Notification
  226. }
  227. const
  228.   gcnUpdAll    = 1;
  229.   gcnUpdOrigin = 2;
  230.  
  231.   gcnStopUpd   = 10;
  232.   gcnContUpd   = 11;
  233.   gcnHaltUpd   = 12;
  234.   gcnStartUpd  = 13;
  235.   gcnUpdOnReq  = 14;
  236.  
  237. type
  238.   TClipNotifyProc = procedure(Msg: Word);
  239. var
  240.    ClipNotifyProc: TClipNotifyProc      absolute User02;
  241.   qClipNotifyProc: Byte                 absolute Quality02;
  242.  
  243. { Init Graphics proc
  244. }
  245. type
  246.   TInitGraphProc = function: Boolean;
  247. var
  248.    InitGraphProc: TInitGraphProc        absolute User03;
  249.   qInitGraphProc: Byte                  absolute Quality03;
  250.  
  251. const
  252.   qInitBiosGraph = 10;
  253.  
  254. function InitBiosGraph: Boolean;
  255.  
  256. { Close Graphics proc
  257. }
  258. var
  259.    CloseGraphProc: procedure            absolute User04;
  260.   qCloseGraphProc: Byte                 absolute Quality04;
  261.  
  262. const
  263.   qCloseBiosGraph = 10;
  264.  
  265. procedure CloseBiosGraph;
  266.  
  267. { Set Active Page proc
  268. }
  269. var
  270.    ActivePageProc: procedure            absolute User05;
  271.   qActivePageProc: Byte                 absolute Quality05;
  272.  
  273. { Change Params proc
  274. }
  275. const
  276.   gcpColor     = 1;
  277.   gcpLineStyle = 2;
  278.   gcpSolidThLn = 3;
  279.   gcpGetSize   = $000;
  280.   gcpGetParams = $100;
  281.   gcpSetParams = $200;
  282.  
  283. type
  284.   TChParamsProc = function(Cmd: Word; var Buf): Word;
  285.  
  286. var
  287.    ChParamsProc: TChParamsProc          absolute User06;
  288.   qChParamsProc: Byte                   absolute Quality06;
  289.  
  290. { Generic notification proc handling
  291. }
  292. const
  293.   npInstall    = 0;
  294.   npUninstall  = 1;
  295.   npGetQuality = 2;
  296.   npSetNext    = 3;
  297.  
  298. type
  299.   TNotifyProc = function(Notice: Word; Info: LongInt): LongInt;
  300.  
  301. procedure InstallNotifyProc(var Chain: TNotifyProc;
  302.   Proc: TNotifyProc);
  303. procedure UninstallNotifyProc(var Chain: TNotifyProc;
  304.   Proc: TNotifyProc);
  305. function DefaultNotify(Notice: Word; Info: LongInt; ThisProc: TNotifyProc;
  306.   var NextProc: TNotifyProc; Quality: Byte): LongInt;
  307.  
  308. { Graphics notification proc
  309. }
  310. var
  311.    GrNotifyProc: TNotifyProc        absolute User07;
  312.   qGrNotifyProc: Byte            absolute Quality07;
  313.  
  314. { Address mapping function
  315. }
  316. type
  317.   TMapAddrFunc = function(Linear: LongInt): pointer;
  318.  
  319. var
  320.    MapAddrFunc: TMapAddrFunc        absolute User08;
  321.   qMapAddrFunc: Byte            absolute Quality08;
  322.  
  323. const
  324.   qVgaMapAddr = 10;
  325.  
  326. function VgaMapAddr(Linear: LongInt): pointer;
  327.  
  328. { Speicherung und Wiederherstellung der VGA-Register
  329. }
  330. procedure SaveRegs;
  331. procedure RestoreRegs;
  332.  
  333. var
  334.   UserRegArea: array[0..6] of Byte;
  335.  
  336. { Protected mode support
  337. }
  338. function SelOfs(ParOfs: pointer): pointer;
  339.  
  340. { Unterstützung der Version 6.0
  341. }
  342. const
  343.   Seg0040: Word = $0040;
  344.   SegA000: Word = $A000;
  345.   SegB000: Word = $B000;
  346.   SegB800: Word = $B800;
  347.  
  348. function GetShiftState: Byte;
  349. procedure NewCache(var P: Pointer; Size: Word);
  350. procedure DisposeCache(P: Pointer);
  351.  
  352. implementation
  353.