Mercurial > hg > dmlib
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 |