home *** CD-ROM | disk | FTP | other *** search
/ Shareware 1 2 the Maxx / sw_1.zip / sw_1 / PROGRAM / CBGRX100.ZIP / CONTRIB / LIBGRX / SRC / LIBGRX.H < prev    next >
Text File  |  1992-04-10  |  20KB  |  572 lines

  1. /** 
  2.  ** LIBGRX.H 
  3.  **
  4.  **  Copyright (C) 1992, Csaba Biegl
  5.  **    820 Stirrup Dr, Nashville, TN, 37221
  6.  **    csaba@vuse.vanderbilt.edu
  7.  **
  8.  **  This file is distributed under the terms listed in the document
  9.  **  "copying.cb", available from the author at the address above.
  10.  **  A copy of "copying.cb" should accompany this file; if not, a copy
  11.  **  should be available from where this file was obtained.  This file
  12.  **  may not be distributed without a verbatim copy of "copying.cb".
  13.  **  You should also have received a copy of the GNU General Public
  14.  **  License along with this program (it is in the file "copying");
  15.  **  if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  16.  **  Cambridge, MA 02139, USA.
  17.  **
  18.  **  This program is distributed in the hope that it will be useful,
  19.  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21.  **  GNU General Public License for more details.
  22.  **/
  23.  
  24. #ifndef _LIBGRX_H_
  25. #define _LIBGRX_H_
  26.  
  27. #ifndef NULL
  28. # define NULL        0
  29. #endif
  30.  
  31. #ifndef TRUE
  32. # define TRUE        1
  33. # define FALSE        0
  34. #endif
  35.  
  36. /*
  37.  * get rid of these stupid keywords (Thanks Intel....)
  38.  */
  39. #if defined(__GNUC__) && !defined(near)
  40. # define near
  41. # define far
  42. # define huge
  43. #endif
  44.  
  45.  
  46. /* ================================================================== */
  47. /*               VERSION SELECTION                  */
  48. /* ================================================================== */
  49.  
  50. /*
  51.  * The GRXPLANES macro selects the version of the library to be compiled.
  52.  * An adapter support is included in the library if its corresponding bit
  53.  * is set:
  54.  *    1:    1 plane (Hercules) version (drivers TBD)
  55.  *    4:    4 plane (EGA VGA 16 color) version
  56.  *    8:    8 plane (VGA 256 color) version
  57.  *     16:     16 plane (VGA w/ HICOLOR DAC) version (drivers TBD)
  58.  *     32:    8 plane MODE X - like memory organization (drivers TBD)
  59.  *                 :
  60.  *                 : (future extensions)
  61.  *                 :
  62.  *    255:      all versions
  63.  *    239:      all versions but the 32K color VGA
  64.  *          etc...
  65.  * Notes:
  66.  *   The 16 plane version can not be compiled using Turbo C.
  67.  *   Selecting a single mode version will result in a slightly smaller and
  68.  *    faster (faster is true especially for the 256 and 32K color VGA modes)
  69.  *    library.
  70.  *   See also the notes about the video drivers needed for this library
  71.  */
  72.  
  73. #define MODE_X        32
  74.  
  75. #if (GRXPLANES == 0) || (GRXPLANES == 0xff)
  76. # undef GRXPLANES
  77. #endif
  78.  
  79. #ifndef GRXPLANES
  80. # ifdef __TURBOC__
  81. #   define GRXPLANES    (1 | 4 | 8 | MODE_X)        /* no 16 bit mode */
  82. # endif
  83. # ifdef __GNUC__
  84. #   define GRXPLANES    (1 | 4 | 8 | 16 | MODE_X)   /* all modes */
  85. # endif
  86. #endif
  87.  
  88. #if defined(__TURBOC__) && (GRXPLANES & 16)
  89. # error Turbo C does not support the HiColor mode
  90. #endif
  91.  
  92.  
  93. /* ================================================================== */
  94. /*            COMPILATION OPTIONS                  */
  95. /* ================================================================== */
  96.  
  97. /*
  98.  * _MAXVIDPLANESIZE
  99.  *    If set use this value as the maximum size for a bitplane in video RAM.
  100.  *    (Set it to 1M (limit by GO32) in 32-bit mode, to 64K for the 16-bit
  101.  *    versions)
  102.  */
  103.  
  104. #ifdef __TURBOC__
  105. # define _MAXVIDPLANESIZE  0x10000UL
  106. #endif
  107.  
  108. #ifdef __GNUC__
  109. # define _MAXVIDPLANESIZE  0x100000UL
  110. #endif
  111.  
  112. /*
  113.  * _MAXMEMPLANESIZE
  114.  *    If set use this value as the maximum size for a bitplane in memory.
  115.  *    (Not needed in 32-bit mode, set it to somewhat less than 64K for
  116.  *    the 16-bit versions. Max value is 64K - 4*16 because of the way the
  117.  *    offset to the bitplanes is calculated in 16 color modes.)
  118.  */
  119.  
  120. #ifdef __TURBOC__
  121. # define _MAXMEMPLANESIZE  0xffc0UL
  122. #endif
  123.  
  124. /*
  125.  * _INLINE256
  126.  *    If set, then the appropriate 256 color primitives will be
  127.  *    expanded inline. (set pixel, read pixel)
  128.  *    Also changes the method of pixel address calculations:
  129.  *    instead of a packed long containing (x,y) pairs, true
  130.  *    pixel addresses (base + y*xsize + x) will be calculated inline.
  131.  *    This option is only effective when compiling a 256 color
  132.  *    single mode library.
  133.  */
  134. #if (GRXPLANES == 8)
  135. # ifdef __TURBOC__
  136. #   define _INLINE256        /* won't work beyond 320x200 !!! */
  137. # endif
  138. # ifdef __GNUC__
  139. #   define _INLINE256
  140. # endif
  141. #endif
  142.  
  143. /*
  144.  * _INLINE32K
  145.  *    If set, then the appropriate 32K color primitives will be
  146.  *    expanded inline. (set pixel, read pixel)
  147.  *    Also changes the method of pixel address calculations:
  148.  *    instead of a packed long containing (x,y) pairs, true
  149.  *    pixel addresses (base + y*xsize + x) will be calculated inline.
  150.  *    This option is only effective when compiling a 256 color
  151.  *    single mode library.
  152.  */
  153. #if (GRXPLANES == 16)
  154. # ifdef __GNUC__
  155. #   define _INLINE32K
  156. # endif
  157. #endif
  158.  
  159.  
  160. /* ================================================================== */
  161. /*        PACK/UNPACK TWO SHORTS INTO A LONG INTEGER              */
  162. /* ================================================================== */
  163.  
  164. #ifdef __GNUC__
  165. # define _PACK2SHORTS(h,l)    (((h) << 16) | (l))
  166. # define _UPPERWORD(x)        ((int)(((unsigned long)(x)) >> 16))
  167. # define _LOWERWORD(x)        ((int)((unsigned short)(x)))
  168. #endif
  169.  
  170. #ifdef __TURBOC__
  171. # define _PACK2SHORTS(h,l)    ((long)((void _seg *)(h) + (void near *)(l)))
  172. # define _UPPERWORD(x)        ((unsigned int)(void _seg *)(void far *)(x))
  173. # define _LOWERWORD(x)        ((unsigned int)(x))
  174. #endif
  175.  
  176.  
  177. /* ================================================================== */
  178. /*        INTERNALLY USED GLOBAL VARIABLES AND FUNCTIONS          */
  179. /* ================================================================== */
  180.  
  181. extern  GrContext _GrContext;        /* current graphics context */
  182. extern  GrContext _GrVidPage;        /* the whole screen */
  183.  
  184. extern  int  _GrCurrentMode;        /* current video mode */
  185. extern  int  _GrCanBcopyInBlit;        /* separate R/W pages in adapter */
  186. extern  int  _GrBigFrameBuffer;        /* set if frame buffer > 64K */
  187. extern  int  _GrNumColors;        /* number of colors */
  188. extern  int  _GrFreeColors;        /* number of free colors */
  189. extern  int  _GrAdapterType;        /* type of video adapter */
  190. extern  int  _GrDriverIndex;        /* low-level video routine selector */
  191. extern  int  _GrRGBcolorMode;        /* set if VGA DAC inited to RGB mode */
  192. extern  int  _GrRdOnlyOffset;        /* add for read-only video page */
  193. extern  int  _GrWrOnlyOffset;        /* add for write-only video page */
  194.  
  195. extern  int  _GrScreenX;        /* screen width  */
  196. extern  int  _GrScreenY;        /* screen height */
  197.  
  198. extern  char _GrMouseDrawn;        /* set if mouse drawn */
  199. extern  char _GrMouseCheck;        /* set if mouse blocking needed */
  200.  
  201. extern  int  (*_GrMouseBlock)(GrContext *c,int x1,int y1,int x2,int y2);
  202. extern  void (*_GrMouseUnBlock)(void);
  203. extern  void (*_GrMouseUnInit)(void);
  204.  
  205. typedef void (*_GrScanLineProc)(int x1,int x2,int y,void *fillarg);
  206.  
  207. extern  void _GrScanConvexPoly(int n,int pt[][2],_GrScanLineProc pc,void *ag);
  208.  
  209.  
  210.  
  211. /* ================================================================== */
  212. /*               CONTEXT ACCESS MACROS                  */
  213. /* ================================================================== */
  214.  
  215. #define GC            GrContext
  216. #define GV            GrVidRAM
  217.  
  218. #define GCM_INVALID        0
  219. #define GCM_MYMEMORY        1        /* set if my context memory */
  220. #define GCM_MYCONTEXT        2        /* set if my context structure */
  221.  
  222. #define XMAX(c)            ((c)->gc_xmax)
  223. #define YMAX(c)            ((c)->gc_ymax)
  224.  
  225. #define XLO(c)            ((c)->gc_xcliplo)
  226. #define XHI(c)            ((c)->gc_xcliphi)
  227. #define YLO(c)            ((c)->gc_ycliplo)
  228. #define YHI(c)            ((c)->gc_ycliphi)
  229.  
  230. #ifdef _INLINE256
  231. # define BASE_ADDRESS(c)    ((long)((c)->gc_baseaddr))
  232. # define LINE_OFFSET(c)        ((c)->gc_lineoffset)
  233. # define PIX_OFFS(c,x,y)    ((unsigned)(((y) * LINE_OFFSET(c)) + (x)))
  234. # define PIX_ADDR(c,x,y)    ((c)->gc_frameaddr + PIX_OFFS(c,x,y))
  235. # define PIXEL_SIZE        1
  236. #elif defined(_INLINE32K)
  237. # define BASE_ADDRESS(c)    ((long)((c)->gc_baseaddr))
  238. # define LINE_OFFSET(c)        ((c)->gc_lineoffset)
  239. # define PIX_OFFS(c,x,y)    ((unsigned)(((y) * LINE_OFFSET(c)) + ((x) << 1)))
  240. # define PIX_ADDR(c,x,y)    ((c)->gc_frameaddr + PIX_OFFS(c,x,y))
  241. # define PIXEL_SIZE        2
  242. #else
  243. # define BASE_ADDRESS(c)    (0L)
  244. # define LINE_OFFSET(c)        (0x10000L)
  245. # define PIX_OFFS(c,x,y)    _PACK2SHORTS(y,x)
  246. # define PIX_ADDR(c,x,y)    ((c)->gc_frameaddr + PIX_OFFS(c,x,y))
  247. # define COORD_X(coord)        _LOWERWORD(coord)
  248. # define COORD_Y(coord)        _UPPERWORD(coord)
  249. # define PIXEL_SIZE        1
  250. #endif
  251.  
  252.  
  253. /* ================================================================== */
  254. /*            CURRENT CONTEXT ACCESS MACROS              */
  255. /* ================================================================== */
  256.  
  257. #define CURC        (&_GrContext)
  258. #define SCREEN        (&_GrVidPage)
  259.  
  260. #define _GrMaxX        XMAX(CURC)
  261. #define _GrMaxY        YMAX(CURC)
  262. #define _GrSizeX    (_GrMaxX + 1)
  263. #define _GrSizeY    (_GrMaxY + 1)
  264.  
  265. #define _GrLoX        XLO(CURC)
  266. #define _GrLoY        YLO(CURC)
  267. #define _GrHiX        XHI(CURC)
  268. #define _GrHiY        YHI(CURC)
  269.  
  270. #define PIXEL_OFFS(x,y) PIX_OFFS(CURC,x,y)
  271. #define PIXEL_ADDR(x,y) PIX_ADDR(CURC,x,y)
  272.  
  273.  
  274. /* ================================================================== */
  275. /*            COLOR MANIPULATION MACROS                  */
  276. /* ================================================================== */
  277.  
  278. #ifdef __TURBOC__
  279. # define C_SET        0        /* color operation flags (XOR...) */
  280. # define C_XOR        (GrXOR >> 8)
  281. # define C_OR        (GrOR  >> 8)
  282. # define C_AND        (GrAND >> 8)
  283. # define C_COLOR    0xff        /* masks out operation flags */
  284. # define C_SIMPLE(c)    (((c) & 0x300) == 0)
  285. # define C_OPER(c)    (((c) >> 8) & 3)
  286. # define C_OPER2(c)    (((c) >> 7) & 6)
  287. #endif
  288.  
  289. #ifdef __GNUC__
  290. # define C_SET        0        /* color operation flags (XOR...) */
  291. # define C_XOR        (GrXOR >> 16)
  292. # define C_OR        (GrOR  >> 16)
  293. # define C_AND        (GrAND >> 16)
  294. # define C_COLOR    0xffff        /* masks out operation flags */
  295. # define C_SIMPLE(c)    (((c) & 0x30000) == 0)
  296. # define C_OPER(c)    (((c) >> 16) & 3)
  297. # define C_OPER2(c)    (((c) >> 15) & 6)
  298. #endif
  299.  
  300. #define  C_SET2        0
  301. #define  C_XOR2        (C_XOR << 1)
  302. #define  C_OR2        (C_OR  << 1)
  303. #define  C_AND2        (C_AND << 1)
  304.  
  305.  
  306. /* ================================================================== */
  307. /*             UTILITY MACROS                      */
  308. /* ================================================================== */
  309.  
  310. #define MIN(a,b)    (((a) < (b)) ? (a) : (b))
  311. #define MAX(a,b)    (((a) > (b)) ? (a) : (b))
  312. #define IABS(x)        (((x) < 0) ?  -(x) : (x))
  313.  
  314. /*
  315.  * exchange two integers
  316.  */
  317. #define EXCHG(a,b) do {                            \
  318.     int __temp__ = (a);                            \
  319.     (a) = (b);                                \
  320.     (b) = __temp__;                            \
  321. } while(0)
  322.  
  323. /*
  324.  * sort two values
  325.  */
  326. #define SORT2(a,b) do {                            \
  327.     if((a) > (b)) EXCHG(a,b);                        \
  328. } while(0)
  329.  
  330. /*
  331.  * conditionally remove/restore mouse cursor for drawing primitives
  332.  */
  333. #define MOUSE_FLAG  char _mouse_block_flag_
  334.  
  335. #define MOUSE_BLOCK(cxt,x1,y1,x2,y2) do {                \
  336.     _mouse_block_flag_ = FALSE;                        \
  337.     if(_GrMouseCheck) {                            \
  338.     _mouse_block_flag_ = (*_GrMouseBlock)(cxt,x1,y1,x2,y2);        \
  339.     }                                    \
  340. } while(0);
  341.  
  342. #define MOUSE_UNBLOCK() do {                        \
  343.     if(_mouse_block_flag_) (*_GrMouseUnBlock)();            \
  344. } while(0);
  345.  
  346.  
  347. /* ================================================================== */
  348. /*           MODE-DEPENDENT LOW-LEVEL DRIVER FUNCTIONS          */
  349. /* ================================================================== */
  350.  
  351. void _GrP4Init(int memsize);
  352. void _GrPXInit(int memsize);
  353.  
  354. int  _GrP1ReadPixel(long addr);
  355. int  _GrP4ReadPixel(long addr);
  356. int  _GrP8ReadPixel(long addr);
  357. int  _GrPHReadPixel(long addr);
  358. int  _GrPXReadPixel(long addr);
  359.  
  360. void _GrP1SetPixel(long addr,int color);
  361. void _GrP4SetPixel(long addr,int color);
  362. void _GrP8SetPixel(long addr,int color);
  363. void _GrPHSetPixel(long addr,int color);
  364. void _GrPXSetPixel(long addr,int color);
  365.  
  366. void _GrP1SetPixRow(long addr,int color,int width);
  367. void _GrP4SetPixRow(long addr,int color,int width);
  368. void _GrP8SetPixRow(long addr,int color,int width);
  369. void _GrPHSetPixRow(long addr,int color,int width);
  370. void _GrPXSetPixRow(long addr,int color,int width);
  371.  
  372. void _GrP1SetPixColumn(long addr,int color,int height);
  373. void _GrP4SetPixColumn(long addr,int color,int height);
  374. void _GrP8SetPixColumn(long addr,int color,int height);
  375. void _GrPHSetPixColumn(long addr,int color,int height);
  376. void _GrPXSetPixColumn(long addr,int color,int height);
  377.  
  378. void _GrP1SetPixBlock(long addr,int color,int w,int h);
  379. void _GrP4SetPixBlock(long addr,int color,int w,int h);
  380. void _GrP8SetPixBlock(long addr,int color,int w,int h);
  381. void _GrPHSetPixBlock(long addr,int color,int w,int h);
  382. void _GrPXSetPixBlock(long addr,int color,int w,int h);
  383.  
  384. void _GrP1DrawLine(long addr,int color,int dx,int dy);
  385. void _GrP4DrawLine(long addr,int color,int dx,int dy);
  386. void _GrP8DrawLine(long addr,int color,int dx,int dy);
  387. void _GrPHDrawLine(long addr,int color,int dx,int dy);
  388. void _GrPXDrawLine(long addr,int color,int dx,int dy);
  389.  
  390. void _GrP1DrawChar(long addr,int w,int h,char far *bits,int fg,int bg);
  391. void _GrP4DrawChar(long addr,int w,int h,char far *bits,int fg,int bg);
  392. void _GrP8DrawChar(long addr,int w,int h,char far *bits,int fg,int bg);
  393. void _GrPHDrawChar(long addr,int w,int h,char far *bits,int fg,int bg);
  394. void _GrPXDrawChar(long addr,int w,int h,char far *bits,int fg,int bg);
  395.  
  396. void _GrP1PixCopy(GC *dst,long daddr,GC *src,long saddr,int w,int h,int op);
  397. void _GrP4PixCopy(GC *dst,long daddr,GC *src,long saddr,int w,int h,int op);
  398. void _GrP8PixCopy(GC *dst,long daddr,GC *src,long saddr,int w,int h,int op);
  399. void _GrPHPixCopy(GC *dst,long daddr,GC *src,long saddr,int w,int h,int op);
  400. void _GrPXPixCopy(GC *dst,long daddr,GC *src,long saddr,int w,int h,int op);
  401.  
  402. void _GrP1FillPattern(int x,int y,int width,GrPattern *p);
  403. void _GrP4FillPattern(int x,int y,int width,GrPattern *p);
  404. void _GrP8FillPattern(int x,int y,int width,GrPattern *p);
  405. void _GrPHFillPattern(int x,int y,int width,GrPattern *p);
  406. void _GrPXFillPattern(int x,int y,int width,GrPattern *p);
  407.  
  408.  
  409. /* ================================================================== */
  410. /*        SELECT LOW-LEVEL VIDEO ACCESS ROUTINES              */
  411. /* ================================================================== */
  412.  
  413. #if GRXPLANES == 1
  414. # define _GrReadPixel(a)        _GrP1ReadPixel(a)
  415. # define _GrSetPixel(a,p)        _GrP1SetPixel(a,p)
  416. # define _GrSetPixRow(a,p,w)        _GrP1SetPixRow(a,p,w)
  417. # define _GrSetPixColumn(a,p,h)        _GrP1SetPixColumn(a,p,h)
  418. # define _GrSetPixBlock(a,p,w,h)    _GrP1SetPixBlock(a,p,w,h)
  419. # define _GrDrawLine(a,p,dx,dy)        _GrP1DrawLine(a,p,dx,dy)
  420. # define _GrDrawChar(a,w,h,b,fg,bg)    _GrP1DrawChar(a,w,h,b,fg,bg)
  421. # define _GrPixCopy(d,da,s,sa,w,h,o)    _GrP1PixCopy(d,da,s,sa,w,h,o)
  422. # define _GrFillPattern(x,y,wdt,p)    _GrP1FillPattern(x,y,wdt,p)
  423. # define _SINGLE_MODE_
  424. #endif
  425.  
  426. #if GRXPLANES == 4
  427. # define _GrReadPixel(a)        _GrP4ReadPixel(a)
  428. # define _GrSetPixel(a,p)        _GrP4SetPixel(a,p)
  429. # define _GrSetPixRow(a,p,w)        _GrP4SetPixRow(a,p,w)
  430. # define _GrSetPixColumn(a,p,h)        _GrP4SetPixColumn(a,p,h)
  431. # define _GrSetPixBlock(a,p,w,h)    _GrP4SetPixBlock(a,p,w,h)
  432. # define _GrDrawLine(a,p,dx,dy)        _GrP4DrawLine(a,p,dx,dy)
  433. # define _GrDrawChar(a,w,h,b,fg,bg)    _GrP4DrawChar(a,w,h,b,fg,bg)
  434. # define _GrPixCopy(d,da,s,sa,w,h,o)    _GrP4PixCopy(d,da,s,sa,w,h,o)
  435. # define _GrFillPattern(x,y,wdt,p)    _GrP4FillPattern(x,y,wdt,p)
  436. # define _SINGLE_MODE_
  437. #endif
  438.  
  439. #if GRXPLANES == 8
  440. # ifdef _INLINE256
  441. #   define _GrReadPixel(a)        (*(unsigned char far *)(a))
  442. #   define _GrSetPixel(a,p) do {                    \
  443.     register unsigned char far *_aa_ = (unsigned char far *)(a);    \
  444.     register unsigned int _pp_ = (unsigned int)(p);            \
  445.     switch(C_OPER(_pp_)) {                        \
  446.         case C_XOR: *_aa_ ^= _pp_; break;                \
  447.         case C_OR:  *_aa_ |= _pp_; break;                \
  448.         case C_AND: *_aa_ &= _pp_; break;                \
  449.         default:    *_aa_  = _pp_; break;                \
  450.     }                                \
  451.     } while(0)
  452. # else
  453. #   define _GrReadPixel(a)        _GrP8ReadPixel(a)
  454. #   define _GrSetPixel(a,p)        _GrP8SetPixel(a,p)
  455. # endif
  456. # define _GrSetPixRow(a,p,w)        _GrP8SetPixRow(a,p,w)
  457. # define _GrSetPixColumn(a,p,h)        _GrP8SetPixColumn(a,p,h)
  458. # define _GrSetPixBlock(a,p,w,h)    _GrP8SetPixBlock(a,p,w,h)
  459. # define _GrDrawLine(a,p,dx,dy)        _GrP8DrawLine(a,p,dx,dy)
  460. # define _GrDrawChar(a,w,h,b,fg,bg)    _GrP8DrawChar(a,w,h,b,fg,bg)
  461. # define _GrPixCopy(d,da,s,sa,w,h,o)    _GrP8PixCopy(d,da,s,sa,w,h,o)
  462. # define _GrFillPattern(x,y,wdt,p)    _GrP8FillPattern(x,y,wdt,p)
  463. # define _SINGLE_MODE_
  464. #endif
  465.  
  466. #if GRXPLANES == 16
  467. # ifdef _INLINE32K
  468. #   define _GrReadPixel(a)        (*(unsigned short far *)(a))
  469. #   define _GrSetPixel(a,p) do {                    \
  470.     register unsigned short far *_aa_ = (unsigned short far *)(a);  \
  471.     register unsigned int _pp_ = (unsigned int)(p);            \
  472.     switch(C_OPER(_pp_)) {                        \
  473.         case C_XOR: *_aa_ ^= _pp_; break;                \
  474.         case C_OR:  *_aa_ |= _pp_; break;                \
  475.         case C_AND: *_aa_ &= _pp_; break;                \
  476.         default:    *_aa_  = _pp_; break;                \
  477.     }                                \
  478.     } while(0)
  479. # else
  480. #   define _GrReadPixel(a)        _GrPHReadPixel(a)
  481. #   define _GrSetPixel(a,p)        _GrPHSetPixel(a,p)
  482. # endif
  483. # define _GrSetPixRow(a,p,w)        _GrPHSetPixRow(a,p,w)
  484. # define _GrSetPixColumn(a,p,h)        _GrPHSetPixColumn(a,p,h)
  485. # define _GrSetPixBlock(a,p,w,h)    _GrPHSetPixBlock(a,p,w,h)
  486. # define _GrDrawLine(a,p,dx,dy)        _GrPHDrawLine(a,p,dx,dy)
  487. # define _GrDrawChar(a,w,h,b,fg,bg)    _GrPHDrawChar(a,w,h,b,fg,bg)
  488. # define _GrPixCopy(d,da,s,sa,w,h,o)    _GrPHPixCopy(d,da,s,sa,w,h,o)
  489. # define _GrFillPattern(x,y,wdt,p)    _GrPHFillPattern(x,y,wdt,p)
  490. # define _SINGLE_MODE_
  491. #endif
  492.  
  493. #if GRXPLANES == MODE_X
  494. # define _GrReadPixel(a)        _GrPXReadPixel(a)
  495. # define _GrSetPixel(a,p)        _GrPXSetPixel(a,p)
  496. # define _GrSetPixRow(a,p,w)        _GrPXSetPixRow(a,p,w)
  497. # define _GrSetPixColumn(a,p,h)        _GrPXSetPixColumn(a,p,h)
  498. # define _GrSetPixBlock(a,p,w,h)    _GrPXSetPixBlock(a,p,w,h)
  499. # define _GrDrawLine(a,p,dx,dy)        _GrPXDrawLine(a,p,dx,dy)
  500. # define _GrDrawChar(a,w,h,b,fg,bg)    _GrPXDrawChar(a,w,h,b,fg,bg)
  501. # define _GrPixCopy(d,da,s,sa,w,h,o)    _GrPXPixCopy(d,da,s,sa,w,h,o)
  502. # define _GrFillPattern(x,y,wdt,p)    _GrPXFillPattern(x,y,wdt,p)
  503. # define _SINGLE_MODE_
  504. #endif
  505.  
  506. #define ReadPixelIndex        0
  507. #define SetPixelIndex        1
  508. #define SetPixRowIndex        2
  509. #define SetPixColumnIndex    3
  510. #define SetPixBlockIndex    4
  511. #define DrawLineIndex        5
  512. #define DrawCharIndex        6
  513. #define PixCopyIndex        7
  514. #define FillPatternIndex    8
  515.  
  516. #define NumOfHandlers        9
  517. typedef void (*handler)(void);
  518.  
  519. #ifndef _SINGLE_MODE_
  520.   extern int  (*_GrReadPixel)(long);
  521.   extern void (*_GrSetPixel)(long,int);
  522.   extern void (*_GrSetPixRow)(long,int,int);
  523.   extern void (*_GrSetPixColumn)(long,int,int);
  524.   extern void (*_GrSetPixBlock)(long,int,int,int);
  525.   extern void (*_GrDrawLine)(long,int,int,int);
  526.   extern void (*_GrDrawChar)(long,int,int,char far *,int,int);
  527.   extern void (*_GrPixCopy)(GC *,long,GC *,long,int,int,int);
  528.   extern void (*_GrFillPattern)(int,int,int,GrPattern *);
  529.   extern handler  _GrResetValues[];
  530.   extern handler *_GrResetAddresses[];
  531. #endif
  532.  
  533. #if (GRXPLANES & 1)
  534. # define USE_DRIVER_1(func)    func
  535. #else
  536. # define USE_DRIVER_1(func)    _GrVoidDriver
  537. #endif
  538.  
  539. #if (GRXPLANES & 4)
  540. # define USE_DRIVER_4(func)    func
  541. #else
  542. # define USE_DRIVER_4(func)    _GrVoidDriver
  543. #endif
  544.  
  545. #if (GRXPLANES & 8)
  546. # define USE_DRIVER_8(func)    func
  547. #else
  548. # define USE_DRIVER_8(func)    _GrVoidDriver
  549. #endif
  550.  
  551. #if (GRXPLANES & 16)
  552. # define USE_DRIVER_H(func)    func
  553. #else
  554. # define USE_DRIVER_H(func)    _GrVoidDriver
  555. #endif
  556.  
  557. #if (GRXPLANES & MODE_X)
  558. # define USE_DRIVER_X(func)    func
  559. #else
  560. # define USE_DRIVER_X(func)    _GrVoidDriver
  561. #endif
  562.  
  563. #define HERC_DRIVER    1
  564. #define VGA16_DRIVER    2
  565. #define VGA256_DRIVER    3
  566. #define VGA32K_DRIVER    4
  567. #define MODE_X_DRIVER    5
  568.  
  569.  
  570. #endif /* whole file */
  571.  
  572.