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