# HG changeset patch # User Matti Hamalainen # Date 1424871367 -7200 # Node ID db495f421242a8747827655c10d48579096e231f # Parent 3132868d1548a9b285bdaf1d9c7f4ec2ebea53b2 Change dmC64DefaultSizes[] array into a function instead. diff -r 3132868d1548 -r db495f421242 tools/lib64gfx.c --- 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)