Annotation of researchv10no/cmd/qsnap/qt.c, revision 1.1.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.