changeset 462:ab401a5087f9

Improve ARAW output.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 04 Nov 2012 16:09:07 +0200
parents c7a3aacbd55e
children 4204e9ea8ae1
files gfxconv.c libgfx.c libgfx.h
diffstat 3 files changed, 61 insertions(+), 18 deletions(-) [+]
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);
--- a/libgfx.c	Sun Nov 04 15:41:46 2012 +0200
+++ b/libgfx.c	Sun Nov 04 16:09:07 2012 +0200
@@ -210,17 +210,11 @@
 
 #define DMCOL(x) (((x) >> 4) & 0xf)
 
-int dmWriteIFFMasterRAWPalette(const char *filename, DMImage *img, int ncolors)
+int dmWriteIFFMasterRAWPalette(FILE *fp, DMImage *img, int ncolors,
+    const char *indent, const char *type)
 {
-    FILE *fp;
     int i;
 
-    if ((fp = fopen(filename, "w")) == NULL)
-    {
-        dmError("IFFMasterRAW: Could not open file '%s' for writing.\n", filename);
-        return -15;
-    }
-
     for (i = 0; i < ncolors; i++)
     {
         int color;
@@ -233,11 +227,13 @@
         else
             color = 0;
 
-        fprintf(fp, "\tdc.w $%04X\n", color);
+        fprintf(fp, "%s%s $%04X\n",
+            indent != NULL ? indent : "\t",
+            type != NULL ? type : "dw.b",
+            color);
     }
 
-    fclose(fp);
-    return 0;    
+    return DMERR_OK;
 }
 
 
--- a/libgfx.h	Sun Nov 04 15:41:46 2012 +0200
+++ b/libgfx.h	Sun Nov 04 16:09:07 2012 +0200
@@ -93,7 +93,7 @@
 
 int dmWriteImageData(DMImage *img, void *cbdata, BOOL (*writeRowCB)(void *, Uint8 *, size_t), const DMImageSpec *spec);
 
-int dmWriteIFFMasterRAWPalette(const char *filename, DMImage *img, int ncolors);
+int dmWriteIFFMasterRAWPalette(FILE *fp, DMImage *img, int ncolors, const char *indent, const char *type);
 int dmWriteIFFMasterRAWImageFILE(FILE *fp, DMImage *img, DMImageSpec *spec);
 int dmWriteIFFMasterRAWImage(const char *filename, DMImage *img, DMImageSpec *spec);