rnd-20001203-1-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
41 /* values for redraw_mask */
42 #define REDRAW_ALL              (1 << 0)
43 #define REDRAW_FIELD            (1 << 1)
44 #define REDRAW_TILES            (1 << 2)
45 #define REDRAW_DOOR_1           (1 << 3)
46 #define REDRAW_VIDEO_1          (1 << 4)
47 #define REDRAW_VIDEO_2          (1 << 5)
48 #define REDRAW_VIDEO_3          (1 << 6)
49 #define REDRAW_MICROLEVEL       (1 << 7)
50 #define REDRAW_FROM_BACKBUFFER  (1 << 8)
51 #define REDRAW_DOOR_2           (REDRAW_VIDEO_1 | \
52                                  REDRAW_VIDEO_2 | \
53                                  REDRAW_VIDEO_3)
54 #define REDRAW_DOOR_3           (1 << 9)
55 #define REDRAW_DOORS            (REDRAW_DOOR_1 | \
56                                  REDRAW_DOOR_2 | \
57                                  REDRAW_DOOR_3)
58 #define REDRAW_MAIN             (REDRAW_FIELD | \
59                                  REDRAW_TILES | \
60                                  REDRAW_MICROLEVEL)
61 #define REDRAW_FPS              (1 << 10)
62 #define REDRAWTILES_THRESHOLD   (SCR_FIELDX * SCR_FIELDY / 2)
63
64
65 /* type definitions */
66
67 typedef int (*EventFilter)(const Event *);
68
69
70 /* structure definitions */
71
72 struct ProgramInfo
73 {
74   char *command_name;
75   char *program_title;
76   char *window_title;
77   char *icon_title;
78   char *x11_icon_filename;
79   char *x11_iconmask_filename;
80   char *msdos_pointer_filename;
81 };
82
83 struct OptionInfo
84 {
85   char *display_name;
86   char *server_host;
87   int server_port;
88   char *ro_base_directory;
89   char *rw_base_directory;
90   char *level_directory;
91   boolean serveronly;
92   boolean network;
93   boolean verbose;
94   boolean debug;
95 };
96
97 struct VideoSystemInfo
98 {
99   int default_depth;
100   int width, height, depth;
101   boolean fullscreen_available;
102   boolean fullscreen_enabled;
103 };
104
105 struct AudioSystemInfo
106 {
107   boolean sound_available;
108   boolean loops_available;
109   int soundserver_pipe[2];
110   int soundserver_pid;
111   char *device_name;
112   int device_fd;
113 };
114
115 struct PlayfieldInfo
116 {
117   int sx, sy;
118   int sxsize, sysize;
119   int real_sx, real_sy;
120   int full_sxsize, full_sysize;
121   int scrollbuffer_width, scrollbuffer_height;
122
123   int dx, dy;
124   int dxsize, dysize;
125
126   int vx, vy;
127   int vxsize, vysize;
128 };
129
130
131 /* ========================================================================= */
132 /* exported variables                                                        */
133 /* ========================================================================= */
134
135 extern struct ProgramInfo       program;
136 extern struct OptionInfo        options;
137 extern struct VideoSystemInfo   video;
138 extern struct AudioSystemInfo   audio;
139 extern struct PlayfieldInfo     playfield;
140
141 extern Display         *display;
142 extern Visual          *visual;
143 extern int              screen;
144 extern Colormap         cmap;
145
146 extern DrawWindow       window;
147 extern DrawBuffer       backbuffer;
148 extern DrawBuffer       drawto;
149
150 extern int              redraw_mask;
151 extern int              redraw_tiles;
152
153 extern int              FrameCounter;
154
155
156 /* function definitions */
157
158 inline void InitProgramInfo(char *, char *, char *, char *, char *, char *,
159                             char *);
160
161 inline void InitPlayfieldInfo(int, int, int, int, int, int, int, int);
162 inline void InitDoor1Info(int, int, int, int);
163 inline void InitDoor2Info(int, int, int, int);
164 inline void InitScrollbufferInfo(int, int);
165
166 inline void InitVideoDisplay(void);
167 inline void InitVideoBuffer(DrawBuffer *,DrawWindow *, int, int, int, boolean);
168 inline Bitmap CreateBitmapStruct(void);
169 inline Bitmap CreateBitmap(int, int, int);
170 inline void FreeBitmap(Bitmap);
171 inline void BlitBitmap(Bitmap, Bitmap, int, int, int, int, int, int);
172 inline void ClearRectangle(Bitmap, int, int, int, int);
173 inline void SetClipMask(Bitmap, GC, Pixmap);
174 inline void SetClipOrigin(Bitmap, GC, int, int);
175 inline void BlitBitmapMasked(Bitmap, Bitmap, int, int, int, int, int, int);
176 inline void DrawSimpleWhiteLine(Bitmap, int, int, int, int);
177 inline void FlushDisplay(void);
178 inline void SyncDisplay(void);
179 inline void KeyboardAutoRepeatOn(void);
180 inline void KeyboardAutoRepeatOff(void);
181 inline boolean PointerInWindow(DrawWindow);
182 inline boolean SetVideoMode(boolean);
183 inline boolean ChangeVideoModeIfNeeded(boolean);
184
185 inline boolean OpenAudio(struct AudioSystemInfo *);
186 inline void CloseAudio(struct AudioSystemInfo *);
187
188 inline void InitEventFilter(EventFilter);
189 inline boolean PendingEvent(void);
190 inline void NextEvent(Event *event);
191 inline Key GetEventKey(KeyEvent *, boolean);
192 inline boolean CheckCloseWindowEvent(ClientMessageEvent *);
193
194 #endif /* SYSTEM_H */