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 +}