|
|
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: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.