dostunnel

diff src/tunnel.c @ 3:a8024271c662

added timer
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 16 Mar 2013 03:35:08 +0200
parents 5d7f784002b0
children ba868d348de8
line diff
     1.1 --- a/src/tunnel.c	Fri Mar 15 19:55:29 2013 +0200
     1.2 +++ b/src/tunnel.c	Sat Mar 16 03:35:08 2013 +0200
     1.3 @@ -6,6 +6,7 @@
     1.4  #include "wvga.h"
     1.5  #include "texture.h"
     1.6  #include "palman.h"
     1.7 +#include "timer.h"
     1.8  
     1.9  #ifndef M_PI
    1.10  #define M_PI	3.14159265
    1.11 @@ -18,22 +19,26 @@
    1.12  void cleanup(void);
    1.13  void display(void);
    1.14  int calc_tunnel_mapping(void);
    1.15 +int parse_args(int argc, char **argv);
    1.16  
    1.17  static unsigned char *fbuf;
    1.18  static struct texture *tex;
    1.19  static int colrange;
    1.20  
    1.21 -static char *tex_fname = "data/wall2.ppm";
    1.22 +static char *tex_fname;
    1.23  
    1.24  static unsigned long *umap, *vmap;
    1.25  
    1.26  static unsigned long frames;
    1.27  static unsigned long start_time;
    1.28  
    1.29 +static int under_windows;
    1.30 +
    1.31 +
    1.32  int main(int argc, char **argv)
    1.33  {
    1.34 -	if(argc > 1) {
    1.35 -		tex_fname = argv[1];
    1.36 +	if(parse_args(argc, argv) == -1) {
    1.37 +		return 1;
    1.38  	}
    1.39  
    1.40  	if(init() == -1) {
    1.41 @@ -68,9 +73,8 @@
    1.42  			free(fbuf);
    1.43  			return -1;
    1.44  		}
    1.45 -
    1.46  	} else {
    1.47 -		fprintf(stderr, "FOO\n");
    1.48 +		fprintf(stderr, "you must specify a texture to use\n");
    1.49  		return -1;
    1.50  	}
    1.51  
    1.52 @@ -85,19 +89,28 @@
    1.53  	}
    1.54  	colrange = palm_color_range();
    1.55  
    1.56 +	init_timer(120);
    1.57 +	start_time = get_msec();
    1.58 +
    1.59  	return 0;
    1.60  }
    1.61  
    1.62  void cleanup(void)
    1.63  {
    1.64 +	unsigned long sec = (get_msec() - start_time) / 1000ul;
    1.65 +
    1.66  	free_texture(tex);
    1.67  	free(fbuf);
    1.68  	set_video_mode(0x3);
    1.69 +
    1.70 +	if(sec) {
    1.71 +		printf("avg fps: %lu\n", frames / sec);
    1.72 +	}
    1.73  }
    1.74  
    1.75  void display(void)
    1.76  {
    1.77 -	static unsigned long msec;
    1.78 +	unsigned long msec = get_msec() - start_time;
    1.79  
    1.80  	unsigned int i;
    1.81  	unsigned char voffs = msec >> 3;
    1.82 @@ -122,7 +135,7 @@
    1.83  	}
    1.84  
    1.85  	copy_frame(fbuf);
    1.86 -	msec += 33;
    1.87 +	frames++;
    1.88  }
    1.89  
    1.90  int calc_tunnel_mapping(void)
    1.91 @@ -162,3 +175,30 @@
    1.92  	}
    1.93  	return 0;
    1.94  }
    1.95 +
    1.96 +int parse_args(int argc, char **argv)
    1.97 +{
    1.98 +	int i;
    1.99 +
   1.100 +	for(i=1; i<argc; i++) {
   1.101 +		if(argv[i][0] == '-') {
   1.102 +			if(strcmp(argv[i], "-win") == 0) {
   1.103 +				under_windows = 1;
   1.104 +			} else {
   1.105 +				fprintf(stderr, "invalid option: %s\n", argv[i]);
   1.106 +				return -1;
   1.107 +			}
   1.108 +		} else {
   1.109 +			if(tex_fname) {
   1.110 +				fprintf(stderr, "unexpected argument: %s\n", argv[i]);
   1.111 +				return -1;
   1.112 +			}
   1.113 +			tex_fname = argv[i];
   1.114 +		}
   1.115 +	}
   1.116 +
   1.117 +	if(!tex_fname) {
   1.118 +		tex_fname = "data/wall2.ppm";
   1.119 +	}
   1.120 +	return 0;
   1.121 +}