comparison jloadjss.c @ 204:d3a9a3804079

Implement pattern mode 5 in the JMOD jloader.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 07 Oct 2012 13:15:01 +0300
parents 6bf5220fa47e
children 175328b20341
comparison
equal deleted inserted replaced
203:bed7457cd8da 204:d3a9a3804079
46 46
47 #define JSGETBUF(XV, XT) if (!jsGetBufData(buf, bufLeft, XV, sizeof(XT))) return DMERR_OUT_OF_DATA 47 #define JSGETBUF(XV, XT) if (!jsGetBufData(buf, bufLeft, XV, sizeof(XT))) return DMERR_OUT_OF_DATA
48 #define JSGETBYTE(XV) if (!jsGetBufByte(buf, bufLeft, XV)) return DMERR_OUT_OF_DATA 48 #define JSGETBYTE(XV) if (!jsGetBufByte(buf, bufLeft, XV)) return DMERR_OUT_OF_DATA
49 49
50 50
51 #if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_1) || defined(JM_SUP_PATMODE_3) 51 #if defined(JM_SUP_PATMODE_1) || defined(JM_SUP_PATMODE_3)
52 static int jssGetConvertedNote(Uint8 **buf, size_t *bufLeft, JSSNote *note) 52 static int jssGetConvertedNote(Uint8 **buf, size_t *bufLeft, JSSNote *note)
53 { 53 {
54 Uint8 tmp; 54 Uint8 tmp;
55 55
56 JSGETBYTE(&tmp); 56 JSGETBYTE(&tmp);
77 return DMERR_OK; 77 return DMERR_OK;
78 } 78 }
79 #endif 79 #endif
80 80
81 81
82 #if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_2) || defined(JM_SUP_PATMODE_4) 82 #if defined(JM_SUP_PATMODE_2) || defined(JM_SUP_PATMODE_4)
83 static int jssGetCompressedNote(Uint8 **buf, size_t *bufLeft, JSSNote *note) 83 static int jssGetCompressedNote(Uint8 **buf, size_t *bufLeft, JSSNote *note)
84 { 84 {
85 Uint8 packb, tmp; 85 Uint8 packb, tmp;
86 86
87 JSGETBYTE(&packb); 87 JSGETBYTE(&packb);
148 return DMERR_OK; 148 return DMERR_OK;
149 } 149 }
150 #endif 150 #endif
151 151
152 152
153 #if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_2) 153 #ifdef JM_SUP_PATMODE_2
154 static int jssGetPatternCompHoriz(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern) 154 static int jssGetPatternCompHoriz(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern)
155 { 155 {
156 int row, channel; 156 int row, channel;
157 157
158 assert(buf != NULL); 158 assert(buf != NULL);
170 return DMERR_OK; 170 return DMERR_OK;
171 } 171 }
172 #endif 172 #endif
173 173
174 174
175 #if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_4) 175 #ifdef JM_SUP_PATMODE_4
176 static int jssGetPatternCompVert(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern) 176 static int jssGetPatternCompVert(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern)
177 { 177 {
178 int row, channel; 178 int row, channel;
179 179
180 assert(buf != NULL); 180 assert(buf != NULL);
192 return DMERR_OK; 192 return DMERR_OK;
193 } 193 }
194 #endif 194 #endif
195 195
196 196
197 #if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_1) 197 #ifdef JM_SUP_PATMODE_1
198 static int jssGetPatternRawHoriz(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern) 198 static int jssGetPatternRawHoriz(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern)
199 { 199 {
200 int row, channel; 200 int row, channel;
201 201
202 assert(buf != NULL); 202 assert(buf != NULL);
214 return DMERR_OK; 214 return DMERR_OK;
215 } 215 }
216 #endif 216 #endif
217 217
218 218
219 #if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_3) 219 #ifdef JM_SUP_PATMODE_3
220 static int jssGetPatternRawVert(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern) 220 static int jssGetPatternRawVert(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern)
221 { 221 {
222 int row, channel; 222 int row, channel;
223 223
224 assert(buf != NULL); 224 assert(buf != NULL);
236 return DMERR_OK; 236 return DMERR_OK;
237 } 237 }
238 #endif 238 #endif
239 239
240 240
241 #if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_5) 241 #ifdef JM_SUP_PATMODE_5
242
243 #undef JSGETBYTE
244 #define JSGETBYTE(XV) if (!jsGetBufByte(&buf, bufLeft, XV)) return DMERR_OUT_OF_DATA
245
246 #define JSFOREACHNOTE1 \
247 for (channel = 0; channel < pattern->nchannels; channel++) \
248 for (row = 0; row < pattern->nrows; row++) { \
249 JSSNote *note = pattern->data + (pattern->nchannels * row) + channel;
250
251 #define JSFOREACHNOTE2 }
252
242 static int jssGetPatternRawVertElem(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern) 253 static int jssGetPatternRawVertElem(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern)
243 { 254 {
244 int row, channel; 255 int row, channel;
256 Uint8 tmp;
245 257
246 assert(buf != NULL); 258 assert(buf != NULL);
247 assert(pattern != NULL); 259 assert(pattern != NULL);
260
261 JSFOREACHNOTE1
262 JSGETBYTE(&tmp);
263 if (tmp == 0)
264 note->note = jsetNotSet;
265 else if (tmp == 127)
266 note->note == jsetNoteOff;
267 else
268 note->note = tmp - 1;
269 JSFOREACHNOTE2
270
271 JSFOREACHNOTE1
272 JSGETBYTE(&tmp);
273 note->instrument = tmp;
274 JSFOREACHNOTE2
275
276 JSFOREACHNOTE1
277 JSGETBYTE(&tmp);
278 note->volume = tmp;
279 JSFOREACHNOTE2
280
281 JSFOREACHNOTE1
282 JSGETBYTE(&tmp);
283 note->effect = tmp;
284 JSFOREACHNOTE2
285
286 JSFOREACHNOTE1
287 JSGETBYTE(&tmp);
288 note->param = tmp;
289 JSFOREACHNOTE2
248 290
249 return DMERR_OK; 291 return DMERR_OK;
250 } 292 }
251 #endif 293 #endif
252 294