OSDN Git Service

Imported UnkoTim211
[timidity41/timidity41.git] / kbtimsetup / kbtimsetup.c
diff --git a/kbtimsetup/kbtimsetup.c b/kbtimsetup/kbtimsetup.c
new file mode 100644 (file)
index 0000000..09311df
--- /dev/null
@@ -0,0 +1,418 @@
+
+
+
+#include "timidity.c"
+
+#include <tchar.h>
+#include "w32g.h"
+#include "w32g_res.h"
+#include "w32g_utl.h"
+#include "w32g_pref.h"
+
+
+// \83G\83\89\81[\89ñ\94ð\97p (w32g_c.c, w32g_i.c, w32g_ut2.c \93\99\82Ì\91ã\91Ö
+int PlayerLanguage = LANGUAGE_JAPANESE; //LANGUAGE_ENGLISH;
+int IniFileAutoSave = 1;
+char *IniFile;
+char *ConfigFile;
+char *PlaylistFile;
+char *PlaylistHistoryFile;
+char *MidiFileOpenDir;
+char *ConfigFileOpenDir;
+char *PlaylistFileOpenDir;
+int SecondMode = 0;
+BOOL PosSizeSave = TRUE;
+int DocMaxSize;
+char *DocFileExt;
+int AutoloadPlaylist = 0;
+int AutosavePlaylist = 0;
+int SeachDirRecursive = 0;
+int DocWndIndependent = 0;
+int DocWndAutoPopup = 0;
+int TraceGraphicFlag;
+int PlayerThreadPriority;
+int MidiPlayerThreadPriority;
+int MainThreadPriority;
+int GUIThreadPriority;
+int TracerThreadPriority;
+int WrdThreadPriority;
+int SubWindowMax = 6;
+int InitMinimizeFlag = 0;
+int main_panel_update_time = 10;
+int DebugWndStartFlag = 1;
+int ConsoleWndStartFlag = 0;
+int ListWndStartFlag = 0;
+int TracerWndStartFlag = 0;
+int DocWndStartFlag = 0;
+int WrdWndStartFlag = 0;
+int SoundSpecWndStartFlag = 0;
+int DebugWndFlag = 1;
+int ConsoleWndFlag = 1;
+int ListWndFlag = 1;
+int TracerWndFlag = 0;
+int DocWndFlag = 1;
+int WrdWndFlag = 0;
+int SoundSpecWndFlag = 0;
+int WrdGraphicFlag;
+int TraceGraphicFlag;
+char *w32g_output_dir = NULL;
+int w32g_auto_output_mode = 0;
+int w32g_lock_open_file = 0;
+WRDTracer w32g_wrdt_mode;
+int playlist_max = 1;
+int playlist_max_ini = 1;
+int ConsoleClearFlag = 0;
+// HWND
+HWND hMainWnd = 0;
+HWND hDebugWnd = 0;
+HWND hConsoleWnd = 0;
+HWND hTracerWnd = 0;
+HWND hDocWnd = 0;
+HWND hListWnd = 0;
+HWND hWrdWnd = 0;
+HWND hSoundSpecWnd = 0;
+HWND hDebugEditWnd = 0;
+HWND hDocEditWnd = 0;
+HWND hUrlWnd = 0;
+// Process.
+HANDLE hProcess = 0;
+// Main Thread.
+HANDLE hMainThread = 0;
+HANDLE hPlayerThread = 0;
+HANDLE hMainThreadInfo = 0;
+DWORD dwMainThreadID = 0;
+
+void TracerWndApplyQuietChannel(ChannelBitMask quietchannels_){}
+void w32g_restart(void){}
+void w32g_send_rc(int rc, ptr_size_t value){}
+void w32g_i_init(void){}
+void w32g_ext_control_main_thread(int rc, ptr_size_t value){}
+
+// Control funcitons
+static int ctl_open(int using_stdin, int using_stdout){}
+static void ctl_close(void){}
+static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]){}
+static void ctl_event(CtlEvent *e){}
+static int ctl_read(ptr_size_t *valp){}
+static int cmsg(int type, int verbosity_level, char *fmt, ...){}
+#define ctl w32gui_control_mode
+#define CTL_STATUS_UPDATE -98
+ControlMode ctl=
+{
+    "Win32 GUI interface", 'w',
+    "w32gui",
+    1,1,0,
+    CTLF_AUTOSTART | CTLF_DRAG_START,
+    ctl_open,
+    ctl_close,
+    ctl_pass_playing_list,
+    ctl_read,
+    NULL,
+    cmsg,
+    ctl_event
+};
+
+
+// \82±\82±\82©\82çsetup\82Ì\83\81\83C\83\93\95\94\95ª
+
+char IniPath[FILEPATH_MAX] = "";
+
+
+// w32_utl.c \82Å\8eg\97p
+void get_ini_path(char *ini)
+{
+       if(ini)
+               strcpy(ini, (const char *)&IniPath);
+}
+
+
+// timidity_start_initialize()
+void config_gui_start_initialize(void)
+{
+       int i;
+    static int drums[] = DEFAULT_DRUMCHANNELS;
+    static int is_first = 1;
+
+#if defined(__FreeBSD__) && !defined(__alpha__)
+    fp_except_t fpexp;
+#elif defined(__NetBSD__) || defined(__OpenBSD__)
+    fp_except fpexp;
+#endif
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+    fpexp = fpgetmask();
+    fpsetmask(fpexp & ~(FP_X_INV|FP_X_DZ));
+#endif
+    if(!output_text_code)
+               output_text_code = safe_strdup(OUTPUT_TEXT_CODE);
+    if(!opt_aq_max_buff)
+               opt_aq_max_buff = safe_strdup("5.0");
+    if(!opt_aq_fill_buff)
+               opt_aq_fill_buff = safe_strdup("100%"); 
+    if(!opt_reduce_voice_threshold)
+               opt_reduce_voice_threshold = safe_strdup("75%");
+    if(!opt_reduce_quality_threshold)
+               opt_reduce_quality_threshold = safe_strdup("99%");
+    if(!opt_reduce_polyphony_threshold)
+               opt_reduce_polyphony_threshold = safe_strdup("85%");
+
+    /* Check the byte order */
+    i = 1;
+#ifdef LITTLE_ENDIAN
+    if(*(char *)&i != 1)
+#else
+    if(*(char *)&i == 1)
+#endif
+    {
+               fprintf(stderr, "Byte order is miss configured.\n");
+               exit(1);
+    }
+    for(i = 0; i < MAX_CHANNELS; i++)
+               memset(&(channel[i]), 0, sizeof(Channel));
+    CLEAR_CHANNELMASK(quietchannels);
+    CLEAR_CHANNELMASK(default_drumchannels);
+    for(i = 0; drums[i] > 0; i++)
+               SET_CHANNELMASK(default_drumchannels, drums[i] - 1);
+#if MAX_CHANNELS > 16
+    for(i = 16; i < MAX_CHANNELS; i++)
+               if(IS_SET_CHANNELMASK(default_drumchannels, i & 0xF))
+                       SET_CHANNELMASK(default_drumchannels, i);
+#endif
+    if(program_name == NULL)
+               program_name = "TiMidity";
+    uudecode_unquote_html = 1;
+    for(i = 0; i < MAX_CHANNELS; i++){
+               default_program[i] = DEFAULT_PROGRAM;
+               special_program[i] = -1;
+               memset(channel[i].drums, 0, sizeof(channel[i].drums));
+    }
+    if(play_mode == NULL)
+               play_mode = &null_play_mode;
+
+}
+
+// main() start
+void config_gui_main(void)
+{
+#if defined(TIMIDITY_LEAK_CHECK)
+       _CrtSetDbgFlag(CRTDEBUGFLAGS);
+#endif
+       OverrideSFSettingLoad();
+#if defined(VST_LOADER_ENABLE)
+       if (hVSTHost == NULL) {         
+               // ini(=kpi)\82Ì\83f\83B\83\8c\83N\83g\83\8a\82É\82 \82é timvstwrap.dll
+               int i, last = 0;
+               char WrapPath[FILEPATH_MAX] = "";
+               for(i = 0; i < FILEPATH_MAX; i++){
+                       if(IniPath[i] == '\0')
+                               break;
+                       else if(IniPath[i] == '\\')
+                               last = i;
+               }
+               if(last){
+                       int j = 0;
+                       for(i = 0; i < last; i++){
+                               WrapPath[j++] = IniPath[i];
+                       }
+                       WrapPath[j] = '\0';
+#ifdef _WIN64
+                       strcat(WrapPath, "\\timvstwrap_x64.dll\0");
+#else
+                       strcat(WrapPath, "\\timvstwrap.dll\0");
+#endif
+               }
+               if(WrapPath[0] != 0)
+                       hVSTHost = LoadLibrary(WrapPath);
+               if (hVSTHost == NULL){
+#ifdef _WIN64
+                       hVSTHost = LoadLibrary("timvstwrap_x64.dll");
+#else
+                       hVSTHost = LoadLibrary("timvstwrap.dll");
+#endif
+               }
+
+               if (hVSTHost != NULL) {
+                       ((vst_open)GetProcAddress(hVSTHost, "vstOpen"))();
+               }
+       }
+#endif 
+#if defined(__W32__) && !defined(WINDRV)
+       (void)w32_reset_dll_directory();
+#endif
+       // timidity_start_initialize()
+       config_gui_start_initialize();
+}
+
+// main() end
+void config_gui_main_close(void)
+{
+       int i;
+#ifdef SUPPORT_SOCKET
+       safe_free(url_user_agent);
+       url_user_agent = NULL;
+       safe_free(url_http_proxy_host);
+       url_http_proxy_host = NULL;
+       safe_free(url_ftp_proxy_host);
+       url_ftp_proxy_host = NULL;
+       safe_free(user_mailaddr);
+       user_mailaddr = NULL;
+#endif
+#ifdef IA_DYNAMIC
+       safe_free(dynamic_lib_root);
+       dynamic_lib_root = NULL;
+#endif
+       safe_free(pcm_alternate_file);
+       pcm_alternate_file = NULL;
+       safe_free(opt_output_name);
+       opt_output_name = NULL;
+       safe_free(opt_aq_max_buff);
+       opt_aq_max_buff = NULL;
+       safe_free(opt_aq_fill_buff);
+       opt_aq_fill_buff = NULL;
+       safe_free(opt_reduce_voice_threshold);
+       opt_reduce_voice_threshold = NULL;
+       safe_free(opt_reduce_quality_threshold);
+       opt_reduce_quality_threshold = NULL;
+       safe_free(opt_reduce_polyphony_threshold);
+       opt_reduce_polyphony_threshold = NULL;
+       safe_free(output_text_code);
+       output_text_code = NULL;
+       safe_free(wrdt_open_opts);
+       wrdt_open_opts = NULL;
+       free_soft_queue();
+       free_audio_bucket();
+       free_instruments(0);
+       free_soundfonts();
+       free_cache_data();
+       free_freq_data();
+       free_wrd();
+       free_readmidi();
+       free_playmidi();
+       free_mix_c();
+       free_global_mblock();
+       tmdy_free_config();
+       //free_reverb_buffer();
+       free_effect_buffers();
+       free_int_synth();
+       free_voices();
+       uninitialize_resampler_coeffs();
+       for (i = 0; i < MAX_CHANNELS; i++)
+               free_drum_effect(i);
+#ifdef VST_LOADER_ENABLE
+       if (hVSTHost != NULL) {
+               // only load , no save
+               ((vst_close)GetProcAddress(hVSTHost,"vstClose"))();
+               FreeLibrary(hVSTHost);
+               hVSTHost = NULL;
+       }
+#endif
+}
+
+
+
+
+HINSTANCE hInst = NULL;
+HWND hConfigWnd = NULL;
+
+void set_config_hwnd(HWND hwnd)
+{
+       if(hwnd)
+               hConfigWnd = hwnd;
+}
+
+// Create Window
+BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
+{
+       HICON *hIcon;
+
+       hInst = hInstance;
+       hIcon = (HICON *)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON_TIMIDITY), IMAGE_ICON, 16, 16, 0);
+       if ( hConfigWnd != NULL ) {
+               DestroyWindow ( hConfigWnd );
+               hConfigWnd = NULL;
+       }       
+       // Create Window
+       PrefWndCreate(NULL, 0); // set hConfigWnd       
+       if (hIcon!=NULL)
+               SendMessage(hConfigWnd, WM_SETICON,FALSE, (LPARAM)hIcon);
+       {  // Set the title of the main window again.
+               char buffer[256];
+               SendMessage( hConfigWnd, WM_GETTEXT, (WPARAM)255, (LPARAM)buffer);
+               SendMessage( hConfigWnd, WM_SETTEXT, (WPARAM)0, (LPARAM)buffer);
+       }
+       if (!hConfigWnd)
+               return FALSE;
+       ShowWindow(hConfigWnd, nCmdShow);
+       UpdateWindow(hConfigWnd);
+       return TRUE;
+}
+
+int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
+{
+       static int init_flg = 0;
+       MSG msg;
+       HACCEL hAccelTable;
+       
+       if(init_flg)
+               return FALSE;
+       init_flg = 1;
+       if(lpCmdLine[0] == 0){
+               // \8bó\82Ì\8fê\8d\87 kbtimsetup.exe\82Ì\83f\83B\83\8c\83N\83g\83\8a\82É\82 \82é kbtim.ini
+               char buffer[FILEPATH_MAX] = {0};
+               char *p;
+               HMODULE hInst = GetModuleHandle(0);             
+               if(GetModuleFileName(hInst, buffer, FILEPATH_MAX - 1)){
+                       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(IniPath, buffer, FILEPATH_MAX);
+               IniPath[FILEPATH_MAX - 1] = '\0';
+               strcat(IniPath,"kbtim.ini");
+       }else{
+               // ini\8eæ\93¾ \83v\83\89\83O\83C\83\93\82Æ\83t\83@\83C\83\8b\96¼\82ª\93¯\82\82Å\8ag\92£\8eq\82ª INI   
+               int i, last = 0;
+               for(i = 0; i < FILEPATH_MAX; i++){
+                       if(lpCmdLine[i] == '\0')
+                               break;
+                       else if(lpCmdLine[i] == '.')
+                               last = i;
+               }
+               if(last){
+                       int j = 0;
+                       for(i = 0; i < last; i++){
+                               if(lpCmdLine[i] != '"')
+                                       IniPath[j++] = lpCmdLine[i];
+                       }
+                       IniPath[j] = '\0';
+                       strcat(IniPath, ".ini\0");
+               }
+       }
+       if (!InitInstance (hInstance, nCmdShow)) // Create Window
+               return FALSE;
+#if 0 // accel
+       hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_CONFIG_GUI));     
+       while (GetMessage(&msg, NULL, 0, 0)){ // message loop
+               if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){
+                       TranslateMessage(&msg);
+                       DispatchMessage(&msg);
+               }
+       }
+#else
+       while( GetMessage(&msg,NULL,0,0) ){ // message loop
+               TranslateMessage(&msg);
+               DispatchMessage(&msg);
+       }
+#endif
+       return (int) msg.wParam;
+}
+
+