aboutsummaryrefslogtreecommitdiff
path: root/lib/timidity/interface/wrdt_dumb.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/timidity/interface/wrdt_dumb.c')
-rw-r--r--lib/timidity/interface/wrdt_dumb.c336
1 files changed, 336 insertions, 0 deletions
diff --git a/lib/timidity/interface/wrdt_dumb.c b/lib/timidity/interface/wrdt_dumb.c
new file mode 100644
index 0000000000..af53bafa6a
--- /dev/null
+++ b/lib/timidity/interface/wrdt_dumb.c
@@ -0,0 +1,336 @@
+/*
+ TiMidity++ -- MIDI to WAVE converter and player
+ Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>
+ Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+#include <stdio.h>
+#ifndef NO_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#include "timidity.h"
+#include "common.h"
+#include "instrum.h"
+#include "playmidi.h"
+#include "readmidi.h"
+#include "controls.h"
+#include "wrd.h"
+
+static int wrdt_open(char *wrdt_opts);
+static void wrdt_apply(int cmd, int wrd_argc, int wrd_args[]);
+static void wrdt_update_events(void);
+static void wrdt_end(void);
+static void wrdt_close(void);
+
+#define wrdt dumb_wrdt_mode
+
+WRDTracer wrdt =
+{
+ "dumb WRD tracer", 'd',
+ 0,
+ wrdt_open,
+ wrdt_apply,
+ NULL,
+ wrdt_update_events,
+ NULL,
+ wrdt_end,
+ wrdt_close
+};
+
+static int inkey_flag;
+
+/*ARGSUSED*/
+static int wrdt_open(char *wrdt_opts)
+{
+ wrdt.opened = 1;
+ inkey_flag = 0;
+ return 0;
+}
+
+static void wrdt_update_events(void)
+{
+}
+
+static void wrdt_end(void)
+{
+ inkey_flag = 0;
+}
+
+static void wrdt_close(void)
+{
+ wrdt.opened = 0;
+ inkey_flag = 0;
+}
+
+static char *wrd_event2string(int id)
+{
+ char *name;
+
+ name = event2string(id);
+ if(name != NULL)
+ return name + 1;
+ return "";
+}
+
+static void wrdt_apply(int cmd, int wrd_argc, int wrd_args[])
+{
+ char *p;
+ char *text;
+ int i, len;
+
+ if(cmd == WRD_MAGPRELOAD)
+ return; /* Load MAG file */
+ if(cmd == WRD_PHOPRELOAD)
+ return; /* Load PHO file - Not implemented */
+
+ if(inkey_flag)
+ printf("* ");
+ switch(cmd)
+ {
+ case WRD_LYRIC:
+ p = wrd_event2string(wrd_args[0]);
+ len = strlen(p);
+ text = (char *)new_segment(&tmpbuffer, SAFE_CONVERT_LENGTH(len));
+ code_convert(p, text, SAFE_CONVERT_LENGTH(len), NULL, NULL);
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "%s", text);
+ reuse_mblock(&tmpbuffer);
+ break;
+ case WRD_NL: /* Newline (Ignored) */
+ break;
+ case WRD_COLOR:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@COLOR(%d)", wrd_args[0]);
+ break;
+ case WRD_END: /* Never call */
+ break;
+ case WRD_ESC:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@ESC(%s)", wrd_event2string(wrd_args[0]));
+ break;
+ case WRD_EXEC:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@EXEC(%s)", wrd_event2string(wrd_args[0]));
+ break;
+ case WRD_FADE:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@FADE(%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2]);
+ break;
+ case WRD_FADESTEP:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@FADESTEP(%d/%d)", wrd_args[0], WRD_MAXFADESTEP);
+ break;
+ case WRD_GCIRCLE:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@GCIRCLE(%d,%d,%d,%d,%d,%d)",
+ wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3],
+ wrd_args[4], wrd_args[5]);
+ break;
+ case WRD_GCLS:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@GCLS(%d)", wrd_args[0]);
+ break;
+ case WRD_GINIT:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@GINIT()");
+ break;
+ case WRD_GLINE:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@GLINE(%d,%d,%d,%d,%d,%d,%d)",
+ wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4],
+ wrd_args[5], wrd_args[6]);
+ break;
+ case WRD_GMODE:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@GMODE(%d)", wrd_args[0]);
+ break;
+ case WRD_GMOVE:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@GMOVE(%d,%d,%d,%d,%d,%d,%d)",
+ wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4],
+ wrd_args[5], wrd_args[6], wrd_args[7], wrd_args[8]);
+ break;
+ case WRD_GON:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@GON(%d)", wrd_args[0]);
+ break;
+ case WRD_GSCREEN:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@GSCREEN(%d,%d)", wrd_args[0], wrd_args[1]);
+ break;
+ case WRD_INKEY:
+ inkey_flag = 1;
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@INKEY - begin");
+ break;
+ case WRD_OUTKEY:
+ inkey_flag = 0;
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@INKEY - end");
+ break;
+ case WRD_LOCATE:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@LOCATE(%d,%d)", wrd_args[0], wrd_args[1]);
+ break;
+ case WRD_LOOP: /* Never call */
+ break;
+ case WRD_MAG:
+ p = (char *)new_segment(&tmpbuffer, MIN_MBLOCK_SIZE);
+ snprintf(p, MIN_MBLOCK_SIZE-1, "@MAG(%s", wrd_event2string(wrd_args[0]));
+ p[MIN_MBLOCK_SIZE-1] = '\0'; /* fail safe */
+ for(i = 1; i < 5; i++)
+ {
+ if(wrd_args[i] == WRD_NOARG)
+ strncat(p, ",*", MIN_MBLOCK_SIZE - strlen(p) - 1);
+ else {
+ char q[CHAR_BIT*sizeof(int)];
+ snprintf(q, sizeof(q)-1, ",%d", wrd_args[i]);
+ strncat(p, q, MIN_MBLOCK_SIZE - strlen(p) - 1);
+ }
+ }
+ strncat(p, ")", MIN_MBLOCK_SIZE - strlen(p) - 1);
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "%s", p);
+ reuse_mblock(&tmpbuffer);
+ break;
+ case WRD_MIDI: /* Never call */
+ break;
+ case WRD_OFFSET: /* Never call */
+ break;
+ case WRD_PAL:
+ p = (char *)new_segment(&tmpbuffer, MIN_MBLOCK_SIZE);
+ snprintf(p, MIN_MBLOCK_SIZE, "@PAL(%03x", wrd_args[0]);
+ for(i = 1; i < 17; i++) {
+ char q[5];
+ snprintf(q, sizeof(q)-1, ",%03x", wrd_args[i]);
+ strncat(p, q, MIN_MBLOCK_SIZE - strlen(p) - 1);
+ }
+ strncat(p, ")", MIN_MBLOCK_SIZE - strlen(p) - 1);
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "%s", p);
+ reuse_mblock(&tmpbuffer);
+ break;
+ case WRD_PALCHG:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@PALCHG(%s)", wrd_event2string(wrd_args[0]));
+ break;
+ case WRD_PALREV:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@PALREV(%d)", wrd_args[0]);
+ break;
+ case WRD_PATH:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@PATH(%s)", wrd_event2string(wrd_args[0]));
+ break;
+ case WRD_PLOAD:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@PLOAD(%s)", wrd_event2string(wrd_args[0]));
+ break;
+ case WRD_REM:
+ p = wrd_event2string(wrd_args[0]);
+ len = strlen(p);
+ text = (char *)new_segment(&tmpbuffer, SAFE_CONVERT_LENGTH(len));
+ code_convert(p, text, SAFE_CONVERT_LENGTH(len), NULL, NULL);
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@REM %s", text);
+ reuse_mblock(&tmpbuffer);
+ break;
+ case WRD_REMARK:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@REMARK(%s)", wrd_event2string(wrd_args[0]));
+ break;
+ case WRD_REST: /* Never call */
+ break;
+ case WRD_SCREEN: /* Not supported */
+ break;
+ case WRD_SCROLL:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@SCROLL(%d,%d,%d,%d,%d,%d,%d)",
+ wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3],
+ wrd_args[4], wrd_args[5], wrd_args[6]);
+ break;
+ case WRD_STARTUP:
+ inkey_flag = 0;
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@STARTUP(%d)", wrd_args[0]);
+ break;
+ case WRD_STOP: /* Never call */
+ break;
+ case WRD_TCLS:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@TCLS(%d,%d,%d,%d,%d,%d,%d)",
+ wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3],
+ wrd_args[4], wrd_args[5]);
+ break;
+ case WRD_TON:
+ ctl->cmsg(CMSG_INFO, VERB_VERBOSE,
+ "@TON(%d)", wrd_args[0]);
+ break;
+ case WRD_WAIT: /* Never call */
+ break;
+ case WRD_WMODE: /* Never call */
+ break;
+
+ /* Ensyutsukun */
+ case WRD_eFONTM:
+ print_ecmd("FONTM", wrd_args, 1);
+ break;
+ case WRD_eFONTP:
+ print_ecmd("FONTP", wrd_args, 4);
+ break;
+ case WRD_eFONTR:
+ print_ecmd("FONTR", wrd_args, 17);
+ break;
+ case WRD_eGSC:
+ print_ecmd("GSC", wrd_args, 1);
+ break;
+ case WRD_eLINE:
+ print_ecmd("LINE", wrd_args, 1);
+ break;
+ case WRD_ePAL:
+ print_ecmd("PAL", wrd_args, 2);
+ break;
+ case WRD_eREGSAVE:
+ print_ecmd("REGSAVE", wrd_args, 17);
+ break;
+ case WRD_eSCROLL:
+ print_ecmd("SCROLL",wrd_args, 2);
+ break;
+ case WRD_eTEXTDOT:
+ print_ecmd("TEXTDOT", wrd_args, 1);
+ break;
+ case WRD_eTMODE:
+ print_ecmd("TMODE", wrd_args, 1);
+ break;
+ case WRD_eTSCRL:
+ print_ecmd("TSCRL", wrd_args, 0);
+ break;
+ case WRD_eVCOPY:
+ print_ecmd("VCOPY", wrd_args, 9);
+ break;
+ case WRD_eVSGET:
+ print_ecmd("VSGE", wrd_args, 4);
+ break;
+ case WRD_eVSRES:
+ print_ecmd("VSRES", wrd_args, 0);
+ break;
+ case WRD_eXCOPY:
+ print_ecmd("XCOPY", wrd_args, 14);
+ break;
+ default:
+ break;
+ }
+ wrd_argc = 0;
+}