|
|
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.