|
|
1.1 root 1: #include <stdio.h>
2: #include <math.h>
3: #include "view2d.h"
4:
5: char *progname;
6: int fd;
7: int verbose;
8:
9: main(argc, argv)
10: char **argv;
11: {
12: int i, j;
13: int npts;
14: int nx, ny;
15: float f, v2;
16: short u, v;
17: float fmin, fmax, frange, grange, gmax, gmin;
18: char buf[512];
19: int hi, lo;
20: double time;
21: int firstime = 1;
22: short *data, *d;
23: int rmax, rmin, r;
24: char *errfil;
25: char *Malloc();
26: double pow2();
27: progname = argv[0];
28: verbose = 0;
29: if((argv[1][0]=='-')&&(argv[1][1]=='v')) verbose = 1;
30:
31: /* open error message file */
32: umask(0);
33: errfil="/tmp/rks.err";
34: if(access(errfil,2)!=0) close(Creat(errfil,0666));
35: freopen(errfil,"a",stderr);
36:
37: /* open output file */
38: fd = Creat(argv[1+verbose],0666);
39:
40: while( gets(buf) != NULL ){
41: if(buf[0]==0) continue;
42:
43: i = sscanf(buf, "%E %d %d %f %f\n", &time, &nx, &ny, &fmin, &fmax);
44: if( i != 5 ) error("file scrambled. %d items in:%s\n",i,buf);
45: if(verbose) fprintf(stderr, "\n%g %d %d %g %g\n", time, nx, ny, fmin, fmax);
46: npts = nx*ny;
47: if(firstime){
48: data = (short *)Malloc(npts*sizeof(short));
49: firstime = 0;
50: }
51:
52: gmax = (fmax<0)?0:fmax;
53: gmin = (fmin>0)?0:fmin;
54: grange = gmax - gmin;
55: frange = fmax - fmin;
56: if(grange<=0){ v=0; u=0; v2=1;}
57: else{
58: f = 2*BIG-2;
59: v = log(grange)/log(2.)-14;
60: v2 = pow2(v);
61: while( 2*grange < f*v2 ){ v--; v2 /= 2; }
62: f = -(gmin+gmax)/(2*v2);
63: u = f;
64: if( (f<-BIG)||(f>BIG) ){
65: fprintf(stderr,"fmin=%g fmax=%g u=%d v=%d\n",fmin,fmax,u,v);
66: error("u out of bounds f=%g",f);
67: }
68: }
69:
70: rmax = -9999;
71: rmin = 9999;
72: for(d = data, i = 0; i < npts; i++, d++){
73: hi = getchar()-33;
74: if(hi < 0) hi = getchar()-33; /* discard newline */
75: lo = getchar()-33;
76: if( (hi=='~'-33) && (lo=='~'-33) ){
77: *d = -BIG-1; /* out of bounds */
78: }else{
79: r = hi*64+lo;
80: if(r>rmax) rmax=r;
81: if(r<rmin) rmin=r;
82: *d = u + (short)((fmin + (hi*64+lo)*frange/4095)/v2);
83: }
84: }
85: if(verbose) fprintf(stderr,"rmin=%d rmax=%d\n",rmin,rmax);
86: view2d(fd,nx,ny,time,u,v,0,0,0,data);
87: }
88: exit(0);
89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.