annotate tools/xm2jss.c @ 1335:caf414847662

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