changeset 1852:219417325036

Split dmC64GetOpMemBlockAndName() into dmC64GetOpMemBlock() and dmC64GetOpSubjectName() functions for some flexibility.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 22 Jun 2018 23:40:20 +0300
parents cfc7046fb176
children 2081bb4a998a
files tools/gfxconv.c tools/lib64gfx.c tools/lib64gfx.h
diffstat 3 files changed, 51 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/tools/gfxconv.c	Fri Jun 22 23:11:58 2018 +0300
+++ b/tools/gfxconv.c	Fri Jun 22 23:40:20 2018 +0300
@@ -1014,7 +1014,7 @@
     {
         const DMC64EncDecOp *op = fmtGetEncDecOp(dstFmt, i);
         DMC64MemBlock *srcBlk = NULL, *dstBlk = NULL;
-        char *blkname = NULL;
+        const char *blkname = NULL;
         size_t size;
 
         if (op->type == DO_LAST)
@@ -1028,8 +1028,9 @@
             case DO_SET_MEM_HI:
             case DO_SET_MEM_LO:
             case DO_SET_OP:
-                dmC64GetOpMemBlockAndName(src, op->subject, op->bank, (const DMC64MemBlock **) &srcBlk, &blkname);
-                dmC64GetOpMemBlockAndName(dst, op->subject, op->bank, (const DMC64MemBlock **) &dstBlk, &blkname);
+                dmC64GetOpMemBlock(src, op->subject, op->bank, (const DMC64MemBlock **) &srcBlk);
+                dmC64GetOpMemBlock(dst, op->subject, op->bank, (const DMC64MemBlock **) &dstBlk);
+                blkname = dmC64GetOpSubjectName(op->subject);
 
                 // Skip if we did previous fixups/upconverts
                 if (dstBlk != NULL && dstBlk->data != NULL)
--- a/tools/lib64gfx.c	Fri Jun 22 23:11:58 2018 +0300
+++ b/tools/lib64gfx.c	Fri Jun 22 23:40:20 2018 +0300
@@ -810,20 +810,44 @@
 }
 
 
-void dmC64GetOpMemBlockAndName(const DMC64Image *img, const int subject, const int bank, const DMC64MemBlock **blk, char **blkname)
+const char *dmC64GetOpSubjectName(const int subject)
 {
-    switch (subject)
+    static const char *subjectNames[DS_LAST] =
     {
-        case DS_COLOR_RAM  : *blk = &img->color[bank]; *blkname = "Color RAM"; break;
-        case DS_SCREEN_RAM : *blk = &img->screen[bank]; *blkname = "Screen RAM"; break;
-        case DS_BITMAP_RAM : *blk = &img->bitmap[bank]; *blkname = "Bitmap RAM"; break;
-        case DS_CHAR_DATA  : *blk = &img->charData[bank]; *blkname = "Character data"; break;
-        case DS_EXTRA_DATA : *blk = &img->extraData[bank]; *blkname = "Extra data"; break;
-        default: *blk = NULL; *blkname = NULL; break;
+        "Color RAM",
+        "Bitmap RAM",
+        "Screen RAM",
+        "Extra data",
+        "Character data",
+
+        "d020",
+        "d021/bgcol",
+        "d022",
+        "d023",
+        "d024",
+    };
+    if (subject >= 0 && subject < DS_LAST)
+        return subjectNames[subject];
+    else
+        return NULL;
+}
+
+
+void dmC64GetOpMemBlock(const DMC64Image *img, const int subject, const int bank, const DMC64MemBlock **blk)
+{
+    *blk = NULL;
+
+    if (bank >= 0 && bank < img->nbanks)
+    {
+        switch (subject)
+        {
+            case DS_COLOR_RAM  : *blk = &img->color[bank]; break;
+            case DS_SCREEN_RAM : *blk = &img->screen[bank]; break;
+            case DS_BITMAP_RAM : *blk = &img->bitmap[bank]; break;
+            case DS_CHAR_DATA  : *blk = &img->charData[bank]; break;
+            case DS_EXTRA_DATA : *blk = &img->extraData[bank]; break;
+        }
     }
-
-    if (bank >= img->nbanks)
-        *blk = NULL;
 }
 
 
@@ -848,7 +872,7 @@
         const DMC64EncDecOp *op = fmtGetEncDecOp(fmt, i);
         const Uint8 *src;
         DMC64MemBlock *blk = NULL;
-        char *blkname = NULL;
+        const char *blkname = NULL;
         size_t size;
         Uint8 value;
 
@@ -897,7 +921,9 @@
                     case DS_CHAR_DATA:
                     case DS_EXTRA_DATA:
                         // XXX BZZZT .. a nasty cast here --v
-                        dmC64GetOpMemBlockAndName(img, op->subject, op->bank, (const DMC64MemBlock **) &blk, &blkname);
+                        dmC64GetOpMemBlock(img, op->subject, op->bank, (const DMC64MemBlock **) &blk);
+                        blkname = dmC64GetOpSubjectName(op->subject);
+
                         if ((dmC64MemBlockReAlloc(blk, op->offs2 + size)) != DMERR_OK)
                         {
                             return dmError(DMERR_MALLOC,
@@ -1053,7 +1079,7 @@
         const DMC64EncDecOp *op = fmtGetEncDecOp(fmt, i);
         size_t size, chksize;
         const DMC64MemBlock *blk = NULL;
-        char *blkname = NULL;
+        const char *blkname = NULL;
         Uint8 value;
 
         // Check for last operator
@@ -1098,7 +1124,9 @@
                     case DS_BITMAP_RAM:
                     case DS_CHAR_DATA:
                     case DS_EXTRA_DATA:
-                        dmC64GetOpMemBlockAndName(img, op->subject, op->bank, &blk, &blkname);
+                        dmC64GetOpMemBlock(img, op->subject, op->bank, &blk);
+                        blkname = dmC64GetOpSubjectName(op->subject);
+
                         switch (op->type)
                         {
                             case DO_COPY:
--- a/tools/lib64gfx.h	Fri Jun 22 23:11:58 2018 +0300
+++ b/tools/lib64gfx.h	Fri Jun 22 23:40:20 2018 +0300
@@ -114,6 +114,8 @@
     DS_D022,
     DS_D023,
     DS_D024,
+
+    DS_LAST
 };
 
 
@@ -313,7 +315,8 @@
 // Encoding and decoding of formats and images
 int       dmC64ConvertCSDataToImage(DMImage *img, int xoffs, int yoffs, const Uint8 *inBuf, int width, int height, BOOL multicolor, int *colors);
 
-void      dmC64GetOpMemBlockAndName(const DMC64Image *img, const int subject, const int bank, const DMC64MemBlock **blk, char **blkname);
+const char *dmC64GetOpSubjectName(const int subject);
+void      dmC64GetOpMemBlock(const DMC64Image *img, const int subject, const int bank, const DMC64MemBlock **blk);
 int       dmC64SanityCheckEncDecOp(const int i, const DMC64EncDecOp *op, const DMC64Image *img);
 BOOL      dmC64GetOpSize(const DMC64EncDecOp *op, const DMC64ImageFormat *fmt, size_t *size);