gradtool

diff gradtool.c @ 1:c438411b801b

latest changes from svn (saving grad files)
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 09 Oct 2015 01:45:12 +0300
parents 960cea2731c4
children 3ac4d33e568f
line diff
     1.1 --- a/gradtool.c	Tue Jun 19 05:30:45 2012 +0300
     1.2 +++ b/gradtool.c	Fri Oct 09 01:45:12 2015 +0300
     1.3 @@ -1,6 +1,12 @@
     1.4  #include <stdio.h>
     1.5  #include <stdlib.h>
     1.6 +#include <string.h>
     1.7 +#include <errno.h>
     1.8 +#ifdef __APPLE__
     1.9 +#include <GLUT/glut.h>
    1.10 +#else
    1.11  #include <GL/glut.h>
    1.12 +#endif
    1.13  
    1.14  #define MAX_POS		512
    1.15  
    1.16 @@ -23,7 +29,8 @@
    1.17  void rm_val(struct track *track, float pos);
    1.18  float get_val(struct track *track, float pos);
    1.19  
    1.20 -void save(void);
    1.21 +int save_ppm(const char *fname, int img_width);
    1.22 +int save_grad(const char *fname);
    1.23  
    1.24  void key_handler(unsigned char key, int x, int y);
    1.25  void skey_handler(int key, int x, int y);
    1.26 @@ -256,22 +263,20 @@
    1.27  }
    1.28  
    1.29  
    1.30 -#define IMG_X	256
    1.31 -#define FNAME	"grad.ppm"
    1.32 -void save(void)
    1.33 +int save_ppm(const char *fname, int img_width)
    1.34  {
    1.35  	int i;
    1.36  	FILE *fp;
    1.37  
    1.38 -	if(!(fp = fopen(FNAME, "wb"))) {
    1.39 -		perror("failed to write " FNAME);
    1.40 -		return;
    1.41 +	if(!(fp = fopen(fname, "wb"))) {
    1.42 +		fprintf(stderr, "failed to write %s: %s\n", fname, strerror(errno));
    1.43 +		return -1;
    1.44  	}
    1.45  
    1.46 -	fprintf(fp, "P6\n%d %d\n255\n", IMG_X, 1);
    1.47 +	fprintf(fp, "P6\n%d 1\n255\n", img_width);
    1.48  
    1.49 -	for(i=0; i<IMG_X; i++) {
    1.50 -		float t = (float)i / (float)IMG_X;
    1.51 +	for(i=0; i<img_width; i++) {
    1.52 +		float t = (float)i / (float)img_width;
    1.53  		int r = get_val(&tred, t) * 255.0;
    1.54  		int g = get_val(&tgreen, t) * 255.0;
    1.55  		int b = get_val(&tblue, t) * 255.0;
    1.56 @@ -282,6 +287,37 @@
    1.57  	}
    1.58  
    1.59  	fclose(fp);
    1.60 +	return 0;
    1.61 +}
    1.62 +
    1.63 +int save_grad(const char *fname)
    1.64 +{
    1.65 +	int i;
    1.66 +	FILE *fp;
    1.67 +	struct track *tr[] = {&tred, &tgreen, &tblue};
    1.68 +
    1.69 +	if(!(fp = fopen(fname, "w"))) {
    1.70 +		return -1;
    1.71 +	}
    1.72 +
    1.73 +	fprintf(fp, "GRAD\n");
    1.74 +
    1.75 +	for(i=0; i<3; i++) {
    1.76 +		key_t *ptr = tr[i]->keys->next;
    1.77 +	
    1.78 +		while(ptr) {
    1.79 +			float t = (float)ptr->pos / (float)MAX_POS;
    1.80 +			float r = get_val(&tred, t);
    1.81 +			float g = get_val(&tgreen, t);
    1.82 +			float b = get_val(&tblue, t);
    1.83 +
    1.84 +			fprintf(fp, "%f\t%f %f %f\n", t, r, g, b);
    1.85 +			ptr = ptr->next;
    1.86 +		}
    1.87 +	}
    1.88 +
    1.89 +	fclose(fp);
    1.90 +	return 0;
    1.91  }
    1.92  
    1.93  
    1.94 @@ -298,7 +334,12 @@
    1.95  
    1.96  	case 's':
    1.97  	case 'S':
    1.98 -		save();
    1.99 +		save_ppm("grad.ppm", 256);
   1.100 +		break;
   1.101 +
   1.102 +	case 'g':
   1.103 +	case 'G':
   1.104 +		save_grad("grad.grad");
   1.105  		break;
   1.106  
   1.107  	case 'c':