comparison minijss/jssmod.c @ 2285:25398f2eba64

Merge.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 18 Jun 2019 14:23:02 +0300
parents 167ec99e57a5
children 69a5af2eb1ea
comparison
equal deleted inserted replaced
2284:519c8726b235 2285:25398f2eba64
1 /* 1 /*
2 * miniJSS - Module structure and handling routines 2 * miniJSS - Module structure and handling routines
3 * Programmed and designed by Matti 'ccr' Hamalainen 3 * Programmed and designed by Matti 'ccr' Hamalainen
4 * (C) Copyright 2006-2015 Tecnic Software productions (TNSP) 4 * (C) Copyright 2006-2019 Tecnic Software productions (TNSP)
5 */ 5 */
6 #include "jssmod.h" 6 #include "jssmod.h"
7 7
8 8
9 #ifndef JSS_LIGHT 9 #ifndef JSS_LIGHT
341 JSSPattern *pattern; 341 JSSPattern *pattern;
342 JSSNote *pnote; 342 JSSNote *pnote;
343 343
344 // Check arguments 344 // Check arguments
345 if (nrows <= 0 || nchannels <= 0) 345 if (nrows <= 0 || nchannels <= 0)
346 JSSERROR(DMERR_INVALID_ARGS, NULL, "Invalid nrows=%i or nchannels=%i.\n", nrows, nchannels); 346 JSSERROR(DMERR_INVALID_ARGS, NULL, "Invalid nrows=%d or nchannels=%d.\n", nrows, nchannels);
347 347
348 // Allocate a pattern structure 348 // Allocate a pattern structure
349 if ((pattern = dmMalloc0(sizeof(JSSPattern))) == NULL) 349 if ((pattern = dmMalloc0(sizeof(JSSPattern))) == NULL)
350 JSSERROR(DMERR_MALLOC, NULL, "Could not allocate pattern structure.\n"); 350 JSSERROR(DMERR_MALLOC, NULL, "Could not allocate pattern structure.\n");
351 351
352 // Allocate notedata 352 // Allocate notedata
353 pattern->data = dmMalloc(nrows * nchannels * sizeof(JSSNote)); 353 pattern->data = dmMalloc(nrows * nchannels * sizeof(JSSNote));
354 if (pattern->data == NULL) 354 if (pattern->data == NULL)
355 { 355 {
356 dmFree(pattern); 356 jssFreePattern(pattern);
357 JSSERROR(DMERR_MALLOC, NULL, "Could not allocate pattern data (nrows=%i, nchannels=%i).\n", nrows, 357 JSSERROR(DMERR_MALLOC, NULL, "Could not allocate pattern data (nrows=%d, nchannels=%d).\n",
358 nchannels); 358 nrows, nchannels);
359 } 359 }
360 360
361 // Initialize structure 361 // Initialize structure
362 pattern->nrows = nrows; 362 pattern->nrows = nrows;
363 pattern->nchannels = nchannels; 363 pattern->nchannels = nchannels;
364 pattern->nmap = nchannels;
364 365
365 pnote = pattern->data; 366 pnote = pattern->data;
366 for (int row = 0; row < nrows; row++) 367 for (int row = 0; row < nrows; row++)
367 for (int chn = 0; chn < nchannels; chn++) 368 for (int chn = 0; chn < nchannels; chn++)
368 { 369 {
370 pnote->effect = pnote->param = jsetNotSet; 371 pnote->effect = pnote->param = jsetNotSet;
371 372
372 pnote++; 373 pnote++;
373 } 374 }
374 375
376 // Initialize pattern channel map
377 pattern->map = dmMalloc(nchannels * sizeof(pattern->map[0]));
378 pattern->used = dmMalloc(nchannels * sizeof(pattern->used[0]));
379 if (pattern->map == NULL || pattern->used == NULL)
380 {
381 jssFreePattern(pattern);
382 JSSERROR(DMERR_MALLOC, NULL, "Could not allocate pattern map (nchannels=%d).\n",
383 nchannels);
384 }
385
386 for (int chn = 0; chn < nchannels; chn++)
387 {
388 pattern->map[chn] = chn;
389 pattern->used[chn] = TRUE;
390 }
391
375 return pattern; 392 return pattern;
376 } 393 }
377 394
378 395
379 void jssFreePattern(JSSPattern *pattern) 396 void jssFreePattern(JSSPattern *pattern)
380 { 397 {
381 if (pattern != NULL) 398 if (pattern != NULL)
382 { 399 {
400 dmFree(pattern->used);
401 dmFree(pattern->map);
383 dmFree(pattern->data); 402 dmFree(pattern->data);
384 dmFree(pattern); 403 dmFree(pattern);
385 } 404 }
386 } 405 }
387 406