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