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