Mercurial > hg > dmlib
changeset 1333:17c23f0494f5
Possibly make dupe pattern elimination work. Still needs some testing.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 22 Aug 2017 14:04:32 +0300 |
parents | f70d89721e19 |
children | ea9ab5b84985 |
files | tools/xm2jss.c |
diffstat | 1 files changed, 24 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/tools/xm2jss.c Tue Aug 22 13:53:29 2017 +0300 +++ b/tools/xm2jss.c Tue Aug 22 14:04:32 2017 +0300 @@ -1,7 +1,7 @@ /* * xm2jss - Convert XM module to JSSMOD * Programmed and designed by Matti 'ccr' Hamalainen - * (C) Copyright 2006-2009 Tecnic Software productions (TNSP) + * (C) Copyright 2006-2017 Tecnic Software productions (TNSP) * * Please read file 'COPYING' for information on license and distribution. */ @@ -786,7 +786,9 @@ usedChannels[jsetMaxChannels]; int mapExtInstruments[jsetMaxInstruments + 1], mapInstruments[jsetMaxInstruments + 1], - mapPatterns[jsetMaxPatterns + 1]; + mapPatterns[jsetMaxPatterns + 1], + dupPatterns[jsetMaxPatterns + 1]; + JSSModule *r = NULL; int n8, n16, nunused, ndupes; @@ -825,6 +827,7 @@ { usedPatterns[i] = FALSE; mapPatterns[i] = jsetNotSet; + dupPatterns[i] = jsetNotSet; } // @@ -909,6 +912,7 @@ for (int pat1 = 0; pat1 <= jsetMaxPatterns; pat1++) if (usedPatterns[pat1]) { + // Sanity check patterns if (pat1 >= m->npatterns) { dmErrorMsg("Pattern 0x%x >= 0x%x, but used!\n", pat1, m->npatterns); @@ -921,6 +925,24 @@ continue; } + // Check for previously marked dupes + if (dupPatterns[pat1] != jsetNotSet) + { + mapPatterns[pat1] = dupPatterns[pat1]; + continue; + } + + // Check for duplicate patterns of "pat1" and mark them as such + for (int pat2 = 0; pat2 < m->npatterns; pat2++) + if (pat1 != pat2 && m->patterns[pat2] != NULL && + dupPatterns[pat2] != jsetNotSet && + comparePattern(m->patterns[pat1], m->patterns[pat2])) + { + dmPrint(1, " * %d and %d are dupes.\n", pat1, pat2); + dupPatterns[pat2] = pat1; + ndupes++; + } + mapPatterns[pat1] = r->npatterns; r->patterns[r->npatterns] = m->patterns[pat1]; (r->npatterns)++; @@ -1086,17 +1108,6 @@ } // - // Check for duplicate patterns .. - // - dmMsg(1, "Checking for duplicate patterns ...\n"); - for (int pat1 = 0; pat1 < r->npatterns; pat1++) - for (int pat2 = 0; pat2 < r->npatterns; pat2++) - if (pat1 != pat2 && comparePattern(r->patterns[pat1], r->patterns[pat2])) - { - dmPrint(1, " * %d and %d are dupes.\n"); - } - - // // Remap orders list // dmMsg(1, "Remapping orders list.\n");