# HG changeset patch # User Matti Hamalainen # Date 1349604901 -10800 # Node ID d3a9a3804079a6afd346d97c4fa505fa8796463b # Parent bed7457cd8da747cc149cbd1c4211d9f4c09252b Implement pattern mode 5 in the JMOD jloader. diff -r bed7457cd8da -r d3a9a3804079 jloadjss.c --- a/jloadjss.c Sun Oct 07 12:09:44 2012 +0300 +++ b/jloadjss.c Sun Oct 07 13:15:01 2012 +0300 @@ -48,7 +48,7 @@ #define JSGETBYTE(XV) if (!jsGetBufByte(buf, bufLeft, XV)) return DMERR_OUT_OF_DATA -#if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_1) || defined(JM_SUP_PATMODE_3) +#if defined(JM_SUP_PATMODE_1) || defined(JM_SUP_PATMODE_3) static int jssGetConvertedNote(Uint8 **buf, size_t *bufLeft, JSSNote *note) { Uint8 tmp; @@ -79,7 +79,7 @@ #endif -#if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_2) || defined(JM_SUP_PATMODE_4) +#if defined(JM_SUP_PATMODE_2) || defined(JM_SUP_PATMODE_4) static int jssGetCompressedNote(Uint8 **buf, size_t *bufLeft, JSSNote *note) { Uint8 packb, tmp; @@ -150,7 +150,7 @@ #endif -#if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_2) +#ifdef JM_SUP_PATMODE_2 static int jssGetPatternCompHoriz(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern) { int row, channel; @@ -172,7 +172,7 @@ #endif -#if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_4) +#ifdef JM_SUP_PATMODE_4 static int jssGetPatternCompVert(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern) { int row, channel; @@ -194,7 +194,7 @@ #endif -#if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_1) +#ifdef JM_SUP_PATMODE_1 static int jssGetPatternRawHoriz(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern) { int row, channel; @@ -216,7 +216,7 @@ #endif -#if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_3) +#ifdef JM_SUP_PATMODE_3 static int jssGetPatternRawVert(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern) { int row, channel; @@ -238,14 +238,56 @@ #endif -#if defined(JM_SUP_PATMODE_ALL) || defined(JM_SUP_PATMODE_5) +#ifdef JM_SUP_PATMODE_5 + +#undef JSGETBYTE +#define JSGETBYTE(XV) if (!jsGetBufByte(&buf, bufLeft, XV)) return DMERR_OUT_OF_DATA + +#define JSFOREACHNOTE1 \ + for (channel = 0; channel < pattern->nchannels; channel++) \ + for (row = 0; row < pattern->nrows; row++) { \ + JSSNote *note = pattern->data + (pattern->nchannels * row) + channel; + +#define JSFOREACHNOTE2 } + static int jssGetPatternRawVertElem(Uint8 *buf, size_t *bufLeft, JSSPattern *pattern) { int row, channel; + Uint8 tmp; assert(buf != NULL); assert(pattern != NULL); + JSFOREACHNOTE1 + JSGETBYTE(&tmp); + if (tmp == 0) + note->note = jsetNotSet; + else if (tmp == 127) + note->note == jsetNoteOff; + else + note->note = tmp - 1; + JSFOREACHNOTE2 + + JSFOREACHNOTE1 + JSGETBYTE(&tmp); + note->instrument = tmp; + JSFOREACHNOTE2 + + JSFOREACHNOTE1 + JSGETBYTE(&tmp); + note->volume = tmp; + JSFOREACHNOTE2 + + JSFOREACHNOTE1 + JSGETBYTE(&tmp); + note->effect = tmp; + JSFOREACHNOTE2 + + JSFOREACHNOTE1 + JSGETBYTE(&tmp); + note->param = tmp; + JSFOREACHNOTE2 + return DMERR_OK; } #endif