changeset 927:db495f421242

Change dmC64DefaultSizes[] array into a function instead.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 25 Feb 2015 15:36:07 +0200
parents 3132868d1548
children ebe0d93e03c0
files tools/lib64gfx.c
diffstat 1 files changed, 33 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/tools/lib64gfx.c	Wed Feb 25 15:34:36 2015 +0200
+++ b/tools/lib64gfx.c	Wed Feb 25 15:36:07 2015 +0200
@@ -53,21 +53,6 @@
 };
 
 
-const size_t dmC64DefaultSizes[DT_LAST] =
-{
-    C64_SCR_COLOR_SIZE,
-    C64_SCR_BITMAP_SIZE,
-    C64_SCR_SCREEN_SIZE,
-    1,
-    0,
-    C64_SCR_EXTRADATA,
-    0,
-    0,
-    C64_MAX_CHARS * C64_CHR_HEIGHT * C64_CHR_WIDTH,
-    0
-};
-
-
 #define DM_GET_ADDR_LO(addr) ((addr) & 0xff)
 #define DM_GET_ADDR_HI(addr) (((addr) >> 8) & 0xff)
 
@@ -640,6 +625,37 @@
 }
 
 
+static int dmC64GetOpSize(const DMC64EncDecOp *op, const DMC64ImageFormat *fmt)
+{
+    if (op->size != 0)
+        return op->size;
+
+    switch (op->type)
+    {
+        case DT_SCREEN_RAM:
+            return C64_SCREEN_SIZE;
+
+        case DT_COLOR_RAM:
+            return C64_COLOR_SIZE;
+
+        case DT_BITMAP:
+            return C64_BITMAP_SIZE;
+
+        case DT_EXTRADATA:
+            return C64_SCR_EXTRADATA;
+
+        case DT_CHAR_DATA:
+            return C64_MAX_CHARS * C64_CHR_HEIGHT * C64_CHR_WIDTH;
+
+        case DT_COLOR_REG:
+            return 1;
+
+        default:
+            return 0;
+    }
+}
+
+
 int dmC64DecodeGenericBMP(DMC64Image *img, const Uint8 *buf,
     const size_t len, const DMC64ImageFormat *fmt)
 {
@@ -671,7 +687,7 @@
             return res;
 
         // Check size
-        size = (op->size == 0) ? dmC64DefaultSizes[op->type] : op->size;
+        size = dmC64GetOpSize(op, fmt);
 
         // Do we need to reallocate some more space?
         if (op->offs + size > len)
@@ -815,7 +831,7 @@
             goto error;
 
         // Check size
-        size = (op->size == 0) ? dmC64DefaultSizes[op->type] : op->size;
+        size = dmC64GetOpSize(op, fmt);
 
         // Do we need to reallocate some more space?
         if (2 + op->offs + size > allocated)