Annotation of researchv10no/cmd/view2d/Tri/pack.c, revision 1.1

1.1     ! root        1: /*
        !             2:   ...dump vector in two-digit base-64 compressed format...
        !             3: */
        !             4: 
        !             5: #include <stdio.h>
        !             6: #include "../view2d.h"
        !             7: #define INF 1e25
        !             8: 
        !             9: pack(n,f)
        !            10:   int n;
        !            11:   float f[];
        !            12: {
        !            13:   float *t;
        !            14:   float fmin = INF, fmax = -INF;
        !            15:   float floor = -INF;
        !            16:   for(t=f+n; t!=f; t--){
        !            17:     if( *t<fmin) fmin= *t;
        !            18:     if( *t>fmax) fmax= *t;
        !            19:     }
        !            20:   printf("%d %e %e\n",n,fmin,fmax);
        !            21:   v2pack(n,f,fmin,fmax,floor);
        !            22: }
        !            23: 
        !            24: /* write compressed values */
        !            25: v2pack(n,data,fmin,fmax,floor)
        !            26:   int n;
        !            27:   float *data;
        !            28:   float fmin, fmax;  /* data range before compression */
        !            29:   float floor;  /* value to flag out of bounds */
        !            30: {
        !            31:   int code, hi, lo, i;
        !            32:   float frange, slope, t;
        !            33:   frange = fmax - fmin;
        !            34:   if(frange==0.) frange=1.;
        !            35:   slope = 4095 / frange;
        !            36:   for(i=1; i<=n; i++, data++){
        !            37:     t = *data;
        !            38:     if( t <= floor ){
        !            39:       putchar('~');
        !            40:       putchar('~');
        !            41:     }else{
        !            42:       code = slope*(t-fmin);
        !            43:          if(code>4095){ code=4095; }else if(code<0){ code = 0; }
        !            44:       lo = code%64;
        !            45:       hi = code/64;
        !            46:       putchar(hi+33);
        !            47:       putchar(lo+33);
        !            48:     }
        !            49:     if(i%38==0) putchar('\n');
        !            50:   }
        !            51:   if(n%38!=0) putchar('\n');
        !            52: }

unix.superglobalmegacorp.com

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