# HG changeset patch # User Matti Hamalainen # Date 1560717118 -10800 # Node ID c146033f1f6a0a428a91dc789c3625d955e5221c # Parent c7495fcaffa92017f795bc77ba914468be91b5fa Cleanups. diff -r c7495fcaffa9 -r c146033f1f6a tools/mod2wav.c --- a/tools/mod2wav.c Sun Jun 16 22:33:05 2019 +0300 +++ b/tools/mod2wav.c Sun Jun 16 23:31:58 2019 +0300 @@ -88,7 +88,7 @@ { case 0: dmPrintBanner(stdout, dmProgName, - "[options] [sourcefile] [destfile]"); + "[options] [sourcefile] [destfile.wav]"); dmArgsPrintHelp(stdout, optList, optListN, 0); exit(0); @@ -142,10 +142,10 @@ BOOL argHandleFile(char *currArg) { - if (!optInFilename) + if (optInFilename == NULL) optInFilename = currArg; else - if (!optOutFilename) + if (optOutFilename == NULL) optOutFilename = currArg; else { @@ -208,6 +208,8 @@ dmWriteWAVChunk(outFile, &wav.chData); } + + int main(int argc, char *argv[]) { DMResource *inFile = NULL; @@ -215,9 +217,9 @@ JSSModule *mod = NULL; JSSMixer *dev = NULL; JSSPlayer *plr = NULL; + size_t bufLen = 1024*4, dataTotal, dataWritten, sampSize; + Uint8 *dataBuf = NULL; int result = -1; - size_t bufLen = 1024*4, dataTotal, dataWritten, sampSize; - Uint8 *mb = NULL; dmInitProg("mod2wav", "XM/JSSMOD to WAV renderer", "0.2", NULL, NULL); dmVerbosity = 1; @@ -225,7 +227,7 @@ // Parse arguments if (!dmArgsProcess(argc, argv, optList, optListN, argHandleOpt, argHandleFile, OPTH_BAILOUT)) - exit(1); + return 1; // Check arguments if (optInFilename == NULL || optOutFilename == NULL) @@ -242,7 +244,7 @@ { dmErrorMsg("Error opening input file '%s', %d: %s\n", optInFilename, result, dmErrorStr(result)); - return 1; + goto exit; } // Read module file @@ -273,18 +275,19 @@ { dmErrorMsg("Error loading module file, %d: %s\n", result, dmErrorStr(result)); + goto exit; } // Check if we have anything if (mod == NULL) - return 3; + goto exit; // Try to convert it if ((result = jssConvertModuleForPlaying(mod)) != DMERR_OK) { dmErrorMsg("Could not convert module for playing, %d: %s\n", result, dmErrorStr(result)); - return 3; + goto exit; } // Open mixer @@ -292,11 +295,11 @@ if (dev == NULL) { dmErrorMsg("jvmInit() returned NULL\n"); - return 4; + goto exit; } sampSize = jvmGetSampleSize(dev); - if ((mb = dmMalloc(bufLen * sampSize)) == NULL) + if ((dataBuf = dmMalloc(bufLen * sampSize)) == NULL) { dmErrorMsg("Could not allocate mixing buffer\n"); return 5; @@ -310,7 +313,7 @@ if ((plr = jmpInit(dev)) == NULL) { dmErrorMsg("jmpInit() returned NULL.\n"); - return 6; + goto exit; } // Set callback @@ -341,7 +344,7 @@ int err = dmGetErrno(); dmErrorMsg("Error opening output file '%s' #%d: %s.\n", optInFilename, err, dmErrorStr(err)); - return 7; + goto exit; } // Write initial header @@ -364,16 +367,15 @@ if (writeLen > 0) { - jvmRenderAudio(dev, mb, writeLen); + jvmRenderAudio(dev, dataBuf, writeLen); #if (SDL_BYTEORDER == SDL_BIG_ENDIAN) - jssEncodeSample16((Uint16 *)mb, writeLen * optOutChannels, jsampSwapEndianess); + jssEncodeSample16((Uint16 *)dataBuf, writeLen * optOutChannels, jsampSwapEndianess); #endif - dataWritten = fwrite(mb, sampSize, writeLen, outFile); + dataWritten = fwrite(dataBuf, sampSize, writeLen, outFile); if (dataWritten < writeLen) { dmErrorMsg("Error writing data!\n"); - fclose(outFile); - return 8; + goto exit; } dataTotal += dataWritten; } @@ -386,19 +388,23 @@ if (fseek(outFile, 0L, SEEK_SET) != 0) { dmErrorMsg("Error rewinding to header position!\n"); - return 9; + goto exit; } dmWriteWAVHeader(outFile, jvmGetSampleRes(dev), optOutFreq, optOutChannels, dataTotal); // Done! - fclose(outFile); + dmMsg(1, "OK.\n"); +exit: + if (outFile != NULL) + fclose(outFile); + + dmFree(dataBuf); jmpClose(plr); jvmClose(dev); jssFreeModule(mod); jssClose(); - dmMsg(1, "OK.\n"); return 0; }