Mercurial > hg > dmlib
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);