changeset 2226:6037ba60730a

Add output format for "dumping" c64 bitmap image structs data into separate file(s) per data block.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 14 Jun 2019 18:08:13 +0300
parents 837c79747ea4
children 5046458d6c34
files tools/gfxconv.c
diffstat 1 files changed, 39 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/tools/gfxconv.c	Fri Jun 14 18:00:18 2019 +0300
+++ b/tools/gfxconv.c	Fri Jun 14 18:08:13 2019 +0300
@@ -33,6 +33,7 @@
     FFMT_SPRITE,
 
     FFMT_IMAGE,
+    FFMT_DUMP,
 
     FFMT_LAST
 };
@@ -91,6 +92,7 @@
     { "C64 bitmap image"                     , "bitmap", DM_FMT_RDWR , FFMT_BITMAP , -1 , NULL  },
     { "C64 character/font data"              , "chr"   , DM_FMT_RDWR , FFMT_CHAR   , 0  , " (chr:mc/chr:sc for multi/singlecolor)" },
     { "C64 sprite data"                      , "spr"   , DM_FMT_RDWR , FFMT_SPRITE , 0  , " (spr:mc/spr:sc for multi/singlecolor)" },
+    { "C64 bitmap image dump"                , "dump"  , DM_FMT_WR   , FFMT_DUMP   , 0  , NULL },
 };
 
 static const int nbaseFormatList = sizeof(baseFormatList) / sizeof(baseFormatList[0]);
@@ -1228,6 +1230,38 @@
 }
 
 
+int dmDumpC64Block(const char *fprefix, const char *fext, const DMC64MemBlock *blk, const int index)
+{
+    int res = DMERR_OK;
+    if (blk != NULL && blk->data != NULL)
+    {
+        char *filename = dm_strdup_printf("%s_%s_%d.bin", fprefix, fext, index);
+        if (filename == NULL)
+            return DMERR_MALLOC;
+
+        res = dmWriteDataFile(NULL, filename, blk->data, blk->size);
+        dmFree(filename);
+    }
+    return res;
+}
+
+
+int dmDumpC64Bitmap(const char *fprefix, const DMC64Image *img)
+{
+    int res;
+
+    for (int i = 0; i < img->nblocks; i++)
+    {
+        res = dmDumpC64Block(fprefix, "bitmap", &img->bitmap[i], i);
+        res = dmDumpC64Block(fprefix, "color", &img->color[i], i);
+        res = dmDumpC64Block(fprefix, "screen", &img->screen[i], i);
+        res = dmDumpC64Block(fprefix, "extradata", &img->extraData[i], i);
+    }
+
+    return res;
+}
+
+
 int dmConvertC64Bitmap(DMC64Image **pdst, const DMC64Image *src,
     const DMC64ImageFormat *dstFmt, const DMC64ImageFormat *srcFmt)
 {
@@ -2171,7 +2205,7 @@
         // No palette file specified, use internal palette
         if (optC64Palette == NULL)
             optC64Palette = &dmC64DefaultPalettes[0];
-            
+
         dmMsg(1, "Using internal palette '%s' (%s).\n",
             optC64Palette->name, optC64Palette->desc);
 
@@ -2250,6 +2284,10 @@
                     }
                     break;
 
+                case FFMT_DUMP:
+                    dmDumpC64Bitmap(optOutFilename, inC64Image);
+                    break;
+
                 case FFMT_BITMAP:
                     if ((res = dmConvertC64Bitmap(&outC64Image, inC64Image,
                         &dmC64ImageFormats[optOutFormat], inC64Fmt)) != DMERR_OK)