Mercurial > hg > dmlib
diff 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 |
line wrap: on
line diff
--- a/minijss/jloadjss.c Mon Jul 08 08:58:31 2019 +0300 +++ b/minijss/jloadjss.c Mon Jul 08 10:06:18 2019 +0300 @@ -13,6 +13,7 @@ # define JM_SUP_PATMODE_3 1 # define JM_SUP_PATMODE_4 1 # define JM_SUP_PATMODE_5 1 +# define JM_SUP_PATMODE_6 1 #endif @@ -253,6 +254,64 @@ return DMERR_OK; } + +#undef JSFOREACHNOTE1 +#undef JSFOREACHNOTE2 +#endif + + +#ifdef JM_SUP_PATMODE_6 + +#undef JSGETBYTE +#define JSGETBYTE(XV) if (!dmf_read_byte(inFile, XV)) return DMERR_OUT_OF_DATA + +#define JSFOREACHNOTE1 \ + for (int row = 0; row < pattern->nrows; row++) \ + for (int channel = 0; channel < pattern->nmap; channel++) { \ + JSSNote *pnote = pattern->data + (pattern->nchannels * row) + pattern->map[channel]; + +#define JSFOREACHNOTE2 } + + +static int jssGetPatternRawHorizElem(DMResource *inFile, JSSPattern *pattern) +{ + Uint8 tmp; + + JSFOREACHNOTE1 + JSGETBYTE(&tmp); + if (tmp == 0) + pnote->note = jsetNotSet; + else if (tmp == 127) + pnote->note = jsetNoteOff; + else + pnote->note = tmp - 1; + JSFOREACHNOTE2 + + JSFOREACHNOTE1 + JSGETBYTE(&tmp); + pnote->instrument = (tmp > 0) ? tmp - 1 : jsetNotSet; + JSFOREACHNOTE2 + + JSFOREACHNOTE1 + JSGETBYTE(&tmp); + pnote->volume = (tmp > 0) ? tmp - 1 : jsetNotSet; + JSFOREACHNOTE2 + + JSFOREACHNOTE1 + JSGETBYTE(&tmp); + pnote->effect = (tmp > 0) ? tmp - 1 : jsetNotSet; + JSFOREACHNOTE2 + + JSFOREACHNOTE1 + JSGETBYTE(&tmp); + pnote->param = (tmp == 0 && pnote->effect == jsetNotSet) ? jsetNotSet : tmp; + JSFOREACHNOTE2 + + return DMERR_OK; +} + +#undef JSFOREACHNOTE1 +#undef JSFOREACHNOTE2 #endif @@ -502,10 +561,15 @@ break; #endif #ifdef JM_SUP_PATMODE_5 - case PATMODE_RAW_ELEM: + case PATMODE_RAW_ELEM_VERT: ret = jssGetPatternRawVertElem(inFile, pattern); break; #endif +#ifdef JM_SUP_PATMODE_6 + case PATMODE_RAW_ELEM_HORIZ: + ret = jssGetPatternRawHorizElem(inFile, pattern); + break; +#endif default: JSSERROR(DMERR_INVALID_DATA, DMERR_INVALID_DATA, "Unsupported pattern mode %d. Check compilation options.",