aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sfx/mt32_GM_mapping/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/sfx/mt32_GM_mapping/main.c')
-rw-r--r--engines/sci/sfx/mt32_GM_mapping/main.c157
1 files changed, 157 insertions, 0 deletions
diff --git a/engines/sci/sfx/mt32_GM_mapping/main.c b/engines/sci/sfx/mt32_GM_mapping/main.c
new file mode 100644
index 0000000000..1db2b584b4
--- /dev/null
+++ b/engines/sci/sfx/mt32_GM_mapping/main.c
@@ -0,0 +1,157 @@
+/***************************************************************************
+ main.c Copyright (C) 2000 Rickard Lind
+
+
+ This program may be modified and copied freely according to the terms of
+ the GNU general public license (GPL), as long as the above copyright
+ notice and the licensing information contained herein are preserved.
+
+ Please refer to www.gnu.org for licensing details.
+
+ This work is provided AS IS, without warranty of any kind, expressed or
+ implied, including but not limited to the warranties of merchantibility,
+ noninfringement, and fitness for a specific purpose. The author will not
+ be held liable for any damage caused by this work or derivatives of it.
+
+ By using this source code, you agree to the licensing terms as stated
+ above.
+
+***************************************************************************/
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "mt32_timbres.c"
+#include "gm_patches.c"
+
+void analyze(unsigned char *patch001, unsigned int length001,
+ unsigned char *patch004, unsigned int length004);
+
+int main(int argc, char **argv)
+{
+ int fd1, fd2;
+ unsigned char *patch001;
+ unsigned char *patch004;
+ unsigned int length001, length004;
+
+ if (argc < 2)
+ return -1;
+
+ if ((fd1 = open(argv[1], O_RDONLY)) < 0)
+ return -1;
+ if ((fd2 = open(argv[2], O_RDONLY)) < 0) {
+ close(fd1);
+ return -1;
+ }
+
+ patch001 = (unsigned char *)sci_malloc(65536);
+ length001 = read(fd1, patch001, 65536);
+ close(fd1);
+
+ patch004 = (unsigned char *)sci_malloc(65536);
+ length004 = read(fd2, patch004, 65536);
+ close(fd2);
+
+ if (patch001[0] == 0x89 && patch001[1] == 0x00)
+ if (patch004[0] == 0x89 && patch004[1] == 0x00)
+ analyze(patch001 + 2, length001 - 2, patch004 + 2, length004 - 2);
+ else
+ analyze(patch001 + 2, length001 - 2, patch004, length004);
+ else
+ if (patch004[0] == 0x89 && patch004[1] == 0x00)
+ analyze(patch001, length001, patch004 + 2, length004 - 2);
+ else
+ analyze(patch001, length001, patch004, length004);
+
+ free(patch001);
+ free(patch004);
+
+ return 0;
+}
+
+void analyze(unsigned char *patch001, unsigned int length001,
+ unsigned char *patch004, unsigned int length004)
+{
+ int i;
+ unsigned char *mt32patch;
+ unsigned char *mt32rhythm;
+
+ printf(" ----------------------------------------------------------------------\n");
+ printf(" | %.20s | %.20s | %.20s |\n", patch001, patch001 + 20, patch001 + 40);
+ printf("--------------------------------------------------------------------------\n");
+ printf("| ## | MT-32 Timbre | KSh FTn BR | General MIDI Patch | KSh VolA V |\n");
+ printf("--------------------------------------------------------------------------\n");
+ for (i = 0; i < 96; i++) {
+ if (i < 48)
+ mt32patch = patch001 + 107 + i * 8;
+ else
+ mt32patch = patch001 + 110 + i * 8 + patch001[491] * 246;
+
+ if (!((mt32patch[0] == 0) &&
+ (mt32patch[1] == 0) &&
+ (mt32patch[2] == 0) &&
+ (mt32patch[3] == 0) &&
+ (mt32patch[4] == 0) &&
+ (mt32patch[5] == 0) &&
+ (mt32patch[6] == 0) &&
+ (mt32patch[7] == 0))) {
+ printf("| %02i |", i);
+ if (mt32patch[0] < 2)
+ if (mt32patch[0] == 0)
+ printf(" %.10s", MT32_Timbre[mt32patch[1]]);
+ else
+ printf(" %.10s", MT32_Timbre[mt32patch[1] + 64]);
+ else if (mt32patch[0] == 2)
+ printf(" m %.10s", patch001 + 492 + mt32patch[1] * 246);
+ else if (mt32patch[0] == 3)
+ printf(" r %.10s", MT32_RhythmTimbre[mt32patch[1]]);
+ printf(" | % 03i % 03i %02i | ",
+ mt32patch[2] - 24,
+ mt32patch[3] - 50,
+ mt32patch[4]);
+ if (patch004[i] != 0xFF) {
+ printf("%-23s ", GM_Patch[patch004[i]]);
+ printf("| % 04i % 04i %i |",
+ *((signed char *)(patch004) + i + 128),
+ *((signed char *)(patch004) + i + 256),
+ patch004[i + 513]);
+ } else
+ printf(" | |");
+ printf("\n");
+ }
+ }
+ printf("--------------------------------------------------------------------------\n");
+ printf(" | ## | MT-32 Timbre | OL PP | General MIDI Rhythm Key |\n");
+ printf(" --------------------------------------------------------\n");
+ for (i = 0; i < 64; i++)
+ {
+ mt32rhythm = patch001 + 880 + i * 4 + patch001[491] * 246;
+ if ((mt32rhythm[0] < 94) &&
+ !((mt32rhythm[0] == 0) &&
+ (mt32rhythm[1] == 0) &&
+ (mt32rhythm[2] == 0) &&
+ (mt32rhythm[3] == 0)) &&
+ !((mt32rhythm[0] == 1) &&
+ (mt32rhythm[1] == 1) &&
+ (mt32rhythm[2] == 1) &&
+ (mt32rhythm[3] == 1))) {
+ printf(" | %02i |", i + 24);
+ if (mt32rhythm[0] < 64)
+ printf(" m %.10s", patch001 + 492 + mt32rhythm[0] * 246);
+ else
+ printf(" r %.10s", MT32_RhythmTimbre[mt32rhythm[0] - 64]);
+ printf(" | %03i %02i | ", mt32rhythm[1], mt32rhythm[2]);
+ if (patch004[384 + i + 24] != 0xFF)
+ printf("%-23s |", GM_RhythmKey[patch004[384 + i + 24] - 35]);
+ else
+ printf(" |");
+ printf("\n");
+ }
+ }
+ printf(" --------------------------------------------------------\n");
+ return;
+}