# HG changeset patch # User Matti Hamalainen # Date 1560524893 -10800 # Node ID 6037ba60730aaedcf6a1768f6ad887a74a96d044 # Parent 837c79747ea48aac15c5c9ac2263a016f19feca7 Add output format for "dumping" c64 bitmap image structs data into separate file(s) per data block. diff -r 837c79747ea4 -r 6037ba60730a tools/gfxconv.c --- a/tools/gfxconv.c Fri Jun 14 18:00:18 2019 +0300 +++ b/tools/gfxconv.c Fri Jun 14 18:08:13 2019 +0300 @@ -33,6 +33,7 @@ FFMT_SPRITE, FFMT_IMAGE, + FFMT_DUMP, FFMT_LAST }; @@ -91,6 +92,7 @@ { "C64 bitmap image" , "bitmap", DM_FMT_RDWR , FFMT_BITMAP , -1 , NULL }, { "C64 character/font data" , "chr" , DM_FMT_RDWR , FFMT_CHAR , 0 , " (chr:mc/chr:sc for multi/singlecolor)" }, { "C64 sprite data" , "spr" , DM_FMT_RDWR , FFMT_SPRITE , 0 , " (spr:mc/spr:sc for multi/singlecolor)" }, + { "C64 bitmap image dump" , "dump" , DM_FMT_WR , FFMT_DUMP , 0 , NULL }, }; static const int nbaseFormatList = sizeof(baseFormatList) / sizeof(baseFormatList[0]); @@ -1228,6 +1230,38 @@ } +int dmDumpC64Block(const char *fprefix, const char *fext, const DMC64MemBlock *blk, const int index) +{ + int res = DMERR_OK; + if (blk != NULL && blk->data != NULL) + { + char *filename = dm_strdup_printf("%s_%s_%d.bin", fprefix, fext, index); + if (filename == NULL) + return DMERR_MALLOC; + + res = dmWriteDataFile(NULL, filename, blk->data, blk->size); + dmFree(filename); + } + return res; +} + + +int dmDumpC64Bitmap(const char *fprefix, const DMC64Image *img) +{ + int res; + + for (int i = 0; i < img->nblocks; i++) + { + res = dmDumpC64Block(fprefix, "bitmap", &img->bitmap[i], i); + res = dmDumpC64Block(fprefix, "color", &img->color[i], i); + res = dmDumpC64Block(fprefix, "screen", &img->screen[i], i); + res = dmDumpC64Block(fprefix, "extradata", &img->extraData[i], i); + } + + return res; +} + + int dmConvertC64Bitmap(DMC64Image **pdst, const DMC64Image *src, const DMC64ImageFormat *dstFmt, const DMC64ImageFormat *srcFmt) { @@ -2171,7 +2205,7 @@ // No palette file specified, use internal palette if (optC64Palette == NULL) optC64Palette = &dmC64DefaultPalettes[0]; - + dmMsg(1, "Using internal palette '%s' (%s).\n", optC64Palette->name, optC64Palette->desc); @@ -2250,6 +2284,10 @@ } break; + case FFMT_DUMP: + dmDumpC64Bitmap(optOutFilename, inC64Image); + break; + case FFMT_BITMAP: if ((res = dmConvertC64Bitmap(&outC64Image, inC64Image, &dmC64ImageFormats[optOutFormat], inC64Fmt)) != DMERR_OK)