changeset 2476:90eec3e1f85f

Use DMResource I/O instead of stdio for writing JSSMOD module.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 27 Apr 2020 18:33:18 +0300
parents b9734859db5c
children 0ab24caf7fdf
files tools/xm2jss.c
diffstat 1 files changed, 50 insertions(+), 51 deletions(-) [+]
line wrap: on
line diff
--- a/tools/xm2jss.c	Mon Apr 27 18:13:11 2020 +0300
+++ b/tools/xm2jss.c	Mon Apr 27 18:33:18 2020 +0300
@@ -510,20 +510,20 @@
 #undef JSFOREACHNOTE2
 
 
-static BOOL jssMODWriteEnvelope(FILE *outFile, JSSEnvelope *env, const char *name, const int ninst)
+static BOOL jssMODWriteEnvelope(DMResource *outFile, const JSSEnvelope *env, const char *name, const int ninst)
 {
     BOOL ok =
-        dm_fwrite_byte(outFile, env->flags) &&
-        dm_fwrite_byte(outFile, env->npoints) &&
-        dm_fwrite_byte(outFile, env->sustain) &&
-        dm_fwrite_byte(outFile, env->loopS) &&
-        dm_fwrite_byte(outFile, env->loopE);
+        dmf_write_byte(outFile, env->flags) &&
+        dmf_write_byte(outFile, env->npoints) &&
+        dmf_write_byte(outFile, env->sustain) &&
+        dmf_write_byte(outFile, env->loopS) &&
+        dmf_write_byte(outFile, env->loopE);
 
     for (int i = 0; ok && i < env->npoints; i++)
     {
         ok =
-            dm_fwrite_le16(outFile, env->points[i].frame) &&
-            dm_fwrite_le16(outFile, env->points[i].value);
+            dmf_write_le16(outFile, env->points[i].frame) &&
+            dmf_write_le16(outFile, env->points[i].value);
     }
 
     if (!ok)
@@ -539,7 +539,8 @@
 
 /* Save a JSSMOD file
  */
-int jssSaveJSSMOD(FILE *outFile, JSSModule *module, int patMode, int flags8, int flags16)
+int jssSaveJSSMOD(DMResource *outFile, const JSSModule *module,
+    const int patMode, const int flags8, const int flags16)
 {
     JSSMODHeader jssH;
     const size_t patBufSize = 512*1024; // 256kB pattern buffer
@@ -582,21 +583,21 @@
     jssH.patMode            = patMode;
 
     // Write header
-    if (!dm_fwrite_str(outFile, jssH.idMagic, sizeof(jssH.idMagic)) ||
-        !dm_fwrite_byte(outFile, jssH.idVersion) ||
+    if (!dmf_write_str(outFile, jssH.idMagic, sizeof(jssH.idMagic)) ||
+        !dmf_write_byte(outFile, jssH.idVersion) ||
 
-        !dm_fwrite_le16(outFile, jssH.defFlags) ||
-        !dm_fwrite_le16(outFile, jssH.intVersion) ||
-        !dm_fwrite_le16(outFile, jssH.norders) ||
-        !dm_fwrite_le16(outFile, jssH.npatterns) ||
-        !dm_fwrite_le16(outFile, jssH.nextInstruments) ||
-        !dm_fwrite_le16(outFile, jssH.ninstruments) ||
-        !dm_fwrite_le16(outFile, jssH.defRestartPos) ||
+        !dmf_write_le16(outFile, jssH.defFlags) ||
+        !dmf_write_le16(outFile, jssH.intVersion) ||
+        !dmf_write_le16(outFile, jssH.norders) ||
+        !dmf_write_le16(outFile, jssH.npatterns) ||
+        !dmf_write_le16(outFile, jssH.nextInstruments) ||
+        !dmf_write_le16(outFile, jssH.ninstruments) ||
+        !dmf_write_le16(outFile, jssH.defRestartPos) ||
 
-        !dm_fwrite_byte(outFile, jssH.nchannels) ||
-        !dm_fwrite_byte(outFile, jssH.defSpeed) ||
-        !dm_fwrite_byte(outFile, jssH.defTempo) ||
-        !dm_fwrite_byte(outFile, jssH.patMode))
+        !dmf_write_byte(outFile, jssH.nchannels) ||
+        !dmf_write_byte(outFile, jssH.defSpeed) ||
+        !dmf_write_byte(outFile, jssH.defTempo) ||
+        !dmf_write_byte(outFile, jssH.patMode))
     {
         JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
         "Error writing JSSMOD header!\n");
@@ -620,7 +621,7 @@
         if (tmp == jsetNotSet)
             tmp = 0xffff;
 
-        if (!dm_fwrite_le16(outFile, tmp))
+        if (!dmf_write_le16(outFile, tmp))
             JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
             "Could not write JSSMOD orders list entry #%d (%d).\n",
             index, tmp);
@@ -696,9 +697,9 @@
 
         totalSize += dataSize + sizeof(JSSMODPattern);
 
-        if (!dm_fwrite_le32(outFile, dataSize) ||
-            !dm_fwrite_le16(outFile, pattern->nrows) ||
-            !dm_fwrite_le16(outFile, pattern->nmap))
+        if (!dmf_write_le32(outFile, dataSize) ||
+            !dmf_write_le16(outFile, pattern->nrows) ||
+            !dmf_write_le16(outFile, pattern->nmap))
         {
             JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
             "Error writing JSSMOD pattern header #%d.\n",
@@ -707,7 +708,7 @@
 
         if (pattern->nmap != pattern->nchannels)
         {
-            if (!dm_fwrite_str(outFile, pattern->map,
+            if (!dmf_write_str(outFile, pattern->map,
                  sizeof(pattern->map[0]) * pattern->nmap))
             {
                 JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
@@ -716,7 +717,7 @@
             }
         }
 
-        if (!dm_fwrite_str(outFile, patBuf, dataSize))
+        if (!dmf_write_str(outFile, patBuf, dataSize))
         {
             JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
             "Error writing JSSMOD pattern data #%d.\n",
@@ -745,19 +746,19 @@
 
         // Misc data
         BOOL ok =
-            dm_fwrite_byte(outFile, einst->nsamples) &&
-            dm_fwrite_byte(outFile, einst->vibratoType) &&
-            dm_fwrite_le16(outFile, einst->vibratoSweep) &&
-            dm_fwrite_le16(outFile, einst->vibratoDepth) &&
-            dm_fwrite_le16(outFile, einst->vibratoRate) &&
-            dm_fwrite_le16(outFile, einst->fadeOut);
+            dmf_write_byte(outFile, einst->nsamples) &&
+            dmf_write_byte(outFile, einst->vibratoType) &&
+            dmf_write_le16(outFile, einst->vibratoSweep) &&
+            dmf_write_le16(outFile, einst->vibratoDepth) &&
+            dmf_write_le16(outFile, einst->vibratoRate) &&
+            dmf_write_le16(outFile, einst->fadeOut);
 
         // Sample number for note(s)
         for (int i = 0; ok && i < jsetNNotes; i++)
         {
             int snum = einst->sNumForNotes[i];
             Uint32 tmp = (snum != jsetNotSet) ? snum + 1 : 0;
-            ok = dm_fwrite_le32(outFile, tmp);
+            ok = dmf_write_le32(outFile, tmp);
         }
 
         // Envelopes
@@ -788,16 +789,16 @@
             inst->convFlags |= jsampHasData;
 
         // Write instrument header
-        if (!dm_fwrite_le32(outFile, inst->size) ||
-            !dm_fwrite_le32(outFile, inst->loopS) ||
-            !dm_fwrite_le32(outFile, inst->loopE) ||
-            !dm_fwrite_le16(outFile, inst->flags) ||
-            !dm_fwrite_le16(outFile, inst->C4BaseSpeed) ||
-            !dm_fwrite_le16(outFile, inst->ERelNote) ||
-            !dm_fwrite_le16(outFile, inst->EFineTune) ||
-            !dm_fwrite_le16(outFile, inst->EPanning) ||
-            !dm_fwrite_byte(outFile, inst->volume) ||
-            !dm_fwrite_byte(outFile, inst->convFlags))
+        if (!dmf_write_le32(outFile, inst->size) ||
+            !dmf_write_le32(outFile, inst->loopS) ||
+            !dmf_write_le32(outFile, inst->loopE) ||
+            !dmf_write_le16(outFile, inst->flags) ||
+            !dmf_write_le16(outFile, inst->C4BaseSpeed) ||
+            !dmf_write_le16(outFile, inst->ERelNote) ||
+            !dmf_write_le16(outFile, inst->EFineTune) ||
+            !dmf_write_le16(outFile, inst->EPanning) ||
+            !dmf_write_byte(outFile, inst->volume) ||
+            !dmf_write_byte(outFile, inst->convFlags))
         {
             JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
             "Error writing JSSMOD instrument #%d.\n",
@@ -841,7 +842,7 @@
                 index, dmErrorStr(res));
             }
 
-            if (!dm_fwrite_str(outFile, inst->data, bsize))
+            if (!dmf_write_str(outFile, inst->data, bsize))
             {
                 JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
                 "Error writing JSSMOD sample data for instrument #%d.\n",
@@ -1296,8 +1297,7 @@
 
 int main(int argc, char *argv[])
 {
-    DMResource *inFile = NULL;
-    FILE *outFile = NULL;
+    DMResource *inFile = NULL, *outFile = NULL;
     JSSModule *src = NULL, *dst = NULL;
     int res = DMERR_OK;
 
@@ -1393,9 +1393,8 @@
         dst = src;
 
     // Write output file
-    if ((outFile = fopen(optOutFilename, "wb")) == NULL)
+    if ((res = dmf_open_stdio(optOutFilename, "wb", &outFile)) != DMERR_OK)
     {
-        res = dmGetErrno();
         dmErrorMsg("Error creating output file '%s': %s\n",
             optOutFilename, dmErrorStr(res));
         goto out;
@@ -1406,7 +1405,7 @@
 
     res = jssSaveJSSMOD(outFile, dst, optPatternMode, optSampMode8, optSampMode16);
 
-    fclose(outFile);
+    dmf_close(outFile);
 
     if (res != 0)
     {