glviewvol
diff src/opt.cc @ 3:32c4a7160350
den kanei kryo stin ellada
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 28 Dec 2014 21:48:15 +0200 |
parents | |
children | f22be47a3572 |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/opt.cc Sun Dec 28 21:48:15 2014 +0200 1.3 @@ -0,0 +1,72 @@ 1.4 +#include <stdio.h> 1.5 +#include <string.h> 1.6 +#include "opt.h" 1.7 + 1.8 +static struct { 1.9 + const char *name; 1.10 + RendererType rtype; 1.11 +} rend[] = { 1.12 + { "fast", REND_FAST }, 1.13 + { 0, REND_NONE } 1.14 +}; 1.15 + 1.16 +Options opt; 1.17 + 1.18 +static void init_opt() 1.19 +{ 1.20 + opt.fname = 0; 1.21 + opt.rend_type = REND_FAST; 1.22 +} 1.23 + 1.24 +static RendererType renderer_type(const char *name) 1.25 +{ 1.26 + for(int i=0; rend[i].name; i++) { 1.27 + if(strcmp(rend[i].name, name) == 0) { 1.28 + return rend[i].rtype; 1.29 + } 1.30 + } 1.31 + return REND_NONE; 1.32 +} 1.33 + 1.34 +int parse_args(int argc, char **argv) 1.35 +{ 1.36 + init_opt(); 1.37 + 1.38 + for(int i=1; i<argc; i++) { 1.39 + if(argv[i][0] == '-') { 1.40 + if(argv[i][2] == 0) { 1.41 + switch(argv[i][1]) { 1.42 + case 'r': 1.43 + if((opt.rend_type = renderer_type(argv[++i])) == REND_NONE) { 1.44 + if(strcmp(argv[i], "help") == 0) { 1.45 + printf("available renderers: "); 1.46 + for(int j=0; rend[j].name; j++) { 1.47 + printf("%s ", rend[j].name); 1.48 + } 1.49 + putchar('\n'); 1.50 + return -1; 1.51 + } 1.52 + fprintf(stderr, "unknown renderer type: %s (use -r help to show list of renderers)\n", argv[i]); 1.53 + return -1; 1.54 + } 1.55 + break; 1.56 + 1.57 + default: 1.58 + fprintf(stderr, "invalid option: %s\n", argv[i]); 1.59 + return -1; 1.60 + } 1.61 + } else { 1.62 + fprintf(stderr, "invalid option: %s\n", argv[i]); 1.63 + return -1; 1.64 + } 1.65 + } else { 1.66 + if(opt.fname) { 1.67 + fprintf(stderr, "unexpected argument: %s\n", argv[i]); 1.68 + return -1; 1.69 + } 1.70 + opt.fname = argv[i]; 1.71 + } 1.72 + } 1.73 + 1.74 + return 0; 1.75 +}