|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <math.h> ! 3: #include "view2d.h" ! 4: ! 5: extern Rd2d rd; ! 6: char *progname; ! 7: short timewarp; ! 8: double ts, te; ! 9: int verbose; ! 10: int debug; ! 11: ! 12: main(argc,argv) ! 13: int argc; ! 14: char **argv; ! 15: { ! 16: register char *p; ! 17: register int prange; ! 18: register short *q; ! 19: register int r, rmin; ! 20: short *qend; ! 21: char *pict; ! 22: int ip; ! 23: short *v; ! 24: char *map; ! 25: int black; ! 26: int ncolor = 32; ! 27: int ps; ! 28: int wid; ! 29: int coldstart = 1; ! 30: int blanking = 1; ! 31: int singstep = 0; ! 32: int staticd = 0; ! 33: int blueback = 0; ! 34: int holly = 0; ! 35: int i, j; ! 36: short nx, ny, fru, frv; ! 37: int frame, nframe, fx, fy, fz; ! 38: /* RED GREEN BLUE */ ! 39: static int bankl[] = { 0x7E, 0x75, 0x53 }; ! 40: static int bankc[] = { 0x4, 0x2, 0x1 }; ! 41: int mapr[256], mapg[256], mapb[256]; ! 42: int period = 5; ! 43: int printcol = 0; ! 44: long ring, ttim; ! 45: int nf; ! 46: double frtime; ! 47: double tim[201]; ! 48: char *Malloc(); ! 49: FILE *terminal = NULL; ! 50: char junk[150]; ! 51: double cleft, cright; ! 52: timewarp = -1; ! 53: verbose = 0; ! 54: progname=argv[0]; ! 55: map = NULL; ! 56: debug = 0; ! 57: ! 58: for(argc--, argv++; *argv && (**argv == '-' ); argv++){ ! 59: switch(argv[0][1]){ ! 60: case 'B': ! 61: blueback++; ! 62: break; ! 63: case 'D': ! 64: debug++; ! 65: break; ! 66: case 'S': ! 67: switch(argv[0][2]){ ! 68: case 'a': ! 69: case 'A': singstep = 1; ! 70: terminal=NULL; ! 71: break; ! 72: case 'f': ! 73: case 'F': singstep = 1; ! 74: terminal = fopen("/dev/tty","r"); ! 75: if(terminal==NULL) error("can't open /dev/tty"); ! 76: break; ! 77: case 'M': singstep = 1; ! 78: if(argv[0][3]!='\0') holly = atoi(&argv[0][3]); ! 79: else holly = 1; ! 80: break; ! 81: case 'S': staticd = 1; ! 82: blanking = 1-blanking; ! 83: break; ! 84: } ! 85: break; ! 86: case 'b': ! 87: blanking = 1-blanking; ! 88: break; ! 89: case 'c': ! 90: ncolor = atoi(&argv[0][2]); ! 91: break; ! 92: case 'm': ! 93: map = &argv[0][2]; ! 94: break; ! 95: case 'p': ! 96: sscanf(&argv[0][2], "%d",&period); ! 97: break; ! 98: case 't': ! 99: i = sscanf(&argv[0][2], "%he, %he", &ts, &te); ! 100: if(i<=0) error("bad TS,TE"); ! 101: timewarp = i; ! 102: break; ! 103: case 'v': ! 104: verbose++; ! 105: if(argv[0][2]=='c') printcol++; ! 106: break; ! 107: case 'w': ! 108: coldstart = 0; ! 109: break; ! 110: case 'T': ! 111: case 'g': ! 112: case 's': ! 113: break; ! 114: default: ! 115: err: ! 116: fprintf(stderr,"unrecognized option: %s\n",argv[0]); ! 117: exit(1); ! 118: } ! 119: } ! 120: ! 121: if(*map=='a'){ ncolor=63; } ! 122: if((timewarp>=0)&&verbose) ! 123: fprintf(stderr,"timewarp=%d ts=%g te=%g\n",timewarp,ts,te); ! 124: rd2dh(0,&nx,&ny); ! 125: if((timewarp>=0)&&verbose) ! 126: fprintf(stderr,"timewarp=%d ts=%g te=%g\n",timewarp,ts,te); ! 127: if(verbose){ ! 128: fprintf(stderr,"nx=%d ny=%d\n",nx,ny); ! 129: fprintf(stderr,"fmin=%g fmax=%g\n",rd.fmin,rd.fmax); ! 130: if(holly) fprintf(stderr,"snap %d\n",holly); ! 131: fprintf(stderr,"blanking=%d\n",blanking); ! 132: } ! 133: if((nx>512)||(ny>512)) error("picture too large %d,%d\n",nx,ny); ! 134: v = (short *)Malloc(nx*ny*sizeof(short)); ! 135: pict = (char *)Malloc(nx*ny*sizeof(char)); ! 136: if(!debug) cvinit(coldstart); ! 137: ! 138: j = (nx>ny)?nx:ny; ! 139: if ( j>256 ){ ps=512; wid=1; } ! 140: else if( j>128 ){ ps=256; wid=2; } ! 141: else if( j> 64 ){ ps=128; wid=4; } ! 142: else { ps= 64; wid=8; } ! 143: ! 144: prange = ((int)rd.pmax)-rd.pmin; ! 145: if(prange==0) prange = 1; ! 146: if(!debug){ ! 147: black = cvmap(map,ncolor-1,mapr,mapg,mapb); ! 148: if(blueback){ cvput(0x1C);cvput(black);cvput(0);cvput(0);cvput(120); } ! 149: cvvalue(black,black,black); ! 150: cvflood(); ! 151: j = (nx>ny)?nx:ny; ! 152: if(!staticd){ ! 153: if ( j>256 ){ zoom(1); } ! 154: else if( j>128 ){ zoom(2); } ! 155: else if( j> 64 ){ zoom(4); } ! 156: else { zoom(8); } ! 157: } ! 158: if(printcol){ ! 159: for(j=0; j<=ncolor-1; j++){ ! 160: cleft = rd.fmin + j*(rd.fmax-rd.fmin)/ncolor; ! 161: cright = rd.fmin + (j+1)*(rd.fmax-rd.fmin)/ncolor; ! 162: fprintf(stderr,"color %4d%4d%4d = %g to %g\n", ! 163: mapr[j], mapg[j], mapb[j], cleft, cright ); ! 164: } ! 165: } ! 166: } ! 167: ! 168: frame=blanking; ! 169: while(rd2di(&frtime,v)){ ! 170: if(verbose) fprintf(stderr,"time=%.9g frame %d\n",frtime,frame); ! 171: if(frame<200) tim[frame]=frtime; ! 172: if(coldstart!=0){ ! 173: fx = frame%wid; ! 174: fy = wid-1 - (frame/wid)%wid; ! 175: fz = frame/(wid*wid); ! 176: if(singstep){ fx=1; fy=1; fz=1; } ! 177: if(fz>2) error("too many frames %d time=%g",frame,frtime); ! 178: p = pict; ! 179: q = v; ! 180: if(*map=='a'){ ! 181: qend = q+nx*ny; ! 182: for(; q<qend; q++,p++){ ! 183: *p = *q; ! 184: } ! 185: }else{ ! 186: rmin = rd.pmin; ! 187: qend = q+nx*ny; ! 188: for(; q<qend; q++,p++){ ! 189: r = *q; ! 190: if( r < -BIG ){ *p = black; } ! 191: else{ ! 192: *p = ((r-rmin)*ncolor)/prange; ! 193: if(*p>=ncolor) *p = ncolor-1; ! 194: } ! 195: } ! 196: } ! 197: if(!debug){ ! 198: if(!staticd) cvload(4,ps*fx+nx/2,ps*fy+ny/2); ! 199: lutrte(bankl[fz]); ! 200: image(pict, ps*fx, ps*fy, ps*fx + nx-1, ps*fy + ny-1, bankc[fz]); ! 201: cvflush(); ! 202: } ! 203: if(singstep){ ! 204: if(holly){ ! 205: /* ***commented out because rd.nfr no longer defined*** ! 206: fprintf(stderr,"time=%g %.1f\n",frtime, ! 207: holly*13.5*(rd.nfr-frame+1)/60.); /**/ ! 208: sprintf(junk,"snap %d",holly); ! 209: system(junk); ! 210: }else if(terminal==NULL){ ! 211: fprintf(stderr,"time=%g frame %d\n",frtime,frame); ! 212: }else{ ! 213: fprintf(stderr,"time=%g frame %d GO? ",frtime,frame); ! 214: fgets(junk,100,terminal); ! 215: if((junk[0]=='s')||(junk[0]=='S')){ ! 216: system("snap"); ! 217: junk[0]=' '; ! 218: } ! 219: if(sscanf(junk,"%d",&j)==1){ ! 220: if(verbose) fprintf(stderr," skipping %d.. ",j); ! 221: frame += j-1; ! 222: rd2dj(j-1); ! 223: } ! 224: } ! 225: } ! 226: } ! 227: frame++; ! 228: } ! 229: nframe = frame-blanking; ! 230: if(verbose) fprintf(stderr,"%d frames\n%d colors\n",nframe,ncolor); ! 231: if(debug||singstep||staticd){ exit(0); } ! 232: ! 233: if(nframe>1){ ! 234: if(nframe>200) nframe = 200; ! 235: period *= 1000; /* convert to milliseconds */ ! 236: ttim = (tim[nframe]-tim[blanking]); ! 237: if(ttim<=0){ /* if user gave unreasonable times, fake it */ ! 238: for(i=blanking+1; i<=nframe; i++){ ! 239: tim[i] = tim[i-1]+1; ! 240: } ! 241: } ! 242: if(blanking) tim[0] = 2*tim[1]-tim[2]; ! 243: tim[nframe+1] = 2*tim[nframe]-tim[nframe-1]; ! 244: ttim = (tim[nframe]-tim[1] + (tim[2]-tim[1]+tim[nframe]-tim[nframe-1])/2); ! 245: } ! 246: frame=blanking; ! 247: while(1){ /**** infinite loop ****/ ! 248: fx = frame%wid; ! 249: fy = wid-1 - (frame/wid)%wid; ! 250: fz = frame/(wid*wid); ! 251: cvload(4,ps*fx+nx/2,ps*fy+ny/2); ! 252: lutrte(bankl[fz]); ! 253: cvflush(); ! 254: if(nframe==1) exit(0); ! 255: ring = (frame==0)? 500: (period*(tim[frame+1]-tim[frame-1])) / (2*ttim); ! 256: /* conceptually, display frame i from halfway between (i-1,i) until ! 257: halfway between (i,i+1). ring = delay time in ms. */ ! 258: ring = (ring*60)/1000; /* convert to 1/60 sec ticks */ ! 259: while( ring>=120 ){ ! 260: nap(119); ! 261: ring -= 119; ! 262: } ! 263: nap(ring); ! 264: if(++frame>nframe-1+blanking) frame = 0; ! 265: } ! 266: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.