Mercurial > hg > dmlib
comparison minijss/jloadjss.c @ 2303:dcf1016f3d27
Implement new (horizontal raw element) pattern storage mode for JSSMOD. Bump
JSSMOD format version.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 08 Jul 2019 10:06:18 +0300 |
parents | fc58f62f100c |
children | fd02e78f6fdc |
comparison
equal
deleted
inserted
replaced
2302:7c26b5f86ff7 | 2303:dcf1016f3d27 |
---|---|
11 # define JM_SUP_PATMODE_1 1 | 11 # define JM_SUP_PATMODE_1 1 |
12 # define JM_SUP_PATMODE_2 1 | 12 # define JM_SUP_PATMODE_2 1 |
13 # define JM_SUP_PATMODE_3 1 | 13 # define JM_SUP_PATMODE_3 1 |
14 # define JM_SUP_PATMODE_4 1 | 14 # define JM_SUP_PATMODE_4 1 |
15 # define JM_SUP_PATMODE_5 1 | 15 # define JM_SUP_PATMODE_5 1 |
16 # define JM_SUP_PATMODE_6 1 | |
16 #endif | 17 #endif |
17 | 18 |
18 | 19 |
19 static inline JSSNote * jssGetNotePtr(JSSPattern *pattern, const int channel, const int row) | 20 static inline JSSNote * jssGetNotePtr(JSSPattern *pattern, const int channel, const int row) |
20 { | 21 { |
251 pnote->param = (tmp == 0 && pnote->effect == jsetNotSet) ? jsetNotSet : tmp; | 252 pnote->param = (tmp == 0 && pnote->effect == jsetNotSet) ? jsetNotSet : tmp; |
252 JSFOREACHNOTE2 | 253 JSFOREACHNOTE2 |
253 | 254 |
254 return DMERR_OK; | 255 return DMERR_OK; |
255 } | 256 } |
257 | |
258 #undef JSFOREACHNOTE1 | |
259 #undef JSFOREACHNOTE2 | |
260 #endif | |
261 | |
262 | |
263 #ifdef JM_SUP_PATMODE_6 | |
264 | |
265 #undef JSGETBYTE | |
266 #define JSGETBYTE(XV) if (!dmf_read_byte(inFile, XV)) return DMERR_OUT_OF_DATA | |
267 | |
268 #define JSFOREACHNOTE1 \ | |
269 for (int row = 0; row < pattern->nrows; row++) \ | |
270 for (int channel = 0; channel < pattern->nmap; channel++) { \ | |
271 JSSNote *pnote = pattern->data + (pattern->nchannels * row) + pattern->map[channel]; | |
272 | |
273 #define JSFOREACHNOTE2 } | |
274 | |
275 | |
276 static int jssGetPatternRawHorizElem(DMResource *inFile, JSSPattern *pattern) | |
277 { | |
278 Uint8 tmp; | |
279 | |
280 JSFOREACHNOTE1 | |
281 JSGETBYTE(&tmp); | |
282 if (tmp == 0) | |
283 pnote->note = jsetNotSet; | |
284 else if (tmp == 127) | |
285 pnote->note = jsetNoteOff; | |
286 else | |
287 pnote->note = tmp - 1; | |
288 JSFOREACHNOTE2 | |
289 | |
290 JSFOREACHNOTE1 | |
291 JSGETBYTE(&tmp); | |
292 pnote->instrument = (tmp > 0) ? tmp - 1 : jsetNotSet; | |
293 JSFOREACHNOTE2 | |
294 | |
295 JSFOREACHNOTE1 | |
296 JSGETBYTE(&tmp); | |
297 pnote->volume = (tmp > 0) ? tmp - 1 : jsetNotSet; | |
298 JSFOREACHNOTE2 | |
299 | |
300 JSFOREACHNOTE1 | |
301 JSGETBYTE(&tmp); | |
302 pnote->effect = (tmp > 0) ? tmp - 1 : jsetNotSet; | |
303 JSFOREACHNOTE2 | |
304 | |
305 JSFOREACHNOTE1 | |
306 JSGETBYTE(&tmp); | |
307 pnote->param = (tmp == 0 && pnote->effect == jsetNotSet) ? jsetNotSet : tmp; | |
308 JSFOREACHNOTE2 | |
309 | |
310 return DMERR_OK; | |
311 } | |
312 | |
313 #undef JSFOREACHNOTE1 | |
314 #undef JSFOREACHNOTE2 | |
256 #endif | 315 #endif |
257 | 316 |
258 | 317 |
259 #ifdef JM_SUP_EXT_INSTR | 318 #ifdef JM_SUP_EXT_INSTR |
260 static int jssMODLoadEnvelope(DMResource *inFile, | 319 static int jssMODLoadEnvelope(DMResource *inFile, |
500 case PATMODE_COMP_VERT: | 559 case PATMODE_COMP_VERT: |
501 ret = jssGetPatternCompVert(inFile, pattern); | 560 ret = jssGetPatternCompVert(inFile, pattern); |
502 break; | 561 break; |
503 #endif | 562 #endif |
504 #ifdef JM_SUP_PATMODE_5 | 563 #ifdef JM_SUP_PATMODE_5 |
505 case PATMODE_RAW_ELEM: | 564 case PATMODE_RAW_ELEM_VERT: |
506 ret = jssGetPatternRawVertElem(inFile, pattern); | 565 ret = jssGetPatternRawVertElem(inFile, pattern); |
566 break; | |
567 #endif | |
568 #ifdef JM_SUP_PATMODE_6 | |
569 case PATMODE_RAW_ELEM_HORIZ: | |
570 ret = jssGetPatternRawHorizElem(inFile, pattern); | |
507 break; | 571 break; |
508 #endif | 572 #endif |
509 default: | 573 default: |
510 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA, | 574 JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA, |
511 "Unsupported pattern mode %d. Check compilation options.", | 575 "Unsupported pattern mode %d. Check compilation options.", |