Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5131 | clevermous | 1 | /**************************************************************************** |
2 | * |
||
3 | * MegaGraph Graphics Library |
||
4 | * |
||
5 | * Copyright (C) 1996 SciTech Software. |
||
6 | * All rights reserved. |
||
7 | * |
||
8 | * Filename: $Workfile: mgraph.h $ |
||
9 | * Version: $Revision: 1.29 $ |
||
10 | * |
||
11 | * Language: ANSI C |
||
12 | * Environment: IBM PC (MS DOS) |
||
13 | * |
||
14 | * Description: Header file for the MegaGraph Graphics Library. You can |
||
15 | * defined one of the following to specify which MGL API you |
||
16 | * wish to use. |
||
17 | * |
||
18 | * MGL_LITE - Compile for the MGL/Lite API |
||
19 | * MGL_PRO - Compile for the MGL/Pro API |
||
20 | * MGL_FIX3D - Compile for the MGL/3D API (fixed point) |
||
21 | * MGL_FLT3D - Compile for the MGL/3D API (floating point) |
||
22 | * |
||
23 | * If you do not define any of these, MGL_FIX3D will be defined |
||
24 | * automatically for compatibility with older versions of the |
||
25 | * MGL. |
||
26 | * |
||
27 | * $Date: 11 Mar 1997 16:46:42 $ $Author: KendallB $ |
||
28 | * |
||
29 | ****************************************************************************/ |
||
30 | |||
31 | #ifndef __MGRAPH_H |
||
32 | #define __MGRAPH_H |
||
33 | |||
34 | #include |
||
35 | |||
36 | #ifndef __DEBUG_H |
||
37 | #include "debug.h" |
||
38 | #endif |
||
39 | |||
40 | #if !defined(MGL_LITE) && !defined(MGL_PRO) && !defined(MGL_FIX3D) \ |
||
41 | && !defined(MGL_FLT3D) |
||
42 | #define MGL_FIX3D |
||
43 | #endif |
||
44 | |||
45 | #if defined(MGL_FIX3D) || defined(MGL_FLT3D) |
||
46 | #define MGL_3D |
||
47 | #endif |
||
48 | |||
49 | /*---------------------- Macros and type definitions ----------------------*/ |
||
50 | |||
51 | #pragma pack(1) /* Pack structures to byte granularity */ |
||
52 | |||
53 | /* Define the version number for the MGL release */ |
||
54 | |||
55 | #define MGL_VERSION_STR "3.1" |
||
56 | |||
57 | /* Define the calling conventions for all public MGL functions. If we |
||
58 | * are compiling the MGL as a DLL, then all public functions are compiled |
||
59 | * and exported with standard C calling conventions, otherwise we use |
||
60 | * the default calling conventions provided by the compiler. |
||
61 | * |
||
62 | * Note that because Watcom C++ uses register based parameter passing |
||
63 | * by default we also provide special DLL's for watcom that are compiled |
||
64 | * with register parameter passing. This is necessary to work with all |
||
65 | * the extra libraries provided as they are all compiled to call MGL |
||
66 | * functions with arguments in registers whenever possible. You can still |
||
67 | * use the standard DLL but if you do you will need to re-compile all |
||
68 | * of the extra libraries with the MGL_DLL #define to change the calling |
||
69 | * conventions for the MGL functions. |
||
70 | */ |
||
71 | |||
72 | #if defined(MGL_DLL) |
||
73 | #define MGLAPI _EXPORT __cdecl |
||
74 | #else |
||
75 | #define MGLAPI _EXPORT _PUBAPI |
||
76 | #endif |
||
77 | #define ASMAPI _EXPORT __cdecl |
||
78 | |||
79 | /* Define a type for integers used in the library. For most environments |
||
80 | * we simply define it as a normal integer (16 or 32 bits), however for |
||
81 | * 16 bit Windows it is defined as a 32 bit integer as all the real code |
||
82 | * lives in a 32 bit DLL that uses 32 bit integers. |
||
83 | */ |
||
84 | |||
85 | #ifndef __M_INT_DEFINED |
||
86 | #if defined(__WINDOWS16__) |
||
87 | typedef long m_int; |
||
88 | typedef unsigned long m_uint; |
||
89 | #else |
||
90 | typedef int m_int; |
||
91 | typedef unsigned int m_uint; |
||
92 | #endif |
||
93 | #define __M_INT_DEFINED |
||
94 | #endif |
||
95 | |||
96 | /* Define the graphics subsystems available */ |
||
97 | |||
98 | typedef enum { |
||
99 | grDETECT = -1, /* Auto detect the graphics subsystem */ |
||
100 | grNONE = 0, /* No graphics hardware detected */ |
||
101 | grVGA, /* Standard VGA */ |
||
102 | grVESA, /* VESA VBE compliant SuperVGA */ |
||
103 | grSVGA, /* Unaccelerated SuperVGA */ |
||
104 | grACCEL, /* Accelerated SuperVGA */ |
||
105 | grDDRAW, /* Unaccelerated DirectDraw */ |
||
106 | grDDRAWACCEL, /* Accelerated DirectDraw */ |
||
107 | grDDRAW3D, /* 3D Accelerated DirectDraw */ |
||
108 | grMAXDRIVER, /* Maximum driver number */ |
||
109 | } MGL_driverType; |
||
110 | |||
111 | /* Graphics modes supported - the only video modes supported by this |
||
112 | * graphics library are those that support at least 16 colors per pixel. |
||
113 | */ |
||
114 | |||
115 | typedef enum { |
||
116 | /* 16 color VGA video modes */ |
||
117 | |||
118 | grVGA_320x200x16, |
||
119 | grVGA_640x200x16, |
||
120 | grVGA_640x350x16, |
||
121 | grVGA_640x400x16, |
||
122 | grVGA_640x480x16, |
||
123 | grSVGA_800x600x16, |
||
124 | |||
125 | /* 256 color VGA ModeX video modes */ |
||
126 | |||
127 | grVGAX_320x200x256, |
||
128 | grVGAX_320x240x256, |
||
129 | grVGAX_320x400x256, |
||
130 | grVGAX_320x480x256, |
||
131 | |||
132 | /* 256 color VGA video modes */ |
||
133 | |||
134 | grVGA_320x200x256, |
||
135 | |||
136 | /* 256 color VGA/SuperVGA video modes */ |
||
137 | |||
138 | grSVGA_320x200x256, |
||
139 | grSVGA_320x240x256, |
||
140 | grSVGA_320x400x256, |
||
141 | grSVGA_320x480x256, |
||
142 | grSVGA_400x300x256, |
||
143 | grSVGA_512x384x256, |
||
144 | grSVGA_640x350x256, |
||
145 | grSVGA_640x400x256, |
||
146 | grSVGA_640x480x256, |
||
147 | grSVGA_800x600x256, |
||
148 | grSVGA_1024x768x256, |
||
149 | grSVGA_1152x864x256, |
||
150 | grSVGA_1280x960x256, |
||
151 | grSVGA_1280x1024x256, |
||
152 | grSVGA_1600x1200x256, |
||
153 | |||
154 | /* 32,768 color Super VGA video modes */ |
||
155 | |||
156 | grSVGA_320x200x32k, |
||
157 | grSVGA_320x240x32k, |
||
158 | grSVGA_320x400x32k, |
||
159 | grSVGA_320x480x32k, |
||
160 | grSVGA_400x300x32k, |
||
161 | grSVGA_512x384x32k, |
||
162 | grSVGA_640x350x32k, |
||
163 | grSVGA_640x400x32k, |
||
164 | grSVGA_640x480x32k, |
||
165 | grSVGA_800x600x32k, |
||
166 | grSVGA_1024x768x32k, |
||
167 | grSVGA_1152x864x32k, |
||
168 | grSVGA_1280x960x32k, |
||
169 | grSVGA_1280x1024x32k, |
||
170 | grSVGA_1600x1200x32k, |
||
171 | |||
172 | /* 65,536 color Super VGA video modes */ |
||
173 | |||
174 | grSVGA_320x200x64k, |
||
175 | grSVGA_320x240x64k, |
||
176 | grSVGA_320x400x64k, |
||
177 | grSVGA_320x480x64k, |
||
178 | grSVGA_400x300x64k, |
||
179 | grSVGA_512x384x64k, |
||
180 | grSVGA_640x350x64k, |
||
181 | grSVGA_640x400x64k, |
||
182 | grSVGA_640x480x64k, |
||
183 | grSVGA_800x600x64k, |
||
184 | grSVGA_1024x768x64k, |
||
185 | grSVGA_1152x864x64k, |
||
186 | grSVGA_1280x960x64k, |
||
187 | grSVGA_1280x1024x64k, |
||
188 | grSVGA_1600x1200x64k, |
||
189 | |||
190 | /* 16 million color, 24 bits per pixel Super VGA video modes */ |
||
191 | |||
192 | grSVGA_320x200x16m, |
||
193 | grSVGA_320x240x16m, |
||
194 | grSVGA_320x400x16m, |
||
195 | grSVGA_320x480x16m, |
||
196 | grSVGA_400x300x16m, |
||
197 | grSVGA_512x384x16m, |
||
198 | grSVGA_640x350x16m, |
||
199 | grSVGA_640x400x16m, |
||
200 | grSVGA_640x480x16m, |
||
201 | grSVGA_800x600x16m, |
||
202 | grSVGA_1024x768x16m, |
||
203 | grSVGA_1152x864x16m, |
||
204 | grSVGA_1280x960x16m, |
||
205 | grSVGA_1280x1024x16m, |
||
206 | grSVGA_1600x1200x16m, |
||
207 | |||
208 | /* 16 million color, 32 bits per pixel Super VGA video modes */ |
||
209 | |||
210 | grSVGA_320x200x4G, |
||
211 | grSVGA_320x240x4G, |
||
212 | grSVGA_320x400x4G, |
||
213 | grSVGA_320x480x4G, |
||
214 | grSVGA_400x300x4G, |
||
215 | grSVGA_512x384x4G, |
||
216 | grSVGA_640x350x4G, |
||
217 | grSVGA_640x400x4G, |
||
218 | grSVGA_640x480x4G, |
||
219 | grSVGA_800x600x4G, |
||
220 | grSVGA_1024x768x4G, |
||
221 | grSVGA_1152x864x4G, |
||
222 | grSVGA_1280x960x4G, |
||
223 | grSVGA_1280x1024x4G, |
||
224 | grSVGA_1600x1200x4G, |
||
225 | |||
226 | /* Render into Windowing System DC (Windows, OS/2 PM, X11) */ |
||
227 | |||
228 | grWINDOWED, |
||
229 | |||
230 | grMAXMODE, /* Maximum mode number */ |
||
231 | } MGL_modeType; |
||
232 | |||
233 | /* MGL_result() error codes */ |
||
234 | |||
235 | typedef enum { |
||
236 | grOK = 0, /* No error */ |
||
237 | grNoInit = -1, /* Graphics driver has not been installed */ |
||
238 | grNotDetected = -2, /* Graphics hardware was not detected */ |
||
239 | grDriverNotFound= -3, /* Graphics driver file not found */ |
||
240 | grBadDriver = -4, /* File loaded was not a graphics driver */ |
||
241 | grLoadMem = -5, /* Not enough memory to load graphics driver*/ |
||
242 | grInvalidMode = -6, /* Invalid graphics mode for selected driver*/ |
||
243 | grError = -8, /* General graphics error */ |
||
244 | grInvalidName = -9, /* Invalid driver name */ |
||
245 | grNoMem = -10, /* Not enough memory to perform operation */ |
||
246 | grNoModeSupport = -11, /* Select video mode not supported by hard. */ |
||
247 | grInvalidFont = -12, /* Invalid font data */ |
||
248 | grBadFontFile = -13, /* File loaded was not a font file */ |
||
249 | grFontNotFound = -14, /* Font file was not found */ |
||
250 | grOldDriver = -15, /* Driver file is an old version */ |
||
251 | grInvalidDevice = -16, /* Invalid device for selected operation */ |
||
252 | grInvalidDC = -17, /* Invalid device context */ |
||
253 | grInvalidCursor = -18, /* Invalid cursor file */ |
||
254 | grCursorNotFound= -19, /* Cursor file was not found */ |
||
255 | grInvalidIcon = -20, /* Invalid icon file */ |
||
256 | grIconNotFound = -21, /* Icon file was not found */ |
||
257 | grInvalidBitmap = -22, /* Invalid bitmap file */ |
||
258 | grBitmapNotFound= -23, /* Bitmap file was not found */ |
||
259 | grZbufferTooBig = -24, /* Zbuffer allocation is too large */ |
||
260 | grNewFontFile = -25, /* Only Windows 2.x font files supported */ |
||
261 | grNoDoubleBuff = -26, /* Double buffering is not available */ |
||
262 | grNoHardwareBlt = -28, /* No hardware bitBlt for OffscreenDC */ |
||
263 | grNoOffscreenMem= -29, /* No available offscreen memory */ |
||
264 | grInvalidPF = -30, /* Invalid pixel format for memory DC */ |
||
265 | |||
266 | grLastError = -31, /* Last error number in list */ |
||
267 | } MGL_errorType; |
||
268 | |||
269 | #define MGL_CLIPON true |
||
270 | #define MGL_CLIPOFF false |
||
271 | |||
272 | /* Color mapped modes */ |
||
273 | |||
274 | typedef enum { |
||
275 | MGL_CMAP_MODE, /* Normal Color mapped mode */ |
||
276 | MGL_DITHER_RGB_MODE, /* 24 bit RGB halftone dithered */ |
||
277 | } MGL_colorModes; |
||
278 | |||
279 | /* Standard colors - this is the standard set of colors for the IBM PC. The |
||
280 | * default palette will have been programmed to contain these values when a |
||
281 | * graphics modes is started. If the palette has been changed, they will |
||
282 | * not correspond to the actual colors on the screen. Under a Windowing |
||
283 | * manage environment these colors will also not be setup by default. |
||
284 | */ |
||
285 | |||
286 | enum MGL_COLORS { |
||
287 | MGL_BLACK, /* dark colors */ |
||
288 | MGL_BLUE, |
||
289 | MGL_GREEN, |
||
290 | MGL_CYAN, |
||
291 | MGL_RED, |
||
292 | MGL_MAGENTA, |
||
293 | MGL_BROWN, |
||
294 | MGL_LIGHTGRAY, |
||
295 | MGL_DARKGRAY, /* light colors */ |
||
296 | MGL_LIGHTBLUE, |
||
297 | MGL_LIGHTGREEN, |
||
298 | MGL_LIGHTCYAN, |
||
299 | MGL_LIGHTRED, |
||
300 | MGL_LIGHTMAGENTA, |
||
301 | MGL_YELLOW, |
||
302 | MGL_WHITE, |
||
303 | }; |
||
304 | |||
305 | /* Windows standard color indices for 256 color bitmaps. 8,9,246,247 are |
||
306 | * reserved and you should not count on these colors always being the |
||
307 | * same. For 16 color bitmaps, colors 248-255 map to colors 8-15. |
||
308 | */ |
||
309 | |||
310 | enum MGL_WIN_COLORS { |
||
311 | MGL_WIN_BLACK = 0, |
||
312 | MGL_WIN_DARKRED = 1, |
||
313 | MGL_WIN_DARKGREEN = 2, |
||
314 | MGL_WIN_DARKYELLOW = 3, |
||
315 | MGL_WIN_DARKBLUE = 4, |
||
316 | MGL_WIN_DARKMAGENTA = 5, |
||
317 | MGL_WIN_DARKCYAN = 6, |
||
318 | MGL_WIN_LIGHTGRAY = 7, |
||
319 | MGL_WIN_TURQUOISE = 8, /* Reserved; dont count on this */ |
||
320 | MGL_WIN_SKYBLUE = 9, /* Reserved; dont count on this */ |
||
321 | MGL_WIN_CREAM = 246, /* Reserved; dont count on this */ |
||
322 | MGL_WIN_MEDIUMGRAY = 247, /* Reserved; dont count on this */ |
||
323 | MGL_WIN_DARKGRAY = 248, |
||
324 | MGL_WIN_LIGHTRED = 249, |
||
325 | MGL_WIN_LIGHTGREEN = 250, |
||
326 | MGL_WIN_LIGHTYELLOW = 251, |
||
327 | MGL_WIN_LIGHTBLUE = 252, |
||
328 | MGL_WIN_LIGHTMAGENTA = 253, |
||
329 | MGL_WIN_LIGHTCYAN = 254, |
||
330 | MGL_WIN_WHITE = 255, |
||
331 | }; |
||
332 | |||
333 | typedef enum { |
||
334 | MGL_MARKER_SQUARE, |
||
335 | MGL_MARKER_CIRCLE, |
||
336 | MGL_MARKER_X, |
||
337 | } MGL_markerStyleType; |
||
338 | |||
339 | typedef enum { /* Write mode operators */ |
||
340 | MGL_REPLACE_MODE, /* Replace mode */ |
||
341 | MGL_AND_MODE, /* AND mode */ |
||
342 | MGL_OR_MODE, /* OR mode */ |
||
343 | MGL_XOR_MODE, /* XOR mode */ |
||
344 | } MGL_writeModeType; |
||
345 | |||
346 | typedef enum { |
||
347 | MGL_BITMAP_SOLID, |
||
348 | MGL_BITMAP_OPAQUE, |
||
349 | MGL_BITMAP_TRANSPARENT, |
||
350 | MGL_PIXMAP, |
||
351 | } MGL_fillStyleType; |
||
352 | |||
353 | typedef enum { |
||
354 | MGL_LINE_PENSTYLE, /* Line drawn in current pen style */ |
||
355 | MGL_LINE_STIPPLE, /* Line drawn with current stipple */ |
||
356 | } MGL_lineStyleType; |
||
357 | |||
358 | typedef enum { |
||
359 | MGL_CONVEX_POLYGON, /* Monotone vertical polygon */ |
||
360 | MGL_COMPLEX_POLYGON, /* Non-Simple polygons */ |
||
361 | MGL_AUTO_POLYGON, /* Auto detect the polygon type */ |
||
362 | } MGL_polygonType; |
||
363 | |||
364 | /* Text manipulation defines */ |
||
365 | |||
366 | typedef enum { |
||
367 | MGL_LEFT_TEXT = 0, /* Justify from left */ |
||
368 | MGL_TOP_TEXT = 0, /* Justify from top */ |
||
369 | MGL_CENTER_TEXT = 1, /* Center the text */ |
||
370 | MGL_RIGHT_TEXT = 2, /* Justify from right */ |
||
371 | MGL_BOTTOM_TEXT = 2, /* Justify from bottom */ |
||
372 | MGL_BASELINE_TEXT = 3, /* Justify from the baseline */ |
||
373 | } MGL_textJustType; |
||
374 | |||
375 | typedef enum { |
||
376 | MGL_LEFT_DIR = 0, /* Text goes to left */ |
||
377 | MGL_UP_DIR = 1, /* Text goes up */ |
||
378 | MGL_RIGHT_DIR = 2, /* Text goes right */ |
||
379 | MGL_DOWN_DIR = 3, /* Text goes down */ |
||
380 | } MGL_textDirType; |
||
381 | |||
382 | /* Font types */ |
||
383 | |||
384 | typedef enum { |
||
385 | MGL_VECTORFONT = 1, /* Vector font */ |
||
386 | MGL_FIXEDFONT, /* Fixed width bitmap font */ |
||
387 | MGL_PROPFONT, /* Proportional width bitmap font */ |
||
388 | } MGL_fontType; |
||
389 | |||
390 | /* Palette rotation directions */ |
||
391 | |||
392 | typedef enum { |
||
393 | MGL_ROTATE_UP, /* Rotate the palette values up */ |
||
394 | MGL_ROTATE_DOWN, /* Rotate the palette values down */ |
||
395 | } MGL_palRotateType; |
||
396 | |||
397 | /* Border drawing routine styles */ |
||
398 | |||
399 | typedef enum { |
||
400 | MGL_BDR_INSET, /* Interior is inset into screen */ |
||
401 | MGL_BDR_OUTSET, /* Interior is outset from screen */ |
||
402 | MGL_BDR_OUTLINE, /* Border is 3d outline */ |
||
403 | } MGL_bdrStyleType; |
||
404 | |||
405 | /* Standard display driver names */ |
||
406 | |||
407 | #define MGL_VGA4NAME "VGA4.DRV" /* Standard VGA drivers */ |
||
408 | #define MGL_VGA8NAME "VGA8.DRV" |
||
409 | #define MGL_VGAXNAME "VGAX.DRV" |
||
410 | |||
411 | #define MGL_SVGA4NAME "SVGA4.DRV" /* Generic SuperVGA drivers */ |
||
412 | #define MGL_SVGA8NAME "SVGA8.DRV" |
||
413 | #define MGL_SVGA16NAME "SVGA16.DRV" |
||
414 | #define MGL_SVGA24NAME "SVGA24.DRV" |
||
415 | #define MGL_SVGA32NAME "SVGA32.DRV" |
||
416 | |||
417 | #define MGL_LINEAR8NAME "LINEAR8.DRV" /* Linear framebuffer drivers */ |
||
418 | #define MGL_LINEAR16NAME "LINEAR16.DRV" |
||
419 | #define MGL_LINEAR24NAME "LINEAR24.DRV" |
||
420 | #define MGL_LINEAR32NAME "LINEAR32.DRV" |
||
421 | |||
422 | #define MGL_ACCEL8NAME "ACCEL8.DRV" /* VBE/AF Accelerated drivers */ |
||
423 | #define MGL_ACCEL16NAME "ACCEL16.DRV" |
||
424 | #define MGL_ACCEL24NAME "ACCEL24.DRV" |
||
425 | #define MGL_ACCEL32NAME "ACCEL32.DRV" |
||
426 | |||
427 | #define MGL_DDRAW8NAME "DDRAW8.DRV" /* DirectDraw drivers */ |
||
428 | #define MGL_DDRAW16NAME "DDRAW16.DRV" |
||
429 | #define MGL_DDRAW24NAME "DDRAW24.DRV" |
||
430 | #define MGL_DDRAW32NAME "DDRAW32.DRV" |
||
431 | |||
432 | /* Standard memory driver names */ |
||
433 | |||
434 | #define MGL_PACKED1NAME "PACK1.DRV" |
||
435 | #define MGL_PACKED4NAME "PACK4.DRV" |
||
436 | #define MGL_PACKED8NAME "PACK8.DRV" |
||
437 | #define MGL_PACKED16NAME "PACK16.DRV" |
||
438 | #define MGL_PACKED24NAME "PACK24.DRV" |
||
439 | #define MGL_PACKED32NAME "PACK32.DRV" |
||
440 | |||
441 | /* Standard bitmap names */ |
||
442 | |||
443 | #define MGL_EMPTY_FILL _MGL_getEmptyPat() |
||
444 | #define MGL_GRAY_FILL _MGL_getGrayPat() |
||
445 | #define MGL_SOLID_FILL _MGL_getSolidPat() |
||
446 | |||
447 | /* Event message masks for keyDown events */ |
||
448 | |||
449 | #define EVT_ASCIIMASK 0x00FF /* Ascii code of key pressed */ |
||
450 | #define EVT_SCANMASK 0xFF00 /* Scan code of key pressed */ |
||
451 | #define EVT_COUNTMASK 0x7FFF0000L /* Count for KEYREPEAT's */ |
||
452 | |||
453 | #define EVT_asciiCode(m) ( (uchar) (m & EVT_ASCIIMASK) ) |
||
454 | #define EVT_scanCode(m) ( (uchar) ( (m & EVT_SCANMASK) >> 8 ) ) |
||
455 | #define EVT_repeatCount(m) ( (short) ( (m & EVT_COUNTMASK) >> 16 ) ) |
||
456 | |||
457 | /* Event message masks for mouse events */ |
||
458 | |||
459 | #define EVT_LEFTBMASK 0x0001 /* Left button is bit 0 */ |
||
460 | #define EVT_RIGHTBMASK 0x0004 /* Right button is bit 1 */ |
||
461 | #define EVT_BOTHBMASK 0x0005 /* Both left and right together */ |
||
462 | #define EVT_ALLBMASK 0x0005 /* All buttons pressed */ |
||
463 | |||
464 | /* Modifier masks */ |
||
465 | |||
466 | #define EVT_LEFTBUT 0x0001 /* Set if left button was down */ |
||
467 | #define EVT_RIGHTBUT 0x0002 /* Set if right button was down */ |
||
468 | #define EVT_RIGHTSHIFT 0x0008 /* Set if right shift down */ |
||
469 | #define EVT_LEFTSHIFT 0x0010 /* Set if left shift down */ |
||
470 | #define EVT_CTRLSTATE 0x0020 /* Set if ctrl key down */ |
||
471 | #define EVT_ALTSTATE 0x0040 /* Set if alt key down */ |
||
472 | #define EVT_LEFTCTRL 0x0080 /* Set if left ctrl key down */ |
||
473 | #define EVT_LEFTALT 0x0100 /* Set if left alt key down */ |
||
474 | #define EVT_SHIFTKEY 0x0018 /* Any shift key */ |
||
475 | |||
476 | /* Event codes */ |
||
477 | |||
478 | #define EVT_NULLEVT 0x0000 /* A null event */ |
||
479 | #define EVT_KEYDOWN 0x0001 /* Key down event */ |
||
480 | #define EVT_KEYREPEAT 0x0002 /* Key repeat event */ |
||
481 | #define EVT_KEYUP 0x0004 /* Key up event */ |
||
482 | #define EVT_MOUSEDOWN 0x0008 /* Mouse down event */ |
||
483 | #define EVT_MOUSEUP 0x0010 /* Mouse up event */ |
||
484 | #define EVT_MOUSEMOVE 0x0020 /* Mouse movement event */ |
||
485 | #define EVT_TIMERTICK 0x0040 /* Timer tick event */ |
||
486 | #define EVT_USEREVT 0x0080 /* First user event */ |
||
487 | |||
488 | /* Event code masks */ |
||
489 | |||
490 | #define EVT_KEYEVT (EVT_KEYDOWN | EVT_KEYREPEAT | EVT_KEYUP) |
||
491 | #define EVT_MOUSEEVT (EVT_MOUSEDOWN | EVT_MOUSEUP | EVT_MOUSEMOVE) |
||
492 | #define EVT_MOUSECLICK (EVT_MOUSEDOWN | EVT_MOUSEUP) |
||
493 | #define EVT_EVERYEVT 0xFFFF |
||
494 | |||
495 | /* Suspend Application callback type codes. This callback is called |
||
496 | * when the user presses one of the corresponding keys indicating that |
||
497 | * they wish to change the active application. The MGL will catch these |
||
498 | * events and if you have registered a callback, will call the callback to |
||
499 | * save the state of the application so that it can be properly restored |
||
500 | * when the user switches back to your application. The MGL takes care of |
||
501 | * all the details about saving and restoring the state of the hardware, |
||
502 | * and all your application needs to do is save its own state so that you can |
||
503 | * re-draw the application screen upon re-activation. |
||
504 | * |
||
505 | * NOTE: Your application suspend callback may get called twice with the |
||
506 | * MGL_DEACTIVATE flag in order to test whether the switch should |
||
507 | * occur (under both DirectDraw and WinDirect fullscreen modes). |
||
508 | * |
||
509 | * NOTE: When your callback is called with the MGL_DEACTIVATE flag, you |
||
510 | * cannot assume that you have access to the display memory surfaces |
||
511 | * as they may have been lost by the time your callback has been called. |
||
512 | */ |
||
513 | |||
514 | #define MGL_DEACTIVATE 0x0001 /* Application losing active focus */ |
||
515 | #define MGL_REACTIVATE 0x0002 /* Application regaining active focus */ |
||
516 | |||
517 | /* Return codes from the suspend application callback. The normal value |
||
518 | * to be returned is MGL_SUSPEND_APP and this will cause the app to be |
||
519 | * suspended while back in GDI mode until the app is re-activated again |
||
520 | * by the user. |
||
521 | * |
||
522 | * MGL_NO_DEACTIVATE signals to WinDirect that the application does not want |
||
523 | * to allow switching to occur, and the switch request will be ignored and |
||
524 | * the app will remain in fullscreen mode. |
||
525 | * |
||
526 | * MGL_NO_SUSPEND_APP can be used to tell WinDirect to switch back to the |
||
527 | * desktop, but not to suspend the application. This must be used with |
||
528 | * care as the suspend application callback is then responsible for setting |
||
529 | * a flag in the application that will stop the application from doing any |
||
530 | * rendering to the framebuffer while the application is in GDI mode. This |
||
531 | * return value is useful for games that need to maintain network |
||
532 | * connectivity while the user has temporarily switched back to GDI mode. |
||
533 | */ |
||
534 | |||
535 | #define MGL_NO_DEACTIVATE 0 /* Dont allow app to be deactivated */ |
||
536 | #define MGL_SUSPEND_APP 1 /* Suspend application until restored */ |
||
537 | #define MGL_NO_SUSPEND_APP 2 /* Dont suspend, but allow switch */ |
||
538 | |||
539 | /* Here we define the structures used to represent points and rectangles */ |
||
540 | |||
541 | typedef struct { |
||
542 | m_int x,y; |
||
543 | } point_t; |
||
544 | |||
545 | typedef struct { |
||
546 | m_int left; |
||
547 | m_int top; |
||
548 | m_int right; |
||
549 | m_int bottom; |
||
550 | } rect_t; |
||
551 | |||
552 | /* All colors are represented as longs by the library. This allows |
||
553 | * code to work correctly with up to 24 bit color device drivers. The |
||
554 | * device drivers themselves expect the color to be a color index if in |
||
555 | * a color mapped mode, or a 15/16/24 bit RGB tuple in a hicolor or truecolor |
||
556 | * mode. You can use the appropriate routines to pack and unpack |
||
557 | * colors into the color_t format. |
||
558 | */ |
||
559 | |||
560 | typedef ulong color_t; |
||
561 | |||
562 | /* Define the value used to clear the software ZBuffer. The MGL always uses |
||
563 | * a > operator for the z compare, and the smallest value is 0. |
||
564 | */ |
||
565 | |||
566 | #define MGL_ZCLEARVAL 0 |
||
567 | |||
568 | /* Structures for passing vertex information to polygon rendering routines. |
||
569 | * All fixed point coordinates are passed in 16.16 signed fixed point |
||
570 | * format, while zbuffer coordinates are passed in 4.28 signed fixed point |
||
571 | * format. The sign bit is used purely for overflow and arithmetic |
||
572 | * internally, and all user passed zbuffer values should be greater than |
||
573 | * 0. All shaded rendering routines either take a color index in 8.16 fixed |
||
574 | * point format (range 0-255.9) or separate RGB components in 8.16 fixed |
||
575 | * point format (range 0-255.9). |
||
576 | */ |
||
577 | |||
578 | #ifdef __FX_FIXED_H |
||
579 | #define fix32_t FXFixed |
||
580 | #else |
||
581 | typedef long fix32_t; |
||
582 | #endif |
||
583 | typedef fix32_t fxcolor_t; |
||
584 | typedef long zfix32_t; |
||
585 | |||
586 | typedef struct { |
||
587 | fix32_t x,y; |
||
588 | } fxpoint_t; |
||
589 | |||
590 | typedef struct { |
||
591 | fxcolor_t r,g,b; |
||
592 | } fxrgb_t; |
||
593 | |||
594 | typedef struct { |
||
595 | fix32_t w,s,t; |
||
596 | } fxtex_t; |
||
597 | |||
598 | typedef struct { |
||
599 | fxcolor_t c; |
||
600 | fxpoint_t p; |
||
601 | } fxpointc_t; |
||
602 | |||
603 | typedef struct { |
||
604 | fxrgb_t c; |
||
605 | fxpoint_t p; |
||
606 | } fxpointrgb_t; |
||
607 | |||
608 | typedef struct { |
||
609 | fxpoint_t p; |
||
610 | zfix32_t z; |
||
611 | } fxpointz_t; |
||
612 | |||
613 | typedef struct { |
||
614 | fxcolor_t c; |
||
615 | fxpoint_t p; |
||
616 | zfix32_t z; |
||
617 | } fxpointcz_t; |
||
618 | |||
619 | typedef struct { |
||
620 | fxrgb_t c; |
||
621 | fxpoint_t p; |
||
622 | zfix32_t z; |
||
623 | } fxpointrgbz_t; |
||
624 | |||
625 | /* Macros to convert between integer and 32 bit fixed point format */ |
||
626 | |||
627 | #define MGL_FIX_1 0x10000L |
||
628 | #define MGL_FIX_2 0x20000L |
||
629 | #define MGL_FIX_HALF 0x08000L |
||
630 | #define MGL_TOFIX(i) ((long)(i) << 16) |
||
631 | #define MGL_FIXTOINT(f) ((m_int)((f) >> 16)) |
||
632 | #define MGL_FIXROUND(f) ((m_int)(((f) + MGL_FIX_HALF) >> 16)) |
||
633 | |||
634 | #define MGL_ZFIX_1 0x10000000L |
||
635 | #define MGL_ZFIX_HALF 0x08000000L |
||
636 | #define MGL_FIXTOZ(i) ((i) << 12) |
||
637 | #define MGL_ZTOFIX(i) ((i) >> 12) |
||
638 | #define MGL_TOZFIX(i) ((long)(i) << 28) |
||
639 | #define MGL_ZFIXTOINT(f) ((m_int)((f) >> 28)) |
||
640 | #define MGL_ZFIXROUND(f) ((m_int)(((f) + MGL_ZFIX_HALF) >> 28)) |
||
641 | |||
642 | /* Region structure */ |
||
643 | |||
644 | #ifdef BUILD_MGL |
||
645 | struct _span_t; |
||
646 | typedef struct _span_t span_t; |
||
647 | #else |
||
648 | typedef void span_t; |
||
649 | #endif |
||
650 | |||
651 | typedef struct { |
||
652 | rect_t rect; /* Bounding rectangle for region */ |
||
653 | span_t *spans; /* Start of span list for region */ |
||
654 | } region_t; |
||
655 | |||
656 | /* Palette entry structure */ |
||
657 | |||
658 | typedef struct { |
||
659 | uchar blue; /* Blue component of color */ |
||
660 | uchar green; /* Green component of color */ |
||
661 | uchar red; /* Blue component of color */ |
||
662 | uchar alpha; /* Alpha or alignment byte */ |
||
663 | } palette_t; |
||
664 | |||
665 | /* Maximum value for each palette entry component */ |
||
666 | |||
667 | #define PALMAX 255 /* Max value for palette components */ |
||
668 | |||
669 | /* Pixel format structure */ |
||
670 | |||
671 | typedef struct { |
||
672 | uchar redMask,greenMask; /* Mask values for pixels */ |
||
673 | uchar blueMask,rsvdMask; |
||
674 | m_int redPos,redAdjust; /* Red position and adjustment */ |
||
675 | m_int greenPos,greenAdjust; /* Green position and adjustment */ |
||
676 | m_int bluePos,blueAdjust; /* Blue position and adjustment */ |
||
677 | m_int rsvdPos,rsvdAdjust; /* Reserved position and adjustment */ |
||
678 | } pixel_format_t; |
||
679 | |||
680 | /* Structure to hold arc coordinate information */ |
||
681 | |||
682 | typedef struct { |
||
683 | m_int x,y; /* Centre point of the arc */ |
||
684 | m_int startX,startY; /* Starting point on arc */ |
||
685 | m_int endX,endY; /* Ending point on arc */ |
||
686 | } arc_coords_t; |
||
687 | |||
688 | /* Mouse cursor structure */ |
||
689 | |||
690 | typedef struct { |
||
691 | ulong xorMask[32]; |
||
692 | ulong andMask[32]; |
||
693 | m_int xHotSpot; |
||
694 | m_int yHotSpot; |
||
695 | } cursor_t; |
||
696 | |||
697 | /* Bitmap structure - always packed pixel DIB format */ |
||
698 | |||
699 | typedef struct { |
||
700 | m_int width; /* Width of bitmap in pixels */ |
||
701 | m_int height; /* Height of bitmap in pixels */ |
||
702 | m_int bitsPerPixel; /* Pixel width */ |
||
703 | m_int bytesPerLine; /* Bytes per line value for surface */ |
||
704 | uchar *surface; /* Pointer to bitmap surface */ |
||
705 | palette_t *pal; /* Palette (NULL if not loaded) */ |
||
706 | pixel_format_t *pf; /* Pixel format (NULL if none) */ |
||
707 | |||
708 | /* ... palette, pixel format and bitmap data are store contiguously */ |
||
709 | } bitmap_t; |
||
710 | |||
711 | /* Icon structure - can be 32x23, 64x64 or in fact any size */ |
||
712 | |||
713 | typedef struct { |
||
714 | m_int byteWidth; /* Byte with for AND mask */ |
||
715 | uchar *andMask; /* Hold punch mask for icon */ |
||
716 | bitmap_t xorMask; /* XOR mask for the icon */ |
||
717 | |||
718 | /* ... AND mask and bitmap structure are stored contiguously */ |
||
719 | } icon_t; |
||
720 | |||
721 | /* Default cursor name */ |
||
722 | |||
723 | #define MGL_DEF_CURSOR _MGL_getDefCursor() |
||
724 | |||
725 | /* Generic Font structure */ |
||
726 | |||
727 | #define _MGL_FNAMESIZE 58 |
||
728 | |||
729 | typedef struct { |
||
730 | char name[_MGL_FNAMESIZE];/* Name of the font */ |
||
731 | short fontType; /* Type of font */ |
||
732 | short maxWidth; /* Maximum character width */ |
||
733 | short maxKern; /* Maximum character kern */ |
||
734 | short fontWidth; /* Font width */ |
||
735 | short fontHeight; /* Font height */ |
||
736 | short ascent; /* Font ascent value */ |
||
737 | short descent; /* Font descent value */ |
||
738 | short leading; /* Font leading value */ |
||
739 | } font_t; |
||
740 | |||
741 | /* Character and font metrics structure */ |
||
742 | |||
743 | typedef struct { |
||
744 | m_int width; /* Width of character or font */ |
||
745 | m_int fontWidth; /* Character width (tightest fit) */ |
||
746 | m_int fontHeight; /* Height of the font */ |
||
747 | m_int ascent; /* Ascent value */ |
||
748 | m_int descent; /* Descent value */ |
||
749 | m_int leading; /* Leading value */ |
||
750 | m_int kern; /* Kern value */ |
||
751 | } metrics_t; |
||
752 | |||
753 | /* Text settings structure */ |
||
754 | |||
755 | typedef struct { |
||
756 | m_int horizJust; /* Horizontal justfication */ |
||
757 | m_int vertJust; /* Vertical justification */ |
||
758 | m_int dir; /* Text drawing direction */ |
||
759 | m_int szNumerx; /* Text x size numerator */ |
||
760 | m_int szNumery; /* Text y size numerator */ |
||
761 | m_int szDenomx; /* Text x size denominator */ |
||
762 | m_int szDenomy; /* Text y size denominator */ |
||
763 | m_int spaceExtra; /* Space extra term */ |
||
764 | font_t *font; /* Currently selected font */ |
||
765 | } text_settings_t; |
||
766 | |||
767 | /* Macros to access the (left,top) and (right,bottom) points of a |
||
768 | * rectangle. |
||
769 | */ |
||
770 | |||
771 | #define MGL_leftTop(r) (((point_t *) &(r))[0]) |
||
772 | #define MGL_rightBottom(r) (((point_t *) &(r))[1]) |
||
773 | |||
774 | typedef uchar pattern_t[8]; |
||
775 | typedef color_t pixpattern_t[8][8]; |
||
776 | |||
777 | /* Attributes structure */ |
||
778 | |||
779 | typedef struct { |
||
780 | color_t color; /* Foreground color */ |
||
781 | color_t backColor; /* Background color */ |
||
782 | m_int colorMode; /* Current color mode */ |
||
783 | m_int markerSize; /* Size of markers in pixels */ |
||
784 | m_int markerStyle; /* Style of markers */ |
||
785 | color_t markerColor; /* Color to draw markers in */ |
||
786 | color_t bdrBright; /* Border bright color */ |
||
787 | color_t bdrDark; /* Border dark color */ |
||
788 | point_t CP; /* Graphics pen position */ |
||
789 | m_int writeMode; /* Scan conversion write mode op. */ |
||
790 | m_int penStyle; /* Pen style */ |
||
791 | m_int penHeight; /* Height of pen */ |
||
792 | m_int penWidth; /* Width of pen */ |
||
793 | pattern_t penPat; /* Pattern for pen */ |
||
794 | pixpattern_t penPixPat; /* Pixmap pattern for pen */ |
||
795 | m_int lineStyle; /* Line style */ |
||
796 | ushort lineStipple; /* Line stipple */ |
||
797 | m_uint stippleCount; /* Current line stipple count */ |
||
798 | rect_t viewPort; /* Viewport dimensions */ |
||
799 | point_t viewPortOrg; /* Logical viewport origin */ |
||
800 | rect_t clipRect; /* Clipping rectangle dimensions */ |
||
801 | m_int clip; /* Is clipping on? */ |
||
802 | m_int polyType; /* Polygon drawing type */ |
||
803 | text_settings_t ts; /* Text drawing attributes */ |
||
804 | } attributes_t; |
||
805 | |||
806 | /* Mode specific format information. This structrure can be used by |
||
807 | * the device driver to build tables of values for all supported modes |
||
808 | */ |
||
809 | |||
810 | typedef struct { |
||
811 | m_int xRes; /* Device x resolution - 1 */ |
||
812 | m_int yRes; /* Device y resolution - 1 */ |
||
813 | m_int bitsPerPixel; /* Number of bits per pixel */ |
||
814 | m_int numberOfPlanes; /* Number of planes in image */ |
||
815 | color_t maxColor; /* Maximum number of colors - 1 */ |
||
816 | m_int maxPage; /* Maximum number of video pages - 1 */ |
||
817 | m_int bytesPerLine; /* Number of bytes in a line */ |
||
818 | m_int aspectRatio; /* Mode aspect ratio (horiz/vert * 1000) */ |
||
819 | long pageSize; /* Number of bytes in a page */ |
||
820 | m_int scratch1; /* Scratch pad value 1 */ |
||
821 | m_int scratch2; /* Scratch pad value 2 */ |
||
822 | char redMaskSize; /* Size of direct color red mask */ |
||
823 | char redFieldPosition; /* Bit posn of lsb of red mask */ |
||
824 | char greenMaskSize; /* Size of direct color green mask */ |
||
825 | char greenFieldPosition; /* Bit posn of lsb of green mask */ |
||
826 | char blueMaskSize; /* Size of direct color blue mask */ |
||
827 | char blueFieldPosition; /* Bit posn of lsb of blue mask */ |
||
828 | char rsvdMaskSize; /* Size of reserved mask */ |
||
829 | char rsvdFieldPosition; /* Bit posn of reserved mask */ |
||
830 | } gmode_t; |
||
831 | |||
832 | /* Public Device Context Structure. The 'surface' member along with the |
||
833 | * gmode_t information block, provides direct access to the active |
||
834 | * display surface for user applications. The MGL virtualises the surface |
||
835 | * in SuperVGA modes that dont have a real linear framebuffer. |
||
836 | */ |
||
837 | |||
838 | typedef struct { |
||
839 | attributes_t a; /* Active device attributes */ |
||
840 | void *surface; /* Pointer to active device surface */ |
||
841 | void *zbuffer; /* Pointer to Z-buffer if allocated */ |
||
842 | m_int zbits; /* Bits per zbuffer element */ |
||
843 | m_int zwidth; /* Width of the zbuffer in pixels */ |
||
844 | gmode_t mi; /* Mode specific information block */ |
||
845 | pixel_format_t pf; /* Current pixel format for device context */ |
||
846 | color_t *colorTab; /* Color lookup table cache */ |
||
847 | color_t *shadeTab; /* Currently active shade table */ |
||
848 | m_int bankOffset; /* Offset of starting bank number */ |
||
849 | |||
850 | /* Remainder of Device Context structure is private and internal */ |
||
851 | } publicDevCtx_t; |
||
852 | |||
853 | #ifndef BUILD_MGL |
||
854 | typedef publicDevCtx_t MGLDC; |
||
855 | #else |
||
856 | struct internalDevCtx_t; |
||
857 | typedef struct internalDevCtx_t MGLDC; |
||
858 | #endif |
||
859 | |||
860 | typedef struct { |
||
861 | ulong which; /* Which window for window manager code */ |
||
862 | m_uint what; /* Event code */ |
||
863 | ulong when; /* Clock ticks since midnight */ |
||
864 | m_int where_x; /* Mouse location */ |
||
865 | m_int where_y; |
||
866 | ulong message; /* Event specific message */ |
||
867 | ulong modifiers; /* Modifier flags */ |
||
868 | m_int next; /* Next event in queue */ |
||
869 | m_int prev; /* Previous event in queue */ |
||
870 | } event_t; |
||
871 | |||
872 | /* Structure containing file I/O functions allowing the user application to |
||
873 | * completely replace the MGL's file I/O functions with their own. This |
||
874 | * allows the app to store all MGL related files in a single large file, |
||
875 | * with encryption or compression is desired. By default normal file I/O |
||
876 | * functions will be used. |
||
877 | */ |
||
878 | |||
879 | typedef struct { |
||
880 | FILE * (*fopen)(const char *filename,const char *mode); |
||
881 | int (*fclose)(FILE *f); |
||
882 | int (*fseek)(FILE *f,long offset,int whence); |
||
883 | long (*ftell)(FILE *f); |
||
884 | size_t (*fread)(void *ptr,size_t size,size_t n,FILE *f); |
||
885 | size_t (*fwrite)(const void *ptr,size_t size,size_t n,FILE *f); |
||
886 | } fileio_t; |
||
887 | |||
888 | /* Define the flags for the types of direct surface access provided */ |
||
889 | |||
890 | #define MGL_NO_ACCESS 0x0 /* Surface cannot be accessed */ |
||
891 | #define MGL_VIRTUAL_ACCESS 0x1 /* Surface is virtualised */ |
||
892 | #define MGL_LINEAR_ACCESS 0x2 /* Surface can be linearly accessed */ |
||
893 | #define MGL_SURFACE_FLAGS 0x3 |
||
894 | |||
895 | /* Define the flags for the types of direct zbuffer access provided */ |
||
896 | |||
897 | #define MGL_NO_ZACCESS 0x0 /* Zbuffer cannot be accessed */ |
||
898 | #define MGL_VIRTUAL_ZACCESS 0x4 /* Zbuffer is virtualised in */ |
||
899 | #define MGL_LINEAR_ZACCESS 0x8 /* Zbuffer can be linearly accessed */ |
||
900 | #define MGL_ZBUFFER_FLAGS 0xC |
||
901 | |||
902 | /* Define the flags for the types of hardware acceleration supported by |
||
903 | * the device context. This will allow the application to tailor the use of |
||
904 | * MGL functions depending upon whether specific hardware support is |
||
905 | * available. Hence applications can use specialised software rendering |
||
906 | * support if the desired hardware support is not available. |
||
907 | * |
||
908 | * NOTE: If the hardware flags are not MGL_HW_NONE, you *must* call |
||
909 | * the MGL_beginDirectAccess() and MGL_endDirectAccess() functions |
||
910 | * before and after any custom code that does direct framebuffer |
||
911 | * rendering!! |
||
912 | * |
||
913 | * This is not necessary for non-accelerated device context, so you |
||
914 | * might want to optimise these calls out if there is no hardware |
||
915 | * acceleration support. |
||
916 | */ |
||
917 | |||
918 | #define MGL_HW_NONE 0x0000 /* No hardware acceleration */ |
||
919 | #define MGL_HW_LINE 0x0010 /* Hardware line drawing */ |
||
920 | #define MGL_HW_STIPPLE_LINE 0x0020 /* Hardware stippled line drawing */ |
||
921 | #define MGL_HW_POLY 0x0040 /* Hardware polygon filling */ |
||
922 | #define MGL_HW_RECT 0x0080 /* Hardware rectangle fill */ |
||
923 | #define MGL_HW_PATT_RECT 0x0100 /* Hardware pattern rectangle fill */ |
||
924 | #define MGL_HW_CLRPATT_RECT 0x0200 /* Hardware color pattern fill */ |
||
925 | #define MGL_HW_SCR_BLT 0x0400 /* Hardware screen/screen bitBlt */ |
||
926 | #define MGL_HW_SRCTRANS_BLT 0x0800 /* Hardware source transparent blt */ |
||
927 | #define MGL_HW_DSTTRANS_BLT 0x1000 /* Hardware dest. transparent blt */ |
||
928 | #define MGL_HW_MONO_BLT 0x2000 /* Hardware monochrome blt */ |
||
929 | #define MGL_HW_CLIP 0x4000 /* Hardware clipping */ |
||
930 | #define MGL_HW_FLAGS 0xFFF0 |
||
931 | |||
932 | #ifdef __cplusplus |
||
933 | extern "C" { /* Use "C" linkage when in C++ mode */ |
||
934 | #endif |
||
935 | |||
936 | /*------------------------- Function Prototypes ---------------------------*/ |
||
937 | |||
938 | /*--------------------------------------------------------------------------- |
||
939 | * Routines bound to a specific device context. These routines all take |
||
940 | * an MGLDC as a parmeter for the context to work with and hence dont work |
||
941 | * with the current context. If however the context passed is the currently |
||
942 | * active context, all changes to that context are reflected in the |
||
943 | * currently active context as well. |
||
944 | *-------------------------------------------------------------------------*/ |
||
945 | |||
946 | /* Environment detection and initialisation */ |
||
947 | |||
948 | m_int MGLAPI MGL_registerDriver(const char *name,void *driver); |
||
949 | void MGLAPI MGL_unregisterAllDrivers(void); |
||
950 | void MGLAPI MGL_registerAllDispDrivers(bool useLinear,bool useDirectDraw,bool useWinDirect); |
||
951 | void MGLAPI MGL_registerAllMemDrivers(void); |
||
952 | void MGLAPI MGL_detectGraph(m_int *driver,m_int *mode); |
||
953 | uchar * MGLAPI MGL_availableModes(void); |
||
954 | m_int MGLAPI MGL_availablePages(m_int mode); |
||
955 | m_int MGLAPI MGL_modeResolution(m_int mode,m_int *xRes,m_int *yRes,m_int *bitsPerPixel); |
||
956 | bool MGLAPI MGL_isDisplayDC(MGLDC *dc); |
||
957 | bool MGLAPI MGL_isWindowedDC(MGLDC *dc); |
||
958 | bool MGLAPI MGL_isMemoryDC(MGLDC *dc); |
||
959 | void MGLAPI MGL_exit(void); |
||
960 | void MGLAPI MGL_setBufSize(unsigned size); |
||
961 | void MGLAPI MGL_fatalError(const char *msg); |
||
962 | m_int MGLAPI MGL_result(void); |
||
963 | void MGLAPI MGL_setResult(m_int result); |
||
964 | const char * MGLAPI MGL_errorMsg(m_int err); |
||
965 | const char * MGLAPI MGL_modeName(m_int mode); |
||
966 | const char * MGLAPI MGL_modeDriverName(m_int mode); |
||
967 | const char * MGLAPI MGL_driverName(m_int driver); |
||
968 | m_int MGLAPI MGL_getDriver(MGLDC *dc); |
||
969 | m_int MGLAPI MGL_getMode(MGLDC *dc); |
||
970 | m_int MGLAPI MGL_surfaceAccessType(MGLDC *dc); |
||
971 | m_int MGLAPI MGL_zbufferAccessType(MGLDC *dc); |
||
972 | long MGLAPI MGL_getHardwareFlags(MGLDC *dc); |
||
973 | void MGLAPI MGL_defaultAttributes(MGLDC *dc); |
||
974 | void MGLAPI MGL_makeSubDC(MGLDC *dc,m_int left,m_int top,m_int right,m_int bottom); |
||
975 | |||
976 | /* Viewport and clip rectangle manipulation bound to a specific DC */ |
||
977 | |||
978 | void MGLAPI MGL_setViewportDC(MGLDC *dc,rect_t view); |
||
979 | void MGLAPI MGL_setRelViewportDC(MGLDC *dc,rect_t view); |
||
980 | void MGLAPI MGL_getViewportDC(MGLDC *dc,rect_t *view); |
||
981 | void MGLAPI MGL_setViewportOrgDC(MGLDC *dc,point_t org); |
||
982 | void MGLAPI MGL_getViewportOrgDC(MGLDC *dc,point_t *org); |
||
983 | void MGLAPI MGL_globalToLocalDC(MGLDC *dc,point_t *p); |
||
984 | void MGLAPI MGL_localToGlobalDC(MGLDC *dc,point_t *p); |
||
985 | m_int MGLAPI MGL_maxxDC(MGLDC *dc); |
||
986 | m_int MGLAPI MGL_maxyDC(MGLDC *dc); |
||
987 | void MGLAPI MGL_setClipRectDC(MGLDC *dc,rect_t clip); |
||
988 | void MGLAPI MGL_getClipRectDC(MGLDC *dc,rect_t *clip); |
||
989 | void MGLAPI MGL_setClipModeDC(MGLDC *dc,bool mode); |
||
990 | bool MGLAPI MGL_getClipModeDC(MGLDC *dc); |
||
991 | |||
992 | /* Color and palette manipulation */ |
||
993 | |||
994 | color_t MGLAPI MGL_realColor(MGLDC *dc,m_int color); |
||
995 | color_t MGLAPI MGL_rgbColor(MGLDC *dc,uchar R,uchar G,uchar B); |
||
996 | void MGLAPI MGL_setPaletteEntry(MGLDC *dc,m_int entry,uchar red,uchar green,uchar blue); |
||
997 | void MGLAPI MGL_getPaletteEntry(MGLDC *dc,m_int entry,uchar *red,uchar *green,uchar *blue); |
||
998 | void MGLAPI MGL_setPalette(MGLDC *dc,palette_t *pal,m_int numColors,m_int startIndex); |
||
999 | void MGLAPI MGL_getPalette(MGLDC *dc,palette_t *pal,m_int numColors,m_int startIndex); |
||
1000 | void ASMAPI MGL_rotatePalette(MGLDC *dc,m_int numColors,m_int startIndex,m_int direction); |
||
1001 | bool ASMAPI MGL_fadePalette(MGLDC *dc,palette_t *fullIntensity,m_int numColors,m_int startIndex,uchar intensity); |
||
1002 | void MGLAPI MGL_realizePalette(MGLDC *dc,m_int numColors,m_int startIndex,m_int waitVRT); |
||
1003 | m_int MGLAPI MGL_getPaletteSize(MGLDC *dc); |
||
1004 | void MGLAPI MGL_getDefaultPalette(MGLDC *dc,palette_t *pal); |
||
1005 | void MGLAPI MGL_setDefaultPalette(MGLDC *dc); |
||
1006 | #ifndef MGL_LITE |
||
1007 | bool MGLAPI MGL_checkIdentityPalette(bool enable); |
||
1008 | void MGLAPI MGL_mapToPalette(MGLDC *dc,palette_t *pal); |
||
1009 | #endif |
||
1010 | |||
1011 | /* Generic device context information and manipulation */ |
||
1012 | |||
1013 | bool MGLAPI MGL_haveWidePalette(MGLDC *dc); |
||
1014 | m_int MGLAPI MGL_getBitsPerPixel(MGLDC *dc); |
||
1015 | color_t MGLAPI MGL_maxColor(MGLDC *dc); |
||
1016 | m_int MGLAPI MGL_maxPage(MGLDC *dc); |
||
1017 | m_int MGLAPI MGL_sizex(MGLDC *dc); |
||
1018 | m_int MGLAPI MGL_sizey(MGLDC *dc); |
||
1019 | void MGLAPI MGL_getPixelFormat(MGLDC *dc,pixel_format_t *pf); |
||
1020 | void * MGLAPI MGL_computePixelAddr(MGLDC *dc,int x,int y); |
||
1021 | |||
1022 | /* Double buffering support */ |
||
1023 | |||
1024 | void MGLAPI MGL_setActivePage(MGLDC *dc,m_int page); |
||
1025 | m_int MGLAPI MGL_getActivePage(MGLDC *dc); |
||
1026 | void MGLAPI MGL_setVisualPage(MGLDC *dc,m_int page,m_int waitVRT); |
||
1027 | m_int MGLAPI MGL_getVisualPage(MGLDC *dc); |
||
1028 | void MGLAPI MGL_setDisplayStart(MGLDC *dc,m_int x,m_int y,m_int waitFlag); |
||
1029 | void MGLAPI MGL_getDisplayStart(MGLDC *dc,m_int *x,m_int *y); |
||
1030 | void MGLAPI MGL_vSync(MGLDC *dc); |
||
1031 | bool MGLAPI MGL_doubleBuffer(MGLDC *dc); |
||
1032 | void MGLAPI MGL_singleBuffer(MGLDC *dc); |
||
1033 | void MGLAPI MGL_swapBuffers(MGLDC *dc,m_int waitVRT); |
||
1034 | |||
1035 | /* Zbuffering support */ |
||
1036 | |||
1037 | #ifdef MGL_3D |
||
1038 | m_int MGLAPI MGL_getHardwareZBufferDepth(MGLDC *dc); |
||
1039 | bool ASMAPI MGL_zBegin(MGLDC *dc,m_int zbits); |
||
1040 | bool MGLAPI MGL_zShareZBuffer(MGLDC *dc,MGLDC *dcShared,m_int zbits); |
||
1041 | #endif |
||
1042 | |||
1043 | /* Event handling support */ |
||
1044 | |||
1045 | bool MGLAPI EVT_getNext(event_t *evt,m_uint mask); |
||
1046 | bool MGLAPI EVT_peekNext(event_t *evt,m_uint mask); |
||
1047 | bool MGLAPI EVT_post(ulong which,m_uint what,ulong message,ulong modifiers); |
||
1048 | void MGLAPI EVT_flush(m_uint mask); |
||
1049 | void MGLAPI EVT_halt(event_t *evt,m_uint mask); |
||
1050 | m_int MGLAPI EVT_setTimerTick(m_int ticks); |
||
1051 | |||
1052 | /*--------------------------------------------------------------------------- |
||
1053 | * Routines bound to the currently active context. All these routines work |
||
1054 | * with the currently active context and do not reflect any changes made |
||
1055 | * to the global context to the original user supplied context (because it |
||
1056 | * may be cached). The cached DC is automatically flushed back to the |
||
1057 | * original DC when a new context is enabled with MGL_makeCurrentDC(). |
||
1058 | * |
||
1059 | * Before destroying a DC that is current, make sure you call |
||
1060 | * MGL_makeCurrentDC(NULL) first! |
||
1061 | *-------------------------------------------------------------------------*/ |
||
1062 | |||
1063 | /* Routines to change the active global device context */ |
||
1064 | |||
1065 | MGLDC * MGLAPI MGL_makeCurrentDC(MGLDC *dc); |
||
1066 | bool MGLAPI MGL_isCurrentDC(MGLDC *dc); |
||
1067 | |||
1068 | /* Current device context information and manipulation */ |
||
1069 | |||
1070 | m_int MGLAPI MGL_getAspectRatio(void); |
||
1071 | void MGLAPI MGL_setAspectRatio(m_int aspectRatio); |
||
1072 | void ASMAPI MGL_setColor(color_t color); |
||
1073 | void MGLAPI MGL_setColorRGB(uchar R,uchar G,uchar B); |
||
1074 | void MGLAPI MGL_setColorCI(m_int index); |
||
1075 | color_t MGLAPI MGL_getColor(void); |
||
1076 | void ASMAPI MGL_setBackColor(color_t color); |
||
1077 | color_t MGLAPI MGL_getBackColor(void); |
||
1078 | color_t ASMAPI MGL_packColor(pixel_format_t *pf,uchar R,uchar G,uchar B); |
||
1079 | void MGLAPI MGL_unpackColor(pixel_format_t *pf,color_t color,uchar *R,uchar *G,uchar *B); |
||
1080 | color_t ASMAPI MGL_packColorRGB(uchar R,uchar G,uchar B); |
||
1081 | void MGLAPI MGL_unpackColorRGB(color_t color,uchar *R,uchar *G,uchar *B); |
||
1082 | color_t MGLAPI MGL_defaultColor(void); |
||
1083 | #ifndef MGL_LITE |
||
1084 | void MGLAPI MGL_setMarkerSize(m_int size); |
||
1085 | m_int MGLAPI MGL_getMarkerSize(void); |
||
1086 | void MGLAPI MGL_setMarkerStyle(m_int style); |
||
1087 | m_int MGLAPI MGL_getMarkerStyle(void); |
||
1088 | void MGLAPI MGL_setMarkerColor(color_t color); |
||
1089 | color_t MGLAPI MGL_getMarkerColor(void); |
||
1090 | void MGLAPI MGL_setBorderColors(color_t bright,color_t dark); |
||
1091 | void MGLAPI MGL_getBorderColors(color_t *bright,color_t *dark); |
||
1092 | void ASMAPI MGL_setWriteMode(m_int mode); |
||
1093 | m_int MGLAPI MGL_getWriteMode(void); |
||
1094 | void ASMAPI MGL_setPenStyle(m_int style); |
||
1095 | m_int MGLAPI MGL_getPenStyle(void); |
||
1096 | void MGLAPI MGL_setLineStyle(m_int style); |
||
1097 | m_int MGLAPI MGL_getLineStyle(void); |
||
1098 | void ASMAPI MGL_setLineStipple(ushort stipple); |
||
1099 | ushort MGLAPI MGL_getLineStipple(void); |
||
1100 | void ASMAPI MGL_setLineStippleCount(m_uint stippleCount); |
||
1101 | m_uint MGLAPI MGL_getLineStippleCount(void); |
||
1102 | void ASMAPI MGL_setPenBitmapPattern(const pattern_t *pat); |
||
1103 | void MGLAPI MGL_getPenBitmapPattern(pattern_t *pat); |
||
1104 | void ASMAPI MGL_setPenPixmapPattern(const pixpattern_t *pat); |
||
1105 | void MGLAPI MGL_getPenPixmapPattern(pixpattern_t *pat); |
||
1106 | void MGLAPI MGL_setPenSize(m_int height,m_int width); |
||
1107 | void MGLAPI MGL_getPenSize(m_int *height,m_int *width); |
||
1108 | #ifndef MGL_LITE |
||
1109 | void MGLAPI MGL_setColorMapMode(m_int mode); |
||
1110 | m_int MGLAPI MGL_getColorMapMode(void); |
||
1111 | #endif |
||
1112 | void MGLAPI MGL_setPolygonType(m_int type); |
||
1113 | m_int MGLAPI MGL_getPolygonType(void); |
||
1114 | #endif |
||
1115 | void MGLAPI MGL_getAttributes(attributes_t *attr); |
||
1116 | void MGLAPI MGL_restoreAttributes(attributes_t *attr); |
||
1117 | |||
1118 | /* Device clearing */ |
||
1119 | |||
1120 | void ASMAPI MGL_clearDevice(void); |
||
1121 | void MGLAPI MGL_clearViewport(void); |
||
1122 | |||
1123 | /* Viewport and clip rectangle manipulation */ |
||
1124 | |||
1125 | void MGLAPI MGL_setViewport(rect_t view); |
||
1126 | void MGLAPI MGL_setRelViewport(rect_t view); |
||
1127 | void MGLAPI MGL_getViewport(rect_t *view); |
||
1128 | void MGLAPI MGL_setViewportOrg(point_t org); |
||
1129 | void MGLAPI MGL_getViewportOrg(point_t *org); |
||
1130 | void MGLAPI MGL_globalToLocal(point_t *p); |
||
1131 | void MGLAPI MGL_localToGlobal(point_t *p); |
||
1132 | m_int MGLAPI MGL_maxx(void); |
||
1133 | m_int MGLAPI MGL_maxy(void); |
||
1134 | void MGLAPI MGL_setClipRect(rect_t clip); |
||
1135 | void MGLAPI MGL_getClipRect(rect_t *clip); |
||
1136 | void MGLAPI MGL_setClipMode(bool mode); |
||
1137 | bool MGLAPI MGL_getClipMode(void); |
||
1138 | |||
1139 | /* Pixel plotting */ |
||
1140 | |||
1141 | void MGLAPI MGL_pixelCoord(m_int x,m_int y); |
||
1142 | color_t MGLAPI MGL_getPixelCoord(m_int x,m_int y); |
||
1143 | void ASMAPI MGL_beginPixel(void); |
||
1144 | void MGLAPI MGL_pixelCoordFast(m_int x,m_int y); |
||
1145 | color_t MGLAPI MGL_getPixelCoordFast(m_int x,m_int y); |
||
1146 | void ASMAPI MGL_endPixel(void); |
||
1147 | |||
1148 | /* Line drawing and clipping */ |
||
1149 | |||
1150 | void MGLAPI MGL_moveToCoord(m_int x,m_int y); |
||
1151 | void MGLAPI MGL_moveRelCoord(m_int dx,m_int dy); |
||
1152 | void MGLAPI MGL_lineToCoord(m_int x,m_int y); |
||
1153 | void MGLAPI MGL_lineRelCoord(m_int dx,m_int dy); |
||
1154 | m_int MGLAPI MGL_getX(void); |
||
1155 | m_int MGLAPI MGL_getY(void); |
||
1156 | void MGLAPI MGL_getCP(point_t* CP); |
||
1157 | void MGLAPI MGL_lineCoord(m_int x1,m_int y1,m_int x2,m_int y2); |
||
1158 | void MGLAPI MGL_lineCoordFX(fix32_t x1,fix32_t y1,fix32_t x2,fix32_t y2); |
||
1159 | void MGLAPI MGL_lineCoordFast(m_int x1,m_int y1,m_int x2,m_int y2); |
||
1160 | void MGLAPI MGL_lineCoordFastFX(fix32_t x1,fix32_t y1,fix32_t x2,fix32_t y2); |
||
1161 | void MGLAPI MGL_lineEngine(fix32_t x1,fix32_t y1,fix32_t x2,fix32_t y2,void (ASMAPI *plotPoint)(m_int x,m_int y)); |
||
1162 | bool MGLAPI MGL_clipLineFX(fix32_t *x1,fix32_t *y1,fix32_t *x2,fix32_t *y2,fix32_t left,fix32_t top,fix32_t right,fix32_t bottom); |
||
1163 | #ifndef MGL_LITE |
||
1164 | void ASMAPI MGL_scanLine(m_int y,m_int x1,m_int x2); |
||
1165 | #endif |
||
1166 | |||
1167 | /* Routines to perform bank switching for banked framebuffers for custom |
||
1168 | * rendering code. The first version is callable only from assembler and |
||
1169 | * requires the new bank value to be passed in the DL register. The second |
||
1170 | * version is callable directly from C. DO NOT CALL THESE FUNCTIONS WHEN |
||
1171 | * RUNNING WITH A LINEAR FRAMEBUFFER!!! |
||
1172 | */ |
||
1173 | |||
1174 | void _ASMAPI SVGA_setBank(void); |
||
1175 | void _ASMAPI SVGA_setBankC(int bank); |
||
1176 | |||
1177 | /* Routines to begin/end direct framebuffer access. You must call these |
||
1178 | * functions is you wish to render directly to a hardware accelerated |
||
1179 | * device surface. |
||
1180 | */ |
||
1181 | |||
1182 | void ASMAPI MGL_beginDirectAccess(void); |
||
1183 | void ASMAPI MGL_endDirectAccess(void); |
||
1184 | |||
1185 | /* Routines to begin/end fast rendering of flat shaded lines, scanlines |
||
1186 | * and polygons. |
||
1187 | */ |
||
1188 | |||
1189 | void ASMAPI MGL_beginDrawing(void); |
||
1190 | void ASMAPI MGL_endDrawing(void); |
||
1191 | |||
1192 | /* Routines to begin/end fast rendering of smooth shaded lines, scanlines |
||
1193 | * and polygons. |
||
1194 | */ |
||
1195 | |||
1196 | #ifdef MGL_3D |
||
1197 | void ASMAPI MGL_beginShadedDrawing(void); |
||
1198 | void ASMAPI MGL_endShadedDrawing(void); |
||
1199 | #endif |
||
1200 | |||
1201 | /* Routines to begin/end fast rendering of flat shaded, zbuffered lines and |
||
1202 | * polygons. |
||
1203 | */ |
||
1204 | |||
1205 | #ifdef MGL_3D |
||
1206 | void ASMAPI MGL_beginZDrawing(void); |
||
1207 | void ASMAPI MGL_endZDrawing(void); |
||
1208 | #endif |
||
1209 | |||
1210 | /* Routines to begin/end fast rendering of smooth shaded, zbuffered lines and |
||
1211 | * polygons. |
||
1212 | */ |
||
1213 | |||
1214 | #ifdef MGL_3D |
||
1215 | void ASMAPI MGL_beginZShadedDrawing(void); |
||
1216 | void ASMAPI MGL_endZShadedDrawing(void); |
||
1217 | #endif |
||
1218 | |||
1219 | /* Polygon drawing: Note that the following fast polygon routines |
||
1220 | * only work with convex polygons. The integer coordinate versions are |
||
1221 | * provided for compatibility only, and convert the coordinates to fixed |
||
1222 | * point and call the appropriate fixed point routines below. |
||
1223 | */ |
||
1224 | |||
1225 | #ifndef MGL_LITE |
||
1226 | void MGLAPI MGL_fillPolygon(m_int count,point_t *vArray,m_int xOffset,m_int yOffset); |
||
1227 | void MGLAPI MGL_fillPolygonFast(m_int count,point_t *vArray,m_int xOffset,m_int yOffset); |
||
1228 | void ASMAPI MGL_fillPolygonFX(m_int count,fxpoint_t *vArray,m_int vinc,fix32_t xOffset,fix32_t yOffset); |
||
1229 | void ASMAPI MGL_fillPolygonFastFX(m_int count,fxpoint_t *vArray,m_int vinc,fix32_t xOffset,fix32_t yOffset); |
||
1230 | #endif |
||
1231 | |||
1232 | /* 3D rasterization routines */ |
||
1233 | |||
1234 | #ifdef MGL_3D |
||
1235 | void MGLAPI MGL_zClearCoord(m_int left,m_int top,m_int right,m_int bottom,zfix32_t clearVal); |
||
1236 | #endif |
||
1237 | |||
1238 | #ifdef MGL_FIX3D |
||
1239 | void ASMAPI MGL_cLineCoordFast(fix32_t x1,fix32_t y1,fix32_t c1,fix32_t x2,fix32_t y2,fix32_t c2); |
||
1240 | void ASMAPI MGL_rgbLineCoordFast(fix32_t x1,fix32_t y1,fix32_t r1,fix32_t g1,fix32_t b1,fix32_t x2,fix32_t y2,fix32_t r2,fix32_t g2,fix32_t b2); |
||
1241 | void ASMAPI MGL_zLineCoordFast(fix32_t x1,fix32_t y1,zfix32_t z1,fix32_t x2,fix32_t y2,zfix32_t z2); |
||
1242 | void ASMAPI MGL_czLineCoordFast(fix32_t x1,fix32_t y1,zfix32_t z1,fix32_t c1,fix32_t x2,fix32_t y2,zfix32_t z2,fix32_t c2); |
||
1243 | void ASMAPI MGL_rgbzLineCoordFast(fix32_t x1,fix32_t y1,zfix32_t z1,fix32_t r1,fix32_t g1,fix32_t b1,fix32_t x2,fix32_t y2,zfix32_t z2,fix32_t r2,fix32_t g2,fix32_t b2); |
||
1244 | |||
1245 | void ASMAPI MGL_triFast(fxpoint_t *v1,fxpoint_t *v2,fxpoint_t *v3,fix32_t xOffset,fix32_t yOffset); |
||
1246 | void ASMAPI MGL_cTriFast(fxpointc_t *v1,fxpointc_t *v2,fxpointc_t *v3,fix32_t xOffset,fix32_t yOffset); |
||
1247 | void ASMAPI MGL_rgbTriFast(fxpointrgb_t *v1,fxpointrgb_t *v2,fxpointrgb_t *v3,fix32_t xOffset,fix32_t yOffset); |
||
1248 | void ASMAPI MGL_zTriFast(fxpointz_t *v1,fxpointz_t *v2,fxpointz_t *v3,fix32_t xOffset,fix32_t yOffset,zfix32_t zOffset); |
||
1249 | void ASMAPI MGL_czTriFast(fxpointcz_t *v1,fxpointcz_t *v2,fxpointcz_t *v3,fix32_t xOffset,fix32_t yOffset,zfix32_t zOffset); |
||
1250 | void ASMAPI MGL_rgbzTriFast(fxpointrgbz_t *v1,fxpointrgbz_t *v2,fxpointrgbz_t *v3,fix32_t xOffset,fix32_t yOffset,zfix32_t zOffset); |
||
1251 | |||
1252 | void ASMAPI MGL_quadFast(fxpoint_t *v1,fxpoint_t *v2,fxpoint_t *v3,fxpoint_t *v4,fix32_t xOffset,fix32_t yOffset); |
||
1253 | void ASMAPI MGL_cQuadFast(fxpointc_t *v1,fxpointc_t *v2,fxpointc_t *v3,fxpointc_t *v4,fix32_t xOffset,fix32_t yOffset); |
||
1254 | void ASMAPI MGL_rgbQuadFast(fxpointrgb_t *v1,fxpointrgb_t *v2,fxpointrgb_t *v3,fxpointrgb_t *v4,fix32_t xOffset,fix32_t yOffset); |
||
1255 | void ASMAPI MGL_zQuadFast(fxpointz_t *v1,fxpointz_t *v2,fxpointz_t *v3,fxpointz_t *v4,fix32_t xOffset,fix32_t yOffset,zfix32_t zOffset); |
||
1256 | void ASMAPI MGL_czQuadFast(fxpointcz_t *v1,fxpointcz_t *v2,fxpointcz_t *v3,fxpointcz_t *v4,fix32_t xOffset,fix32_t yOffset,zfix32_t zOffset); |
||
1257 | void ASMAPI MGL_rgbzQuadFast(fxpointrgbz_t *v1,fxpointrgbz_t *v2,fxpointrgbz_t *v3,fxpointrgbz_t *v4,fix32_t xOffset,fix32_t yOffset,zfix32_t zOffset); |
||
1258 | #endif |
||
1259 | |||
1260 | /* Routine to set the currently active shade table. In HiColor and TrueColor |
||
1261 | * video modes, you must set a valid shadeTable before you call any of the |
||
1262 | * color index shaded rendering routines (MGL_cTri() etc). These routines |
||
1263 | * will interpolate an index into the current shade table rather than |
||
1264 | * each of the RGB color channels, and the appropriate full RGB color is |
||
1265 | * extracted directly from the shade table. The shade table can be any size, |
||
1266 | * but the application must ensure that the indices passed in are within |
||
1267 | * the range of the current shade table. |
||
1268 | */ |
||
1269 | |||
1270 | #ifdef MGL_3D |
||
1271 | void MGLAPI MGL_setShadeTable(color_t *shadeTab); |
||
1272 | #endif |
||
1273 | |||
1274 | /* Polyline drawing */ |
||
1275 | |||
1276 | #ifndef MGL_LITE |
||
1277 | void MGLAPI MGL_marker(point_t p); |
||
1278 | void MGLAPI MGL_polyPoint(m_int count,point_t *vArray); |
||
1279 | void MGLAPI MGL_polyMarker(m_int count,point_t *vArray); |
||
1280 | void MGLAPI MGL_polyLine(m_int count,point_t *vArray); |
||
1281 | #endif |
||
1282 | |||
1283 | /* Rectangle drawing */ |
||
1284 | |||
1285 | #ifndef MGL_LITE |
||
1286 | void MGLAPI MGL_rectCoord(m_int left,m_int top,m_int right,m_int bottom); |
||
1287 | void MGLAPI MGL_fillRectCoord(m_int left,m_int top,m_int right,m_int bottom); |
||
1288 | #endif |
||
1289 | |||
1290 | /* Scanline color scanning. Thee routines are primitive, and do not perform |
||
1291 | * any clipping or viewport mapping, so can be used to build you own |
||
1292 | * high performance floodfilling routines (see the example file ffill.c |
||
1293 | * for pre-built high speed floodfill routines). |
||
1294 | */ |
||
1295 | |||
1296 | #ifndef MGL_LITE |
||
1297 | m_int ASMAPI MGL_scanRightForColor(m_int x,m_int y,color_t color); |
||
1298 | m_int ASMAPI MGL_scanLeftForColor(m_int x,m_int y,color_t color); |
||
1299 | m_int ASMAPI MGL_scanRightWhileColor(m_int x,m_int y,color_t color); |
||
1300 | m_int ASMAPI MGL_scanLeftWhileColor(m_int x,m_int y,color_t color); |
||
1301 | #endif |
||
1302 | |||
1303 | /* Psuedo 3D border drawing */ |
||
1304 | |||
1305 | #ifndef MGL_LITE |
||
1306 | void MGLAPI MGL_drawBorderCoord(m_int left,m_int top,m_int right,m_int bottom,m_int style,m_int thickness); |
||
1307 | void MGLAPI MGL_drawHDivider(m_int y,m_int x1,m_int x2); |
||
1308 | void MGLAPI MGL_drawVDivider(m_int x,m_int y1,m_int y2); |
||
1309 | #endif |
||
1310 | |||
1311 | /* Ellipse drawing */ |
||
1312 | |||
1313 | #ifndef MGL_LITE |
||
1314 | void MGLAPI MGL_ellipseArc(rect_t extentRect,m_int startAngle,m_int endAngle); |
||
1315 | void MGLAPI MGL_ellipseArcCoord(m_int x,m_int y,m_int xradius,m_int yradius,m_int startAngle,m_int endAngle); |
||
1316 | void ASMAPI MGL_getArcCoords(arc_coords_t *coords); |
||
1317 | void MGLAPI MGL_ellipse(rect_t extentRect); |
||
1318 | void MGLAPI MGL_ellipseCoord(m_int x,m_int y,m_int xradius,m_int yradius); |
||
1319 | void MGLAPI MGL_fillEllipseArc(rect_t extentRect,m_int startAngle,m_int endAngle); |
||
1320 | void MGLAPI MGL_fillEllipseArcCoord(m_int x,m_int y,m_int xradius,m_int yradius,m_int startAngle,m_int endAngle); |
||
1321 | void MGLAPI MGL_fillEllipse(rect_t extentRect); |
||
1322 | void MGLAPI MGL_fillEllipseCoord(m_int x,m_int y,m_int xradius,m_int yradius); |
||
1323 | void MGLAPI MGL_ellipseEngine(rect_t extentRect,void (ASMAPI *setup)(m_int topY,m_int botY,m_int left,m_int right),void (ASMAPI *set4pixels)(bool inc_x,bool inc_y,bool region1),void (ASMAPI *finished)(void)); |
||
1324 | void MGLAPI MGL_ellipseArcEngine(rect_t extentRect,m_int startAngle,m_int endAngle,arc_coords_t *ac,void (ASMAPI *plotPoint)(m_int x,m_int y)); |
||
1325 | #endif |
||
1326 | |||
1327 | /* Text attribute manipulation */ |
||
1328 | |||
1329 | #ifndef MGL_LITE |
||
1330 | void MGLAPI MGL_setTextJustify(m_int horiz,m_int vert); |
||
1331 | void MGLAPI MGL_getTextJustify(m_int *horiz,m_int *vert); |
||
1332 | void MGLAPI MGL_setTextDirection(m_int direction); |
||
1333 | m_int MGLAPI MGL_getTextDirection(void); |
||
1334 | void MGLAPI MGL_setTextSize(m_int numerx,m_int denomx,m_int numery,m_int denomy); |
||
1335 | void MGLAPI MGL_getTextSize(m_int *numerx,m_int *denomx,m_int *numery,m_int *denomy); |
||
1336 | void MGLAPI MGL_setSpaceExtra(m_int extra); |
||
1337 | m_int MGLAPI MGL_getSpaceExtra(void); |
||
1338 | void MGLAPI MGL_setTextSettings(text_settings_t *settings); |
||
1339 | void MGLAPI MGL_getTextSettings(text_settings_t *settings); |
||
1340 | m_int MGLAPI MGL_textHeight(void); |
||
1341 | m_int MGLAPI MGL_textWidth(const char *str); |
||
1342 | void MGLAPI MGL_textBounds(m_int x,m_int y,const char *str,rect_t *bounds); |
||
1343 | m_int MGLAPI MGL_charWidth(char ch); |
||
1344 | void MGLAPI MGL_getFontMetrics(metrics_t *metrics); |
||
1345 | void MGLAPI MGL_getCharMetrics(char ch,metrics_t *metrics); |
||
1346 | m_int MGLAPI MGL_maxCharWidth(void); |
||
1347 | void MGLAPI MGL_underScoreLocation(m_int *x,m_int *y,const char *str); |
||
1348 | #endif |
||
1349 | |||
1350 | /* Text drawing */ |
||
1351 | |||
1352 | #ifndef MGL_LITE |
||
1353 | void MGLAPI MGL_drawStr(const char *str); |
||
1354 | void MGLAPI MGL_drawStrXY(m_int x,m_int y,const char *str); |
||
1355 | bool MGLAPI MGL_useFont(font_t *font); |
||
1356 | font_t * MGLAPI MGL_getFont(void); |
||
1357 | bool MGLAPI MGL_vecFontEngine(m_int x,m_int y,const char *str,void (ASMAPI *move)(m_int x,m_int y),void (ASMAPI *draw)(m_int x,m_int y)); |
||
1358 | #endif |
||
1359 | |||
1360 | /* BitBlt support */ |
||
1361 | |||
1362 | void MGLAPI MGL_bitBltCoord(MGLDC *dst,MGLDC *src,m_int left,m_int top,m_int right,m_int bottom,m_int dstLeft,m_int dstTop,m_int op); |
||
1363 | void MGLAPI MGL_stretchBltCoord(MGLDC *dst,MGLDC *src,m_int left,m_int top,m_int right,m_int bottom,m_int dstLeft,m_int dstTop,m_int dstRight,m_int dstBottom); |
||
1364 | #ifndef MGL_LITE |
||
1365 | void MGLAPI MGL_getDivotCoord(MGLDC *dc,m_int left,m_int top,m_int right,m_int bottom,void *divot); |
||
1366 | void MGLAPI MGL_putDivot(MGLDC *dc,void *divot); |
||
1367 | long MGLAPI MGL_divotSizeCoord(MGLDC *dc,m_int left,m_int top,m_int right,m_int bottom); |
||
1368 | void MGLAPI MGL_putMonoImage(MGLDC *dc,m_int x,m_int y,m_int byteWidth,m_int height,void *image); |
||
1369 | void MGLAPI MGL_putBitmap(MGLDC *dc,m_int x,m_int y,const bitmap_t *bitmap,m_int op); |
||
1370 | void MGLAPI MGL_putBitmapSection(MGLDC *dc,m_int left,m_int top,m_int right,m_int bottom,m_int dstLeft,m_int dstTop,const bitmap_t *bitmap,m_int op); |
||
1371 | void MGLAPI MGL_putBitmapTransparent(MGLDC *dc,m_int x,m_int y,const bitmap_t *bitmap,color_t transparent,bool sourceTrans); |
||
1372 | void MGLAPI MGL_putBitmapTransparentSection(MGLDC *dc,m_int left,m_int top,m_int right,m_int bottom,m_int dstLeft,m_int dstTop,const bitmap_t *bitmap,color_t transparent,bool sourceTrans); |
||
1373 | void MGLAPI MGL_putBitmapMask(MGLDC *dc,m_int x,m_int y,const bitmap_t *mask,color_t color); |
||
1374 | void MGLAPI MGL_stretchBitmap(MGLDC *dc,m_int left,m_int top,m_int right,m_int bottom,const bitmap_t *bitmap); |
||
1375 | void MGLAPI MGL_putIcon(MGLDC *dc,m_int x,m_int y,const icon_t *icon); |
||
1376 | void MGLAPI MGL_transBltCoord(MGLDC *dst,MGLDC *src,m_int left,m_int top,m_int right,m_int bottom,m_int dstLeft,m_int dstTop,color_t transparent,bool sourceTrans); |
||
1377 | #endif |
||
1378 | |||
1379 | /* Linear offscreen DC BitBlt support */ |
||
1380 | |||
1381 | #ifndef MGL_LITE |
||
1382 | void MGLAPI MGL_bitBltLinCoord(MGLDC *dst,MGLDC *src,ulong srcOfs,m_int dstLeft,m_int dstTop,m_int dstRight,m_int dstBottom,m_int op); |
||
1383 | void MGLAPI MGL_transBltLinCoord(MGLDC *dst,MGLDC *src,ulong srcOfs,m_int dstLeft,m_int dstTop,m_int dstRight,m_int dstBottom,color_t transparent,bool sourceTrans); |
||
1384 | #endif |
||
1385 | |||
1386 | /* Monochrome bitmap manipulation */ |
||
1387 | |||
1388 | #ifndef MGL_LITE |
||
1389 | void MGLAPI MGL_drawGlyph(font_t *g,m_int x,m_int y,uchar glyph); |
||
1390 | m_int MGLAPI MGL_getGlyphWidth(font_t *font,uchar glyph); |
||
1391 | m_int MGLAPI MGL_getGlyphHeight(font_t *font); |
||
1392 | void MGLAPI MGL_rotateGlyph(uchar *dst,uchar *src,m_int *byteWidth,m_int *height,m_int rotation); |
||
1393 | void MGLAPI MGL_mirrorGlyph(uchar *dst,uchar *src,m_int byteWidth,m_int height); |
||
1394 | #endif |
||
1395 | |||
1396 | /* Region management */ |
||
1397 | |||
1398 | #ifndef MGL_LITE |
||
1399 | region_t * MGLAPI MGL_newRegion(void); |
||
1400 | region_t * MGLAPI MGL_copyRegion(const region_t *s); |
||
1401 | void MGLAPI MGL_clearRegion(region_t *r); |
||
1402 | void MGLAPI MGL_freeRegion(region_t *r); |
||
1403 | void MGLAPI MGL_drawRegion(m_int x,m_int y,const region_t *r); |
||
1404 | #endif |
||
1405 | |||
1406 | /* Region generation primitives */ |
||
1407 | |||
1408 | #ifndef MGL_LITE |
||
1409 | region_t * MGLAPI MGL_rgnLineCoord(m_int x1,m_int y1,m_int x2,m_int y2,const region_t *pen); |
||
1410 | region_t * MGLAPI MGL_rgnLineCoordFX(fix32_t x1,fix32_t y1,fix32_t x2,fix32_t y2,const region_t *pen); |
||
1411 | /*region_t * MGLAPI MGL_rgnPolygon(m_int count,point_t *vArray);*/ |
||
1412 | /*region_t * MGLAPI MGL_rgnPolygonFast(m_int count,point_t *vArray);*/ |
||
1413 | region_t * MGLAPI MGL_rgnSolidRectCoord(m_int left,m_int top,m_int right,m_int bottom); |
||
1414 | region_t * MGLAPI MGL_rgnEllipse(rect_t extentRect,const region_t *pen); |
||
1415 | region_t * MGLAPI MGL_rgnEllipseArc(rect_t extentRect,m_int startAngle,m_int endAngle,const region_t *pen); |
||
1416 | void MGLAPI MGL_rgnGetArcCoords(arc_coords_t *coords); |
||
1417 | region_t * MGLAPI MGL_rgnSolidEllipse(rect_t extentRect); |
||
1418 | region_t * MGLAPI MGL_rgnSolidEllipseArc(rect_t extentRect,m_int startAngle,m_int endAngle); |
||
1419 | #endif |
||
1420 | |||
1421 | /* Region alegbra */ |
||
1422 | |||
1423 | #ifndef MGL_LITE |
||
1424 | region_t * MGLAPI MGL_sectRegion(const region_t *r1,const region_t *r2); |
||
1425 | region_t * MGLAPI MGL_sectRegionRect(const region_t *r1,const rect_t *r2); |
||
1426 | bool MGLAPI MGL_unionRegion(region_t *r1,const region_t *r2); |
||
1427 | bool MGLAPI MGL_unionRegionRect(region_t *r1,const rect_t *r2); |
||
1428 | bool MGLAPI MGL_unionRegionOfs(region_t *r1,const region_t *r2,m_int xOffset,m_int yOffset); |
||
1429 | bool MGLAPI MGL_diffRegion(region_t *r1,const region_t *r2); |
||
1430 | bool MGLAPI MGL_diffRegionRect(region_t *r1,const rect_t *r2); |
||
1431 | void MGLAPI MGL_optimizeRegion(region_t *r); |
||
1432 | void MGLAPI MGL_offsetRegion(region_t *r,m_int dx,m_int dy); |
||
1433 | bool MGLAPI MGL_emptyRegion(const region_t *r); |
||
1434 | bool MGLAPI MGL_equalRegion(const region_t *r1,const region_t *r2); |
||
1435 | bool MGLAPI MGL_ptInRegionCoord(m_int x,m_int y,const region_t *r); |
||
1436 | #endif |
||
1437 | |||
1438 | /* Region traversal */ |
||
1439 | |||
1440 | #ifndef MGL_LITE |
||
1441 | typedef void (ASMAPI *rgncallback_t)(const rect_t *r); |
||
1442 | |||
1443 | void MGLAPI MGL_traverseRegion(region_t *rgn,rgncallback_t doRect); |
||
1444 | #endif |
||
1445 | |||
1446 | /* RGB to 8 bit halftone dithering routines */ |
||
1447 | |||
1448 | #ifndef MGL_LITE |
||
1449 | void MGLAPI MGL_getHalfTonePalette(palette_t *pal); |
||
1450 | uchar MGLAPI MGL_halfTonePixel(m_int x,m_int y,uchar R,uchar G,uchar B); |
||
1451 | #endif |
||
1452 | |||
1453 | /* Resource loading/unloading */ |
||
1454 | |||
1455 | font_t * MGLAPI MGL_loadFont(const char *fontname); |
||
1456 | bool MGLAPI MGL_availableFont(const char *fontname); |
||
1457 | void MGLAPI MGL_unloadFont(font_t *font); |
||
1458 | cursor_t * MGLAPI MGL_loadCursor(const char *cursorName); |
||
1459 | bool MGLAPI MGL_availableCursor(const char *cursorName); |
||
1460 | void MGLAPI MGL_unloadCursor(cursor_t *cursor); |
||
1461 | #ifndef MGL_LITE |
||
1462 | icon_t * MGLAPI MGL_loadIcon(const char *iconName,bool loadPalette); |
||
1463 | bool MGLAPI MGL_availableIcon(const char *iconName); |
||
1464 | void MGLAPI MGL_unloadIcon(icon_t *icon); |
||
1465 | #endif |
||
1466 | |||
1467 | /* Windows BMP bitmap loading/unloading/saving */ |
||
1468 | |||
1469 | #ifndef MGL_LITE |
||
1470 | bitmap_t * MGLAPI MGL_loadBitmap(const char *bitmapName,bool loadPalette); |
||
1471 | bool MGLAPI MGL_availableBitmap(const char *bitmapName); |
||
1472 | void MGLAPI MGL_unloadBitmap(bitmap_t *bitmap); |
||
1473 | bool MGLAPI MGL_getBitmapSize(const char *bitmapName,m_int *width,m_int *height,m_int *bitsPerPixel,pixel_format_t *pf); |
||
1474 | bool MGLAPI MGL_loadBitmapIntoDC(MGLDC *dc,const char *bitmapName,m_int dstLeft,m_int dstTop,bool loadPalette); |
||
1475 | bool MGLAPI MGL_saveBitmapFromDC(MGLDC *dc,const char *bitmapName,m_int left,m_int top,m_int right,m_int bottom); |
||
1476 | bitmap_t * MGLAPI MGL_getBitmapFromDC(MGLDC *dc,m_int left,m_int top,m_int right,m_int bottom,bool savePalette); |
||
1477 | bitmap_t * MGLAPI MGL_buildMonoMask(bitmap_t *bitmap,color_t transparent); |
||
1478 | #endif |
||
1479 | |||
1480 | /* PCX bitmap loading/unloading/saving (1/4/8 bpp only) */ |
||
1481 | |||
1482 | #ifndef MGL_LITE |
||
1483 | bitmap_t * MGLAPI MGL_loadPCX(const char *bitmapName,bool loadPalette); |
||
1484 | bool MGLAPI MGL_availablePCX(const char *bitmapName); |
||
1485 | bool MGLAPI MGL_getPCXSize(const char *bitmapName,m_int *width,m_int *height,m_int *bitsPerPixel); |
||
1486 | bool MGLAPI MGL_loadPCXIntoDC(MGLDC *dc,const char *bitmapName,m_int dstLeft,m_int dstTop,bool loadPalette); |
||
1487 | bool MGLAPI MGL_savePCXFromDC(MGLDC *dc,const char *bitmapName,m_int left,m_int top,m_int right,m_int bottom); |
||
1488 | #endif |
||
1489 | |||
1490 | /* Random number generation routines for shorts and longs with full range */ |
||
1491 | |||
1492 | void ASMAPI MGL_srand(m_uint seed); |
||
1493 | ushort ASMAPI MGL_random(ushort max); |
||
1494 | ulong ASMAPI MGL_randoml(ulong max); |
||
1495 | |||
1496 | /* Mouse support */ |
||
1497 | |||
1498 | bool MGLAPI MS_available(void); |
||
1499 | void MGLAPI MS_show(void); |
||
1500 | void MGLAPI MS_hide(void); |
||
1501 | void MGLAPI MS_obscure(void); |
||
1502 | void MGLAPI MS_setCursor(cursor_t *curs); |
||
1503 | void MGLAPI MS_setCursorColor(color_t color); |
||
1504 | void MGLAPI MS_moveTo(m_int x,m_int y); |
||
1505 | void MGLAPI MS_getPos(m_int *x,m_int *y); |
||
1506 | void MGLAPI MS_drawCursor(void); |
||
1507 | |||
1508 | /* Rectangle and Point manipulation */ |
||
1509 | |||
1510 | rect_t MGLAPI MGL_defRect(m_int left,m_int top,m_int right,m_int bottom); |
||
1511 | rect_t MGLAPI MGL_defRectPt(point_t leftTop,point_t rightBottom); |
||
1512 | bool MGLAPI MGL_sectRect(rect_t s1,rect_t s2,rect_t *d); |
||
1513 | bool MGLAPI MGL_sectRectCoord(m_int left1,m_int top1,m_int right1,m_int bottom1,m_int left2,m_int top2,m_int right2,m_int bottom2,rect_t *d); |
||
1514 | void MGLAPI MGL_unionRect(rect_t s1,rect_t s2,rect_t *d); |
||
1515 | void MGLAPI MGL_unionRectCoord(m_int left1,m_int top1,m_int right1,m_int bottom1,m_int left2,m_int top2,m_int right2,m_int bottom2,rect_t *d); |
||
1516 | |||
1517 | /* Built-in patterns and mouse cursor */ |
||
1518 | |||
1519 | #ifndef MGL_LITE |
||
1520 | pattern_t * MGLAPI _MGL_getEmptyPat(void); |
||
1521 | pattern_t * MGLAPI _MGL_getGrayPat(void); |
||
1522 | pattern_t * MGLAPI _MGL_getSolidPat(void); |
||
1523 | #endif |
||
1524 | cursor_t * MGLAPI _MGL_getDefCursor(void); |
||
1525 | |||
1526 | /* Fixed point multiplication/divide routines */ |
||
1527 | |||
1528 | #if defined(__WATCOMC__) && defined(__386__) |
||
1529 | |||
1530 | /* For Watcom C++ we can use special inline assembler code that is much |
||
1531 | * faster than calling the 386 assembler functions. Currently this is the |
||
1532 | * the only compiler that will allow inline assembler to be expanded |
||
1533 | * directly as inline functions. |
||
1534 | */ |
||
1535 | |||
1536 | fix32_t MGL_FixMul(fix32_t a,fix32_t b); |
||
1537 | #pragma aux MGL_FixMul = \ |
||
1538 | "imul edx" \ |
||
1539 | "add eax,8000h" \ |
||
1540 | "adc edx,0" \ |
||
1541 | "shrd eax,edx,16" \ |
||
1542 | parm [eax] [edx] \ |
||
1543 | value [eax] \ |
||
1544 | modify exact [eax edx]; |
||
1545 | |||
1546 | fix32_t MGL_FixDiv(fix32_t a,fix32_t b); |
||
1547 | #pragma aux MGL_FixDiv = \ |
||
1548 | "xor eax,eax" \ |
||
1549 | "shrd eax,edx,16" \ |
||
1550 | "sar edx,16" \ |
||
1551 | "idiv ebx" \ |
||
1552 | parm [edx] [ebx] \ |
||
1553 | value [eax] \ |
||
1554 | modify exact [eax edx]; |
||
1555 | |||
1556 | fix32_t MGL_FixMulDiv(fix32_t a,fix32_t b,fix32_t c); |
||
1557 | #pragma aux MGL_FixMulDiv = \ |
||
1558 | "imul ebx" \ |
||
1559 | "idiv ecx" \ |
||
1560 | parm [eax] [ebx] [ecx] \ |
||
1561 | value [eax] \ |
||
1562 | modify exact [eax edx]; |
||
1563 | |||
1564 | m_int MGL_backfacing(fix32_t dx1,fix32_t dy1,fix32_t dx2,fix32_t dy2); |
||
1565 | #pragma aux MGL_backfacing = \ |
||
1566 | "imul ebx" \ |
||
1567 | "mov ebx,eax" \ |
||
1568 | "mov ecx,edx" \ |
||
1569 | "mov eax,esi" \ |
||
1570 | "imul edi" \ |
||
1571 | "sub eax,ebx" \ |
||
1572 | "mov eax,1" \ |
||
1573 | "sbb edx,ecx" \ |
||
1574 | "jns @@Backfacing" \ |
||
1575 | "xor eax,eax" \ |
||
1576 | "@@Backfacing:" \ |
||
1577 | parm [eax] [esi] [edi] [ebx] \ |
||
1578 | value [eax] \ |
||
1579 | modify exact [eax ecx edx]; |
||
1580 | |||
1581 | void MGL_memcpy(void *dst,void *src,m_int n); |
||
1582 | #pragma aux MGL_memcpy = \ |
||
1583 | "mov eax,ecx" \ |
||
1584 | "shr ecx,2" \ |
||
1585 | "rep movsd" \ |
||
1586 | "mov cl,al" \ |
||
1587 | "and cl,3" \ |
||
1588 | "rep movsb" \ |
||
1589 | parm [edi] [esi] [ecx] \ |
||
1590 | modify exact [eax ecx esi edi]; |
||
1591 | |||
1592 | #else |
||
1593 | |||
1594 | fix32_t ASMAPI MGL_FixMul(fix32_t a,fix32_t b); |
||
1595 | fix32_t ASMAPI MGL_FixDiv(fix32_t a,fix32_t b); |
||
1596 | fix32_t ASMAPI MGL_FixMulDiv(fix32_t a,fix32_t b,fix32_t c); |
||
1597 | m_int ASMAPI MGL_backfacing(fix32_t dx1,fix32_t dy1,fix32_t dx2,fix32_t dy2); |
||
1598 | void ASMAPI MGL_memcpy(void *dst,void *src,m_int n); |
||
1599 | |||
1600 | #endif |
||
1601 | |||
1602 | /* The following are special memcpy routines that properly handler reading |
||
1603 | * and writing to virtual linear buffer memory by forcing the proper |
||
1604 | * alignment. Note that the copy is extended to use a DWORD copy of speed. |
||
1605 | */ |
||
1606 | |||
1607 | void ASMAPI MGL_memcpyVIRTSRC(void *dst,void *src,m_int n); |
||
1608 | void ASMAPI MGL_memcpyVIRTDST(void *dst,void *src,m_int n); |
||
1609 | |||
1610 | /* Function to find an MGL system file's full pathname */ |
||
1611 | |||
1612 | bool MGLAPI _MGL_findFile(char *validpath,const char *dir, const char *filename, const char *mode); |
||
1613 | |||
1614 | /* Override the internal MGL file I/O functions */ |
||
1615 | |||
1616 | void MGLAPI MGL_setFileIO(fileio_t *fio); |
||
1617 | |||
1618 | /* The following dummy symbols are used to link in driver files to be used. A |
||
1619 | * driver is not active until it is linked in with the MGL_registerDriver |
||
1620 | * call. Because we dont export globals in DLLs, we provide functions to |
||
1621 | * get the address of the drivers. However for a static link library we |
||
1622 | * need to use globals so that if the driver data is unreferenced, it will |
||
1623 | * not be linked in with the code. |
||
1624 | */ |
||
1625 | |||
1626 | #ifndef BUILD_MGL |
||
1627 | #if defined(MGL_DLL) && !defined(BUILD_MGLDLL) |
||
1628 | void * MGLAPI VGA4_getDriverAddr(void); |
||
1629 | void * MGLAPI VGAX_getDriverAddr(void); |
||
1630 | void * MGLAPI SVGA4_getDriverAddr(void); |
||
1631 | void * MGLAPI SVGA8_getDriverAddr(void); |
||
1632 | void * MGLAPI SVGA16_getDriverAddr(void); |
||
1633 | void * MGLAPI SVGA24_getDriverAddr(void); |
||
1634 | void * MGLAPI SVGA32_getDriverAddr(void); |
||
1635 | #if !defined(__16BIT__) |
||
1636 | void * MGLAPI VGA8_getDriverAddr(void); |
||
1637 | void * MGLAPI LINEAR8_getDriverAddr(void); |
||
1638 | void * MGLAPI LINEAR16_getDriverAddr(void); |
||
1639 | void * MGLAPI LINEAR24_getDriverAddr(void); |
||
1640 | void * MGLAPI LINEAR32_getDriverAddr(void); |
||
1641 | void * MGLAPI ACCEL8_getDriverAddr(void); |
||
1642 | void * MGLAPI ACCEL16_getDriverAddr(void); |
||
1643 | void * MGLAPI ACCEL24_getDriverAddr(void); |
||
1644 | void * MGLAPI ACCEL32_getDriverAddr(void); |
||
1645 | #if defined(MGLWIN) || defined(__WINDOWS__) |
||
1646 | void * MGLAPI DDRAW8_getDriverAddr(void); |
||
1647 | void * MGLAPI DDRAW16_getDriverAddr(void); |
||
1648 | void * MGLAPI DDRAW24_getDriverAddr(void); |
||
1649 | void * MGLAPI DDRAW32_getDriverAddr(void); |
||
1650 | #endif |
||
1651 | #endif |
||
1652 | void * MGLAPI PACKED1_getDriverAddr(void); |
||
1653 | void * MGLAPI PACKED4_getDriverAddr(void); |
||
1654 | void * MGLAPI PACKED8_getDriverAddr(void); |
||
1655 | void * MGLAPI PACKED16_getDriverAddr(void); |
||
1656 | void * MGLAPI PACKED24_getDriverAddr(void); |
||
1657 | void * MGLAPI PACKED32_getDriverAddr(void); |
||
1658 | #define VGA4_driver VGA4_getDriverAddr() |
||
1659 | #define VGAX_driver VGAX_getDriverAddr() |
||
1660 | #define SVGA4_driver SVGA4_getDriverAddr() |
||
1661 | #define SVGA8_driver SVGA8_getDriverAddr() |
||
1662 | #define SVGA16_driver SVGA16_getDriverAddr() |
||
1663 | #define SVGA24_driver SVGA24_getDriverAddr() |
||
1664 | #define SVGA32_driver SVGA32_getDriverAddr() |
||
1665 | #if !defined(__16BIT__) |
||
1666 | #define VGA8_driver VGA8_getDriverAddr() |
||
1667 | #define LINEAR8_driver LINEAR8_getDriverAddr() |
||
1668 | #define LINEAR16_driver LINEAR16_getDriverAddr() |
||
1669 | #define LINEAR24_driver LINEAR24_getDriverAddr() |
||
1670 | #define LINEAR32_driver LINEAR32_getDriverAddr() |
||
1671 | #define ACCEL8_driver ACCEL8_getDriverAddr() |
||
1672 | #define ACCEL16_driver ACCEL16_getDriverAddr() |
||
1673 | #define ACCEL24_driver ACCEL24_getDriverAddr() |
||
1674 | #define ACCEL32_driver ACCEL32_getDriverAddr() |
||
1675 | #if defined(MGLWIN) || defined(__WINDOWS__) |
||
1676 | #define DDRAW8_driver DDRAW8_getDriverAddr() |
||
1677 | #define DDRAW16_driver DDRAW16_getDriverAddr() |
||
1678 | #define DDRAW24_driver DDRAW24_getDriverAddr() |
||
1679 | #define DDRAW32_driver DDRAW32_getDriverAddr() |
||
1680 | #endif |
||
1681 | #endif |
||
1682 | #define PACKED1_driver PACKED1_getDriverAddr() |
||
1683 | #define PACKED4_driver PACKED4_getDriverAddr() |
||
1684 | #define PACKED8_driver PACKED8_getDriverAddr() |
||
1685 | #define PACKED16_driver PACKED16_getDriverAddr() |
||
1686 | #define PACKED24_driver PACKED24_getDriverAddr() |
||
1687 | #define PACKED32_driver PACKED32_getDriverAddr() |
||
1688 | #else |
||
1689 | extern m_int _VARAPI VGA4_driver[]; |
||
1690 | extern m_int _VARAPI VGAX_driver[]; |
||
1691 | extern m_int _VARAPI SVGA4_driver[]; |
||
1692 | extern m_int _VARAPI SVGA8_driver[]; |
||
1693 | extern m_int _VARAPI SVGA16_driver[]; |
||
1694 | extern m_int _VARAPI SVGA24_driver[]; |
||
1695 | extern m_int _VARAPI SVGA32_driver[]; |
||
1696 | #if !defined(__16BIT__) |
||
1697 | extern m_int _VARAPI VGA8_driver[]; |
||
1698 | extern m_int _VARAPI LINEAR8_driver[]; |
||
1699 | extern m_int _VARAPI LINEAR16_driver[]; |
||
1700 | extern m_int _VARAPI LINEAR24_driver[]; |
||
1701 | extern m_int _VARAPI LINEAR32_driver[]; |
||
1702 | extern m_int _VARAPI ACCEL8_driver[]; |
||
1703 | extern m_int _VARAPI ACCEL16_driver[]; |
||
1704 | extern m_int _VARAPI ACCEL24_driver[]; |
||
1705 | extern m_int _VARAPI ACCEL32_driver[]; |
||
1706 | #if defined(MGLWIN) || defined(__WINDOWS__) |
||
1707 | extern m_int _VARAPI DDRAW8_driver[]; |
||
1708 | extern m_int _VARAPI DDRAW16_driver[]; |
||
1709 | extern m_int _VARAPI DDRAW24_driver[]; |
||
1710 | extern m_int _VARAPI DDRAW32_driver[]; |
||
1711 | #endif |
||
1712 | #endif |
||
1713 | extern m_int _VARAPI PACKED1_driver[]; |
||
1714 | extern m_int _VARAPI PACKED4_driver[]; |
||
1715 | extern m_int _VARAPI PACKED8_driver[]; |
||
1716 | extern m_int _VARAPI PACKED16_driver[]; |
||
1717 | extern m_int _VARAPI PACKED24_driver[]; |
||
1718 | extern m_int _VARAPI PACKED32_driver[]; |
||
1719 | #endif |
||
1720 | #endif |
||
1721 | |||
1722 | /*--------------------------------------------------------------------------- |
||
1723 | * Memory allocation and utility functions. |
||
1724 | *-------------------------------------------------------------------------*/ |
||
1725 | |||
1726 | #ifndef __16BIT__ |
||
1727 | #define _HUGE |
||
1728 | #else |
||
1729 | #define _HUGE _huge |
||
1730 | #endif |
||
1731 | |||
1732 | void MGL_availableMemory(ulong *physical,ulong *total); |
||
1733 | void MGL_useLocalMalloc(void _HUGE * (*malloc)(long size),void (*free)(void _HUGE *p)); |
||
1734 | void * MGLAPI MGL_malloc(long size); |
||
1735 | void * MGLAPI MGL_calloc(long size,long n); |
||
1736 | void MGLAPI MGL_free(void _HUGE *p); |
||
1737 | void MGLAPI MGL_memset(void _HUGE *s,m_int c,long n); |
||
1738 | void MGLAPI MGL_memsetw(void _HUGE *s,m_int c,long n); |
||
1739 | void MGLAPI MGL_memsetl(void _HUGE *s,long c,long n); |
||
1740 | |||
1741 | /*--------------------------------------------------------------------------- |
||
1742 | * Set a fullscreen suspend application callback function. This is used in |
||
1743 | * fullscreen video modes to allow switching back to the normal operating |
||
1744 | * system graphical shell (such as Windows GDI, OS/2 PM etc). |
||
1745 | *-------------------------------------------------------------------------*/ |
||
1746 | |||
1747 | typedef m_int (ASMAPI *MGL_suspend_cb_t)(MGLDC *dc,m_int flags); |
||
1748 | void MGLAPI MGL_setSuspendAppCallback(MGL_suspend_cb_t staveState); |
||
1749 | |||
1750 | /*--------------------------------------------------------------------------- |
||
1751 | * Tell the MGL to use a pre-loaded ACCEL.DRV driver file. This allows |
||
1752 | * you to link with the SciTech WinDirect/Pro and WinDirect/Ultra device |
||
1753 | * support libraries and tell the MGL to use the device support drivers. |
||
1754 | * If the user has a real ACCEL.DRV driver file in the standard location |
||
1755 | * on their machine, this driver file will still be used. |
||
1756 | *-------------------------------------------------------------------------*/ |
||
1757 | |||
1758 | void MGLAPI MGL_setACCELDriver(void *driver); |
||
1759 | |||
1760 | /*---------------------- Inline functions as Macros -----------------------*/ |
||
1761 | |||
1762 | #define MGL_equalPoint(p1,p2) ((p1).x == (p2).x && (p1).y == (p2).y) |
||
1763 | |||
1764 | #define MGL_equalRect(r1,r2) ((r1).left == (r2).left && \ |
||
1765 | (r1).top == (r2).top && \ |
||
1766 | (r1).right == (r2).right && \ |
||
1767 | (r1).bottom == (r2).bottom) |
||
1768 | |||
1769 | #define MGL_emptyRect(r) ((r).bottom <= (r).top || \ |
||
1770 | (r).right <= (r).left) |
||
1771 | |||
1772 | #define MGL_disjointRect(r1,r2) ((r1).right <= (r2).left || \ |
||
1773 | (r1).left >= (r2).right || \ |
||
1774 | (r1).bottom <= (r2).top || \ |
||
1775 | (r1).top >= (r2).bottom) |
||
1776 | |||
1777 | #define MGL_sectRect(s1,s2,d) \ |
||
1778 | ((d)->left = MAX((s1).left,(s2).left), \ |
||
1779 | (d)->right = MIN((s1).right,(s2).right), \ |
||
1780 | (d)->top = MAX((s1).top,(s2).top), \ |
||
1781 | (d)->bottom = MIN((s1).bottom,(s2).bottom), \ |
||
1782 | !MGL_emptyRect(*d)) |
||
1783 | |||
1784 | #define MGL_sectRectFast(s1,s2,d) \ |
||
1785 | (d)->left = MAX((s1).left,(s2).left); \ |
||
1786 | (d)->right = MIN((s1).right,(s2).right); \ |
||
1787 | (d)->top = MAX((s1).top,(s2).top); \ |
||
1788 | (d)->bottom = MIN((s1).bottom,(s2).bottom) |
||
1789 | |||
1790 | #define MGL_sectRectCoord(l1,t1,r1,b1,l2,t2,r2,b2,d) \ |
||
1791 | ((d)->left = MAX(l1,l2), \ |
||
1792 | (d)->right = MIN(r1,r2), \ |
||
1793 | (d)->top = MAX(t1,t2), \ |
||
1794 | (d)->bottom = MIN(b1,b2), \ |
||
1795 | !MGL_emptyRect(*d)) |
||
1796 | |||
1797 | #define MGL_sectRectFastCoord(l1,t1,r1,b1,l2,t2,r2,b2,d) \ |
||
1798 | (d)->left = MAX(l1,l2); \ |
||
1799 | (d)->right = MIN(r1,r2); \ |
||
1800 | (d)->top = MAX(t1,t2); \ |
||
1801 | (d)->bottom = MIN(b1,b2) |
||
1802 | |||
1803 | #define MGL_unionRect(s1,s2,d) \ |
||
1804 | (d)->left = MIN((s1).left,(s2).left); \ |
||
1805 | (d)->right = MAX((s1).right,(s2).right); \ |
||
1806 | (d)->top = MIN((s1).top,(s2).top); \ |
||
1807 | (d)->bottom = MAX((s1).bottom,(s2).bottom) |
||
1808 | |||
1809 | #define MGL_unionRectCoord(l1,t1,r1,b1,l2,t2,r2,b2,d) \ |
||
1810 | (d)->left = MIN(l1,l2); \ |
||
1811 | (d)->right = MAX(r1,r2); \ |
||
1812 | (d)->top = MIN(t1,t2); \ |
||
1813 | (d)->bottom = MAX(b1,b2) |
||
1814 | |||
1815 | #define MGL_offsetRect(r,dx,dy) \ |
||
1816 | { (r).left += dx; (r).right += dx; \ |
||
1817 | (r).top += dy; (r).bottom += dy; } |
||
1818 | |||
1819 | #define MGL_insetRect(r,dx,dy) \ |
||
1820 | { (r).left += dx; (r).right -= dx; \ |
||
1821 | (r).top += dy; (r).bottom -= dy; \ |
||
1822 | if (MGL_emptyRect(r)) \ |
||
1823 | (r).left = (r).right = (r).top = (r).bottom = 0; } |
||
1824 | |||
1825 | #define MGL_ptInRect(p,r) ((p).x >= (r).left && \ |
||
1826 | (p).x < (r).right && \ |
||
1827 | (p).y >= (r).top && \ |
||
1828 | (p).y < (r).bottom) |
||
1829 | |||
1830 | #define MGL_ptInRectCoord(x,y,r) ((x) >= (r).left && \ |
||
1831 | (x) < (r).right && \ |
||
1832 | (y) >= (r).top && \ |
||
1833 | (y) < (r).bottom) |
||
1834 | |||
1835 | #define MGL_ptInRegion(p,r) MGL_ptInRegionCoord((p).x,(p).y,r) |
||
1836 | |||
1837 | #define MGL_pixel(p) MGL_pixelCoord((p).x,(p).y) |
||
1838 | #define MGL_getPixel(p) MGL_getPixelCoord((p).x,(p).y) |
||
1839 | #define MGL_pixelFast(p) MGL_pixelCoordFast((p).x,(p).y) |
||
1840 | #define MGL_getPixelFast(p) MGL_getPixelCoordFast((p).x,(p).y) |
||
1841 | #define MGL_moveTo(p) MGL_moveToCoord((p).x,(p).y) |
||
1842 | #define MGL_moveRel(p) MGL_moveRelCoord((p).x,(p).y) |
||
1843 | #define MGL_line(p1,p2) MGL_lineCoord((p1).x,(p1).y,(p2).x,(p2).y) |
||
1844 | #define MGL_lineFast(p1,p2) MGL_lineCoordFast((p1).x,(p1).y,(p2).x,(p2).y) |
||
1845 | #define MGL_lineFX(p1,p2) MGL_lineCoordFX((p1).x,(p1).y,(p2).x,(p2).y) |
||
1846 | #define MGL_lineFastFX(p1,p2) MGL_lineCoordFastFX((p1).x,(p1).y,(p2).x,(p2).y) |
||
1847 | #define MGL_cLineFast(p1,p2) MGL_cLineCoordFast((p1).p.x,(p1).p.y,(p1).c,(p2).p.x,(p2).p.y,(p2).c) |
||
1848 | #define MGL_rgbLineFast(p1,p2) MGL_rgbLineCoordFast((p1).p.x,(p1).p.y,(p1).c.r,(p1).c.g,(p1).c.b,(p2).p.x,(p2).p.y,(p2).c.r,(p2).c.g,(p2).c.b) |
||
1849 | #define MGL_zLineFast(p1,p2) MGL_zLineCoordFast((p1).p.x,(p1).p.y,(p1).z,(p2).p.x,(p2).p.y,(p2).z) |
||
1850 | #define MGL_czLineFast(p1,p2) MGL_czLineCoordFast((p1).p.x,(p1).p.y,(p1).z,(p1).c,(p2).p.x,(p2).p.y,(p2).z,(p2).c) |
||
1851 | #define MGL_rgbzLineFast(p1,p2) MGL_rgbzLineCoordFast((p1).p.x,(p1).p.y,(p1).z,(p1).c.r,(p1).c.g,(p1).c.b,(p2).p.x,(p2).p.y,(p2).z,(p2).c.r,(p2).c.g,(p2).c.b) |
||
1852 | |||
1853 | #define MGL_zClearPt(lt,rb,z) MGL_zClearCoord((lt).x,(lt).y, \ |
||
1854 | (rb).x,(rb).y,z) |
||
1855 | #define MGL_zClear(r,z) MGL_zClearCoord((r).left,(r).top, \ |
||
1856 | (r).right,(r).bottom,z) |
||
1857 | #define MGL_lineTo(p) MGL_lineToCoord((p).x,(p).y) |
||
1858 | #define MGL_lineRel(p) MGL_lineRelCoord((p).x,(p).y); |
||
1859 | #define MGL_rectPt(lt,rb) MGL_rectCoord((lt).x,(lt).y,(rb).x,(rb).y) |
||
1860 | #define MGL_rect(r) MGL_rectCoord((r).left,(r).top, \ |
||
1861 | (r).right,(r).bottom) |
||
1862 | #define MGL_drawBorder(r,s,t) MGL_drawBorderCoord((r).left,(r).top, \ |
||
1863 | (r).right,(r).bottom,(s),(t)) |
||
1864 | #define MGL_fillRectPt(lt,rb) MGL_fillRectCoord((lt).x,(lt).y, \ |
||
1865 | (rb).x,(rb).y) |
||
1866 | #define MGL_fillRect(r) MGL_fillRectCoord((r).left,(r).top, \ |
||
1867 | (r).right,(r).bottom) |
||
1868 | #define MGL_bitBlt(d,s,r,dl,dt,op) MGL_bitBltCoord((d),(s),(r).left, \ |
||
1869 | (r).top,(r).right,(r).bottom,dl,dt,op) |
||
1870 | #define MGL_bitBltLin(d,s,so,r,op) MGL_bitBltLinCoord((d),(s),so, \ |
||
1871 | (r).left,(r).top,(r).right,(r).bottom,op) |
||
1872 | #define MGL_stretchBlt(d,s,sr,dr) MGL_stretchBltCoord((d),(s),(sr).left, \ |
||
1873 | (sr).top,(sr).right,(sr).bottom, \ |
||
1874 | (dr).left,(dr).top,(dr).right,(dr).bottom) |
||
1875 | #define MGL_transBlt(d,s,r,dl,dt,c,st) MGL_transBltCoord((d),(s),(r).left, \ |
||
1876 | (r).top,(r).right,(r).bottom,dl,dt,c,st) |
||
1877 | #define MGL_transBltLin(d,s,so,r,c,st) MGL_transBltLinCoord((d),(s),so, \ |
||
1878 | (r).left,(r).top,(r).right,(r).bottom,c,st) |
||
1879 | #define MGL_getDivot(dc,r,divot) MGL_getDivotCoord(dc,(r).left,(r).top, \ |
||
1880 | (r).right,(r).bottom,divot) |
||
1881 | #define MGL_divotSize(dc,r) MGL_divotSizeCoord(dc,(r).left,(r).top,\ |
||
1882 | (r).right,(r).bottom) |
||
1883 | #define MGL_isSimpleRegion(r) (((region_t*)(r))->spans == NULL) |
||
1884 | #define MGL_rgnLine(p1,p2,p) MGL_rgnLineCoord((p1).x,(p1).y,(p2).x,(p2).y,p) |
||
1885 | #define MGL_rgnLineFX(p1,p2,p) MGL_rgnLineCoordFX((p1).x,(p1).y,(p2).x,(p2).y,p) |
||
1886 | #define MGL_rgnSolidRectPt(lt,rb) MGL_rgnSolidRectCoord((lt).x,(lt).y, \ |
||
1887 | (rb).x,(rb).y) |
||
1888 | #define MGL_rgnSolidRect(r) MGL_rgnSolidRectCoord((r).left,(r).top, \ |
||
1889 | (r).right,(r).bottom) |
||
1890 | |||
1891 | /* Fast color packing/unpacking routines implemented as macros */ |
||
1892 | |||
1893 | #define MGL_packColorFast(pf,R,G,B) \ |
||
1894 | ((ulong)(((uchar)(R) >> (pf)->redAdjust) & (pf)->redMask) << (pf)->redPos) \ |
||
1895 | | ((ulong)(((uchar)(G) >> (pf)->greenAdjust) & (pf)->greenMask) << (pf)->greenPos) \ |
||
1896 | | ((ulong)(((uchar)(B) >> (pf)->blueAdjust) & (pf)->blueMask) << (pf)->bluePos) |
||
1897 | |||
1898 | #define MGL_unpackColorFast(pf,c,R,G,B) \ |
||
1899 | { \ |
||
1900 | (R) = (uchar)((((ulong)(c) >> (pf)->redPos) & (pf)->redMask) << (pf)->redAdjust); \ |
||
1901 | (G) = (uchar)((((ulong)(c) >> (pf)->greenPos) & (pf)->greenMask) << (pf)->greenAdjust);\ |
||
1902 | (B) = (uchar)((((ulong)(c) >> (pf)->bluePos) & (pf)->blueMask) << (pf)->blueAdjust); \ |
||
1903 | } |
||
1904 | |||
1905 | /* Macros to access the RGB components in a packed 24 bit RGB tuple */ |
||
1906 | |||
1907 | #define MGL_rgbRed(c) (((uchar*)&(c))[2]) |
||
1908 | #define MGL_rgbGreen(c) (((uchar*)&(c))[1]) |
||
1909 | #define MGL_rgbBlue(c) (((uchar*)&(c))[0]) |
||
1910 | |||
1911 | /* Fast 24 bit color packing/unpacking routines implemented as macros */ |
||
1912 | |||
1913 | #define MGL_packColorRGBFast(R,G,B) \ |
||
1914 | (((ulong)((uchar)(R)) << 16) | ((ulong)((uchar)(G)) << 8) | (uchar)(B)) |
||
1915 | |||
1916 | #define MGL_packColorRGBFast2(c,R,G,B) \ |
||
1917 | { \ |
||
1918 | MGL_rgbRed(c) = (uchar)(R); \ |
||
1919 | MGL_rgbGreen(c) = (uchar)(G); \ |
||
1920 | MGL_rgbBlue(c) = (uchar)(B); \ |
||
1921 | } |
||
1922 | |||
1923 | #define MGL_unpackColorRGBFast(c,R,G,B) \ |
||
1924 | { \ |
||
1925 | (R) = MGL_rgbRed(c); \ |
||
1926 | (G) = MGL_rgbGreen(c); \ |
||
1927 | (B) = MGL_rgbBlue(c); \ |
||
1928 | } |
||
1929 | |||
1930 | #ifdef __cplusplus |
||
1931 | } /* End of "C" linkage for C++ */ |
||
1932 | |||
1933 | #include "mglrect.hpp" /* Include C++ point/rectangle classes */ |
||
1934 | |||
1935 | #endif /* __cplusplus */ |
||
1936 | |||
1937 | /* Include appropriate platform specific bindings */ |
||
1938 | |||
1939 | #if defined(MGLWIN) || defined(__WINDOWS__) |
||
1940 | #include "mglwin.h" |
||
1941 | #elif defined(MGLPM) || defined(__OS2__) |
||
1942 | /*#include "mglpm.h"*/ |
||
1943 | #elif defined(MGLX) || defined(__UNIX__) |
||
1944 | /*#include "mglx.h"*/ |
||
1945 | #else |
||
1946 | #include "mgldos.h" |
||
1947 | #endif |
||
1948 | |||
1949 | #pragma pack() /* Return to default packing */ |
||
1950 | |||
1951 | #endif /* __MGRAPH_H */><>><>><>><>><>><>><>><>>>>>=>=>=>=>><>><>><> |