annotate tools/xm2jss.c @ 2482:7151597d8ec6

Cosmetic.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 28 Apr 2020 01:39:29 +0300
parents 90eec3e1f85f
children d56a0e86067a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 /*
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 * xm2jss - Convert XM module to JSSMOD
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 * Programmed and designed by Matti 'ccr' Hamalainen
2279
fc58f62f100c Bump copyright years.
Matti Hamalainen <ccr@tnsp.org>
parents: 2278
diff changeset
4 * (C) Copyright 2006-2019 Tecnic Software productions (TNSP)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5 *
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 * Please read file 'COPYING' for information on license and distribution.
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 */
1432
a9516570cc26 Improve build, so that we can build the tools and tests with minimal
Matti Hamalainen <ccr@tnsp.org>
parents: 1431
diff changeset
8 #include "dmtool.h"
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9 #include <stdio.h>
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10 #include "jss.h"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11 #include "jssmod.h"
184
50f55def91e5 Add a minor optimization in the conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 86
diff changeset
12 #include "jssplr.h"
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 #include "dmlib.h"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14 #include "dmargs.h"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15 #include "dmres.h"
1241
5e2b90e3e4bc Fix hasData handling and include dmfile.h header.
Matti Hamalainen <ccr@tnsp.org>
parents: 1237
diff changeset
16 #include "dmfile.h"
285
245b15cd1919 Don't link libSDL uselessly to utilities that do not actually use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 202
diff changeset
17 #include "dmmutex.h"
245b15cd1919 Don't link libSDL uselessly to utilities that do not actually use it.
Matti Hamalainen <ccr@tnsp.org>
parents: 202
diff changeset
18
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19
184
50f55def91e5 Add a minor optimization in the conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 86
diff changeset
20 #define jmpNMODEffectTable (36)
50f55def91e5 Add a minor optimization in the conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 86
diff changeset
21 static const char jmpMODEffectTable[jmpNMODEffectTable] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
1099
f309a382d6e7 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1097
diff changeset
22 #define JM_SAMPLE_MODE_MASK (jsampFlipSign | jsampSwapEndianess | jsampSplit | jsampDelta)
184
50f55def91e5 Add a minor optimization in the conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 86
diff changeset
23
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24
300
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
25 char *optInFilename = NULL, *optOutFilename = NULL;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 BOOL optIgnoreErrors = FALSE,
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 optStripExtInstr = FALSE,
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28 optStripInstr = FALSE,
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29 optStripSamples = FALSE,
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 optOptimize = FALSE;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32 int optPatternMode = PATMODE_COMP_HORIZ,
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 optSampMode16 = jsampDelta,
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 optSampMode8 = jsampFlipSign | jsampDelta;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37 static const char* patModeTable[PATMODE_LAST] =
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39 "Raw horizontal",
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 "Compressed horizontal (similar to XM modules)",
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41 "Raw vertical",
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
42 "Compressed vertical",
2303
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
43 "Raw horizontal for each element",
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44 "Raw vertical for each element",
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45 };
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
46
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
47
860
daebbf28953d The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 856
diff changeset
48 static const DMOptArg optList[] =
daebbf28953d The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 856
diff changeset
49 {
2408
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
50 { 0, '?', "help" , "Show this help", OPT_NONE },
2410
bc05bcfc4598 Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents: 2408
diff changeset
51 { 1, 0, "license" , "Print out this program's license agreement", OPT_NONE },
2408
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
52 { 2, 'v', "verbose" , "Be more verbose", OPT_NONE },
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
53
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
54 { 10, 'i', "ignore" , "Ignore errors", OPT_NONE },
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
55 { 12, 'p', "patterns" , "Pattern storage mode", OPT_ARGREQ },
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
56 { 14, 'E', "strip-ext-instr" , "Strip ext. instruments (implies -I -S)", OPT_NONE },
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
57 { 16, 'I', "strip-instr" , "Strip instruments (implies -S)", OPT_NONE },
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
58 { 18, 'S', "strip-samples" , "Strip instr. sampledata", OPT_NONE },
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
59 { 20, '8', "smode8" , "8-bit sample conversion flags", OPT_ARGREQ },
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
60 { 22, '1', "smode16" , "16-bit sample conversion flags", OPT_ARGREQ },
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
61 { 24, 'O', "optimize" , "Optimize module", OPT_NONE },
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
62 };
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
63
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
64 const int optListN = sizeof(optList) / sizeof(optList[0]);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
66
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
67 void argShowHelp()
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
68 {
337
b420025e5cd2 Change argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 301
diff changeset
69 dmPrintBanner(stdout, dmProgName, "[options] <input.xm> <output.jmod>");
2402
b7cd5dd0b82e Merge one more change from th-libs args processing.
Matti Hamalainen <ccr@tnsp.org>
parents: 2384
diff changeset
70 dmArgsPrintHelp(stdout, optList, optListN, 0, 80 - 2);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
71
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
72 printf("\n"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
73 "Pattern storage modes:\n");
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
74
1313
eb3f883f4acb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1310
diff changeset
75 for (int i = 1; i < PATMODE_LAST; i++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
76 printf(" %d = %s\n", i, patModeTable[i-1]);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
77
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
78 printf(
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
79 "\n"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
80 "Sample data conversion flags (summative):\n"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
81 " 1 = Delta encoding (DEF 8 & 16)\n"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
82 " 2 = Flip signedness (DEF 8)\n"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
83 " 4 = Swap endianess (affects 16-bit only)\n"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
84 " 8 = Split and de-interleave hi/lo bytes (affects 16-bit only)\n"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
85 "\n"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
86 );
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
87 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
88
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
89 BOOL argHandleOpt(const int optN, char *optArg, char *currArg)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
90 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
91 switch (optN)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
92 {
2408
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
93 case 0:
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
94 argShowHelp();
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
95 exit(0);
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
96 break;
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
97
2410
bc05bcfc4598 Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents: 2408
diff changeset
98 case 1:
bc05bcfc4598 Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents: 2408
diff changeset
99 dmPrintLicense(stdout);
bc05bcfc4598 Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents: 2408
diff changeset
100 exit(0);
bc05bcfc4598 Add a C file with the generic BSD license text and a function for
Matti Hamalainen <ccr@tnsp.org>
parents: 2408
diff changeset
101 break;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102
2408
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
103 case 2:
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
104 dmVerbosity++;
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
105 break;
337
b420025e5cd2 Change argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 301
diff changeset
106
2408
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
107 case 10:
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
108 optIgnoreErrors = TRUE;
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
109 break;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110
2408
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
111 case 12:
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
112 optPatternMode = atoi(optArg);
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
113 if (optPatternMode <= 0 || optPatternMode >= PATMODE_LAST)
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
114 {
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
115 dmErrorMsg("Unknown pattern conversion mode %d\n", optPatternMode);
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
116 return FALSE;
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
117 }
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
118 break;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
119
2408
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
120 case 14: optStripExtInstr = TRUE; break;
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
121 case 16: optStripInstr = TRUE; break;
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
122 case 18: optStripSamples = TRUE; break;
337
b420025e5cd2 Change argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 301
diff changeset
123
2408
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
124 case 20: optSampMode8 = atoi(optArg) & JM_SAMPLE_MODE_MASK; break;
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
125 case 22: optSampMode16 = atoi(optArg) & JM_SAMPLE_MODE_MASK; break;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
126
2408
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
127 case 24: optOptimize = TRUE; break;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
128
2408
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
129 default:
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
130 dmErrorMsg("Unimplemented option argument '%s'.\n", currArg);
60e119262c67 Option index re-ordering cleanup work.
Matti Hamalainen <ccr@tnsp.org>
parents: 2402
diff changeset
131 return FALSE;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
132 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
133
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
134 return TRUE;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
135 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
136
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
138 BOOL argHandleFile(char *currArg)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
140 // Was not option argument
300
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
141 if (!optInFilename)
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
142 optInFilename = currArg;
337
b420025e5cd2 Change argument handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 301
diff changeset
143 else
300
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
144 if (!optOutFilename)
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
145 optOutFilename = currArg;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
146 else
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
147 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 860
diff changeset
148 dmErrorMsg("Too many filename arguments specified, '%s'.\n", currArg);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
149 return FALSE;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
150 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
151
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
152 return TRUE;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
153 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
154
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
155
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
156 static inline const JSSNote * jssGetNotePtr(const JSSPattern *pattern, const int channel, const int row)
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
157 {
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
158 if (!pattern->used[channel])
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
159 return NULL;
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
160 else
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
161 return pattern->data + (pattern->nchannels * row) + channel;
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
162 }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
163
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
164
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
165 /* These functions and the macro mess are meant to make the
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
166 * conversion routines themselves clearer and simpler.
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
167 */
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
168 BOOL jsPutByte(Uint8 *patBuf, size_t patBufSize, size_t *npatBuf, Uint8 val)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
169 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
170 if (*npatBuf >= patBufSize)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
171 return FALSE;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
172 else
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
173 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
174 patBuf[*npatBuf] = val;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
175 (*npatBuf)++;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
176 return TRUE;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
177 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
178 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
179
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
180 #define JSPUTBYTE(x) do { if (!jsPutByte(patBuf, patBufSize, patSize, x)) return DMERR_BOUNDS; } while (0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
182 #define JSCOMP(x,z) do { if ((x) != jsetNotSet) { qflags |= (z); qcomp++; } } while (0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184 #define JSCOMPPUT(xf,xv,qv) do { \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
185 if (qflags & (xf)) { \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
186 if ((xv) < 0 || (xv) > 255) \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
187 JSSERROR(DMERR_BOUNDS, DMERR_BOUNDS, \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
188 "%s value out of bounds %d.\n", qv, (xv)); \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
189 JSPUTBYTE(xv); \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
190 } \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
191 } while (0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
192
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
193 #define JSCONVPUT(xv,qv) do { \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194 if ((xv) != jsetNotSet) { \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195 if ((xv) < 0 || (xv) > 254) \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196 JSSERROR(DMERR_BOUNDS, DMERR_BOUNDS, \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 "%s value out of bounds %d.\n", qv, (xv)); \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198 JSPUTBYTE((xv) + 1); \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
199 } else { \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200 JSPUTBYTE(0); \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
201 } \
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202 } while (0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
203
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
204
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
205 /* Convert a note
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
206 */
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
207 static int jssDoConvertNote(
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
208 Uint8 *patBuf, const size_t patBufSize,
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
209 size_t *patSize, const JSSNote *pnote)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
211 Uint8 tmp;
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
212 if (pnote->note == jsetNotSet)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
213 tmp = 0;
1194
1f2cfa0119aa Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
214 else
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
215 if (pnote->note == jsetNoteOff)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
216 tmp = 127;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
217 else
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
218 tmp = pnote->note + 1;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
219
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
220 if (tmp > 0x7f)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
221 JSSERROR(DMERR_BOUNDS, DMERR_BOUNDS, "Note value out of bounds %d > 0x7f.\n", tmp);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
222
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
223 JSPUTBYTE(tmp & 0x7f);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
224
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
225 JSCONVPUT(pnote->instrument, "Instrument");
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
226 JSCONVPUT(pnote->volume, "Volume");
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
227 JSCONVPUT(pnote->effect, "Effect");
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
228
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
229 tmp = (pnote->param != jsetNotSet) ? pnote->param : 0;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
230 JSPUTBYTE(tmp);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
231
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
232 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
233 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
234
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
235
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
236 /* Compress a note
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
237 */
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
238 static int jssDoCompressNote(
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
239 Uint8 *patBuf, const size_t patBufSize,
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
240 size_t *patSize, const JSSNote *pnote)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
241 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
242 Uint8 qflags = 0;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
243 int qcomp = 0;
1201
83693e2797dd Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1195
diff changeset
244
83693e2797dd Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1195
diff changeset
245 // Determine what would get stored,
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
246 // aka actually how much space we use
1210
6b48bad13399 Rename pattern note packing flag COMP_* constants to JM_COMP_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1209
diff changeset
247 JSCOMP(pnote->note, JM_COMP_NOTE);
6b48bad13399 Rename pattern note packing flag COMP_* constants to JM_COMP_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1209
diff changeset
248 JSCOMP(pnote->instrument, JM_COMP_INSTRUMENT);
6b48bad13399 Rename pattern note packing flag COMP_* constants to JM_COMP_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1209
diff changeset
249 JSCOMP(pnote->volume, JM_COMP_VOLUME);
6b48bad13399 Rename pattern note packing flag COMP_* constants to JM_COMP_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1209
diff changeset
250 JSCOMP(pnote->effect, JM_COMP_EFFECT);
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
251 if (pnote->param != jsetNotSet && pnote->param != 0)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
252 {
1210
6b48bad13399 Rename pattern note packing flag COMP_* constants to JM_COMP_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1209
diff changeset
253 qflags |= JM_COMP_PARAM;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
254 qcomp++;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
255 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
256
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
257 if (qcomp < 4)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
258 {
1201
83693e2797dd Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1195
diff changeset
259 // Okay, it's less than 4 bytes, so use compressed
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
260 JSPUTBYTE(qflags | 0x80);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
261
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
262 if (pnote->note != jsetNotSet)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
263 {
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
264 Uint8 tmp = (pnote->note != jsetNoteOff) ? pnote->note : 127;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
265 if (tmp > 0x7f)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
266 JSSERROR(DMERR_BOUNDS, DMERR_BOUNDS, "Note value out of bounds %d > 0x7f.\n", tmp);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
267 JSPUTBYTE(tmp);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
268 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
269
1210
6b48bad13399 Rename pattern note packing flag COMP_* constants to JM_COMP_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1209
diff changeset
270 JSCOMPPUT(JM_COMP_INSTRUMENT, pnote->instrument, "Instrument");
6b48bad13399 Rename pattern note packing flag COMP_* constants to JM_COMP_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1209
diff changeset
271 JSCOMPPUT(JM_COMP_VOLUME, pnote->volume, "Volume");
6b48bad13399 Rename pattern note packing flag COMP_* constants to JM_COMP_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1209
diff changeset
272 JSCOMPPUT(JM_COMP_EFFECT, pnote->effect, "Effect");
6b48bad13399 Rename pattern note packing flag COMP_* constants to JM_COMP_*.
Matti Hamalainen <ccr@tnsp.org>
parents: 1209
diff changeset
273 JSCOMPPUT(JM_COMP_PARAM, pnote->param, "Param");
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
274
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
275 return DMERR_OK;
1201
83693e2797dd Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1195
diff changeset
276 }
83693e2797dd Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1195
diff changeset
277 else
83693e2797dd Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1195
diff changeset
278 {
83693e2797dd Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1195
diff changeset
279 // Was 4 bytes or more, just dump it all in ..
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
280 return jssDoConvertNote(patBuf, patBufSize, patSize, pnote);
1201
83693e2797dd Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1195
diff changeset
281 }
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
282 }
1201
83693e2797dd Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1195
diff changeset
283
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
284
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
285 static int jssCompressNote(
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
286 Uint8 *patBuf, const size_t patBufSize,
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
287 size_t *patSize, const JSSPattern *pattern,
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
288 const int channel, const int row)
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
289 {
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
290 const JSSNote *pnote = jssGetNotePtr(pattern, channel, row);
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
291 if (pnote != NULL)
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
292 {
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
293 int res = jssDoCompressNote(patBuf, patBufSize, patSize, pnote);
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
294 if (res != DMERR_OK)
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
295 {
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
296 JSSERROR(res, res, "Note compression failed [patBuf=%p, patBufSize=%d, patSize=%d, row=%d, chn=%d]\n",
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
297 patBuf, patBufSize, *patSize, row, channel);
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
298 return res;
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
299 }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
300 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
301 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
302 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
303
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
304
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
305 /* Compress pattern
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
306 */
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
307 static int jssConvertPatternCompHoriz(
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
308 Uint8 *patBuf, const size_t patBufSize,
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
309 size_t *patSize, const JSSPattern *pattern)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
310 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
311 *patSize = 0;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
312
1336
1f097180bed3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1335
diff changeset
313 for (int row = 0; row < pattern->nrows; row++)
1f097180bed3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1335
diff changeset
314 for (int channel = 0; channel < pattern->nchannels; channel++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
315 {
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
316 int res = jssCompressNote(patBuf, patBufSize, patSize, pattern, channel, row);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
317 if (res != DMERR_OK)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
318 return res;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
319 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
320
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
321 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
322 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
323
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
324
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
325 static int jssConvertPatternCompVert(
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
326 Uint8 *patBuf, const size_t patBufSize,
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
327 size_t *patSize, const JSSPattern *pattern)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
328 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
329 *patSize = 0;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
330
1336
1f097180bed3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1335
diff changeset
331 for (int channel = 0; channel < pattern->nchannels; channel++)
1f097180bed3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1335
diff changeset
332 for (int row = 0; row < pattern->nrows; row++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
333 {
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
334 int res = jssCompressNote(patBuf, patBufSize, patSize, pattern, channel, row);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
335 if (res != DMERR_OK)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
336 return res;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
337 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
338
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
339 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
340 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
341
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
342
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
343 /* Convert a pattern
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
344 */
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
345 static int jssConvertNote(
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
346 Uint8 *patBuf, const size_t patBufSize,
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
347 size_t *patSize, const JSSPattern *pattern,
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
348 const int channel, const int row)
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
349 {
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
350 const JSSNote *pnote = jssGetNotePtr(pattern, channel, row);
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
351 if (pnote != NULL)
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
352 {
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
353 int res = jssDoConvertNote(patBuf, patBufSize, patSize, pnote);
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
354 if (res != DMERR_OK)
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
355 {
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
356 JSSERROR(res, res, "Note conversion failed [patBuf=%p, patBufSize=%d, patSize=%d, row=%d, chn=%d]\n",
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
357 patBuf, patBufSize, *patSize, row, channel);
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
358 return res;
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
359 }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
360 }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
361 return DMERR_OK;
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
362 }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
363
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
364
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
365 static int jssConvertPatternRawHoriz(
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
366 Uint8 *patBuf, const size_t patBufSize,
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
367 size_t *patSize, const JSSPattern *pattern)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
368 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
369 *patSize = 0;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
370
1336
1f097180bed3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1335
diff changeset
371 for (int row = 0; row < pattern->nrows; row++)
1f097180bed3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1335
diff changeset
372 for (int channel = 0; channel < pattern->nchannels; channel++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
373 {
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
374 int res = jssConvertNote(patBuf, patBufSize, patSize, pattern, channel, row);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
375 if (res != DMERR_OK)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
376 return res;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
377 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
378
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
379 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
380 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
381
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
382
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
383 static int jssConvertPatternRawVert(
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
384 Uint8 *patBuf, const size_t patBufSize,
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
385 size_t *patSize, const JSSPattern *pattern)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
386 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
387 *patSize = 0;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
388
1336
1f097180bed3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1335
diff changeset
389 for (int channel = 0; channel < pattern->nchannels; channel++)
1f097180bed3 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1335
diff changeset
390 for (int row = 0; row < pattern->nrows; row++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
391 {
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
392 int res = jssConvertNote(patBuf, patBufSize, patSize, pattern, channel, row);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
393 if (res != DMERR_OK)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
394 return res;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
395 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
396
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
397 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
398 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
399
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
400
2303
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
401 #define JSFOREACHNOTE1 \
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
402 for (channel = 0; channel < pattern->nchannels; channel++) \
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
403 for (row = 0; row < pattern->nrows; row++) { \
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
404 const JSSNote *pnote = jssGetNotePtr(pattern, channel, row); \
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
405 if (pnote != NULL) {
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
406
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
407 #define JSFOREACHNOTE2 } }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
408
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
409
2303
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
410 static int jssConvertPatternRawElemVert(
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
411 Uint8 *patBuf, const size_t patBufSize,
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
412 size_t *patSize, const JSSPattern *pattern)
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
413 {
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
414 Uint8 tmp;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
415 int row, channel;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
416 *patSize = 0;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
417
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
418 JSFOREACHNOTE1;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
419 if (pnote->note == jsetNotSet)
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
420 tmp = 0;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
421 else
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
422 if (pnote->note == jsetNoteOff)
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
423 tmp = 127;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
424 else
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
425 tmp = pnote->note + 1;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
426
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
427 if (tmp > 0x7f)
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
428 JSSERROR(DMERR_BOUNDS, DMERR_BOUNDS, "Note value out of bounds %d > 0x7f.\n", tmp);
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
429
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
430 JSPUTBYTE(tmp);
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
431 JSFOREACHNOTE2;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
432
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
433 JSFOREACHNOTE1;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
434 JSCONVPUT(pnote->instrument, "Instrument");
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
435 JSFOREACHNOTE2;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
436
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
437 JSFOREACHNOTE1;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
438 JSCONVPUT(pnote->volume, "Volume");
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
439 JSFOREACHNOTE2;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
440
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
441 JSFOREACHNOTE1;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
442 JSCONVPUT(pnote->effect, "Effect");
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
443 JSFOREACHNOTE2;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
444
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
445 JSFOREACHNOTE1;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
446 tmp = (pnote->param != jsetNotSet) ? pnote->param : 0;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
447 JSPUTBYTE(tmp);
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
448 JSFOREACHNOTE2;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
449
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
450 return DMERR_OK;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
451 }
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
452
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
453 #undef JSFOREACHNOTE1
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
454 #undef JSFOREACHNOTE2
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
455
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
456
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
457 #define JSFOREACHNOTE1 \
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
458 for (row = 0; row < pattern->nrows; row++) \
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
459 for (channel = 0; channel < pattern->nchannels; channel++) { \
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
460 const JSSNote *pnote = jssGetNotePtr(pattern, channel, row); \
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
461 if (pnote != NULL) {
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
462
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
463 #define JSFOREACHNOTE2 } }
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
464
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
465
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
466 static int jssConvertPatternRawElemHoriz(
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
467 Uint8 *patBuf, const size_t patBufSize,
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
468 size_t *patSize, const JSSPattern *pattern)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
469 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
470 Uint8 tmp;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
471 int row, channel;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
472 *patSize = 0;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
473
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
474 JSFOREACHNOTE1;
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
475 if (pnote->note == jsetNotSet)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
476 tmp = 0;
1194
1f2cfa0119aa Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
477 else
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
478 if (pnote->note == jsetNoteOff)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
479 tmp = 127;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
480 else
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
481 tmp = pnote->note + 1;
1194
1f2cfa0119aa Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
482
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
483 if (tmp > 0x7f)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
484 JSSERROR(DMERR_BOUNDS, DMERR_BOUNDS, "Note value out of bounds %d > 0x7f.\n", tmp);
1194
1f2cfa0119aa Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
485
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
486 JSPUTBYTE(tmp);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
487 JSFOREACHNOTE2;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
488
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
489 JSFOREACHNOTE1;
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
490 JSCONVPUT(pnote->instrument, "Instrument");
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
491 JSFOREACHNOTE2;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
492
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
493 JSFOREACHNOTE1;
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
494 JSCONVPUT(pnote->volume, "Volume");
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
495 JSFOREACHNOTE2;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
496
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
497 JSFOREACHNOTE1;
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
498 JSCONVPUT(pnote->effect, "Effect");
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
499 JSFOREACHNOTE2;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
500
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
501 JSFOREACHNOTE1;
1207
59b5821b5cf9 Rename function arguments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1201
diff changeset
502 tmp = (pnote->param != jsetNotSet) ? pnote->param : 0;
338
cd57ba1130eb Fixes and improvements in the JMOD saving and loading.
Matti Hamalainen <ccr@tnsp.org>
parents: 337
diff changeset
503 JSPUTBYTE(tmp);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
504 JSFOREACHNOTE2;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
505
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
506 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
507 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
508
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
509 #undef JSFOREACHNOTE1
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
510 #undef JSFOREACHNOTE2
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
511
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
512
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
513 static BOOL jssMODWriteEnvelope(DMResource *outFile, const JSSEnvelope *env, const char *name, const int ninst)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
514 {
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
515 BOOL ok =
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
516 dmf_write_byte(outFile, env->flags) &&
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
517 dmf_write_byte(outFile, env->npoints) &&
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
518 dmf_write_byte(outFile, env->sustain) &&
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
519 dmf_write_byte(outFile, env->loopS) &&
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
520 dmf_write_byte(outFile, env->loopE);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
521
1313
eb3f883f4acb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1310
diff changeset
522 for (int i = 0; ok && i < env->npoints; i++)
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
523 {
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
524 ok =
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
525 dmf_write_le16(outFile, env->points[i].frame) &&
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
526 dmf_write_le16(outFile, env->points[i].value);
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
527 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
528
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
529 if (!ok)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
530 {
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
531 JSSERROR(DMERR_FWRITE, ok,
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
532 "Failed to write JSSMOD %s-envelope for instrument #%d.\n",
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
533 name, ninst);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
534 }
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
535
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
536 return ok;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
537 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
538
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
539
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
540 /* Save a JSSMOD file
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
541 */
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
542 int jssSaveJSSMOD(DMResource *outFile, const JSSModule *module,
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
543 const int patMode, const int flags8, const int flags16)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
544 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
545 JSSMODHeader jssH;
2001
c0b062f881e5 Increase pattern buffer size.
Matti Hamalainen <ccr@tnsp.org>
parents: 1975
diff changeset
546 const size_t patBufSize = 512*1024; // 256kB pattern buffer
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
547 Uint8 *patBuf;
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
548 size_t totalSize;
1972
cedb5ca1533b Clean up the sample conversion code a bit. Improve error handling in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 1606
diff changeset
549 int index, res;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
550
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
551 // Check the module
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
552 if (module == NULL)
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
553 {
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
554 JSSERROR(DMERR_NULLPTR, DMERR_NULLPTR,
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
555 "Module pointer was NULL\n");
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
556 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
557
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
558 if (module->nchannels < 1 || module->npatterns < 1 || module->norders < 1 ||
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
559 module->nchannels > jsetMaxChannels ||
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
560 module->npatterns > jsetMaxPatterns ||
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
561 module->norders > jsetMaxOrders)
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
562 {
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
563 JSSERROR(DMERR_BOUNDS, DMERR_BOUNDS,
1195
4d27c4ec8d4d Use %d instead of %i in formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 1194
diff changeset
564 "Module had invalid values (nchannels=%d, npatterns=%d, norders=%d)\n",
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
565 module->nchannels, module->npatterns, module->norders);
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
566 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
567
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
568 // Create the JSSMOD header
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
569 jssH.idMagic[0] = 'J';
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
570 jssH.idMagic[1] = 'M';
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
571 jssH.idVersion = JSSMOD_VERSION;
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
572 jssH.defFlags = module->defFlags;
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
573 jssH.intVersion = module->intVersion;
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
574 jssH.norders = module->norders;
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
575 jssH.npatterns = module->npatterns;
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
576 jssH.nextInstruments = module->nextInstruments;
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
577 jssH.ninstruments = module->ninstruments;
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
578 jssH.defRestartPos = module->defRestartPos;
1231
a275b7382ffa Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1211
diff changeset
579
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
580 jssH.nchannels = module->nchannels;
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
581 jssH.defSpeed = module->defSpeed;
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
582 jssH.defTempo = module->defTempo;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
583 jssH.patMode = patMode;
1209
cb31e57982f2 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1207
diff changeset
584
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
585 // Write header
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
586 if (!dmf_write_str(outFile, jssH.idMagic, sizeof(jssH.idMagic)) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
587 !dmf_write_byte(outFile, jssH.idVersion) ||
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
588
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
589 !dmf_write_le16(outFile, jssH.defFlags) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
590 !dmf_write_le16(outFile, jssH.intVersion) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
591 !dmf_write_le16(outFile, jssH.norders) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
592 !dmf_write_le16(outFile, jssH.npatterns) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
593 !dmf_write_le16(outFile, jssH.nextInstruments) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
594 !dmf_write_le16(outFile, jssH.ninstruments) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
595 !dmf_write_le16(outFile, jssH.defRestartPos) ||
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
596
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
597 !dmf_write_byte(outFile, jssH.nchannels) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
598 !dmf_write_byte(outFile, jssH.defSpeed) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
599 !dmf_write_byte(outFile, jssH.defTempo) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
600 !dmf_write_byte(outFile, jssH.patMode))
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
601 {
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
602 JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
1245
2a0488078b78 Cleanups, more consistent error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1244
diff changeset
603 "Error writing JSSMOD header!\n");
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
604 }
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
605
9
c42ee907de9c Various improvements in xm2jss output.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
606 totalSize = sizeof(jssH);
2384
36edd316184a Fix some format strings to use proper PRI*_SIZE_T where necessary.
Matti Hamalainen <ccr@tnsp.org>
parents: 2303
diff changeset
607 dmMsg(1," * JSSMOD-header 0x%04x, %" DM_PRIu_SIZE_T " bytes.\n",
36edd316184a Fix some format strings to use proper PRI*_SIZE_T where necessary.
Matti Hamalainen <ccr@tnsp.org>
parents: 2303
diff changeset
608 JSSMOD_VERSION, totalSize);
9
c42ee907de9c Various improvements in xm2jss output.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
609
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
610 // Write orders list
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
611 for (totalSize = index = 0; index < module->norders; index++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
612 {
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
613 int tmp = module->orderList[index];
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
614 if (tmp != jsetNotSet && tmp > module->npatterns)
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
615 {
1237
8b6ed580e800 Add sanity check to order list writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1235
diff changeset
616 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
8b6ed580e800 Add sanity check to order list writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1235
diff changeset
617 "Orderlist entry #%d has invalid value %d.\n",
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
618 index, tmp);
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
619 }
1237
8b6ed580e800 Add sanity check to order list writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1235
diff changeset
620
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
621 if (tmp == jsetNotSet)
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
622 tmp = 0xffff;
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
623
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
624 if (!dmf_write_le16(outFile, tmp))
1237
8b6ed580e800 Add sanity check to order list writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1235
diff changeset
625 JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
8b6ed580e800 Add sanity check to order list writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1235
diff changeset
626 "Could not write JSSMOD orders list entry #%d (%d).\n",
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
627 index, tmp);
1237
8b6ed580e800 Add sanity check to order list writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1235
diff changeset
628
8b6ed580e800 Add sanity check to order list writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1235
diff changeset
629 totalSize += sizeof(Uint16);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
630 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
631
2384
36edd316184a Fix some format strings to use proper PRI*_SIZE_T where necessary.
Matti Hamalainen <ccr@tnsp.org>
parents: 2303
diff changeset
632 dmMsg(1," * %d item orders list, %" DM_PRIu_SIZE_T " bytes.\n",
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
633 module->norders, totalSize);
9
c42ee907de9c Various improvements in xm2jss output.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
634
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
635 // Allocate pattern compression buffer
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
636 if ((patBuf = dmMalloc(patBufSize)) == NULL)
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
637 {
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
638 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
639 "Error allocating memory for pattern compression buffer.\n");
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
640 }
9
c42ee907de9c Various improvements in xm2jss output.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
641
1232
10cb3c400451 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1231
diff changeset
642 // Convert and write patterns
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
643 for (totalSize = index = 0; index < module->npatterns; index++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
644 {
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
645 JSSPattern *pattern = module->patterns[index];
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
646 size_t dataSize = 0;
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
647 int ret;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
648
2282
6c3c3355007d Fix conversion of unoptimized modules in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 2280
diff changeset
649 if (pattern == NULL)
6c3c3355007d Fix conversion of unoptimized modules in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 2280
diff changeset
650 {
6c3c3355007d Fix conversion of unoptimized modules in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 2280
diff changeset
651 dmMsg(1,
6c3c3355007d Fix conversion of unoptimized modules in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 2280
diff changeset
652 "Pattern #%d is NULL.\n", index);
6c3c3355007d Fix conversion of unoptimized modules in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 2280
diff changeset
653 pattern = module->patterns[module->npatterns];
6c3c3355007d Fix conversion of unoptimized modules in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 2280
diff changeset
654 }
6c3c3355007d Fix conversion of unoptimized modules in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 2280
diff changeset
655
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
656 if (pattern->nrows > jsetMaxRows)
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
657 {
1232
10cb3c400451 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1231
diff changeset
658 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
10cb3c400451 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1231
diff changeset
659 "Pattern #%d has %d rows > %d max.\n",
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
660 index, pattern->nrows, jsetMaxRows);
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
661 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
662
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
663 switch (patMode)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
664 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
665 case PATMODE_RAW_HORIZ:
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
666 ret = jssConvertPatternRawHoriz(patBuf, patBufSize, &dataSize, pattern);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
667 break;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
668 case PATMODE_COMP_HORIZ:
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
669 ret = jssConvertPatternCompHoriz(patBuf, patBufSize, &dataSize, pattern);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
670 break;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
671 case PATMODE_RAW_VERT:
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
672 ret = jssConvertPatternRawVert(patBuf, patBufSize, &dataSize, pattern);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
673 break;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
674 case PATMODE_COMP_VERT:
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
675 ret = jssConvertPatternCompVert(patBuf, patBufSize, &dataSize, pattern);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
676 break;
2303
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
677 case PATMODE_RAW_ELEM_HORIZ:
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
678 ret = jssConvertPatternRawElemHoriz(patBuf, patBufSize, &dataSize, pattern);
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
679 break;
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
680 case PATMODE_RAW_ELEM_VERT:
dcf1016f3d27 Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
Matti Hamalainen <ccr@tnsp.org>
parents: 2282
diff changeset
681 ret = jssConvertPatternRawElemVert(patBuf, patBufSize, &dataSize, pattern);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
682 break;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
683 default:
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
684 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1245
2a0488078b78 Cleanups, more consistent error messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1244
diff changeset
685 "Unsupported pattern conversion mode %d for pattern #%d.\n",
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
686 patMode, index);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
687 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
688
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
689 if (ret != DMERR_OK)
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
690 {
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
691 JSSERROR(ret, ret, "Error converting pattern data #%d.\n",
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
692 pattern);
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
693 }
1211
83ed44e9630b Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1210
diff changeset
694
2384
36edd316184a Fix some format strings to use proper PRI*_SIZE_T where necessary.
Matti Hamalainen <ccr@tnsp.org>
parents: 2303
diff changeset
695 dmMsg(3, " - Pattern %d size %" DM_PRIu_SIZE_T " bytes\n",
36edd316184a Fix some format strings to use proper PRI*_SIZE_T where necessary.
Matti Hamalainen <ccr@tnsp.org>
parents: 2303
diff changeset
696 index, dataSize);
36edd316184a Fix some format strings to use proper PRI*_SIZE_T where necessary.
Matti Hamalainen <ccr@tnsp.org>
parents: 2303
diff changeset
697
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
698 totalSize += dataSize + sizeof(JSSMODPattern);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
699
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
700 if (!dmf_write_le32(outFile, dataSize) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
701 !dmf_write_le16(outFile, pattern->nrows) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
702 !dmf_write_le16(outFile, pattern->nmap))
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
703 {
1211
83ed44e9630b Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1210
diff changeset
704 JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
705 "Error writing JSSMOD pattern header #%d.\n",
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
706 index);
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
707 }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
708
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
709 if (pattern->nmap != pattern->nchannels)
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
710 {
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
711 if (!dmf_write_str(outFile, pattern->map,
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
712 sizeof(pattern->map[0]) * pattern->nmap))
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
713 {
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
714 JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
715 "Error writing JSSMOD channel map for pattern #%d.\n",
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
716 index);
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
717 }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
718 }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
719
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
720 if (!dmf_write_str(outFile, patBuf, dataSize))
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
721 {
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
722 JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
723 "Error writing JSSMOD pattern data #%d.\n",
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
724 index);
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
725 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
726 }
1242
e44a2b7abe07 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1241
diff changeset
727
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
728 dmFree(patBuf);
2384
36edd316184a Fix some format strings to use proper PRI*_SIZE_T where necessary.
Matti Hamalainen <ccr@tnsp.org>
parents: 2303
diff changeset
729 dmMsg(1," * %d patterns, %" DM_PRIu_SIZE_T " bytes.\n",
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
730 module->npatterns, totalSize);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
731
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
732 // Write extended instruments
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
733 for (totalSize = index = 0; index < module->nextInstruments; index++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
734 {
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
735 JSSExtInstrument *einst = module->extInstruments[index];
1975
0fddc51788de Fix writing of JSSMOD for NULL extended instruments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1972
diff changeset
736 JSSExtInstrument tmpEInst;
0fddc51788de Fix writing of JSSMOD for NULL extended instruments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1972
diff changeset
737
0fddc51788de Fix writing of JSSMOD for NULL extended instruments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1972
diff changeset
738 if (einst == NULL)
0fddc51788de Fix writing of JSSMOD for NULL extended instruments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1972
diff changeset
739 {
0fddc51788de Fix writing of JSSMOD for NULL extended instruments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1972
diff changeset
740 einst = &tmpEInst;
0fddc51788de Fix writing of JSSMOD for NULL extended instruments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1972
diff changeset
741 memset(&tmpEInst, 0, sizeof(tmpEInst));
2282
6c3c3355007d Fix conversion of unoptimized modules in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 2280
diff changeset
742 dmMsg(1,
6c3c3355007d Fix conversion of unoptimized modules in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 2280
diff changeset
743 "Extended instrument #%d is NULL!\n",
1975
0fddc51788de Fix writing of JSSMOD for NULL extended instruments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1972
diff changeset
744 index);
0fddc51788de Fix writing of JSSMOD for NULL extended instruments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1972
diff changeset
745 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
746
1334
ea9ab5b84985 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1333
diff changeset
747 // Misc data
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
748 BOOL ok =
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
749 dmf_write_byte(outFile, einst->nsamples) &&
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
750 dmf_write_byte(outFile, einst->vibratoType) &&
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
751 dmf_write_le16(outFile, einst->vibratoSweep) &&
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
752 dmf_write_le16(outFile, einst->vibratoDepth) &&
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
753 dmf_write_le16(outFile, einst->vibratoRate) &&
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
754 dmf_write_le16(outFile, einst->fadeOut);
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
755
1334
ea9ab5b84985 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1333
diff changeset
756 // Sample number for note(s)
1313
eb3f883f4acb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1310
diff changeset
757 for (int i = 0; ok && i < jsetNNotes; i++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
758 {
1242
e44a2b7abe07 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1241
diff changeset
759 int snum = einst->sNumForNotes[i];
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
760 Uint32 tmp = (snum != jsetNotSet) ? snum + 1 : 0;
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
761 ok = dmf_write_le32(outFile, tmp);
1242
e44a2b7abe07 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1241
diff changeset
762 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
763
1334
ea9ab5b84985 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1333
diff changeset
764 // Envelopes
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
765 if (!ok ||
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
766 !jssMODWriteEnvelope(outFile, &einst->volumeEnv, "volume", index) ||
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
767 !jssMODWriteEnvelope(outFile, &einst->panningEnv, "panning", index))
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
768 {
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
769 JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
770 "Error writing JSSMOD extended instrument #%d.\n",
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
771 index);
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
772 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
773
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
774 totalSize += sizeof(JSSMODExtInstrument);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
775 }
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
776
2384
36edd316184a Fix some format strings to use proper PRI*_SIZE_T where necessary.
Matti Hamalainen <ccr@tnsp.org>
parents: 2303
diff changeset
777 dmMsg(1," * %d Extended Instruments, %" DM_PRIu_SIZE_T " bytes.\n",
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
778 module->nextInstruments, totalSize);
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
779
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
780 // Write sample instrument headers
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
781 for (totalSize = index = 0; index < module->ninstruments; index++)
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
782 if (module->instruments[index] != NULL)
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
783 {
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
784 JSSInstrument *inst = module->instruments[index];
1334
ea9ab5b84985 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1333
diff changeset
785
ea9ab5b84985 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1333
diff changeset
786 // Determine conversion flags to use
1315
7687412f9aef Fix jssmod sample conversion flags storing .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 1313
diff changeset
787 inst->convFlags = (inst->flags & jsf16bit) ? flags16 : flags8;
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
788 if (inst->data != NULL)
1315
7687412f9aef Fix jssmod sample conversion flags storing .. urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 1313
diff changeset
789 inst->convFlags |= jsampHasData;
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
790
1334
ea9ab5b84985 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1333
diff changeset
791 // Write instrument header
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
792 if (!dmf_write_le32(outFile, inst->size) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
793 !dmf_write_le32(outFile, inst->loopS) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
794 !dmf_write_le32(outFile, inst->loopE) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
795 !dmf_write_le16(outFile, inst->flags) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
796 !dmf_write_le16(outFile, inst->C4BaseSpeed) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
797 !dmf_write_le16(outFile, inst->ERelNote) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
798 !dmf_write_le16(outFile, inst->EFineTune) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
799 !dmf_write_le16(outFile, inst->EPanning) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
800 !dmf_write_byte(outFile, inst->volume) ||
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
801 !dmf_write_byte(outFile, inst->convFlags))
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
802 {
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
803 JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
804 "Error writing JSSMOD instrument #%d.\n",
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
805 index);
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
806 }
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
807
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
808 totalSize += sizeof(JSSMODInstrument);
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
809 }
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
810 else
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
811 {
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
812 JSSWARNING(DMERR_NULLPTR, DMERR_NULLPTR,
1334
ea9ab5b84985 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1333
diff changeset
813 "Instrument #%d NULL!\n",
ea9ab5b84985 Comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1333
diff changeset
814 index);
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
815 }
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
816
2384
36edd316184a Fix some format strings to use proper PRI*_SIZE_T where necessary.
Matti Hamalainen <ccr@tnsp.org>
parents: 2303
diff changeset
817 dmMsg(1," * %d Instrument headers, %" DM_PRIu_SIZE_T " bytes.\n",
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
818 module->ninstruments, totalSize);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
819
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
820 // Write sample data
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
821 for (totalSize = index = 0; index < module->ninstruments; index++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
822 {
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
823 JSSInstrument *inst = module->instruments[index];
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
824 if (inst != NULL && inst->data != NULL)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
825 {
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
826 size_t bsize = inst->size;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
827 if (inst->flags & jsf16bit)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
828 {
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
829 bsize *= sizeof(Uint16);
1972
cedb5ca1533b Clean up the sample conversion code a bit. Improve error handling in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 1606
diff changeset
830 res = jssEncodeSample16(inst->data, inst->size, flags16);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
831 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
832 else
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
833 {
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
834 bsize *= sizeof(Uint8);
1972
cedb5ca1533b Clean up the sample conversion code a bit. Improve error handling in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 1606
diff changeset
835 res = jssEncodeSample8(inst->data, inst->size, flags8);
cedb5ca1533b Clean up the sample conversion code a bit. Improve error handling in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 1606
diff changeset
836 }
cedb5ca1533b Clean up the sample conversion code a bit. Improve error handling in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 1606
diff changeset
837
cedb5ca1533b Clean up the sample conversion code a bit. Improve error handling in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 1606
diff changeset
838 if (res != DMERR_OK)
cedb5ca1533b Clean up the sample conversion code a bit. Improve error handling in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 1606
diff changeset
839 {
cedb5ca1533b Clean up the sample conversion code a bit. Improve error handling in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 1606
diff changeset
840 JSSERROR(res, res,
cedb5ca1533b Clean up the sample conversion code a bit. Improve error handling in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 1606
diff changeset
841 "Error encoding sample for instrument #%d: %s\n",
cedb5ca1533b Clean up the sample conversion code a bit. Improve error handling in xm2jss.
Matti Hamalainen <ccr@tnsp.org>
parents: 1606
diff changeset
842 index, dmErrorStr(res));
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
843 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
844
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
845 if (!dmf_write_str(outFile, inst->data, bsize))
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
846 {
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
847 JSSERROR(DMERR_FWRITE, DMERR_FWRITE,
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
848 "Error writing JSSMOD sample data for instrument #%d.\n",
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
849 index);
1310
dce4730372c7 Add some blocks, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1249
diff changeset
850 }
1243
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
851
377c8a603d21 Cleanups in JSSMOD writing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1242
diff changeset
852 totalSize += bsize;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
853 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
854 }
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
855
2384
36edd316184a Fix some format strings to use proper PRI*_SIZE_T where necessary.
Matti Hamalainen <ccr@tnsp.org>
parents: 2303
diff changeset
856 dmMsg(1," * %d samples, %" DM_PRIu_SIZE_T " bytes.\n",
1246
7bd50496c9ec Work on improved module conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 1245
diff changeset
857 module->ninstruments, totalSize);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
858
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
859 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
860 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
861
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
862
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
863 /* Scan given pattern for used instruments and channels.
1342
f2fd1ad84829 Constify and move effect conversion back to where it was.
Matti Hamalainen <ccr@tnsp.org>
parents: 1337
diff changeset
864 * Also checks if the pattern is empty.
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
865 */
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
866 BOOL jssScanPattern(const JSSModule *module, const JSSPattern *pattern,
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
867 const int npattern, BOOL *usedExtInstruments, BOOL *usedChannels)
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
868 {
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
869 JSSNote *n = pattern->data;
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
870 BOOL empty = TRUE;
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
871
1337
04b1bf207636 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1336
diff changeset
872 // Check all notes in this pattern
1313
eb3f883f4acb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1310
diff changeset
873 for (int row = 0; row < pattern->nrows; row++)
eb3f883f4acb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1310
diff changeset
874 for (int channel = 0; channel < pattern->nchannels; channel++, n++)
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
875 {
1337
04b1bf207636 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1336
diff changeset
876 // Is the instrument set?
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
877 if (usedExtInstruments != NULL &&
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
878 n->instrument != jsetNotSet)
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
879 {
1337
04b1bf207636 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1336
diff changeset
880 // Is it valid?
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
881 if (n->instrument >= 0 && n->instrument < module->nextInstruments)
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
882 usedExtInstruments[n->instrument] = TRUE;
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
883 else
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
884 {
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
885 dmMsg(2, "Pattern 0x%x, row=0x%x, chn=%d has invalid instrument 0x%x\n",
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
886 npattern + 1, row, channel, n->instrument + 1);
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
887 }
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
888 }
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
889
1337
04b1bf207636 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1336
diff changeset
890 // Check if this channel is used
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
891 if (n->note != jsetNotSet ||
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
892 n->instrument != jsetNotSet ||
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
893 n->volume != jsetNotSet ||
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
894 n->effect != jsetNotSet ||
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
895 n->param != jsetNotSet)
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
896 {
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
897 if (usedChannels != NULL)
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
898 usedChannels[channel] = TRUE;
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
899
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
900 empty = FALSE;
1337
04b1bf207636 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1336
diff changeset
901 }
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
902 }
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
903
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
904 return empty;
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
905 }
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
906
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
907
1317
2772c16622bb Add checking of duplicate patterns in the optimization pass of xm2jss. Not
Matti Hamalainen <ccr@tnsp.org>
parents: 1315
diff changeset
908 /* Check if two given patterns are dupes
2772c16622bb Add checking of duplicate patterns in the optimization pass of xm2jss. Not
Matti Hamalainen <ccr@tnsp.org>
parents: 1315
diff changeset
909 */
2277
026c3aa0e48f Rename two functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 2183
diff changeset
910 BOOL jssComparePattern(const JSSPattern *pat1, const JSSPattern *pat2)
1317
2772c16622bb Add checking of duplicate patterns in the optimization pass of xm2jss. Not
Matti Hamalainen <ccr@tnsp.org>
parents: 1315
diff changeset
911 {
2772c16622bb Add checking of duplicate patterns in the optimization pass of xm2jss. Not
Matti Hamalainen <ccr@tnsp.org>
parents: 1315
diff changeset
912 return
2772c16622bb Add checking of duplicate patterns in the optimization pass of xm2jss. Not
Matti Hamalainen <ccr@tnsp.org>
parents: 1315
diff changeset
913 pat1->nrows == pat2->nrows &&
2772c16622bb Add checking of duplicate patterns in the optimization pass of xm2jss. Not
Matti Hamalainen <ccr@tnsp.org>
parents: 1315
diff changeset
914 pat1->nchannels == pat2->nchannels &&
2772c16622bb Add checking of duplicate patterns in the optimization pass of xm2jss. Not
Matti Hamalainen <ccr@tnsp.org>
parents: 1315
diff changeset
915 memcmp(pat1->data, pat2->data, sizeof(JSSNote) * pat1->nrows * pat1->nchannels) == 0;
2772c16622bb Add checking of duplicate patterns in the optimization pass of xm2jss. Not
Matti Hamalainen <ccr@tnsp.org>
parents: 1315
diff changeset
916 }
2772c16622bb Add checking of duplicate patterns in the optimization pass of xm2jss. Not
Matti Hamalainen <ccr@tnsp.org>
parents: 1315
diff changeset
917
2772c16622bb Add checking of duplicate patterns in the optimization pass of xm2jss. Not
Matti Hamalainen <ccr@tnsp.org>
parents: 1315
diff changeset
918
2475
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
919 /* Optimize a given module.
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
920 * NOTE! While this function creates and returns a new JSSModule,
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
921 * it mostly copies references to data in the source module,
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
922 * AND also modifies the source module - which is kinda "bad".
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
923 * If/when freeing module data, you MUST only jssFreeModule()
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
924 * the source one, and dmFree() the optimized result.
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
925 *
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
926 * This should be re-written to copy the data instead.
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
927 */
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
928 JSSModule *jssOptimizeModule(JSSModule *src)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
929 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
930 BOOL usedPatterns[jsetMaxPatterns + 1],
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
931 usedInstruments[jsetMaxInstruments + 1],
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
932 usedExtInstruments[jsetMaxInstruments + 1];
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
933 int mapExtInstruments[jsetMaxInstruments + 1],
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
934 mapInstruments[jsetMaxInstruments + 1],
1333
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
935 mapPatterns[jsetMaxPatterns + 1],
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
936 dupPatterns[jsetMaxPatterns + 1];
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
937
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
938 JSSModule *dst = NULL;
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
939 int n8, n16, nunused, ndupes;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
940
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
941 // Allocate a new module
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
942 if ((dst = jssAllocateModule()) == NULL)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
943 return NULL;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
944
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
945 // Copy things
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
946 dst->moduleType = src->moduleType;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
947 dst->moduleName = src->moduleName;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
948 dst->trackerName = src->trackerName;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
949 dst->defSpeed = src->defSpeed;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
950 dst->defTempo = src->defTempo;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
951 dst->defFlags = src->defFlags;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
952 dst->defRestartPos = src->defRestartPos;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
953 dst->intVersion = src->intVersion;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
954 dst->nchannels = src->nchannels;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
955 dst->norders = src->norders;
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
956
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
957 for (int i = 0; i < jsetNChannels; i++)
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
958 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
959 dst->defPanning[i] = src->defPanning[i];
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
960 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
961
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
962 // Initialize values
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
963 for (int i = 0; i <= jsetMaxInstruments; i++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
964 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
965 usedExtInstruments[i] = FALSE;
798
422f85db78fd Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 797
diff changeset
966 usedInstruments[i] = FALSE;
422f85db78fd Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 797
diff changeset
967 mapExtInstruments[i] = jsetNotSet;
422f85db78fd Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 797
diff changeset
968 mapInstruments[i] = jsetNotSet;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
969 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
970
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
971 for (int i = 0; i <= jsetMaxPatterns; i++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
972 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
973 usedPatterns[i] = FALSE;
798
422f85db78fd Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 797
diff changeset
974 mapPatterns[i] = jsetNotSet;
1333
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
975 dupPatterns[i] = jsetNotSet;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
976 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
977
1094
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
978 //
798
422f85db78fd Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 797
diff changeset
979 // Find out all actually used patterns and ext.instruments
1100
654602d3d5a5 Improve comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1099
diff changeset
980 // by going through all patterns specified in the order list
1094
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
981 //
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
982 dmMsg(1, "Scanning patterns for used instruments and channels...\n");
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
983 for (int norder = 0; norder < src->norders; norder++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
984 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
985 int npat = src->orderList[norder];
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
986 if (npat >= 0 && npat < src->npatterns)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
987 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
988 JSSPattern *pattern = src->patterns[npat];
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
989 if (pattern != NULL)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
990 {
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
991 // Scan for used instruments etc
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
992 BOOL empty = jssScanPattern(src, pattern, npat, usedExtInstruments, NULL);
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
993
1249
c44fcdc1c2e7 Use jsetDefaultRows here.
Matti Hamalainen <ccr@tnsp.org>
parents: 1246
diff changeset
994 // Empty patterns with known number of rows are "removed"
c44fcdc1c2e7 Use jsetDefaultRows here.
Matti Hamalainen <ccr@tnsp.org>
parents: 1246
diff changeset
995 if (empty && pattern->nrows == jsetDefaultRows)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
996 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
997 src->orderList[norder] = jsetNotSet;
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
998 usedPatterns[npat] = FALSE;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
999 }
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1000 else
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1001 usedPatterns[npat] = TRUE;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1002 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1003 else
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1004 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 860
diff changeset
1005 dmErrorMsg("Pattern 0x%x is used on order 0x%x, but has no data!\n",
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1006 npat, norder);
807
d83dc7e47076 Fix some order list and pattern handling things.
Matti Hamalainen <ccr@tnsp.org>
parents: 798
diff changeset
1007
d83dc7e47076 Fix some order list and pattern handling things.
Matti Hamalainen <ccr@tnsp.org>
parents: 798
diff changeset
1008 // Fix it.
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1009 src->orderList[norder] = jsetNotSet;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1010 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1011 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1012 else
1244
072851dcec5c Improve module optimization.
Matti Hamalainen <ccr@tnsp.org>
parents: 1243
diff changeset
1013 if (npat != jsetNotSet)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1014 {
1101
0577f10dc3de Improve messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1100
diff changeset
1015 dmErrorMsg("Order 0x%x has invalid pattern number 0x%x, changing to empty!\n",
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1016 norder, npat);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
1017
807
d83dc7e47076 Fix some order list and pattern handling things.
Matti Hamalainen <ccr@tnsp.org>
parents: 798
diff changeset
1018 // Fix it.
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1019 src->orderList[norder] = jsetNotSet;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1020 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1021 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
1022
1094
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1023 //
1100
654602d3d5a5 Improve comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1099
diff changeset
1024 // Find used sample instruments
1094
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1025 //
1101
0577f10dc3de Improve messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 1100
diff changeset
1026 dmMsg(1, "Checking ext.instruments for used sample instruments...\n");
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1027 for (int neinst = 0; neinst < jsetMaxInstruments; neinst++)
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1028 if (usedExtInstruments[neinst] && src->extInstruments[neinst] != NULL)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1029 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1030 JSSExtInstrument *eip = src->extInstruments[neinst];
1094
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1031
1347
c9b5b4713b57 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1344
diff changeset
1032 for (int note = 0; note < jsetNNotes; note++)
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1033 if (eip->sNumForNotes[note] != jsetNotSet)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1034 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1035 int q = eip->sNumForNotes[note];
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1036 if (q >= 0 && q < src->ninstruments)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1037 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1038 usedInstruments[q] = TRUE;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1039 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1040 else
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1041 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 860
diff changeset
1042 dmErrorMsg("Ext.instrument #%d sNumForNotes[%d] value out range (%d < %d).\n",
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1043 neinst + 1, note, src->ninstruments, q + 1);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1044 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1045 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1046 }
1094
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1047
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1048 //
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1049 // Create pattern mappings
1094
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1050 //
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1051 dmMsg(1, "Creating pattern remaps...\n");
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1052 nunused = ndupes = 0;
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1053 for (int pat1 = 0; pat1 <= jsetMaxPatterns; pat1++)
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1054 if (usedPatterns[pat1])
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1055 {
1333
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1056 // Sanity check patterns
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1057 if (pat1 >= src->npatterns)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1058 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1059 dmErrorMsg("Pattern 0x%x >= 0x%x, but used!\n", pat1, src->npatterns);
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1060 continue;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1061 }
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1062
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1063 if (src->patterns[pat1] == NULL)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1064 {
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1065 dmErrorMsg("Pattern 0x%x used but is NULL.\n", pat1);
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1066 continue;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1067 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
1068
1333
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1069 // Check for previously marked dupes
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1070 if (dupPatterns[pat1] != jsetNotSet)
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1071 {
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1072 mapPatterns[pat1] = dupPatterns[pat1];
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1073 continue;
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1074 }
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1075
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1076 // Check for duplicate patterns of "pat1" and mark them as such
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1077 for (int pat2 = 0; pat2 < src->npatterns; pat2++)
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1078 if (pat1 != pat2 && src->patterns[pat2] != NULL &&
1343
cffb1597ab06 Fix dupe pattern detection.
Matti Hamalainen <ccr@tnsp.org>
parents: 1342
diff changeset
1079 dupPatterns[pat2] == jsetNotSet &&
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1080 jssComparePattern(src->patterns[pat1], src->patterns[pat2]))
1333
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1081 {
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1082 dmPrint(1, " * %d and %d are dupes.\n", pat1, pat2);
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1083 dupPatterns[pat2] = pat1;
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1084 ndupes++;
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1085 }
17c23f0494f5 Possibly make dupe pattern elimination work. Still needs some testing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1332
diff changeset
1086
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1087 mapPatterns[pat1] = dst->npatterns;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1088 dst->patterns[dst->npatterns] = src->patterns[pat1];
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1089 (dst->npatterns)++;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1090 }
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1091 else
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1092 if (src->patterns[pat1] != NULL)
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1093 nunused++;
1094
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1094
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1095 dmMsg(1, "%d used patterns (%d unused, %d duplicates).\n",
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1096 dst->npatterns, nunused, ndupes);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
1097
1094
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1098 //
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1099 // Re-map instruments
1094
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1100 //
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1101 dmMsg(1, "Creating sample instrument remaps...\n");
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1102 nunused = n8 = n16 = 0;
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1103 for (int ninst = 0; ninst < jsetMaxInstruments; ninst++)
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1104 if (usedInstruments[ninst])
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1105 {
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1106 JSSInstrument *ip;
2475
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
1107
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
1108 // XXX TODO instrument stripping should be done here
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
1109 // if this ever gets rewritten to copy source data instead.
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1110 if (optStripInstr)
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1111 continue;
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1112
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1113 if (ninst >= src->ninstruments)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1114 {
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1115 dmErrorMsg("Instrument 0x%x >= 0x%x, but used!\n",
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1116 ninst + 1, src->ninstruments);
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1117 continue;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1118 }
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1119
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1120 if ((ip = src->instruments[ninst]) == NULL)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1121 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1122 dmErrorMsg("Instrument 0x%x used but is NULL.\n", ninst + 1);
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1123 continue;
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1124 }
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1125
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1126 dmPrint(2, "%02x -> %02x : ", ninst + 1, dst->ninstruments + 1);
1111
f9a96fc2a932 Adjust messages to show user-visible (1 based) instrument numbers.
Matti Hamalainen <ccr@tnsp.org>
parents: 1109
diff changeset
1127
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1128 mapInstruments[ninst] = dst->ninstruments;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1129 dst->instruments[dst->ninstruments] = ip;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1130 (dst->ninstruments)++;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1131
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1132 if (ip->flags & jsf16bit)
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1133 n16++;
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1134 else
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1135 n8++;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1136 }
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1137 else
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1138 if (src->instruments[ninst] != NULL)
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1139 nunused++;
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1140
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1141 dmPrint(2, "\n");
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1142 dmMsg(1, "Total of %d [16-bit] + %d [8-bit] samples = %d instruments (%d unused).\n",
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1143 n16, n8, dst->ninstruments, nunused);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
1144
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1145 //
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1146 // Re-map ext.instruments
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1147 //
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1148 dmMsg(1, "Creating ext.instrument remaps...\n");
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1149 nunused = 0;
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1150 for (int neinst = 0; neinst < jsetMaxInstruments; neinst++)
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1151 if (usedExtInstruments[neinst])
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1152 {
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1153 JSSExtInstrument *eip;
1347
c9b5b4713b57 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1344
diff changeset
1154
2475
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
1155 // XXX TODO instrument stripping should be done here
b9734859db5c Add few comments about the state of jssOptimizeModule().
Matti Hamalainen <ccr@tnsp.org>
parents: 2474
diff changeset
1156 // if this ever gets rewritten to copy source data instead.
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1157 if (optStripExtInstr)
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1158 continue;
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1159
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1160 if (neinst >= src->nextInstruments)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1161 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 860
diff changeset
1162 dmErrorMsg("Ext.instrument 0x%x >= 0x%x, but used!\n",
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1163 neinst + 1, src->nextInstruments);
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1164 continue;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1165 }
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1166
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1167 if ((eip = src->extInstruments[neinst]) == NULL)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1168 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1169 dmErrorMsg("Extended instrument 0x%x used but is NULL.\n", neinst + 1);
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1170 continue;
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1171 }
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1172
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1173 dmPrint(2, "%02x -> %02x : ", neinst + 1, dst->nextInstruments + 1);
1111
f9a96fc2a932 Adjust messages to show user-visible (1 based) instrument numbers.
Matti Hamalainen <ccr@tnsp.org>
parents: 1109
diff changeset
1174
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1175 mapExtInstruments[neinst] = dst->nextInstruments;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1176 dst->extInstruments[dst->nextInstruments] = eip;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1177 (dst->nextInstruments)++;
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1178
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1179 // Re-map sNumForNotes table for this ext.instrument
1347
c9b5b4713b57 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1344
diff changeset
1180 for (int note = 0; note < jsetNNotes; note++)
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1181 {
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1182 int q = eip->sNumForNotes[note];
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1183 if (q != jsetNotSet)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1184 {
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1185 int map;
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1186 if (q >= 0 && q < jsetMaxInstruments)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1187 {
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1188 map = mapInstruments[q];
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1189 }
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1190 else
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1191 {
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1192 map = jsetNotSet;
1111
f9a96fc2a932 Adjust messages to show user-visible (1 based) instrument numbers.
Matti Hamalainen <ccr@tnsp.org>
parents: 1109
diff changeset
1193 dmErrorMsg("Einst=%d, note=%d, sNumForNote=%d (%d max)\n",
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1194 neinst + 1, note, q + 1, dst->ninstruments);
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1195 }
1111
f9a96fc2a932 Adjust messages to show user-visible (1 based) instrument numbers.
Matti Hamalainen <ccr@tnsp.org>
parents: 1109
diff changeset
1196
f9a96fc2a932 Adjust messages to show user-visible (1 based) instrument numbers.
Matti Hamalainen <ccr@tnsp.org>
parents: 1109
diff changeset
1197 dmPrint(3, "%02x.%02x ", q + 1, map + 1);
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1198 eip->sNumForNotes[note] = map;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1199 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1200 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1201 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1202 else
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1203 if (src->extInstruments[neinst] != NULL)
1320
dd56f806c1a2 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1319
diff changeset
1204 nunused++;
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1205
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1206 dmPrint(2, "\n");
1097
0e3cb9e61170 Code cleanup, in preparation for bug hunting.
Matti Hamalainen <ccr@tnsp.org>
parents: 1094
diff changeset
1207 dmMsg(1, "%d extended instruments (%d unused).\n",
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1208 dst->nextInstruments, nunused);
1094
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1209
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1210 //
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1211 // Remap pattern data with remapped instrument data
8fc475bbfa42 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1093
diff changeset
1212 //
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1213 for (int npat = 0; npat < dst->npatterns; npat++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1214 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1215 JSSPattern *pat = dst->patterns[npat];
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1216 JSSNote *note = pat->data;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
1217
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1218 for (int row = 0; row < pat->nrows; row++)
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1219 for (int channel = 0; channel < pat->nchannels; channel++, note++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1220 {
1109
c8bcdddf233c Comment.
Matti Hamalainen <ccr@tnsp.org>
parents: 1108
diff changeset
1221 // If not stripping extended instruments, check for
c8bcdddf233c Comment.
Matti Hamalainen <ccr@tnsp.org>
parents: 1108
diff changeset
1222 // the validity of the used instrument and remap
338
cd57ba1130eb Fixes and improvements in the JMOD saving and loading.
Matti Hamalainen <ccr@tnsp.org>
parents: 337
diff changeset
1223 if (!optStripExtInstr)
cd57ba1130eb Fixes and improvements in the JMOD saving and loading.
Matti Hamalainen <ccr@tnsp.org>
parents: 337
diff changeset
1224 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1225 if (note->instrument >= 0 && note->instrument < jsetMaxInstruments)
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1226 note->instrument = mapExtInstruments[note->instrument];
202
85614db5f577 Warn about invalid instruments.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1227
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1228 if (note->instrument != jsetNotSet &&
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1229 dst->extInstruments[note->instrument] == NULL)
1111
f9a96fc2a932 Adjust messages to show user-visible (1 based) instrument numbers.
Matti Hamalainen <ccr@tnsp.org>
parents: 1109
diff changeset
1230 {
1116
9d78c880c6e1 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1115
diff changeset
1231 dmErrorMsg("Non-existing instrument used #%d, INTERNAL ERROR.\n",
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1232 note->instrument + 1);
1111
f9a96fc2a932 Adjust messages to show user-visible (1 based) instrument numbers.
Matti Hamalainen <ccr@tnsp.org>
parents: 1109
diff changeset
1233 }
338
cd57ba1130eb Fixes and improvements in the JMOD saving and loading.
Matti Hamalainen <ccr@tnsp.org>
parents: 337
diff changeset
1234 }
1342
f2fd1ad84829 Constify and move effect conversion back to where it was.
Matti Hamalainen <ccr@tnsp.org>
parents: 1337
diff changeset
1235
f2fd1ad84829 Constify and move effect conversion back to where it was.
Matti Hamalainen <ccr@tnsp.org>
parents: 1337
diff changeset
1236 // Convert certain effects
f2fd1ad84829 Constify and move effect conversion back to where it was.
Matti Hamalainen <ccr@tnsp.org>
parents: 1337
diff changeset
1237 char effect;
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1238 JMPGETEFFECT(effect, note->effect);
1342
f2fd1ad84829 Constify and move effect conversion back to where it was.
Matti Hamalainen <ccr@tnsp.org>
parents: 1337
diff changeset
1239 switch (effect)
f2fd1ad84829 Constify and move effect conversion back to where it was.
Matti Hamalainen <ccr@tnsp.org>
parents: 1337
diff changeset
1240 {
f2fd1ad84829 Constify and move effect conversion back to where it was.
Matti Hamalainen <ccr@tnsp.org>
parents: 1337
diff changeset
1241 case 'C': // Cxx = Set volume
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1242 if (note->volume == jsetNotSet)
1342
f2fd1ad84829 Constify and move effect conversion back to where it was.
Matti Hamalainen <ccr@tnsp.org>
parents: 1337
diff changeset
1243 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1244 note->volume = note->param;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1245 note->effect = jsetNotSet;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1246 note->param = jsetNotSet;
1342
f2fd1ad84829 Constify and move effect conversion back to where it was.
Matti Hamalainen <ccr@tnsp.org>
parents: 1337
diff changeset
1247 }
f2fd1ad84829 Constify and move effect conversion back to where it was.
Matti Hamalainen <ccr@tnsp.org>
parents: 1337
diff changeset
1248 break;
f2fd1ad84829 Constify and move effect conversion back to where it was.
Matti Hamalainen <ccr@tnsp.org>
parents: 1337
diff changeset
1249 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1250 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1251 }
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
1252
1113
28dcf10fb8a9 Comments, cosmetics, combine one error message.
Matti Hamalainen <ccr@tnsp.org>
parents: 1111
diff changeset
1253 //
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1254 // Remap orders list
1113
28dcf10fb8a9 Comments, cosmetics, combine one error message.
Matti Hamalainen <ccr@tnsp.org>
parents: 1111
diff changeset
1255 //
1318
f8c45f7aac79 Add a message.
Matti Hamalainen <ccr@tnsp.org>
parents: 1317
diff changeset
1256 dmMsg(1, "Remapping orders list.\n");
1352
0ecd5accea1e Improve verbose output cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1347
diff changeset
1257 nunused = 0;
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1258 for (int nord = 0; nord < src->norders; nord++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1259 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1260 int map = mapPatterns[src->orderList[nord]];
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1261 if (map != src->orderList[nord])
1352
0ecd5accea1e Improve verbose output cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1347
diff changeset
1262 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1263 dmPrint(2, "%02x -> %02x : ", src->orderList[nord], map);
1352
0ecd5accea1e Improve verbose output cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1347
diff changeset
1264 nunused++;
0ecd5accea1e Improve verbose output cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1347
diff changeset
1265 }
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1266 dst->orderList[nord] = map;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1267 }
1352
0ecd5accea1e Improve verbose output cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1347
diff changeset
1268 if (nunused)
0ecd5accea1e Improve verbose output cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1347
diff changeset
1269 dmPrint(2, "\n");
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1270
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1271 //
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1272 // Do final pass on patterns to remove unused channels
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1273 //
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1274 for (int npat = 0; npat < dst->npatterns; npat++)
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1275 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1276 JSSPattern *pat = dst->patterns[npat];
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1277
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1278 jssScanPattern(dst, pat, npat, NULL, pat->used);
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1279
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1280 pat->nmap = 0;
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1281 for (int nchn = 0; nchn < dst->nchannels; nchn++)
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1282 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1283 if (pat->used[nchn])
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1284 pat->map[pat->nmap++] = nchn;
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1285 }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1286
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1287 if (pat->nmap != pat->nchannels)
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1288 {
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1289 dmMsg(2, "Pattern %d: %d/%d used channels (%d unused).\n",
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1290 npat, pat->nchannels - pat->nmap, pat->nchannels, pat->nmap);
2278
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1291 }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1292 }
40ccc09f09be Implement empty channel removal in xm2jss and make JSSMOD format support
Matti Hamalainen <ccr@tnsp.org>
parents: 2277
diff changeset
1293
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1294 return dst;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1295 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1296
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1297
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1298 int main(int argc, char *argv[])
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1299 {
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
1300 DMResource *inFile = NULL, *outFile = NULL;
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1301 JSSModule *src = NULL, *dst = NULL;
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1302 int res = DMERR_OK;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1303
2280
7fb5470b5d45 Bump xm2jss version.
Matti Hamalainen <ccr@tnsp.org>
parents: 2279
diff changeset
1304 dmInitProg("xm2jss", "XM to JSSMOD converter", "0.8", NULL, NULL);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1305 dmVerbosity = 0;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1306
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1307 // Parse arguments
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1308 if (!dmArgsProcess(argc, argv, optList, optListN,
860
daebbf28953d The argument handling API in dmargs* was synced with th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 856
diff changeset
1309 argHandleOpt, argHandleFile, OPTH_BAILOUT))
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1310 exit(1);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1311
300
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
1312 // Check arguments
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
1313 if (optInFilename == NULL || optOutFilename == NULL)
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
1314 {
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1315 res = dmError(DMERR_INVALID_ARGS,
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1316 "Input or output file not specified. Try --help.\n");
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1317 goto out;
300
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
1318 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1319
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1320 // Read the source file
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1321 if ((res = dmf_open_stdio(optInFilename, "rb", &inFile)) != DMERR_OK)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1322 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 860
diff changeset
1323 dmErrorMsg("Error opening input file '%s', %d: %s\n",
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1324 optInFilename, res, dmErrorStr(res));
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1325 goto out;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1326 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1327
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1328 // Initialize miniJSS
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1329 jssInit();
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1330
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1331 // Read file
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1332 dmMsg(1, "Reading XM-format file ...\n");
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1333 res = jssLoadXM(inFile, &src, FALSE);
730
3d813c81f33c More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents: 652
diff changeset
1334 dmf_close(inFile);
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1335 if (res != 0)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1336 {
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1337 dmErrorMsg("Error while loading XM file (%d), ", res);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1338 if (optIgnoreErrors)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1339 fprintf(stderr, "ignoring. This may cause problems.\n");
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1340 else
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1341 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1342 fprintf(stderr, "giving up. Use --ignore if you want to try to convert anyway.\n");
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1343 goto out;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1344 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1345 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1346
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1347 // Check stripping settings
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1348 if (optStripExtInstr) optStripInstr = TRUE;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1349 if (optStripInstr) optStripSamples = TRUE;
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
1350
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1351 // Remove samples
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1352 if (optStripSamples)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1353 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1354 dmMsg(1, "Stripping samples...\n");
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1355 for (int i = 0; i < src->ninstruments; i++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1356 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1357 dmFree(src->instruments[i]->data);
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1358 src->instruments[i]->data = NULL;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1359 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1360 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1361
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1362 // Remove instruments
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1363 if (optStripInstr)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1364 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1365 dmMsg(1, "Stripping instruments...\n");
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1366 for (int i = 0; i < src->ninstruments; i++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1367 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1368 dmFree(src->instruments[i]);
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1369 src->instruments[i] = NULL;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1370 }
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1371 src->ninstruments = 0;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1372 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1373
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1374 // Remove ext.instruments
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1375 if (optStripExtInstr)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1376 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1377 dmMsg(1, "Stripping ext.instruments...\n");
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1378 for (int i = 0; i < src->nextInstruments; i++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1379 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1380 dmFree(src->extInstruments[i]);
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1381 src->extInstruments[i] = NULL;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1382 }
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1383 src->nextInstruments = 0;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1384 }
1109
c8bcdddf233c Comment.
Matti Hamalainen <ccr@tnsp.org>
parents: 1108
diff changeset
1385
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1386 // Run the optimization procedure
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1387 if (optOptimize)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1388 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1389 dmMsg(1, "Optimizing module data...\n");
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1390 dst = jssOptimizeModule(src);
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1391 }
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1392 else
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1393 dst = src;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1394
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1395 // Write output file
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
1396 if ((res = dmf_open_stdio(optOutFilename, "wb", &outFile)) != DMERR_OK)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1397 {
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1398 dmErrorMsg("Error creating output file '%s': %s\n",
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1399 optOutFilename, dmErrorStr(res));
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1400 goto out;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1401 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1402
9
c42ee907de9c Various improvements in xm2jss output.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
1403 dmMsg(1, "Writing JSSMOD-format file [patMode=0x%04x, samp8=0x%02x, samp16=0x%02x]\n",
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1404 optPatternMode, optSampMode8, optSampMode16);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
1405
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1406 res = jssSaveJSSMOD(outFile, dst, optPatternMode, optSampMode8, optSampMode16);
1114
7aaab1533c90 Free the source module data at end.
Matti Hamalainen <ccr@tnsp.org>
parents: 1113
diff changeset
1407
2476
90eec3e1f85f Use DMResource I/O instead of stdio for writing JSSMOD module.
Matti Hamalainen <ccr@tnsp.org>
parents: 2475
diff changeset
1408 dmf_close(outFile);
1235
5b8245e5f785 Remove trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1233
diff changeset
1409
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1410 if (res != 0)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1411 {
1113
28dcf10fb8a9 Comments, cosmetics, combine one error message.
Matti Hamalainen <ccr@tnsp.org>
parents: 1111
diff changeset
1412 dmErrorMsg(
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1413 "Error while saving JSSMOD file: %s\n"
1113
28dcf10fb8a9 Comments, cosmetics, combine one error message.
Matti Hamalainen <ccr@tnsp.org>
parents: 1111
diff changeset
1414 "WARNING: The resulting file may be broken!\n",
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1415 dmErrorStr(res));
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1416 }
300
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
1417 else
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
1418 {
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
1419 dmMsg(1, "Conversion complete.\n");
4972ca91d062 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 285
diff changeset
1420 }
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1421
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1422 out:
2474
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1423 jssFreeModule(src);
e2e94f9afe1b Various cleanups, use saner variable names.
Matti Hamalainen <ccr@tnsp.org>
parents: 2473
diff changeset
1424 dmFree(dst);
2482
7151597d8ec6 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 2476
diff changeset
1425
2473
f5848606d5ad Improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 2410
diff changeset
1426 return res;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1427 }