64 lines
2.2 KiB
C
64 lines
2.2 KiB
C
/* _______ ____ __ ___ ___
|
|
* \ _ \ \ / \ / \ \ / / ' ' '
|
|
* | | \ \ | | || | \/ | . .
|
|
* | | | | | | || ||\ /| |
|
|
* | | | | | | || || \/ | | ' ' '
|
|
* | | | | | | || || | | . .
|
|
* | |_/ / \ \__// || | |
|
|
* /_______/ynamic \____/niversal /__\ /____\usic /| . . ibliotheque
|
|
* / \
|
|
* / . \
|
|
* itorder.c - Code to fix invalid patterns in / / \ \
|
|
* the pattern table. | < / \_
|
|
* | \/ /\ /
|
|
* By Julien Cugniere. \_ / > /
|
|
* | \ / /
|
|
* | ' /
|
|
* \__/
|
|
*/
|
|
|
|
#ifdef DUMB
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "dumb.h"
|
|
#include "internal/it.h"
|
|
|
|
|
|
|
|
/* This function ensures that any pattern mentioned in the order table but
|
|
* not present in the pattern table is treated as an empty 64 rows pattern.
|
|
* This is done by adding such a dummy pattern at the end of the pattern
|
|
* table, and redirect invalid orders to it.
|
|
* Patterns 254 and 255 are left untouched, unless the signal is an XM.
|
|
*/
|
|
int _dumb_it_fix_invalid_orders(DUMB_IT_SIGDATA *sigdata)
|
|
{
|
|
int i;
|
|
int found_some = 0;
|
|
|
|
int first_invalid = sigdata->n_patterns;
|
|
int last_invalid = (sigdata->flags & IT_WAS_AN_XM) ? 255 : 253;
|
|
|
|
for (i = 0; i < sigdata->n_orders; i++) {
|
|
if (sigdata->order[i] >= first_invalid && sigdata->order[i] <= last_invalid) {
|
|
sigdata->order[i] = sigdata->n_patterns;
|
|
found_some = 1;
|
|
}
|
|
}
|
|
|
|
if (found_some) {
|
|
IT_PATTERN *new_pattern = realloc(sigdata->pattern, sizeof(*sigdata->pattern) * (sigdata->n_patterns + 1));
|
|
if (!new_pattern)
|
|
return -1;
|
|
|
|
new_pattern[sigdata->n_patterns].n_rows = 64;
|
|
new_pattern[sigdata->n_patterns].n_entries = 0;
|
|
new_pattern[sigdata->n_patterns].entry = NULL;
|
|
sigdata->pattern = new_pattern;
|
|
sigdata->n_patterns++;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
#endif
|