diff gfxconv.c @ 462:ab401a5087f9

Improve ARAW output.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 04 Nov 2012 16:09:07 +0200
parents 0af039b6c0ae
children 4204e9ea8ae1
line wrap: on
line diff
--- a/gfxconv.c	Sun Nov 04 15:41:46 2012 +0200
+++ b/gfxconv.c	Sun Nov 04 16:09:07 2012 +0200
@@ -549,12 +549,59 @@
 
         case IMGFMT_ARAW:
             {
-                int res;
-                char *palFilename = dm_strdup_printf("%s.pal", filename);
-                res = dmWriteIFFMasterRAWPalette(palFilename, image, 1 << optSpec.nplanes);
-                dmFree(palFilename);
-                if (res != DMERR_OK)
-                    return res;
+                FILE *fp;
+                char *dataFilename, *fext, *tmpFilename = dm_strdup(filename);
+                
+                // Form data file filename
+                if (tmpFilename == NULL)
+                    return DMERR_MALLOC;
+
+                fext = strrchr(tmpFilename, '.');
+                if (fext != NULL)
+                    *fext = 0;
+                dataFilename = dm_strdup_printf("%s.inc", tmpFilename);
+                dmFree(tmpFilename);
+
+                // Open data file for writing
+                if ((fp = fopen(dataFilename, "w")) == NULL)
+                    dmError("Could not create '%s'.\n", dataFilename);
+                dmFree(dataFilename);
+
+                if (fp != NULL)
+                {
+                    // Strip extension
+                    int i;
+                    char *palID = dm_strdup_printf("img_%s", filename);
+                    char *fext = strrchr(palID, '.');
+                    if (fext != NULL)
+                        *fext = 0;
+
+                    // Replace any non-alphanumerics
+                    for (i = 0; palID[i]; i++)
+                    {
+                        if (isalnum(palID[i]))
+                            palID[i] = tolower(palID[i]);
+                        else
+                            palID[i] = '_';
+                    }
+
+                    fprintf(fp,
+                        "%s_width: dw.w %d\n"
+                        "%s_height: dw.w %d\n"
+                        "%s_nplanes: dw.w %d\n"
+                        "%s_ncolors: dw.w %d\n"
+                        "%s_palette:\n",
+                        palID, image->width,
+                        palID, image->height,
+                        palID, spec->nplanes,
+                        palID, image->ncolors,
+                        palID);
+
+                    dmWriteIFFMasterRAWPalette(fp, image, 1 << optSpec.nplanes, NULL, NULL);
+
+                    fclose(fp);
+                    dmFree(palID);
+                }
 
                 if (info) dmMsg(2, "%d bitplanes, %s interleave.\n", spec->nplanes, spec->interleave ? "with" : "without");
                 return dmWriteIFFMasterRAWImage(filename, image, spec);