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