annotate minijss/jloadxm.c @ 2506:609c6bcf0dac

Add (a redundant) check for XM version.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 29 Apr 2020 01:14:30 +0300
parents e0f9200b94ad
children f5bdd6ed298e
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 * miniJSS - Fast Tracker ][ (XM) module loader
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 * Programmed and designed by Matti 'ccr' Hamalainen
1125
44ed439b1c6b Bump copyright.
Matti Hamalainen <ccr@tnsp.org>
parents: 1124
diff changeset
4 * (C) Copyright 2006-2015 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 * TO DO:
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 * - Add support for 1.02/1.03 XM-format versions.
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 * (Not very useful, but if it's not too hard, then do it)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9 */
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10 #include "jssmod.h"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 /* XM value limit definitions
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14 */
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15 #define XM_MaxChannels (32)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16 #define XM_MaxPatterns (256)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17 #define XM_MaxOrders (255)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18 #define XM_MaxInstruments (128)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19 #define XM_MaxInstSamples (16)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 #define XM_MaxEnvPoints (12)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21 #define XM_MaxNotes (96)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22 #define XM_MaxSampleVolume (64)
1161
92cee852a8af Check header size against the known values. Bail out if it's too small, and
Matti Hamalainen <ccr@tnsp.org>
parents: 1160
diff changeset
23 #define XM_HeaderSize 276
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24
1174
14ac28580059 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1171
diff changeset
25
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 /* XM format structures
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 */
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28 typedef struct
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 char idMagic[17]; // XM header ID "Extended Module: "
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31 char songName[20]; // Module song name
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32 Uint8 unUsed1A; // ALWAYS 0x1a
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 char trackerName[20]; // ID-string of tracker software
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
34 Uint16 version; // XM-version tag
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 Uint32 headSize; // Module header size, FROM THIS POINT!
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36 Uint16 norders, // Number of orders
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37 defRestartPos, // Default song restart position
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38 nchannels, // Number of channels
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39 npatterns, // Number of patterns
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 ninstruments, // Number of instruments
552
d4cee32e7050 Rename internal structures, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
41 flags, // Module flags:
d4cee32e7050 Rename internal structures, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
42 // bit0: 0 = Amiga frequency table
d4cee32e7050 Rename internal structures, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
43 // 1 = Linear frequency table
d4cee32e7050 Rename internal structures, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
44 //
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45 defSpeed, // Default speed
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
46 defTempo; // Default tempo
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
47 Uint8 orderList[256]; // Order list
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
48 } XMHeader;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
51 typedef struct
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
53 Uint32 headSize; // Instrument header size (see docs!)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
54 char instName[22]; // Name/description
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
55 Uint8 instType; // Type
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56 Uint16 nsamples; // Number of samples
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57 } XMInstrument1;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58
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 typedef struct
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
61 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
62 Uint16 frame, value;
552
d4cee32e7050 Rename internal structures, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
63 } XMEnvPoint;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
64
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
66 typedef struct
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
67 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
68 Uint8 flags, npoints, sustain, loopS, loopE;
552
d4cee32e7050 Rename internal structures, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
69 XMEnvPoint points[XM_MaxEnvPoints];
d4cee32e7050 Rename internal structures, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
70 } XMEnvelope;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
71
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
72
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
73 typedef struct
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
74 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
75 Uint32 headSize; // Header size
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
76 Uint8 sNumForNotes[XM_MaxNotes]; // Sample numbers for notes
552
d4cee32e7050 Rename internal structures, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
77 XMEnvelope volumeEnv, panningEnv;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
78 Uint8 vibratoType, vibratoSweep, vibratoDepth, vibratoRate;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
79
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
80 Uint16 fadeOut, ARESERVED;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
81 } XMInstrument2;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
82
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 typedef struct
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 Uint32 size, loopS, loopL;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
87 Uint8 volume;
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
88 Sint8 fineTune;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
89 Uint8 type, panning;
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
90 Sint8 relNote;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
91 Uint8 ARESERVED;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
92 char sampleName[22];
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
93 } XMSample;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
94
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
95
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96 typedef struct
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
97 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
98 Uint32 headSize;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
99 Uint8 packing;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
100 Uint16 nrows, size;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
101 } XMPattern;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
103
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
104
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105 /* Unpack XM-format pattern from file-stream into JSS-pattern structure
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106 */
1148
1ed8af15581a Comments and cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1132
diff changeset
107 #define JSGETBYTE(XV) \
1ed8af15581a Comments and cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1132
diff changeset
108 do { \
1181
5d3c948ed426 Mostly cosmetic change.
Matti Hamalainen <ccr@tnsp.org>
parents: 1180
diff changeset
109 if (size <= 0) \
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
110 JSSERROR(DMERR_OUT_OF_DATA, DMERR_OUT_OF_DATA, \
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
111 "Unexpected end of packed pattern data.\n"); \
1181
5d3c948ed426 Mostly cosmetic change.
Matti Hamalainen <ccr@tnsp.org>
parents: 1180
diff changeset
112 size--; \
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
113 XV = dmfgetc(inFile); \
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
114 } while (0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
116
1148
1ed8af15581a Comments and cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1132
diff changeset
117 /* Convert XM note value to internal JSS note
1ed8af15581a Comments and cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1132
diff changeset
118 */
313
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
119 static int jssXMConvertNote(int val)
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
120 {
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
121 if (val < 1 || val > 97)
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
122 return jsetNotSet;
1148
1ed8af15581a Comments and cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1132
diff changeset
123 else
1ed8af15581a Comments and cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1132
diff changeset
124 if (val == 97)
313
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
125 return jsetNoteOff;
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
126 else
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
127 return val - 1;
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
128 }
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
129
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
130
1148
1ed8af15581a Comments and cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1132
diff changeset
131 /* Unpack a XM pattern structure from resource to given JSS pattern
1ed8af15581a Comments and cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1132
diff changeset
132 */
1180
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
133 static int jssXMUnpackPattern104(DMResource *inFile, int size, JSSPattern *pattern)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
134 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
135 JSSNote *pnote;
1179
e7a951937374 Move variable definitions closer to where they are used.
Matti Hamalainen <ccr@tnsp.org>
parents: 1177
diff changeset
136 int row, channel;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137 assert(pattern != NULL);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
138
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139 pnote = pattern->data;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
140
313
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
141 for (row = 0; row < pattern->nrows && size > 0; row++)
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
142 for (channel = 0; channel < pattern->nchannels && size > 0; channel++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
143 {
1179
e7a951937374 Move variable definitions closer to where they are used.
Matti Hamalainen <ccr@tnsp.org>
parents: 1177
diff changeset
144 int packb, tmp;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
145 JSGETBYTE(packb);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
146 if (packb & 0x80)
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 if (packb & 0x01)
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 // PACK 0x01: Read note
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
151 JSGETBYTE(tmp);
313
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
152 pnote->note = jssXMConvertNote(tmp);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
153 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
154
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
155 if (packb & 0x02)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
156 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
157 // PACK 0x02: Read instrument
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
158 JSGETBYTE(tmp);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
159 pnote->instrument = (tmp > 0) ? tmp - 1 : jsetNotSet;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
160 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
161
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
162 if (packb & 0x04)
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 // PACK 0x04: Read volume
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
165 JSGETBYTE(tmp);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
166 pnote->volume = (tmp >= 0x10) ? tmp - 0x10 : jsetNotSet;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
167 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
168
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
169 if (packb & 0x08)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
170 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
171 // PACK 0x08: Read effect
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
172 JSGETBYTE(pnote->effect);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
173 pnote->param = 0;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
174 }
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 if (packb & 0x10)
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 // PACK 0x10: Read effect parameter
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
179 JSGETBYTE(pnote->param);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
180 if (pnote->effect == jsetNotSet && pnote->param != 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181 pnote->effect = 0;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
182 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184 else
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
185 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
186 // All data available
313
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
187 pnote->note = jssXMConvertNote(packb & 0x7f);
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 // Get instrument
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
190 JSGETBYTE(tmp);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
191 pnote->instrument = (tmp > 0) ? tmp - 1 : jsetNotSet;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
192
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
193 // Get volume
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194 JSGETBYTE(tmp);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195 pnote->volume = (tmp >= 0x10) ? tmp - 0x10 : jsetNotSet;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 // Get effect
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198 JSGETBYTE(pnote->effect);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
199
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200 // Get parameter
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
201 JSGETBYTE(pnote->param);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202 if (pnote->effect == 0 && pnote->param == 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
203 pnote->effect = pnote->param = jsetNotSet;
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 pnote++;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
206 }
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 // Check the state
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
209 if (size > 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
211 // Some data left unparsed
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
212 JSSWARNING(DMERR_EXTRA_DATA, DMERR_EXTRA_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
213 "Unparsed data after pattern (%d bytes), possibly broken file.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
214 size);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
215 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
216
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
1180
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
221 static int jssXMUnpackPattern102(DMResource *inFile, int size, JSSPattern *pattern)
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
222 {
1192
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
223 JSSNote *pnote;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
224 int row, channel;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
225 assert(pattern != NULL);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
226
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
227 pnote = pattern->data;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
228
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
229 for (row = 0; row < pattern->nrows && size > 0; row++)
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
230 for (channel = 0; channel < pattern->nchannels && size > 0; channel++)
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
231 {
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
232 int packb, tmp;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
233 JSGETBYTE(packb);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
234 if (packb & 0x80)
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
235 {
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
236 if (packb & 0x01)
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
237 {
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
238 // PACK 0x01: Read note
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
239 JSGETBYTE(tmp);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
240 pnote->note = jssXMConvertNote(tmp);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
241 }
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
242
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
243 if (packb & 0x02)
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
244 {
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
245 // PACK 0x02: Read instrument
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
246 JSGETBYTE(tmp);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
247 pnote->instrument = (tmp > 0) ? tmp - 1 : jsetNotSet;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
248 }
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
249
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
250 if (packb & 0x04)
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
251 {
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
252 // PACK 0x04: Read volume
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
253 JSGETBYTE(tmp);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
254 pnote->volume = (tmp >= 0x10) ? tmp - 0x10 : jsetNotSet;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
255 }
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
256
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
257 if (packb & 0x08)
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
258 {
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
259 // PACK 0x08: Read effect
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
260 JSGETBYTE(pnote->effect);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
261 pnote->param = 0;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
262 }
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
263
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
264 if (packb & 0x10)
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
265 {
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
266 // PACK 0x10: Read effect parameter
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
267 JSGETBYTE(pnote->param);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
268 if (pnote->effect == jsetNotSet && pnote->param != 0)
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
269 pnote->effect = 0;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
270 }
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
271 }
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
272 else
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
273 {
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
274 // All data available
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
275 pnote->note = jssXMConvertNote(packb & 0x7f);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
276
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
277 // Get instrument
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
278 JSGETBYTE(tmp);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
279 pnote->instrument = (tmp > 0) ? tmp - 1 : jsetNotSet;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
280
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
281 // Get volume
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
282 JSGETBYTE(tmp);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
283 pnote->volume = (tmp >= 0x10) ? tmp - 0x10 : jsetNotSet;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
284
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
285 if (tmp & 0xc0)
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
286 {
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
287 JSGETBYTE(pnote->effect);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
288 JSGETBYTE(pnote->param);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
289 }
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
290 else
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
291 {
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
292 JSGETBYTE(pnote->param);
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
293 pnote->effect = tmp & 0xf;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
294 }
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
295
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
296 if (pnote->effect == 0 && pnote->param == 0)
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
297 pnote->effect = pnote->param = jsetNotSet;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
298 }
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
299 pnote++;
8841c7f8c608 Some work on the 0x0102 pattern loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1191
diff changeset
300 }
1180
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
301
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
302 // Check the state
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
303 if (size > 0)
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
304 {
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
305 // Some data left unparsed
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
306 JSSWARNING(DMERR_EXTRA_DATA, DMERR_EXTRA_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
307 "Unparsed data after pattern (%d bytes), possibly broken file.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
308 size);
1180
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
309 }
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
310
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
311 return DMERR_OK;
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
312 }
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
313
08c93ebb85b9 Some preliminary code for 0x0102 format pattern support.
Matti Hamalainen <ccr@tnsp.org>
parents: 1179
diff changeset
314
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
315 static int jssXMLoadPatterns(DMResource *inFile, JSSModule *module, XMHeader *xmH)
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
316 {
1184
d144ebb1cdea Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1183
diff changeset
317 int index, ret;
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
318 XMPattern xmP;
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
319
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
320 for (index = 0; index < module->npatterns; index++)
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
321 {
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
322 off_t remainder, pos = dmftell(inFile);
1188
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
323 Uint32 headSize;
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
324
1217
96ad216e9b59 Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1205
diff changeset
325 // Get the pattern header size and packing
1188
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
326 if (!dmf_read_le32(inFile, &xmP.headSize) ||
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
327 !dmf_read_byte(inFile, &xmP.packing))
1259
8e854dfee26d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1257
diff changeset
328 {
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
329 JSSERROR(DMERR_FREAD, DMERR_FREAD,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
330 "Could not read pattern header #%d.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
331 index);
1259
8e854dfee26d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1257
diff changeset
332 }
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
333
1188
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
334 // Different format versions have slightly different headers
1185
cdba23d3fd0d Version 0x0102 has slightly different pattern header than 0x0104.
Matti Hamalainen <ccr@tnsp.org>
parents: 1184
diff changeset
335 if (module->intVersion == 0x0102)
cdba23d3fd0d Version 0x0102 has slightly different pattern header than 0x0104.
Matti Hamalainen <ccr@tnsp.org>
parents: 1184
diff changeset
336 {
cdba23d3fd0d Version 0x0102 has slightly different pattern header than 0x0104.
Matti Hamalainen <ccr@tnsp.org>
parents: 1184
diff changeset
337 Uint8 tmp;
1217
96ad216e9b59 Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1205
diff changeset
338 // 0x0102 has one byte number of rows
1188
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
339 ret = dmf_read_byte(inFile, &tmp);
1186
eca2784bff75 It seems that the number of rows in XM format version 0x0102 needs + 1.
Matti Hamalainen <ccr@tnsp.org>
parents: 1185
diff changeset
340 xmP.nrows = ((Uint16) tmp) + 1;
1188
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
341 headSize = 4 + 1 + 1 + 2;
1185
cdba23d3fd0d Version 0x0102 has slightly different pattern header than 0x0104.
Matti Hamalainen <ccr@tnsp.org>
parents: 1184
diff changeset
342 }
cdba23d3fd0d Version 0x0102 has slightly different pattern header than 0x0104.
Matti Hamalainen <ccr@tnsp.org>
parents: 1184
diff changeset
343 else
2506
609c6bcf0dac Add (a redundant) check for XM version.
Matti Hamalainen <ccr@tnsp.org>
parents: 2471
diff changeset
344 if (module->intVersion == 0x0104)
1185
cdba23d3fd0d Version 0x0102 has slightly different pattern header than 0x0104.
Matti Hamalainen <ccr@tnsp.org>
parents: 1184
diff changeset
345 {
1217
96ad216e9b59 Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1205
diff changeset
346 // 0x0104 has 16-bit word for nrows
1188
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
347 ret = dmf_read_le16(inFile, &xmP.nrows);
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
348 headSize = 4 + 1 + 2 + 2;
1185
cdba23d3fd0d Version 0x0102 has slightly different pattern header than 0x0104.
Matti Hamalainen <ccr@tnsp.org>
parents: 1184
diff changeset
349 }
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
350
1217
96ad216e9b59 Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1205
diff changeset
351 // Check header size against known values
1188
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
352 if (headSize != xmP.headSize)
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
353 {
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
354 JSSERROR(DMERR_NOT_SUPPORTED, DMERR_NOT_SUPPORTED,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
355 "Invalid pattern #%d header size %d, expected %d bytes.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
356 index, xmP.headSize, headSize);
1188
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
357 }
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
358
1217
96ad216e9b59 Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1205
diff changeset
359 // Read rest of the header
1188
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
360 if (!ret || !dmf_read_le16(inFile, &xmP.size))
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
361 {
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
362 JSSERROR(DMERR_FREAD, DMERR_FREAD,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
363 "Could not read pattern header data #%d.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
364 index);
1188
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
365 }
d18c50f88d44 Clean up the pattern header parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1187
diff changeset
366
1217
96ad216e9b59 Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1205
diff changeset
367 // Sanity-check rest of the header data
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
368 if (xmP.packing != 0)
1259
8e854dfee26d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1257
diff changeset
369 {
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
370 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
371 "Pattern #%d packing type unsupported (%d)\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
372 index, xmP.packing);
1259
8e854dfee26d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1257
diff changeset
373 }
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
374
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
375 if (xmP.nrows == 0)
1259
8e854dfee26d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1257
diff changeset
376 {
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
377 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
378 "Pattern #%d has %d rows, invalid data.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
379 index, xmP.nrows);
1259
8e854dfee26d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1257
diff changeset
380 }
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
381
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
382 if (xmP.size > 0)
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
383 {
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
384 // Allocate and unpack pattern
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
385 module->patterns[index] = jssAllocatePattern(xmP.nrows, module->nchannels);
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
386 if (module->patterns[index] == NULL)
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
387 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
388 "Could not allocate memory for pattern #%d\n", index);
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
389
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
390 switch (module->intVersion)
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
391 {
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
392 case 0x0104:
1184
d144ebb1cdea Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1183
diff changeset
393 ret = jssXMUnpackPattern104(inFile, xmP.size, module->patterns[index]);
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
394 break;
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
395 case 0x0102:
1184
d144ebb1cdea Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1183
diff changeset
396 ret = jssXMUnpackPattern102(inFile, xmP.size, module->patterns[index]);
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
397 break;
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
398 }
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
399
1184
d144ebb1cdea Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1183
diff changeset
400 if (ret != 0)
d144ebb1cdea Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1183
diff changeset
401 JSSERROR(ret, ret, "Error in unpacking pattern #%d data\n", index);
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
402 }
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
403
1217
96ad216e9b59 Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1205
diff changeset
404 // Skip extra data if there is any .. shouldn't usually happen tho.
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
405 remainder = xmP.headSize - (dmftell(inFile) - pos);
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
406 if (remainder > 0)
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
407 {
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
408 JSSDEBUG("xmP Skipping: %li\n", remainder);
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
409 dmfseek(inFile, remainder, SEEK_CUR);
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
410 }
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
411 }
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
412
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
413 // Allocate the empty pattern
2471
e0f9200b94ad Use jsetMaxPatterns for "empty" pattern instead of npatterns.
Matti Hamalainen <ccr@tnsp.org>
parents: 1402
diff changeset
414 module->patterns[jsetMaxPatterns] = jssAllocatePattern(64, module->nchannels);
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
415
1217
96ad216e9b59 Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1205
diff changeset
416 /* Convert song orders list by replacing nonexisting
96ad216e9b59 Improve some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 1205
diff changeset
417 * pattern numbers with pattern number jsetMaxPatterns.
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
418 */
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
419 for (index = 0; index < module->norders; index++)
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
420 {
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
421 int tmp = xmH->orderList[index];
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
422 if (tmp >= module->npatterns ||
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
423 module->patterns[tmp] == NULL)
2471
e0f9200b94ad Use jsetMaxPatterns for "empty" pattern instead of npatterns.
Matti Hamalainen <ccr@tnsp.org>
parents: 1402
diff changeset
424 tmp = jsetMaxPatterns;
1183
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
425
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
426 module->orderList[index] = tmp;
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
427 }
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
428
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
429 return DMERR_OK;
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
430 }
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
431
ae17e0a004f4 Move jssXMLoadPatterns() closer to the pattern unpacking functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 1182
diff changeset
432
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
433 /* Convert XM envelope structure to JSS envelope structure
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
434 */
1174
14ac28580059 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1171
diff changeset
435 static int jssXMConvertEnvelope(
14ac28580059 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1171
diff changeset
436 JSSEnvelope *dst, XMEnvelope *src,
14ac28580059 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1171
diff changeset
437 const char *name, const int ninstr)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
438 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
439 int i;
1148
1ed8af15581a Comments and cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1132
diff changeset
440 (void) name;
1ed8af15581a Comments and cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1132
diff changeset
441 (void) ninstr;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
442
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
443 // Convert envelope points
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
444 for (i = 0; i < XM_MaxEnvPoints; i++)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
445 {
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
446 dst->points[i].frame = src->points[i].frame;
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
447 dst->points[i].value = src->points[i].value;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
448 }
1127
e22d4ceb6414 Cosmetics pass, remove excess and trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1126
diff changeset
449
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
450 // Convert other values
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
451 dst->npoints = src->npoints;
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
452 dst->sustain = src->sustain;
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
453 dst->loopS = src->loopS;
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
454 dst->loopE = src->loopE;
1127
e22d4ceb6414 Cosmetics pass, remove excess and trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1126
diff changeset
455
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
456 // Check if the envelope is used
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
457 if (src->flags & 0x01)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
458 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
459 // Convert envelope flags
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
460 dst->flags = jenvfUsed;
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
461 if (src->flags & 0x02)
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
462 dst->flags |= jenvfSustain;
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
463
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
464 if (src->flags & 0x04)
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
465 dst->flags |= jenvfLooped;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
466
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
467 if (src->flags & 0xf0)
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
468 {
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
469 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
470 "Inst#%d/%s-env: Uses unsupported flags values, 0x%02x.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
471 ninstr, name, src->flags);
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
472 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
473
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
474 // Check other values
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
475 if (src->npoints > XM_MaxEnvPoints)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
476 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
477 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
478 "Inst#%d/%s-env: npoints > MAX, possibly broken file.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
479 ninstr, name);
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
480 dst->npoints = XM_MaxEnvPoints;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
481 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
482
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
483 if ((dst->flags & jenvfSustain) && src->sustain > src->npoints)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
484 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
485 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
486 "Inst#%d/%s-env: sustain > npoints (%d > %d), possibly broken file.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
487 ninstr, name, src->sustain, src->npoints);
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
488 dst->sustain = src->npoints;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
489 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
490
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
491 if ((dst->flags & jenvfLooped) && src->loopE > src->npoints)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
492 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
493 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
494 "Inst#%d/%s-env: loopE > npoints (%d > %d), possibly broken file.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
495 ninstr, name, src->loopE, src->npoints);
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
496 dst->loopE = src->npoints;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
497 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
498
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
499 if ((dst->flags & jenvfLooped) && src->loopS > src->loopE)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
500 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
501 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
502 "Inst#%d/%s-env: loopS > loopE (%d > %d), possibly broken file.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
503 ninstr, name, src->loopS, src->loopE);
1149
f5edb39a8db1 Rename some function arguments for clarity. One letter variable names are
Matti Hamalainen <ccr@tnsp.org>
parents: 1148
diff changeset
504 dst->loopS = src->loopE;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
505 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
506 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
507
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
508 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
509 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
510
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
511
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
512 static int jssXMLoadSampleInstrument(
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
513 DMResource *inFile, JSSModule *module,
1226
18baa42db260 Rename some function arguments to better reflect their meaning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1225
diff changeset
514 JSSExtInstrument *einst, int neinst, int nsample)
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
515 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
516 XMSample xmS;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
517 JSSInstrument *inst;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
518
1322
c2000337ac3f Silence some unused function argument warnings (unused due to debug not
Matti Hamalainen <ccr@tnsp.org>
parents: 1260
diff changeset
519 (void) neinst;
c2000337ac3f Silence some unused function argument warnings (unused due to debug not
Matti Hamalainen <ccr@tnsp.org>
parents: 1260
diff changeset
520
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
521 // Read header data
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
522 if (!dmf_read_le32(inFile, &xmS.size) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
523 !dmf_read_le32(inFile, &xmS.loopS) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
524 !dmf_read_le32(inFile, &xmS.loopL) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
525 !dmf_read_byte(inFile, &xmS.volume) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
526 !dmf_read_byte(inFile, (Uint8 *) &xmS.fineTune) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
527 !dmf_read_byte(inFile, &xmS.type) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
528 !dmf_read_byte(inFile, &xmS.panning) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
529 !dmf_read_byte(inFile, (Uint8 *) &xmS.relNote) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
530 !dmf_read_byte(inFile, &xmS.ARESERVED) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
531 !dmf_read_str(inFile, &xmS.sampleName, sizeof(xmS.sampleName)))
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
532 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
533 JSSERROR(DMERR_FREAD, DMERR_FREAD,
1400
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
534 "Error reading instrument sample header #%d/%d [%d]\n",
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
535 neinst, nsample, module->ninstruments);
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
536 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
537
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
538 if (xmS.size <= 0)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
539 return DMERR_OK;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
540
1400
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
541 if (xmS.size > 16 * 1024 * 1024)
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
542 {
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
543 JSSERROR(DMERR_FREAD, DMERR_FREAD,
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
544 "Sample instrument #%d/%d [%d] too large, %d bytes.\n",
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
545 neinst, nsample, module->ninstruments, xmS.size);
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
546 }
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
547
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
548 // Allocate sample instrument
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
549 JSSDEBUG("Allocating sample #%d/%d [%d]\n",
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
550 neinst, nsample, module->ninstruments);
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
551
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
552 einst->instConvTable[nsample] = module->ninstruments;
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
553 inst = module->instruments[module->ninstruments] = jssAllocateInstrument();
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
554 if (inst == NULL)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
555 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
556 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
557 "Could not allocate sample #%d/%d [%d]\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
558 neinst, nsample, module->ninstruments);
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
559 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
560 module->ninstruments++;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
561
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
562 // Copy values
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
563 if (xmS.volume > XM_MaxSampleVolume)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
564 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
565 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
566 "Samp #%d/%d: volume > MAX\n", neinst, nsample);
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
567 xmS.volume = XM_MaxSampleVolume;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
568 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
569
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
570 inst->volume = xmS.volume;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
571 inst->ERelNote = xmS.relNote;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
572 inst->EFineTune = xmS.fineTune;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
573 inst->EPanning = xmS.panning;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
574 #ifndef JSS_LIGHT
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
575 inst->desc = jssASCIItoStr(xmS.sampleName, 0, sizeof(xmS.sampleName));
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
576 #endif
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
577
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
578 // Convert flags
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
579 switch (xmS.type & 0x03)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
580 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
581 case 0: inst->flags = 0; break;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
582 case 1: inst->flags = jsfLooped; break;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
583 default:
1171
bc7473c0b9ce Assume that sample type 3 is basically misinterpretation of the field as a
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
584 // Basically 2 is the value for bidi-loop, and
bc7473c0b9ce Assume that sample type 3 is basically misinterpretation of the field as a
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
585 // 3 is undefined, but some module writers might've
bc7473c0b9ce Assume that sample type 3 is basically misinterpretation of the field as a
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
586 // assumed that this is a bit-field, e.g. 1 | 2 = 3
bc7473c0b9ce Assume that sample type 3 is basically misinterpretation of the field as a
Matti Hamalainen <ccr@tnsp.org>
parents: 1167
diff changeset
587 inst->flags = jsfLooped | jsfBiDi; break;
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
588 break;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
589 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
590
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
591 if (xmS.type & 0x10)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
592 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
593 // 16-bit sample
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
594 JSFSET(inst->flags, jsf16bit);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
595 inst->size = xmS.size / sizeof(Uint16);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
596 inst->loopS = xmS.loopS / sizeof(Uint16);
1174
14ac28580059 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1171
diff changeset
597 inst->loopE = (xmS.loopS + xmS.loopL) / sizeof(Uint16);
1254
47d8e5e0e592 Add extra sanity checking to 16-bit sample instruments in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1239
diff changeset
598 if ((xmS.size & 1) || (xmS.loopS & 1) || (xmS.loopL & 1))
1259
8e854dfee26d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1257
diff changeset
599 {
1254
47d8e5e0e592 Add extra sanity checking to 16-bit sample instruments in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1239
diff changeset
600 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
601 "Samp #%d/%d: size=%d, loopS=%d or loopL=%d not divisible by 2 for 16-bit sample.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
602 neinst, nsample, xmS.size, xmS.loopS, xmS.loopL);
1259
8e854dfee26d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1257
diff changeset
603 }
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
604 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
605 else
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
606 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
607 // 8-bit sample
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
608 inst->size = xmS.size;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
609 inst->loopS = xmS.loopS;
1174
14ac28580059 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1171
diff changeset
610 inst->loopE = xmS.loopS + xmS.loopL;
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
611 }
1127
e22d4ceb6414 Cosmetics pass, remove excess and trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1126
diff changeset
612
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
613 if (xmS.loopL == 0)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
614 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
615 // Always unset loop, if loop length is zero
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
616 JSFUNSET(inst->flags, jsfLooped);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
617 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
618
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
619 if (inst->flags & jsfLooped)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
620 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
621 if (inst->loopS >= inst->size)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
622 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
623 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
624 "Samp #%d/%d: loopS >= size (%d >= %d)\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
625 neinst, nsample, inst->loopS, inst->size);
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
626 JSFUNSET(inst->flags, jsfLooped);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
627 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
628
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
629 if (inst->loopE > inst->size)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
630 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
631 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
632 "Samp #%d/%d: loopE > size (%d > %d)\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
633 neinst, nsample, inst->loopE, inst->size);
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
634 JSFUNSET(inst->flags, jsfLooped);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
635 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
636 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
637
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
638 return DMERR_OK;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
639 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
640
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
641
1158
31bc984b7cd4 Rename a function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1157
diff changeset
642 static int jssXMLoadSampleData(DMResource *inFile, JSSInstrument *inst, int ninst, int nsample)
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
643 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
644 int ret;
1157
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
645 size_t bsize;
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
646
1322
c2000337ac3f Silence some unused function argument warnings (unused due to debug not
Matti Hamalainen <ccr@tnsp.org>
parents: 1260
diff changeset
647 (void) ninst;
c2000337ac3f Silence some unused function argument warnings (unused due to debug not
Matti Hamalainen <ccr@tnsp.org>
parents: 1260
diff changeset
648 (void) nsample;
c2000337ac3f Silence some unused function argument warnings (unused due to debug not
Matti Hamalainen <ccr@tnsp.org>
parents: 1260
diff changeset
649
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
650 JSSDEBUG(
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
651 "desc....: '%s'\n"
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
652 "size....: %d\n"
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
653 "loopS...: %d\n"
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
654 "loopE...: %d\n"
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
655 "volume..: %d\n"
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
656 "flags...: %x\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
657 inst->desc,
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
658 inst->size, inst->loopS, inst->loopE,
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
659 inst->volume, inst->flags);
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
660
1157
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
661 // Allocate memory for sample data
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
662 bsize = (inst->flags & jsf16bit) ? sizeof(Uint16) : sizeof(Uint8);
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
663 bsize *= inst->size;
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
664
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
665 if ((inst->data = dmMalloc(bsize)) == NULL)
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
666 {
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
667 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
668 "Could not allocate %d bytes of sample data for instrument/sample #%d/%d.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
669 bsize, ninst, nsample);
1157
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
670 }
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
671
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
672 // Read sampledata
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
673 if (dmfread(inst->data, sizeof(Uint8), bsize, inFile) != bsize)
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
674 {
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
675 JSSERROR(DMERR_FREAD, DMERR_FREAD,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
676 "Error reading sample data for instrument #%d/%d, %d bytes.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
677 ninst, nsample, bsize);
1157
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
678 }
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
679
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
680 // Convert the sample data
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
681 if (inst->flags & jsf16bit)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
682 {
1157
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
683 ret = jssDecodeSample16(
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
684 (Uint16 *) inst->data, inst->size,
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
685 #if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
686 (jsampDelta | jsampSwapEndianess)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
687 #else
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
688 (jsampDelta)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
689 #endif
1157
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
690 );
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
691 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
692 else
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
693 {
1157
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
694 ret = jssDecodeSample8(
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
695 (Uint8 *) inst->data, inst->size,
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
696 (jsampDelta | jsampFlipSign));
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
697 }
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
698
1157
e13269e17422 Clean up the sample data loading a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1149
diff changeset
699 return ret;
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
700 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
701
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
702
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
703 static int jssXMLoadInstrumentSamples(
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
704 DMResource *inFile, JSSModule *module,
1226
18baa42db260 Rename some function arguments to better reflect their meaning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1225
diff changeset
705 JSSExtInstrument *einst, int neinst)
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
706 {
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
707 int nsample, ret;
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
708
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
709 for (nsample = 0; nsample < einst->nsamples; nsample++)
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
710 if (einst->instConvTable[nsample] != jsetNotSet)
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
711 {
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
712 JSSInstrument *inst = module->instruments[einst->instConvTable[nsample]];
1226
18baa42db260 Rename some function arguments to better reflect their meaning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1225
diff changeset
713 if ((ret = jssXMLoadSampleData(inFile, inst, neinst, nsample)) != DMERR_OK)
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
714 return ret;
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
715 }
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
716
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
717 return DMERR_OK;
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
718 }
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
719
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
720
1132
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
721 static BOOL jssXMLoadEnvelopePoints(DMResource *inFile, XMEnvelope *env)
1131
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
722 {
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
723 int i;
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
724 for (i = 0; i < XM_MaxEnvPoints; i++)
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
725 {
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
726 if (!dmf_read_le16(inFile, &(env->points[i].frame)) ||
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
727 !dmf_read_le16(inFile, &(env->points[i].value)))
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
728 return FALSE;
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
729 }
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
730 return TRUE;
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
731 }
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
732
b349646f19a0 Split envelope reading to tiny helper function.
Matti Hamalainen <ccr@tnsp.org>
parents: 1130
diff changeset
733
1132
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
734 static BOOL jssXMLoadEnvelopeData(DMResource *inFile, XMEnvelope *env)
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
735 {
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
736 return
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
737 dmf_read_byte(inFile, &(env->sustain)) &&
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
738 dmf_read_byte(inFile, &(env->loopS)) &&
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
739 dmf_read_byte(inFile, &(env->loopE));
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
740 }
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
741
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
742
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
743 /* Load XM-format extended instrument from file-stream into JSS module's given inst
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
744 */
1226
18baa42db260 Rename some function arguments to better reflect their meaning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1225
diff changeset
745 static int jssXMLoadExtInstrument(DMResource *inFile, int neinst, JSSModule *module)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
746 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
747 XMInstrument1 xmI1;
1126
0888764d01cd Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1125
diff changeset
748 off_t remainder, pos = dmftell(inFile);
1175
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
749 JSSExtInstrument *einst;
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
750 XMInstrument2 xmI2;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
751 int i, nsample, ret;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
752
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
753 // Get instrument header #1
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
754 if (!dmf_read_le32(inFile, &xmI1.headSize) ||
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
755 !dmf_read_str(inFile, &xmI1.instName, sizeof(xmI1.instName)) ||
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
756 !dmf_read_byte(inFile, &xmI1.instType) ||
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
757 !dmf_read_le16(inFile, &xmI1.nsamples))
1159
29dc9337fa11 Add a meaningful error message for instrument header read failure.
Matti Hamalainen <ccr@tnsp.org>
parents: 1158
diff changeset
758 {
29dc9337fa11 Add a meaningful error message for instrument header read failure.
Matti Hamalainen <ccr@tnsp.org>
parents: 1158
diff changeset
759 JSSERROR(DMERR_FREAD, DMERR_FREAD,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
760 "Failed to read primary extended instrument header #%d.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
761 neinst);
1159
29dc9337fa11 Add a meaningful error message for instrument header read failure.
Matti Hamalainen <ccr@tnsp.org>
parents: 1158
diff changeset
762 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
763
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
764 // If there are samples, there is header #2
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
765 if (xmI1.nsamples == 0)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
766 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
767 // We may STILL need to skip extra data after 1st instr. header
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
768 remainder = xmI1.headSize - (dmftell(inFile) - pos);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
769 if (remainder > 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
770 {
98
82b825bb08b0 Fix XM loading. Oops.
Matti Hamalainen <ccr@tnsp.org>
parents: 88
diff changeset
771 JSSDEBUG("xmI1#2 Skipping: %li\n", remainder);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
772 dmfseek(inFile, remainder, SEEK_CUR);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
773 }
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
774 return DMERR_OK;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
775 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
776
1402
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
777 if (xmI1.nsamples > XM_MaxInstSamples)
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
778 {
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
779 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
780 "Extended instrument #%d has invalid number of samples %d.\n",
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
781 neinst, xmI1.nsamples);
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
782 }
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
783
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
784 // Allocate instrument
1257
60dc14a2e4c5 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1256
diff changeset
785 JSSDEBUG("Allocating extended instrument #%d [%d]\n",
60dc14a2e4c5 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1256
diff changeset
786 neinst, module->nextInstruments);
60dc14a2e4c5 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1256
diff changeset
787
1175
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
788 if ((einst = jssAllocateExtInstrument()) == NULL)
1259
8e854dfee26d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1257
diff changeset
789 {
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
790 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
791 "Could not allocate extended instrument #%d.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
792 neinst);
1259
8e854dfee26d Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1257
diff changeset
793 }
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
794
1226
18baa42db260 Rename some function arguments to better reflect their meaning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1225
diff changeset
795 module->extInstruments[neinst] = einst;
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
796
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
797 // Get instrument header #2
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
798 if (!dmf_read_le32(inFile, &xmI2.headSize) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
799 !dmf_read_str(inFile, &xmI2.sNumForNotes, sizeof(xmI2.sNumForNotes)))
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
800 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
801 JSSERROR(DMERR_FREAD, DMERR_FREAD,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
802 "Could not read secondary instrument header part #1 for #%d.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
803 neinst);
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
804 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
805
1132
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
806 if (!jssXMLoadEnvelopePoints(inFile, &xmI2.volumeEnv) ||
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
807 !jssXMLoadEnvelopePoints(inFile, &xmI2.panningEnv))
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
808 {
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
809 JSSERROR(DMERR_FREAD, DMERR_FREAD,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
810 "Could not read envelope point data for instrument #%d.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
811 neinst);
1132
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
812 }
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
813
1132
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
814 if (!dmf_read_byte(inFile, &xmI2.volumeEnv.npoints) ||
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
815 !dmf_read_byte(inFile, &xmI2.panningEnv.npoints) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
816
1132
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
817 !jssXMLoadEnvelopeData(inFile, &xmI2.volumeEnv) ||
d4512925b4f9 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 1131
diff changeset
818 !jssXMLoadEnvelopeData(inFile, &xmI2.panningEnv) ||
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
819
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
820 !dmf_read_byte(inFile, &xmI2.volumeEnv.flags) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
821 !dmf_read_byte(inFile, &xmI2.panningEnv.flags) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
822
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
823 !dmf_read_byte(inFile, &xmI2.vibratoType) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
824 !dmf_read_byte(inFile, &xmI2.vibratoSweep) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
825 !dmf_read_byte(inFile, &xmI2.vibratoDepth) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
826 !dmf_read_byte(inFile, &xmI2.vibratoRate) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
827
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
828 !dmf_read_le16(inFile, &xmI2.fadeOut) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
829 !dmf_read_le16(inFile, &xmI2.ARESERVED))
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
830 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
831 JSSERROR(DMERR_FREAD, DMERR_FREAD,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
832 "Could not read secondary instrument header part #2 for #%d.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
833 neinst);
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
834 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
835
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
836 // Skip the extra data after header #2
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
837 remainder = xmI1.headSize - (dmftell(inFile) - pos);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
838 if (remainder > 0)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
839 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
840 JSSDEBUG("xmI1#1 Skipping: %li\n", remainder);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
841 dmfseek(inFile, remainder, SEEK_CUR);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
842 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
843
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
844 // Check and convert all ext instrument information
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
845 #ifndef JSS_LIGHT
1175
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
846 einst->desc = jssASCIItoStr(xmI1.instName, 0, sizeof(xmI1.instName));
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
847 #endif
1226
18baa42db260 Rename some function arguments to better reflect their meaning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1225
diff changeset
848 jssXMConvertEnvelope(&einst->volumeEnv, &xmI2.volumeEnv, "vol", neinst);
18baa42db260 Rename some function arguments to better reflect their meaning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1225
diff changeset
849 jssXMConvertEnvelope(&einst->panningEnv, &xmI2.panningEnv, "pan", neinst);
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
850
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
851 switch (xmI2.vibratoType)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
852 {
1175
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
853 case 0: einst->vibratoType = jvibSine; break;
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
854 case 1: einst->vibratoType = jvibRamp; break;
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
855 case 2: einst->vibratoType = jvibSquare; break;
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
856 case 3: einst->vibratoType = jvibRandom; break;
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
857 default:
1175
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
858 einst->vibratoType = jvibSine;
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
859 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
860 "Invalid extinstrument vibrato type %d for inst #%d\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
861 neinst);
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
862 break;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
863 }
1175
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
864 einst->vibratoSweep = xmI2.vibratoSweep;
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
865 einst->vibratoDepth = xmI2.vibratoDepth;
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
866 einst->vibratoRate = xmI2.vibratoRate;
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
867 einst->fadeOut = xmI2.fadeOut;
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
868 einst->nsamples = xmI1.nsamples;
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
869
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
870 // Initialize the SNumForNotes conversion table
1402
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
871 if ((einst->instConvTable = dmCalloc(XM_MaxInstruments + 1, sizeof(int))) == NULL)
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
872 {
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
873 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
874 "Could not allocate memory for instConvTable of instrument #%d.\n",
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
875 neinst);
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
876 }
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
877
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
878 for (i = 0; i < XM_MaxInstruments; i++)
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
879 einst->instConvTable[i] = jsetNotSet;
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
880
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
881 // Read sample headers
1402
b47109fce375 Make JSSExtInstrument.instConvSamples dynamically allocated and add check
Matti Hamalainen <ccr@tnsp.org>
parents: 1400
diff changeset
882 for (nsample = 0; nsample < einst->nsamples; nsample++)
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
883 {
1226
18baa42db260 Rename some function arguments to better reflect their meaning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1225
diff changeset
884 if ((ret = jssXMLoadSampleInstrument(inFile, module, einst, neinst, nsample)) != DMERR_OK)
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
885 return ret;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
886 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
887
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
888 // Apply new values to sNumForNotes values
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
889 for (i = 0; i < XM_MaxNotes; i++)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
890 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
891 int tmp = xmI2.sNumForNotes[i];
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
892 if (tmp >= 0 && tmp < xmI1.nsamples)
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
893 einst->sNumForNotes[i] = einst->instConvTable[tmp];
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
894 else
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
895 {
1175
165c673ee012 Rename a variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1174
diff changeset
896 einst->sNumForNotes[i] = jsetNotSet;
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
897 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
898 "Ext.instrument #%d sNumForNotes[%d] out of range (%d).\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
899 neinst, i, tmp);
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
900 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
901 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
902
1177
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
903 // Read sample data if needed
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
904 if (module->intVersion == 0x0104)
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
905 {
1226
18baa42db260 Rename some function arguments to better reflect their meaning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1225
diff changeset
906 if ((ret = jssXMLoadInstrumentSamples(inFile, module, einst, neinst)) != DMERR_OK)
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
907 return ret;
1177
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
908 }
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
909
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
910 return DMERR_OK;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
911 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
912
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
913
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
914 static int jssXMLoadInstruments(DMResource *inFile, JSSModule *module)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
915 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
916 int index;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
917 for (index = 0; index < module->nextInstruments; index++)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
918 {
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
919 int result = jssXMLoadExtInstrument(inFile, index, module);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
920 if (result != 0)
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
921 JSSERROR(result, result, "Errors while reading instrument #%d\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
922 index);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
923 }
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
924 return DMERR_OK;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
925 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
926
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
927
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
928 /* Load XM-format module from given file-stream
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
929 */
1256
d88d5f88b77a Rename variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1254
diff changeset
930 int jssLoadXM(DMResource *inFile, JSSModule **pmodule, BOOL probe)
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
931 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
932 JSSModule *module;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
933 XMHeader xmH;
1187
f195dd7bfa48 Initialize return variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1186
diff changeset
934 int index, ret = DMERR_OK;
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
935
1256
d88d5f88b77a Rename variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1254
diff changeset
936 *pmodule = NULL;
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
937
1257
60dc14a2e4c5 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1256
diff changeset
938 // Try to read the XM header
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
939 if (!dmf_read_str(inFile, &xmH.idMagic, sizeof(xmH.idMagic)) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
940 !dmf_read_str(inFile, &xmH.songName, sizeof(xmH.songName)) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
941 !dmf_read_byte(inFile, &xmH.unUsed1A) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
942 !dmf_read_str(inFile, &xmH.trackerName, sizeof(xmH.trackerName)) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
943 !dmf_read_le16(inFile, &xmH.version) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
944 !dmf_read_le32(inFile, &xmH.headSize) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
945 !dmf_read_le16(inFile, &xmH.norders) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
946 !dmf_read_le16(inFile, &xmH.defRestartPos) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
947 !dmf_read_le16(inFile, &xmH.nchannels) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
948 !dmf_read_le16(inFile, &xmH.npatterns) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
949 !dmf_read_le16(inFile, &xmH.ninstruments) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
950 !dmf_read_le16(inFile, &xmH.flags) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
951 !dmf_read_le16(inFile, &xmH.defSpeed) ||
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
952 !dmf_read_le16(inFile, &xmH.defTempo))
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
953 return DMERR_FREAD;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
954
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
955 // Check the fields, none of these are considered fatal
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
956 if (strncmp(xmH.idMagic, "Extended Module: ", 17) != 0)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
957 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
958 if (probe)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
959 return DMERR_NOT_SUPPORTED;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
960 else
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
961 JSSERROR(DMERR_NOT_SUPPORTED, DMERR_NOT_SUPPORTED,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
962 "Not a FT2 Extended Module (XM), header signature mismatch!\n");
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
963 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
964
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
965 if (xmH.unUsed1A != 0x1a)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
966 {
1198
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
967 if (!probe)
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
968 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
969 "Possibly modified or corrupted XM [%x]\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
970 xmH.unUsed1A);
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
971 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
972
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
973 if (xmH.norders > XM_MaxOrders)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
974 {
1198
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
975 if (!probe)
1400
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
976 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
977 "Number of orders %d > %d, possibly broken module.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
978 xmH.norders, XM_MaxOrders);
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
979 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
980
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
981 if (xmH.norders == 0)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
982 {
1198
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
983 if (!probe)
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
984 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
985 "Number of orders was zero.\n");
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
986 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
987
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
988 if (xmH.npatterns > XM_MaxPatterns)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
989 {
1198
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
990 if (!probe)
1400
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
991 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
992 "Number of patterns %d > %d, possibly broken module.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
993 xmH.npatterns, XM_MaxPatterns);
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
994 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
995
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
996 if (xmH.npatterns == 0)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
997 {
1198
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
998 if (!probe)
1400
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
999 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1000 "Number of patterns was zero.\n");
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1001 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1002
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1003 if (xmH.nchannels <= 0 || xmH.nchannels > XM_MaxChannels)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1004 {
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1005 if (!probe)
1400
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
1006 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1007 "Number of channels was invalid, %d (should be 1 - %d).\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1008 xmH.nchannels, XM_MaxChannels);
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1009 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1010
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1011 if (xmH.ninstruments <= 0 || xmH.ninstruments > XM_MaxInstruments)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1012 {
1198
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
1013 if (!probe)
1400
496d04ab495f Improve error checking and resiliency a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1397
diff changeset
1014 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1015 "Number of instruments was invalid, %d (should be 1 - %d).\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1016 xmH.ninstruments, XM_MaxInstruments);
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1017 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1018
1161
92cee852a8af Check header size against the known values. Bail out if it's too small, and
Matti Hamalainen <ccr@tnsp.org>
parents: 1160
diff changeset
1019 if (xmH.headSize < XM_HeaderSize)
92cee852a8af Check header size against the known values. Bail out if it's too small, and
Matti Hamalainen <ccr@tnsp.org>
parents: 1160
diff changeset
1020 {
1198
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
1021 if (probe)
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
1022 return DMERR_NOT_SUPPORTED;
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
1023 else
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1024 JSSERROR(DMERR_NOT_SUPPORTED, DMERR_NOT_SUPPORTED,
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1025 "XM header size less than %d bytes (%d bytes).\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1026 XM_HeaderSize, xmH.headSize);
1161
92cee852a8af Check header size against the known values. Bail out if it's too small, and
Matti Hamalainen <ccr@tnsp.org>
parents: 1160
diff changeset
1027 }
92cee852a8af Check header size against the known values. Bail out if it's too small, and
Matti Hamalainen <ccr@tnsp.org>
parents: 1160
diff changeset
1028
1160
b122ad2d3fbe Add XM format version check.
Matti Hamalainen <ccr@tnsp.org>
parents: 1159
diff changeset
1029 switch (xmH.version)
b122ad2d3fbe Add XM format version check.
Matti Hamalainen <ccr@tnsp.org>
parents: 1159
diff changeset
1030 {
b122ad2d3fbe Add XM format version check.
Matti Hamalainen <ccr@tnsp.org>
parents: 1159
diff changeset
1031 case 0x0104:
1177
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1032 case 0x0102:
1160
b122ad2d3fbe Add XM format version check.
Matti Hamalainen <ccr@tnsp.org>
parents: 1159
diff changeset
1033 break;
b122ad2d3fbe Add XM format version check.
Matti Hamalainen <ccr@tnsp.org>
parents: 1159
diff changeset
1034
b122ad2d3fbe Add XM format version check.
Matti Hamalainen <ccr@tnsp.org>
parents: 1159
diff changeset
1035 default:
1198
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
1036 if (!probe)
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1037 JSSWARNING(DMERR_NOT_SUPPORTED, DMERR_NOT_SUPPORTED,
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1038 "Unsupported version of XM format 0x%04x.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1039 xmH.version);
1160
b122ad2d3fbe Add XM format version check.
Matti Hamalainen <ccr@tnsp.org>
parents: 1159
diff changeset
1040 }
b122ad2d3fbe Add XM format version check.
Matti Hamalainen <ccr@tnsp.org>
parents: 1159
diff changeset
1041
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1042 if (!dmf_read_str(inFile, &xmH.orderList, sizeof(xmH.orderList)))
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1043 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1044 JSSERROR(DMERR_FREAD, DMERR_FREAD,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1045 "Error reading pattern order list.\n");
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1046 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1047
1161
92cee852a8af Check header size against the known values. Bail out if it's too small, and
Matti Hamalainen <ccr@tnsp.org>
parents: 1160
diff changeset
1048 if (xmH.headSize > 276)
92cee852a8af Check header size against the known values. Bail out if it's too small, and
Matti Hamalainen <ccr@tnsp.org>
parents: 1160
diff changeset
1049 {
92cee852a8af Check header size against the known values. Bail out if it's too small, and
Matti Hamalainen <ccr@tnsp.org>
parents: 1160
diff changeset
1050 JSSWARNING(DMERR_NOT_SUPPORTED, DMERR_NOT_SUPPORTED,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1051 "XM header size > %d bytes, skipping the rest.\n",
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1052 XM_HeaderSize, xmH.headSize);
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1053
1161
92cee852a8af Check header size against the known values. Bail out if it's too small, and
Matti Hamalainen <ccr@tnsp.org>
parents: 1160
diff changeset
1054 dmfseek(inFile, xmH.headSize - XM_HeaderSize, SEEK_CUR);
92cee852a8af Check header size against the known values. Bail out if it's too small, and
Matti Hamalainen <ccr@tnsp.org>
parents: 1160
diff changeset
1055 }
92cee852a8af Check header size against the known values. Bail out if it's too small, and
Matti Hamalainen <ccr@tnsp.org>
parents: 1160
diff changeset
1056
1198
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
1057 if (probe)
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
1058 return DMERR_OK;
5d20c80df290 Improve probing.
Matti Hamalainen <ccr@tnsp.org>
parents: 1192
diff changeset
1059
1239
2be42ba9fc39 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1226
diff changeset
1060 // Okay, allocate a module structure
1256
d88d5f88b77a Rename variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 1254
diff changeset
1061 if ((*pmodule = module = jssAllocateModule()) == NULL)
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1062 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1063 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
1397
01d9bd6e88a8 Indentation cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1322
diff changeset
1064 "Could not allocate memory for module structure.\n");
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1065 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1066
1239
2be42ba9fc39 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1226
diff changeset
1067 // Convert the module header data
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1068 module->moduleType = jmdtXM;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1069 module->intVersion = xmH.version;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1070 #ifndef JSS_LIGHT
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1071 module->moduleName = jssASCIItoStr(xmH.songName, 0, sizeof(xmH.songName));
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1072 module->trackerName = jssASCIItoStr(xmH.trackerName, 0, sizeof(xmH.trackerName));
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1073 #endif
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1074 module->defSpeed = xmH.defSpeed;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1075 module->defTempo = xmH.defTempo;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1076 module->nextInstruments = xmH.ninstruments;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1077 module->ninstruments = 0;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1078 module->npatterns = xmH.npatterns;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1079 module->norders = xmH.norders;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1080 module->nchannels = xmH.nchannels;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1081 module->defFlags = jmdfStereo | jmdfFT2Replay;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1082 module->defRestartPos = xmH.defRestartPos;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1083
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1084 if ((xmH.flags & 1) == 0)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1085 module->defFlags |= jmdfAmigaPeriods;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1086
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1087 // Setup the default pannings
1260
94e9444b0fa7 Only initialize defpannings up to nchannels.
Matti Hamalainen <ccr@tnsp.org>
parents: 1259
diff changeset
1088 for (index = 0; index < module->nchannels; index++)
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1089 module->defPanning[index] = jchPanMiddle;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1090
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1091 // Load rest of the module
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1092 switch (xmH.version)
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1093 {
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1094 case 0x0104:
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1095 if ((ret = jssXMLoadPatterns(inFile, module, &xmH)) != DMERR_OK)
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1096 goto out;
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
1097
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1098 if ((ret = jssXMLoadInstruments(inFile, module)) != DMERR_OK)
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1099 goto out;
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1100 break;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1101
1177
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1102 case 0x0102:
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1103 if ((ret = jssXMLoadInstruments(inFile, module)) != DMERR_OK)
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1104 goto out;
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1105
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1106 if ((ret = jssXMLoadPatterns(inFile, module, &xmH)) != DMERR_OK)
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1107 goto out;
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1108
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1109 // Read sample data if needed
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1110 for (index = 0; index < module->nextInstruments; index++)
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1111 {
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1112 JSSExtInstrument *einst = module->extInstruments[index];
1190
51eb5788c1fc Add a NULL pointer check here.
Matti Hamalainen <ccr@tnsp.org>
parents: 1188
diff changeset
1113 if (einst != NULL && (ret = jssXMLoadInstrumentSamples(inFile, module, einst, index)) != DMERR_OK)
1177
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1114 goto out;
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1115 }
dc26df8b642c Some support for 0x0102 version of the XM format. Does not work fully yet,
Matti Hamalainen <ccr@tnsp.org>
parents: 1176
diff changeset
1116 break;
1176
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1117 }
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1118
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1119 out:
afdbf62ce8ad Revamp instrument sample loading somewhat.
Matti Hamalainen <ccr@tnsp.org>
parents: 1175
diff changeset
1120 return ret;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1121 }