Annotation of researchv8dc/cmd/view2d/level.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.