rnd-20001203-3-src
[rocksndiamonds.git] / src / libgame / system.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 *  system.h                                                *
13 ***********************************************************/
14
15 #ifndef SYSTEM_H
16 #define SYSTEM_H
17
18 /*
19 #include "libgame.h"
20 */
21
22 #if defined(PLATFORM_MSDOS)
23 #include "msdos.h"
24 #endif
25
26 #if defined(TARGET_SDL)
27 #include "sdl.h"
28 #elif defined(TARGET_X11)
29 #include "x11.h"
30 #endif
31
32
33 /* contant definitions */
34
35 #define DEFAULT_DEPTH                   0
36
37 #define FULLSCREEN_NOT_AVAILABLE        FALSE
38 #define FULLSCREEN_AVAILABLE            TRUE
39
40 /* values for button_status */
41 #define MB_NOT_PRESSED          FALSE
42 #define MB_RELEASED             FALSE
43 #define MB_PRESSED              TRUE
44 #define MB_MENU_CHOICE          FALSE
45 #define MB_MENU_MARK            TRUE
46 #define MB_MENU_INITIALIZE      (-1)
47 #define MB_LEFTBUTTON           1
48 #define MB_MIDDLEBUTTON         2
49 #define MB_RIGHTBUTTON          3
50
51 /* values for redraw_mask */
52 #define REDRAW_NONE             (0)
53 #define REDRAW_ALL              (1 << 0)
54 #define REDRAW_FIELD            (1 << 1)
55 #define REDRAW_TILES            (1 << 2)
56 #define REDRAW_DOOR_1           (1 << 3)
57 #define REDRAW_VIDEO_1          (1 << 4)
58 #define REDRAW_VIDEO_2          (1 << 5)
59 #define REDRAW_VIDEO_3          (1 << 6)
60 #define REDRAW_MICROLEVEL       (1 << 7)
61 #define REDRAW_FROM_BACKBUFFER  (1 << 8)
62 #define REDRAW_DOOR_2           (REDRAW_VIDEO_1 | \
63                                  REDRAW_VIDEO_2 | \
64                                  REDRAW_VIDEO_3)
65 #define REDRAW_DOOR_3           (1 << 9)
66 #define REDRAW_DOORS            (REDRAW_DOOR_1 | \
67                                  REDRAW_DOOR_2 | \
68                                  REDRAW_DOOR_3)
69 #define REDRAW_MAIN             (REDRAW_FIELD | \
70                                  REDRAW_TILES | \
71                                  REDRAW_MICROLEVEL)
72 #define REDRAW_FPS              (1 << 10)
73 #define REDRAWTILES_THRESHOLD   (SCR_FIELDX * SCR_FIELDY / 2)
74
75
76 /* type definitions */
77
78 typedef int (*EventFilter)(const Event *);
79
80
81 /* structure definitions */
82
83 struct ProgramInfo
84 {
85   char *command_name;
86   char *program_title;
87   char *window_title;
88   char *icon_title;
89   char *x11_icon_filename;
90   char *x11_iconmask_filename;
91   char *msdos_pointer_filename;
92 };
93
94 struct OptionInfo
95 {
96   char *display_name;
97   char *server_host;
98   int server_port;
99   char *ro_base_directory;
100   char *rw_base_directory;
101   char *level_directory;
102   boolean serveronly;
103   boolean network;
104   boolean verbose;
105   boolean debug;
106 };
107
108 struct VideoSystemInfo
109 {
110   int default_depth;
111   int width, height, depth;
112   boolean fullscreen_available;
113   boolean fullscreen_enabled;
114 };
115
116 struct AudioSystemInfo
117 {
118   boolean sound_available;
119   boolean loops_available;
120   int soundserver_pipe[2];
121   int soundserver_pid;
122   char *device_name;
123   int device_fd;
124 };
125
126 struct GfxInfo
127 {
128   int sx, sy;
129   int sxsize, sysize;
130   int real_sx, real_sy;
131   int full_sxsize, full_sysize;
132   int scrollbuffer_width, scrollbuffer_height;
133
134   int dx, dy;
135   int dxsize, dysize;
136
137   int vx, vy;
138   int vxsize, vysize;
139 };
140
141
142 /* ========================================================================= */
143 /* exported variables                                                        */
144 /* ========================================================================= */
145
146 extern struct ProgramInfo       program;
147 extern struct OptionInfo        options;
148 extern struct VideoSystemInfo   video;
149 extern struct AudioSystemInfo   audio;
150 extern struct GfxInfo           gfx;
151
152 extern Display         *display;
153 extern Visual          *visual;
154 extern int              screen;
155 extern Colormap         cmap;
156
157 extern DrawWindow       window;
158 extern DrawBuffer       backbuffer;
159 extern DrawBuffer       drawto;
160
161 extern int              button_status;
162 extern boolean          motion_status;
163
164 extern int              redraw_mask;
165 extern int              redraw_tiles;
166
167 extern int              FrameCounter;
168
169
170 /* function definitions */
171
172 inline void InitProgramInfo(char *, char *, char *, char *, char *, char *,
173                             char *);
174
175 inline void InitGfxFieldInfo(int, int, int, int, int, int, int, int);
176 inline void InitGfxDoor1Info(int, int, int, int);
177 inline void InitGfxDoor2Info(int, int, int, int);
178 inline void InitGfxScrollbufferInfo(int, int);
179
180 inline void InitVideoDisplay(void);
181 inline void InitVideoBuffer(DrawBuffer *,DrawWindow *, int, int, int, boolean);
182 inline Bitmap CreateBitmapStruct(void);
183 inline Bitmap CreateBitmap(int, int, int);
184 inline void FreeBitmap(Bitmap);
185 inline void BlitBitmap(Bitmap, Bitmap, int, int, int, int, int, int);
186 inline void ClearRectangle(Bitmap, int, int, int, int);
187 inline void SetClipMask(Bitmap, GC, Pixmap);
188 inline void SetClipOrigin(Bitmap, GC, int, int);
189 inline void BlitBitmapMasked(Bitmap, Bitmap, int, int, int, int, int, int);
190 inline void DrawSimpleWhiteLine(Bitmap, int, int, int, int);
191 inline void FlushDisplay(void);
192 inline void SyncDisplay(void);
193 inline void KeyboardAutoRepeatOn(void);
194 inline void KeyboardAutoRepeatOff(void);
195 inline boolean PointerInWindow(DrawWindow);
196 inline boolean SetVideoMode(boolean);
197 inline boolean ChangeVideoModeIfNeeded(boolean);
198
199 inline boolean OpenAudio(struct AudioSystemInfo *);
200 inline void CloseAudio(struct AudioSystemInfo *);
201
202 inline void InitEventFilter(EventFilter);
203 inline boolean PendingEvent(void);
204 inline void NextEvent(Event *event);
205 inline Key GetEventKey(KeyEvent *, boolean);
206 inline boolean CheckCloseWindowEvent(ClientMessageEvent *);
207
208 #endif /* SYSTEM_H */