Mercurial > hg > dmlib
diff tools/lib64gfx.c @ 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 |
line wrap: on
line diff
--- 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: