Annotation of researchv10dc/cmd/qsnap/library.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include "defines.h"
                      3: 
                      4: static char Mode = 2;  /* remembers resolution for check in window() */
                      5: 
                      6: advance(how)
                      7: {
                      8:        if (how)
                      9:                qcmd("\020", 1);        /* enable frame advance */
                     10:        else
                     11:                qcmd("\017", 1);        /* disable frame advance */
                     12:        qpause();
                     13: }
                     14: 
                     15: shutter(how)
                     16: {
                     17:        if (how)
                     18:                qcmd("\033", 1);        /* open shutter */
                     19:        else
                     20:                qcmd("\032", 1);        /* close and advance film */
                     21:        qpause();
                     22:        qpause();
                     23:        qpause();
                     24:        qpause();
                     25:        qpause();
                     26:        qpause();
                     27: }
                     28: 
                     29: beep()
                     30: {
                     31:        qcmd("\021", 1);        /* beep */
                     32:        qpause();
                     33: }
                     34: 
                     35: loadluts(wbuf)         /* 8 bit wide lookup tables */
                     36:        char *wbuf;
                     37: {      char rbuf[768];
                     38:        register int i;
                     39: 
                     40:        qcmd("\000", 1);        /* load the rgb LUT's */
                     41:        qpause();
                     42:        qwrite(wbuf, 768);
                     43:        qpause();
                     44:        qcmd("\001", 1);        /* read back rgb LUT's */
                     45:        qpause();
                     46: 
                     47:        if (qread(rbuf, 768) != 768)
                     48:                return 0;
                     49:        else
                     50:                for(i = 0; i < 768; i++)
                     51:                        if (rbuf[i] != wbuf[i])
                     52:                                return 0;
                     53:        qpause();
                     54:        return 1;
                     55: }
                     56: 
                     57: load12luts(wbuf)       /* 12 bit wide lookup tables */
                     58:        short *wbuf;
                     59: {
                     60:        register int i;
                     61:        short rbuf[768];
                     62: 
                     63:        printf("loading 12 bit lookup tables\n"); fflush(stdout);
                     64:        qpause();
                     65:        qcmd("\094", 1);        /* load the rgb LUT's */
                     66:        qpause();
                     67:        qwrite((char *)wbuf, 1536);     /* sizeof(short)*768 */
                     68:        qpause();
                     69:        qcmd("\096", 1);        /* read back rgb LUT's */
                     70:        qpause();
                     71: 
                     72:        if (qread((char *)rbuf, 1536) != 1536)
                     73:                return 0;
                     74:        else
                     75:                for(i = 0; i < 768; i++)
                     76:                        if (rbuf[i] != wbuf[i])
                     77:                                return 0;
                     78:        qpause();
                     79:        return 1;
                     80: }
                     81: 
                     82: singlepass(how)
                     83: {      /* set single pass pixel mode */
                     84:        switch (how) {
                     85:        default     :
                     86:        case NEUTRAL:   qcmd("\002", 1); printf("singlepass neutral\n"); break;
                     87:        case RED    :   qcmd("\003", 1); printf("singlepass red\n"); break;
                     88:        case GREEN  :   qcmd("\004", 1); printf("singlepass green\n"); break;
                     89:        case BLUE   :   qcmd("\005", 1); printf("singlepass blue\n"); break;
                     90:        }
                     91:        qpause();
                     92: }
                     93: 
                     94: threepass()
                     95: {      /* set three pass pixel mode */
                     96:        qcmd("\006", 1);
                     97:        qpause();
                     98:        printf("3pass mode\n");
                     99: }
                    100: 
                    101: nocalibs()
                    102: {      /* disable automatic calibrations */
                    103:        qcmd("\037", 1);
                    104:        qpause(); qpause();
                    105: }
                    106: 
                    107: testpattern(which)
                    108: {
                    109:        if (which)
                    110:                qcmd("\012", 1);        /* test pattern 1 */
                    111:        else
                    112:                qcmd("\013", 1);        /* test pattern 0 */
                    113:        qpause();
                    114: }
                    115: 
                    116: linedelay(n)
                    117:        unsigned char n;
                    118: {      /* interline time delay - to match host speed to qcr scanrate */
                    119: 
                    120:        qcmd("\014", 1);
                    121:        qpause();
                    122:        qwrite(n, 1);           /* max delay n msec per line */
                    123:        qpause();
                    124: }
                    125: 
                    126: version(data)
                    127:        char *data;
                    128: {
                    129:        qcmd("\015", 1);
                    130:        qpause();
                    131:        qread(data, 14);
                    132:        qpause();
                    133: }
                    134: 
                    135: window(x, y, w, h)
                    136: {
                    137:        unsigned char buf[8];
                    138:        int maxsz = (Mode == 2)?1536:3072;      /* 1536 = 2*768 = 2*3/4*1024 */
                    139: 
                    140:        if (w+x > maxsz || h-y > maxsz)
                    141:        {       printf("error: bad image size\n");
                    142:                if (Mode == 2)
                    143:                        printf("\tmax: -1024,  768, 1024,  -768\n");
                    144:                else
                    145:                        printf("\tmax: -2048, 1536, 2048, -1536\n");
                    146:                printf("\thave: %4d, %4d, %4d, %4d\n", x, y, x+w, y-h);
                    147:                return;
                    148:        }
                    149:        buf[0] = (x>>8)&255; buf[1] = x&255;
                    150:        buf[2] = (w>>8)&255; buf[3] = w&255;
                    151:        buf[4] = (y>>8)&255; buf[5] = y&255;
                    152:        buf[6] = (h>>8)&255; buf[7] = h&255;
                    153:        qpause();
                    154:        qcmd("\016", 1);
                    155:        qpause();
                    156:        qwrite(buf, 8);
                    157:        qpause();
                    158:        printf("window (%dx%d): %d %d %d %d\n", w, h, x, y, x+w, y-h);
                    159: }
                    160: 
                    161: filmtype(n)
                    162: {
                    163:        if (n == NONE || n == TMAX_100)
                    164:        {       customluts(n);
                    165:                return;
                    166:        }
                    167:        qcmd("\043", 1);
                    168:        qpause();
                    169:        switch (n) {
                    170:        default:
                    171:        case LINEAR    : qwrite("\001", 1); printf("linear lut's\n"); break;
                    172:        case POLA559   : qwrite("\002", 1); printf("filmtype pola559\n"); break;
                    173:        case EKTA100   : qwrite("\003", 1); printf("filmtype ekat100\n"); break;
                    174:        case EKTA100_4k: qwrite("\004", 1); printf("filmtype ekta100_4k\n"); break;
                    175:        case POLA559_4k: qwrite("\005", 1); printf("filmtype pola559_4k\n"); break;
                    176:        case POLA809_4k: qwrite("\007", 1); printf("filmtype pola809_4k\n"); break;
                    177:        }
                    178:        qpause();
                    179: }
                    180: 
                    181: moduleno()
                    182: {      char c;
                    183: 
                    184:        qcmd("\045", 1);
                    185:        qpause();
                    186:        qread(&c, 1);
                    187:        qpause();
                    188:        switch (c) {
                    189:        case 240: printf("no module\n"); break;
                    190:        case  16: printf("35mm module\n"); break;
                    191:        case  32: printf("4x5\" module\n"); break;
                    192:        case  64: printf("8x10\" module\n"); break;
                    193:        default : printf("bad module number %d\n", c);
                    194:        }
                    195:        return c;       /*  (none, m35, m120, or m240) */
                    196: }
                    197: 
                    198: setreso(n)
                    199: {
                    200:        if (n == '2')
                    201:        {       qcmd("\077", 1);
                    202:                printf("2k mode set\n"); 
                    203:        } else if (n == '4')
                    204:        {       qcmd("\078", 1);
                    205:                printf("4k mode set \n"); 
                    206:        } else
                    207:        {       printf("resolution must be either 2 or 4\n");
                    208:                return;
                    209:        }
                    210:        qpause();
                    211:        fflush(stdout);
                    212: }
                    213: 
                    214: resolution()
                    215: {
                    216:        Mode = qreso();
                    217:        switch (Mode) {
                    218:        case 2:  printf("2k mode\n"); break;
                    219:        case 4:  printf("4k mode\n"); break;
                    220:        default: printf("qcr: bad resolution %d\n", Mode);
                    221:        }
                    222:        fflush(stdout);
                    223:        qpause();
                    224:        return Mode;
                    225: }
                    226: 
                    227: handshake(how)
                    228: {
                    229:        if (how)
                    230:                qcmd("\063", 1);        /* enable full handshake */
                    231:        else
                    232:                qcmd("\062", 1);        /* disable (default) */
                    233:        qpause();
                    234: }
                    235: 
                    236: rotate(how)
                    237: {
                    238:        if (how)
                    239:                qcmd("\067", 1);        /* enable 90 deg rotation */
                    240:        else
                    241:                qcmd("\066", 1);        /* disable (default) */
                    242:        qpause();
                    243: }
                    244: 
                    245: brightness(r,g,b,n)
                    246: {
                    247:        char buf[4]; int oval;
                    248: 
                    249:        buf[0] = r; buf[1] = g; buf[2] = b; buf[3] = n;
                    250:        qcmd("\055", 1); qpause();
                    251:        qwrite(buf, 4);  qpause();
                    252: }
                    253: 
                    254: getbright(nq)
                    255:        char *nq;
                    256: {      char buf[10]; int i;
                    257: 
                    258:        qcmd("\073", 1); qpause();
                    259:        qread(buf, 10);  qpause();
                    260:        for (i = 0; i < 9; i++)
                    261:                nq[i] = buf[i+1]&0xFF;
                    262:        qpause();
                    263: }
                    264: 
                    265: whaterror(n)
                    266: {      /* primary erro code, as shown on display lights:
                    267:                128     64      32      16
                    268:                  8      4       2       1
                    269:        */
                    270:        switch (n) {
                    271:        case   1:       printf("out of film\n"); break;
                    272:        case 129:       printf("unexpected command byte\n"); break;
                    273:        case 130:       printf("unexpected data byte\n"); break;
                    274:        case 131:       printf("illegal command byte\n"); break;
                    275:        case 132:       printf("illegal data byte\n"); break;
                    276:        case 133:       printf("command interrupt\n"); break;
                    277:        case 134:       printf("unimplemented function\n"); break;
                    278:        case 145:       printf("memory fault\n"); break;
                    279:        case 146:       printf("gpib interface fault\n"); break;
                    280:        case 147:       printf("crt beam calibration fault\n"); break;
                    281:        case 161:       printf("module fault\n"); break;
                    282:        case 162:       printf("filter wheel fault\n"); break;
                    283:        default:        printf("-bad primary code (%d)-\n", n); break;
                    284:        }
                    285: }
                    286: 
                    287: qerror()
                    288: {      char buf[8];
                    289: 
                    290:        qcmd("\044", 1);
                    291:        qpause();
                    292:        qread(buf, 8);
                    293:        whaterror(buf[0]&0xFF);
                    294:        qpause();
                    295:        printf("Error: pri=0x%02x sec=0x%02x", (buf[0]&0xFF), (buf[1]&0xFF));
                    296:        printf("\n\tH=0x%02x L=0x%02x ", (buf[2]&0xFF), (buf[3]&0xFF));
                    297:        printf("D=0x%02x \n\tE=0x%02x ", (buf[4]&0xFF), (buf[5]&0xFF));
                    298:        printf("B=0x%02x C=0x%02x\n", (buf[6]&0xFF), (buf[7]&0xFF));
                    299: }
                    300: 
                    301: qreso()
                    302: {      unsigned char buf[64];
                    303:        int i, j;
                    304: 
                    305:        qpause();
                    306:        qcmd("\074", 1);
                    307:        qpause();
                    308:        qpause();
                    309:        qread(buf, 1);
                    310:        qread(&buf[1], buf[0]);
                    311:        qpause();
                    312:        qpause();
                    313:        return (int) buf[18];
                    314: }
                    315: 
                    316: qstatus()
                    317: {      unsigned char buf[64];
                    318:        int i, j;
                    319: 
                    320:        qcmd("\074", 1);
                    321:        qpause();
                    322:        memset(buf, 0, 64);
                    323:        qread(buf, 1);
                    324:        printf("QCR status (%d bytes):\n", buf[0]);
                    325:        qread(&buf[1], buf[0]);
                    326:        for (i = 0; i < 38; i++)
                    327:        {       switch (i) {
                    328:                case  6: printf("\timage height: %d\n", qnum(buf[i],buf[i+1]));
                    329:                         i++; break;
                    330:                case  8: printf("\ty-offset    : %d\n", qnum(buf[i],buf[i+1]));
                    331:                         i++; break;
                    332:                case 10: printf("\timage  width: %d\n", qnum(buf[i],buf[i+1]));
                    333:                         i++; break;
                    334:                case 12: printf("\tx-offset    : %d\n", qnum(buf[i],buf[i+1]));
                    335:                         i++; break;
                    336:                case 26: printf("\tframe counter: %d\n", qnum(buf[i],buf[i+1]));
                    337:                         i++; break;
                    338:                case 36: printf("\tdrift value : %d\n", qnum(buf[i],buf[i+1]));
                    339:                         i++; break;
                    340:                default: whatstatus(i, buf[i]); break;
                    341:                }
                    342:        }
                    343: }
                    344: 
                    345: qnum(a, b)
                    346:        unsigned char a, b;
                    347: {      short n;
                    348: 
                    349:        n = b + a<<8;
                    350:        return (int)n;
                    351: }
                    352: 
                    353: whatstatus(n, m)
                    354:        unsigned char m;
                    355: {
                    356:        switch (n) {
                    357:        case  0: if (m) printf("\texternal luts loaded\n"); break;
                    358:        case  1: if (m) printf("\tneutral  luts loaded\n"); break;
                    359:        case  2: printf("\t%d msec interline time delay\n", m); break;
                    360:        case  3: if (m) printf("\tend of film\n"); break;
                    361:        case  4: printf("\tautomatic filter wheel %sabled\n",(m)?"dis":" en");break;
                    362:        case  5: printf("\tauto camera operation  %sabled\n",(m)?"dis":" en");break;
                    363:        case 14: printf("\tmodule no: %d\n", m); break;
                    364:        case 15: printf("\tautomatic calibration %sabled\n",(m)?"en":"dis");break;
                    365:        case 16: printf("\tautomatic warbling    %sabled\n",(m)?"dis":" en");break;
                    366:        case 17: printf("\trunlength black jumps %sabled\n",(m)?"dis":" en");break;
                    367:        case 18: printf("\tresolution: %dk\n", m); break;
                    368:        case 19: printf("\tmode was %sternally selected\n", (m)?"ex":"in");break;
                    369:        case 20: if (m) printf("\timage is 90 degrees rotated\n"); break;
                    370:        case 21: if (m) printf("\timage is mirrored\n"); break;
                    371:        case 22: if (m) printf("\tunbuffered raster mode\n"); break;
                    372:        case 23: if (m) printf("\treturn to no filter disabled\n"); break;
                    373:        case 24: if (m) printf("\tx and y coordinates are swapped\n"); break;
                    374:        case 25: if (m) printf("\tred repeat is enabled\n"); break;
                    375:        case 28: if (m) printf("\tfilm is in camera\n"); break;
                    376:        case 29: if (m) printf("\thalf frame mode enabled\n"); break;
                    377:        case 30: if (m) printf("\tbulk back is in use\n"); break;
                    378:        case 31: if (m) printf("\timage is 180 degrees rotated\n"); break;
                    379:        case 32: if (m) printf("\t12 bit lookup tables are loaded\n"); break;
                    380:        case 33: printf("\tinternal timing constant 1: %d\n", m); break;
                    381:        case 34: printf("\tinternal timing constant 2: %d\n", m); break;
                    382:        case 35: if (m) printf("\t'irradiance modulation' is active\n"); break;
                    383:        default: printf("\t%2d: %2d\n", n, m); break;
                    384:        }
                    385: }
                    386: 
                    387: /* customized lookup tables */
                    388: 
                    389: #include "qlut2.h"     /* 8b  generated by /usr/gerard/CAL/QCR/qlutnew.c */
                    390: 
                    391: /*
                    392: #include "LUT_pola52.h"        ** awful, reversed? **
                    393: */
                    394: 
                    395: unsigned char lutpola52[] = {  /* pola52 lut for brightness 148 */
                    396:           0,   46,   54,   61,   67,   68,   68,   69,   69,   70, 
                    397:          70,   71,   71,   72,   72,   73,   73,   74,   74,   75, 
                    398:          75,   76,   76,   77,   77,   78,   78,   79,   79,   80, 
                    399:          80,   81,   81,   82,   82,   83,   83,   84,   84,   85, 
                    400:          85,   85,   86,   86,   86,   86,   87,   87,   87,   88, 
                    401:          88,   88,   88,   89,   89,   89,   90,   90,   90,   90, 
                    402:          91,   91,   91,   92,   92,   92,   92,   93,   93,   93, 
                    403:          94,   94,   94,   94,   95,   95,   95,   96,   96,   96, 
                    404:          96,   97,   97,   97,   98,   98,   98,   98,   99,   99, 
                    405:          99,  100,  100,  100,  100,  101,  101,  101,  102,  102, 
                    406:         103,  103,  104,  104,  105,  105,  105,  106,  106,  107, 
                    407:         107,  108,  108,  109,  109,  110,  110,  111,  111,  112, 
                    408:         112,  113,  113,  114,  114,  115,  115,  115,  116,  116, 
                    409:         117,  117,  118,  118,  119,  119,  120,  120,  120,  121, 
                    410:         121,  122,  122,  122,  123,  123,  124,  124,  124,  125, 
                    411:         125,  126,  126,  126,  127,  127,  128,  128,  128,  129, 
                    412:         129,  130,  130,  130,  131,  131,  132,  132,  132,  133, 
                    413:         133,  134,  134,  134,  135,  135,  136,  136,  136,  137, 
                    414:         137,  138,  138,  139,  139,  139,  140,  140,  141,  141, 
                    415:         141,  142,  142,  143,  143,  144,  144,  144,  145,  145, 
                    416:         146,  146,  147,  147,  147,  148,  148,  149,  149,  150, 
                    417:         150,  150,  151,  151,  152,  152,  153,  154,  154,  155, 
                    418:         156,  157,  158,  159,  160,  161,  161,  162,  163,  164, 
                    419:         165,  166,  167,  168,  169,  169,  171,  173,  175,  176, 
                    420:         178,  180,  182,  184,  185,  188,  195,  201,  205,  208, 
                    421:         211,  215,  218,  221,  234,  255, 
                    422: };
                    423: 
                    424: 
                    425: customluts(n)
                    426: {      short all12uts[768];
                    427:        unsigned char alluts[768];
                    428:        register int i;
                    429: 
                    430:        switch (n) {
                    431:        case TMAX_100:
                    432:                for (i = 0; i < 768; i++)
                    433:                        alluts[i] = qcr_lut[i%256];
                    434:                if (!loadluts(alluts))
                    435:                printf("loading new lookup tables failed\n");
                    436:                break;
                    437:        default:        /* polaroid type 52 */
                    438:                for (i = 0; i < 768; i++)
                    439:                        alluts[i] = lutpola52[i%256];
                    440:                if (!loadluts(alluts))
                    441:                printf("loading new lookup tables failed\n");
                    442:                break;
                    443:        }
                    444: }
                    445: 
                    446: /*
                    447: not implemented:
                    448: 18      n       +      red     runlength encoded single pass pixel mode
                    449: 19      n       +      green   runlength sppm
                    450: 20      n       +      blue    runlength sppm
                    451: 21      n       +      neutral runlength sppm
                    452: 22      n       +      three pass runlength image
                    453: 
                    454: 24      -       -      disable automatic filter wheel control
                    455: 25      -       -      enable  automatic filter wheel control (default)
                    456: 
                    457: 29     256      -      load a neutral LUT (default for neutral is blue lut)
                    458: 30     256      -      read neutral LUT
                    459: 31/32   -       -      disable/enable automatic calibrations
                    460: 33/34   -       -      disable/enable warble sounds at end of image
                    461: 38      -       +      start an intensity calibration for used levels
                    462: 39      -       +      intensity calibration for all 9 levels
                    463: 
                    464: 40/41   -       -      disable/enable black jumping (for runlength)
                    465: 48/49   -       -      disable/enable mirror imaging
                    466: 52/53   -       -      disable/enable end-of-image filter wheel movement
                    467: 54/55   -       -      disable/enable switch of x/y coordinates
                    468: 56/57   -       -      disable/enable red repeat mode
                    469: */

unix.superglobalmegacorp.com

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