1 /***********************************************************
2 * Artsoft Retro-Game Library                               *
3 *----------------------------------------------------------*
4 * (c) 1994-2006 Artsoft Entertainment                      *
5 *               Holger Schemel                             *
6 *               Detmolder Strasse 189                      *
7 *               33604 Bielefeld                            *
8 *               Germany                                    *
9 *               e-mail: info@artsoft.org                   *
10 *----------------------------------------------------------*
11 * msdos.h                                                  *
12 ***********************************************************/
13 
14 #ifndef MSDOS_H
15 #define MSDOS_H
16 
17 #include <time.h>
18 #include "allegro.h"
19 
20 
21 /* symbol 'window' is defined in DJGPP cross-compiler in libc.a(conio.o) */
22 #define window window_internal
23 
24 /* symbol 'font' is defined in "allegro.h" */
25 #define font font_internal
26 
27 /* system dependent definitions */
28 
29 #define TARGET_STRING		"DOS"
30 
31 /* allegro defines TRUE as -1 */
32 #ifdef TRUE
33 #undef TRUE
34 #undef FALSE
35 #endif
36 
37 #define TRUE	1
38 #define FALSE	0
39 
40 #define XRES	800
41 #define YRES	600
42 
43 /* allegro defines some macros that bother the rest of the program */
44 #ifdef joy_x
45 #undef joy_x
46 #undef joy_y
47 #undef joy_left
48 #undef joy_right
49 #undef joy_up
50 #undef joy_down
51 #undef joy_b1
52 #undef joy_b2
53 #endif
54 
55 /* additional Allegro keyboard mapping */
56 
57 /* The following are all undefined in Allegro */
58 #define NEW_KEY_BACKSLASH	86
59 #define NEW_KEY_1_PAD		101
60 #define NEW_KEY_2_PAD		102
61 #define NEW_KEY_3_PAD		103
62 #define NEW_KEY_4_PAD		104
63 #define NEW_KEY_5_PAD		105
64 #define NEW_KEY_6_PAD		106
65 #define NEW_KEY_7_PAD		107
66 #define NEW_KEY_8_PAD		108
67 #define NEW_KEY_9_PAD		109
68 #define NEW_KEY_0_PAD		110
69 #define NEW_KEY_STOP_PAD	111
70 #define NEW_KEY_EQUALS_PAD	112
71 #define NEW_KEY_SLASH_PAD	113
72 #define NEW_KEY_ASTERISK_PAD	114
73 #define NEW_KEY_ENTER_PAD	115
74 
75 /* X11 keyboard mapping (from 'keysymdef.h') */
76 
77 #define XK_VoidSymbol		0xFFFFFF	/* void symbol */
78 
79 /*
80  * TTY Functions, cleverly chosen to map to ascii, for convenience of
81  * programming, but could have been arbitrary (at the cost of lookup
82  * tables in client code.
83  */
84 
85 #define XK_BackSpace		0xFF08	/* back space, back char */
86 #define XK_Tab			0xFF09
87 #define XK_Linefeed		0xFF0A	/* Linefeed, LF */
88 #define XK_Clear		0xFF0B
89 #define XK_Return		0xFF0D	/* Return, enter */
90 #define XK_Pause		0xFF13	/* Pause, hold */
91 #define XK_Scroll_Lock		0xFF14
92 #define XK_Sys_Req		0xFF15
93 #define XK_Escape		0xFF1B
94 #define XK_Delete		0xFFFF	/* Delete, rubout */
95 
96 /* International & multi-key character composition */
97 
98 #define XK_Multi_key		0xFF20  /* Multi-key character compose */
99 #define XK_SingleCandidate	0xFF3C
100 #define XK_MultipleCandidate	0xFF3D
101 #define XK_PreviousCandidate	0xFF3E
102 
103 /* Cursor control & motion */
104 
105 #define XK_Home			0xFF50
106 #define XK_Left			0xFF51	/* Move left, left arrow */
107 #define XK_Up			0xFF52	/* Move up, up arrow */
108 #define XK_Right		0xFF53	/* Move right, right arrow */
109 #define XK_Down			0xFF54	/* Move down, down arrow */
110 #define XK_Prior		0xFF55	/* Prior, previous */
111 #define XK_Page_Up		0xFF55
112 #define XK_Next			0xFF56	/* Next */
113 #define XK_Page_Down		0xFF56
114 #define XK_End			0xFF57	/* EOL */
115 #define XK_Begin		0xFF58	/* BOL */
116 
117 /* Misc Functions */
118 
119 #define XK_Select		0xFF60	/* Select, mark */
120 #define XK_Print		0xFF61
121 #define XK_Execute		0xFF62	/* Execute, run, do */
122 #define XK_Insert		0xFF63	/* Insert, insert here */
123 #define XK_Undo			0xFF65	/* Undo, oops */
124 #define XK_Redo			0xFF66	/* redo, again */
125 #define XK_Menu			0xFF67
126 #define XK_Find			0xFF68	/* Find, search */
127 #define XK_Cancel		0xFF69	/* Cancel, stop, abort, exit */
128 #define XK_Help			0xFF6A	/* Help */
129 #define XK_Break		0xFF6B
130 #define XK_Mode_switch		0xFF7E	/* Character set switch */
131 #define XK_script_switch        0xFF7E  /* Alias for mode_switch */
132 #define XK_Num_Lock		0xFF7F
133 
134 /* Keypad Functions, keypad numbers cleverly chosen to map to ascii */
135 
136 #define XK_KP_Space		0xFF80	/* space */
137 #define XK_KP_Tab		0xFF89
138 #define XK_KP_Enter		0xFF8D	/* enter */
139 #define XK_KP_F1		0xFF91	/* PF1, KP_A, ... */
140 #define XK_KP_F2		0xFF92
141 #define XK_KP_F3		0xFF93
142 #define XK_KP_F4		0xFF94
143 #define XK_KP_Home		0xFF95
144 #define XK_KP_Left		0xFF96
145 #define XK_KP_Up		0xFF97
146 #define XK_KP_Right		0xFF98
147 #define XK_KP_Down		0xFF99
148 #define XK_KP_Prior		0xFF9A
149 #define XK_KP_Page_Up		0xFF9A
150 #define XK_KP_Next		0xFF9B
151 #define XK_KP_Page_Down		0xFF9B
152 #define XK_KP_End		0xFF9C
153 #define XK_KP_Begin		0xFF9D
154 #define XK_KP_Insert		0xFF9E
155 #define XK_KP_Delete		0xFF9F
156 #define XK_KP_Equal		0xFFBD	/* equals */
157 #define XK_KP_Multiply		0xFFAA
158 #define XK_KP_Add		0xFFAB
159 #define XK_KP_Separator		0xFFAC	/* separator, often comma */
160 #define XK_KP_Subtract		0xFFAD
161 #define XK_KP_Decimal		0xFFAE
162 #define XK_KP_Divide		0xFFAF
163 
164 #define XK_KP_0			0xFFB0
165 #define XK_KP_1			0xFFB1
166 #define XK_KP_2			0xFFB2
167 #define XK_KP_3			0xFFB3
168 #define XK_KP_4			0xFFB4
169 #define XK_KP_5			0xFFB5
170 #define XK_KP_6			0xFFB6
171 #define XK_KP_7			0xFFB7
172 #define XK_KP_8			0xFFB8
173 #define XK_KP_9			0xFFB9
174 
175 /*
176  * Auxilliary Functions; note the duplicate definitions for left and right
177  * function keys;  Sun keyboards and a few other manufactures have such
178  * function key groups on the left and/or right sides of the keyboard.
179  * We've not found a keyboard with more than 35 function keys total.
180  */
181 
182 #define XK_F1			0xFFBE
183 #define XK_F2			0xFFBF
184 #define XK_F3			0xFFC0
185 #define XK_F4			0xFFC1
186 #define XK_F5			0xFFC2
187 #define XK_F6			0xFFC3
188 #define XK_F7			0xFFC4
189 #define XK_F8			0xFFC5
190 #define XK_F9			0xFFC6
191 #define XK_F10			0xFFC7
192 #define XK_F11			0xFFC8
193 #define XK_L1			0xFFC8
194 #define XK_F12			0xFFC9
195 #define XK_L2			0xFFC9
196 #define XK_F13			0xFFCA
197 #define XK_L3			0xFFCA
198 #define XK_F14			0xFFCB
199 #define XK_L4			0xFFCB
200 #define XK_F15			0xFFCC
201 #define XK_L5			0xFFCC
202 #define XK_F16			0xFFCD
203 #define XK_L6			0xFFCD
204 #define XK_F17			0xFFCE
205 #define XK_L7			0xFFCE
206 #define XK_F18			0xFFCF
207 #define XK_L8			0xFFCF
208 #define XK_F19			0xFFD0
209 #define XK_L9			0xFFD0
210 #define XK_F20			0xFFD1
211 #define XK_L10			0xFFD1
212 #define XK_F21			0xFFD2
213 #define XK_R1			0xFFD2
214 #define XK_F22			0xFFD3
215 #define XK_R2			0xFFD3
216 #define XK_F23			0xFFD4
217 #define XK_R3			0xFFD4
218 #define XK_F24			0xFFD5
219 #define XK_R4			0xFFD5
220 #define XK_F25			0xFFD6
221 #define XK_R5			0xFFD6
222 #define XK_F26			0xFFD7
223 #define XK_R6			0xFFD7
224 #define XK_F27			0xFFD8
225 #define XK_R7			0xFFD8
226 #define XK_F28			0xFFD9
227 #define XK_R8			0xFFD9
228 #define XK_F29			0xFFDA
229 #define XK_R9			0xFFDA
230 #define XK_F30			0xFFDB
231 #define XK_R10			0xFFDB
232 #define XK_F31			0xFFDC
233 #define XK_R11			0xFFDC
234 #define XK_F32			0xFFDD
235 #define XK_R12			0xFFDD
236 #define XK_F33			0xFFDE
237 #define XK_R13			0xFFDE
238 #define XK_F34			0xFFDF
239 #define XK_R14			0xFFDF
240 #define XK_F35			0xFFE0
241 #define XK_R15			0xFFE0
242 
243 /* Modifiers */
244 
245 #define XK_Shift_L		0xFFE1	/* Left shift */
246 #define XK_Shift_R		0xFFE2	/* Right shift */
247 #define XK_Control_L		0xFFE3	/* Left control */
248 #define XK_Control_R		0xFFE4	/* Right control */
249 #define XK_Caps_Lock		0xFFE5	/* Caps lock */
250 #define XK_Shift_Lock		0xFFE6	/* Shift lock */
251 
252 #define XK_Meta_L		0xFFE7	/* Left meta */
253 #define XK_Meta_R		0xFFE8	/* Right meta */
254 #define XK_Alt_L		0xFFE9	/* Left alt */
255 #define XK_Alt_R		0xFFEA	/* Right alt */
256 #define XK_Super_L		0xFFEB	/* Left super */
257 #define XK_Super_R		0xFFEC	/* Right super */
258 #define XK_Hyper_L		0xFFED	/* Left hyper */
259 #define XK_Hyper_R		0xFFEE	/* Right hyper */
260 
261 /*
262  *  Latin 1
263  *  Byte 3 = 0
264  */
265 
266 #define XK_space               0x020
267 #define XK_exclam              0x021
268 #define XK_quotedbl            0x022
269 #define XK_numbersign          0x023
270 #define XK_dollar              0x024
271 #define XK_percent             0x025
272 #define XK_ampersand           0x026
273 #define XK_apostrophe          0x027
274 #define XK_quoteright          0x027	/* deprecated */
275 #define XK_parenleft           0x028
276 #define XK_parenright          0x029
277 #define XK_asterisk            0x02a
278 #define XK_plus                0x02b
279 #define XK_comma               0x02c
280 #define XK_minus               0x02d
281 #define XK_period              0x02e
282 #define XK_slash               0x02f
283 #define XK_0                   0x030
284 #define XK_1                   0x031
285 #define XK_2                   0x032
286 #define XK_3                   0x033
287 #define XK_4                   0x034
288 #define XK_5                   0x035
289 #define XK_6                   0x036
290 #define XK_7                   0x037
291 #define XK_8                   0x038
292 #define XK_9                   0x039
293 #define XK_colon               0x03a
294 #define XK_semicolon           0x03b
295 #define XK_less                0x03c
296 #define XK_equal               0x03d
297 #define XK_greater             0x03e
298 #define XK_question            0x03f
299 #define XK_at                  0x040
300 #define XK_A                   0x041
301 #define XK_B                   0x042
302 #define XK_C                   0x043
303 #define XK_D                   0x044
304 #define XK_E                   0x045
305 #define XK_F                   0x046
306 #define XK_G                   0x047
307 #define XK_H                   0x048
308 #define XK_I                   0x049
309 #define XK_J                   0x04a
310 #define XK_K                   0x04b
311 #define XK_L                   0x04c
312 #define XK_M                   0x04d
313 #define XK_N                   0x04e
314 #define XK_O                   0x04f
315 #define XK_P                   0x050
316 #define XK_Q                   0x051
317 #define XK_R                   0x052
318 #define XK_S                   0x053
319 #define XK_T                   0x054
320 #define XK_U                   0x055
321 #define XK_V                   0x056
322 #define XK_W                   0x057
323 #define XK_X                   0x058
324 #define XK_Y                   0x059
325 #define XK_Z                   0x05a
326 #define XK_bracketleft         0x05b
327 #define XK_backslash           0x05c
328 #define XK_bracketright        0x05d
329 #define XK_asciicircum         0x05e
330 #define XK_underscore          0x05f
331 #define XK_grave               0x060
332 #define XK_quoteleft           0x060	/* deprecated */
333 #define XK_a                   0x061
334 #define XK_b                   0x062
335 #define XK_c                   0x063
336 #define XK_d                   0x064
337 #define XK_e                   0x065
338 #define XK_f                   0x066
339 #define XK_g                   0x067
340 #define XK_h                   0x068
341 #define XK_i                   0x069
342 #define XK_j                   0x06a
343 #define XK_k                   0x06b
344 #define XK_l                   0x06c
345 #define XK_m                   0x06d
346 #define XK_n                   0x06e
347 #define XK_o                   0x06f
348 #define XK_p                   0x070
349 #define XK_q                   0x071
350 #define XK_r                   0x072
351 #define XK_s                   0x073
352 #define XK_t                   0x074
353 #define XK_u                   0x075
354 #define XK_v                   0x076
355 #define XK_w                   0x077
356 #define XK_x                   0x078
357 #define XK_y                   0x079
358 #define XK_z                   0x07a
359 #define XK_braceleft           0x07b
360 #define XK_bar                 0x07c
361 #define XK_braceright          0x07d
362 #define XK_asciitilde          0x07e
363 
364 #define XK_nobreakspace        0x0a0
365 #define XK_exclamdown          0x0a1
366 #define XK_cent        	       0x0a2
367 #define XK_sterling            0x0a3
368 #define XK_currency            0x0a4
369 #define XK_yen                 0x0a5
370 #define XK_brokenbar           0x0a6
371 #define XK_section             0x0a7
372 #define XK_diaeresis           0x0a8
373 #define XK_copyright           0x0a9
374 #define XK_ordfeminine         0x0aa
375 #define XK_guillemotleft       0x0ab	/* left angle quotation mark */
376 #define XK_notsign             0x0ac
377 #define XK_hyphen              0x0ad
378 #define XK_registered          0x0ae
379 #define XK_macron              0x0af
380 #define XK_degree              0x0b0
381 #define XK_plusminus           0x0b1
382 #define XK_twosuperior         0x0b2
383 #define XK_threesuperior       0x0b3
384 #define XK_acute               0x0b4
385 #define XK_mu                  0x0b5
386 #define XK_paragraph           0x0b6
387 #define XK_periodcentered      0x0b7
388 #define XK_cedilla             0x0b8
389 #define XK_onesuperior         0x0b9
390 #define XK_masculine           0x0ba
391 #define XK_guillemotright      0x0bb	/* right angle quotation mark */
392 #define XK_onequarter          0x0bc
393 #define XK_onehalf             0x0bd
394 #define XK_threequarters       0x0be
395 #define XK_questiondown        0x0bf
396 #define XK_Agrave              0x0c0
397 #define XK_Aacute              0x0c1
398 #define XK_Acircumflex         0x0c2
399 #define XK_Atilde              0x0c3
400 #define XK_Adiaeresis          0x0c4
401 #define XK_Aring               0x0c5
402 #define XK_AE                  0x0c6
403 #define XK_Ccedilla            0x0c7
404 #define XK_Egrave              0x0c8
405 #define XK_Eacute              0x0c9
406 #define XK_Ecircumflex         0x0ca
407 #define XK_Ediaeresis          0x0cb
408 #define XK_Igrave              0x0cc
409 #define XK_Iacute              0x0cd
410 #define XK_Icircumflex         0x0ce
411 #define XK_Idiaeresis          0x0cf
412 #define XK_ETH                 0x0d0
413 #define XK_Eth                 0x0d0	/* deprecated */
414 #define XK_Ntilde              0x0d1
415 #define XK_Ograve              0x0d2
416 #define XK_Oacute              0x0d3
417 #define XK_Ocircumflex         0x0d4
418 #define XK_Otilde              0x0d5
419 #define XK_Odiaeresis          0x0d6
420 #define XK_multiply            0x0d7
421 #define XK_Ooblique            0x0d8
422 #define XK_Ugrave              0x0d9
423 #define XK_Uacute              0x0da
424 #define XK_Ucircumflex         0x0db
425 #define XK_Udiaeresis          0x0dc
426 #define XK_Yacute              0x0dd
427 #define XK_THORN               0x0de
428 #define XK_Thorn               0x0de	/* deprecated */
429 #define XK_ssharp              0x0df
430 #define XK_agrave              0x0e0
431 #define XK_aacute              0x0e1
432 #define XK_acircumflex         0x0e2
433 #define XK_atilde              0x0e3
434 #define XK_adiaeresis          0x0e4
435 #define XK_aring               0x0e5
436 #define XK_ae                  0x0e6
437 #define XK_ccedilla            0x0e7
438 #define XK_egrave              0x0e8
439 #define XK_eacute              0x0e9
440 #define XK_ecircumflex         0x0ea
441 #define XK_ediaeresis          0x0eb
442 #define XK_igrave              0x0ec
443 #define XK_iacute              0x0ed
444 #define XK_icircumflex         0x0ee
445 #define XK_idiaeresis          0x0ef
446 #define XK_eth                 0x0f0
447 #define XK_ntilde              0x0f1
448 #define XK_ograve              0x0f2
449 #define XK_oacute              0x0f3
450 #define XK_ocircumflex         0x0f4
451 #define XK_otilde              0x0f5
452 #define XK_odiaeresis          0x0f6
453 #define XK_division            0x0f7
454 #define XK_oslash              0x0f8
455 #define XK_ugrave              0x0f9
456 #define XK_uacute              0x0fa
457 #define XK_ucircumflex         0x0fb
458 #define XK_udiaeresis          0x0fc
459 #define XK_yacute              0x0fd
460 #define XK_thorn               0x0fe
461 #define XK_ydiaeresis          0x0ff
462 
463 /* end of X11 keyboard mapping */
464 
465 
466 #define screen myscreen
467 
468 #define XFlush(a)
469 #define XGetImage(a,b,c,d,e,f,g,h)		((XImage *) NULL)
470 #define XDisplayName(a)				((char *) NULL)
471 #define XFreeColors(a,b,c,d,e)
472 #define XSelectInput(a,b,c)
473 #define XDefaultDepth(a,b)			(8)
474 #define XSetWMProperties(a,b,c,d,e,f,g,h,i)
475 
476 #define MAX_EVENT_BUFFER	256
477 #define MAX_SCANCODES		128
478 
479 #define True			1
480 #define False			0
481 #define None			0L
482 
483 #define DUMMY_FILE		((void *) -1)
484 #define DUMMY_MASK		(-1)
485 
486 #define KeyPressMask		(1L << 0)
487 #define KeyReleaseMask		(1L << 1)
488 #define ButtonPressMask		(1L << 2)
489 #define ButtonReleaseMask	(1L << 3)
490 #define ButtonMotionMask	(1L << 13)
491 #define ExposureMask		(1L << 15)
492 #define StructureNotifyMask	(1L << 17)
493 #define FocusChangeMask		(1L << 21)
494 
495 #define KeyPress		2
496 #define KeyRelease		3
497 #define ButtonPress		4
498 #define ButtonRelease		5
499 #define MotionNotify		6
500 #define FocusIn			9
501 #define FocusOut		10
502 #define Expose			12
503 #define UnmapNotify		18
504 #define MapNotify		19
505 #define ClientMessage		33
506 
507 #define LineSolid               0
508 #define LineOnOffDash           1
509 #define LineDoubleDash          2
510 
511 #define CapNotLast              0
512 #define CapButt                 1
513 #define CapRound                2
514 #define CapProjecting           3
515 
516 #define JoinMiter               0
517 #define JoinRound               1
518 #define JoinBevel               2
519 
520 #define GCForeground            (1L << 2)
521 #define GCBackground            (1L << 3)
522 #define GCLineWidth             (1L << 4)
523 #define GCLineStyle             (1L << 5)
524 #define GCCapStyle              (1L << 6)
525 #define GCJoinStyle             (1L << 7)
526 #define GCGraphicsExposures     (1L << 16)
527 #define GCClipMask		(1L << 19)
528 
529 #define NormalState	1	/* most applications want to start this way */
530 #define InputHint 		(1L << 0)
531 #define StateHint 		(1L << 1)
532 #define IconPixmapHint		(1L << 2)
533 #define IconMaskHint		(1L << 5)
534 #define PSize			(1L << 3) /* program specified size */
535 #define PMinSize		(1L << 4) /* program specified minimum size */
536 #define PMaxSize		(1L << 5) /* program specified maximum size */
537 
538 #define PCX_Success		 0
539 #define PCX_OpenFailed		-1
540 #define PCX_ReadFailed		-2
541 #define	PCX_FileInvalid		-3
542 #define PCX_NoMemory		-4
543 #define PCX_ColorFailed		-5
544 
545 #define BitmapSuccess		0
546 #define BitmapOpenFailed 	1
547 #define BitmapFileInvalid 	2
548 #define BitmapNoMemory		3
549 
550 #define ZPixmap			2	/* depth == drawable depth */
551 
552 #define DefaultScreen(dpy) 	  (((_XPrivDisplay)dpy)->default_screen)
553 #define DefaultColormap(dpy, scr) (ScreenOfDisplay(dpy,scr)->cmap)
554 #define ScreenOfDisplay(dpy, scr) (&((_XPrivDisplay)dpy)->screens[scr])
555 #define BlackPixel(dpy, scr) 	  (ScreenOfDisplay(dpy,scr)->black_pixel)
556 #define WhitePixel(dpy, scr) 	  (ScreenOfDisplay(dpy,scr)->white_pixel)
557 #define RootWindow(dpy, scr) 	  (ScreenOfDisplay(dpy,scr)->root)
558 #define AllPlanes 		  ((unsigned int)~0L)
559 
560 #define DefaultVisual(dpy, scr)	  (NULL)
561 #define DefaultDepth(dpy, scr)	  (NULL)
562 #define XDisplayWidth(dpy, scr)	  (XRES)
563 #define XDisplayHeight(dpy, scr)  (YRES)
564 
565 #define XGetPixel(ximage, x, y) \
566         ((*((ximage)->f.get_pixel))((ximage), (x), (y)))
567 
568 typedef unsigned int Pixel;	/* Index into colormap */
569 typedef unsigned int XID;
570 typedef XID Window;
571 typedef XID Drawable;
572 typedef XID Pixmap;
573 typedef XID Colormap;
574 typedef XID KeySym;
575 typedef XID GContext;
576 typedef struct _XDisplay Display;
577 typedef int Visual;
578 typedef int XVisualInfo;
579 typedef int Atom;
580 typedef int Status;
581 typedef int Bool;
582 typedef int XComposeStatus;	/* we don't need the real type */
583 
584 typedef struct _XGC
585 {
586   GContext gid;			/* protocol ID for graphics context */
587 } *GC;
588 
589 typedef struct
590 {
591   Colormap cmap;		/* default color map */
592   Window root;			/* root window id */
593   unsigned int white_pixel;	/* white pixel value */
594   unsigned int black_pixel;	/* black pixel value */
595   int x;
596   int y;
597   unsigned int width;
598   unsigned int height;
599   BITMAP *video_bitmap;
600 } Screen;
601 
602 typedef struct _XDisplay
603 {
604   int default_screen;		/* default screen for operations */
605   Screen *screens;		/* pointer to list of screens */
606   BITMAP *mouse_ptr;
607 } *_XPrivDisplay;
608 
609 typedef struct _XImage
610 {
611   struct funcs
612   {
613     unsigned int (*get_pixel) (struct _XImage *, int, int);
614   } f;
615 } XImage;
616 
617 typedef struct
618 {
619   int flags;		/* marks which fields in this structure are defined */
620   int width, height;	/* should set so old wm's don't mess up */
621   int min_width, min_height;
622   int max_width, max_height;
623 } XSizeHints;
624 
625 typedef struct
626 {
627   int flags;		/* marks which fields in this structure are defined */
628   Bool input;		/* does this application rely on the window manager to
629 			   get keyboard input? */
630   int initial_state;	/* see below */
631   Pixmap icon_pixmap;	/* pixmap to be used as icon */
632   Pixmap icon_mask;	/* icon mask bitmap */
633 } XWMHints;
634 
635 typedef struct
636 {
637   char *res_name;
638   char *res_class;
639 } XClassHint;
640 
641 typedef struct
642 {
643   unsigned char *value;		/* same as Property routines */
644 } XTextProperty;
645 
646 typedef struct
647 {
648   unsigned int foreground;	/* foreground pixel */
649   unsigned int background;	/* background pixel */
650   Bool graphics_exposures;	/* boolean, should exposures be generated */
651   Pixmap clip_mask;		/* bitmap clipping; other calls for rects */
652   int clip_x_origin;		/* x origin for clipping */
653   int clip_y_origin;		/* y origin for clipping */
654   unsigned int value_mask;
655   int line_width;		/* line width */
656   int line_style;		/* LineSolid, LineOnOffDash, LineDoubleDash */
657   int cap_style;		/* CapNotLast, CapButt,
658 				   CapRound, CapProjecting */
659   int join_style;		/* JoinMiter, JoinRound, JoinBevel */
660 
661 } XGCValues;
662 
663 typedef struct
664 {
665   int type;
666   int x, y;
667   int width, height;
668 } XExposeEvent;
669 
670 typedef struct
671 {
672   int type;			/* of event */
673   int x, y;			/* pointer x, y coordinates in event window */
674   unsigned int button;		/* detail */
675 } XButtonEvent;
676 
677 typedef struct
678 {
679   int type;
680   int x, y;			/* pointer x, y coordinates in event window */
681 } XMotionEvent;
682 
683 typedef struct
684 {
685   int type;			/* of event */
686   unsigned int state;		/* key or button mask */
687 } XKeyEvent;
688 
689 typedef struct
690 {
691   int type;			/* FocusIn or FocusOut */
692 } XFocusChangeEvent;
693 
694 typedef struct
695 {
696   int type;			/* ClientMessage */
697 } XClientMessageEvent;
698 
699 typedef union _XEvent
700 {
701   int type;			/* must not be changed; first element */
702   XExposeEvent xexpose;
703   XButtonEvent xbutton;
704   XMotionEvent xmotion;
705   XKeyEvent xkey;
706 } XEvent;
707 
708 Pixel AllegroAllocColorCell(int, int, int);
709 
710 void XMapWindow(Display *, Window);
711 Display *XOpenDisplay(char *);
712 Window XCreateSimpleWindow(Display *, Window, int, int,
713 			   unsigned int, unsigned int, unsigned int,
714 			   unsigned int, unsigned int);
715 Status XStringListToTextProperty(char **, int, XTextProperty *);
716 void XFree(void *);
717 GC XCreateGC(Display *, Drawable, unsigned int, XGCValues *);
718 void XSetClipMask(Display *, GC, Pixmap);
719 void XSetClipOrigin(Display *, GC, int, int);
720 void XFillRectangle(Display *, Drawable, GC, int, int,
721 		    unsigned int, unsigned int);
722 Pixmap XCreatePixmap(Display *, Drawable, unsigned int, unsigned int,
723 		     unsigned int);
724 void XSync(Display *, Bool);
725 void XCopyArea(Display *, Drawable, Drawable, GC, int, int,
726 	       unsigned int, unsigned int, int, int);
727 int Read_PCX_to_Pixmap(Display *, Window, GC, char *, Pixmap *, Pixmap *);
728 int XReadBitmapFile(Display *, Drawable, char *,
729 		    unsigned int *, unsigned int *, Pixmap *, int *, int *);
730 void XFreePixmap(Display *, Pixmap);
731 void XFreeGC(Display *, GC);
732 void XUnmapWindow(Display *, Window);
733 void XCloseDisplay(Display *);
734 void XNextEvent(Display *, XEvent *);
735 int XPending(Display *);
736 KeySym XLookupKeysym(XKeyEvent *, int);
737 int XLookupString(XKeyEvent *, char *, int, KeySym *, XComposeStatus *);
738 void XSetForeground(Display *, GC, unsigned int);
739 void XDrawLine(Display *, Drawable, GC, int, int, int, int);
740 void XDestroyImage(XImage *);
741 void XDestroyWindow(Display *, Window);
742 Bool XQueryPointer(Display *, Window, Window *, Window *, int *, int *,
743 		   int *, int *, unsigned int *);
744 void XAutoRepeatOn(Display *);
745 void XAutoRepeatOff(Display *);
746 
747 void AllegroDrawLine(Drawable, int, int, int, int, Pixel);
748 Pixel AllegroGetPixel(Drawable, int, int);
749 
750 void AllegroZoomBitmap(Drawable, Drawable, int, int, int, int);
751 
752 void MSDOSOpenAudio(void);
753 void MSDOSCloseAudio(void);
754 
755 void NetworkServer(int, int);
756 
757 void MSDOSInitJoysticks();
758 boolean MSDOSReadJoystick(int, int *, int *, boolean *, boolean *);
759 
760 #endif /* MSDOS_H */
761