# HG changeset patch # User Matti Hamalainen # Date 1588001598 -10800 # Node ID 90eec3e1f85f1f23111ec27ff7f05fa0f6bfe73f # Parent b9734859db5cceb64e20d1aebf0ef701661d2d62 Use DMResource I/O instead of stdio for writing JSSMOD module. diff -r b9734859db5c -r 90eec3e1f85f tools/xm2jss.c --- 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) {