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.",