+/***********************************************************
+* Rocks'n'Diamonds -- McDuffin Strikes Back! *
+*----------------------------------------------------------*
+* ©1995 Artsoft Development *
+* Holger Schemel *
+* 33659 Bielefeld-Senne *
+* Telefon: (0521) 493245 *
+* eMail: aeglos@valinor.owl.de *
+* aeglos@uni-paderborn.de *
+* q99492@pbhrzx.uni-paderborn.de *
+*----------------------------------------------------------*
+* msdos.h *
+***********************************************************/
+
+#include <allegro.h>
+#include <time.h>
+
+#define XRES 800
+#define YRES 600
+
+/* Allegro keyboard mapping */
+
+#define OSD_KEY_ESC 1 /* keyboard scan codes */
+#define OSD_KEY_1 2 /* (courtesy of allegro.h) */
+#define OSD_KEY_2 3
+#define OSD_KEY_3 4
+#define OSD_KEY_4 5
+#define OSD_KEY_5 6
+#define OSD_KEY_6 7
+#define OSD_KEY_7 8
+#define OSD_KEY_8 9
+#define OSD_KEY_9 10
+#define OSD_KEY_0 11
+#define OSD_KEY_MINUS 12
+#define OSD_KEY_EQUALS 13
+#define OSD_KEY_BACKSPACE 14
+#define OSD_KEY_TAB 15
+#define OSD_KEY_Q 16
+#define OSD_KEY_W 17
+#define OSD_KEY_E 18
+#define OSD_KEY_R 19
+#define OSD_KEY_T 20
+#define OSD_KEY_Y 21
+#define OSD_KEY_U 22
+#define OSD_KEY_I 23
+#define OSD_KEY_O 24
+#define OSD_KEY_P 25
+#define OSD_KEY_OPENBRACE 26
+#define OSD_KEY_CLOSEBRACE 27
+#define OSD_KEY_ENTER 28
+#define OSD_KEY_LCONTROL 29
+#define OSD_KEY_A 30
+#define OSD_KEY_S 31
+#define OSD_KEY_D 32
+#define OSD_KEY_F 33
+#define OSD_KEY_G 34
+#define OSD_KEY_H 35
+#define OSD_KEY_J 36
+#define OSD_KEY_K 37
+#define OSD_KEY_L 38
+#define OSD_KEY_COLON 39
+#define OSD_KEY_QUOTE 40
+#define OSD_KEY_TILDE 41
+#define OSD_KEY_LSHIFT 42
+/* 43 */
+#define OSD_KEY_Z 44
+#define OSD_KEY_X 45
+#define OSD_KEY_C 46
+#define OSD_KEY_V 47
+#define OSD_KEY_B 48
+#define OSD_KEY_N 49
+#define OSD_KEY_M 50
+#define OSD_KEY_COMMA 51
+#define OSD_KEY_STOP 52
+#define OSD_KEY_SLASH 53
+#define OSD_KEY_RSHIFT 54
+#define OSD_KEY_ASTERISK 55
+#define OSD_KEY_ALT 56
+#define OSD_KEY_SPACE 57
+#define OSD_KEY_CAPSLOCK 58
+#define OSD_KEY_F1 59
+#define OSD_KEY_F2 60
+#define OSD_KEY_F3 61
+#define OSD_KEY_F4 62
+#define OSD_KEY_F5 63
+#define OSD_KEY_F6 64
+#define OSD_KEY_F7 65
+#define OSD_KEY_F8 66
+#define OSD_KEY_F9 67
+#define OSD_KEY_F10 68
+#define OSD_KEY_NUMLOCK 69
+#define OSD_KEY_SCRLOCK 70
+#define OSD_KEY_HOME 71
+#define OSD_KEY_UP 72
+#define OSD_KEY_PGUP 73
+#define OSD_KEY_MINUS_PAD 74
+#define OSD_KEY_LEFT 75
+#define OSD_KEY_5_PAD 76
+#define OSD_KEY_RIGHT 77
+#define OSD_KEY_PLUS_PAD 78
+#define OSD_KEY_END 79
+#define OSD_KEY_DOWN 80
+#define OSD_KEY_PGDN 81
+#define OSD_KEY_INSERT 82
+#define OSD_KEY_DEL 83
+#define OSD_KEY_RCONTROL 84 /* different from Allegro */
+#define OSD_KEY_ALTGR 85 /* different from Allegro */
+/* 86 */
+#define OSD_KEY_F11 87
+#define OSD_KEY_F12 88
+#define OSD_KEY_COMMAND 89
+#define OSD_KEY_OPTION 90
+/* 91 - 100 */
+/* The following are all undefined in Allegro */
+#define OSD_KEY_1_PAD 101
+#define OSD_KEY_2_PAD 102
+#define OSD_KEY_3_PAD 103
+#define OSD_KEY_4_PAD 104
+/* 105 */
+#define OSD_KEY_6_PAD 106
+#define OSD_KEY_7_PAD 107
+#define OSD_KEY_8_PAD 108
+#define OSD_KEY_9_PAD 109
+#define OSD_KEY_0_PAD 110
+#define OSD_KEY_STOP_PAD 111
+#define OSD_KEY_EQUALS_PAD 112
+#define OSD_KEY_SLASH_PAD 113
+#define OSD_KEY_ASTER_PAD 114
+#define OSD_KEY_ENTER_PAD 115
+
+#define OSD_MAX_KEY 115
+
+/* X11 keyboard mapping */
+
+#define XK_KP_Enter OSD_KEY_ENTER_PAD
+#define XK_KP_0 OSD_KEY_0_PAD
+#define XK_KP_1 OSD_KEY_1_PAD
+#define XK_KP_2 OSD_KEY_2_PAD
+#define XK_KP_3 OSD_KEY_3_PAD
+#define XK_KP_4 OSD_KEY_4_PAD
+#define XK_KP_6 OSD_KEY_6_PAD
+#define XK_KP_7 OSD_KEY_7_PAD
+#define XK_KP_8 OSD_KEY_8_PAD
+#define XK_KP_9 OSD_KEY_9_PAD
+/*
+#define XK_KP_Home OSD_KEY_7_PAD
+#define XK_KP_Page_Up OSD_KEY_9_PAD
+#define XK_KP_Page_Down OSD_KEY_3_PAD
+#define XK_KP_End OSD_KEY_1_PAD
+#define XK_KP_Left OSD_KEY_4_PAD
+#define XK_KP_Up OSD_KEY_8_PAD
+#define XK_KP_Right OSD_KEY_6_PAD
+#define XK_KP_Down OSD_KEY_2_PAD
+*/
+#define XK_0 OSD_KEY_1
+#define XK_1 OSD_KEY_2
+#define XK_2 OSD_KEY_3
+#define XK_3 OSD_KEY_4
+#define XK_4 OSD_KEY_5
+#define XK_5 OSD_KEY_6
+#define XK_6 OSD_KEY_7
+#define XK_7 OSD_KEY_8
+#define XK_8 OSD_KEY_9
+#define XK_9 OSD_KEY_0
+#define XK_A OSD_KEY_A
+#define XK_B OSD_KEY_B
+#define XK_C OSD_KEY_C
+#define XK_D OSD_KEY_D
+#define XK_E OSD_KEY_E
+#define XK_F OSD_KEY_F
+#define XK_G OSD_KEY_G
+#define XK_H OSD_KEY_H
+#define XK_I OSD_KEY_I
+#define XK_J OSD_KEY_J
+#define XK_K OSD_KEY_K
+#define XK_L OSD_KEY_L
+#define XK_M OSD_KEY_M
+#define XK_N OSD_KEY_N
+#define XK_O OSD_KEY_O
+#define XK_P OSD_KEY_P
+#define XK_Q OSD_KEY_Q
+#define XK_R OSD_KEY_R
+#define XK_S OSD_KEY_S
+#define XK_T OSD_KEY_T
+#define XK_U OSD_KEY_U
+#define XK_V OSD_KEY_V
+#define XK_W OSD_KEY_W
+#define XK_X OSD_KEY_X
+#define XK_Y OSD_KEY_Y
+#define XK_Z OSD_KEY_Z
+#define XK_a OSD_KEY_A
+#define XK_b OSD_KEY_B
+#define XK_c OSD_KEY_C
+#define XK_d OSD_KEY_D
+#define XK_e OSD_KEY_E
+#define XK_f OSD_KEY_F
+#define XK_g OSD_KEY_G
+#define XK_h OSD_KEY_H
+#define XK_i OSD_KEY_I
+#define XK_j OSD_KEY_J
+#define XK_k OSD_KEY_K
+#define XK_l OSD_KEY_L
+#define XK_m OSD_KEY_M
+#define XK_n OSD_KEY_N
+#define XK_o OSD_KEY_O
+#define XK_p OSD_KEY_P
+#define XK_q OSD_KEY_Q
+#define XK_r OSD_KEY_R
+#define XK_s OSD_KEY_S
+#define XK_t OSD_KEY_T
+#define XK_u OSD_KEY_U
+#define XK_v OSD_KEY_V
+#define XK_w OSD_KEY_W
+#define XK_x OSD_KEY_X
+#define XK_y OSD_KEY_Y
+#define XK_z OSD_KEY_Z
+#define XK_Return OSD_KEY_ENTER
+#define XK_Escape OSD_KEY_ESC
+#define XK_Shift_L OSD_KEY_LSHIFT
+#define XK_Shift_R OSD_KEY_RSHIFT
+#define XK_Left OSD_KEY_LEFT
+#define XK_Up OSD_KEY_UP
+#define XK_Right OSD_KEY_RIGHT
+#define XK_Down OSD_KEY_DOWN
+#define XK_BackSpace OSD_KEY_BACKSPACE
+#define XK_Delete OSD_KEY_DEL
+#define XK_Space OSD_KEY_SPACE
+#define XK_F12 OSD_KEY_F12
+#define XK_F11 OSD_KEY_F11
+#define XK_F10 OSD_KEY_F10
+
+
+/*!!!*/
+#define XK_KP_Add OSD_KEY_PLUS_PAD
+#define XK_KP_Subtract OSD_KEY_MINUS_PAD
+#define XK_KP_Multiply OSD_KEY_ASTER_PAD
+#define XK_KP_Divide OSD_KEY_SLASH_PAD
+#define XK_KP_Separator OSD_KEY_STOP_PAD
+#define XK_Control_L OSD_KEY_LCONTROL
+#define XK_Control_R OSD_KEY_RCONTROL
+#define XK_Meta_L OSD_KEY_ALT
+#define XK_Meta_R OSD_KEY_ALTGR
+#define XK_Alt_L OSD_KEY_ALT
+#define XK_Alt_R OSD_KEY_ALTGR
+#define XK_Mode_switch 0 /* unknown in allegro */
+#define XK_Multi_key 0 /* unknown in allegro */
+#define XK_Insert OSD_KEY_INSERT
+#define XK_Tab OSD_KEY_TAB
+#define XK_Home OSD_KEY_HOME
+#define XK_End OSD_KEY_END
+#define XK_Page_Up OSD_KEY_PGUP
+#define XK_Page_Down OSD_KEY_PGDN
+#define XK_space OSD_KEY_SPACE
+#define XK_adiaeresis 0 /* unknown in allegro */
+#define XK_odiaeresis 0 /* unknown in allegro */
+#define XK_udiaeresis 0 /* unknown in allegro */
+#define XK_apostrophe 0 /* unknown in allegro */
+#define XK_plus 0 /* unknown in allegro */
+#define XK_minus OSD_KEY_MINUS
+#define XK_comma OSD_KEY_COMMA
+#define XK_period OSD_KEY_STOP
+#define XK_numbersign 0 /* unknown in allegro */
+#define XK_less 0 /* unknown in allegro */
+#define XK_greater 0 /* unknown in allegro */
+#define XK_asciicircum 0 /* unknown in allegro */
+#define XK_ssharp 0 /* unknown in allegro */
+#define XK_F1 0 /* unknown in allegro */
+#define XK_F24 0 /* unknown in allegro */
+#define XK_VoidSymbol 0 /* unknown in allegro */
+/*!!!*/
+
+
+#define MOUSE_GIF_FILENAME "graphics\\mouse.gif"
+#define MOUSE_PCX_FILENAME "graphics\\mouse.gif"
+#define JOYSTICK_FILENAME "joystick.cnf"
+#define screen myscreen
+
+#define XFlush(a)
+#define XGetImage(a,b,c,d,e,f,g,h) ((XImage *) NULL)
+#define XAutoRepeatOn(a)
+#define XAutoRepeatOff(a)
+#define XDisplayName(a) ((char *) NULL)
+#define XFreeColors(a,b,c,d,e)
+#define XpmFreeAttributes(a)
+#define XSelectInput(a,b,c)
+#define XDefaultDepth(a,b) (8)
+#define XSetWMProperties(a,b,c,d,e,f,g,h,i)
+
+#define MAX_EVENT_BUFFER 256
+
+#define True 1
+#define False 0
+#define None 0L
+
+#define DUMMY_FILE ((void *) -1)
+#define DUMMY_MASK (-1)
+
+#define KeyPressMask (1L << 0)
+#define KeyReleaseMask (1L << 1)
+#define ButtonPressMask (1L << 2)
+#define ButtonReleaseMask (1L << 3)
+#define ButtonMotionMask (1L << 13)
+#define ExposureMask (1L << 15)
+#define StructureNotifyMask (1L << 17)
+#define FocusChangeMask (1L << 21)
+
+#define KeyPress 2
+#define KeyRelease 3
+#define ButtonPress 4
+#define ButtonRelease 5
+#define MotionNotify 6
+#define FocusIn 9
+#define FocusOut 10
+#define Expose 12
+#define UnmapNotify 18
+#define MapNotify 19
+#define ClientMessage 33
+
+#define GCForeground (1L << 2)
+#define GCBackground (1L << 3)
+#define GCGraphicsExposures (1L << 16)
+#define GCClipMask (1L << 19)
+
+#define NormalState 1 /* most applications want to start this way */
+#define InputHint (1L << 0)
+#define StateHint (1L << 1)
+#define IconPixmapHint (1L << 2)
+#define IconMaskHint (1L << 5)
+#define PSize (1L << 3) /* program specified size */
+#define PMinSize (1L << 4) /* program specified minimum size */
+#define PMaxSize (1L << 5) /* program specified maximum size */
+
+#define XpmSuccess 0
+#define XpmOpenFailed -1
+#define XpmFileInvalid -2
+#define XpmNoMemory -3
+#define XpmColorFailed -4
+
+#define XpmCloseness (1L << 12)
+
+#define PCX_Success 0
+#define PCX_OpenFailed -1
+#define PCX_ReadFailed -2
+#define PCX_FileInvalid -3
+#define PCX_NoMemory -4
+#define PCX_ColorFailed -5
+
+#define BitmapSuccess 0
+#define BitmapOpenFailed 1
+#define BitmapFileInvalid 2
+#define BitmapNoMemory 3
+
+#define ZPixmap 2 /* depth == drawable depth */
+
+#define DefaultScreen(dpy) (((_XPrivDisplay)dpy)->default_screen)
+#define DefaultColormap(dpy, scr) (ScreenOfDisplay(dpy,scr)->cmap)
+#define ScreenOfDisplay(dpy, scr) (&((_XPrivDisplay)dpy)->screens[scr])
+#define BlackPixel(dpy, scr) (ScreenOfDisplay(dpy,scr)->black_pixel)
+#define WhitePixel(dpy, scr) (ScreenOfDisplay(dpy,scr)->white_pixel)
+#define RootWindow(dpy, scr) (ScreenOfDisplay(dpy,scr)->root)
+#define AllPlanes ((unsigned long)~0L)
+
+#define DefaultVisual(dpy, scr) (NULL)
+#define DefaultDepth(dpy, scr) (NULL)
+#define XDisplayWidth(dpy, scr) (XRES)
+#define XDisplayHeight(dpy, scr) (YRES)
+
+#define XGetPixel(ximage, x, y) \
+ ((*((ximage)->f.get_pixel))((ximage), (x), (y)))
+
+typedef unsigned long Pixel; /* Index into colormap */
+typedef unsigned long XID;
+typedef XID Window;
+typedef XID Drawable;
+typedef XID Pixmap;
+typedef XID Colormap;
+typedef XID KeySym;
+typedef XID GContext;
+typedef struct _XDisplay Display;
+typedef long Visual;
+typedef long XVisualInfo;
+typedef long Atom;
+typedef int Status;
+typedef int Bool;
+
+typedef struct _XGC
+{
+ GContext gid; /* protocol ID for graphics context */
+} *GC;
+
+typedef struct
+{
+ Colormap cmap; /* default color map */
+ Window root; /* root window id */
+ unsigned long white_pixel; /* white pixel value */
+ unsigned long black_pixel; /* black pixel value */
+ int x;
+ int y;
+ unsigned int width;
+ unsigned int height;
+ BITMAP *video_bitmap;
+} Screen;
+
+typedef struct _XDisplay
+{
+ int default_screen; /* default screen for operations */
+ Screen *screens; /* pointer to list of screens */
+ BITMAP *mouse_ptr;
+} *_XPrivDisplay;
+
+typedef struct _XImage
+{
+ struct funcs
+ {
+ unsigned long (*get_pixel) (struct _XImage *, int, int);
+ } f;
+} XImage;
+
+typedef struct
+{
+ long flags; /* marks which fields in this structure are defined */
+ int width, height; /* should set so old wm's don't mess up */
+ int min_width, min_height;
+ int max_width, max_height;
+} XSizeHints;
+
+typedef struct
+{
+ long flags; /* marks which fields in this structure are defined */
+ Bool input; /* does this application rely on the window manager to
+ get keyboard input? */
+ int initial_state; /* see below */
+ Pixmap icon_pixmap; /* pixmap to be used as icon */
+ Pixmap icon_mask; /* icon mask bitmap */
+} XWMHints;
+
+typedef struct
+{
+ char *res_name;
+ char *res_class;
+} XClassHint;
+
+typedef struct
+{
+ unsigned char *value; /* same as Property routines */
+} XTextProperty;
+
+typedef struct
+{
+ unsigned long foreground; /* foreground pixel */
+ unsigned long background; /* background pixel */
+ Bool graphics_exposures; /* boolean, should exposures be generated */
+ Pixmap clip_mask; /* bitmap clipping; other calls for rects */
+ int clip_x_origin; /* x origin for clipping */
+ int clip_y_origin; /* y origin for clipping */
+ unsigned long value_mask;
+} XGCValues;
+
+typedef struct
+{
+ unsigned long valuemask; /* specifies which attributes are */
+ unsigned int closeness; /* allowable RGB deviation */
+ Pixel *pixels; /* list of used color pixels */
+ unsigned int npixels; /* number of used pixels */
+} XpmAttributes;
+
+typedef struct
+{
+ int type;
+ int x, y;
+ int width, height;
+} XExposeEvent;
+
+typedef struct
+{
+ int type; /* of event */
+ int x, y; /* pointer x, y coordinates in event window */
+ unsigned int button; /* detail */
+} XButtonEvent;
+
+typedef struct
+{
+ int type;
+ int x, y; /* pointer x, y coordinates in event window */
+} XMotionEvent;
+
+typedef struct
+{
+ int type; /* of event */
+ unsigned int state; /* key or button mask */
+} XKeyEvent;
+
+typedef struct
+{
+ int type; /* FocusIn or FocusOut */
+} XFocusChangeEvent;
+
+typedef struct
+{
+ int type; /* ClientMessage */
+} XClientMessageEvent;
+
+typedef union _XEvent
+{
+ int type; /* must not be changed; first element */
+ XExposeEvent xexpose;
+ XButtonEvent xbutton;
+ XMotionEvent xmotion;
+ XKeyEvent xkey;
+} XEvent;
+
+unsigned char get_ascii(KeySym);
+void XMapWindow(Display *, Window);
+Display *XOpenDisplay(char *);
+Window XCreateSimpleWindow(Display *, Window, int, int,
+ unsigned int, unsigned int, unsigned int,
+ unsigned long, unsigned long);
+Status XStringListToTextProperty(char **, int, XTextProperty *);
+void XFree(void *);
+GC XCreateGC(Display *, Drawable, unsigned long, XGCValues *);
+void XSetClipMask(Display *, GC, Pixmap);
+void XSetClipOrigin(Display *, GC, int, int);
+void XFillRectangle(Display *, Drawable, GC, int, int,
+ unsigned int, unsigned int);
+Pixmap XCreatePixmap(Display *, Drawable, unsigned int, unsigned int,
+ unsigned int);
+void XSync(Display *, Bool);
+inline void XCopyArea(Display *, Drawable, Drawable, GC, int, int,
+ unsigned int, unsigned int, int, int);
+int Read_PCX_to_Pixmap(Display *, Window, GC, char *, Pixmap *, Pixmap *);
+int XpmReadFileToPixmap(Display *, Drawable, char *, Pixmap *, Pixmap *,
+ XpmAttributes *);
+int XReadBitmapFile(Display *, Drawable, char *,
+ unsigned int *, unsigned int *, Pixmap *, int *, int *);
+void XFreePixmap(Display *, Pixmap);
+void XFreeGC(Display *, GC);
+void XCloseDisplay(Display *);
+void XNextEvent(Display *, XEvent *);
+int XPending(Display *);
+KeySym XLookupKeysym(XKeyEvent *, int);
+void NetworkServer(int, int);