Annotation of researchv10no/cmd/view2d/level.c, revision 1.1

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

unix.superglobalmegacorp.com

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