diff -ruN TiMidity++-2.9.4/ChangeLog TiMidity++-2.9.5/ChangeLog --- TiMidity++-2.9.4/ChangeLog Wed May 24 14:23:26 2000 +++ TiMidity++-2.9.5/ChangeLog Wed Jul 5 23:04:16 2000 @@ -1,3 +1,27 @@ +2000-07-05 Masanao Izumo + + * Version 2.9.5 released. + +2000-07-04 Daisuke Aoki + + * interface/{w32g.h,w32g_c.c,w32g_i.c,w32g_ini.c,w32g_playlist.c, + w32g_res.h,w32g_res.rc,w32g_subwin.c,w32g_ut2.c,w32g_utl.c,w32g_utl.h, + timidity.c}: Upgrade Windows version. + +2000-06-29 Randolph Bentson + + * doc/C/timidity.cfg.5: Fixed error in the documentation. + +2000-06-24 Yoichi Imai + + * interface/gtk_i.c: Support for 5 button mouse to scroll window. + + * doc/C/timidity.cfg.5: Fixed error in the documentation. + +2000-05-29 Masanao Izumo + + * timidity/readmidi.c (readmidi_add_event): Avoid negative timestamp. + 2000-05-24 Masanao Izumo * Version 2.9.4 released. diff -ruN TiMidity++-2.9.4/Makefile.am TiMidity++-2.9.5/Makefile.am --- TiMidity++-2.9.4/Makefile.am Wed May 17 01:46:50 2000 +++ TiMidity++-2.9.5/Makefile.am Wed Jul 5 22:54:37 2000 @@ -63,7 +63,7 @@ CONFIG_HEADERS='' CONFIG_FILES=configs/msc-config.h $(SHELL) ./config.status cp -r configs $(distdir) chmod -R a+r $(distdir) - $(TAR) chof - $(distdir) | bzip2 -9 --repetitive-best - > $(distdir).tar.bz2 + $(TAR) chof - $(distdir) | bzip2 -9 - > $(distdir).tar.bz2 ## ## Targets for timidity-tools diff -ruN TiMidity++-2.9.4/Makefile.in TiMidity++-2.9.5/Makefile.in --- TiMidity++-2.9.4/Makefile.in Wed May 24 23:30:31 2000 +++ TiMidity++-2.9.5/Makefile.in Wed Jul 5 23:04:50 2000 @@ -443,7 +443,7 @@ CONFIG_HEADERS='' CONFIG_FILES=configs/msc-config.h $(SHELL) ./config.status cp -r configs $(distdir) chmod -R a+r $(distdir) - $(TAR) chof - $(distdir) | bzip2 -9 --repetitive-best - > $(distdir).tar.bz2 + $(TAR) chof - $(distdir) | bzip2 -9 - > $(distdir).tar.bz2 tools:: tools-targets cd $(TOOLSDIR); $(MAKE) diff -ruN TiMidity++-2.9.4/NEWS TiMidity++-2.9.5/NEWS --- TiMidity++-2.9.4/NEWS Wed May 24 14:25:31 2000 +++ TiMidity++-2.9.5/NEWS Wed Jul 5 23:04:13 2000 @@ -1,3 +1,7 @@ +07/05, 2000 + * Version 2.9.5 released. + * Upgrade Windows version. + 05/24, 2000 * Version 2.9.4 released. * Support ALSA 0.6 diff -ruN TiMidity++-2.9.4/common.makefile.in TiMidity++-2.9.5/common.makefile.in --- TiMidity++-2.9.4/common.makefile.in Mon Feb 7 07:28:48 2000 +++ TiMidity++-2.9.5/common.makefile.in Wed Jul 5 22:52:34 2000 @@ -68,16 +68,13 @@ # Where to install timidity.el ELISP_DIR = $(pkgdatadir) -# Define the timidity default file search path. (optional) -DEF_DEFAULT_PATH = -DDEFAULT_PATH=\"$(PKGDATADIR)\" - # If you want to change TCL_DIR, please do follows. # * Add -DTKPROGPATH=\"$(TCL_DIR)/tkmidity.tcl\" to CPPFLAGS. # * Make a symbolic link $(PKGLIBDIR)/bitmaps to $(TCL_DIR)/bitmaps TCL_DIR = $(PKGLIBDIR) ##CPPFLAGS += -DTKPROGPATH=\"$(TCL_DIR)/tkmidity.tcl\" -# Comment out if you don't want default path. +# Define the timidity default file search path. DEF_DEFAULT_PATH = -DDEFAULT_PATH=\"$(PKGDATADIR)\" # You sould not change follows definitions. diff -ruN TiMidity++-2.9.4/configs/msc-config.h TiMidity++-2.9.5/configs/msc-config.h --- TiMidity++-2.9.4/configs/msc-config.h Wed May 24 23:31:05 2000 +++ TiMidity++-2.9.5/configs/msc-config.h Wed Jul 5 23:04:59 2000 @@ -261,7 +261,7 @@ /* In VDS Macro AAA=BBB is not available. */ #define __W32__ -#define TIMID_VERSION "2.9.4" +#define TIMID_VERSION "2.9.5" #define DEFAULT_PATH ".\\" #define AU_W32 #define WINSOCK diff -ruN TiMidity++-2.9.4/configure TiMidity++-2.9.5/configure --- TiMidity++-2.9.4/configure Tue May 9 11:11:15 2000 +++ TiMidity++-2.9.5/configure Tue Jul 4 17:32:26 2000 @@ -884,7 +884,7 @@ PACKAGE=TiMidity++ -VERSION=2.9.4 +VERSION=2.9.5 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } diff -ruN TiMidity++-2.9.4/configure.in TiMidity++-2.9.5/configure.in --- TiMidity++-2.9.4/configure.in Tue May 9 11:11:06 2000 +++ TiMidity++-2.9.5/configure.in Tue Jul 4 17:10:19 2000 @@ -55,7 +55,7 @@ AC_INIT(timidity/timidity.c) SHELL=${CONFIG_SHELL-/bin/sh} AC_CANONICAL_SYSTEM -AM_INIT_AUTOMAKE(TiMidity++, 2.9.4, no-define) +AM_INIT_AUTOMAKE(TiMidity++, 2.9.5, no-define) dnl To use CONTAINS() macro (See acinclude.m4) CONTAINS_INIT diff -ruN TiMidity++-2.9.4/doc/C/timidity.cfg.5 TiMidity++-2.9.5/doc/C/timidity.cfg.5 --- TiMidity++-2.9.4/doc/C/timidity.cfg.5 Fri Mar 3 13:22:07 2000 +++ TiMidity++-2.9.5/doc/C/timidity.cfg.5 Tue Jul 4 16:58:58 2000 @@ -35,9 +35,9 @@ .BI dir " directory" Adds \fIdirectory\fP to the search path in the same manner as the \fB\-L\fP command line option. -.sh +.SH EXAMPLES Archive file are also allowed. For example: -.bp +.br dir /usr/local/share/timidity/inst/foo.zip# .br .bank 0 diff -ruN TiMidity++-2.9.4/interface/Makefile.in TiMidity++-2.9.5/interface/Makefile.in --- TiMidity++-2.9.4/interface/Makefile.in Wed May 24 23:30:40 2000 +++ TiMidity++-2.9.5/interface/Makefile.in Wed Jul 5 23:04:52 2000 @@ -366,6 +366,10 @@ ../timidity/output.h ../timidity/controls.h \ ../timidity/instrum.h ../timidity/playmidi.h \ ../timidity/readmidi.h +dynamic_c.o: dynamic_c.c ../config.h ../timidity/timidity.h \ + ../utils/support.h ../timidity/common.h ../libarc/url.h \ + ../utils/mblock.h ../timidity/output.h ../timidity/controls.h \ + ../timidity/dlutils.h emacs_c.o: emacs_c.c ../config.h ../timidity/timidity.h \ ../utils/support.h ../timidity/common.h ../libarc/url.h \ ../utils/mblock.h ../timidity/output.h ../timidity/controls.h \ diff -ruN TiMidity++-2.9.4/interface/gtk_i.c TiMidity++-2.9.5/interface/gtk_i.c --- TiMidity++-2.9.4/interface/gtk_i.c Mon Feb 7 07:50:09 2000 +++ TiMidity++-2.9.5/interface/gtk_i.c Tue Jul 4 17:08:11 2000 @@ -339,7 +339,7 @@ int argc = 0; GtkWidget *button, *mbar, *swin; GtkWidget *table, *align, *handlebox; - GtkWidget *vbox, *hbox, *vscrollbar, *vbox2; + GtkWidget *vbox, *hbox, *vbox2, *scrolled_win; GtkObject *adj; /* enable locale */ @@ -365,16 +365,14 @@ mbar = create_menubar(); gtk_box_pack_start(GTK_BOX(vbox), mbar, FALSE, FALSE, 0); - hbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 4); - gtk_widget_show(hbox); + scrolled_win = gtk_scrolled_window_new(NULL, NULL); + gtk_box_pack_start(GTK_BOX(vbox), scrolled_win, TRUE, TRUE ,0); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_win),GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + gtk_widget_show(scrolled_win); text = gtk_text_new(NULL, NULL); gtk_widget_show(text); - gtk_box_pack_start(GTK_BOX(hbox), text, TRUE, TRUE, 4); - vscrollbar = gtk_vscrollbar_new(GTK_TEXT(text)->vadj); - gtk_box_pack_start(GTK_BOX(hbox), vscrollbar, FALSE, FALSE, 4); - gtk_widget_show (vscrollbar); + gtk_container_add(GTK_CONTAINER(scrolled_win), text); hbox = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 4); @@ -435,7 +433,7 @@ gtk_box_pack_start(GTK_BOX(hbox), swin, TRUE, TRUE, 0); vbox2 = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0); gtk_widget_show(vbox2); /* This is so the pixmap creation works properly. */ diff -ruN TiMidity++-2.9.4/interface/w32g.h TiMidity++-2.9.5/interface/w32g.h --- TiMidity++-2.9.4/interface/w32g.h Mon Mar 20 15:09:39 2000 +++ TiMidity++-2.9.5/interface/w32g.h Tue Jul 4 16:51:43 2000 @@ -36,6 +36,11 @@ #endif /* MAXPATH */ +typedef struct argc_argv_t_ { + int argc; + char **argv; +} argc_argv_t; + #if defined(_MSC_VER) //typedef void (__cdecl *MSVC_BEGINTHREAD_START_ADDRESS)(void *); typedef LPTHREAD_START_ROUTINE MSVC_BEGINTHREAD_START_ADDRESS; @@ -96,7 +101,8 @@ RC_EXT_ROTATE_PLAYLIST, RC_EXT_CLEAR_PLAYLIST, RC_EXT_OPEN_DOC, - RC_EXT_RESTART_GUI + RC_EXT_RESTART_GUI, + RC_EXT_LOAD_FILES_AND_PLAY }; #define W32G_TIMIDITY_CFG "C:\\WINDOWS\\TIMIDITY.CFG" diff -ruN TiMidity++-2.9.4/interface/w32g_c.c TiMidity++-2.9.5/interface/w32g_c.c --- TiMidity++-2.9.4/interface/w32g_c.c Mon Mar 20 15:09:39 2000 +++ TiMidity++-2.9.5/interface/w32g_c.c Tue Jul 4 16:51:43 2000 @@ -255,6 +255,59 @@ return RC_NONE; } +static int ctl_load_files_and_play(argc_argv_t *argc_argv, int playflag) +{ + StringTable st; + int i, n, len; + char buffer[BUFSIZ]; + char **files; + int prevnfiles; + + if(argc_argv==NULL) + return RC_NONE; + + w32g_get_playlist_index(NULL, &prevnfiles, NULL); + + init_string_table(&st); + n = argc_argv->argc; + for(i = 0; i < n; i++) + { + strcpy(buffer,(argc_argv->argv)[i]); + if(is_directory(buffer)) + directory_form(buffer); + len = strlen(buffer); + put_string_table(&st, buffer, strlen(buffer)); + } +#if 1 + for(i=0;iargc;i++){ + free(argc_argv->argv[i]); + } + free(argc_argv->argv); + argc_argv->argv = NULL; + argc_argv->argc = 0; +#endif + if((files = make_string_array(&st)) == NULL) + n = 0; + else + { + n = w32g_add_playlist(n, files, 1, + ctl.flags & CTLF_AUTOUNIQ, + ctl.flags & CTLF_AUTOREFINE); + free(files[0]); + free(files); + } + if(n > 0) + { + ctl_panel_refresh(); + if(playflag) + { + w32g_goto_playlist(prevnfiles, !(ctl.flags & CTLF_NOT_CONTINUE)); + return RC_LOAD_FILE; + } + } + return RC_NONE; +} + static int ctl_load_playlist(char *fileptr) { StringTable st; @@ -375,6 +428,8 @@ return ctl_drop_file((HDROP)value); case RC_EXT_LOAD_FILE: return ctl_load_file((char *)value); + case RC_EXT_LOAD_FILES_AND_PLAY: + return ctl_load_files_and_play((argc_argv_t *)value, 1); case RC_EXT_LOAD_PLAYLIST: return ctl_load_playlist((char *)value); case RC_EXT_SAVE_PLAYLIST: diff -ruN TiMidity++-2.9.4/interface/w32g_i.c TiMidity++-2.9.5/interface/w32g_i.c --- TiMidity++-2.9.4/interface/w32g_i.c Mon Mar 20 15:09:39 2000 +++ TiMidity++-2.9.5/interface/w32g_i.c Wed Jul 5 20:53:18 2000 @@ -34,7 +34,9 @@ // #include #if defined(__CYGWIN32__) || defined(__MINGW32__) #include -#define TPM_TOPALIGN 0x0000L +#ifndef TPM_TOPALIGN +#define TPM_TOPALIGN 0x0000L /* for old version of cygwin */ +#endif #define TIME_ONESHOT 0 #define TIME_PERIODIC 1 WINAPI int timeSetEvent(UINT uDelay, UINT uResolution, @@ -212,11 +214,13 @@ void TiMidityHeapCheck(void); +volatile DWORD dwWindowThreadID = -1; void w32g_i_init(void) { ThreadNumMax++; hProcess = GetCurrentProcess(); hWindowThread = GetCurrentThread(); + dwWindowThreadID = GetCurrentThreadId(); InitCommonControls(); @@ -236,6 +240,11 @@ return v; } +int w32gSecondTiMidity(int opt, int argc, char **argv); +int w32gSecondTiMidityExit(void); +int SecondMode = 0; +void FirstLoadIniFile(void); + #ifndef WIN32GCC static void CmdLineToArgv(LPSTR lpCmdLine, int *argc, CHAR ***argv); extern int win_main(int argc, char **argv); /* timidity.c */ @@ -246,7 +255,17 @@ int argc; CHAR **argv = NULL; CmdLineToArgv(lpCmdLine,&argc,&argv); +#if 0 + FirstLoadIniFile(); + if(w32gSecondTiMidity(SecondMode,argc,argv)==TRUE){ + int res = win_main(argc, argv); + w32gSecondTiMidityExit(); + return res; + } else + return -1; +#else return win_main(argc, argv); +#endif } #endif /* WIN32GCC */ @@ -1098,6 +1117,7 @@ //----------------------------------------------------------------------------- // Canvas Window +#define MAPBAR_LIKE_TIMIDI // note bar view like timidi #define TM_CANVAS_XMAX 160 #define TM_CANVAS_YMAX 160 #define TM_CANVASMAP_XMAX 16 @@ -1138,6 +1158,7 @@ int MapUpdateFlag; int MapMode; int MapBarWidth; + int MapBarMax; int MapCh; int MapPan[CMAP_MAX_CHANNELS]; int MapPanOld[CMAP_MAX_CHANNELS]; @@ -1385,6 +1406,7 @@ Canvas.MapResidual = 0; Canvas.MapMode = CMAP_MODE_16; // Canvas.MapMode = CMAP_MODE_32; + Canvas.MapBarMax = 16; // Canvas.CKNoteFrom = 24; // Canvas.CKNoteTo = 24 + 96; Canvas.CKNoteFrom = 12; @@ -1428,16 +1450,26 @@ switch(Canvas.MapMode){ case CMAP_MODE_32: Canvas.MapCh = 32; - Canvas.MapBarWidth = 2; +#ifdef MAPBAR_LIKE_TIMIDI + Canvas.MapBarWidth = 5; + Canvas.MapBarMax = 10; + Canvas.rcMapMap.bottom = Canvas.rcMapMap.top + 3*Canvas.MapBarMax*2 + 6 - 1; +#else + Canvas.MapBarWidth = 2; + Canvas.MapBarMax = 16; + Canvas.rcMapMap.bottom = Canvas.rcMapMap.top + 3*Canvas.MapBarMax - 1; +#endif break; default: case CMAP_MODE_16: Canvas.MapCh = 16; Canvas.MapBarWidth = 5; + Canvas.MapBarMax = 16; + Canvas.rcMapMap.bottom = Canvas.rcMapMap.top + 3*Canvas.MapBarMax - 1; break; } for(i=0;iv_flags[ch] == FLAG_NOTE_ON) - v = Panel->ctotal[ch]/8; +#if 0 + v = Panel->ctotal[ch]/8; +#else + v = (int) Panel->ctotal[ch] * Canvas.MapBarMax / 128; +#endif else v = 0; - if(v<0) v = 0; else if(v>CMAP_YMAX-1) v = CMAP_YMAX-1; + if(v<0) v = 0; else if(v>Canvas.MapBarMax-1) v = Canvas.MapBarMax-1; #if 0 // 振動 if(v == Canvas.MapBar[ch]){ v = v * (rand()%7 + 7) / 10; @@ -1527,9 +1563,17 @@ else Canvas.MapSustain[ch] = 0; //Canvas.MapSustain[ch] = SetValue(Canvas.MapSustain[ch],0,10); +#if 0 Canvas.MapExpression[ch] = (Panel->channel[ch].expression * 11) >>8; +#else + Canvas.MapExpression[ch] = (Panel->channel[ch].expression * 11) >>7; +#endif Canvas.MapExpression[ch] = SetValue(Canvas.MapExpression[ch],0,10); +#if 0 Canvas.MapVolume[ch] = (Panel->channel[ch].volume * 11) >>8; +#else + Canvas.MapVolume[ch] = (Panel->channel[ch].volume * 11) >>7; +#endif Canvas.MapVolume[ch] = SetValue(Canvas.MapVolume[ch],0,10); Canvas.MapPitchbend[ch] = Panel->channel[ch].pitchbend; if(Canvas.MapPanOld[ch]!=Canvas.MapPan[ch]) changed = 1; @@ -1556,7 +1600,7 @@ Canvas.MapResidual = 0; for(ch=0;chDocWndIndependent)); IniGetKeyInt(INI_SEC_PLAYER,"SeachDirRecursive",&(sp->SeachDirRecursive)); IniGetKeyInt(INI_SEC_PLAYER,"IniFileAutoSave",&(sp->IniFileAutoSave)); + IniGetKeyInt(INI_SEC_PLAYER,"SecondMode",&(sp->SecondMode)); /* [TIMIDITY] */ IniGetKeyInt32(INI_SEC_TIMIDITY,"amplification",&(st->amplification)); @@ -204,6 +205,7 @@ IniPutKeyInt(INI_SEC_PLAYER,"DocWndIndependent",&(sp->DocWndIndependent)); IniPutKeyInt(INI_SEC_PLAYER,"SeachDirRecursive",&(sp->SeachDirRecursive)); IniPutKeyInt(INI_SEC_PLAYER,"IniFileAutoSave",&(sp->IniFileAutoSave)); + IniPutKeyInt(INI_SEC_PLAYER,"SecondMode",&(sp->SecondMode)); /* [TIMIDITY] */ @@ -259,4 +261,40 @@ IniPutKeyInt(INI_SEC_TIMIDITY,"data_block_time",&(st->data_block_time)); IniPutKeyInt(INI_SEC_TIMIDITY,"data_block_num",&(st->data_block_num)); w32g_has_ini_file = 1; +} + +// When Start TiMidity in WinMain() +extern int SecondMode; +static char S_IniFile[MAXPATH + 32]; +void FirstLoadIniFile(void) +{ + char buffer[1024]; + char *prevIniFile = IniFile; + char *p; + IniFile = S_IniFile; + if(GetModuleFileName(GetModuleHandle(0), buffer, MAXPATH)) + { + if((p = pathsep_strrchr(buffer)) != NULL) + { + p++; + *p = '\0'; + } + else + { + buffer[0] = '.'; + buffer[1] = PATH_SEP; + buffer[2] = '\0'; + } + } + else + { + buffer[0] = '.'; + buffer[1] = PATH_SEP; + buffer[2] = '\0'; + } + strncpy(IniFile, buffer, MAXPATH); + IniFile[MAXPATH] = '\0'; + strcat(IniFile,"timpp32g.ini"); + IniGetKeyInt(INI_SEC_PLAYER,"SecondMode",&(SecondMode)); + IniFile = prevIniFile; } diff -ruN TiMidity++-2.9.4/interface/w32g_playlist.c TiMidity++-2.9.5/interface/w32g_playlist.c --- TiMidity++-2.9.4/interface/w32g_playlist.c Mon Mar 20 15:09:39 2000 +++ TiMidity++-2.9.5/interface/w32g_playlist.c Tue Jul 4 16:51:43 2000 @@ -36,6 +36,8 @@ #include "w32g.h" #include "w32g_res.h" +void SetNumListWnd(int cursel, int nfiles); + // playlist typedef struct _PlayListEntry { char *filename; // malloc @@ -232,8 +234,77 @@ } #endif +// Update an only list at the position. +void w32g_update_playlist_pos(int pos) +{ + int i, cur, modified; + HWND hListBox; + + if(!(hListBox = playlist_box())) + return; + + cur = ListBox_GetCurSel(hListBox); + modified = 0; + i = pos; + if(i >= 0 && i < playlist.nfiles) + { + char *filename, *title, *item1, *item2; + int maxlen, item2_len; + int notitle = 0; + + filename = playlist.list[i].filename; + title = playlist.list[i].title; + if(title == NULL || title[0] == '\0') + { + if(playlist.list[i].info->file_type == IS_ERROR_FILE) + title = " --SKIP-- "; + else + { + title = " -------- "; + notitle = 1; + } + } + maxlen = strlen(filename) + strlen(title) + 32 + 80; + item1 = (char *)new_segment(&tmpbuffer, maxlen); + if(!notitle) + { + if(i == playlist.selected) + snprintf(item1, maxlen, "==>%-80s (%s)", title, filename); + else + snprintf(item1, maxlen, " %-80s (%s)", title, filename); + } else + { + if(i == playlist.selected) + snprintf(item1, maxlen, "==>%s (%s)", title, filename); + else + snprintf(item1, maxlen, " %s (%s)", title, filename); + } + item2_len = ListBox_GetTextLen(hListBox, i); + item2 = (char *)new_segment(&tmpbuffer, item2_len + 1); + ListBox_GetText(hListBox, i, item2); + if(strcmp(item1, item2) != 0) + { + ListBox_DeleteString(hListBox, i); + ListBox_InsertString(hListBox, i, item1); + modified = 1; + } + reuse_mblock(&tmpbuffer); + } + + if(modified && cur==pos) + { + if(cur < 0) + cur = playlist.selected; + else if(cur >= playlist.nfiles - 1) + cur = playlist.nfiles - 1; + ListBox_SetCurSel(hListBox, cur); + SetNumListWnd(cur,playlist.nfiles); + } +} + void w32g_update_playlist(void) { +#if 0 int i, cur, modified; HWND hListBox; @@ -261,7 +332,7 @@ if(i == playlist.selected) snprintf(item1, maxlen, "==>%04d %s (%s)", i + 1, title, filename); else - snprintf(item1, maxlen, " %04d %s (%s)", i + 1, title, filename); + snprintf(item1, maxlen, " %04d %s (%s)", i + 1, title, filename); item2_len = ListBox_GetTextLen(hListBox, i); item2 = (char *)new_segment(&tmpbuffer, item2_len + 1); ListBox_GetText(hListBox, i, item2); @@ -281,7 +352,32 @@ else if(cur >= playlist.nfiles - 1) cur = playlist.nfiles - 1; ListBox_SetCurSel(hListBox, cur); + SetNumListWnd(cur,playlist.nfiles); + } +#else + int i, cur, modified; + HWND hListBox; + + if(!(hListBox = playlist_box())) + return; + + cur = ListBox_GetCurSel(hListBox); + modified = 0; + for(i = 0; i < playlist.nfiles; i++) + { + w32g_update_playlist_pos(i); + } + + if(modified) + { + if(cur < 0) + cur = playlist.selected; + else if(cur >= playlist.nfiles - 1) + cur = playlist.nfiles - 1; + ListBox_SetCurSel(hListBox, cur); + SetNumListWnd(cur,playlist.nfiles); } +#endif } void w32g_get_playlist_index(int *selected, int *nfiles, int *cursel) @@ -316,19 +412,22 @@ free(playlist.list[pos].filename); playlist.nfiles--; for(i = pos; i < playlist.nfiles; i++) - playlist.list[i] = playlist.list[i + 1]; + playlist.list[i] = playlist.list[i + 1]; if(pos < playlist.selected || pos == playlist.nfiles) { playlist.selected--; - if(playlist.selected < 0) + if(playlist.selected < 0){ playlist.selected = 0; + SetNumListWnd(playlist.selected,playlist.nfiles); + } else + w32g_update_playlist_pos(playlist.selected); } - w32g_update_playlist(); if(playlist.nfiles > 0) { if(pos == playlist.nfiles) pos--; ListBox_SetCurSel(hListBox, pos); + SetNumListWnd(pos,playlist.nfiles); } return 1; } @@ -357,6 +456,7 @@ if(!(hListBox = playlist_box())) return; ListBox_SetCurSel(hListBox, playlist.selected); + SetNumListWnd(playlist.selected,playlist.nfiles); } int w32g_uniq_playlist(int *is_selected_removed) @@ -414,8 +514,10 @@ { for(i = 0; i < nremoved; i++) ListBox_DeleteString(hListBox, --playlist.nfiles); - if(cursel >= 0) + if(cursel >= 0){ ListBox_SetCurSel(hListBox, cursel); + SetNumListWnd(cursel,playlist.nfiles); + } w32g_update_playlist(); } return nremoved; @@ -468,8 +570,10 @@ ListBox_DeleteString(hListBox, --playlist.nfiles); if(cursel >= playlist.nfiles) cursel = playlist.nfiles - 1; - if(cursel >= 0) + if(cursel >= 0){ ListBox_SetCurSel(hListBox, cursel); + SetNumListWnd(cursel,playlist.nfiles); + } w32g_update_playlist(); } return nremoved; @@ -492,6 +596,8 @@ // LB_RESETCONTENT if(hListBox) ListBox_ResetContent(hListBox); + playlist.selected = 0; + SetNumListWnd(0,0); } void w32g_rotate_playlist(int dest) @@ -499,6 +605,7 @@ int i, i1, i2; HWND hListBox; PlayListEntry save; + char temp[1024]; if(playlist.nfiles == 0) return; @@ -516,10 +623,17 @@ for(i = i2; i > i1; i--) /* i: i2 -> i1 */ playlist.list[i] = playlist.list[i - 1]; playlist.list[i] = save; - if(playlist.selected == i2) + ListBox_GetText(hListBox,i2,temp); + ListBox_DeleteString(hListBox,i2); + ListBox_InsertString(hListBox,i1,temp); + ListBox_SetCurSel(hListBox,i1); + if(playlist.selected == i2){ playlist.selected = i1; - else if(i1 <= playlist.selected && playlist.selected < i2) + w32g_update_playlist_pos(playlist.selected); + } else if(i1 <= playlist.selected && playlist.selected < i2){ playlist.selected++; + w32g_update_playlist_pos(playlist.selected); + } } else { @@ -527,12 +641,18 @@ for(i = i1; i < i2; i++) /* i: i1 -> i2 */ playlist.list[i] = playlist.list[i + 1]; playlist.list[i] = save; - if(playlist.selected == i1) + ListBox_GetText(hListBox,i1,temp); + ListBox_DeleteString(hListBox,i1); + ListBox_InsertString(hListBox,-1,temp); + ListBox_SetCurSel(hListBox,i1); + if(playlist.selected == i1){ playlist.selected = i2; - else if(i1 < playlist.selected && playlist.selected <= i2) + w32g_update_playlist_pos(playlist.selected); + } else if(i1 < playlist.selected && playlist.selected <= i2){ playlist.selected--; + w32g_update_playlist_pos(playlist.selected); + } } - w32g_update_playlist(); } char *w32g_get_playlist(int idx) diff -ruN TiMidity++-2.9.4/interface/w32g_pref.c TiMidity++-2.9.5/interface/w32g_pref.c --- TiMidity++-2.9.4/interface/w32g_pref.c Mon Mar 20 15:09:39 2000 +++ TiMidity++-2.9.5/interface/w32g_pref.c Wed Jul 5 20:56:12 2000 @@ -85,11 +85,19 @@ #if defined(__CYGWIN32__) || defined(__MINGW32__) //#define pszTemplate u1.pszTemplate //#define pszIcon u2.pszIcon +#ifndef NONAMELESSUNION #define NONAMELESSUNION +#endif +#ifndef DUMMYUNIONNAME #define DUMMYUNIONNAME u1 +#endif +#ifndef DUMMYUNIONNAME2 #define DUMMYUNIONNAME2 u2 +#endif +#ifndef DUMMYUNIONNAME3 #define DUMMYUNIONNAME3 u3 #endif +#endif #define PREFWND_NPAGES 5 void PrefWndCreate(HWND hwnd) @@ -402,7 +410,7 @@ break; case PSN_APPLY: PrefSettingApply(); - PropSheet_UnChanged(hPrefWnd,hwnd); + PropSheet_UnChanged((HWND)hPrefWnd,hwnd); break; case PSN_SETACTIVE: SetDlgItemText(hwnd,IDC_EDIT_CONFIG_FILE,TEXT(sp_temp->ConfigFile)); diff -ruN TiMidity++-2.9.4/interface/w32g_res.h TiMidity++-2.9.5/interface/w32g_res.h --- TiMidity++-2.9.4/interface/w32g_res.h Mon Mar 20 15:09:39 2000 +++ TiMidity++-2.9.5/interface/w32g_res.h Tue Jul 4 16:51:43 2000 @@ -198,6 +198,7 @@ #define IDC_RADIOBUTTON_GS 1195 #define IDC_RADIOBUTTON_XG 1196 #define IDC_EDIT1 2000 +#define IDC_EDIT_NUM 2002 #define IDC_STATIC -1 // Next default values for new objects @@ -206,7 +207,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 103 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 2002 +#define _APS_NEXT_CONTROL_VALUE 2003 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff -ruN TiMidity++-2.9.4/interface/w32g_res.rc TiMidity++-2.9.5/interface/w32g_res.rc --- TiMidity++-2.9.4/interface/w32g_res.rc Mon Mar 20 20:31:06 2000 +++ TiMidity++-2.9.5/interface/w32g_res.rc Wed Jul 5 20:59:40 2000 @@ -94,7 +94,7 @@ IDD_DIALOG_CONSOLE DIALOGEX 0, 0, 243, 184 STYLE DS_MODALFRAME | DS_3DLOOK | WS_CAPTION | WS_SYSMENU CAPTION "Console Window (TiMidity Win32GUI)" -FONT 9, "MS P明朝" +FONT 9, "MS P明朝", 0, 0 BEGIN PUSHBUTTON "C L E A R",IDCLEAR,140,167,96,16,BS_CENTER EDITTEXT IDC_EDIT_VERBOSITY,44,167,16,16,ES_OEMCONVERT @@ -111,24 +111,24 @@ CONTROL "",-1,"Static",SS_ETCHEDFRAME,88,167,41,16 END -IDD_DIALOG_CONSOLE_EN DIALOGEX 0, 0, 240, 180 +IDD_DIALOG_CONSOLE_EN DIALOGEX 0, 0, 247, 181 STYLE DS_MODALFRAME | DS_3DLOOK | WS_CAPTION | WS_SYSMENU CAPTION "Console Window (TiMidity Win32GUI)" FONT 8, "Times New Roman" BEGIN - PUSHBUTTON "C L E A R",IDCLEAR,140,164,96,16,BS_CENTER - EDITTEXT IDC_EDIT_VERBOSITY,44,164,16,16,ES_OEMCONVERT + PUSHBUTTON "C L E A R",IDCLEAR,150,165,90,15,BS_CENTER + EDITTEXT IDC_EDIT_VERBOSITY,50,165,21,15,ES_OEMCONVERT CONTROL "VALID",IDC_CHECKBOX_VALID,"Button",BS_AUTOCHECKBOX | - BS_LEFTTEXT | WS_TABSTOP,92,164,32,16 - CONTROL "",-1,"Static",SS_ETCHEDFRAME,4,164,80,16 - EDITTEXT IDC_EDIT,0,0,240,160,ES_MULTILINE | ES_AUTOVSCROLL | + BS_LEFTTEXT | WS_TABSTOP,110,165,32,15 + CONTROL "",-1,"Static",SS_ETCHEDFRAME,5,165,96,16 + EDITTEXT IDC_EDIT,0,0,245,160,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL,WS_EX_STATICEDGE - PUSHBUTTON "VERBOSITY",IDC_BUTTON_VERBOSITY,4,164,40,16,BS_CENTER, + PUSHBUTTON "VERBOSITY",IDC_BUTTON_VERBOSITY,4,165,46,15,BS_CENTER, WS_EX_CLIENTEDGE - PUSHBUTTON "<<",IDC_BUTTON_DEC,60,164,12,16,BS_CENTER - PUSHBUTTON ">>",IDC_BUTTON_INC,72,164,12,16,BS_CENTER - CONTROL "",-1,"Static",SS_ETCHEDFRAME,88,164,40,16 + PUSHBUTTON "<<",IDC_BUTTON_DEC,70,165,15,16,BS_CENTER + PUSHBUTTON ">>",IDC_BUTTON_INC,85,165,15,16,BS_CENTER + CONTROL "",-1,"Static",SS_ETCHEDFRAME,105,165,40,16 END IDD_DIALOG_DOC DIALOG DISCARDABLE 0, 0, 302, 257 @@ -150,13 +150,13 @@ CAPTION "Document Window (TiMidity Win32GUI)" FONT 9, "Times New Roman" BEGIN - EDITTEXT IDC_EDIT_FILENAME,60,164,140,16,ES_CENTER | ES_READONLY - PUSHBUTTON "<<",IDC_BUTTON_PREV,204,164,16,16,BS_CENTER - PUSHBUTTON ">>",IDC_BUTTON_NEXT,220,164,16,16,BS_CENTER + EDITTEXT IDC_EDIT_FILENAME,60,168,140,12,ES_CENTER | ES_READONLY + PUSHBUTTON "<<",IDC_BUTTON_PREV,204,168,16,12,BS_CENTER + PUSHBUTTON ">>",IDC_BUTTON_NEXT,220,168,16,12,BS_CENTER EDITTEXT IDC_EDIT,0,0,236,160,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL - EDITTEXT IDC_EDIT_INFO,0,164,56,16,ES_READONLY + EDITTEXT IDC_EDIT_INFO,0,168,56,12,ES_READONLY END IDD_DIALOG_WRD DIALOGEX 0, 0, 320, 220 @@ -192,7 +192,7 @@ CONTROL "Frame_Valid",-1,"Static",SS_ETCHEDFRAME,12,200,44,16 END -IDD_DIALOG_SIMPLE_LIST DIALOGEX 0, 0, 241, 185 +IDD_DIALOG_SIMPLE_LIST DIALOGEX 0, 0, 242, 187 STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_ACCEPTFILES CAPTION "List Window (TiMidity Win32GUI)" @@ -201,25 +201,27 @@ LISTBOX IDC_LISTBOX_PLAYLIST,0,0,241,172,LBS_HASSTRINGS | LBS_WANTKEYBOARDINPUT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - PUSHBUTTON "DOC",IDC_BUTTON_DOC,0,173,52,12,BS_CENTER - PUSHBUTTON "CLEAR",IDC_BUTTON_CLEAR,189,173,52,12,BS_CENTER - PUSHBUTTON "REFINE",IDC_BUTTON_REFINE,136,173,40,12,BS_CENTER - PUSHBUTTON "UNIQ",IDC_BUTTON_UNIQ,96,173,40,12,BS_CENTER + PUSHBUTTON "DOC",IDC_BUTTON_DOC,65,175,40,12,BS_CENTER + PUSHBUTTON "CLEAR",IDC_BUTTON_CLEAR,200,175,42,12,BS_CENTER + PUSHBUTTON "REFINE",IDC_BUTTON_REFINE,155,175,30,12,BS_CENTER + PUSHBUTTON "UNIQ",IDC_BUTTON_UNIQ,125,175,30,12,BS_CENTER + EDITTEXT IDC_EDIT_NUM,5,175,45,12,ES_READONLY END -IDD_DIALOG_SIMPLE_LIST_EN DIALOGEX 0, 0, 241, 184 +IDD_DIALOG_SIMPLE_LIST_EN DIALOGEX 0, 0, 242, 187 STYLE DS_3DLOOK | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_ACCEPTFILES CAPTION "List Window (TiMidity Win32GUI)" FONT 9, "Times New Roman" BEGIN - LISTBOX IDC_LISTBOX_PLAYLIST,0,0,241,172,LBS_HASSTRINGS | + LISTBOX IDC_LISTBOX_PLAYLIST,0,0,241,170,LBS_HASSTRINGS | LBS_WANTKEYBOARDINPUT | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP - PUSHBUTTON "DOC",IDC_BUTTON_DOC,0,172,52,12,BS_CENTER - PUSHBUTTON "CLEAR",IDC_BUTTON_CLEAR,189,172,52,12,BS_CENTER - PUSHBUTTON "REFINE",IDC_BUTTON_REFINE,136,172,40,12,BS_CENTER - PUSHBUTTON "UNIQ",IDC_BUTTON_UNIQ,96,172,40,12,BS_CENTER + PUSHBUTTON "DOC",IDC_BUTTON_DOC,55,175,45,10,BS_CENTER + PUSHBUTTON "CLEAR",IDC_BUTTON_CLEAR,190,175,46,10,BS_CENTER + PUSHBUTTON "REFINE",IDC_BUTTON_REFINE,145,175,29,10,BS_CENTER + PUSHBUTTON "UNIQ",IDC_BUTTON_UNIQ,115,175,31,10,BS_CENTER + EDITTEXT IDC_EDIT_NUM,5,175,45,12,ES_READONLY END IDD_PREF_PLAYER DIALOG DISCARDABLE 0, 0, 212, 92 @@ -625,6 +627,18 @@ BEGIN RIGHTMARGIN, 268 BOTTOMMARGIN, 255 + END + + IDD_DIALOG_SIMPLE_LIST, DIALOG + BEGIN + RIGHTMARGIN, 241 + BOTTOMMARGIN, 185 + END + + IDD_DIALOG_SIMPLE_LIST_EN, DIALOG + BEGIN + RIGHTMARGIN, 241 + BOTTOMMARGIN, 179 END IDD_DIALOG_SEARCHBOX, DIALOG diff -ruN TiMidity++-2.9.4/interface/w32g_subwin.c TiMidity++-2.9.5/interface/w32g_subwin.c --- TiMidity++-2.9.4/interface/w32g_subwin.c Mon Mar 20 15:09:39 2000 +++ TiMidity++-2.9.5/interface/w32g_subwin.c Wed Jul 5 20:58:36 2000 @@ -33,10 +33,6 @@ #include #endif -#if defined(__CYGWIN32__) || defined(__MINGW32__) -#define TPM_TOPALIGN 0x0000L -#endif - #include "timidity.h" #include "common.h" #include "instrum.h" @@ -66,6 +62,12 @@ #include "w32g_subwin.h" #include "w32g_ut2.h" +#if defined(__CYGWIN32__) || defined(__MINGW32__) +#ifndef TPM_TOPALIGN +#define TPM_TOPALIGN 0x0000L +#endif +#endif + extern void MainWndToggleConsoleButton(void); extern void MainWndUpdateConsoleButton(void); extern void MainWndToggleTracerButton(void); @@ -356,6 +358,8 @@ // --------------------------------------------------------------------------- // Static Functions +void SetNumListWnd(int cursel, int nfiles); + static BOOL CALLBACK ListWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam) { @@ -392,6 +396,15 @@ case LBN_DBLCLK: SendMessage(hwnd,WM_COMMAND,(WPARAM)IDM_LISTWND_PLAY,0); return FALSE; + case LBN_SELCHANGE: + { + int idListBox = (int) LOWORD(wParam); + HWND hwndListBox = (HWND) lParam; + int selected, nfiles, cursel; + w32g_get_playlist_index(&selected,&nfiles,&cursel); + SetNumListWnd(cursel,nfiles); + return FALSE; + } default: break; } @@ -476,6 +489,7 @@ return -2; case VK_BACK: w32g_send_rc(RC_EXT_DELETE_PLAYLIST, -1); + return -2; case 0x44: // VK_D w32g_send_rc(RC_EXT_DELETE_PLAYLIST, 0); return -2; @@ -507,6 +521,7 @@ "Usage of key.\n" "List window command.\n" " ESC: Close Help H: Help\n" + " V: View Document\n" "Player command.\n" " SPACE/ENTER: PLAY E: Stop S: Pause\n" " P: Prev N: Next\n" @@ -539,19 +554,31 @@ GetWindowRect(hwnd,&rcParent); cx = rcParent.right-rcParent.left; cy = rcParent.bottom-rcParent.top; - if(cx < 350) - MoveWindow(hwnd,rcParent.left,rcParent.top,350,cy,TRUE); + if(cx < 380) + MoveWindow(hwnd,rcParent.left,rcParent.top,380,cy,TRUE); if(cy < 200) MoveWindow(hwnd,rcParent.left,rcParent.top,cx,200,TRUE); GetClientRect(hwnd,&rcParent); rcRest.left = rcParent.left; rcRest.right = rcParent.right; + + // IDC_EDIT_NUM + idControl = IDC_EDIT_NUM; + hwndChild = GetDlgItem(hwnd,idControl); + GetWindowRect(hwndChild,&rcChild); + cx = rcChild.right-rcChild.left; + cy = rcChild.bottom-rcChild.top; + x = rcParent.left; + y = rcParent.bottom - cy; + MoveWindow(hwndChild,x,y,cx,cy,TRUE); + if(cy>maxHeight) maxHeight = cy; + rcRest.left += cx; // IDC_BUTTON_DOC idControl = IDC_BUTTON_DOC; hwndChild = GetDlgItem(hwnd,idControl); GetWindowRect(hwndChild,&rcChild); cx = rcChild.right-rcChild.left; cy = rcChild.bottom-rcChild.top; - x = rcParent.left; + x = rcRest.left + 10; y = rcParent.bottom - cy; MoveWindow(hwndChild,x,y,cx,cy,TRUE); if(cy>maxHeight) maxHeight = cy; @@ -693,6 +720,14 @@ ListWndInfoApply(); return 0; } + +void SetNumListWnd(int cursel, int nfiles) +{ + char buff[64]; + sprintf(buff,"%04d/%04d",cursel+1,nfiles); + SetDlgItemText(hListWnd,IDC_EDIT_NUM,buff); +} + // *************************************************************************** // Tracer Window diff -ruN TiMidity++-2.9.4/interface/w32g_ut2.c TiMidity++-2.9.5/interface/w32g_ut2.c --- TiMidity++-2.9.4/interface/w32g_ut2.c Mon Mar 20 15:09:40 2000 +++ TiMidity++-2.9.5/interface/w32g_ut2.c Tue Jul 4 16:51:43 2000 @@ -1,7 +1,24 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif /* HAVE_CONFIG_H */ #include #include #include #include +#include +#include "timidity.h" +#include "common.h" +#include "instrum.h" +#include "playmidi.h" +#include "readmidi.h" +#include "output.h" +#include "controls.h" +#include "recache.h" +#ifdef SUPPORT_SOUNDSPEC +#include "soundspec.h" +#endif /* SUPPORT_SOUNDSPEC */ +#include "wrd.h" +#include "w32g.h" #include "w32g_ut2.h" char *timidity_window_inifile; @@ -185,3 +202,509 @@ if(num!=-1) DocWndInfo.fontFlags = num; return 0; } + + +/**********************************************************************/ +// プロセス間通信用にメールスロットのサーバースレッドを用意する + +#define TIMIDITY_MAILSLOT "\\\\.\\mailslot\\timiditypp_mailslot_ver_1_0" + +// メールスロットに渡される形式 +// ヘッダ +// コマンド名 +// オプション数 +// オプション1 +// オプション2 +// ... + +// ヘッダ +#define MC_HEADER "TiMidity++Win32GUI Mailslot-1.0" +// コマンド名 +// TiMidity の終了 +#define MC_TERMINATE "Terminate" +// ファイルを指定 +#define MC_FILES "Files Argc Argv" +// オプション1 : ファイル名1 +// ... +// プレイリストのクリア +#define MC_PLAYLIST_CLEAR "Playlist Clear" +// 演奏開始 +#define MC_PLAY "Play" +// 次のファイルの演奏 +#define MC_PLAY_NEXT "Play Next" +// 前のファイルの演奏 +#define MC_PLAY_PREV "Play Prev" +// 演奏停止 +#define MC_STOP "Stop" +// 演奏一時停止 +#define MC_PAUSE "Pause" +// TiMidity の状態を指定メールスロットに送信 +#define MC_SEND_TIMIDITY_INFO "Send TiMidity Info" +// オプション1 : メールスロット名 +// オプション2 : 状態1 +// ... +// 状態 +// "PlayFileName:〜" : 演奏ファイル名 +// "PlayTile:〜" : 演奏タイトル名 +// "PlayStatus:〜" : 演奏状態(〜:PLAY,STOP,PAUSE) + +static HANDLE hMailslot = NULL; + +void w32gMailslotThread(void); + +int w32gStartMailslotThread(void) +{ + DWORD dwThreadID; + HANDLE hThread; + hThread = (HANDLE)crt_beginthreadex(NULL,0,(LPTHREAD_START_ROUTINE)w32gMailslotThread,NULL,0,&dwThreadID); + if((unsigned long)hThread==-1){ + return FALSE; // Error! + } + return TRUE; +} + +int ReadFromMailslot(HANDLE hmailslot, char *buffer, int *size) +{ + DWORD dwMessageSize, dwMessageNum, dwMessageReadSize; + BOOL bRes; + int i; + bRes = GetMailslotInfo(hmailslot,NULL,&dwMessageSize,&dwMessageNum,(LPDWORD)NULL); + if(bRes==FALSE || dwMessageSize==MAILSLOT_NO_MESSAGE) + return FALSE; + for(i=0;i<10;i++){ + bRes = ReadFile(hMailslot,buffer,dwMessageSize,&dwMessageReadSize,(LPOVERLAPPED)NULL); +#ifdef W32GUI_DEBUG +PrintfDebugWnd("[%s]\n",buffer); +#endif + if(bRes==TRUE){ + break; + } + Sleep(300); + } + if(bRes==TRUE){ + *size = (int)dwMessageSize; + return TRUE; + } else + return FALSE; +} +// 無視する版 +void ReadFromMailslotIgnore(HANDLE hmailslot, int num) +{ + int i; + char buffer[10240]; + int size; + for(i=0;i 0 ? argc-1 : 0, argv+1); + return FALSE; + } else { + if(TryUniqTiMidity(20)==TRUE){ + w32gStartMailslotThread(); + return TRUE; + } + return FALSE; + } + case 2: + if(ExistOldTiMidity()==TRUE){ + for(i=0;i<=20;i++){ + TerminateOldTiMidity(); + if(UniqTiMidity()==TRUE){ + w32gStartMailslotThread(); + return TRUE; + } + Sleep(1000); + } + } else { + if(TryUniqTiMidity(20)==TRUE){ + w32gStartMailslotThread(); + return TRUE; + } + } + return FALSE; + case 3: + return FALSE; + case 4: + if(ExistOldTiMidity()==TRUE){ + for(i=0;i<=20;i++){ + TerminateOldTiMidity(); + if(ExistOldTiMidity()==FALSE){ + return FALSE; + } + Sleep(1000); + } + } + return FALSE; + case 5: + return TRUE; + default: + return FALSE; + } +} + +// w32gSecondTiMidity() の後処理 +int w32gSecondTiMidityExit(void) +{ + MailslotThreadTeminateFlag = TRUE; + Sleep(300); + if(hMailslot!=NULL) + CloseHandle(hMailslot); + ReleaseMutex(hMutexTiMidity); + CloseHandle(hMutexTiMidity); + return 0; +} + +// Before it call timidity_start_initialize() +int isURLFile(char *filename) +{ + if(strncasecmp(filename,"http://",7)==0 + || strncasecmp(filename,"ftp://",6)==0 + || strncasecmp(filename,"news://",7)==0 + || strncasecmp(filename,"file:",5)==0 + || strncasecmp(filename,"dir:",4)==0){ + return TRUE; + } else { + return FALSE; + } +} \ No newline at end of file diff -ruN TiMidity++-2.9.4/interface/w32g_utl.c TiMidity++-2.9.5/interface/w32g_utl.c --- TiMidity++-2.9.4/interface/w32g_utl.c Mon Mar 20 15:09:40 2000 +++ TiMidity++-2.9.5/interface/w32g_utl.c Tue Jul 4 16:51:43 2000 @@ -69,7 +69,7 @@ extern int DocWndIndependent; extern int SeachDirRecursive; extern int IniFileAutoSave; - +extern int SecondMode; //*****************************************************************************/ // ini @@ -316,6 +316,7 @@ DocWndIndependent = sp->DocWndIndependent; SeachDirRecursive = sp->SeachDirRecursive; IniFileAutoSave = sp->IniFileAutoSave; + SecondMode = sp->SecondMode; } void @@ -375,6 +376,7 @@ sp->DocWndIndependent = DocWndIndependent; sp->SeachDirRecursive = SeachDirRecursive; sp->IniFileAutoSave = IniFileAutoSave; + sp->SecondMode = SecondMode; } extern int set_play_mode(char *cp); diff -ruN TiMidity++-2.9.4/interface/w32g_utl.h TiMidity++-2.9.5/interface/w32g_utl.h --- TiMidity++-2.9.4/interface/w32g_utl.h Mon Feb 7 07:41:23 2000 +++ TiMidity++-2.9.5/interface/w32g_utl.h Tue Jul 4 16:51:43 2000 @@ -76,6 +76,7 @@ int DocWndIndependent; int SeachDirRecursive; int IniFileAutoSave; + int SecondMode; // End. } SETTING_PLAYER; diff -ruN TiMidity++-2.9.4/timidity/Makefile.in TiMidity++-2.9.5/timidity/Makefile.in --- TiMidity++-2.9.4/timidity/Makefile.in Wed May 24 23:30:54 2000 +++ TiMidity++-2.9.5/timidity/Makefile.in Wed Jul 5 23:04:56 2000 @@ -280,6 +280,8 @@ ../libarc/arc.h ../utils/nkflib.h wrd.h ../utils/strtab.h controls.o: controls.c ../config.h ../interface.h timidity.h \ ../utils/support.h controls.h +dl_dlopen.o: dl_dlopen.c ../config.h timidity.h ../utils/support.h \ + dlutils.h effect.o: effect.c ../config.h timidity.h ../utils/support.h instrum.h \ playmidi.h output.h reverb.h filter.o: filter.c ../config.h timidity.h ../utils/support.h common.h \ @@ -306,7 +308,7 @@ common.h ../libarc/url.h ../utils/mblock.h instrum.h playmidi.h \ readmidi.h tables.h mod.h output.h controls.h \ ../libunimod/unimod.h mod2midi.h -nas_a.o: nas_a.c ../config.h timidity.h ../utils/support.h common.h \ +oss_a.o: oss_a.c ../config.h timidity.h ../utils/support.h common.h \ ../libarc/url.h ../utils/mblock.h output.h controls.h \ ../utils/timer.h instrum.h playmidi.h miditrace.h output.o: output.c ../config.h timidity.h ../utils/support.h output.h \ @@ -314,8 +316,7 @@ playmidi.o: playmidi.c ../config.h timidity.h ../utils/support.h \ common.h ../libarc/url.h ../utils/mblock.h instrum.h playmidi.h \ readmidi.h output.h mix.h controls.h miditrace.h recache.h \ - ../libarc/arc.h reverb.h wrd.h aq.h ../interface/soundspec.h \ - tables.h + ../libarc/arc.h reverb.h wrd.h aq.h tables.h raw_a.o: raw_a.c ../config.h timidity.h ../utils/support.h output.h \ controls.h rcp.o: rcp.c ../config.h timidity.h ../utils/support.h common.h \ @@ -344,15 +345,13 @@ ../libarc/url.h ../utils/mblock.h tables.h instrum.h playmidi.h \ controls.h sffile.h sflayer.h sfitem.h output.h filter.h \ resample.h -sun_a.o: sun_a.c ../config.h timidity.h ../utils/support.h aenc.h \ - output.h controls.h tables.o: tables.c ../config.h timidity.h ../utils/support.h common.h \ ../libarc/url.h ../utils/mblock.h tables.h timidity.o: timidity.c ../config.h ../interface.h timidity.h \ ../utils/support.h common.h ../libarc/url.h ../utils/mblock.h \ instrum.h playmidi.h readmidi.h output.h controls.h tables.h \ - miditrace.h reverb.h ../interface/soundspec.h recache.h \ - ../libarc/arc.h ../utils/strtab.h wrd.h mid.defs aq.h mix.h \ + miditrace.h reverb.h recache.h ../libarc/arc.h \ + ../utils/strtab.h wrd.h mid.defs aq.h mix.h \ ../libunimod/unimod.h wave_a.o: wave_a.c ../config.h timidity.h ../utils/support.h output.h \ controls.h diff -ruN TiMidity++-2.9.4/timidity/readmidi.c TiMidity++-2.9.5/timidity/readmidi.c --- TiMidity++-2.9.4/timidity/readmidi.c Wed Apr 26 14:20:08 2000 +++ TiMidity++-2.9.5/timidity/readmidi.c Tue Jul 4 16:53:35 2000 @@ -169,6 +169,8 @@ at = a_event->time; newev = alloc_midi_event(); newev->event = *a_event; /* assign by value!!! */ + if(at < 0) /* for safety */ + at = newev->event.time = 0; if(at >= current_midi_point->event.time) { diff -ruN TiMidity++-2.9.4/timidity/sndfont.c TiMidity++-2.9.5/timidity/sndfont.c --- TiMidity++-2.9.4/timidity/sndfont.c Wed May 17 13:17:44 2000 +++ TiMidity++-2.9.5/timidity/sndfont.c Tue Jul 4 16:54:42 2000 @@ -1039,6 +1039,7 @@ * create patch record from the stored data table *----------------------------------------------------------------*/ +#if 0 static int make_patch(SFInfo *sf, int pridx, LayerTable *tbl) { int bank, preset, keynote; @@ -1141,7 +1142,121 @@ return AWE_RET_OK; } +#else +static int make_patch(SFInfo *sf, int pridx, LayerTable *tbl) +{ + int bank, preset, keynote; + int keynote_from, keynote_to, done; + int addr, order; + InstList *ip; + SFSampleInfo *sample; + SampleList *sp; + + sample = &sf->sample[tbl->val[SF_sampleId]]; + if(sample->sampletype & 0x8000) /* is ROM sample? */ + { + ctl->cmsg(CMSG_INFO, VERB_DEBUG, "preset %d is ROM sample: 0x%x", + pridx, sample->sampletype); + return AWE_RET_SKIP; + } + + bank = sf->preset[pridx].bank; + preset = sf->preset[pridx].preset; + if(bank == 128){ + keynote_from = LOWNUM(tbl->val[SF_keyRange]); + keynote_to = HIGHNUM(tbl->val[SF_keyRange]); + } else + keynote_from = keynote_to = -1; + + done = 0; + for(keynote=keynote_from;keynote<=keynote_to;keynote++){ + + ctl->cmsg(CMSG_INFO, VERB_DEBUG_SILLY, + "SF make inst pridx=%d bank=%d preset=%d keynote=%d", + pridx, bank, preset, keynote); + + if(is_excluded(current_sfrec, bank, preset, keynote)) + { + ctl->cmsg(CMSG_INFO, VERB_DEBUG_SILLY, " * Excluded"); + continue; + } else + done++; + + order = is_ordered(current_sfrec, bank, preset, keynote); + if(order < 0) + order = current_sfrec->def_order; + + addr = INSTHASH(bank, preset, keynote); + + for(ip = current_sfrec->instlist[addr]; ip; ip = ip->next) + { + if(ip->pat.bank == bank && ip->pat.preset == preset && + (keynote < 0 || keynote == ip->pat.keynote)) + break; + } + + if(ip == NULL) + { + ip = (InstList*)SFMalloc(current_sfrec, sizeof(InstList)); + memset(ip, 0, sizeof(InstList)); + ip->pr_idx = pridx; + ip->pat.bank = bank; + ip->pat.preset = preset; + ip->pat.keynote = keynote; + ip->order = order; + ip->samples = 0; + ip->slist = NULL; + ip->next = current_sfrec->instlist[addr]; + current_sfrec->instlist[addr] = ip; + } + /* new sample */ + sp = (SampleList *)SFMalloc(current_sfrec, sizeof(SampleList)); + memset(sp, 0, sizeof(SampleList)); + + if(bank == 128) + sp->v.note_to_use = keynote; + sp->v.high_vel = 127; + make_info(sf, sp, tbl); + + /* add a sample */ + if(ip->slist == NULL) + ip->slist = sp; + else + { + SampleList *cur, *prev; + int32 start; + + /* Insert sample */ + start = sp->start; + cur = ip->slist; + prev = NULL; + while(cur && cur->start <= start) + { + prev = cur; + cur = cur->next; + } + if(prev == NULL) + { + sp->next = ip->slist; + ip->slist = sp; + } + else + { + prev->next = sp; + sp->next = cur; + } + } + ip->samples++; + + } /* for(;;) */ + + if(done==0) + return AWE_RET_SKIP; + else + return AWE_RET_OK; +} +#endif /*---------------------------------------------------------------- * diff -ruN TiMidity++-2.9.4/timidity/timidity.c TiMidity++-2.9.5/timidity/timidity.c --- TiMidity++-2.9.4/timidity/timidity.c Mon Mar 20 15:48:24 2000 +++ TiMidity++-2.9.5/timidity/timidity.c Tue Jul 4 16:53:35 2000 @@ -3179,6 +3179,12 @@ return 0; } +#ifdef IA_W32GUI +int w32gSecondTiMidity(int opt, int argc, char **argv); +int w32gSecondTiMidityExit(void); +extern int SecondMode; +#endif /* IA_W32GUI */ + #ifndef __MACOS__ #ifdef __W32__ /* Windows */ #if defined(__CYGWIN32__) || defined(__MINGW32__) || !defined(IA_W32GUI) @@ -3269,6 +3275,13 @@ timidity_start_initialize(); #ifdef IA_W32GUI w32g_initialize(); + + /* Secondary TiMidity Execute */ + /* FirstLoadIniFile(); */ + if(w32gSecondTiMidity(SecondMode,argc,argv)==FALSE){ + return 0; + } + for(c = 1; c < argc; c++) { if(is_directory(argv[c])) @@ -3350,6 +3363,16 @@ files = expand_file_archives(files, &nfiles); if(dumb_error_count) sleep(1); + +#ifndef IA_W32GUI return timidity_play_main(nfiles, files); +#else + { + int res = timidity_play_main(nfiles, files); + w32gSecondTiMidityExit(); + return res; + } +#endif /* IA_W32GUI */ + } #endif /* __MACOS__ */