Mercurial > hg > dmlib
changeset 1365:60d7240e1a63
Remove hardcoded encoding/decoding operator counts from the structures, use
a sentinel instead.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 23 Sep 2017 01:20:07 +0300 |
parents | 0d61895e1763 |
children | d4387509a363 |
files | tools/lib64gfx.c tools/lib64gfx.h |
diffstat | 2 files changed, 26 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/tools/lib64gfx.c Fri Sep 22 23:00:32 2017 +0300 +++ b/tools/lib64gfx.c Sat Sep 23 01:20:07 2017 +0300 @@ -362,12 +362,12 @@ C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, fmtProbeDrazPaint20Packed, fmtDecodeDrazPaintPacked, NULL, NULL, NULL, - 4, { { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, { DT_BITMAP, 0x0800, 0, 0, NULL, NULL }, { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -377,7 +377,6 @@ C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, fmtProbeDrazLace10Packed, fmtDecodeDrazPaintPacked, NULL, NULL, NULL, - 6, { { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, { DT_BITMAP, 0x0800, 0, 0, NULL, NULL }, @@ -385,6 +384,7 @@ { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL }, { DT_BITMAP, 0x2800, 1, 0, NULL, NULL }, { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtDrazLaceSetLaceType, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -394,12 +394,12 @@ C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 4, { { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, { DT_BITMAP, 0x0800, 0, 0, NULL, NULL }, { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -409,7 +409,6 @@ C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 6, { { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, { DT_BITMAP, 0x0800, 0, 0, NULL, NULL }, @@ -417,6 +416,7 @@ { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL }, { DT_BITMAP, 0x2800, 1, 0, NULL, NULL }, { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtDrazLaceSetLaceType, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -426,7 +426,6 @@ C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 6, { { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL }, { DT_COLOR_REG, 0x03e8, 0, DC_BGCOL, NULL, NULL }, @@ -435,6 +434,7 @@ { DT_SCREEN_RAM, 0x4400, 1, 0, NULL, NULL }, { DT_COLOR_RAM, 0x4800, 0, 0, NULL, NULL }, { DT_DEC_FUNCTION, 0x0000, 0, 0, fmtTruePaintSetLaceType, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -444,12 +444,12 @@ C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 4, { { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -459,12 +459,12 @@ C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 4, { { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, { DT_COLOR_RAM, 0x2338, 0, 0, NULL, NULL }, { DT_COLOR_REG, 0x2329, 0, DC_BGCOL, NULL, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -474,12 +474,12 @@ C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, fmtProbeAmicaPaintPacked, fmtDecodeAmicaPaintPacked, NULL, NULL, NULL, - 4, { { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -489,12 +489,12 @@ C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 4, { { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL }, { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -504,10 +504,10 @@ C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 2, { { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -517,10 +517,10 @@ C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 2, { { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -530,10 +530,10 @@ C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 2, { { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL }, { DT_BITMAP, 0x0400, 0, 0, NULL, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -543,7 +543,6 @@ C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 11, { { DT_COLOR_RAM, 0x0100, 0, 0, NULL, NULL }, @@ -559,6 +558,7 @@ { DT_BITMAP, 0x2500, 0, 0, NULL, NULL }, { DT_DEC_FUNCTION, 0x0000, D64_FLI_8BANK, 0, fmtSetFLIType, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -568,7 +568,6 @@ C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 11, { { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL }, { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL }, @@ -581,6 +580,7 @@ { DT_SCREEN_RAM, 0x2000, 7, 0, NULL, NULL }, { DT_BITMAP, 0x2400, 0, 0, NULL, NULL }, { DT_DEC_FUNCTION, 0x0000, D64_FLI_8BANK, 0, fmtSetFLIType, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -590,12 +590,12 @@ C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, NULL, NULL, NULL, NULL, NULL, - 4, { { DT_BITMAP, 0x0000, 0, 0, NULL, NULL }, { DT_SCREEN_RAM, 0x2000, 0, 0, NULL, NULL }, { DT_COLOR_RAM, 0x2400, 0, 0, NULL, NULL }, { DT_COLOR_SET, 0x00 , 0, DC_BGCOL, NULL, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, @@ -610,13 +610,13 @@ XX2_WIDTH_CH , XX2_HEIGHT_CH, fmtProbeFormatXX2, fmtDecodeFormatXX2, NULL, NULL, NULL, - 4, { { DT_BITMAP, 0x0000, 0, XX2_BSIZE, NULL, NULL }, { DT_COLOR_RAM, XX2_BSIZE + XX2_SIZE, 0, XX2_SIZE, NULL, NULL }, { DT_SCREEN_RAM, XX2_BSIZE, 0, XX2_SIZE, NULL, NULL }, { DT_COLOR_SET, 11 , 0, DC_BGCOL, NULL, NULL }, + { DT_LAST, 0, 0, 0, NULL, NULL }, } }, }; @@ -734,17 +734,9 @@ int dmC64DecodeGenericBMP(DMC64Image *img, const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt) { - int i; - if (buf == NULL || img == NULL || fmt == NULL) return DMERR_NULLPTR; - if (fmt->nencdecOps < 0 || fmt->nencdecOps >= D64_MAX_ENCDEC_OPS) - { - return dmError(DMERR_INTERNAL, - "Invalid number of enc/dec ops in format. Internal error.\n"); - } - // Clear the image structure, set basics img->type = fmt->type; img->width = fmt->width; @@ -753,12 +745,15 @@ img->ch_height = fmt->ch_height; // Perform decoding - for (i = 0; i < fmt->nencdecOps; i++) + for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++) { const DMC64EncDecOp *op = &fmt->encdecOps[i]; const Uint8 *src; size_t size; int res; + // Check for last operator + if (op->type == DT_LAST) + break; // Check operation validity if ((res = dmC64SanityCheckEncDecOp(i, op)) != DMERR_OK) @@ -875,19 +870,13 @@ int dmC64EncodeGenericBMP(Uint8 **pbuf, size_t *plen, const DMC64Image *img, const DMC64ImageFormat *fmt) { - int i, res = DMERR_OK; + int res = DMERR_OK; Uint8 *buf; size_t allocated; if (pbuf == NULL || plen == NULL || img == NULL || fmt == NULL) return DMERR_NULLPTR; - if (fmt->nencdecOps < 0 || fmt->nencdecOps >= D64_MAX_ENCDEC_OPS) - { - return dmError(DMERR_INTERNAL, - "Invalid number of enc/dec ops in format. Internal error.\n"); - } - // Allocate the output buffer *plen = 0; if (fmt->size > 0) @@ -904,12 +893,16 @@ } // Perform encoding - for (i = 0; i < fmt->nencdecOps; i++) + for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++) { const DMC64EncDecOp *op = &fmt->encdecOps[i]; Uint8 *dst = 2 + buf + op->offs; size_t size, chksize; + // Check for last operator + if (op->type == DT_LAST) + break; + // Check operation validity if ((res = dmC64SanityCheckEncDecOp(i, op)) != DMERR_OK) goto error;
--- a/tools/lib64gfx.h Fri Sep 22 23:00:32 2017 +0300 +++ b/tools/lib64gfx.h Sat Sep 23 01:20:07 2017 +0300 @@ -180,7 +180,6 @@ int (*convertFrom)(DMImage *, const DMC64Image *); int (*convertTo)(DMImage *, DMC64Image *); - int nencdecOps; DMC64EncDecOp encdecOps[D64_MAX_ENCDEC_OPS]; } DMC64ImageFormat;