rnd-20040822-2-src
[rocksndiamonds.git] / src / game_em / main.c
1 /* Emerald Mine
2  * 
3  * David Tritscher
4  * 
5  * v0.0 2000-01-06T06:43:39Z
6  *
7  * set everything up and close everything down
8  */
9
10 #include <stdlib.h>
11 #include <unistd.h>
12 #include <stdio.h>
13 #include <string.h>
14 #include <errno.h>
15
16 #include "global.h"
17
18
19 #if defined(TARGET_X11)
20
21 char *progname;
22 char *arg_basedir;
23 char *arg_display;
24 char *arg_geometry;
25 int arg_install;
26 int arg_silence;
27
28 int em_game_status;
29 boolean skip_menu = TRUE;
30
31 extern void tab_generate();
32 extern void ulaw_generate();
33
34 extern void game_menu_init();
35
36 void em_open_all()
37 {
38   /* pre-calculate some data */
39   tab_generate();
40   ulaw_generate();
41
42   progname = "emerald mine";
43
44   if (open_all() != 0)
45     Error(ERR_EXIT, "em_open_all(): open_all() failed");
46
47   game_init_vars();
48 }
49
50 void em_close_all()
51 {
52   close_all();
53 }
54
55 int em_main_init_game(int level_nr)
56 {
57   if (skip_menu)
58   {
59     em_game_status = EM_GAME_STATUS_PLAY;
60     if (game_play_init(level_nr) != 0)
61       return 1;
62   }
63   else
64   {
65     em_game_status = EM_GAME_STATUS_MENU;
66     game_menu_init();
67   }
68
69   return 0;
70 }
71
72 int em_main_handle_game(byte action)
73 {
74   return game_loop(action);
75 }
76
77 /* massive kludge for buffer overflows
78  * i cant think of an elegant way to handle this situation.
79  * oh wait yes i can. dynamically allocate each string. oh well
80  */
81 void snprintf_overflow(char *description)
82 {
83   fprintf(stderr, "%s: %s\n", progname,
84           "buffer overflow; check EMERALD_BASE environment variable");
85   fprintf(stderr, "%s %s\n", "Fault occured while attempting to", description);
86
87   abort();
88 }
89
90 #else
91
92 int em_main()
93 {
94   /* temporary dummy until X11->SDL conversion finished */
95   return 0;
96 }
97
98 #endif