more vbe
[vidsys] / main.c
diff --git a/main.c b/main.c
index 4b7ad18..ed2377e 100644 (file)
--- a/main.c
+++ b/main.c
@@ -8,13 +8,53 @@ void test8bpp(void);
 struct vid_modeinfo *vm;
 void *vmem;
 
+static const char *usage_fmt = "Usage %s: [options]\n"
+       "Options:      \n"
+       " -s <XxY>: video resolution\n"
+       " -b <bpp>: color depth\n";
+
 int main(int argc, char **argv)
 {
+       int i;
        int mode;
        int xres = 320;
        int yres = 200;
        int bpp = 8;
 
+       for(i=1; i<argc; i++) {
+               if(argv[i][0] == '-') {
+                       if(argv[i][2]) {
+invalopt:              fprintf(stderr, "invalid option: %s\n", argv[i]);
+                               return 1;
+                       }
+                       switch(argv[i][1]) {
+                       case 's':
+                               if(!argv[++i] || sscanf(argv[i], "%dx%d", &xres, &yres) != 2) {
+                                       fprintf(stderr, "invalid resolution: %s\n", argv[i]);
+                                       return 1;
+                               }
+                               break;
+
+                       case 'b':
+                               if(!argv[++i] || (bpp = atoi(argv[i])) <= 0) {
+                                       fprintf(stderr, "invalid color depth: %s\n", argv[i]);
+                                       return 1;
+                               }
+
+                       case 'h':
+                               printf(usage_fmt, argv[0]);
+                               return 0;
+
+                       default:
+                               goto invalopt;
+                       }
+               } else {
+                       fprintf(stderr, "unexpected argument: %s\n", argv[i]);
+                       return 1;
+               }
+       }
+
+
        if(vid_init() == -1) {
                fprintf(stderr, "failed to initialize video\n");
                return 1;