Annotation of researchv10no/cmd/qsnap/qt.c, revision 1.1

1.1     ! root        1: #include       <stdio.h>
        !             2: #include       <sys/types.h>
        !             3: #include       <sys/stat.h>
        !             4: #include       "defines.h"
        !             5: #include       "piclib.h"
        !             6: 
        !             7: #define Min(a,b)       ((a)>(b)?(b):(a))
        !             8: #define Max(a,b)       ((a)<(b)?(b):(a))
        !             9: 
        !            10: int Wmax, Hmax, Xmin, Ymin;
        !            11: int Dither=0, Times=1, Bright=2, Film=8, Filter=GREEN, Reso=4;
        !            12: int xoffset=0, yoffset=0, fad=1, h, w, H, W;
        !            13: struct pfile image;
        !            14: unsigned char nq[9];
        !            15: 
        !            16: give_status()
        !            17: {      int i;
        !            18:        getbright(nq);
        !            19:        Reso = resolution();
        !            20:        printf("qbright ref     36 58 81 103 126 148 171 193 220\n");
        !            21:        printf("        actual  ");
        !            22:        for(i = 0; i < 9; i++)
        !            23:                printf("%d ", nq[i]);
        !            24:        printf("\n");
        !            25:        moduleno();
        !            26:        printf("shutter: %s\n", (fad)?"automatic":"manual");
        !            27:        printf("dither : %d\n", Dither);
        !            28:        printf("offset : %d,%d\n", xoffset, yoffset);
        !            29:        printf("enlarge: %d\n", Times);
        !            30:        if (W || H) printf("image  : %d,%d\n", W, H);
        !            31:        printf("filmtype: ");
        !            32:        switch (Film) {
        !            33:        case NONE:      printf("polaroid type 52\n"); break;
        !            34:        case LINEAR:    printf("linear lookup tables\n"); break;
        !            35:        case EKTA100:    printf("ektachrome 100 - for 2k mode\n"); break;
        !            36:        case EKTA100_4k: printf("ektachrome 100 - for 4k mode\n"); break;
        !            37:        case POLA559:    printf("polaroid type 559 - for 2k mode\n"); break;
        !            38:        case POLA559_4k: printf("polaroid type 559 - for 4k mode\n"); break;
        !            39:        case POLA809_4k: printf("polaroid type 809 - for 4k mode\n"); break;
        !            40:        case TMAX_100:  printf("tmax_100 film\n"); break;
        !            41:        default:        printf("filmtype unknown\n"); break;
        !            42:        }
        !            43:        printf("filter  : ");
        !            44:        switch (Filter) {
        !            45:        case   RED: printf("red\n"); break;
        !            46:        case GREEN: printf("green\n"); break;
        !            47:        case  BLUE: printf("blue\n"); break;
        !            48:        case NEUTRAL: printf("neutral\n"); break;
        !            49:           default: printf("none\n"); break;
        !            50:        }
        !            51: }
        !            52: 
        !            53: reminder()
        !            54: {      printf("PM: reset, bright, enlarge, filmtype, load, expose\n");
        !            55: }
        !            56: 
        !            57: help()
        !            58: {      printf("reset              -    a full reset\n");
        !            59:        printf("status             -    report all current settings\n");
        !            60:        printf("error              -    expanded error status\n");
        !            61:        printf("exit               -    return to Unix\n");
        !            62:        printf("load     imagefile -    read in the file to be printed\n");
        !            63:        printf("dither   on/off/N  -    dithering off, on, on mod(N)\n");
        !            64:        printf("shutter  open/closed/auto - auto is default\n");
        !            65:        printf("filter   red/green/blue/neutral - is used for b&w imaging\n");
        !            66:        printf("expose             -    a black&white image\n");
        !            67:        printf("expose3            -    a color image\n");
        !            68:        printf("expose1  red/green/blue - imaging of 1 specific channel\n");
        !            69:        printf("offset   X Y       -    offset from lower left hand corner\n");
        !            70:        printf("bright   N         -    set brightness level N [0-8]\n");
        !            71:        printf("enlarge  N         -    enlargement factor\n");
        !            72:        printf("reso     N         -    set resolution N [2,4]\n");
        !            73:        printf("filmtype tmax_100  -    select tmax_100 correction tables\n");
        !            74:        printf("        other available filmtypes: \n");
        !            75:        printf("        linear  \t(no correction)\n");
        !            76:        printf("        tmax_100\t(Kodak 35mm Tmax 100 ASA b&w negative)\n");
        !            77:        printf("        ekta_100\t(Kodak 35mm Ektachrome 100 ASA color neg)\n");
        !            78:        printf("        pola_52 \t(Polaroid Type 52  b&w 4x5 inch sheet)\n");
        !            79:        printf("        pola_559\t(Polaroid Type 559 b&w pack film)\n");
        !            80:        printf("        pola_809\t(Polaroid Type 809 color 8x10 inch)\n");
        !            81: }
        !            82: 
        !            83: set_luts(n)
        !            84: {
        !            85:        switch (n) {
        !            86:        case NONE:
        !            87:        case LINEAR:
        !            88:        case POLA559:
        !            89:        case EKTA100:
        !            90:        case EKTA100_4k:
        !            91:        case POLA559_4k:
        !            92:        case POLA809_4k:
        !            93:        case TMAX_100:
        !            94:                Film = n;
        !            95:                filmtype(n);
        !            96:                break;
        !            97:        default:
        !            98:                printf("bad filmtype %d\n", n);
        !            99:                break;
        !           100:        }
        !           101: }
        !           102: 
        !           103: main()
        !           104: {      reminder();
        !           105:        while (1)
        !           106:        {       printf("qt: ");
        !           107:                fflush(stdout);
        !           108:                yyparse();
        !           109:                fflush(stdout);
        !           110:        }
        !           111: }
        !           112: 
        !           113: setbright(n)
        !           114: {      extern int Errors;
        !           115:        Bright = Min((Max(0,n)), 8);
        !           116:        brightness(Bright, Bright, Bright, Bright);
        !           117:        if (!Errors)
        !           118:        printf("brightness %d = %d\n", n, nq[n]);
        !           119: }
        !           120: 
        !           121: full_reset()
        !           122: {
        !           123:        qreset();
        !           124:        getbright(nq);
        !           125:        Reso = resolution();
        !           126:        nocalibs();
        !           127:        handshake(1);
        !           128:        filmtype(Film);
        !           129:        advance(fad);
        !           130:        setbright(Bright);
        !           131: }
        !           132: 
        !           133: load_image(fname)
        !           134:        char *fname;
        !           135: {
        !           136:        int fd;
        !           137: 
        !           138:        if((fd = openf(fname, &image)) == -1 || !readf(fd, &image))
        !           139:        {       printf("bad image %s\n", fname);
        !           140:                closef(&image);
        !           141:        }
        !           142:        close(fd);
        !           143:        W = image.r.corner.x - image.r.origin.x;
        !           144:        H = image.r.corner.y - image.r.origin.y;
        !           145:        if (Reso == 2)
        !           146:        {       xoffset = (2048-W)/2;
        !           147:                yoffset = (1536-H)/2;
        !           148:        } else
        !           149:        {       xoffset = (4096-W)/2;
        !           150:                yoffset = (2732-H)/2;
        !           151:        }
        !           152:        printf("%s loaded, size %dx%d, offset %d,%d\n",
        !           153:                fname, W, H, xoffset, yoffset);
        !           154:        fflush(stdout);
        !           155: }
        !           156: 
        !           157: crop()
        !           158: {      if (!image.pixred)
        !           159:        {       printf("error: no image loaded\n");
        !           160:                return 0;
        !           161:        }
        !           162:        if (Reso == 2)
        !           163:        {       Wmax =  2048; Hmax =  1366;
        !           164:                Xmin = -1024; Ymin =  683;
        !           165:        } else
        !           166:        {       Wmax =  4096; Hmax =  2732;
        !           167:                Xmin = -2048; Ymin =  1366;
        !           168:        }
        !           169:        w = Min((Wmax/Times - xoffset), W);
        !           170:        h = Min((Hmax/Times - yoffset), H);
        !           171:        printf("image: %d x %d -> %d x %d\n", W, H, w, h);
        !           172:        printf("offset %d %d, enlarge %d\n", xoffset, yoffset, Times);
        !           173:        window(Xmin+xoffset, Ymin-yoffset, w*Times, h*Times);
        !           174:        fflush(stdout);
        !           175:        return 1;
        !           176: }
        !           177: 
        !           178: one_pass(which)
        !           179: {
        !           180:        if (!crop()) return;
        !           181:        singlepass(Filter);
        !           182:        switch (which) {
        !           183:        default:
        !           184:        case   RED: onechannel(image.pixred, h, w); break;
        !           185:        case GREEN: onechannel(image.pixgrn, h, w); break;
        !           186:        case  BLUE: onechannel(image.pixblu, h, w); break;
        !           187:        }
        !           188: }
        !           189: 
        !           190: new_offset(a, b)
        !           191: {      xoffset = a;
        !           192:        yoffset = b;
        !           193: }
        !           194: 
        !           195: three_pass(height, width)
        !           196: {      extern int Errors;
        !           197:        if (!crop() || Errors) return;
        !           198:        if (image.nchan != 3)
        !           199:        {       printf("error: no color image loaded\n");
        !           200:                return;
        !           201:        }
        !           202:        threepass();
        !           203:        printf("red.."); onechannel(image.pixred, h, w);
        !           204:        printf("grn.."); onechannel(image.pixgrn, h, w);
        !           205:        printf("blu.."); onechannel(image.pixblu, h, w);
        !           206: }
        !           207: 
        !           208: onechannel(from, h, w)
        !           209:        unsigned char *from;
        !           210: {
        !           211:        register i, j, k;
        !           212:        register unsigned char *p, *q;
        !           213:        unsigned char obuf[8192];
        !           214:        int chunk = w*Times;
        !           215:        extern int Errors;
        !           216: 
        !           217:        fflush(stdout);
        !           218:        if (Errors)
        !           219:                return;
        !           220:        if (Dither)
        !           221:                onedither(from, h, w);
        !           222:        else
        !           223:        for (i = 0; i < h; i++)
        !           224:        {       p = &from[W*i];
        !           225:                q = obuf;
        !           226:                for (j = 0; j < w; j++, p++)
        !           227:                for (k = 0; k < Times; k++)
        !           228:                        *q++ = *p;
        !           229:                for (k = 0; k < Times; k++)
        !           230:                {       qwrite(obuf, chunk);
        !           231:                        if (chunk > 2048) qwait(200);
        !           232:        }       }
        !           233: }
        !           234: 
        !           235: short Nrand[5000];
        !           236: 
        !           237: prerand()
        !           238: {      register int i, D1=Dither, D2=Dither/2;
        !           239: 
        !           240:        for (i = 0; i < 5000; i++)
        !           241:                Nrand[i] = (short) (nrand(D1) - D2);
        !           242: }
        !           243: 
        !           244: onedither(from, h, w)
        !           245:        unsigned char *from;
        !           246: {
        !           247:        register int c, m, kk=0;
        !           248:        register unsigned char *p, *q;
        !           249:        unsigned char obuf[8192];
        !           250:        int i, j, k;
        !           251:        int chunk = w*Times;
        !           252: 
        !           253:        prerand();
        !           254:        for (i = 0; i < h; i++)
        !           255:        for (k = 0; k < Times; k++)
        !           256:        {       q = obuf;
        !           257:                p = &from[W*i];
        !           258:                j = w;
        !           259:                do {    m = Times;
        !           260:                        do {    c = *p + Nrand[kk];
        !           261:                                if (++kk >= 5000) kk = 0;
        !           262:                                if (c<0)
        !           263:                                        c=0;
        !           264:                                else if (c>255)
        !           265:                                        c=255;
        !           266:                                *q++ = c;
        !           267:                        } while(--m > 0);
        !           268:                        p++;
        !           269:                } while(--j > 0);
        !           270:                qwrite(obuf, chunk);
        !           271:        }
        !           272: }
        !           273: 
        !           274: qwait(n)
        !           275: {      int i;
        !           276:        for (i = 0; i < n; i++) ;
        !           277: }
        !           278: 
        !           279: dimension(fd)
        !           280: {      struct stat bam;
        !           281:        int N;
        !           282:        extern float fsqrt();
        !           283: 
        !           284:        if (fstat(fd, &bam)==0)
        !           285:        {       N = bam.st_size;
        !           286:                N = (int) fsqrt((double)N+1.0);
        !           287:                return N;
        !           288:        }
        !           289:        return 0;
        !           290: }

unix.superglobalmegacorp.com

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