Annotation of researchv8dc/cmd/view2d/level.c, revision 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.