+
+/* ------------------------------------------------------------------------- */
+
+
+#ifdef DEBUG
+/*
+#define DEBUG_TIMING
+*/
+#endif
+
+
+int Read_PCX_to_Pixmaps(Display *display, Window window, char *filename,
+ Pixmap *pixmap, Pixmap *pixmap_mask)
+{
+ Image *image, *image_mask;
+ XImageInfo *ximageinfo, *ximageinfo_mask;
+ int screen;
+ Visual *visual;
+ unsigned int depth;
+
+#ifdef DEBUG_TIMING
+ long count1, count2;
+ count1 = Counter();
+#endif
+
+ /* load GIF file */
+ if (!(image = Read_PCX_to_Image(filename)))
+ {
+ printf("Loading GIF image failed -- maybe no GIF...\n");
+ exit(1);
+ }
+
+#ifdef DEBUG_TIMING
+ count2 = Counter();
+ printf(" LOADING '%s' IN %.2f SECONDS\n",
+ filename, (float)(count2-count1)/1000.0);
+ count1 = Counter();
+#endif
+
+ if (image->depth > 8)
+ {
+ printf("Sorry, GIFs with more than 256 colors are not supported.\n");
+ exit(1);
+ }
+
+ /* minimize colormap */
+ compress(image);
+
+#ifdef DEBUG_TIMING
+ count2 = Counter();
+ printf(" COMPRESSING IMAGE COLORMAP IN %.2f SECONDS\n",
+ (float)(count2-count1)/1000.0);
+ count1 = Counter();
+#endif
+
+ screen = DefaultScreen(display);
+ visual = DefaultVisual(display, screen);
+ depth = DefaultDepth(display, screen);
+
+ /* convert internal image structure to X11 XImage */
+ if (!(ximageinfo = Image_to_XImage(display, screen, visual, depth, image)))
+ {
+ fprintf(stderr, "Cannot convert Image to XImage.\n");
+ exit(1);
+ }
+
+#ifdef DEBUG_TIMING
+ count2 = Counter();
+ printf(" CONVERTING IMAGE TO XIMAGE IN %.2f SECONDS\n",
+ (float)(count2-count1)/1000.0);
+ count1 = Counter();
+#endif
+
+ if (ximageinfo->cmap != DefaultColormap(display, screen))
+ XSetWindowColormap(display, window, ximageinfo->cmap);
+
+ /* convert XImage to Pixmap */
+ if ((*pixmap = XImage_to_Pixmap(display, window, ximageinfo)) == None)
+ {
+ fprintf(stderr, "Cannot convert XImage to Pixmap.\n");
+ exit(1);
+ }
+
+#ifdef DEBUG_TIMING
+ count2 = Counter();
+ printf(" CONVERTING IMAGE TO PIXMAP IN %.2f SECONDS\n",
+ (float)(count2-count1)/1000.0);
+ count1 = Counter();
+#endif
+
+ /* create mono image for masking */
+ image_mask = monochrome(image);
+
+#ifdef DEBUG_TIMING
+ count2 = Counter();
+ printf(" CONVERTING IMAGE TO MASK IN %.2f SECONDS\n",
+ (float)(count2-count1)/1000.0);
+ count1 = Counter();
+#endif
+
+ /* convert internal image structure to X11 XImage */
+ if (!(ximageinfo_mask = Image_to_XImage(display, screen, visual, depth,
+ image_mask)))
+ {
+ fprintf(stderr, "Cannot convert Image to XImage.\n");
+ exit(1);
+ }
+
+#ifdef DEBUG_TIMING
+ count2 = Counter();
+ printf(" CONVERTING MASK TO XIMAGE IN %.2f SECONDS\n",
+ (float)(count2-count1)/1000.0);
+ count1 = Counter();
+#endif
+
+ /* convert XImage to Pixmap */
+ if ((*pixmap_mask = XImage_to_Pixmap(display, window, ximageinfo_mask)) == None)
+ {
+ fprintf(stderr, "Cannot convert XImage to Pixmap.\n");
+ exit(1);
+ }
+
+#ifdef DEBUG_TIMING
+ count2 = Counter();
+ printf(" CONVERTING MASK TO PIXMAP IN %.2f SECONDS\n",
+ (float)(count2-count1)/1000.0);
+ count1 = Counter();
+#endif
+
+ return(GIF_Success);
+}