|
|
1.1 ! root 1: #include <X/mit-copyright.h> ! 2: ! 3: /* Copyright Massachusetts Institute of Technology 1985 */ ! 4: ! 5: #ifndef lint ! 6: static char *rcsid_pikapix_c = "$Header: pikapix.c,v 10.5 86/02/01 16:11:15 tony Rel $"; ! 7: #endif lint ! 8: ! 9: #include <X/Xlib.h> ! 10: #include <stdio.h> ! 11: #include <strings.h> ! 12: #include "../cursors/target.cursor" ! 13: #include "../cursors/target_mask.cursor" ! 14: #include <sys/types.h> ! 15: ! 16: #define pik_width 15 ! 17: #define pik_height 15 ! 18: static short pik_bits[] = { ! 19: 0x8080, 0x8080, 0x81c0, 0x83e0, ! 20: 0x87f0, 0x8ff8, 0x9ffc, 0xbffe, ! 21: 0xbffe, 0xbffe, 0xbffe, 0xbffe, ! 22: 0xbffe, 0xbffe, 0x8000}; ! 23: static short pik_mask_bits[] = { ! 24: 0x8080, 0x81c0, 0x83e0, 0x87f0, ! 25: 0x8ff8, 0x9ffc, 0xbffe, 0xffff, ! 26: 0xffff, 0xffff, 0xffff, 0xffff, ! 27: 0xffff, 0xffff, 0xffff}; ! 28: ! 29: #define MIN(a,b) (((a) < (b)) ? (a) : (b)) ! 30: ! 31: #define MAXIDX 200 ! 32: #define PROMPT "#ffffff -> " ! 33: #define ASKSIZE (sizeof(PROMPT) + 25) ! 34: ! 35: #define RGBSIDE 50 ! 36: #define RGBWIDTH (RGBSIDE * 3) ! 37: #define RGBHEIGHT (RGBSIDE * 2) ! 38: ! 39: #define BASEDELTA (1<<8) ! 40: ! 41: char *malloc(); ! 42: ! 43: Window win; ! 44: u_char *buf; ! 45: u_char transbuf[256]; ! 46: int width, height; ! 47: int pixels[5]; ! 48: Color cdefs[2]; ! 49: Color origdefs[256]; ! 50: WindowInfo rinfo; ! 51: Font font; ! 52: Color rgbdefs[3]; ! 53: Window rgb, redw, greenw, bluew; ! 54: int rgbx, rgby; ! 55: int shared = 0; ! 56: ! 57: main(argc, argv) ! 58: int argc; ! 59: char **argv; ! 60: { ! 61: Cursor cursor; ! 62: XEvent ev; ! 63: XExposeEvent *exp = (XExposeEvent *) &ev; ! 64: XMouseMovedEvent *mot = (XMouseMovedEvent *) &ev; ! 65: register XButtonPressedEvent *but = (XButtonPressedEvent *) &ev; ! 66: WindowInfo winfo; ! 67: Window ask; ! 68: int asking = 0; ! 69: int askwidth; ! 70: int askheight; ! 71: char colorbuf[MAXIDX + sizeof(PROMPT) + 1]; ! 72: register char *colorname = &colorbuf[sizeof(PROMPT)]; ! 73: int coloridx = 0; ! 74: int mixing = 0; ! 75: int mixtrack = 0; ! 76: char *string; ! 77: int nbytes; ! 78: int tpix, cnt; ! 79: unsigned char pixel; ! 80: Color cdef; ! 81: FontInfo finfo; ! 82: int xoff, yoff; ! 83: char *display = NULL; ! 84: ! 85: for (cnt = 1; cnt < argc; cnt++) { ! 86: if (!*argv[cnt]) continue; ! 87: if (strcmp(argv[cnt], "-s") == 0) ! 88: shared = 1; ! 89: else if (index(argv[cnt], ':')) ! 90: display = argv[cnt]; ! 91: else { ! 92: fprintf(stderr, "usage: pikapix [-s] [host:display]\n"); ! 93: (void) fflush(stderr); ! 94: exit(1); ! 95: } ! 96: } ! 97: if (!XOpenDisplay(display)) { ! 98: perror("pikapix"); ! 99: exit(1); ! 100: } ! 101: if (DisplayPlanes() < 2 || DisplayPlanes() > 8) ! 102: Error("only works on displays with 2 to 8 planes"); ! 103: cursor = XCreateCursor(target_width, target_height, ! 104: target_bits, target_mask_bits, ! 105: 8, 8, BlackPixel, WhitePixel, GXcopy); ! 106: while (!XGrabMouse(RootWindow, cursor, ButtonPressed)) ! 107: sleep(1); ! 108: XNextEvent(&ev); ! 109: XUngrabMouse(); ! 110: win = but->subwindow; ! 111: if (!win) ! 112: Error("no window selected"); ! 113: xoff = 0; ! 114: yoff = 0; ! 115: switch (but->detail & ValueMask) { ! 116: case LeftButton: ! 117: case MiddleButton: ! 118: do { ! 119: XInterpretLocator(win, &but->x, &but->y, &but->subwindow, ! 120: but->location); ! 121: if (!but->subwindow) ! 122: break; ! 123: if (!XQueryWindow(win, &winfo)) ! 124: Error("window disappeared"); ! 125: xoff += winfo.x + winfo.bdrwidth; ! 126: yoff += winfo.y + winfo.bdrwidth; ! 127: but->window = win; ! 128: win = but->subwindow; ! 129: } while ((but->detail & ValueMask) == LeftButton); ! 130: } ! 131: XFreeCursor(cursor); ! 132: if (!XGetColorCells(0, 5, 0, &cnt, pixels)) ! 133: Error("not enough color map entries"); ! 134: cdefs[0].pixel = pixels[0]; ! 135: cdefs[0].red = cdefs[0].green = cdefs[0].blue = ~0; ! 136: cdefs[1].pixel = pixels[1]; ! 137: cdefs[1].red = cdefs[1].green = cdefs[1].blue = 0; ! 138: XStoreColors(2, cdefs); ! 139: cursor = XCreateCursor(pik_width, pik_height, ! 140: pik_bits, pik_mask_bits, ! 141: 7, 0, pixels[0], pixels[1], GXcopy); ! 142: if (!XQueryWindow(win, &winfo)) ! 143: Error("window disappeared"); ! 144: width = winfo.width + (winfo.bdrwidth << 1); ! 145: height = winfo.height + (winfo.bdrwidth << 1); ! 146: nbytes = BZPixmapSize(width, height); ! 147: buf = (u_char *) malloc(nbytes); ! 148: if (buf == NULL) ! 149: Error("window too large"); ! 150: XPixmapGetZ(but->window, winfo.x, winfo.y, width, height, buf); ! 151: if (!shared) { ! 152: for (cnt = 256; --cnt >= 0; ) ! 153: transbuf[cnt] = cnt; ! 154: while (--nbytes >= 0) { ! 155: pixel = buf[nbytes]; ! 156: if (transbuf[pixel] != pixel) ! 157: continue; ! 158: cdef.pixel = pixel; ! 159: XQueryColor(&cdef); ! 160: if (!XGetColorCells(0, 1, 0, &cnt, &cdef.pixel)) ! 161: Error("not enough color map entries, try -s option"); ! 162: transbuf[pixel] = cdef.pixel; ! 163: origdefs[cdef.pixel] = cdef; ! 164: origdefs[pixel] = cdef; ! 165: origdefs[pixel].pixel = pixel; ! 166: XStoreColors(1, &cdef); ! 167: } ! 168: } else { ! 169: transbuf[0] = 1; ! 170: while (--nbytes >= 0) { ! 171: pixel = buf[nbytes]; ! 172: if (transbuf[pixel] == pixel) ! 173: continue; ! 174: cdef.pixel = pixel; ! 175: XQueryColor(&cdef); ! 176: transbuf[pixel] = pixel; ! 177: origdefs[pixel] = cdef; ! 178: } ! 179: } ! 180: win = XCreateWindow(RootWindow, xoff + winfo.x, yoff + winfo.y, ! 181: width, height, 0, (Pixmap) 0, (Pixmap) 0); ! 182: XStoreName(win, "pikapix"); ! 183: XDefineCursor(win, cursor); ! 184: XSelectInput(win, KeyPressed|ButtonPressed|ExposeRegion|MouseMoved); ! 185: XMapWindow(win); ! 186: font = XGetFont("6x10"); ! 187: if (!font) Error("couldn't open font"); ! 188: XQueryFont(font, &finfo); ! 189: askwidth = finfo.width * ASKSIZE + 2; ! 190: askheight = finfo.height + 2; ! 191: ask = XCreateWindow(RootWindow, 0, 0, askwidth, askheight, ! 192: 2, BlackPixmap, WhitePixmap); ! 193: askwidth += 4; ! 194: askheight += 4; ! 195: XSelectInput(ask, KeyPressed|ExposeWindow|ButtonPressed); ! 196: XDefineCursor(ask, cursor); ! 197: rgb = XCreateWindow(RootWindow, 0, 0, RGBWIDTH, RGBHEIGHT, ! 198: 2, XMakeTile(pixels[1]), XMakeTile(pixels[0])); ! 199: redw = XCreateWindow(rgb, 0, 0, RGBSIDE, RGBSIDE, ! 200: 0, (Pixmap) 0, XMakeTile(pixels[2])); ! 201: rgbdefs[0].pixel = pixels[2]; ! 202: greenw = XCreateWindow(rgb, RGBSIDE, 0, RGBSIDE, RGBSIDE, ! 203: 0, (Pixmap) 0, XMakeTile(pixels[3])); ! 204: rgbdefs[1].pixel = pixels[3]; ! 205: bluew = XCreateWindow(rgb, RGBSIDE * 2, 0, RGBSIDE, RGBSIDE, ! 206: 0, (Pixmap) 0, XMakeTile(pixels[4])); ! 207: rgbdefs[2].pixel = pixels[4]; ! 208: rgbx = (RGBWIDTH - (finfo.width * 6)) >> 1; ! 209: rgby = RGBSIDE + ((RGBSIDE - finfo.height) >> 1); ! 210: XMapSubwindows(rgb); ! 211: XSelectInput(rgb, ButtonPressed|ExposeWindow); ! 212: XSelectInput(redw, ButtonPressed|ButtonReleased|MiddleDownMotion); ! 213: XSelectInput(greenw, ButtonPressed|ButtonReleased|MiddleDownMotion); ! 214: XSelectInput(bluew, ButtonPressed|ButtonReleased|MiddleDownMotion); ! 215: XDefineCursor(rgb, cursor); ! 216: XQueryWindow(RootWindow, &rinfo); ! 217: RedoCursor(1); ! 218: while (1) { ! 219: XNextEvent(&ev); ! 220: switch ((int)ev.type) { ! 221: case MouseMoved: ! 222: if (asking || (mixing && !mixtrack)) ! 223: break; ! 224: if (mixtrack) { ! 225: XUpdateMouse(mot->window, &xoff, &yoff, &mot->subwindow); ! 226: CalcRGB(mot->window, pixel, yoff); ! 227: } else ! 228: RedoCursor(0); ! 229: break; ! 230: case KeyPressed: ! 231: string = XLookupMapping (&ev, &nbytes); ! 232: if (nbytes == 1 && (*string == '\003' || *string == '\004')) { ! 233: if (asking) { ! 234: coloridx = 0; ! 235: asking = 0; ! 236: XUnmapWindow(ask); ! 237: RedoCursor(0); ! 238: } else if (mixing) { ! 239: mixing = 0; ! 240: XUnmapWindow(rgb); ! 241: RedoCursor(1); ! 242: } else ! 243: exit(0); ! 244: } else if (asking && ev.window == ask) { ! 245: while (--nbytes >= 0) ! 246: colorname[coloridx++] = *string++; ! 247: if (colorname[coloridx - 1] == '\r') { ! 248: coloridx--; ! 249: asking = 0; ! 250: } else if (colorname[coloridx - 1] == '\177') { ! 251: if (--coloridx) { ! 252: --coloridx; ! 253: XClear(ask); ! 254: } ! 255: } else if (colorname[coloridx - 1] == '\025') { ! 256: if (--coloridx) ! 257: XClear(ask); ! 258: coloridx = 0; ! 259: } ! 260: XText(ask, 1, 1, colorbuf, sizeof (PROMPT) + coloridx, font, ! 261: BlackPixel, WhitePixel); ! 262: if (!asking) { ! 263: XUnmapWindow(ask); ! 264: if (coloridx) { ! 265: colorname[coloridx] = '\0'; ! 266: if (XParseColor(colorname, &cdef)) { ! 267: if (!shared) { ! 268: cdef.pixel = transbuf[pixel]; ! 269: XStoreColors(1, &cdef); ! 270: origdefs[cdef.pixel] = cdef; ! 271: RedoCursor(1); ! 272: } else if (XGetHardwareColor(&cdef)) { ! 273: if (transbuf[pixel] != pixel) { ! 274: tpix = transbuf[pixel]; ! 275: XFreeColors(&tpix, 1, 0); ! 276: } ! 277: transbuf[pixel] = cdef.pixel; ! 278: origdefs[cdef.pixel] = cdef; ! 279: RedoCursor(1); ! 280: BitsPut(0, 0, width, height); ! 281: } else XFeep(0); ! 282: } else ! 283: XFeep(0); ! 284: coloridx = 0; ! 285: } ! 286: } ! 287: } ! 288: break; ! 289: case ButtonPressed: ! 290: if (asking) { ! 291: coloridx = 0; ! 292: asking = 0; ! 293: XUnmapWindow(ask); ! 294: RedoCursor(1); ! 295: break; ! 296: } ! 297: if (mixing && but->window == rgb) { ! 298: switch (but->detail & ValueMask) { ! 299: case LeftButton: ! 300: case MiddleButton: ! 301: if ((but->detail & ValueMask) == LeftButton) ! 302: cdefs[0] = origdefs[pixel]; ! 303: else ! 304: cdefs[0] = cdef; ! 305: if (!shared) { ! 306: cdefs[0].pixel = transbuf[pixel]; ! 307: origdefs[cdefs[0].pixel] = cdefs[0]; ! 308: XStoreColors(1, &cdefs[0]); ! 309: } ! 310: cdefs[0].pixel = pixels[0]; ! 311: rgbdefs[0].red = cdefs[0].red; ! 312: rgbdefs[1].green = cdefs[0].green; ! 313: rgbdefs[2].blue = cdefs[0].blue; ! 314: XStoreColors(3, rgbdefs); ! 315: ResetCursor(); ! 316: PrintRGB(); ! 317: break; ! 318: case RightButton: ! 319: XUnmapWindow(rgb); ! 320: if (cdef.red != cdefs[0].red || ! 321: cdef.green != cdefs[0].green || ! 322: cdef.blue != cdefs[0].blue) { ! 323: cdef = cdefs[0]; ! 324: if (!shared) { ! 325: cdef.pixel = transbuf[pixel]; ! 326: origdefs[cdef.pixel] = cdef; ! 327: XStoreColors(1, &cdef); ! 328: } else if (XGetHardwareColor(&cdef)) { ! 329: if (transbuf[pixel] != pixel) { ! 330: tpix = transbuf[pixel]; ! 331: XFreeColors(&tpix, 1, 0); ! 332: } ! 333: transbuf[pixel] = cdef.pixel; ! 334: origdefs[cdef.pixel] = cdef; ! 335: RedoCursor(1); ! 336: BitsPut(0, 0, width, height); ! 337: } else ! 338: XFeep(0); ! 339: } ! 340: RedoCursor(1); ! 341: mixing = 0; ! 342: mixtrack = 0; ! 343: break; ! 344: } ! 345: break; ! 346: } ! 347: if (mixing && but->window == win) ! 348: break; ! 349: if (mixing) { ! 350: switch (but->detail & ValueMask) { ! 351: case MiddleButton: ! 352: mixtrack = 1; ! 353: CalcRGB(but->window, pixel, but->y); ! 354: break; ! 355: case LeftButton: ! 356: UpdateRGB(but->window, pixel, -BASEDELTA); ! 357: break; ! 358: case RightButton: ! 359: UpdateRGB(but->window, pixel, BASEDELTA); ! 360: break; ! 361: } ! 362: break; ! 363: } ! 364: pixel = buf[BZPixmapSize(width, but->y) + BZPixmapSize(but->x, 1)]; ! 365: switch (but->detail & ValueMask) { ! 366: case LeftButton: ! 367: if (!shared) { ! 368: cdef = origdefs[pixel]; ! 369: cdef.pixel = transbuf[pixel]; ! 370: origdefs[cdef.pixel] = cdef; ! 371: XStoreColors(1, &cdef); ! 372: RedoCursor(1); ! 373: } else if (transbuf[pixel] != pixel) { ! 374: tpix = transbuf[pixel]; ! 375: XFreeColors(&tpix, 1, 0); ! 376: transbuf[pixel] = pixel; ! 377: RedoCursor(1); ! 378: BitsPut(0, 0, width, height); ! 379: } ! 380: break; ! 381: case MiddleButton: ! 382: PopWindow(ask, but, askwidth, askheight); ! 383: (void)sprintf(colorbuf, "#%02x%02x%02x -> ", cdefs[0].red >> 8, ! 384: cdefs[0].green >> 8, cdefs[0].blue >> 8); ! 385: asking = 1; ! 386: break; ! 387: case RightButton: ! 388: mixing = 1; ! 389: cdef.red = rgbdefs[0].red = cdefs[0].red; ! 390: cdef.green = rgbdefs[1].green = cdefs[0].green; ! 391: cdef.blue = rgbdefs[2].blue = cdefs[0].blue; ! 392: XStoreColors(3, rgbdefs); ! 393: PopWindow(rgb, but, RGBWIDTH+4, RGBHEIGHT+4); ! 394: break; ! 395: } ! 396: break; ! 397: case ButtonReleased: ! 398: if (mixtrack && ((but->detail & ValueMask) == MiddleButton)) { ! 399: CalcRGB(but->window, pixel, but->y); ! 400: mixtrack = 0; ! 401: } ! 402: break; ! 403: case ExposeWindow: ! 404: case ExposeRegion: ! 405: if (exp->window == ask) { ! 406: XText(ask, 1, 1, colorbuf, sizeof (PROMPT) + coloridx, font, ! 407: BlackPixel, WhitePixel); ! 408: } else if (exp->window == rgb) { ! 409: if (exp->subwindow == NULL ) PrintRGB(); ! 410: } else { ! 411: exp->width = MIN(exp->x + exp->width, width) - exp->x; ! 412: exp->height = MIN(exp->y + exp->height, height) - exp->y; ! 413: if (exp->width > 0 && exp->height > 0) ! 414: BitsPut(exp->x, exp->y, exp->width, exp->height); ! 415: } ! 416: break; ! 417: } ! 418: } ! 419: } ! 420: ! 421: PopWindow (pop, but, w, h) ! 422: Window pop; ! 423: XButtonPressedEvent *but; ! 424: int w, h; ! 425: { ! 426: int x, y; ! 427: ! 428: x = ((but->location >> 16) & 0xffff) - (w >> 1); ! 429: if (x < 0) ! 430: x = 0; ! 431: else if (x + w > rinfo.width) ! 432: x = rinfo.width - w; ! 433: y = (but->location & 0xffff) - (h >> 1) - 3; ! 434: if (y < 0) ! 435: y = 0; ! 436: else if (y + h > rinfo.height) ! 437: y = rinfo.height - h; ! 438: XMoveWindow(pop, x, y); ! 439: XMapWindow(pop); ! 440: } ! 441: ! 442: RedoCursor (force) ! 443: int force; ! 444: { ! 445: int x, y; ! 446: Window sub; ! 447: unsigned char pixel; ! 448: static unsigned short curspix = ~0; ! 449: ! 450: XUpdateMouse(win, &x, &y, &sub); ! 451: if (x < 0 || x >= width || y < 0 || y >= height) ! 452: return; ! 453: pixel = transbuf[buf[BZPixmapSize(width, y) + BZPixmapSize(x, 1)]]; ! 454: if (!force && (pixel == curspix)) ! 455: return; ! 456: curspix = pixel; ! 457: cdefs[0] = origdefs[pixel]; ! 458: cdefs[0].pixel = pixels[0]; ! 459: ResetCursor(); ! 460: } ! 461: ! 462: ResetCursor() ! 463: { ! 464: if (cdefs[0].red <= 0x8000 && ! 465: cdefs[0].green <= 0x8000 && ! 466: cdefs[0].blue <= 0x8000) ! 467: cdefs[1].red = cdefs[1].green = cdefs[1].blue = ~0; ! 468: else ! 469: cdefs[1].red = cdefs[1].green = cdefs[1].blue = 0; ! 470: XStoreColors(2, cdefs); ! 471: } ! 472: ! 473: UpdateRGB (ew, pixel, value) ! 474: Window ew; ! 475: unsigned pixel; ! 476: int value; ! 477: { ! 478: Color cdef; ! 479: ! 480: if (ew == redw) { ! 481: value += rgbdefs[0].red; ! 482: if (value < 0) ! 483: value = 0; ! 484: else if (value > 0xffff) ! 485: value = 0xffff; ! 486: rgbdefs[0].red = value; ! 487: XStoreColors(1, &rgbdefs[0]); ! 488: } else if (ew == greenw) { ! 489: value += rgbdefs[1].green; ! 490: if (value < 0) ! 491: value = 0; ! 492: else if (value > 0xffff) ! 493: value = 0xffff; ! 494: rgbdefs[1].green = value; ! 495: XStoreColors(1, &rgbdefs[1]); ! 496: } else if (ew == bluew) { ! 497: value += rgbdefs[2].blue; ! 498: if (value < 0) ! 499: value = 0; ! 500: else if (value > 0xffff) ! 501: value = 0xffff; ! 502: rgbdefs[2].blue = value; ! 503: XStoreColors(1, &rgbdefs[2]); ! 504: } else ! 505: return; ! 506: cdefs[0].red = rgbdefs[0].red; ! 507: cdefs[0].green = rgbdefs[1].green; ! 508: cdefs[0].blue = rgbdefs[2].blue; ! 509: ResetCursor(); ! 510: if (!shared) { ! 511: cdef = cdefs[0]; ! 512: cdef.pixel = transbuf[pixel]; ! 513: origdefs[cdef.pixel] = cdef; ! 514: XStoreColors(1, &cdef); ! 515: } ! 516: PrintRGB(); ! 517: } ! 518: ! 519: CalcRGB (ew, pixel, value) ! 520: Window ew; ! 521: unsigned pixel; ! 522: int value; ! 523: { ! 524: Color cdef; ! 525: ! 526: if (value < 0) ! 527: value = 0; ! 528: else if (value >= RGBSIDE) ! 529: value = (RGBSIDE - 1); ! 530: value = (0xffff * value) / (RGBSIDE - 1); ! 531: if (ew == redw) { ! 532: rgbdefs[0].red = value; ! 533: XStoreColors(1, &rgbdefs[0]); ! 534: } else if (ew == greenw) { ! 535: rgbdefs[1].green = value; ! 536: XStoreColors(1, &rgbdefs[1]); ! 537: } else if (ew == bluew) { ! 538: rgbdefs[2].blue = value; ! 539: XStoreColors(1, &rgbdefs[2]); ! 540: } else ! 541: return; ! 542: cdefs[0].red = rgbdefs[0].red; ! 543: cdefs[0].green = rgbdefs[1].green; ! 544: cdefs[0].blue = rgbdefs[2].blue; ! 545: ResetCursor(); ! 546: if (!shared) { ! 547: cdef = cdefs[0]; ! 548: cdef.pixel = transbuf[pixel]; ! 549: origdefs[cdef.pixel] = cdef; ! 550: XStoreColors(1, &cdef); ! 551: } ! 552: PrintRGB(); ! 553: } ! 554: ! 555: PrintRGB () ! 556: { ! 557: char rgbbuf[7]; ! 558: ! 559: (void) sprintf(rgbbuf, "%02x%02x%02x", cdefs[0].red >> 8, ! 560: cdefs[0].green >> 8, cdefs[0].blue >> 8); ! 561: XText(rgb, rgbx, rgby, rgbbuf, 6, font, BlackPixel, WhitePixel); ! 562: } ! 563: ! 564: #define CHUNKSIZE 2048 ! 565: u_char outbuf[CHUNKSIZE]; ! 566: ! 567: BitsPut (x, y, w, h) ! 568: int x, y, w, h; ! 569: { ! 570: register u_char *data, *ptr, *trans; ! 571: register int i, j; ! 572: int per, delta, linesize; ! 573: ! 574: trans = transbuf; ! 575: linesize = BZPixmapSize(width, 1); ! 576: data = &buf[y * linesize + BZPixmapSize(x, 1)]; ! 577: ! 578: per = BZPixmapSize(w, 1); ! 579: delta = CHUNKSIZE / per; ! 580: linesize -= per; ! 581: ! 582: while (h) { ! 583: if (h < delta) ! 584: delta = h; ! 585: for (ptr = outbuf, i = delta; --i >= 0; data += linesize) { ! 586: for (j = per; --j >= 0; ) ! 587: *ptr++ = trans[*data++]; ! 588: } ! 589: XPixmapBitsPutZ(win, x, y, w, delta, outbuf, ! 590: NULL, GXcopy, AllPlanes); ! 591: y += delta; ! 592: h -= delta; ! 593: } ! 594: } ! 595: ! 596: Error (why) ! 597: char *why; ! 598: { ! 599: fprintf(stderr, "pikapix: %s\n", why); ! 600: (void) fflush(stderr); ! 601: exit(1); ! 602: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.