glviewvol

annotate src/opt.cc @ 14:0d2447b9c512

did the histogram... doesn't seem to work right
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 01 Jan 2015 06:36:45 +0200
parents f22be47a3572
children
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 }