fixed code to compile with current gcc and 64-bit systems
[rocksndiamonds.git] / src / main.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 *  main.h                                                  *
13 *                                                          *
14 *  Letzte Aenderung: 15.06.1995                            *
15 ***********************************************************/
16
17 #ifndef MAIN_H
18 #define MAIN_H
19
20 #define XK_MISCELLANY
21 #define XK_LATIN1
22
23 #include <X11/Xlib.h>
24 #include <X11/Xutil.h>
25 #include <X11/Xos.h>
26 #include <X11/Intrinsic.h>
27 #include <X11/keysymdef.h>
28
29 #include XPM_INCLUDE_FILE
30
31 #include <sys/types.h>
32 #include <sys/stat.h>
33 #include <stdio.h>
34 #include <stdlib.h>
35 #include <string.h>
36 #include <errno.h>
37
38 typedef int BOOL;
39
40 #define TRUE            1
41 #define FALSE           0
42
43 #define WIN_XPOS        0
44 #define WIN_YPOS        0
45 #define WIN_XSIZE       672
46 #define WIN_YSIZE       560
47 #define SCR_FIELDX      17
48 #define SCR_FIELDY      17
49
50 /*
51
52 #define LEV_FIELDX      64
53 #define LEV_FIELDY      32
54
55 */
56
57 #define MIN_LEV_FIELDX  (SCR_FIELDX-2)
58 #define MIN_LEV_FIELDY  (SCR_FIELDY-2)
59 #define STD_LEV_FIELDX  64
60 #define STD_LEV_FIELDY  32
61 #define MAX_LEV_FIELDX  128
62 #define MAX_LEV_FIELDY  128
63
64 #define MIN(a,b)        ((a)<(b) ? (a) : (b))
65 #define MAX(a,b)        ((a)>(b) ? (a) : (b))
66 #define ABS(a)          ((a)<0 ? -(a) : (a))
67 #define SIGN(a)         ((a)<0 ? -1 : ((a)>0 ? 1 : 0))
68 #define SCROLLX(a)      ((a)-scroll_x)
69 #define SCROLLY(a)      ((a)-scroll_y)
70 #define UNSCROLLX(a)    ((a)+scroll_x)
71 #define UNSCROLLY(a)    ((a)+scroll_y)
72 #define IN_SCR_FIELD(x,y) ((x)>=0 && (x)<SCR_FIELDX && (y)>=0 &&(y)<SCR_FIELDY)
73 #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
74 #define PLAYER(x,y)     (JX==(x) && JY==(y))
75 #define IS_FREE(x,y)    (Feld[x][y]==EL_LEERRAUM && !PLAYER(x,y))
76 #define IS_MOVING(x,y)  (MovPos[x][y]!=0)
77 #define IS_BLOCKED(x,y) (Feld[x][y]==EL_BLOCKED)
78 #define IS_AMOEBOID(e)  ((e)==EL_AMOEBE1 || (e)==EL_AMOEBE2 || (e)==EL_AMOEBE3)
79 #define IS_BADEWANNOID(e) ((e)>=EL_BADEWANNE1 && (e)<=EL_BADEWANNE5)
80 #define IS_SCHLUESSEL(e) ((e)>=EL_SCHLUESSEL1 && (e)<=EL_SCHLUESSEL4)
81 #define IS_PFORTE(e)    ((e)>=EL_PFORTE1 && (e)<=EL_PFORTE4X)
82 #define IS_CHAR(e)      ((e)>=EL_CHAR_START && (e)<=EL_CHAR_END)
83
84 #define IS_SOLID(e)     ((e)==EL_BETON || (e)==EL_MAUERWERK || (e)==EL_FELSBODEN || (e)==EL_AUSGANG_ZU || (e)==EL_AUSGANG_ACT || (e)==EL_AUSGANG_AUF || IS_AMOEBOID(e) || (e)==EL_MORAST_VOLL || (e)==EL_MORAST_LEER || (e)==EL_SIEB_VOLL || (e)==EL_SIEB_LEER || (e)==EL_LIFE || (e)==EL_LIFE_ASYNC || IS_BADEWANNOID(e))
85
86 #define IS_MASSIV(e)    ((e)==EL_BETON || (e)==EL_SALZSAEURE || IS_BADEWANNOID(e) || IS_PFORTE(e))
87
88 #define CAN_FALL(e)     ((e)==EL_FELSBROCKEN || (e)==EL_EDELSTEIN || (e)==EL_DIAMANT || (e)==EL_BOMBE || (e)==EL_KOKOSNUSS || (e)==EL_TROPFEN || (e)==EL_MORAST_VOLL || (e)==EL_SIEB_VOLL)
89
90 #define CAN_SMASH(e)    ((e)==EL_FELSBROCKEN || (e)==EL_EDELSTEIN || (e)==EL_DIAMANT || IS_SCHLUESSEL(e) || (e)==EL_BOMBE || (e)==EL_KOKOSNUSS || (e)==EL_TROPFEN)
91
92 #define CAN_CHANGE(e)   ((e)==EL_FELSBROCKEN || (e)==EL_EDELSTEIN || (e)==EL_DIAMANT)
93
94 #define CAN_MOVE(e)     ((e)==EL_KAEFER || (e)==EL_FLIEGER || (e)==EL_MAMPFER || (e)==EL_ZOMBIE || (e)==EL_PACMAN)
95
96 #define COULD_MOVE(e)   (((e)>=EL_KAEFER_R && (e)<=EL_KAEFER_U) || ((e)>=EL_FLIEGER_R && (e)<=EL_FLIEGER_U) || ((e)>=EL_PACMAN && (e)==EL_PACMAN_U))
97
98 /*
99 #define CAN_KILL(e)     ((e)==EL_KAEFER || (e)==EL_FLIEGER || (e)==EL_MAMPFER || (e)==EL_ZOMBIE || (e)==EL_PACMAN || (e)==EL_TROPFEN)
100 */
101
102 #define IS_ENEMY(e)     ((e)==EL_KAEFER || (e)==EL_FLIEGER || (e)==EL_MAMPFER || (e)==EL_ZOMBIE || (e)==EL_PACMAN)
103 #define DONT_TOUCH(e)   ((e)==EL_KAEFER || (e)==EL_FLIEGER)
104 #define DONT_GO_TO(e)   (IS_ENEMY(e) || (e)==EL_TROPFEN || (e)==EL_SALZSAEURE)
105
106 #define SLIPPERY(e)     ((e)==EL_FELSBODEN || (e)==EL_FELSBROCKEN || (e)==EL_EDELSTEIN || (e)==EL_DIAMANT || (e)==EL_BOMBE || (e)==EL_KOKOSNUSS || (e)==EL_ABLENK_EIN || (e)==EL_ABLENK_AUS || (e)==EL_BADEWANNE1 || (e)==EL_BADEWANNE2)
107
108 #define EL_CHANGED(e)   ((e)==EL_FELSBROCKEN ? EL_EDELSTEIN : (e)==EL_EDELSTEIN ? EL_DIAMANT : EL_FELSBROCKEN)
109 #define IS_DRAWABLE(e)          ((e)<EL_BLOCKED)
110 #define IS_NOT_DRAWABLE(e)      ((e)>=EL_BLOCKED)
111 #define TIMESIZE        (TimeLeft*100/level.time)
112
113 #define LEVELDIR_SIZE(x)        ((x).num_ready + (x).num_free)
114 #define TAPE_IS_EMPTY(x)        ((x).length == 0)
115
116 /* Pixmaps with Xpm or X11 Bitmap files */
117 #define PIX_BACK                0
118 #define PIX_DOOR                1
119 #define PIX_TOONS               2
120 #define PIX_BIGFONT             3
121 #define PIX_SMALLFONT           4
122 /* Pixmaps without them */
123 #define PIX_DB_BACK             5
124 #define PIX_DB_DOOR             6
125 #define PIX_FADEMASK            7
126
127 #define NUM_PICTURES            5
128 #define NUM_PIXMAPS             8
129
130 #define MAX_NAMELEN             (10+1)
131
132 #define MAX_LEVNAMLEN           32
133 #define MAX_SC_ENTRIES          16
134 #define MAX_TAPELEN             10000
135
136 #define MAX_LEVDIR_FILENAME     (64+1)
137 #define MAX_LEVDIR_NAME         (16+1)
138 #define MAX_LEVDIR_ENTRIES      15
139 #define MAX_SCORE_ENTRIES       15
140
141 #define MAX_FILENAME            256
142
143 struct PictureFile
144 {
145   char *picture_filename;
146   char *picturemask_filename;
147 };
148
149 struct HiScore
150 {
151   char Name[MAX_NAMELEN];
152   int Score;
153 };
154
155 struct PlayerInfo
156 {
157   char login_name[MAX_NAMELEN];
158   char alias_name[MAX_NAMELEN];
159   int handicap;
160   unsigned int setup;
161   int leveldir_nr;
162 };
163
164 struct LevelInfo
165 {
166   int fieldx;
167   int fieldy;
168   int time;
169   int edelsteine;
170   char name[MAX_LEVNAMLEN];
171   int score[MAX_SC_ENTRIES];
172   int mampfer_inhalt[4][3][3];
173   int tempo_amoebe;
174   int dauer_sieb;
175   int dauer_ablenk;
176 };
177
178 struct LevelDirInfo
179 {
180   char filename[MAX_LEVDIR_FILENAME];
181   char name[MAX_LEVDIR_NAME];
182   int num_ready;
183   int num_free;
184 };
185
186 struct RecordingInfo
187 {
188   int level_nr;
189   unsigned int random_seed;
190   unsigned int date;
191   unsigned int counter;
192   unsigned int length;
193   BOOL recording, playing, pausing;
194   struct
195   {
196     unsigned char joystickdata;
197     unsigned char delay;
198   } pos[MAX_TAPELEN];
199 };
200
201 struct JoystickInfo
202 {
203   int xleft, xright, xmiddle;
204   int yupper, ylower, ymiddle;
205 };
206
207 struct SoundHeader_SUN
208 {
209   unsigned int magic;
210   unsigned int hdr_size;
211   unsigned int data_size;
212   unsigned int encoding;
213   unsigned int sample_rate;
214   unsigned int channels;
215 };
216
217 struct SoundHeader_8SVX
218 {
219   char magic_FORM[4];
220   unsigned int chunk_size;
221   char magic_8SVX[4];
222 };
223
224 struct SoundInfo
225
226   char *name;
227   char *file_ptr, *data_ptr;
228   int file_len, data_len;
229 };
230
231 struct SoundControl
232 {
233   int nr;
234   int volume;
235   int stereo;
236   BOOL active;
237   BOOL loop;
238   BOOL fade_sound;
239   BOOL stop_sound;
240   BOOL stop_all_sounds;
241   int playingtime;
242   int playingpos;
243   int data_len;
244   char *data_ptr;
245 };
246
247 extern Display         *display;
248 extern int              screen;
249 extern Window           window;
250 extern GC               gc, plane_gc;
251 extern GC               clip_gc[];
252 extern XImage          *image[];
253 extern Pixmap           clipmask[];
254 extern Pixmap           pix[];
255 extern XpmAttributes    xpm_att[];
256 extern Drawable         drawto, drawto_field, backbuffer;
257 extern Colormap         cmap;
258
259 extern int              sound_pipe[2];
260 extern int              sound_device;
261 extern char            *sound_device_name;
262 extern int              joystick_device;
263 extern char            *joystick_device_name[2];
264 extern int              width, height;
265 extern unsigned int     pen_fg, pen_bg;
266
267 extern int              game_status;
268 extern int              button_status, motion_status;
269 extern int              key_status;
270 extern int              global_joystick_status, joystick_status;
271 extern int              sound_status, sound_on;
272 extern int              sound_loops_allowed, sound_loops_on;
273 extern int              sound_music_on;
274 extern int              toons_on;
275 extern int              direct_draw_on;
276 extern int              fading_on;
277 extern int              autorecord_on;
278 extern int              joystick_nr;
279
280 extern BOOL             redraw[SCR_FIELDX][SCR_FIELDY];
281 extern int              redraw_mask;
282 extern int              redraw_tiles;
283
284 extern int              Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
285 extern int              Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
286 extern int              MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
287 extern int              MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
288 extern int              MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
289 extern int              Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
290 extern int              Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
291 extern int              Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
292 extern int              Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
293 extern int              level_nr, leveldir_nr, num_leveldirs;
294 extern int              lev_fieldx,lev_fieldy, scroll_x,scroll_y;
295
296 extern int              LevelSolved,GameOver, JX,JY, ZX,ZY;
297 extern int              Gems,Dynamite,Key[4],TimeLeft,Score,MampferNr;
298 extern int              CheckMoving,CheckExploding, SiebAktiv;
299
300 extern struct LevelDirInfo      leveldir[];
301 extern struct LevelInfo         level;
302 extern struct PlayerInfo        player;
303 extern struct HiScore           highscore[];
304 extern struct RecordingInfo     tape, master_tape;
305
306 extern int              background_loop[];
307 extern int              num_bg_loops;
308
309 extern char            *progname;
310
311
312 /* often used screen positions */
313 #define SX              8
314 #define SY              8
315 #define REAL_SX         (SX-2)
316 #define REAL_SY         (SY-2)
317 #define DX              566
318 #define DY              60
319 #define VX              DX
320 #define VY              400
321 #define TILEX           32
322 #define TILEY           32
323 #define MINI_TILEX      (TILEX/2)
324 #define MINI_TILEY      (TILEY/2)
325 #define MICRO_TILEX     (TILEX/8)
326 #define MICRO_TILEY     (TILEY/8)
327 #define MIDPOSX         (SCR_FIELDX/2)
328 #define MIDPOSY         (SCR_FIELDY/2)
329 #define SXSIZE          (SCR_FIELDX*TILEX)
330 #define SYSIZE          (SCR_FIELDY*TILEY)
331 #define DXSIZE          100
332 #define DYSIZE          280
333 #define VXSIZE          DXSIZE
334 #define VYSIZE          100
335 #define FULL_SXSIZE     (2+SXSIZE+2)
336 #define FULL_SYSIZE     (2+SYSIZE+2)
337 #define MICROLEV_XPOS   (SX+4*32+16)
338 #define MICROLEV_YPOS   (SX+12*32)
339 #define MICROLEV_XSIZE  (STD_LEV_FIELDX*MICRO_TILEX)
340 #define MICROLEV_YSIZE  (STD_LEV_FIELDY*MICRO_TILEY)
341 #define MICROLABEL_YPOS (MICROLEV_YPOS+MICROLEV_YSIZE+12)
342 #define FONT1_XSIZE     32
343 #define FONT1_YSIZE     32
344 #define FONT2_XSIZE     14
345 #define FONT2_YSIZE     14
346 #define FONT3_XSIZE     11
347 #define FONT3_YSIZE     14
348 #define FONT4_XSIZE     16
349 #define FONT4_YSIZE     16
350
351 #define GFX_STARTX              SX
352 #define GFX_STARTY              SY
353 #define MINI_GFX_STARTX         SX
354 #define MINI_GFX_STARTY         432
355 #define MICRO_GFX_STARTX        SX
356 #define MICRO_GFX_STARTY        528
357 #define GFX_PER_LINE            16
358 #define MINI_GFX_PER_LINE       32
359 #define MICRO_GFX_PER_LINE      128
360 #define FONT_CHARS_PER_LINE     16
361 #define FONT_LINES_PER_FONT     4
362
363 /* game elements:
364 **      0 - 255: real elements, stored in level file
365 **      256 - ?: flag elements, only used at runtime
366 */
367 /* "real" level elements */
368 #define EL_LEERRAUM     0
369 #define EL_ERDREICH     1
370 #define EL_MAUERWERK    2
371 #define EL_FELSBODEN    3
372 #define EL_FELSBROCKEN  4
373 #define EL_SCHLUESSEL   5
374 #define EL_EDELSTEIN    6
375 #define EL_AUSGANG_ZU   7
376 #define EL_SPIELFIGUR   8
377 #define EL_KAEFER       9
378 #define EL_FLIEGER      10
379 #define EL_MAMPFER      11
380 #define EL_ZOMBIE       12
381 #define EL_BETON        13
382 #define EL_DIAMANT      14
383 #define EL_AMOEBE1      15
384 #define EL_MORAST_LEER  16
385 #define EL_MORAST_VOLL  17
386 #define EL_TROPFEN      18
387 #define EL_BOMBE        19
388 #define EL_SIEB_LEER    20
389 #define EL_SIEB_VOLL    21
390 #define EL_SALZSAEURE   22
391 #define EL_AMOEBE2      23
392 #define EL_AMOEBE3      24
393 #define EL_KOKOSNUSS    25
394 #define EL_LIFE         26
395 #define EL_LIFE_ASYNC   27
396 #define EL_DYNAMIT      28
397 #define EL_BADEWANNE    29
398 #define EL_ABLENK_AUS   30
399 #define EL_ABLENK_EIN   31
400 #define EL_SCHLUESSEL1  32
401 #define EL_SCHLUESSEL2  33
402 #define EL_SCHLUESSEL3  34
403 #define EL_SCHLUESSEL4  35
404 #define EL_PFORTE1      36
405 #define EL_PFORTE2      37
406 #define EL_PFORTE3      38
407 #define EL_PFORTE4      39
408 #define EL_PFORTE1X     40
409 #define EL_PFORTE2X     41
410 #define EL_PFORTE3X     42
411 #define EL_PFORTE4X     43
412 #define EL_DYNAMIT_AUS  44
413 #define EL_PACMAN       45
414 #define EL_UNSICHTBAR   46
415 #define EL_BIRNE_AUS    47
416 #define EL_BIRNE_EIN    48
417 #define EL_ERZ_1        49
418 #define EL_ERZ_2        50
419
420 #define EL_SPIELER1     80
421 #define EL_SPIELER2     81
422 #define EL_SPIELER3     82
423 #define EL_SPIELER4     83
424 #define EL_KAEFER_R     84
425 #define EL_KAEFER_O     85
426 #define EL_KAEFER_L     86
427 #define EL_KAEFER_U     87
428 #define EL_FLIEGER_R    88
429 #define EL_FLIEGER_O    89
430 #define EL_FLIEGER_L    90
431 #define EL_FLIEGER_U    91
432 #define EL_PACMAN_R     92
433 #define EL_PACMAN_O     93
434 #define EL_PACMAN_L     94
435 #define EL_PACMAN_U     95
436
437 #define EL_BADEWANNE1   100
438 #define EL_BADEWANNE2   101
439 #define EL_BADEWANNE3   102
440 #define EL_BADEWANNE4   103
441 #define EL_BADEWANNE5   104
442 #define EL_SIEB_TOT     105
443 #define EL_AUSGANG_ACT  106
444 #define EL_AUSGANG_AUF  107
445
446 #define EL_CHAR_START   120
447 #define EL_CHAR_ASCII0  (EL_CHAR_START-32)
448 #define EL_CHAR_AUSRUF  (EL_CHAR_ASCII0+33)
449 #define EL_CHAR_ZOLL    (EL_CHAR_ASCII0+34)
450 #define EL_CHAR_DOLLAR  (EL_CHAR_ASCII0+36)
451 #define EL_CHAR_PROZ    (EL_CHAR_ASCII0+37)
452 #define EL_CHAR_APOSTR  (EL_CHAR_ASCII0+39)
453 #define EL_CHAR_KLAMM1  (EL_CHAR_ASCII0+40)
454 #define EL_CHAR_KLAMM2  (EL_CHAR_ASCII0+41)
455 #define EL_CHAR_PLUS    (EL_CHAR_ASCII0+43)
456 #define EL_CHAR_KOMMA   (EL_CHAR_ASCII0+44)
457 #define EL_CHAR_MINUS   (EL_CHAR_ASCII0+45)
458 #define EL_CHAR_PUNKT   (EL_CHAR_ASCII0+46)
459 #define EL_CHAR_SLASH   (EL_CHAR_ASCII0+47)
460 #define EL_CHAR_0       (EL_CHAR_ASCII0+48)
461 #define EL_CHAR_9       (EL_CHAR_ASCII0+57)
462 #define EL_CHAR_DOPPEL  (EL_CHAR_ASCII0+58)
463 #define EL_CHAR_SEMIKL  (EL_CHAR_ASCII0+59)
464 #define EL_CHAR_LT      (EL_CHAR_ASCII0+60)
465 #define EL_CHAR_GLEICH  (EL_CHAR_ASCII0+61)
466 #define EL_CHAR_GT      (EL_CHAR_ASCII0+62)
467 #define EL_CHAR_FRAGE   (EL_CHAR_ASCII0+63)
468 #define EL_CHAR_AT      (EL_CHAR_ASCII0+64)
469 #define EL_CHAR_A       (EL_CHAR_ASCII0+65)
470 #define EL_CHAR_Z       (EL_CHAR_ASCII0+90)
471 #define EL_CHAR_AE      (EL_CHAR_ASCII0+91)
472 #define EL_CHAR_OE      (EL_CHAR_ASCII0+92)
473 #define EL_CHAR_UE      (EL_CHAR_ASCII0+93)
474 #define EL_CHAR_COPY    (EL_CHAR_ASCII0+94)
475 #define EL_CHAR_END     (EL_CHAR_START+79)
476
477 /* "unreal" runtime elements */
478 #define EL_BLOCKED      300
479 #define EL_EXPLODING    301
480 #define EL_CRACKINGNUT  302
481 #define EL_BLURB_LEFT   303
482 #define EL_BLURB_RIGHT  304
483 #define EL_AMOEBING2    305
484 #define EL_AMOEBING3    306
485
486 /* names for the graphic objects */
487 /* Zeile 0 (0) */
488 #define GFX_LEERRAUM    (-1)
489 #define GFX_ERDREICH    0
490 #define GFX_ERDENRAND   1
491 #define GFX_MORAST_LEER 2
492 #define GFX_MORAST_VOLL 3
493 #define GFX_BETON       4
494 #define GFX_MAUERWERK   5
495 #define GFX_FELSBODEN   6
496 #define GFX_BOMBE_MM    7
497 #define GFX_EDELSTEIN   8
498 #define GFX_DIAMANT     10
499 #define GFX_FELSBROCKEN 12
500 /* Zeile 1 (16) */
501 #define GFX_BADEWANNE1  16
502 #define GFX_SALZSAEURE  17
503 #define GFX_BADEWANNE2  18
504 #define GFX_UNSICHTBAR  19
505 #define GFX_SCHLUESSEL1 20
506 #define GFX_SCHLUESSEL2 21
507 #define GFX_SCHLUESSEL3 22
508 #define GFX_SCHLUESSEL4 23
509 #define GFX_LIFE        24
510 #define GFX_LIFE_ASYNC  25
511 #define GFX_BADEWANNE   26
512 #define GFX_BOMBE       27
513 #define GFX_KOKOSNUSS   28
514 #define GFX_CRACKINGNUT 29
515 /* Zeile 2 (32) */
516 #define GFX_BADEWANNE3  32
517 #define GFX_BADEWANNE4  33
518 #define GFX_BADEWANNE5  34
519 #define GFX_SPIELFIGUR  35
520 #define GFX_PFORTE1     36
521 #define GFX_PFORTE2     37
522 #define GFX_PFORTE3     38
523 #define GFX_PFORTE4     39
524 #define GFX_PFORTE1X    40
525 #define GFX_PFORTE2X    41
526 #define GFX_PFORTE3X    42
527 #define GFX_PFORTE4X    43
528 #define GFX_AUSGANG_ZU  44
529 #define GFX_AUSGANG_ACT 44
530 #define GFX_AUSGANG_AUF 47
531 /* Zeile 3 (48) */
532 #define GFX_DYNAMIT_AUS 48
533 #define GFX_DYNAMIT     49
534 #define GFX_FLIEGER     56
535 #define GFX_FLIEGER_R   56
536 #define GFX_FLIEGER_O   57
537 #define GFX_FLIEGER_L   58
538 #define GFX_FLIEGER_U   59
539 /* Zeile 4 (64) */
540 #define GFX_EXPLOSION   64
541 #define GFX_KAEFER      72
542 #define GFX_KAEFER_R    72
543 #define GFX_KAEFER_O    73
544 #define GFX_KAEFER_L    74
545 #define GFX_KAEFER_U    75
546 /* Zeile 5 (80) */
547 #define GFX_MAMPFER     80
548 #define GFX_ZOMBIE      84
549 #define GFX_PACMAN      88
550 #define GFX_PACMAN_R    88
551 #define GFX_PACMAN_O    89
552 #define GFX_PACMAN_L    90
553 #define GFX_PACMAN_U    91
554 /* Zeile 6 (96) */
555 #define GFX_ABLENK      96
556 #define GFX_ABLENK_EIN  GFX_ABLENK
557 #define GFX_ABLENK_AUS  GFX_ABLENK
558 #define GFX_AMOEBE2     100
559 #define GFX_TROPFEN     101
560 #define GFX_AMOEBING    GFX_TROPFEN
561 #define GFX_AMOEBE_LEBT 104
562 #define GFX_AMOEBE3     GFX_AMOEBE_LEBT
563 #define GFX_AMOEBE_TOT  108
564 #define GFX_AMOEBE1     GFX_AMOEBE_TOT
565 /* Zeile 7 (112) */
566 #define GFX_GEBLUBBER   124
567 /* Zeile 8 (128) */
568 #define GFX_SIEB_LEER   128
569 #define GFX_SIEB_VOLL   GFX_SIEB_LEER
570 #define GFX_SIEB_TOT    GFX_SIEB_LEER
571 #define GFX_ERZ_1       132
572 #define GFX_ERZ_2       133
573 #define GFX_BIRNE_AUS   134
574 #define GFX_BIRNE_EIN   135
575 #define GFX_KUGEL_ROT   140
576 #define GFX_KUGEL_BLAU  141
577 #define GFX_KUGEL_GELB  142
578 /* Zeile 9 (144) */
579 #define GFX_BLURB_LEFT  144
580 #define GFX_BLURB_RIGHT 148
581
582 #define GFX_SCHLUESSEL  GFX_SCHLUESSEL1
583
584 #define GFX_SPIELER1    116
585 #define GFX_SPIELER2    117
586 #define GFX_SPIELER3    118
587 #define GFX_SPIELER4    119
588
589 /* nicht in "RocksScreen" sondern woanders :) */
590 #define GFX_CHAR_START  256
591 #define GFX_CHAR_ASCII0 (GFX_CHAR_START-32)
592 #define GFX_CHAR_AUSRUF (GFX_CHAR_ASCII0+33)
593 #define GFX_CHAR_ZOLL   (GFX_CHAR_ASCII0+34)
594 #define GFX_CHAR_DOLLAR (GFX_CHAR_ASCII0+36)
595 #define GFX_CHAR_PROZ   (GFX_CHAR_ASCII0+37)
596 #define GFX_CHAR_APOSTR (GFX_CHAR_ASCII0+39)
597 #define GFX_CHAR_KLAMM1 (GFX_CHAR_ASCII0+40)
598 #define GFX_CHAR_KLAMM2 (GFX_CHAR_ASCII0+41)
599 #define GFX_CHAR_PLUS   (GFX_CHAR_ASCII0+43)
600 #define GFX_CHAR_KOMMA  (GFX_CHAR_ASCII0+44)
601 #define GFX_CHAR_MINUS  (GFX_CHAR_ASCII0+45)
602 #define GFX_CHAR_PUNKT  (GFX_CHAR_ASCII0+46)
603 #define GFX_CHAR_SLASH  (GFX_CHAR_ASCII0+47)
604 #define GFX_CHAR_0      (GFX_CHAR_ASCII0+48)
605 #define GFX_CHAR_9      (GFX_CHAR_ASCII0+57)
606 #define GFX_CHAR_DOPPEL (GFX_CHAR_ASCII0+58)
607 #define GFX_CHAR_SEMIKL (GFX_CHAR_ASCII0+59)
608 #define GFX_CHAR_LT     (GFX_CHAR_ASCII0+60)
609 #define GFX_CHAR_GLEICH (GFX_CHAR_ASCII0+61)
610 #define GFX_CHAR_GT     (GFX_CHAR_ASCII0+62)
611 #define GFX_CHAR_FRAGE  (GFX_CHAR_ASCII0+63)
612 #define GFX_CHAR_AT     (GFX_CHAR_ASCII0+64)
613 #define GFX_CHAR_A      (GFX_CHAR_ASCII0+65)
614 #define GFX_CHAR_Z      (GFX_CHAR_ASCII0+90)
615 #define GFX_CHAR_AE     (GFX_CHAR_ASCII0+91)
616 #define GFX_CHAR_OE     (GFX_CHAR_ASCII0+92)
617 #define GFX_CHAR_UE     (GFX_CHAR_ASCII0+93)
618 #define GFX_CHAR_COPY   (GFX_CHAR_ASCII0+94)
619 #define GFX_CHAR_END    (GFX_CHAR_START+79)
620
621 /* score for elements */
622 #define SC_EDELSTEIN    0
623 #define SC_DIAMANT      1
624 #define SC_KAEFER       2
625 #define SC_FLIEGER      3
626 #define SC_MAMPFER      4
627 #define SC_ZOMBIE       5
628 #define SC_PACMAN       6
629 #define SC_KOKOSNUSS    7
630 #define SC_DYNAMIT      8
631 #define SC_SCHLUESSEL   9
632 #define SC_ZEITBONUS    10
633
634 /* the names of the sounds */
635 #define SND_ALCHEMY     0
636 #define SND_AMOEBE      1
637 #define SND_ANTIGRAV    2
638 #define SND_AUTSCH      3
639 #define SND_BLURB       4
640 #define SND_BONG        5
641 #define SND_BUING       6
642 #define SND_CHASE       7
643 #define SND_CZARDASZ    8
644 #define SND_DENG        9
645 #define SND_FUEL        10
646 #define SND_GONG        11
647 #define SND_HALLOFFAME  12
648 #define SND_HOLZ        13
649 #define SND_HUI         14
650 #define SND_KABUMM      15
651 #define SND_KINK        16
652 #define SND_KLAPPER     17
653 #define SND_KLING       18
654 #define SND_KLOPF       19
655 #define SND_KLUMPF      20
656 #define SND_KNACK       21
657 #define SND_KNURK       22
658 #define SND_KRACH       23
659 #define SND_LACHEN      24
660 #define SND_LASER       25
661 #define SND_MIEP        26
662 #define SND_NETWORK     27
663 #define SND_NJAM        28
664 #define SND_OEFFNEN     29
665 #define SND_PLING       30
666 #define SND_PONG        31
667 #define SND_PUSCH       32
668 #define SND_QUIEK       33
669 #define SND_QUIRK       34
670 #define SND_RHYTHMLOOP  35
671 #define SND_ROAAAR      36
672 #define SND_ROEHR       37
673 #define SND_RUMMS       38
674 #define SND_SCHLOPP     39
675 #define SND_SCHLURF     40
676 #define SND_SCHRFF      41
677 #define SND_SCHWIRR     42
678 #define SND_SIRR        43
679 #define SND_SLURP       44
680 #define SND_SPROING     45
681 #define SND_TWILIGHT    46
682 #define SND_TYGER       47
683 #define SND_VOYAGER     48
684 #define SND_WARNTON     49
685 #define SND_WHOOSH      50
686 #define SND_ZISCH       51
687
688 #define NUM_SOUNDS      52
689
690 #define IS_LOOP_SOUND(s)        ((s)==SND_KLAPPER || (s)==SND_ROEHR ||  \
691                                  (s)==SND_NJAM || (s)==SND_MIEP)
692 #define IS_MUSIC_SOUND(s)       ((s)==SND_ALCHEMY || (s)==SND_CHASE || \
693                                  (s)==SND_NETWORK || (s)==SND_CZARDASZ || \
694                                  (s)==SND_TYGER || (s)==SND_VOYAGER || \
695                                  (s)==SND_TWILIGHT)
696 extern char *sound_name[NUM_SOUNDS];
697
698 /* this structure contains the sound data for the sound server */
699 extern struct SoundInfo Sound[NUM_SOUNDS];
700
701 /* directions for moving */
702 #define MV_NO_MOVING    0
703 #define MV_LEFT         1
704 #define MV_RIGHT        2
705 #define MV_UP           4
706 #define MV_DOWN         8
707
708 /* font types */
709 #define FS_SMALL        0
710 #define FS_BIG          1
711 /* font colors */
712 #define FC_RED          0
713 #define FC_BLUE         1
714 #define FC_GREEN        2
715 #define FC_YELLOW       3
716 #define FC_SPECIAL1     4
717 #define FC_SPECIAL2     5
718
719 /* values for game_status */
720 #define MAINMENU        0
721 #define PLAYING         1
722 #define LEVELED         2
723 #define HELPSCREEN      3
724 #define CHOOSELEVEL     4
725 #define TYPENAME        5
726 #define HALLOFFAME      6
727 #define SETUP           7
728 #define EXITGAME        8
729
730 /* return values for GameActions */
731 #define ACT_GO_ON       0
732 #define ACT_GAME_OVER   1
733 #define ACT_NEW_GAME    2
734
735 /* values for the joystick */
736 #define JOYSTICK_OFF            0
737 #define JOYSTICK_AVAILABLE      1
738 #define DEV_JOYSTICK_0          "/dev/js0"
739 #define DEV_JOYSTICK_1          "/dev/js1"
740
741 /* get these values from the program 'js' from the joystick package, */
742 /* set JOYSTICK_PERCENT to a threshold appropriate for your joystick */
743 #define JOYSTICK_XLEFT          30
744 #define JOYSTICK_XRIGHT         1250
745 #define JOYSTICK_XMIDDLE        530
746 #define JOYSTICK_YUPPER         40
747 #define JOYSTICK_YLOWER         1440
748 #define JOYSTICK_YMIDDLE        680
749 #define JOYSTICK_PERCENT        25
750 #define JOY_LEFT                MV_LEFT
751 #define JOY_RIGHT               MV_RIGHT
752 #define JOY_UP                  MV_UP
753 #define JOY_DOWN                MV_DOWN
754 #define JOY_BUTTON_1            16
755 #define JOY_BUTTON_2            32
756 #define JOY_BUTTON              (JOY_BUTTON_1 | JOY_BUTTON_2)
757 #define JOY_BUTTON_NOT_PRESSED  0
758 #define JOY_BUTTON_PRESSED      1
759 #define JOY_BUTTON_NEW_PRESSED  2
760 #define JOY_BUTTON_NEW_RELEASED 3
761
762 #ifdef NO_JOYSTICK
763 #define JOYSTICK_STATUS JOYSTICK_OFF
764 #else
765 #define JOYSTICK_STATUS JOYSTICK_AVAILABLE
766 #endif
767
768 #ifndef GAME_DIR
769 #define GAME_DIR        "."
770 #endif
771
772 #ifndef GFX_PATH
773 #define GFX_PATH        GAME_DIR "/graphics"
774 #endif
775 #ifndef SND_PATH
776 #define SND_PATH        GAME_DIR "/sounds"
777 #endif
778 #ifndef LEVEL_PATH
779 #define LEVEL_PATH      GAME_DIR "/levels"
780 #endif
781 #ifndef SCORE_PATH
782 #define SCORE_PATH      LEVEL_PATH
783 #endif
784 #ifndef NAMES_PATH
785 #define NAMES_PATH      LEVEL_PATH
786 #endif
787 #ifndef CONFIG_PATH
788 #define CONFIG_PATH     GAME_DIR
789 #endif
790 #ifndef JOYDAT_PATH
791 #define JOYDAT_PATH     GAME_DIR
792 #endif
793
794 #define SCORE_FILENAME  "ROCKS.score"
795 #define NAMES_FILENAME  "ROCKS.names"
796 #define LEVDIR_FILENAME "ROCKS.levelinfo"
797 #define JOYDAT_FILENAME "ROCKS.joystick"
798
799 #define JOYDAT_FILE     JOYDAT_PATH "/" JOYDAT_FILENAME
800
801 #define LEVEL_PERMS     (S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP | S_IROTH|S_IWOTH)
802 #define SCORE_PERMS     LEVEL_PERMS
803 #define NAMES_PERMS     LEVEL_PERMS
804 #define LEVDIR_PERMS    LEVEL_PERMS
805 #define LEVREC_PERMS    LEVEL_PERMS
806 #define JOYDAT_PERMS    LEVEL_PERMS
807
808 #define LEVEL_COOKIE    "ROCKSNDIAMONDS_LEVEL_FILE_VERSION_1.0"
809 #define SCORE_COOKIE    "ROCKSNDIAMONDS_SCORE_FILE_VERSION_1.0"
810 #define NAMES_COOKIE    "ROCKSNDIAMONDS_NAMES_FILE_VERSION_1.0"
811 #define LEVELDIR_COOKIE "ROCKSNDIAMONDS_LEVELDIR_FILE_VERSION_1.0"
812 #define LEVELREC_COOKIE "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.0"
813 #define JOYSTICK_COOKIE "ROCKSNDIAMONDS_JOYSTICK_FILE_VERSION_1.0"
814 #define LEVEL_COOKIE_LEN        (strlen(LEVEL_COOKIE)+1)
815 #define SCORE_COOKIE_LEN        (strlen(SCORE_COOKIE)+1)
816 #define NAMES_COOKIE_LEN        (strlen(NAMES_COOKIE)+1)
817 #define LEVELDIR_COOKIE_LEN     (strlen(LEVELDIR_COOKIE)+1)
818 #define LEVELREC_COOKIE_LEN     (strlen(LEVELREC_COOKIE)+1)
819 #define JOYSTICK_COOKIE_LEN     (strlen(JOYSTICK_COOKIE)+1)
820
821 /* Leerer Login- und Alias-Name */
822 #define EMPTY_LOGIN     "NO_LOGIN"
823 #define EMPTY_ALIAS     "NO_NAME"
824
825 /* values for button_status */
826 #define MB_NOT_PRESSED  FALSE
827 #define MB_RELEASED     FALSE
828 #define MB_PRESSED      TRUE
829 #define MB_MENU_CHOICE  FALSE
830 #define MB_MENU_MARK    TRUE
831 #define MB_LEFT         1
832 #define MB_MIDDLE       2
833 #define MB_RIGHT        3
834
835 /* values for key_status */
836 #define KEY_NOT_PRESSED FALSE
837 #define KEY_RELEASED    FALSE
838 #define KEY_PRESSED     TRUE
839
840 /* values for focus_status */
841 #define FOCUS_OUT       FALSE
842 #define FOCUS_IN        TRUE
843
844 /* values for redraw_mask */
845 #define REDRAW_ALL      (1L<<0)
846 #define REDRAW_FIELD    (1L<<1)
847 #define REDRAW_TILES    (1L<<2)
848 #define REDRAW_DOOR_1   (1L<<3)
849 #define REDRAW_VIDEO_1  (1L<<4)
850 #define REDRAW_VIDEO_2  (1L<<5)
851 #define REDRAW_VIDEO_3  (1L<<6)
852 #define REDRAW_MICROLEV (1L<<7)
853 #define REDRAW_DOOR_2   (REDRAW_VIDEO_1 | REDRAW_VIDEO_2 | REDRAW_VIDEO_3)
854 #define REDRAW_DOORS    (REDRAW_DOOR_1 | REDRAW_DOOR_2)
855 #define REDRAW_MAIN     (REDRAW_FIELD | REDRAW_TILES | REDRAW_MICROLEV)
856 #define REDRAWTILES_TH  SCR_FIELDX*SCR_FIELDY/2
857
858 /* positions in the game control window */
859 #define XX_LEVEL        37
860 #define YY_LEVEL        20
861 #define XX_EMERALDS     29
862 #define YY_EMERALDS     54
863 #define XX_DYNAMITE     29
864 #define YY_DYNAMITE     89
865 #define XX_KEYS         18
866 #define YY_KEYS         123
867 #define XX_SCORE        15
868 #define YY_SCORE        159
869 #define XX_TIME         29
870 #define YY_TIME         194
871
872 #define DX_LEVEL        (DX+XX_LEVEL)
873 #define DY_LEVEL        (DY+YY_LEVEL)
874 #define DX_EMERALDS     (DX+XX_EMERALDS)
875 #define DY_EMERALDS     (DY+YY_EMERALDS)
876 #define DX_DYNAMITE     (DX+XX_DYNAMITE)
877 #define DY_DYNAMITE     (DY+YY_DYNAMITE)
878 #define DX_KEYS         (DX+XX_KEYS)
879 #define DY_KEYS         (DY+YY_KEYS)
880 #define DX_SCORE        (DX+XX_SCORE)
881 #define DY_SCORE        (DY+YY_SCORE)
882 #define DX_TIME         (DX+XX_TIME)
883 #define DY_TIME         (DY+YY_TIME)
884
885 /* Felder in PIX_DOOR */
886 /* Bedeutung in PIX_DB_DOOR: (3 PAGEs)
887    PAGEX1: 1. Zwischenspeicher für DOOR_1
888    PAGEX2: 2. Zwischenspeicher für DOOR_1
889    PAGEX3: Pufferspeicher für Animationen
890 */
891
892 #define DOOR_GFX_PAGESIZE       DXSIZE
893 #define DOOR_GFX_PAGEX1         (0*DOOR_GFX_PAGESIZE)
894 #define DOOR_GFX_PAGEX2         (1*DOOR_GFX_PAGESIZE)
895 #define DOOR_GFX_PAGEX3         (2*DOOR_GFX_PAGESIZE)
896 #define DOOR_GFX_PAGEX4         (3*DOOR_GFX_PAGESIZE)
897 #define DOOR_GFX_PAGEX5         (4*DOOR_GFX_PAGESIZE)
898 #define DOOR_GFX_PAGEX6         (5*DOOR_GFX_PAGESIZE)
899 #define DOOR_GFX_PAGEY1         0
900 #define DOOR_GFX_PAGEY2         DYSIZE
901
902 /* some positions in the video tape control window */
903 #define VIDEO_DISPLAY1_XPOS     5
904 #define VIDEO_DISPLAY1_YPOS     5
905 #define VIDEO_DISPLAY2_XPOS     5
906 #define VIDEO_DISPLAY2_YPOS     41
907 #define VIDEO_DISPLAY_XSIZE     90
908 #define VIDEO_DISPLAY_YSIZE     31
909 #define VIDEO_BUTTON_XSIZE      18
910 #define VIDEO_BUTTON_YSIZE      18
911 #define VIDEO_CONTROL_XPOS      5
912 #define VIDEO_CONTROL_YPOS      77
913 #define VIDEO_CONTROL_XSIZE     (VIDEO_DISPLAY_XSIZE)
914 #define VIDEO_CONTROL_YSIZE     (VIDEO_BUTTON_YSIZE)
915 #define VIDEO_BUTTON_EJECT_XPOS (VIDEO_CONTROL_XPOS + 0 * VIDEO_BUTTON_XSIZE)
916 #define VIDEO_BUTTON_STOP_XPOS  (VIDEO_CONTROL_XPOS + 1 * VIDEO_BUTTON_XSIZE)
917 #define VIDEO_BUTTON_PAUSE_XPOS (VIDEO_CONTROL_XPOS + 2 * VIDEO_BUTTON_XSIZE)
918 #define VIDEO_BUTTON_REC_XPOS   (VIDEO_CONTROL_XPOS + 3 * VIDEO_BUTTON_XSIZE)
919 #define VIDEO_BUTTON_PLAY_XPOS  (VIDEO_CONTROL_XPOS + 4 * VIDEO_BUTTON_XSIZE)
920 #define VIDEO_BUTTON_ANY_YPOS   (VIDEO_CONTROL_YPOS)
921 #define VIDEO_DATE_LABEL_XPOS   (VIDEO_DISPLAY1_XPOS)
922 #define VIDEO_DATE_LABEL_YPOS   (VIDEO_DISPLAY1_YPOS)
923 #define VIDEO_DATE_LABEL_XSIZE  (VIDEO_DISPLAY_XSIZE)
924 #define VIDEO_DATE_LABEL_YSIZE  (VIDEO_DISPLAY_YSIZE)
925 #define VIDEO_DATE_XPOS         (VIDEO_DISPLAY1_XPOS+1)
926 #define VIDEO_DATE_YPOS         (VIDEO_DISPLAY1_YPOS+14)
927 #define VIDEO_DATE_XSIZE        (VIDEO_DISPLAY_XSIZE)
928 #define VIDEO_DATE_YSIZE        16
929 #define VIDEO_REC_LABEL_XPOS    (VIDEO_DISPLAY2_XPOS)
930 #define VIDEO_REC_LABEL_YPOS    (VIDEO_DISPLAY2_YPOS)
931 #define VIDEO_REC_LABEL_XSIZE   20
932 #define VIDEO_REC_LABEL_YSIZE   12
933 #define VIDEO_REC_SYMBOL_XPOS   (VIDEO_DISPLAY2_XPOS+20)
934 #define VIDEO_REC_SYMBOL_YPOS   (VIDEO_DISPLAY2_YPOS)
935 #define VIDEO_REC_SYMBOL_XSIZE  16
936 #define VIDEO_REC_SYMBOL_YSIZE  16
937 #define VIDEO_PLAY_LABEL_XPOS   (VIDEO_DISPLAY2_XPOS+65)
938 #define VIDEO_PLAY_LABEL_YPOS   (VIDEO_DISPLAY2_YPOS)
939 #define VIDEO_PLAY_LABEL_XSIZE  22
940 #define VIDEO_PLAY_LABEL_YSIZE  12
941 #define VIDEO_PLAY_SYMBOL_XPOS  (VIDEO_DISPLAY2_XPOS+50)
942 #define VIDEO_PLAY_SYMBOL_YPOS  (VIDEO_DISPLAY2_YPOS)
943 #define VIDEO_PLAY_SYMBOL_XSIZE 13
944 #define VIDEO_PLAY_SYMBOL_YSIZE 13
945 #define VIDEO_PAUSE_LABEL_XPOS  (VIDEO_DISPLAY2_XPOS)
946 #define VIDEO_PAUSE_LABEL_YPOS  (VIDEO_DISPLAY2_YPOS+20)
947 #define VIDEO_PAUSE_LABEL_XSIZE 35
948 #define VIDEO_PAUSE_LABEL_YSIZE 8
949 #define VIDEO_PAUSE_SYMBOL_XPOS (VIDEO_DISPLAY2_XPOS+35)
950 #define VIDEO_PAUSE_SYMBOL_YPOS (VIDEO_DISPLAY2_YPOS)
951 #define VIDEO_PAUSE_SYMBOL_XSIZE 13
952 #define VIDEO_PAUSE_SYMBOL_YSIZE 13
953 #define VIDEO_TIME_XPOS         (VIDEO_DISPLAY2_XPOS+38)
954 #define VIDEO_TIME_YPOS         (VIDEO_DISPLAY2_YPOS+14)
955 #define VIDEO_TIME_XSIZE        50
956 #define VIDEO_TIME_YSIZE        16
957
958 #define ON_VIDEO_BUTTON(x,y)    ((x)>=(VX+VIDEO_CONTROL_XPOS) &&        \
959                                  (x)< (VX+VIDEO_CONTROL_XPOS +          \
960                                        VIDEO_CONTROL_XSIZE) &&          \
961                                  (y)>=(VY+VIDEO_CONTROL_YPOS) &&        \
962                                  (y)< (VY+VIDEO_CONTROL_YPOS +          \
963                                        VIDEO_CONTROL_YSIZE))
964 #define VIDEO_BUTTON(x)         (((x)-(VX+VIDEO_CONTROL_XPOS))/VIDEO_BUTTON_XSIZE)
965
966 /* values for video tape control */
967 #define VIDEO_STATE_PLAY_OFF    (1L<<0)
968 #define VIDEO_STATE_PLAY_ON     (1L<<1)
969 #define VIDEO_STATE_PLAY        (VIDEO_STATE_PLAY_OFF   | VIDEO_STATE_PLAY_ON)
970 #define VIDEO_STATE_REC_OFF     (1L<<2)
971 #define VIDEO_STATE_REC_ON      (1L<<3)
972 #define VIDEO_STATE_REC         (VIDEO_STATE_REC_OFF    | VIDEO_STATE_REC_ON)
973 #define VIDEO_STATE_PAUSE_OFF   (1L<<4)
974 #define VIDEO_STATE_PAUSE_ON    (1L<<5)
975 #define VIDEO_STATE_PAUSE       (VIDEO_STATE_PAUSE_OFF  | VIDEO_STATE_PAUSE_ON)
976 #define VIDEO_STATE_DATE_OFF    (1L<<6)
977 #define VIDEO_STATE_DATE_ON     (1L<<7)
978 #define VIDEO_STATE_DATE        (VIDEO_STATE_DATE_OFF   | VIDEO_STATE_DATE_ON)
979 #define VIDEO_STATE_TIME_OFF    (1L<<8)
980 #define VIDEO_STATE_TIME_ON     (1L<<9)
981 #define VIDEO_STATE_TIME        (VIDEO_STATE_TIME_OFF   | VIDEO_STATE_TIME_ON)
982 #define VIDEO_PRESS_PLAY_ON     (1L<<10)
983 #define VIDEO_PRESS_PLAY_OFF    (1L<<11)
984 #define VIDEO_PRESS_PLAY        (VIDEO_PRESS_PLAY_OFF   | VIDEO_PRESS_PLAY_ON)
985 #define VIDEO_PRESS_REC_ON      (1L<<12)
986 #define VIDEO_PRESS_REC_OFF     (1L<<13)
987 #define VIDEO_PRESS_REC         (VIDEO_PRESS_REC_OFF    | VIDEO_PRESS_REC_ON)
988 #define VIDEO_PRESS_PAUSE_ON    (1L<<14)
989 #define VIDEO_PRESS_PAUSE_OFF   (1L<<15)
990 #define VIDEO_PRESS_PAUSE       (VIDEO_PRESS_PAUSE_OFF  | VIDEO_PRESS_PAUSE_ON)
991 #define VIDEO_PRESS_STOP_ON     (1L<<16)
992 #define VIDEO_PRESS_STOP_OFF    (1L<<17)
993 #define VIDEO_PRESS_STOP        (VIDEO_PRESS_STOP_OFF   | VIDEO_PRESS_STOP_ON)
994 #define VIDEO_PRESS_EJECT_ON    (1L<<18)
995 #define VIDEO_PRESS_EJECT_OFF   (1L<<19)
996 #define VIDEO_PRESS_EJECT       (VIDEO_PRESS_EJECT_OFF  | VIDEO_PRESS_EJECT_ON)
997
998 #define BUTTON_VIDEO_EJECT      1
999 #define BUTTON_VIDEO_STOP       2
1000 #define BUTTON_VIDEO_PAUSE      3
1001 #define BUTTON_VIDEO_REC        4
1002 #define BUTTON_VIDEO_PLAY       5
1003
1004 #define VIDEO_STATE_OFF         (VIDEO_STATE_PLAY_OFF   |       \
1005                                  VIDEO_STATE_REC_OFF    |       \
1006                                  VIDEO_STATE_PAUSE_OFF  |       \
1007                                  VIDEO_STATE_DATE_OFF   |       \
1008                                  VIDEO_STATE_TIME_OFF)
1009 #define VIDEO_PRESS_OFF         (VIDEO_PRESS_PLAY_OFF   |       \
1010                                  VIDEO_PRESS_REC_OFF    |       \
1011                                  VIDEO_PRESS_PAUSE_OFF  |       \
1012                                  VIDEO_PRESS_STOP_OFF   |       \
1013                                  VIDEO_PRESS_EJECT_OFF)
1014 #define VIDEO_ALL_OFF           (VIDEO_STATE_OFF | VIDEO_PRESS_OFF)
1015
1016 #define VIDEO_STATE_ON          (VIDEO_STATE_PLAY_ON    |       \
1017                                  VIDEO_STATE_REC_ON     |       \
1018                                  VIDEO_STATE_PAUSE_ON   |       \
1019                                  VIDEO_STATE_DATE_ON    |       \
1020                                  VIDEO_STATE_TIME_ON)
1021 #define VIDEO_PRESS_ON          (VIDEO_PRESS_PLAY_ON    |       \
1022                                  VIDEO_PRESS_REC_ON     |       \
1023                                  VIDEO_PRESS_PAUSE_ON   |       \
1024                                  VIDEO_PRESS_STOP_ON    |       \
1025                                  VIDEO_PRESS_EJECT_ON)
1026 #define VIDEO_ALL_ON            (VIDEO_STATE_ON | VIDEO_PRESS_ON)
1027
1028 #define VIDEO_STATE             (VIDEO_STATE_ON | VIDEO_STATE_OFF)
1029 #define VIDEO_PRESS             (VIDEO_PRESS_ON | VIDEO_PRESS_OFF)
1030 #define VIDEO_ALL               (VIDEO_ALL_ON | VIDEO_ALL_OFF)
1031
1032 /* some positions in the sound control window */
1033 #define SOUND_BUTTON_XSIZE      30
1034 #define SOUND_BUTTON_YSIZE      30
1035 #define SOUND_CONTROL_XPOS      5
1036 #define SOUND_CONTROL_YPOS      245
1037 #define SOUND_CONTROL_XSIZE     90
1038 #define SOUND_CONTROL_YSIZE     (SOUND_BUTTON_YSIZE)
1039 #define SOUND_BUTTON_MUSIC_XPOS (SOUND_CONTROL_XPOS + 0 * SOUND_BUTTON_XSIZE)
1040 #define SOUND_BUTTON_LOOPS_XPOS (SOUND_CONTROL_XPOS + 1 * SOUND_BUTTON_XSIZE)
1041 #define SOUND_BUTTON_SOUND_XPOS (SOUND_CONTROL_XPOS + 2 * SOUND_BUTTON_XSIZE)
1042 #define SOUND_BUTTON_ANY_YPOS   (SOUND_CONTROL_YPOS)
1043
1044 #define ON_SOUND_BUTTON(x,y)    ((x)>=(DX+SOUND_CONTROL_XPOS) &&        \
1045                                  (x)< (DX+SOUND_CONTROL_XPOS +          \
1046                                        SOUND_CONTROL_XSIZE) &&          \
1047                                  (y)>=(DY+SOUND_CONTROL_YPOS) &&        \
1048                                  (y)< (DY+SOUND_CONTROL_YPOS +          \
1049                                        SOUND_CONTROL_YSIZE))
1050 #define SOUND_BUTTON(x)         (((x)-(DX+SOUND_CONTROL_XPOS))/SOUND_BUTTON_XSIZE)
1051
1052 /* values for sound control */
1053 #define BUTTON_SOUND_MUSIC      (1L<<0)
1054 #define BUTTON_SOUND_LOOPS      (1L<<1)
1055 #define BUTTON_SOUND_SOUND      (1L<<2)
1056 #define BUTTON_RELEASED         0
1057 #define BUTTON_PRESSED          (1L<<3)
1058 #define BUTTON_OFF              0
1059 #define BUTTON_ON               (1L<<4)
1060 #define BUTTON_SOUND_MUSIC_OFF  (BUTTON_SOUND_MUSIC | BUTTON_OFF)
1061 #define BUTTON_SOUND_LOOPS_OFF  (BUTTON_SOUND_LOOPS | BUTTON_OFF)
1062 #define BUTTON_SOUND_SOUND_OFF  (BUTTON_SOUND_SOUND | BUTTON_OFF)
1063 #define BUTTON_SOUND_MUSIC_ON   (BUTTON_SOUND_MUSIC | BUTTON_ON)
1064 #define BUTTON_SOUND_LOOPS_ON   (BUTTON_SOUND_LOOPS | BUTTON_ON)
1065 #define BUTTON_SOUND_SOUND_ON   (BUTTON_SOUND_SOUND | BUTTON_ON)
1066
1067 /* some positions in the game control window */
1068 #define GAME_BUTTON_XSIZE       30
1069 #define GAME_BUTTON_YSIZE       30
1070 #define GAME_CONTROL_XPOS       5
1071 #define GAME_CONTROL_YPOS       215
1072 #define GAME_CONTROL_XSIZE      90
1073 #define GAME_CONTROL_YSIZE      (GAME_BUTTON_YSIZE)
1074 #define GAME_BUTTON_STOP_XPOS   (GAME_CONTROL_XPOS + 0 * GAME_BUTTON_XSIZE)
1075 #define GAME_BUTTON_PAUSE_XPOS  (GAME_CONTROL_XPOS + 1 * GAME_BUTTON_XSIZE)
1076 #define GAME_BUTTON_PLAY_XPOS   (GAME_CONTROL_XPOS + 2 * GAME_BUTTON_XSIZE)
1077 #define GAME_BUTTON_ANY_YPOS    (GAME_CONTROL_YPOS)
1078
1079 #define ON_GAME_BUTTON(x,y)     ((x)>=(DX+GAME_CONTROL_XPOS) && \
1080                                  (x)< (DX+GAME_CONTROL_XPOS +           \
1081                                        GAME_CONTROL_XSIZE) &&           \
1082                                  (y)>=(DY+GAME_CONTROL_YPOS) && \
1083                                  (y)< (DY+GAME_CONTROL_YPOS +           \
1084                                        GAME_CONTROL_YSIZE))
1085 #define GAME_BUTTON(x)          (((x)-(DX+GAME_CONTROL_XPOS))/GAME_BUTTON_XSIZE)
1086
1087 /* values for game control */
1088 #define BUTTON_GAME_STOP        (1L<<0)
1089 #define BUTTON_GAME_PAUSE       (1L<<1)
1090 #define BUTTON_GAME_PLAY        (1L<<2)
1091
1092 /* some positions in the asking window */
1093 #define OK_BUTTON_XPOS          2
1094 #define OK_BUTTON_YPOS          250
1095 #define OK_BUTTON_GFX_YPOS      0
1096 #define OK_BUTTON_XSIZE         46
1097 #define OK_BUTTON_YSIZE         28
1098 #define NO_BUTTON_XPOS          52
1099 #define NO_BUTTON_YPOS          OK_BUTTON_YPOS
1100 #define NO_BUTTON_XSIZE         OK_BUTTON_XSIZE
1101 #define NO_BUTTON_YSIZE         OK_BUTTON_YSIZE
1102 #define CONFIRM_BUTTON_XPOS     2
1103 #define CONFIRM_BUTTON_GFX_YPOS 30
1104 #define CONFIRM_BUTTON_YPOS     OK_BUTTON_YPOS
1105 #define CONFIRM_BUTTON_XSIZE    96
1106 #define CONFIRM_BUTTON_YSIZE    OK_BUTTON_YSIZE
1107
1108 #define ON_CHOOSE_BUTTON(x,y)   (((x)>=(DX+OK_BUTTON_XPOS) &&           \
1109                                   (x)< (DX+OK_BUTTON_XPOS +             \
1110                                         OK_BUTTON_XSIZE) &&             \
1111                                   (y)>=(DY+OK_BUTTON_YPOS) &&           \
1112                                   (y)< (DY+OK_BUTTON_YPOS +             \
1113                                         OK_BUTTON_YSIZE)) ||            \
1114                                  ((x)>=(DX+NO_BUTTON_XPOS) &&           \
1115                                   (x)< (DX+NO_BUTTON_XPOS +             \
1116                                         NO_BUTTON_XSIZE) &&             \
1117                                   (y)>=(DY+NO_BUTTON_YPOS) &&           \
1118                                   (y)< (DY+NO_BUTTON_YPOS +             \
1119                                         NO_BUTTON_YSIZE)))
1120 #define ON_CONFIRM_BUTTON(x,y)  (((x)>=(DX+CONFIRM_BUTTON_XPOS) &&      \
1121                                   (x)< (DX+CONFIRM_BUTTON_XPOS +        \
1122                                         CONFIRM_BUTTON_XSIZE) &&        \
1123                                   (y)>=(DY+CONFIRM_BUTTON_YPOS) &&      \
1124                                   (y)< (DY+CONFIRM_BUTTON_YPOS +        \
1125                                         CONFIRM_BUTTON_YSIZE)))
1126 #define CHOOSE_BUTTON(x)        (((x)-(DX+OK_BUTTON_XPOS))/OK_BUTTON_XSIZE)
1127
1128 /* values for asking control */
1129 #define BUTTON_OK               (1L<<0)
1130 #define BUTTON_NO               (1L<<1)
1131 #define BUTTON_CONFIRM          (1L<<2)
1132
1133 #endif