rnd-19981130-1
[rocksndiamonds.git] / src / msdos.h
diff --git a/src/msdos.h b/src/msdos.h
new file mode 100644 (file)
index 0000000..4db6cf8
--- /dev/null
@@ -0,0 +1,541 @@
+/***********************************************************
+*  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);