rev |
line source |
nuclear@12
|
1 /*
|
nuclear@12
|
2 glviewvol is an OpenGL 3D volume data viewer
|
nuclear@12
|
3 Copyright (C) 2014 John Tsiombikas <nuclear@member.fsf.org>
|
nuclear@12
|
4
|
nuclear@12
|
5 This program is free software: you can redistribute it and/or modify
|
nuclear@12
|
6 it under the terms of the GNU General Public License as published by
|
nuclear@12
|
7 the Free Software Foundation, either version 3 of the License, or
|
nuclear@12
|
8 (at your option) any later version.
|
nuclear@12
|
9
|
nuclear@12
|
10 This program is distributed in the hope that it will be useful,
|
nuclear@12
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
nuclear@12
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
nuclear@12
|
13 GNU General Public License for more details.
|
nuclear@12
|
14
|
nuclear@12
|
15 You should have received a copy of the GNU General Public License
|
nuclear@12
|
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
|
nuclear@12
|
17 */
|
nuclear@3
|
18 #include <stdio.h>
|
nuclear@3
|
19 #include <string.h>
|
nuclear@3
|
20 #include "opt.h"
|
nuclear@3
|
21
|
nuclear@3
|
22 static struct {
|
nuclear@3
|
23 const char *name;
|
nuclear@3
|
24 RendererType rtype;
|
nuclear@3
|
25 } rend[] = {
|
nuclear@3
|
26 { "fast", REND_FAST },
|
nuclear@3
|
27 { 0, REND_NONE }
|
nuclear@3
|
28 };
|
nuclear@3
|
29
|
nuclear@3
|
30 Options opt;
|
nuclear@3
|
31
|
nuclear@3
|
32 static void init_opt()
|
nuclear@3
|
33 {
|
nuclear@3
|
34 opt.fname = 0;
|
nuclear@3
|
35 opt.rend_type = REND_FAST;
|
nuclear@6
|
36 opt.xsz = 800;
|
nuclear@6
|
37 opt.ysz = 800;
|
nuclear@3
|
38 }
|
nuclear@3
|
39
|
nuclear@3
|
40 static RendererType renderer_type(const char *name)
|
nuclear@3
|
41 {
|
nuclear@3
|
42 for(int i=0; rend[i].name; i++) {
|
nuclear@3
|
43 if(strcmp(rend[i].name, name) == 0) {
|
nuclear@3
|
44 return rend[i].rtype;
|
nuclear@3
|
45 }
|
nuclear@3
|
46 }
|
nuclear@3
|
47 return REND_NONE;
|
nuclear@3
|
48 }
|
nuclear@3
|
49
|
nuclear@3
|
50 int parse_args(int argc, char **argv)
|
nuclear@3
|
51 {
|
nuclear@3
|
52 init_opt();
|
nuclear@3
|
53
|
nuclear@3
|
54 for(int i=1; i<argc; i++) {
|
nuclear@3
|
55 if(argv[i][0] == '-') {
|
nuclear@3
|
56 if(argv[i][2] == 0) {
|
nuclear@3
|
57 switch(argv[i][1]) {
|
nuclear@6
|
58 case 's':
|
nuclear@6
|
59 if(sscanf(argv[++i], "%dx%d", &opt.xsz, &opt.ysz) != 2) {
|
nuclear@6
|
60 fprintf(stderr, "-s must be followed by the window size (WxH)\n");
|
nuclear@6
|
61 return -1;
|
nuclear@6
|
62 }
|
nuclear@6
|
63 break;
|
nuclear@6
|
64
|
nuclear@3
|
65 case 'r':
|
nuclear@3
|
66 if((opt.rend_type = renderer_type(argv[++i])) == REND_NONE) {
|
nuclear@3
|
67 if(strcmp(argv[i], "help") == 0) {
|
nuclear@3
|
68 printf("available renderers: ");
|
nuclear@3
|
69 for(int j=0; rend[j].name; j++) {
|
nuclear@3
|
70 printf("%s ", rend[j].name);
|
nuclear@3
|
71 }
|
nuclear@3
|
72 putchar('\n');
|
nuclear@3
|
73 return -1;
|
nuclear@3
|
74 }
|
nuclear@3
|
75 fprintf(stderr, "unknown renderer type: %s (use -r help to show list of renderers)\n", argv[i]);
|
nuclear@3
|
76 return -1;
|
nuclear@3
|
77 }
|
nuclear@3
|
78 break;
|
nuclear@3
|
79
|
nuclear@3
|
80 default:
|
nuclear@3
|
81 fprintf(stderr, "invalid option: %s\n", argv[i]);
|
nuclear@3
|
82 return -1;
|
nuclear@3
|
83 }
|
nuclear@3
|
84 } else {
|
nuclear@3
|
85 fprintf(stderr, "invalid option: %s\n", argv[i]);
|
nuclear@3
|
86 return -1;
|
nuclear@3
|
87 }
|
nuclear@3
|
88 } else {
|
nuclear@3
|
89 if(opt.fname) {
|
nuclear@3
|
90 fprintf(stderr, "unexpected argument: %s\n", argv[i]);
|
nuclear@3
|
91 return -1;
|
nuclear@3
|
92 }
|
nuclear@3
|
93 opt.fname = argv[i];
|
nuclear@3
|
94 }
|
nuclear@3
|
95 }
|
nuclear@3
|
96
|
nuclear@3
|
97 return 0;
|
nuclear@3
|
98 }
|