diff tools/gfxconv.c @ 1886:1af79412f249

Remove the stdio FILE support from libgfx API, now only DMResource is supported.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 25 Jun 2018 13:52:20 +0300
parents b386d339056f
children b97f273a9d54
line wrap: on
line diff
--- a/tools/gfxconv.c	Mon Jun 25 13:24:50 2018 +0300
+++ b/tools/gfxconv.c	Mon Jun 25 13:52:20 2018 +0300
@@ -1186,64 +1186,24 @@
 }
 
 
-#define DMCOL(x) (((x) >> 4) & 0xf)
-
-int dmWriteIFFMasterRAW(const char *filename, const char *prefix, const DMImage *img, const DMImageConvSpec *spec, const int fmtid)
+int dmWriteIFFMasterRAWHeaderFile(
+    const char *hdrFilename, const char *dataFilename,
+    const char *prefix, const DMImage *img,
+    const DMImageConvSpec *spec, const int fmtid)
 {
-    // Open data file for writing
-    FILE *fp = NULL;
-    int res = DMERR_OK;
+    DMResource *fp;
+    int res;
 
-    if ((fp = fopen(filename, "w")) == NULL)
+    if ((res = dmf_open_stdio(hdrFilename, "wb", &fp)) != DMERR_OK)
     {
-        res = dmError(DMERR_FOPEN,
-            "Could not create file '%s'.\n", filename);
-        goto err;
+        return dmError(res,
+            "RAW: Could not open file '%s' for writing.\n",
+            hdrFilename);
     }
 
-
-    fprintf(fp,
-        "%s_width: dw.w %d\n"
-        "%s_height: dw.w %d\n"
-        "%s_nplanes: dw.w %d\n",
-        prefix, img->width * spec->scaleX,
-        prefix, img->height * spec->scaleY,
-        prefix, spec->nplanes);
-
-    if (fmtid == DM_IMGFMT_ARAW)
-    {
-        fprintf(fp,
-            "%s_ncolors: dw.w %d\n"
-            "%s_palette:\n",
-            prefix, img->ncolors,
-            prefix);
+    res = dmWriteIFFMasterRAWHeader(fp, dataFilename, prefix, img, spec, fmtid);
 
-        for (int i = 0; i < (1 << spec->nplanes); i++)
-        {
-            Uint32 color;
-            if (i < img->ncolors)
-            {
-                color = (DMCOL(img->pal[i].r) << 8) |
-                        (DMCOL(img->pal[i].g) << 4) |
-                        (DMCOL(img->pal[i].b));
-            }
-            else
-                color = 0;
-
-            fprintf(fp,
-                "\tdc.w $%04X\n",
-                color);
-        }
-
-        fprintf(fp,
-            "%s: incbin \"%s\"\n",
-            prefix, filename);
-    }
-
-err:
-    if (fp != NULL)
-        fclose(fp);
-
+    dmf_close(fp);
     return res;
 }
 
@@ -1294,8 +1254,8 @@
         case DM_IMGFMT_RAW:
         case DM_IMGFMT_ARAW:
             {
-                char *prefix = NULL, *dataFilename = NULL;
-                if ((dataFilename = dm_strdup_fext(filename, "%s.inc")) == NULL ||
+                char *prefix = NULL, *hdrFilename = NULL;
+                if ((hdrFilename = dm_strdup_fext(filename, "%s.inc")) == NULL ||
                     (prefix = dm_strdup_fext(filename, "img_%s")) == NULL)
                 {
                     res = dmError(DMERR_MALLOC,
@@ -1314,12 +1274,13 @@
                         spec->planar ? "planar/interleaved" : "non-interleaved");
                     dmMsg(2, "%s datafile '%s', ID prefix '%s'.\n",
                         fmt->fmtid == DM_IMGFMT_ARAW ? "ARAW" : "RAW",
-                        dataFilename, prefix);
+                        hdrFilename, prefix);
                 }
-                res = dmWriteIFFMasterRAW(dataFilename, prefix, image, spec, fmt->fmtid);
+                res = dmWriteIFFMasterRAWHeaderFile(
+                    hdrFilename, filename, prefix, image, spec, fmt->fmtid);
 
                 dmFree(prefix);
-                dmFree(dataFilename);
+                dmFree(hdrFilename);
             }
             break;
 
@@ -1330,6 +1291,8 @@
     // If no error has occured thus far, write the image
     if (res == DMERR_OK)
     {
+        DMResource *fp;
+
         if (info)
         {
             char *str;
@@ -1343,7 +1306,16 @@
             dmMsg(2, "Using %s output.\n", str);
         }
 
-        res = fmt->write(filename, image, spec);
+        if ((res = dmf_open_stdio(filename, "wb", &fp)) != DMERR_OK)
+        {
+            dmErrorMsg("Could not open file '%s' for writing.\n",
+                filename);
+            goto err;
+        }
+
+        res = fmt->write(fp, image, spec);
+
+        dmf_close(fp);
     }
 
 err:
@@ -1951,8 +1923,8 @@
                 }
 
                 // Read input
-                if (ifmt->readFILE != NULL)
-                    res = ifmt->readFILE(fp, &inImage);
+                if (ifmt->read != NULL)
+                    res = ifmt->read(fp, &inImage);
                 else
                     dmErrorMsg("Unsupported input image format for image conversion.\n");