]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gdk_imlib/load.c
Added background colour again
[wxWidgets.git] / src / gdk_imlib / load.c
diff --git a/src/gdk_imlib/load.c b/src/gdk_imlib/load.c
deleted file mode 100644 (file)
index ef5913d..0000000
+++ /dev/null
@@ -1,1498 +0,0 @@
-
-#define _GNU_SOURCE
-#include "../gdk_imlib/config.h"
-
-#include "../gdk_imlib/gdk_imlib.h"
-#include "../gdk_imlib/gdk_imlib_private.h"
-
-/*      Split the ID - damages input    */
-
-static char        *
-g_SplitID(char *file)
-{
-   char               *p = strrchr(file, ':');
-
-   if (p == NULL)
-      return "";
-   else
-     {
-       *p++ = 0;
-       return p;
-     }
-}
-
-/*
- *     Doesn't damage the input
- */
-
-char               *
-g_GetExtension(char *file)
-{
-   char               *p = strrchr(file, '.');
-
-   if (p == NULL)
-      return "";
-   else
-      return p + 1;
-}
-
-#ifdef HAVE_LIBJPEG
-unsigned char      *
-g_LoadJPEG(FILE * f, int *w, int *h)
-{
-   struct jpeg_decompress_struct cinfo;
-   struct jpeg_error_mgr jerr;
-   unsigned char      *data, *line[16], *ptr;
-   int                 x, y, i;
-
-   cinfo.err = jpeg_std_error(&jerr);
-   jpeg_create_decompress(&cinfo);
-   jpeg_stdio_src(&cinfo, f);
-   jpeg_read_header(&cinfo, TRUE);
-   cinfo.do_fancy_upsampling = FALSE;
-   cinfo.do_block_smoothing = FALSE;
-   jpeg_start_decompress(&cinfo);
-   *w = cinfo.output_width;
-   *h = cinfo.output_height;
-   data = malloc(*w ** h * 3);
-   if (!data)
-     {
-       jpeg_destroy_decompress(&cinfo);
-       return NULL;
-     }
-   ptr = data;
-
-   if (cinfo.rec_outbuf_height > 16)
-     {
-       fprintf(stderr, "gdk_imlib ERROR: JPEG uses line buffers > 16. Cannot load.\n");
-       return NULL;
-     }
-   if (cinfo.output_components == 3)
-     {
-       for (y = 0; y < *h; y += cinfo.rec_outbuf_height)
-         {
-            for (i = 0; i < cinfo.rec_outbuf_height; i++)
-              {
-                 line[i] = ptr;
-                 ptr += *w * 3;
-              }
-            jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height);
-         }
-     }
-   else if (cinfo.output_components == 1)
-     {
-       for (i = 0; i < cinfo.rec_outbuf_height; i++)
-         {
-            if ((line[i] = malloc(*w)) == NULL)
-              {
-                 int                 t = 0;
-
-                 for (t = 0; t < i; t++)
-                    free(line[t]);
-                 jpeg_destroy_decompress(&cinfo);
-                 return NULL;
-              }
-         }
-       for (y = 0; y < *h; y += cinfo.rec_outbuf_height)
-         {
-            jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height);
-            for (i = 0; i < cinfo.rec_outbuf_height; i++)
-              {
-                 for (x = 0; x < *w; x++)
-                   {
-                      *ptr++ = line[i][x];
-                      *ptr++ = line[i][x];
-                      *ptr++ = line[i][x];
-                   }
-              }
-         }
-       for (i = 0; i < cinfo.rec_outbuf_height; i++)
-          free(line[i]);
-     }
-   jpeg_finish_decompress(&cinfo);
-   jpeg_destroy_decompress(&cinfo);
-   return data;
-}
-#endif /* HAVE_LIBJPEG */
-
-#ifdef HAVE_LIBPNG
-unsigned char      *
-g_LoadPNG(FILE * f, int *w, int *h, int *t)
-{
-   png_structp         png_ptr;
-   png_infop           info_ptr;
-   unsigned char      *data, *ptr, **lines, *ptr2, r, g, b, a;
-   int                 i, x, y, transp, bit_depth, color_type, interlace_type;
-   png_uint_32        *ww, *hh;
-
-   /* Init PNG Reader */
-   transp = 0;
-   png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-   if (!png_ptr)
-      return NULL;
-
-   info_ptr = png_create_info_struct(png_ptr);
-   if (!info_ptr)
-     {
-       png_destroy_read_struct(&png_ptr, NULL, NULL);
-       return NULL;
-     }
-
-   if (setjmp(png_ptr->jmpbuf))
-     {
-       png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
-       return NULL;
-     }
-
-   if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-     {
-       png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
-       return NULL;
-     }
-   png_init_io(png_ptr, f);
-   /* Read Header */
-   png_read_info(png_ptr, info_ptr);
-   ww = (png_uint_32 *) w;
-   hh = (png_uint_32 *) h;
-   png_get_IHDR(png_ptr, info_ptr, ww, hh, &bit_depth, &color_type, &interlace_type,
-               NULL, NULL);
-   /* Setup Translators */
-   if (color_type == PNG_COLOR_TYPE_PALETTE)
-      png_set_expand(png_ptr);
-   png_set_strip_16(png_ptr);
-   png_set_packing(png_ptr);
-   if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
-      png_set_expand(png_ptr);
-   png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
-   *w = info_ptr->width;
-   *h = info_ptr->height;
-   data = malloc(*w ** h * 3);
-   if (!data)
-     {
-       png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
-       return NULL;
-     }
-   lines = (unsigned char **)malloc(*h * sizeof(unsigned char *));
-
-   if (lines == NULL)
-     {
-       free(data);
-       png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
-       return NULL;
-     }
-   for (i = 0; i < *h; i++)
-     {
-       if ((lines[i] = malloc(*w * (sizeof(unsigned char) * 4))) == NULL)
-         {
-            int                 n;
-
-            free(data);
-            for (n = 0; n < i; n++)
-               free(lines[n]);
-            free(lines);
-            png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
-            return NULL;
-         }
-     }
-   png_read_image(png_ptr, lines);
-   png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
-   ptr = data;
-   if (color_type == PNG_COLOR_TYPE_GRAY)
-     {
-       for (y = 0; y < *h; y++)
-         {
-            ptr2 = lines[y];
-            for (x = 0; x < *w; x++)
-              {
-                 r = *ptr2++;
-                 *ptr++ = r;
-                 *ptr++ = r;
-                 *ptr++ = r;
-              }
-         }
-     }
-   else
-     {
-       for (y = 0; y < *h; y++)
-         {
-            ptr2 = lines[y];
-            for (x = 0; x < *w; x++)
-              {
-                 r = *ptr2++;
-                 g = *ptr2++;
-                 b = *ptr2++;
-                 a = *ptr2++;
-                 if (a < 128)
-                   {
-                      *ptr++ = 255;
-                      *ptr++ = 0;
-                      *ptr++ = 255;
-                      transp = 1;
-                   }
-                 else
-                   {
-                      if ((r == 255) && (g == 0) && (b == 255))
-                         r = 254;
-                      *ptr++ = r;
-                      *ptr++ = g;
-                      *ptr++ = b;
-                   }
-              }
-         }
-     }
-   for (i = 0; i < *h; i++)
-      free(lines[i]);
-   free(lines);
-   *t = transp;
-   return data;
-}
-#endif /* HAVE_LIBPNG */
-
-#ifdef HAVE_LIBTIFF
-unsigned char      *
-g_LoadTIFF(char *f, int *w, int *h, int *t)
-{
-   TIFF               *tif;
-   unsigned char      *data, *ptr, r, g, b, a;
-   int                 x, y;
-   uint32              ww, hh, *rast, *tptr;
-   size_t              npix;
-   int                 istransp;
-
-   istransp = 0;
-   if (!f)
-      return NULL;
-
-   tif = TIFFOpen(f, "r");
-   if (!tif)
-      return NULL;
-
-   TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &ww);
-   TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &hh);
-   npix = ww * hh;
-   *w = (int)ww;
-   *h = (int)hh;
-   rast = (uint32 *) _TIFFmalloc(npix * sizeof(uint32));
-   if (!rast)
-     {
-       TIFFClose(tif);
-       return NULL;
-     }
-   data = NULL;
-   if (TIFFReadRGBAImage(tif, ww, hh, rast, 0))
-     {
-       data = (unsigned char *)malloc(*w ** h * 3);
-       if (!data)
-         {
-            _TIFFfree(rast);
-            TIFFClose(tif);
-            return NULL;
-         }
-       ptr = data;
-       for (y = 0; y < *h; y++)
-         {
-            tptr = rast;
-            tptr += ((*h - y - 1) ** w);
-            for (x = 0; x < *w; x++)
-              {
-                 a = TIFFGetA(*tptr);
-                 b = TIFFGetB(*tptr);
-                 g = TIFFGetG(*tptr);
-                 r = TIFFGetR(*tptr);
-                 tptr++;
-                 if (a < 128)
-                   {
-                      *ptr++ = 255;
-                      *ptr++ = 0;
-                      *ptr++ = 255;
-                      istransp = 1;
-                   }
-                 else
-                   {
-                      if ((r == 255) && (g == 0) && (b == 255))
-                         r = 254;
-                      *ptr++ = r;
-                      *ptr++ = g;
-                      *ptr++ = b;
-                   }
-              }
-         }
-     }
-   _TIFFfree(rast);
-   TIFFClose(tif);
-   *t = istransp;
-   return data;
-}
-
-#endif /* HAVE_LIBTIFF */
-
-#ifdef HAVE_LIBGIF
-unsigned char      *
-g_LoadGIF(char *f, int *w, int *h, int *t)
-{
-   unsigned char      *data, *ptr;
-   GifFileType        *gif;
-   GifRowType         *rows;
-   GifRecordType       rec;
-   ColorMapObject     *cmap;
-   int                 i, j, done, bg, csize, r, g, b;
-   int                 intoffset[] =
-   {0, 4, 2, 1};
-   int                 intjump[] =
-   {8, 8, 4, 2};
-   int                 istransp, transp;
-
-   done = 0;
-   istransp = 0;
-   gif = DGifOpenFileName(f);
-   if (!gif)
-      return NULL;
-
-   do
-     {
-       DGifGetRecordType(gif, &rec);
-       if ((rec == IMAGE_DESC_RECORD_TYPE) && (!done))
-         {
-            DGifGetImageDesc(gif);
-            *w = gif->Image.Width;
-            *h = gif->Image.Height;
-            rows = malloc(*h * sizeof(GifRowType *));
-            if (!rows)
-              {
-                 DGifCloseFile(gif);
-                 return NULL;
-              }
-            data = malloc(*w ** h * 3);
-            if (!data)
-              {
-                 DGifCloseFile(gif);
-                 free(rows);
-                 return NULL;
-              }
-            for (i = 0; i < *h; i++)
-               rows[i] = NULL;
-            for (i = 0; i < *h; i++)
-              {
-                 rows[i] = malloc(*w * sizeof(GifPixelType));
-                 if (!rows[i])
-                   {
-                      DGifCloseFile(gif);
-                      for (i = 0; i < *h; i++)
-                         if (rows[i])
-                            free(rows[i]);
-                      free(rows);
-                      free(data);
-                      return NULL;
-                   }
-              }
-            if (gif->Image.Interlace)
-              {
-                 for (i = 0; i < 4; i++)
-                   {
-                      for (j = intoffset[i]; j < *h; j += intjump[i])
-                         DGifGetLine(gif, rows[j], *w);
-                   }
-              }
-            else
-              {
-                 for (i = 0; i < *h; i++)
-                    DGifGetLine(gif, rows[i], *w);
-              }
-            done = 1;
-         }
-       else if (rec == EXTENSION_RECORD_TYPE)
-         {
-            int                 ext_code;
-            GifByteType        *ext;
-
-            DGifGetExtension(gif, &ext_code, &ext);
-            if (ext)
-              {
-                 if ((ext[1] & 1))
-                   {
-                      istransp = 1;
-                      transp = (int)ext[4];
-                   }
-              }
-            do
-              {
-                 DGifGetExtensionNext(gif, &ext);
-              }
-            while (ext);
-         }
-     }
-   while (rec != TERMINATE_RECORD_TYPE);
-   bg = gif->SBackGroundColor;
-   cmap = (gif->Image.ColorMap ? gif->Image.ColorMap : gif->SColorMap);
-   csize = cmap->ColorCount;
-   ptr = data;
-   if (!istransp)
-     {
-       for (i = 0; i < *h; i++)
-         {
-            for (j = 0; j < *w; j++)
-              {
-                 r = cmap->Colors[rows[i][j]].Red;
-                 g = cmap->Colors[rows[i][j]].Green;
-                 b = cmap->Colors[rows[i][j]].Blue;
-                 *ptr++ = r;
-                 *ptr++ = g;
-                 *ptr++ = b;
-              }
-         }
-     }
-   else
-     {
-       for (i = 0; i < *h; i++)
-         {
-            for (j = 0; j < *w; j++)
-              {
-                 if (rows[i][j] == transp)
-                   {
-                      *ptr++ = 255;
-                      *ptr++ = 0;
-                      *ptr++ = 255;
-                   }
-                 else
-                   {
-                      r = cmap->Colors[rows[i][j]].Red;
-                      g = cmap->Colors[rows[i][j]].Green;
-                      b = cmap->Colors[rows[i][j]].Blue;
-                      if (r == 255 && g == 0 && b == 255)
-                         r = 254;
-                      *ptr++ = r;
-                      *ptr++ = g;
-                      *ptr++ = b;
-                   }
-              }
-         }
-     }
-   DGifCloseFile(gif);
-   for (i = 0; i < *h; i++)
-      free(rows[i]);
-   free(rows);
-   *t = istransp;
-   return data;
-}
-
-#endif /* HAVE_LIBGIF */
-
-unsigned char      *
-g_LoadXPM(char *f, int *w, int *h, int *t)
-{
-   FILE               *file;
-   unsigned char      *data, *ptr;
-   int                 pc, c, i, j, k, ncolors, cpp, comment, transp, quote,
-                       context, len, /*token,*/ done;
-   char                line[65536], s[65536], tok[65536], col[65536];
-   XColor              xcol;
-   struct _cmap
-     {
-       char                str[8];
-       char                transp;
-       int                 r, g, b;
-     }
-                      *cmap;
-   int                 lookup[128][128];
-
-   i = 0;
-   j = 0;
-   
-   transp = 0;
-   done = 0;
-   cmap = NULL;
-
-   file = fopen(f, "r");
-   if (!file)
-      return NULL;
-
-   *w = 10;
-   *h = 10;
-
-   ptr = NULL;
-   data = NULL;
-   c = ' ';
-   comment = 0;
-   quote = 0;
-   context = 0;
-
-   while (!done)
-     {
-       pc = c;
-       c = fgetc(file);
-       if (c == EOF)
-          break;
-       if (!quote)
-         {
-            if (pc == '/' && c == '*')
-               comment = 1;
-            else if (pc == '*' && c == '/' && comment)
-               comment = 0;
-         }
-       if (!comment)
-         {
-            if (!quote && c == '"')
-              {
-                 quote = 1;
-                 i = 0;
-              }
-            else if (quote && c == '"')
-              {
-                 line[i] = 0;
-                 quote = 0;
-                 if (context == 0)
-                   {
-                      /* Header */
-                      sscanf(line, "%i %i %i %i", w, h, &ncolors, &cpp);
-                      if (cpp > 7)
-                        {
-                           fprintf(stderr, "gdk_imlib ERROR: XPM files with characters per pixel > 7 not supported\n");
-                           return NULL;
-                        }
-                      if (*w > 32767)
-                        {
-                           fprintf(stderr, "gdk_imlib ERROR: Image width > 32767 pixels for file\n");
-                           return NULL;
-                        }
-                      if (*h > 32767)
-                        {
-                           fprintf(stderr, "gdk_imlib ERROR: Image height > 32767 pixels for file\n");
-                           return NULL;
-                        }
-                      cmap = malloc(sizeof(struct _cmap) * ncolors);
-
-                      if (!cmap)
-                         return NULL;
-                      data = malloc(*w ** h * 3);
-                      if (!data)
-                        {
-                           free(cmap);
-                           return NULL;
-                        }
-                      ptr = data;
-                      j = 0;
-                      context++;
-                   }
-                 else if (context == 1)
-                   {
-                      /* Color Table */
-                      if (j < ncolors)
-                        {
-                           /* int                 colptr = 0;  not used */
-                           int                 slen;
-
-                           tok[0] = 0;
-                           col[0] = 0;
-                           s[0] = 0;
-                           len = strlen(line);
-                           strncpy(cmap[j].str, line, cpp);
-                           cmap[j].str[cpp] = 0;
-                           cmap[j].r = -1;
-                           cmap[j].transp = 0;
-                           for (k = cpp; k < len; k++)
-                             {
-                                if (line[k] != ' ')
-                                  {
-                                     s[0] = 0;
-                                     sscanf(&line[k], "%65535s", s);
-                                     slen = strlen(s);
-                                     k += slen;
-                                     if ((!strcmp(s, "m")) || (!strcmp(s, "s")) ||
-                                         (!strcmp(s, "g4")) || (!strcmp(s, "g")) ||
-                                         (!strcmp(s, "c")) || (k >= len))
-                                       {
-                                          if (k >= len)
-                                            {
-                                               if (col[0])
-                                                  strcat(col, " ");
-                                               strcat(col, s);
-                                            }
-                                          if (col[0])
-                                            {
-                                               if (!strcasecmp(col, "none"))
-                                                 {
-                                                    transp = 1;
-                                                    cmap[j].transp = 1;
-                                                 }
-                                               else
-                                                 {
-                                                    if ((cmap[j].r < 0) ||
-                                                        (!strcmp(tok, "c")))
-                                                      {
-                                                         XParseColor(id->x.disp,
-                                                             id->x.root_cmap,
-                                                                 col, &xcol);
-                                                         cmap[j].r = xcol.red >> 8;
-                                                         cmap[j].g = xcol.green >> 8;
-                                                         cmap[j].b = xcol.blue >> 8;
-                                                         if ((cmap[j].r == 255) &&
-                                                          (cmap[j].g == 0) &&
-                                                          (cmap[j].b == 255))
-                                                            cmap[j].r = 254;
-                                                      }
-                                                 }
-                                            }
-                                          strcpy(tok, s);
-                                          col[0] = 0;
-                                       }
-                                     else
-                                       {
-                                          if (col[0])
-                                             strcat(col, " ");
-                                          strcat(col, s);
-                                       }
-                                  }
-                             }
-                        }
-                      j++;
-                      if (j >= ncolors)
-                        {
-                           if (cpp == 1)
-                              for (i = 0; i < ncolors; i++)
-                                 lookup[(int)cmap[i].str[0]][(int)cmap[i].str[1]] = i;
-                           if (cpp == 2)
-                              for (i = 0; i < ncolors; i++)
-                                 lookup[(int)cmap[i].str[0]][(int)cmap[i].str[1]] = i;
-                           context++;
-                        }
-                   }
-                 else
-                   {
-                      /* Image Data */
-                      i = 0;
-                      if (cpp == 0)
-                        {
-                           /* Chars per pixel = 0? well u never know */
-                        }
-                      if (cpp == 1)
-                        {
-                           if (transp)
-                             {
-                                for (i = 0; ((i < 65536) && (line[i])); i++)
-                                  {
-                                     col[0] = line[i];
-                                     if (cmap[lookup[(int)col[0]][0]].transp)
-                                       {
-                                          *ptr++ = 255;
-                                          *ptr++ = 0;
-                                          *ptr++ = 255;
-                                       }
-                                     else
-                                       {
-                                          *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][0]].r;
-                                          *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][0]].g;
-                                          *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][0]].b;
-                                       }
-                                  }
-                             }
-                           else
-                             {
-                                for (i = 0; ((i < 65536) && (line[i])); i++)
-                                  {
-                                     col[0] = line[i];
-                                     *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][0]].r;
-                                     *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][0]].g;
-                                     *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][0]].b;
-                                  }
-                             }
-                        }
-                      else if (cpp == 2)
-                        {
-                           if (transp)
-                             {
-                                for (i = 0; ((i < 65536) && (line[i])); i++)
-                                  {
-                                     col[0] = line[i++];
-                                     col[1] = line[i];
-                                     if (cmap[lookup[(int)col[0]][(int)col[1]]].transp)
-                                       {
-                                          *ptr++ = 255;
-                                          *ptr++ = 0;
-                                          *ptr++ = 255;
-                                       }
-                                     else
-                                       {
-                                          *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][(int)col[1]]].r;
-                                          *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][(int)col[1]]].g;
-                                          *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][(int)col[1]]].b;
-                                       }
-                                  }
-                             }
-                           else
-                             {
-                                for (i = 0; ((i < 65536) && (line[i])); i++)
-                                  {
-                                     col[0] = line[i++];
-                                     col[1] = line[i];
-                                     *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][(int)col[1]]].r;
-                                     *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][(int)col[1]]].g;
-                                     *ptr++ = (unsigned char)cmap[lookup[(int)col[0]][(int)col[1]]].b;
-                                  }
-                             }
-                        }
-                      else
-                        {
-                           if (transp)
-                             {
-                                for (i = 0; ((i < 65536) && (line[i])); i++)
-                                  {
-                                     for (j = 0; j < cpp; j++, i++)
-                                       {
-                                          col[j] = line[i];
-                                       }
-                                     col[j] = 0;
-                                     i--;
-                                     for (j = 0; j < ncolors; j++)
-                                       {
-                                          if (!strcmp(col, cmap[j].str))
-                                            {
-                                               if (cmap[j].transp)
-                                                 {
-                                                    *ptr++ = 255;
-                                                    *ptr++ = 0;
-                                                    *ptr++ = 255;
-                                                 }
-                                               else
-                                                 {
-                                                    *ptr++ = (unsigned char)cmap[j].r;
-                                                    *ptr++ = (unsigned char)cmap[j].g;
-                                                    *ptr++ = (unsigned char)cmap[j].b;
-                                                 }
-                                               j = ncolors;
-                                            }
-                                       }
-                                  }
-                             }
-                           else
-                             {
-                                for (i = 0; ((i < 65536) && (line[i])); i++)
-                                  {
-                                     for (j = 0; j < cpp; j++, i++)
-                                       {
-                                          col[j] = line[i];
-                                       }
-                                     col[j] = 0;
-                                     i--;
-                                     for (j = 0; j < ncolors; j++)
-                                       {
-                                          if (!strcmp(col, cmap[j].str))
-                                            {
-                                               *ptr++ = (unsigned char)cmap[j].r;
-                                               *ptr++ = (unsigned char)cmap[j].g;
-                                               *ptr++ = (unsigned char)cmap[j].b;
-                                               j = ncolors;
-                                            }
-                                       }
-                                  }
-                             }
-                        }
-                   }
-              }
-         }
-       /* Scan in line from XPM file (limit line length 65k) */
-       if (i < 65536)
-         {
-            if ((!comment) && (quote) && (c != '"'))
-              {
-                 line[i++] = c;
-              }
-         }
-       if ((ptr) && ((ptr - data) >= *w ** h * 3))
-          done = 1;
-     }
-   fclose(file);
-   if (transp)
-      *t = 1;
-   else
-      *t = 0;
-   free(cmap);
-   return data;
-}
-
-unsigned char      *
-g_LoadPPM(FILE * f, int *w, int *h)
-{
-   int                 done;
-   unsigned char      *ptr;
-   unsigned char       chr;
-   char                s[256];
-   int                 a, b;
-   int                 color, scale;
-
-   a = b = scale = 0;
-   fgets(s, 256, f);
-   s[strlen(s) - 1] = 0;
-
-   if (!strcmp(s, "P6"))
-      color = 1;
-   else if (!strcmp(s, "P5"))
-      color = 0;
-   else
-      return NULL;
-
-   done = 1;
-   ptr = NULL;
-   while (done)
-     {
-       if (fgets(s, 256, f) == NULL)
-          break;
-
-       s[strlen(s) - 1] = 0;
-       if (s[0] != '#')
-         {
-            done = 0;
-            sscanf(s, "%i %i", w, h);
-            a = *w;
-            b = *h;
-            if (a > 32767)
-              {
-                 fprintf(stderr, "gdk_imlib ERROR: Image width > 32767 pixels for file\n");
-                 return NULL;
-              }
-            if (b > 32767)
-              {
-                 fprintf(stderr, "gdk_imlib ERROR: Image height > 32767 pixels for file\n");
-                 return NULL;
-              }
-            fgets(s, 256, f);
-            sscanf(s, "%i", &scale);
-            s[strlen(s) - 1] = 0;
-            ptr = (unsigned char *)malloc(a * b * 3);
-            if (!ptr)
-              {
-                 fprintf(stderr, "gdk_imlib ERROR: Cannot allocate RAM for RGB data in file");
-                 return ptr;
-              }
-            if (color)
-              {
-                 if (!fread(ptr, a * b * 3, 1, f))
-                   {
-                      free(ptr);
-                      return NULL;
-                   }
-              }
-            else
-              {
-                 b = (a * b * 3);
-                 a = 0;
-                 while ((fread(&chr, 1, 1, f)) && (a < b))
-                   {
-                      ptr[a++] = chr;
-                      ptr[a++] = chr;
-                      ptr[a++] = chr;
-                   }
-              }
-         }
-     }
-   if (scale == 0)
-     {
-       free(ptr);
-       return NULL;
-     }
-   if (scale < 255)
-     {
-       int                 rot;
-       unsigned char      *po;
-
-       if (scale <= 1)
-          rot = 7;
-       else if (scale <= 3)
-          rot = 6;
-       else if (scale <= 7)
-          rot = 5;
-       else if (scale <= 15)
-          rot = 4;
-       else if (scale <= 31)
-          rot = 3;
-       else if (scale <= 63)
-          rot = 2;
-       else
-          rot = 1;
-
-       if (rot > 0)
-         {
-            po = ptr;
-            while (po < (ptr + (*w ** h * 3)))
-              {
-                 *po++ <<= rot;
-                 *po++ <<= rot;
-                 *po++ <<= rot;
-              }
-         }
-     }
-   return ptr;
-}
-
-static int
-gispnm(char *file)
-{
-   FILE               *f;
-   char                buf[8];
-
-   f = fopen(file, "rb");
-   if (!f)
-      return 0;
-   fgets(buf, 8, f);
-   fclose(f);
-   if (!strcmp("P6\n", buf))
-      return 1;
-   if (!strcmp("P5\n", buf))
-      return 1;
-   return 0;
-}
-
-static int
-gisjpeg(char *file)
-{
-   FILE               *f;
-   unsigned char       buf[8];
-
-   f = fopen(file, "rb");
-   if (!f)
-      return 0;
-   fread(buf, 1, 2, f);
-   fclose(f);
-   if ((buf[0] == 0xff) && (buf[1] == 0xd8))
-      return 1;
-   return 0;
-}
-
-static int
-gispng(char *file)
-{
-#ifdef HAVE_LIBPNG
-   FILE               *f;
-   unsigned char       buf[8];
-
-   f = fopen(file, "rb");
-   if (!f)
-      return 0;
-   fread(buf, 1, 8, f);
-   fclose(f);
-   return (int)png_check_sig(buf, 8);
-#else
-   return 0;
-#endif
-}
-
-static int
-gistiff(char *file)
-{
-   FILE               *f;
-   char                buf[8];
-
-   f = fopen(file, "rb");
-   if (!f)
-      return 0;
-   fgets(buf, 5, f);
-   fclose(f);
-   if ((buf[0] == 'M') && (buf[1] == 'M') && (buf[2] == 0x00) && (buf[3] == 0x2a))
-      return 1;
-   if ((buf[0] == 'I') && (buf[1] == 'I') && (buf[2] == 0x2a) && (buf[3] == 0x00))
-      return 1;
-   return 0;
-}
-
-static int
-giseim(char *file)
-{
-   FILE               *f;
-   char                buf[8];
-
-   f = fopen(file, "rb");
-   if (!f)
-      return 0;
-   fread(buf, 1, 4, f);
-   fclose(f);
-   if (!strncmp("EIM ", buf, 4))
-      return 1;
-   return 0;
-}
-
-static int
-gisgif(char *file)
-{
-   FILE               *f;
-   char                buf[8];
-
-   f = fopen(file, "rb");
-   if (!f)
-      return 0;
-   fread(buf, 1, 4, f);
-   fclose(f);
-   buf[4] = 0;
-   if (!strcmp("GIF8", buf))
-      return 1;
-   return 0;
-}
-
-static int
-gisxpm(char *file)
-{
-   FILE               *f;
-   char                buf[11];
-
-   f = fopen(file, "rb");
-   if (!f)
-      return 0;
-   fread(buf, 1, 9, f);
-   fclose(f);
-   buf[9] = 0;
-   if (!strcmp("/* XPM */", buf))
-      return 1;
-   return 0;
-}
-
-GdkImlibImage      *
-gdk_imlib_load_image(char *file)
-{
-   int                 w, h;
-   int                 needs_conv = 1;
-   unsigned char      *data;
-   GdkImlibImage      *im;
-   char                s[4096];
-   char                fil[4096];
-   char               *iden;
-   char               *e;
-   char                cmd[4096];
-   FILE               *p;
-   int                 eim;
-   int                 fmt;
-   int                 trans;
-
-   eim = 0;
-   fmt = 0;
-   p = NULL;
-   data = NULL;
-
-   if (!file)
-      return NULL;
-   if (id->cache.on_image)
-      if ((im = gfind_image(file)))
-        return im;
-
-   strncpy(fil, file, sizeof(fil));
-   iden = g_SplitID(fil);
-   e = g_GetExtension(fil);
-
-   if (gispnm(fil))
-     {
-       needs_conv = 0;
-       fmt = 0;
-     }
-   else if (gisjpeg(fil))
-     {
-#ifdef HAVE_LIBJPEG
-       needs_conv = 0;
-       fmt = 2;
-#else
-       needs_conv = 1;
-       fmt = 0;
-#endif
-     }
-   else if (gistiff(fil))
-     {
-#ifdef HAVE_LIBTIFF
-       needs_conv = 0;
-       fmt = 3;
-#else
-       needs_conv = 1;
-       fmt = 0;
-#endif
-     }
-   else if (giseim(fil))
-     {
-       needs_conv = 0;
-       eim = 1;
-       fmt = 9999;
-     }
-   else if (gisxpm(fil))
-     {
-       needs_conv = 0;
-       fmt = 5;
-     }
-   else if (gispng(fil))
-     {
-#ifdef HAVE_LIBPNG
-       needs_conv = 0;
-       fmt = 1;
-#else
-       needs_conv = 1;
-       fmt = 0;
-#endif
-     }
-   else if (gisgif(fil))
-     {
-#ifdef HAVE_LIBGIF
-       needs_conv = 0;
-       fmt = 4;
-#else
-       needs_conv = 1;
-       fmt = 0;
-#endif
-     }
-   if (needs_conv && id->fallback)
-     {
-       p = open_helper("%C/convert %s pnm:-", fil, "rb");
-     }
-   else if ((fmt == 2) || (fmt == 1) || (fmt == 0))
-      p = fopen(fil, "rb");
-
-   trans = 0;
-   if (!eim && !data)
-     {
-       switch (fmt)
-         {
-         case 5:
-            data = g_LoadXPM(fil, &w, &h, &trans);
-            break;
-#ifdef HAVE_LIBGIF
-         case 4:
-            data = g_LoadGIF(fil, &w, &h, &trans);
-            break;
-#endif
-#ifdef HAVE_LIBTIFF
-         case 3:
-            data = g_LoadTIFF(fil, &w, &h, &trans);
-            break;
-#endif
-#ifdef HAVE_LIBJPEG
-         case 2:
-            if (p)
-               data = g_LoadJPEG(p, &w, &h);
-            break;
-#endif
-#ifdef HAVE_LIBPNG
-         case 1:
-            if (p)
-               data = g_LoadPNG(p, &w, &h, &trans);
-            break;
-#endif
-         default:
-            if (p)
-               data = g_LoadPPM(p, &w, &h);
-            break;
-         }
-     }
-
-   if (p && !needs_conv)
-      fclose(p);
-   else if (p)
-      close_helper(p);
-
-   if ((!data) && (id->fallback))
-     {
-       p = open_helper("%C/convert %s pnm:-", fil, "rb");
-       if (p)
-         {
-            data = g_LoadPPM(p, &w, &h);
-            close_helper(p);
-         }
-     }
-   if ((!eim) && (!data) && (id->fallback))
-     {
-       if (!strcasecmp(s, "jpeg"))
-          strcpy(cmd, "%J %s");
-       else if (!strcasecmp(s, "jpg"))
-          strcpy(cmd, "%J %s");
-       else if (!strcasecmp(s, "bmp"))
-          strcpy(cmd, "%P/bmptoppm %s");
-       else if (!strcasecmp(s, "ilbm"))
-          strcpy(cmd, "%P/ilbmtoppm %s");
-       else if (!strcasecmp(s, "ilb"))
-          strcpy(cmd, "%P/ilbmtoppm %s");
-       else if (!strcasecmp(s, "iff"))
-          strcpy(cmd, "%P/ilbmtoppm %s");
-       else if (!strcasecmp(s, "img"))
-          strcpy(cmd, "%P/imgtoppm %s");
-       else if (!strcasecmp(s, "mtv"))
-          strcpy(cmd, "%P/mtvtoppm %s");
-       else if (!strcasecmp(s, "pcx"))
-          strcpy(cmd, "%P/pcxtoppm %s");
-       else if (!strcasecmp(s, "pgm"))
-          strcpy(cmd, "%P/pgmtoppm rgb:ffff/ffff/ffff %s");
-       else if (!strcasecmp(s, "pi1"))
-          strcpy(cmd, "%P/pi1toppm %s");
-       else if (!strcasecmp(s, "pict"))
-          strcpy(cmd, "%P/picttoppm %s");
-       else if (!strcasecmp(s, "pic"))
-          strcpy(cmd, "%P/picttoppm %s");
-       else if (!strcasecmp(s, "pj"))
-          strcpy(cmd, "%P/pjtoppm %s");
-       else if (!strcasecmp(s, "qrt"))
-          strcpy(cmd, "%P/qrttoppm %s");
-       else if (!strcasecmp(s, "sld"))
-          strcpy(cmd, "%P/sldtoppm %s");
-       else if (!strcasecmp(s, "spc"))
-          strcpy(cmd, "%P/spctoppm %s");
-       else if (!strcasecmp(s, "spu"))
-          strcpy(cmd, "%P/sputoppm %s");
-       else if (!strcasecmp(s, "tga"))
-          strcpy(cmd, "%P/tgatoppm %s");
-       else if (!strcasecmp(s, "xim"))
-          strcpy(cmd, "%P/ximtoppm %s");
-       else if (!strcasecmp(s, "xpm"))
-          strcpy(cmd, "%P/xpmtoppm %s");
-       else if (!strcasecmp(s, "gif"))
-          strcpy(cmd, "%P/giftopnm %s");
-       else if (!strcasecmp(s, "rast"))
-          strcpy(cmd, "%P/rasttopnm %s");
-       else if (!strcasecmp(s, "ras"))
-          strcpy(cmd, "%P/rasttopnm %s");
-       else if (!strcasecmp(s, "sgi"))
-          strcpy(cmd, "%P/sgitopnm %s");
-       else if (!strcasecmp(s, "sir"))
-          strcpy(cmd, "%P/sirtopnm %s");
-       else if (!strcasecmp(s, "tiff"))
-          strcpy(cmd, "%P/tifftopnm %s");
-       else if (!strcasecmp(s, "tif"))
-          strcpy(cmd, "%P/tifftopnm %s");
-       else if (!strcasecmp(s, "wxd"))
-          strcpy(cmd, "%P/wxdtopnm %s");
-       else if (!strcasecmp(s, "zeiss"))
-          strcpy(cmd, "%P/zeisstopnm -ppm %s");
-       else if (!strcasecmp(s, "zei"))
-          strcpy(cmd, "%P/zeisstopnm -ppm %s");
-       else if (!strcasecmp(s, "zis"))
-          strcpy(cmd, "%P/zeisstopnm -ppm %s");
-       else
-          strcpy(cmd, "%P/anytopnm %s");
-       p = open_helper(cmd, fil, "rb");
-       if (p)
-         {
-            data = g_LoadPPM(p, &w, &h);
-            close_helper(p);
-         }
-     }
-
-   if (!eim && !data)
-     {
-       fprintf(stderr, "gdk_imlib ERROR: Cannot load image: %s\nAll fallbacks failed.\n", fil);
-       return NULL;
-     }
-
-   im = (GdkImlibImage *) malloc(sizeof(GdkImlibImage));
-   if (!im)
-     {
-       fprintf(stderr, "gdk_imlib ERROR: Cannot allocate RAM for image data\n");
-       if (data)
-          free(data);
-       return NULL;
-     }
-   im->alpha_data = NULL;
-   if (trans)
-     {
-       im->shape_color.r = 255;
-       im->shape_color.g = 0;
-       im->shape_color.b = 255;
-     }
-   else
-     {
-       im->shape_color.r = -1;
-       im->shape_color.g = -1;
-       im->shape_color.b = -1;
-     }
-   im->border.left = 0;
-   im->border.right = 0;
-   im->border.top = 0;
-   im->border.bottom = 0;
-   im->cache = 1;
-   im->rgb_data = data;
-   im->rgb_width = w;
-   im->rgb_height = h;
-   im->pixmap = NULL;
-   im->shape_mask = NULL;
-   if (eim)
-     {
-       char                s1[256], s2[256];
-       int                 num, size;
-       int                 r, g, b;
-       int                 br, bl, bt, bb;
-
-       /* Load Native-as-can-be EIM format (Enlightenment IMlib format) */
-       p = fopen(fil, "r");
-       if (!p)
-         {
-            free(im);
-            return NULL;
-         }
-       fgets(s, 4096, p);
-       if ((s[0] != 'E') && (s[1] != 'I') && (s[2] != 'M') && (s[3] != ' '))
-         {
-            fclose(p);
-            free(im);
-            return NULL;
-         }
-       sscanf(s, "%256s %i", s1, &num);
-       if (num <= 0)
-         {
-            fclose(p);
-            free(im);
-            return NULL;
-         }
-       while (fgets(s, 4096, p))
-         {
-            sscanf(s, "%256s", s1);
-            if (!strcmp("IMAGE", s1))
-              {
-                 sscanf(s, "%256s %i %256s %i %i %i %i %i %i %i %i %i", s1, &size, s2, &w, &h, &r, &g, &b, &bl, &br, &bt, &bb);
-                 if (!iden[0])
-                    break;
-                 else if (!strcmp(iden, s2))
-                    break;
-                 if (size > 0)
-                    fseek(p, size, SEEK_CUR);
-              }
-         }
-       im->rgb_data = malloc(w * h * 3);
-       if (!im->rgb_data)
-         {
-            fclose(p);
-            free(im);
-            return NULL;
-         }
-       im->shape_color.r = r;
-       im->shape_color.g = g;
-       im->shape_color.b = b;
-       im->rgb_width = w;
-       im->rgb_height = h;
-       im->border.left = bl;
-       im->border.right = br;
-       im->border.top = bt;
-       im->border.bottom = bb;
-       fread(im->rgb_data, 1, w * h * 3, p);
-       fclose(p);
-       if (iden[0])
-         {
-            strncat(fil, ":", sizeof(fil) - strlen(fil));
-            strncat(fil, iden, sizeof(fil) - strlen(fil));
-         }
-     }
-   im->mod.gamma = id->mod.gamma;
-   im->mod.brightness = id->mod.brightness;
-   im->mod.contrast = id->mod.contrast;
-   im->rmod.gamma = id->rmod.gamma;
-   im->rmod.brightness = id->rmod.brightness;
-   im->rmod.contrast = id->rmod.contrast;
-   im->gmod.gamma = id->gmod.gamma;
-   im->gmod.brightness = id->gmod.brightness;
-   im->gmod.contrast = id->gmod.contrast;
-   im->bmod.gamma = id->bmod.gamma;
-   im->bmod.brightness = id->bmod.brightness;
-   im->bmod.contrast = id->bmod.contrast;
-   im->filename = malloc(strlen(file) + 1);
-   if (im->filename)
-      strcpy(im->filename, file);
-   if ((id->cache.on_image && im))
-      gadd_image(im, fil);
-   gcalc_map_tables(im);
-   return im;
-}
-
-gint
-gdk_imlib_save_image_to_eim(GdkImlibImage * im, char *file)
-{
-   char                fil[4096];
-   char               *iden;
-   FILE               *f;
-   int                 size;
-
-   if ((!id) || (!im) || (!file))
-      return 0;
-   strncpy(fil, file, sizeof(fil));
-   iden = g_SplitID(fil);
-   if (!iden[0])
-      iden = "default";
-   f = fopen(fil, "w");
-   if (!f)
-      return 0;
-
-   size = im->rgb_width * im->rgb_height * 3;
-   fprintf(f, "EIM 1\n");
-   fprintf(f, "IMAGE %i %s %i %i %i %i %i %i %i %i %i\n",
-          size,
-          iden,
-          im->rgb_width,
-          im->rgb_height,
-          im->shape_color.r,
-          im->shape_color.g,
-          im->shape_color.b,
-          im->border.left,
-          im->border.right,
-          im->border.top,
-          im->border.bottom);
-   if (fwrite(im->rgb_data, size, 1, f) != 1)
-     {
-       fclose(f);
-       return 0;
-     }
-   fclose(f);
-   return 1;
-}
-
-gint
-gdk_imlib_add_image_to_eim(GdkImlibImage * im, char *file)
-{
-   char                fil[4096];
-   char               *iden;
-   FILE               *f;
-   int                 size;
-
-   if ((!id) || (!im) || (!file))
-      return 0;
-   strncpy(fil, file, sizeof(fil));
-
-   iden = g_SplitID(file);
-   if (!iden[0])
-      strcpy(iden, "default");
-
-   f = fopen(fil, "a");
-   if (!f)
-      return 0;
-
-   size = im->rgb_width * im->rgb_height * 3;
-   fprintf(f, "IMAGE %i %s %i %i %i %i %i %i %i %i %i\n",
-          size,
-          iden,
-          im->rgb_width,
-          im->rgb_height,
-          im->shape_color.r,
-          im->shape_color.g,
-          im->shape_color.b,
-          im->border.left,
-          im->border.right,
-          im->border.top,
-          im->border.bottom);
-
-   if (fwrite(im->rgb_data, size, 1, f) != 1)
-     {
-       fclose(f);
-       return 0;
-     }
-   fclose(f);
-   return 1;
-}
-
-gint
-gdk_imlib_save_image_to_ppm(GdkImlibImage * im, char *file)
-{
-   FILE               *f;
-
-   if ((!id) || (!im) || (!file))
-      return 0;
-   f = fopen(file, "w");
-   if (!f)
-      return 0;
-
-   fprintf(f, "P6\n");
-   fprintf(f, "%i %i\n255\n",
-          im->rgb_width,
-          im->rgb_height);
-   if (fwrite(im->rgb_data, im->rgb_width * im->rgb_height * 3, 1, f) != 1)
-     {
-       fclose(f);
-       return 0;
-     }
-   fclose(f);
-   return 1;
-}