rnd-20040820-1-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 extern void tab_generate();
29 extern void ulaw_generate();
30
31 int em_main_OLD(int argc, char **argv)
32 {
33         int result;
34         int option;
35         extern char *optarg;
36
37         /* pre-calculate some data */
38         tab_generate();
39         ulaw_generate();
40
41         progname = strrchr(argv[0], '/'); progname = progname ? progname + 1 : argv[0];
42
43         while((option = getopt(argc, argv, "b:d:g:in")) != -1) {
44                 switch(option) {
45                 case 'b': arg_basedir = optarg; break;
46                 case 'd': arg_display = optarg; break;
47                 case 'g': arg_geometry = optarg; break;
48                 case 'i': arg_install = 1; break;
49                 case 'n': arg_silence = 1; break;
50                 default:
51                         printf("Emerald Mine for X11 © 2000,2001 David Tritscher\n\n");
52                         printf("usage: %s [options]\n", progname);
53                         printf("\t-b    set base directory\n");
54                         printf("\t-d    server to contact\n");
55                         printf("\t-g    geometry\n");
56                         printf("\t-i    install colourmap\n");
57                         printf("\t-n    no sounds\n");
58                         exit(option == 'h' ? 0 : 1);
59                 }
60         }
61         if(arg_basedir == 0) arg_basedir = getenv("EMERALD_BASE");
62
63         result = open_all(); if(result) goto fail;
64         result = game_start(); if(result) goto fail;
65         result = 0;
66 fail:
67         close_all();
68         return(result);
69 }
70
71 int em_main()
72 {
73         int result;
74
75         /* pre-calculate some data */
76         tab_generate();
77         ulaw_generate();
78
79         progname = "emerald mine";
80
81         result = open_all();
82         if(result)
83           goto fail;
84
85         result = game_start();
86         if(result)
87           goto fail;
88
89         result = 0;
90 fail:
91         close_all();
92         return(result);
93 }
94
95 /* massive kludge for buffer overflows
96  * i cant think of an elegant way to handle this situation.
97  * oh wait yes i can. dynamically allocate each string. oh well
98  */
99 void snprintf_overflow(char *description)
100 {
101         fprintf(stderr, "%s: %s\n", progname, "buffer overflow; check EMERALD_BASE environment variable");
102         fprintf(stderr, "%s %s\n", "Fault occured while attempting to", description);
103         abort();
104 }
105
106 #else
107
108 int em_main()
109 {
110   /* temporary dummy until X11->SDL conversion finished */
111   return 0;
112 }
113
114 #endif