|
|
researchv10 Norman
#include <stdio.h>
#include <math.h>
#include "view2d.h"
char *progname;
int fd;
int verbose;
main(argc, argv)
char **argv;
{
int i, j;
int npts;
int nx, ny;
float f, v2;
short u, v;
float fmin, fmax, frange, grange, gmax, gmin;
char buf[512];
int hi, lo;
double time;
int firstime = 1;
short *data, *d;
int rmax, rmin, r;
char *errfil;
char *Malloc();
double pow2();
progname = argv[0];
verbose = 0;
if((argv[1][0]=='-')&&(argv[1][1]=='v')) verbose = 1;
/* open error message file */
umask(0);
errfil="/tmp/rks.err";
if(access(errfil,2)!=0) close(Creat(errfil,0666));
freopen(errfil,"a",stderr);
/* open output file */
fd = Creat(argv[1+verbose],0666);
while( gets(buf) != NULL ){
if(buf[0]==0) continue;
i = sscanf(buf, "%E %d %d %f %f\n", &time, &nx, &ny, &fmin, &fmax);
if( i != 5 ) error("file scrambled. %d items in:%s\n",i,buf);
if(verbose) fprintf(stderr, "\n%g %d %d %g %g\n", time, nx, ny, fmin, fmax);
npts = nx*ny;
if(firstime){
data = (short *)Malloc(npts*sizeof(short));
firstime = 0;
}
gmax = (fmax<0)?0:fmax;
gmin = (fmin>0)?0:fmin;
grange = gmax - gmin;
frange = fmax - fmin;
if(grange<=0){ v=0; u=0; v2=1;}
else{
f = 2*BIG-2;
v = log(grange)/log(2.)-14;
v2 = pow2(v);
while( 2*grange < f*v2 ){ v--; v2 /= 2; }
f = -(gmin+gmax)/(2*v2);
u = f;
if( (f<-BIG)||(f>BIG) ){
fprintf(stderr,"fmin=%g fmax=%g u=%d v=%d\n",fmin,fmax,u,v);
error("u out of bounds f=%g",f);
}
}
rmax = -9999;
rmin = 9999;
for(d = data, i = 0; i < npts; i++, d++){
hi = getchar()-33;
if(hi < 0) hi = getchar()-33; /* discard newline */
lo = getchar()-33;
if( (hi=='~'-33) && (lo=='~'-33) ){
*d = -BIG-1; /* out of bounds */
}else{
r = hi*64+lo;
if(r>rmax) rmax=r;
if(r<rmin) rmin=r;
*d = u + (short)((fmin + (hi*64+lo)*frange/4095)/v2);
}
}
if(verbose) fprintf(stderr,"rmin=%d rmax=%d\n",rmin,rmax);
view2d(fd,nx,ny,time,u,v,0,0,0,data);
}
exit(0);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.