changeset 2126:cffadb745484

Fix character ROM data handling.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 27 May 2019 10:47:46 +0300
parents 56d4dc81774b
children c1a9519a619f
files tools/64vw.c tools/gfxconv.c
diffstat 2 files changed, 19 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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);