options/config
[demo_prior] / src / opt.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include "opt.h"
5 #include "treestore.h"
6
7 static void print_usage(const char *argv0);
8
9 struct options opt = {
10         1280, 800,
11         1,                      /* fullscreen */
12         1,                      /* music */
13         1,                      /* sRGB */
14         1                       /* anti-aliasing */
15 };
16
17 int parse_args(int argc, char **argv)
18 {
19         int i;
20
21         for(i=1; i<argc; i++) {
22                 if(strcmp(argv[i], "-s") == 0 || strcmp(argv[i], "-size") == 0) {
23                         if(sscanf(argv[++i], "%dx%d", &opt.width, &opt.height) != 2) {
24                                 fprintf(stderr, "%s must be followed by <width>x<height>\n", argv[-1]);
25                                 return -1;
26                         }
27                 } else if(strcmp(argv[i], "-fs") == 0) {
28                         opt.fullscr = 1;
29                 } else if(strcmp(argv[i], "-win") == 0) {
30                         opt.fullscr = 0;
31                 } else if(strcmp(argv[i], "-srgb") == 0) {
32                         opt.srgb = 1;
33                 } else if(strcmp(argv[i], "-nosrgb") == 0) {
34                         opt.srgb = 0;
35                 } else if(strcmp(argv[i], "-aa") == 0) {
36                         opt.msaa = 1;
37                 } else if(strcmp(argv[i], "-noaa") == 0) {
38                         opt.msaa = 0;
39                 } else if(strcmp(argv[i], "-music") == 0) {
40                         opt.music = 1;
41                 } else if(strcmp(argv[i], "-nomusic") == 0) {
42                         opt.music = 0;
43                 } else if(strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "-help") == 0) {
44                         print_usage(argv[0]);
45                         exit(0);
46                 } else {
47                         fprintf(stderr, "invalid argument: %s\n", argv[i]);
48                         print_usage(argv[0]);
49                         return -1;
50                 }
51         }
52         return 0;
53 }
54
55 static void print_usage(const char *argv0)
56 {
57         printf("Usage: %s [options]\n", argv0);
58         printf("  -fs: fullscr\n");
59         printf("  -win: windowed\n");
60         printf("  -s,-size <WxH>: windowed resolution\n");
61         printf("  -srgb/-nosrgb: enable/disable sRGB framebuffer\n");
62         printf("  -aa/-noaa: enable/disable multisample anti-aliasing\n");
63         printf("  -music/-nomusic: enable/disable music playback\n");
64         printf("  -h,-help: print usage and exit\n");
65 }
66
67 int read_cfg(const char *fname)
68 {
69         struct ts_node *ts;
70
71         if(!(ts = ts_load(fname))) {
72                 return -1;
73         }
74         opt.width = ts_lookup_int(ts, "demo.width", opt.width);
75         opt.height = ts_lookup_int(ts, "demo.height", opt.height);
76         opt.fullscr = ts_lookup_int(ts, "demo.fullscreen", opt.fullscr);
77         opt.music = ts_lookup_int(ts, "demo.music", opt.music);
78         opt.srgb = ts_lookup_int(ts, "demo.srgb", opt.srgb);
79         opt.msaa = ts_lookup_int(ts, "demo.aa", opt.msaa);
80
81         ts_free_tree(ts);
82         return 0;
83 }