8 /* release build default options */
18 /* debug build default options */
19 struct options opt = {
29 int parse_args(int argc, char **argv)
34 for(i=1; i<argc; i++) {
35 if(argv[i][0] == '-') {
36 if(strcmp(argv[i], "-music") == 0) {
38 } else if(strcmp(argv[i], "-nomusic") == 0) {
40 } else if(strcmp(argv[i], "-scr") == 0 || strcmp(argv[i], "-screen") == 0) {
42 } else if(strcmp(argv[i], "-mouse") == 0) {
44 } else if(strcmp(argv[i], "-nomouse") == 0) {
46 } else if(strcmp(argv[i], "-sball") == 0) {
47 opt.sball = !opt.sball;
48 } else if(strcmp(argv[i], "-vsync") == 0) {
50 } else if(strcmp(argv[i], "-novsync") == 0) {
52 } else if(strcmp(argv[i], "-dbg") == 0) {
54 } else if(strcmp(argv[i], "-nodbg") == 0) {
57 } else if(strcmp(argv[i], "-fs") == 0) {
59 } else if(strcmp(argv[i], "-win") == 0) {
61 } else if(strcmp(argv[i], "-scaler-nearest") == 0) {
62 opt.scaler = SCALER_NEAREST;
63 } else if(strcmp(argv[i], "-scaler-linear") == 0) {
64 opt.scaler = SCALER_LINEAR;
67 fprintf(stderr, "invalid option: %s\n", argv[i]);
72 fprintf(stderr, "unexpected option: %s\n", argv[i]);
80 opt.start_scr = scrname;
85 static char *strip_space(char *s)
90 while(*s && isspace(*s)) ++s;
93 if((end = strrchr(s, '#'))) {
100 while(end > s && isspace(*end)) *end-- = 0;
101 return end > s ? s : 0;
104 static int bool_value(char *s)
108 *ptr = tolower(*ptr);
112 return strcmp(s, "true") == 0 || strcmp(s, "yes") == 0 || strcmp(s, "1") == 0;
115 int load_config(const char *fname)
121 if(!(fp = fopen(fname, "rb"))) {
122 return 0; /* just ignore missing config files */
125 while(fgets(buf, sizeof buf, fp)) {
126 char *line, *key, *value;
129 if(!(line = strip_space(buf))) {
133 if(!(value = strchr(line, '='))) {
134 fprintf(stderr, "%s:%d invalid key/value pair\n", fname, nline);
139 if(!(key = strip_space(line)) || !(value = strip_space(value))) {
140 fprintf(stderr, "%s:%d invalid key/value pair\n", fname, nline);
144 if(strcmp(line, "music") == 0) {
145 opt.music = bool_value(value);
146 } else if(strcmp(line, "screen") == 0) {
147 opt.start_scr = strdup(value);
148 } else if(strcmp(line, "mouse") == 0) {
149 opt.mouse = bool_value(value);
150 } else if(strcmp(line, "sball") == 0) {
151 opt.sball = bool_value(value);
152 } else if(strcmp(line, "vsync") == 0) {
153 opt.vsync = bool_value(value);
154 } else if(strcmp(line, "debug") == 0) {
155 opt.dbginfo = bool_value(value);
157 } else if(strcmp(line, "fullscreen") == 0) {
158 opt.fullscreen = bool_value(value);
159 } else if(strcmp(line, "scaler") == 0) {
160 if(strcmp(value, "linear") == 0) {
161 opt.scaler = SCALER_LINEAR;
163 opt.scaler = SCALER_NEAREST;
167 fprintf(stderr, "%s:%d invalid option: %s\n", fname, nline, line);