# HG changeset patch # User Matti Hamalainen # Date 1558943266 -10800 # Node ID cffadb7454842226fe805d0bc5db2cf479af1bdb # Parent 56d4dc81774b60e9e94433ce016b416e20c7f864 Fix character ROM data handling. diff -r 56d4dc81774b -r cffadb745484 tools/64vw.c --- a/tools/64vw.c Mon May 27 08:35:35 2019 +0300 +++ b/tools/64vw.c Mon May 27 10:47:46 2019 +0300 @@ -220,6 +220,7 @@ SDL_Surface *surf, const DMC64ImageConvSpec *spec) { DMImage bmap; + BOOL charDataSet; int ret; memset(&bmap, 0, sizeof(bmap)); @@ -232,16 +233,21 @@ if ((ret = dmSetDefaultC64Palette(&bmap)) != DMERR_OK) return ret; - if (cimage->charData->data == NULL) - cimage->charData = &setCharROM; + if (cimage->charData[0].data == NULL) + { + memcpy(&cimage->charData[0], &setCharROM, sizeof(DMC64MemBlock)); + charDataSet = TRUE; + } + else + charDataSet = FALSE; if (fmt->format->convertFrom != NULL) ret = fmt->format->convertFrom(&bmap, cimage, fmt, spec); else ret = dmC64ConvertGenericBMP2Image(&bmap, cimage, fmt, spec); - if (cimage->charData == &setCharROM) - cimage->charData = NULL; + if (charDataSet) + memset(&cimage->charData[0], 0, sizeof(DMC64MemBlock)); SDL_SetPaletteColors(surf->format->palette, (SDL_Color *) bmap.pal->colors, 0, bmap.pal->ncolors); @@ -344,7 +350,8 @@ dmMsg(1, "Using character ROM file '%s'.\n", optCharROMFilename); - if ((ret = dmReadDataFile(NULL, optCharROMFilename, &setCharROM.data, &setCharROM.size)) != DMERR_OK) + if ((ret = dmReadDataFile(NULL, optCharROMFilename, + &setCharROM.data, &setCharROM.size)) != DMERR_OK) { dmErrorMsg("Could not read character ROM from '%s'.\n", optCharROMFilename); diff -r 56d4dc81774b -r cffadb745484 tools/gfxconv.c --- a/tools/gfxconv.c Mon May 27 08:35:35 2019 +0300 +++ b/tools/gfxconv.c Mon May 27 10:47:46 2019 +0300 @@ -1945,10 +1945,6 @@ argHandleOpt, argHandleFile, OPTH_BAILOUT)) exit(1); - // Check character ROM filename - if (optCharROMFilename == NULL) - optCharROMFilename = DM_DEF_CHARGEN; - // Determine input format, if not specified if (optInType == FFMT_AUTO && optInFilename != NULL) { @@ -2152,15 +2148,19 @@ case FFMT_SPRITE: // Set character data if required if ((inC64Fmt->format->type & D64_FMT_CHAR) && - inC64Image->charData->data == NULL) + inC64Image->charData[0].data == NULL) { + // Check character ROM filename + if (optCharROMFilename == NULL) + optCharROMFilename = DM_DEF_CHARGEN; + // Attempt to read character ROM dmMsg(1, "Using character ROM file '%s'.\n", optCharROMFilename); if ((res = dmReadDataFile(NULL, optCharROMFilename, - &inC64Image->charData->data, - &inC64Image->charData->size)) != DMERR_OK) + &inC64Image->charData[0].data, + &inC64Image->charData[0].size)) != DMERR_OK) { dmErrorMsg("Could not read character ROM from '%s'.\n", optCharROMFilename);