annotate minijss/jloadxm.c @ 1130:725e7caa43a0

Split instrument sample data loading to another function in XM loader.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 04 Mar 2015 06:32:19 +0200
parents e22d4ceb6414
children b349646f19a0
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 #include <string.h>
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
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14 /* XM value limit definitions
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15 */
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16 #define XM_MaxChannels (32)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17 #define XM_MaxPatterns (256)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18 #define XM_MaxOrders (255)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19 #define XM_MaxInstruments (128)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 #define XM_MaxInstSamples (16)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21 #define XM_MaxEnvPoints (12)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22 #define XM_MaxNotes (96)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
23 #define XM_MaxSampleVolume (64)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25
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
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 Uint16 version; // XM-version 0x0104
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 */
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
107 #define JSGETBYTE(XV) do { \
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
108 size--; \
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
109 if (size < 0) \
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"); \
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
112 XV = dmfgetc(inFile); \
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
113 } while (0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
114
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115
313
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
116 static int jssXMConvertNote(int val)
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
117 {
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
118 if (val < 1 || val > 97)
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
119 return jsetNotSet;
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
120 else if (val == 97)
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
121 return jsetNoteOff;
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
122 else
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
123 return val - 1;
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
124 }
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
125
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
126
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
127 static int jssXMUnpackPattern(DMResource *inFile, int size, JSSPattern *pattern)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
128 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
129 int packb, row, channel, tmp;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130 JSSNote *pnote;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
131 assert(pattern != NULL);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
132
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
133 pnote = pattern->data;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
134
313
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
135 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
136 for (channel = 0; channel < pattern->nchannels && size > 0; channel++)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
138 JSGETBYTE(packb);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139 if (packb & 0x80)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
140 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
141 if (packb & 0x01)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
142 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
143 // PACK 0x01: Read note
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
144 JSGETBYTE(tmp);
313
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
145 pnote->note = jssXMConvertNote(tmp);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
146 }
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 & 0x02)
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 0x02: Read instrument
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
151 JSGETBYTE(tmp);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
152 pnote->instrument = (tmp > 0) ? tmp - 1 : jsetNotSet;
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 & 0x04)
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 0x04: Read volume
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->volume = (tmp >= 0x10) ? tmp - 0x10 : 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 & 0x08)
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 0x08: Read effect
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
165 JSGETBYTE(pnote->effect);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
166 pnote->param = 0;
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 & 0x10)
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 0x10: Read effect parameter
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
172 JSGETBYTE(pnote->param);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
173 if (pnote->effect == jsetNotSet && pnote->param != 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
174 pnote->effect = 0;
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 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
177 else
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
178 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
179 // All data available
313
a89500f26dde Cleanup the pattern decoder a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 183
diff changeset
180 pnote->note = jssXMConvertNote(packb & 0x7f);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
182 // Get instrument
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183 JSGETBYTE(tmp);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184 pnote->instrument = (tmp > 0) ? tmp - 1 : jsetNotSet;
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 // Get volume
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
187 JSGETBYTE(tmp);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
188 pnote->volume = (tmp >= 0x10) ? tmp - 0x10 : jsetNotSet;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
189
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
190 // Get effect
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
191 JSGETBYTE(pnote->effect);
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 parameter
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194 JSGETBYTE(pnote->param);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195 if (pnote->effect == 0 && pnote->param == 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196 pnote->effect = pnote->param = jsetNotSet;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198 pnote++;
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
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
201 // Check the state
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202 if (size > 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
203 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
204 // Some data left unparsed
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
205 JSSWARNING(DMERR_EXTRA_DATA, DMERR_EXTRA_DATA,
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
206 "Unparsed data after pattern (%d bytes), possibly broken file.\n", size);
0
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
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
209 return DMERR_OK;
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
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
212
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
213 /* Convert XM envelope structure to JSS envelope structure
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
214 */
552
d4cee32e7050 Rename internal structures, cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 313
diff changeset
215 static int jssXMConvertEnvelope(JSSEnvelope * d, XMEnvelope * s, char * e, int instr)
0
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 int i;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
218 (void) e; (void) instr;
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 // Convert envelope points
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
221 for (i = 0; i < XM_MaxEnvPoints; i++)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
222 {
183
a65f0c3deaa7 Some more player logic cleanups and variable renames.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
223 d->points[i].frame = s->points[i].frame;
a65f0c3deaa7 Some more player logic cleanups and variable renames.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
224 d->points[i].value = s->points[i].value;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
225 }
1127
e22d4ceb6414 Cosmetics pass, remove excess and trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1126
diff changeset
226
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
227 // Convert other values
183
a65f0c3deaa7 Some more player logic cleanups and variable renames.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
228 d->npoints = s->npoints;
a65f0c3deaa7 Some more player logic cleanups and variable renames.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
229 d->sustain = s->sustain;
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
230 d->loopS = s->loopS;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
231 d->loopE = s->loopE;
1127
e22d4ceb6414 Cosmetics pass, remove excess and trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1126
diff changeset
232
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
233 // Check if the envelope is used
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
234 if (s->flags & 0x01)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
235 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
236 // Convert envelope flags
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
237 d->flags = jenvfUsed;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
238 if (s->flags & 0x02)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
239 d->flags |= jenvfSustain;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
240
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
241 if (s->flags & 0x04)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
242 d->flags |= jenvfLooped;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
243
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
244 // Check other values
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
245 if (s->npoints > XM_MaxEnvPoints)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
246 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
247 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
248 "Inst#%d/%s-env: nPoints > MAX, possibly broken file.\n", instr, e);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
249 s->npoints = XM_MaxEnvPoints;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
250 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
251
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
252 if ((d->flags & jenvfSustain) && s->sustain > s->npoints)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
253 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
254 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
255 "Inst#%d/%s-env: iSustain > nPoints (%d > %d), possibly broken file.\n",
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
256 instr, e, s->sustain, s->npoints);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
257 s->sustain = s->npoints;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
258 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
259
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
260 if ((d->flags & jenvfLooped) && s->loopE > s->npoints)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
261 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
262 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
263 "Inst#%d/%s-env: loopE > nPoints (%d > %d), possibly broken file.\n",
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
264 instr, e, s->loopE, s->npoints);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
265 s->loopE = s->npoints;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
266 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
267
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
268 if ((d->flags & jenvfLooped) && s->loopS > s->loopE)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
269 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
270 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
271 "Inst#%d/%s-env: loopS > loopE (%d > %d), possibly broken file.\n",
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
272 instr, e, s->loopS, s->loopE);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
273 s->loopS = 0;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
274 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
275 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
276
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
277 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
278 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
279
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
280
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
281 static int jssXMLoadInstrument(DMResource *inFile, JSSModule *module, int ninst, int nsample, int *xmConvTable)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
282 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
283 XMSample xmS;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
284 JSSInstrument *inst;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
285
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
286 // Read header data
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
287 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
288 !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
289 !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
290 !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
291 !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
292 !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
293 !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
294 !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
295 !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
296 !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
297 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
298 JSSERROR(DMERR_FREAD, DMERR_FREAD,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
299 "Error reading instrument sample header #%d/%d [%d]",
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
300 ninst, nsample, module->ninstruments);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
301 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
302
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
303 if (xmS.size <= 0)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
304 return DMERR_OK;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
305
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
306 // Allocate sample instrument
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
307 JSSDEBUG("Allocating sample #%d/%d [%d]\n",
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
308 ninst, nsample, module->ninstruments);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
309
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
310 xmConvTable[nsample] = module->ninstruments;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
311 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
312 if (inst == NULL)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
313 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
314 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
315 "Could not allocate sample #%d/%d [%d]\n",
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
316 ninst, nsample, module->ninstruments);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
317 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
318 module->ninstruments++;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
319
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
320 // Copy values
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
321 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
322 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
323 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
324 "Samp #%d/%d: volume > MAX\n", ninst, nsample);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
325 xmS.volume = XM_MaxSampleVolume;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
326 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
327
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
328 inst->volume = xmS.volume;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
329 inst->ERelNote = xmS.relNote;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
330 inst->EFineTune = xmS.fineTune;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
331 inst->EPanning = xmS.panning;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
332 #ifndef JSS_LIGHT
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
333 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
334 #endif
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
335
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
336 // Convert flags
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
337 switch (xmS.type & 0x03)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
338 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
339 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
340 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
341 case 2: inst->flags = jsfLooped | jsfBiDi; break;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
342 default:
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
343 inst->flags = 0;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
344 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
345 "Samp #%d/%d: Invalid sample type 0x%x\n",
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
346 ninst, nsample, xmS.type);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
347 break;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
348 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
349
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
350 if (xmS.type & 0x10)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
351 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
352 // 16-bit sample
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
353 JSFSET(inst->flags, jsf16bit);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
354
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
355 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
356 inst->loopS = xmS.loopS / sizeof(Uint16);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
357 inst->loopE = ((xmS.loopS + xmS.loopL) / sizeof(Uint16));
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
358 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
359 else
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
360 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
361 // 8-bit sample
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
362 inst->size = xmS.size;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
363 inst->loopS = xmS.loopS;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
364 inst->loopE = (xmS.loopS + xmS.loopL);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
365 }
1127
e22d4ceb6414 Cosmetics pass, remove excess and trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1126
diff changeset
366
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
367 if (xmS.loopL == 0)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
368 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
369 // 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
370 JSFUNSET(inst->flags, jsfLooped);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
371 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
372
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
373 if (inst->flags & jsfLooped)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
374 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
375 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
376 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
377 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
378 "Samp #%d/%d: loopS >= size (%d >= %d)\n",
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
379 ninst, nsample, inst->loopS, inst->size);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
380 JSFUNSET(inst->flags, jsfLooped);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
381 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
382
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
383 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
384 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
385 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
386 "Samp #%d/%d: loopE > size (%d > %d)\n",
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
387 ninst, nsample, inst->loopE, inst->size);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
388 JSFUNSET(inst->flags, jsfLooped);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
389 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
390 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
391
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
392 // Allocate memory for sample data
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
393 if (inst->flags & jsf16bit)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
394 inst->data = dmCalloc(inst->size, sizeof(Uint16));
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
395 else
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
396 inst->data = dmCalloc(inst->size, sizeof(Uint8));
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
397
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
398 if (inst->data == NULL)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
399 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
400 "Could not allocate sample data #%d/%d.\n", ninst, nsample);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
401
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
402 return DMERR_OK;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
403 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
404
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
405
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
406 static int jssXMLoadInstrumentData(DMResource *inFile, JSSInstrument *inst, int ninst, int nsample)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
407 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
408 int ret;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
409
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
410 JSSDEBUG("desc....: '%s'\n"
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
411 "size....: %d\n"
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
412 "loopS...: %d\n"
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
413 "loopE...: %d\n"
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
414 "volume..: %d\n"
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
415 "flags...: %x\n",
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
416 inst->desc,
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
417 inst->size, inst->loopS, inst->loopE,
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
418 inst->volume, inst->flags);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
419
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
420 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
421 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
422 // Read sampledata
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
423 if (dmfread(inst->data, sizeof(Uint16), inst->size, inFile) != (size_t) inst->size)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
424 JSSERROR(DMERR_FREAD, DMERR_FREAD,
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
425 "Error reading sampledata for instrument #%d/%d, %d words.\n",
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
426 ninst, nsample, inst->size);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
427
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
428 // Convert data
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
429 if ((ret = jssDecodeSample16((Uint16 *) inst->data, inst->size,
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
430 #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
431 (jsampDelta | jsampSwapEndianess)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
432 #else
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
433 (jsampDelta)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
434 #endif
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
435 )) != DMERR_OK)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
436 return ret;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
437 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
438 else
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
439 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
440 // Read sampledata
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
441 if (dmfread(inst->data, sizeof(Uint8), inst->size, inFile) != (size_t) inst->size)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
442 JSSERROR(DMERR_FREAD, DMERR_FREAD,
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
443 "Error reading sampledata for instrument #%d/%d, %d bytes.\n",
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
444 ninst, nsample, inst->size);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
445
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
446 // Convert data
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
447 if ((ret = jssDecodeSample8((Uint8 *) inst->data, inst->size,
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
448 (jsampDelta | jsampFlipSign))) != DMERR_OK)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
449 return ret;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
450 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
451 return DMERR_OK;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
452 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
453
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
454
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
455 /* 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
456 */
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
457 static int jssXMLoadExtInstrument(DMResource *inFile, int ninst, JSSModule *module)
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 XMInstrument1 xmI1;
1126
0888764d01cd Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1125
diff changeset
460 off_t remainder, pos = dmftell(inFile);
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
461 int xmConvTable[XM_MaxInstruments + 1];
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
462 JSSExtInstrument *pEInst;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
463 XMInstrument2 xmI2;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
464 int i, nsample, ret;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
465
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
466 // 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
467 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
468 !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
469 !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
470 !dmf_read_le16(inFile, &xmI1.nsamples))
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
471 return DMERR_FREAD;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
472
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
473 // 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
474 if (xmI1.nsamples == 0)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
475 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
476 // We may STILL need to skip extra data after 1st instr. header
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
477 remainder = xmI1.headSize - (dmftell(inFile) - pos);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
478 if (remainder > 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
479 {
98
82b825bb08b0 Fix XM loading. Oops.
Matti Hamalainen <ccr@tnsp.org>
parents: 88
diff changeset
480 JSSDEBUG("xmI1#2 Skipping: %li\n", remainder);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
481 dmfseek(inFile, remainder, SEEK_CUR);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
482 }
1130
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
483 return DMERR_OK;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
484 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
485
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
486 // Allocate instrument
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
487 if ((pEInst = jssAllocateExtInstrument()) == NULL)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
488 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
489 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
490 "Could not allocate extended instrument structure #%d\n", ninst);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
491 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
492
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
493 module->extInstruments[ninst] = pEInst;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
494
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
495 // 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
496 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
497 !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
498 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
499 JSSERROR(DMERR_FREAD, DMERR_FREAD,
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
500 "Could not read secondary instrument header #1 for #%d.\n", ninst);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
501 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
502
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
503 for (i = 0; i < XM_MaxEnvPoints; i++)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
504 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
505 dmf_read_le16(inFile, &xmI2.volumeEnv.points[i].frame);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
506 dmf_read_le16(inFile, &xmI2.volumeEnv.points[i].value);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
507 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
508
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
509 for (i = 0; i < XM_MaxEnvPoints; i++)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
510 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
511 dmf_read_le16(inFile, &xmI2.panningEnv.points[i].frame);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
512 dmf_read_le16(inFile, &xmI2.panningEnv.points[i].value);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
513 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
514
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
515 if (!dmf_read_byte(inFile, &xmI2.volumeEnv.npoints) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
516 !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
517
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
518 !dmf_read_byte(inFile, &xmI2.volumeEnv.sustain) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
519 !dmf_read_byte(inFile, &xmI2.volumeEnv.loopS) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
520 !dmf_read_byte(inFile, &xmI2.volumeEnv.loopE) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
521
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
522 !dmf_read_byte(inFile, &xmI2.panningEnv.sustain) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
523 !dmf_read_byte(inFile, &xmI2.panningEnv.loopS) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
524 !dmf_read_byte(inFile, &xmI2.panningEnv.loopE) ||
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
525
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
526 !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
527 !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
528
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
529 !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
530 !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
531 !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
532 !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
533
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
534 !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
535 !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
536 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
537 JSSERROR(DMERR_FREAD, DMERR_FREAD,
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
538 "Could not read secondary instrument header #2 for #%d.\n", ninst);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
539 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
540
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
541 // 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
542 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
543 if (remainder > 0)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
544 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
545 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
546 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
547 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
548
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
549 // 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
550 #ifndef JSS_LIGHT
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
551 pEInst->desc = jssASCIItoStr(xmI1.instName, 0, sizeof(xmI1.instName));
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
552 #endif
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
553 jssXMConvertEnvelope(&pEInst->volumeEnv, &xmI2.volumeEnv, "vol", ninst);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
554 jssXMConvertEnvelope(&pEInst->panningEnv, &xmI2.panningEnv, "pan", ninst);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
555
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
556 switch (xmI2.vibratoType)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
557 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
558 case 0: pEInst->vibratoType = jvibSine; break;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
559 case 1: pEInst->vibratoType = jvibRamp; break;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
560 case 2: pEInst->vibratoType = jvibSquare; break;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
561 case 3: pEInst->vibratoType = jvibRandom; break;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
562 default:
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
563 pEInst->vibratoType = jvibSine;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
564 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
565 "Invalid extinstrument vibrato type %d for inst #%d\n", ninst);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
566 break;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
567 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
568 pEInst->vibratoSweep = xmI2.vibratoSweep;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
569 pEInst->vibratoDepth = xmI2.vibratoDepth;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
570 pEInst->vibratoRate = xmI2.vibratoRate;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
571 pEInst->fadeOut = xmI2.fadeOut;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
572 pEInst->nsamples = xmI1.nsamples;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
573
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
574 // Initialize the SNumForNotes conversion table
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
575 for (i = 0; i < XM_MaxInstruments; i++)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
576 xmConvTable[i] = jsetNotSet;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
577
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
578 // Read sample headers
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
579 for (nsample = 0; nsample < xmI1.nsamples; nsample++)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
580 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
581 if ((ret = jssXMLoadInstrument(inFile, module, ninst, nsample, xmConvTable)) != DMERR_OK)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
582 return ret;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
583 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
584
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
585 // Read sample data
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
586 for (nsample = 0; nsample < xmI1.nsamples; nsample++)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
587 if (xmConvTable[nsample] != jsetNotSet)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
588 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
589 JSSInstrument *inst = module->instruments[xmConvTable[nsample]];
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
590 if ((ret = jssXMLoadInstrumentData(inFile, inst, ninst, nsample)) != DMERR_OK)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
591 return ret;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
592 }
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
593
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
594
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
595 // 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
596 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
597 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
598 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
599 if (tmp >= 0 && tmp < xmI1.nsamples)
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
600 pEInst->sNumForNotes[i] = xmConvTable[tmp];
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
601 else
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
602 {
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
603 pEInst->sNumForNotes[i] = jsetNotSet;
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
604 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
605 "Ext.instrument #%d sNumForNotes[%d] out of range (%d).\n",
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
606 ninst, i, tmp);
725e7caa43a0 Split instrument sample data loading to another function in XM loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 1127
diff changeset
607 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
608 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
609
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
610 return DMERR_OK;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
611 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
612
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
613
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
614 static int jssXMLoadPatterns(DMResource *inFile, JSSModule *module, XMHeader *xmH)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
615 {
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
616 int index, result;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
617 XMPattern xmP;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
618
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
619 for (index = 0; index < module->npatterns; index++)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
620 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
621 // Get the pattern header
1126
0888764d01cd Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1125
diff changeset
622 off_t remainder, pos = dmftell(inFile);
1127
e22d4ceb6414 Cosmetics pass, remove excess and trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1126
diff changeset
623
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
624 if (!dmf_read_le32(inFile, &xmP.headSize) ||
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
625 !dmf_read_byte(inFile, &xmP.packing) ||
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
626 !dmf_read_le16(inFile, &xmP.nrows) ||
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
627 !dmf_read_le16(inFile, &xmP.size))
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
628 JSSERROR(DMERR_FREAD, DMERR_FREAD,
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
629 "Could not read pattern header data #%d.\n",
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
630 index);
1127
e22d4ceb6414 Cosmetics pass, remove excess and trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents: 1126
diff changeset
631
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
632
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
633 // Check the header
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
634 if (xmP.packing != 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
635 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
636 "Pattern #%d packing type unsupported (%d)\n",
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
637 index, xmP.packing);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
638
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
639 if (xmP.nrows == 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
640 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
641 "Pattern #%d has %d rows, invalid data.\n",
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
642 index, xmP.nrows);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
643
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
644 if (xmP.size > 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
645 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
646 // Allocate and unpack pattern
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
647 module->patterns[index] = jssAllocatePattern(xmP.nrows, module->nchannels);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
648 if (module->patterns[index] == NULL)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
649 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
650 "Could not allocate memory for pattern #%d\n", index);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
651
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
652 result = jssXMUnpackPattern(inFile, xmP.size, module->patterns[index]);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
653 if (result != 0)
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
654 JSSERROR(result, result, "Error in unpacking pattern #%d data\n", index);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
655 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
656
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
657 // Skip extra data (if the file is damaged)
88
aa9fbdbcea70 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
658 remainder = xmP.headSize - (dmftell(inFile) - pos);
aa9fbdbcea70 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
659 if (remainder > 0)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
660 {
98
82b825bb08b0 Fix XM loading. Oops.
Matti Hamalainen <ccr@tnsp.org>
parents: 88
diff changeset
661 JSSDEBUG("xmP Skipping: %li\n", remainder);
88
aa9fbdbcea70 Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
662 dmfseek(inFile, remainder, SEEK_CUR);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
663 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
664 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
665
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
666 // Allocate the empty pattern
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
667 module->patterns[jsetMaxPatterns] = jssAllocatePattern(64, module->nchannels);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
668
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
669 /* Convert song orders list by replacing nonexisting patterns
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
670 * with pattern number jsetMaxPatterns.
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
671 */
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
672 for (index = 0; index < module->norders; index++)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
673 {
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
674 int tmp = xmH->orderList[index];
1126
0888764d01cd Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1125
diff changeset
675 if (tmp >= module->npatterns ||
0888764d01cd Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1125
diff changeset
676 module->patterns[tmp] == NULL)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
677 tmp = jsetMaxPatterns;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
678
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
679 module->orderList[index] = tmp;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
680 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
681
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
682 return DMERR_OK;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
683 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
684
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
685
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
686 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
687 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
688 int index;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
689 for (index = 0; index < module->nextInstruments; index++)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
690 {
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
691 int result = jssXMLoadExtInstrument(inFile, index, module);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
692 if (result != 0)
778
a4cf7716ba58 Clean up the XM module loader a bit, add more error checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 658
diff changeset
693 JSSERROR(result, result, "Errors while reading instrument #%d\n", index);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
694 }
1124
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
695 return DMERR_OK;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
696 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
697
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
698
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
699 /* 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
700 */
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
701 int jssLoadXM(DMResource *inFile, JSSModule **ppModule, BOOL probe)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
702 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
703 JSSModule *module;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
704 XMHeader xmH;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
705 int index, result;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
706
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
707 assert(ppModule != NULL);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
708 assert(inFile != NULL);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
709 *ppModule = NULL;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
710
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
711 // Try to get the XM-header
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
712 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
713 !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
714 !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
715 !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
716 !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
717 !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
718 !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
719 !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
720 !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
721 !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
722 !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
723 !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
724 !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
725 !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
726 return DMERR_FREAD;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
727
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
728
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
729 // 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
730 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
731 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
732 if (probe)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
733 return DMERR_NOT_SUPPORTED;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
734 else
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
735 JSSERROR(DMERR_NOT_SUPPORTED, DMERR_NOT_SUPPORTED,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
736 "Not a FT2 Extended Module (XM), header signature mismatch!\n");
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
737 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
738
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
739 if (xmH.unUsed1A != 0x1a)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
740 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
741 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
742 "Possibly modified or corrupted XM [%x]\n", xmH.unUsed1A);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
743 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
744
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
745 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
746 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
747 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
748 "Number of orders %d > %d, possibly broken module.\n",
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
749 xmH.norders, XM_MaxOrders);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
750 xmH.norders = XM_MaxOrders;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
751 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
752
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
753 if (xmH.norders == 0)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
754 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
755 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
756 "Number of orders was zero.\n");
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
757 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
758
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
759 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
760 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
761 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
762 "Number of patterns %d > %d, possibly broken module.\n",
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
763 xmH.npatterns, XM_MaxPatterns);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
764 xmH.npatterns = XM_MaxPatterns;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
765 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
766
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
767 if (xmH.npatterns == 0)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
768 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
769 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
770 "Number of patterns was zero.\n");
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
771 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
772
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
773 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
774 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
775 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
776 "Number of channels was invalid, %d (should be 1 - %d).\n",
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
777 xmH.nchannels, XM_MaxChannels);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
778 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
779
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
780 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
781 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
782 JSSWARNING(DMERR_INVALID_DATA, DMERR_INVALID_DATA,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
783 "Number of instruments was invalid, %d (should be 1 - %d).\n",
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
784 xmH.ninstruments, XM_MaxInstruments);
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
785 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
786
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
787 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
788 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
789 JSSERROR(DMERR_FREAD, DMERR_FREAD,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
790 "Error reading pattern order list.\n");
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
791 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
792
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
793 /* Okay, allocate a module structure
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
794 */
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
795 module = jssAllocateModule();
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
796 if (module == NULL)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
797 {
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
798 JSSERROR(DMERR_MALLOC, DMERR_MALLOC,
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
799 "Could not allocate memory for module structure.\n");
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
800 }
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
801 *ppModule = module;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
802
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
803
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
804 // Convert and check the header data
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
805 module->moduleType = jmdtXM;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
806 module->intVersion = xmH.version;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
807 #ifndef JSS_LIGHT
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
808 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
809 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
810 #endif
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
811 module->defSpeed = xmH.defSpeed;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
812 module->defTempo = xmH.defTempo;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
813 module->nextInstruments = xmH.ninstruments;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
814 module->ninstruments = 0;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
815 module->npatterns = xmH.npatterns;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
816 module->norders = xmH.norders;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
817 module->nchannels = xmH.nchannels;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
818 module->defFlags = jmdfStereo | jmdfFT2Replay;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
819 module->defRestartPos = xmH.defRestartPos;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
820
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
821 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
822 module->defFlags |= jmdfAmigaPeriods;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
823
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
824 // Setup the default pannings
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
825 for (index = 0; index < jsetNChannels; index++)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
826 module->defPanning[index] = jchPanMiddle;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
827
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
828 // Load rest of the module
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
829 if ((result = jssXMLoadPatterns(inFile, module, &xmH)) != DMERR_OK)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
830 return result;
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
831
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
832 if ((result = jssXMLoadInstruments(inFile, module)) != DMERR_OK)
b8bfd9fbe1d9 Modularize the XM loader somewhat by splitting to more functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 796
diff changeset
833 return result;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
834
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
835 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
836 }