4db6cf8b28961610a0529ac0af927eae2d946296
[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 #define XRES    800
19 #define YRES    600
20
21 /* Allegro keyboard mapping */
22
23 #define OSD_KEY_ESC         1        /* keyboard scan codes */
24 #define OSD_KEY_1           2        /* (courtesy of allegro.h) */
25 #define OSD_KEY_2           3
26 #define OSD_KEY_3           4
27 #define OSD_KEY_4           5
28 #define OSD_KEY_5           6
29 #define OSD_KEY_6           7
30 #define OSD_KEY_7           8
31 #define OSD_KEY_8           9
32 #define OSD_KEY_9           10
33 #define OSD_KEY_0           11
34 #define OSD_KEY_MINUS       12
35 #define OSD_KEY_EQUALS      13
36 #define OSD_KEY_BACKSPACE   14
37 #define OSD_KEY_TAB         15
38 #define OSD_KEY_Q           16
39 #define OSD_KEY_W           17
40 #define OSD_KEY_E           18
41 #define OSD_KEY_R           19
42 #define OSD_KEY_T           20
43 #define OSD_KEY_Y           21
44 #define OSD_KEY_U           22
45 #define OSD_KEY_I           23
46 #define OSD_KEY_O           24
47 #define OSD_KEY_P           25
48 #define OSD_KEY_OPENBRACE   26
49 #define OSD_KEY_CLOSEBRACE  27
50 #define OSD_KEY_ENTER       28
51 #define OSD_KEY_LCONTROL    29
52 #define OSD_KEY_A           30
53 #define OSD_KEY_S           31
54 #define OSD_KEY_D           32
55 #define OSD_KEY_F           33
56 #define OSD_KEY_G           34
57 #define OSD_KEY_H           35
58 #define OSD_KEY_J           36
59 #define OSD_KEY_K           37
60 #define OSD_KEY_L           38
61 #define OSD_KEY_COLON       39
62 #define OSD_KEY_QUOTE       40
63 #define OSD_KEY_TILDE       41
64 #define OSD_KEY_LSHIFT      42
65 /* 43 */
66 #define OSD_KEY_Z           44
67 #define OSD_KEY_X           45
68 #define OSD_KEY_C           46
69 #define OSD_KEY_V           47
70 #define OSD_KEY_B           48
71 #define OSD_KEY_N           49
72 #define OSD_KEY_M           50
73 #define OSD_KEY_COMMA       51
74 #define OSD_KEY_STOP        52
75 #define OSD_KEY_SLASH       53
76 #define OSD_KEY_RSHIFT      54
77 #define OSD_KEY_ASTERISK    55
78 #define OSD_KEY_ALT         56
79 #define OSD_KEY_SPACE       57
80 #define OSD_KEY_CAPSLOCK    58
81 #define OSD_KEY_F1          59
82 #define OSD_KEY_F2          60
83 #define OSD_KEY_F3          61
84 #define OSD_KEY_F4          62
85 #define OSD_KEY_F5          63
86 #define OSD_KEY_F6          64
87 #define OSD_KEY_F7          65
88 #define OSD_KEY_F8          66
89 #define OSD_KEY_F9          67
90 #define OSD_KEY_F10         68
91 #define OSD_KEY_NUMLOCK     69
92 #define OSD_KEY_SCRLOCK     70
93 #define OSD_KEY_HOME        71
94 #define OSD_KEY_UP          72
95 #define OSD_KEY_PGUP        73
96 #define OSD_KEY_MINUS_PAD   74
97 #define OSD_KEY_LEFT        75
98 #define OSD_KEY_5_PAD       76
99 #define OSD_KEY_RIGHT       77
100 #define OSD_KEY_PLUS_PAD    78
101 #define OSD_KEY_END         79
102 #define OSD_KEY_DOWN        80
103 #define OSD_KEY_PGDN        81
104 #define OSD_KEY_INSERT      82
105 #define OSD_KEY_DEL         83
106 #define OSD_KEY_RCONTROL    84  /* different from Allegro */
107 #define OSD_KEY_ALTGR       85  /* different from Allegro */
108 /* 86 */
109 #define OSD_KEY_F11         87
110 #define OSD_KEY_F12         88
111 #define OSD_KEY_COMMAND     89
112 #define OSD_KEY_OPTION      90
113 /* 91 - 100 */
114 /* The following are all undefined in Allegro */
115 #define OSD_KEY_1_PAD           101
116 #define OSD_KEY_2_PAD           102
117 #define OSD_KEY_3_PAD           103
118 #define OSD_KEY_4_PAD           104
119 /* 105 */
120 #define OSD_KEY_6_PAD           106
121 #define OSD_KEY_7_PAD           107
122 #define OSD_KEY_8_PAD           108
123 #define OSD_KEY_9_PAD           109
124 #define OSD_KEY_0_PAD           110
125 #define OSD_KEY_STOP_PAD        111
126 #define OSD_KEY_EQUALS_PAD      112
127 #define OSD_KEY_SLASH_PAD       113
128 #define OSD_KEY_ASTER_PAD       114
129 #define OSD_KEY_ENTER_PAD       115
130
131 #define OSD_MAX_KEY         115
132
133 /* X11 keyboard mapping */
134
135 #define XK_KP_Enter     OSD_KEY_ENTER_PAD
136 #define XK_KP_0         OSD_KEY_0_PAD
137 #define XK_KP_1         OSD_KEY_1_PAD
138 #define XK_KP_2         OSD_KEY_2_PAD
139 #define XK_KP_3         OSD_KEY_3_PAD
140 #define XK_KP_4         OSD_KEY_4_PAD
141 #define XK_KP_6         OSD_KEY_6_PAD
142 #define XK_KP_7         OSD_KEY_7_PAD
143 #define XK_KP_8         OSD_KEY_8_PAD
144 #define XK_KP_9         OSD_KEY_9_PAD
145 /*
146 #define XK_KP_Home      OSD_KEY_7_PAD
147 #define XK_KP_Page_Up   OSD_KEY_9_PAD
148 #define XK_KP_Page_Down OSD_KEY_3_PAD
149 #define XK_KP_End       OSD_KEY_1_PAD
150 #define XK_KP_Left      OSD_KEY_4_PAD   
151 #define XK_KP_Up        OSD_KEY_8_PAD
152 #define XK_KP_Right     OSD_KEY_6_PAD
153 #define XK_KP_Down      OSD_KEY_2_PAD
154 */
155 #define XK_0            OSD_KEY_1
156 #define XK_1            OSD_KEY_2
157 #define XK_2            OSD_KEY_3
158 #define XK_3            OSD_KEY_4
159 #define XK_4            OSD_KEY_5
160 #define XK_5            OSD_KEY_6
161 #define XK_6            OSD_KEY_7
162 #define XK_7            OSD_KEY_8
163 #define XK_8            OSD_KEY_9
164 #define XK_9            OSD_KEY_0
165 #define XK_A            OSD_KEY_A
166 #define XK_B            OSD_KEY_B
167 #define XK_C            OSD_KEY_C
168 #define XK_D            OSD_KEY_D
169 #define XK_E            OSD_KEY_E
170 #define XK_F            OSD_KEY_F
171 #define XK_G            OSD_KEY_G
172 #define XK_H            OSD_KEY_H
173 #define XK_I            OSD_KEY_I
174 #define XK_J            OSD_KEY_J
175 #define XK_K            OSD_KEY_K
176 #define XK_L            OSD_KEY_L
177 #define XK_M            OSD_KEY_M
178 #define XK_N            OSD_KEY_N
179 #define XK_O            OSD_KEY_O
180 #define XK_P            OSD_KEY_P
181 #define XK_Q            OSD_KEY_Q
182 #define XK_R            OSD_KEY_R
183 #define XK_S            OSD_KEY_S
184 #define XK_T            OSD_KEY_T
185 #define XK_U            OSD_KEY_U
186 #define XK_V            OSD_KEY_V
187 #define XK_W            OSD_KEY_W
188 #define XK_X            OSD_KEY_X
189 #define XK_Y            OSD_KEY_Y
190 #define XK_Z            OSD_KEY_Z
191 #define XK_a            OSD_KEY_A
192 #define XK_b            OSD_KEY_B
193 #define XK_c            OSD_KEY_C
194 #define XK_d            OSD_KEY_D
195 #define XK_e            OSD_KEY_E
196 #define XK_f            OSD_KEY_F
197 #define XK_g            OSD_KEY_G
198 #define XK_h            OSD_KEY_H
199 #define XK_i            OSD_KEY_I
200 #define XK_j            OSD_KEY_J
201 #define XK_k            OSD_KEY_K
202 #define XK_l            OSD_KEY_L
203 #define XK_m            OSD_KEY_M
204 #define XK_n            OSD_KEY_N
205 #define XK_o            OSD_KEY_O
206 #define XK_p            OSD_KEY_P
207 #define XK_q            OSD_KEY_Q
208 #define XK_r            OSD_KEY_R
209 #define XK_s            OSD_KEY_S
210 #define XK_t            OSD_KEY_T
211 #define XK_u            OSD_KEY_U
212 #define XK_v            OSD_KEY_V
213 #define XK_w            OSD_KEY_W
214 #define XK_x            OSD_KEY_X
215 #define XK_y            OSD_KEY_Y
216 #define XK_z            OSD_KEY_Z
217 #define XK_Return       OSD_KEY_ENTER
218 #define XK_Escape       OSD_KEY_ESC
219 #define XK_Shift_L      OSD_KEY_LSHIFT
220 #define XK_Shift_R      OSD_KEY_RSHIFT
221 #define XK_Left         OSD_KEY_LEFT    
222 #define XK_Up           OSD_KEY_UP
223 #define XK_Right        OSD_KEY_RIGHT
224 #define XK_Down         OSD_KEY_DOWN
225 #define XK_BackSpace    OSD_KEY_BACKSPACE
226 #define XK_Delete       OSD_KEY_DEL
227 #define XK_Space        OSD_KEY_SPACE
228 #define XK_F12          OSD_KEY_F12
229 #define XK_F11          OSD_KEY_F11
230 #define XK_F10          OSD_KEY_F10
231
232
233 /*!!!*/
234 #define XK_KP_Add       OSD_KEY_PLUS_PAD
235 #define XK_KP_Subtract  OSD_KEY_MINUS_PAD
236 #define XK_KP_Multiply  OSD_KEY_ASTER_PAD
237 #define XK_KP_Divide    OSD_KEY_SLASH_PAD
238 #define XK_KP_Separator OSD_KEY_STOP_PAD
239 #define XK_Control_L    OSD_KEY_LCONTROL
240 #define XK_Control_R    OSD_KEY_RCONTROL
241 #define XK_Meta_L       OSD_KEY_ALT
242 #define XK_Meta_R       OSD_KEY_ALTGR
243 #define XK_Alt_L        OSD_KEY_ALT
244 #define XK_Alt_R        OSD_KEY_ALTGR
245 #define XK_Mode_switch  0                       /* unknown in allegro */
246 #define XK_Multi_key    0                       /* unknown in allegro */
247 #define XK_Insert       OSD_KEY_INSERT
248 #define XK_Tab          OSD_KEY_TAB
249 #define XK_Home         OSD_KEY_HOME
250 #define XK_End          OSD_KEY_END
251 #define XK_Page_Up      OSD_KEY_PGUP
252 #define XK_Page_Down    OSD_KEY_PGDN
253 #define XK_space        OSD_KEY_SPACE
254 #define XK_adiaeresis   0                       /* unknown in allegro */
255 #define XK_odiaeresis   0                       /* unknown in allegro */
256 #define XK_udiaeresis   0                       /* unknown in allegro */
257 #define XK_apostrophe   0                       /* unknown in allegro */
258 #define XK_plus         0                       /* unknown in allegro */
259 #define XK_minus        OSD_KEY_MINUS
260 #define XK_comma        OSD_KEY_COMMA
261 #define XK_period       OSD_KEY_STOP
262 #define XK_numbersign   0                       /* unknown in allegro */
263 #define XK_less         0                       /* unknown in allegro */
264 #define XK_greater      0                       /* unknown in allegro */
265 #define XK_asciicircum  0                       /* unknown in allegro */
266 #define XK_ssharp       0                       /* unknown in allegro */
267 #define XK_F1           0                       /* unknown in allegro */
268 #define XK_F24          0                       /* unknown in allegro */
269 #define XK_VoidSymbol   0                       /* unknown in allegro */
270 /*!!!*/
271
272
273 #define MOUSE_GIF_FILENAME      "graphics\\mouse.gif"
274 #define MOUSE_PCX_FILENAME      "graphics\\mouse.gif"
275 #define JOYSTICK_FILENAME       "joystick.cnf"
276 #define screen myscreen
277
278 #define XFlush(a)
279 #define XGetImage(a,b,c,d,e,f,g,h)              ((XImage *) NULL)
280 #define XAutoRepeatOn(a)
281 #define XAutoRepeatOff(a)
282 #define XDisplayName(a)                         ((char *) NULL)
283 #define XFreeColors(a,b,c,d,e)
284 #define XpmFreeAttributes(a)
285 #define XSelectInput(a,b,c)
286 #define XDefaultDepth(a,b)                      (8)
287 #define XSetWMProperties(a,b,c,d,e,f,g,h,i)
288
289 #define MAX_EVENT_BUFFER        256
290
291 #define True                    1
292 #define False                   0
293 #define None                    0L
294
295 #define DUMMY_FILE              ((void *) -1)
296 #define DUMMY_MASK              (-1)
297
298 #define KeyPressMask            (1L << 0)  
299 #define KeyReleaseMask          (1L << 1)  
300 #define ButtonPressMask         (1L << 2)  
301 #define ButtonReleaseMask       (1L << 3)  
302 #define ButtonMotionMask        (1L << 13) 
303 #define ExposureMask            (1L << 15) 
304 #define StructureNotifyMask     (1L << 17) 
305 #define FocusChangeMask         (1L << 21) 
306
307 #define KeyPress                2
308 #define KeyRelease              3
309 #define ButtonPress             4
310 #define ButtonRelease           5
311 #define MotionNotify            6
312 #define FocusIn                 9
313 #define FocusOut                10
314 #define Expose                  12
315 #define UnmapNotify             18
316 #define MapNotify               19
317 #define ClientMessage           33
318
319 #define GCForeground            (1L << 2)
320 #define GCBackground            (1L << 3)
321 #define GCGraphicsExposures     (1L << 16)
322 #define GCClipMask              (1L << 19)
323
324 #define NormalState     1       /* most applications want to start this way */
325 #define InputHint               (1L << 0)
326 #define StateHint               (1L << 1)
327 #define IconPixmapHint          (1L << 2)
328 #define IconMaskHint            (1L << 5)
329 #define PSize                   (1L << 3) /* program specified size */
330 #define PMinSize                (1L << 4) /* program specified minimum size */
331 #define PMaxSize                (1L << 5) /* program specified maximum size */
332
333 #define XpmSuccess               0
334 #define XpmOpenFailed           -1
335 #define XpmFileInvalid          -2
336 #define XpmNoMemory             -3
337 #define XpmColorFailed          -4
338
339 #define XpmCloseness            (1L << 12)
340
341 #define PCX_Success              0
342 #define PCX_OpenFailed          -1
343 #define PCX_ReadFailed          -2
344 #define PCX_FileInvalid         -3
345 #define PCX_NoMemory            -4
346 #define PCX_ColorFailed         -5
347
348 #define BitmapSuccess           0
349 #define BitmapOpenFailed        1
350 #define BitmapFileInvalid       2
351 #define BitmapNoMemory          3
352
353 #define ZPixmap                 2       /* depth == drawable depth */
354
355 #define DefaultScreen(dpy)        (((_XPrivDisplay)dpy)->default_screen)
356 #define DefaultColormap(dpy, scr) (ScreenOfDisplay(dpy,scr)->cmap)
357 #define ScreenOfDisplay(dpy, scr) (&((_XPrivDisplay)dpy)->screens[scr])
358 #define BlackPixel(dpy, scr)      (ScreenOfDisplay(dpy,scr)->black_pixel)
359 #define WhitePixel(dpy, scr)      (ScreenOfDisplay(dpy,scr)->white_pixel)
360 #define RootWindow(dpy, scr)      (ScreenOfDisplay(dpy,scr)->root)
361 #define AllPlanes                 ((unsigned long)~0L)
362
363 #define DefaultVisual(dpy, scr)   (NULL)
364 #define DefaultDepth(dpy, scr)    (NULL)
365 #define XDisplayWidth(dpy, scr)   (XRES)
366 #define XDisplayHeight(dpy, scr)  (YRES)
367
368 #define XGetPixel(ximage, x, y) \
369         ((*((ximage)->f.get_pixel))((ximage), (x), (y)))
370
371 typedef unsigned long Pixel;    /* Index into colormap */
372 typedef unsigned long XID;
373 typedef XID Window;
374 typedef XID Drawable;
375 typedef XID Pixmap;
376 typedef XID Colormap;
377 typedef XID KeySym;
378 typedef XID GContext;
379 typedef struct _XDisplay Display;
380 typedef long Visual;
381 typedef long XVisualInfo;
382 typedef long Atom;
383 typedef int Status;
384 typedef int Bool;
385
386 typedef struct _XGC
387 {
388   GContext gid;                 /* protocol ID for graphics context */
389 } *GC;
390
391 typedef struct
392 {
393   Colormap cmap;                /* default color map */
394   Window root;                  /* root window id */
395   unsigned long white_pixel;    /* white pixel value */
396   unsigned long black_pixel;    /* black pixel value */
397   int x;
398   int y;
399   unsigned int width;
400   unsigned int height;
401   BITMAP *video_bitmap;
402 } Screen;
403
404 typedef struct _XDisplay
405 {
406   int default_screen;           /* default screen for operations */
407   Screen *screens;              /* pointer to list of screens */
408   BITMAP *mouse_ptr;
409 } *_XPrivDisplay;
410
411 typedef struct _XImage
412 {
413   struct funcs
414   {
415     unsigned long (*get_pixel) (struct _XImage *, int, int);
416   } f;
417 } XImage;
418
419 typedef struct
420 {
421   long flags;           /* marks which fields in this structure are defined */
422   int width, height;    /* should set so old wm's don't mess up */
423   int min_width, min_height;
424   int max_width, max_height;
425 } XSizeHints;
426
427 typedef struct
428 {
429   long flags;           /* marks which fields in this structure are defined */
430   Bool input;           /* does this application rely on the window manager to
431                            get keyboard input? */
432   int initial_state;    /* see below */
433   Pixmap icon_pixmap;   /* pixmap to be used as icon */
434   Pixmap icon_mask;     /* icon mask bitmap */
435 } XWMHints;
436
437 typedef struct
438 {
439   char *res_name;
440   char *res_class;
441 } XClassHint;
442
443 typedef struct
444 {
445   unsigned char *value;         /* same as Property routines */
446 } XTextProperty;
447
448 typedef struct
449 {
450   unsigned long foreground;     /* foreground pixel */
451   unsigned long background;     /* background pixel */
452   Bool graphics_exposures;      /* boolean, should exposures be generated */
453   Pixmap clip_mask;             /* bitmap clipping; other calls for rects */
454   int clip_x_origin;            /* x origin for clipping */
455   int clip_y_origin;            /* y origin for clipping */
456   unsigned long value_mask;
457 } XGCValues;
458
459 typedef struct
460 {
461   unsigned long valuemask;      /* specifies which attributes are */
462   unsigned int closeness;       /* allowable RGB deviation */
463   Pixel *pixels;                /* list of used color pixels */
464   unsigned int npixels;         /* number of used pixels */
465 } XpmAttributes;
466
467 typedef struct
468 {
469   int type;
470   int x, y;
471   int width, height;
472 } XExposeEvent;
473
474 typedef struct
475 {
476   int type;                     /* of event */
477   int x, y;                     /* pointer x, y coordinates in event window */
478   unsigned int button;          /* detail */
479 } XButtonEvent;
480
481 typedef struct
482 {
483   int type;
484   int x, y;                     /* pointer x, y coordinates in event window */
485 } XMotionEvent;
486
487 typedef struct
488 {
489   int type;                     /* of event */
490   unsigned int state;           /* key or button mask */
491 } XKeyEvent;
492
493 typedef struct
494 {
495   int type;                     /* FocusIn or FocusOut */
496 } XFocusChangeEvent;
497
498 typedef struct
499 {
500   int type;                     /* ClientMessage */
501 } XClientMessageEvent;
502
503 typedef union _XEvent
504 {
505   int type;                     /* must not be changed; first element */
506   XExposeEvent xexpose;
507   XButtonEvent xbutton;
508   XMotionEvent xmotion;
509   XKeyEvent xkey;
510 } XEvent;
511
512 unsigned char get_ascii(KeySym);
513 void XMapWindow(Display *, Window);
514 Display *XOpenDisplay(char *);
515 Window XCreateSimpleWindow(Display *, Window, int, int,
516                            unsigned int, unsigned int, unsigned int,
517                            unsigned long, unsigned long);
518 Status XStringListToTextProperty(char **, int, XTextProperty *);
519 void XFree(void *);
520 GC XCreateGC(Display *, Drawable, unsigned long, XGCValues *);
521 void XSetClipMask(Display *, GC, Pixmap);
522 void XSetClipOrigin(Display *, GC, int, int);
523 void XFillRectangle(Display *, Drawable, GC, int, int,
524                     unsigned int, unsigned int);
525 Pixmap XCreatePixmap(Display *, Drawable, unsigned int, unsigned int,
526                      unsigned int);
527 void XSync(Display *, Bool);
528 inline void XCopyArea(Display *, Drawable, Drawable, GC, int, int,
529                       unsigned int, unsigned int, int, int);
530 int Read_PCX_to_Pixmap(Display *, Window, GC, char *, Pixmap *, Pixmap *);
531 int XpmReadFileToPixmap(Display *, Drawable, char *, Pixmap *, Pixmap *,
532                         XpmAttributes *);
533 int XReadBitmapFile(Display *, Drawable, char *,
534                     unsigned int *, unsigned int *, Pixmap *, int *, int *);
535 void XFreePixmap(Display *, Pixmap);
536 void XFreeGC(Display *, GC);
537 void XCloseDisplay(Display *);
538 void XNextEvent(Display *, XEvent *);
539 int XPending(Display *);
540 KeySym XLookupKeysym(XKeyEvent *, int);
541 void NetworkServer(int, int);