1 /*
2 	TiMidity++ -- MIDI to WAVE converter and player
3 	Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>
4 	Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>
5 
6 	This program is free software; you can redistribute it and/or modify
7 	it under the terms of the GNU General Public License as published by
8 	the Free Software Foundation; either version 2 of the License, or
9 	(at your option) any later version.
10 
11 	This program is distributed in the hope that it will be useful,
12 	but WITHOUT ANY WARRANTY; without even the implied warranty of
13 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 	GNU General Public License for more details.
15 
16 	You should have received a copy of the GNU General Public License
17 	along with this program; if not, write to the Free Software
18         Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 
20 	w32g_pref.c: Written by Daisuke Aoki <dai@y7.net>
21 */
22 #ifdef HAVE_CONFIG_H
23 #include "config.h"
24 #endif /* HAVE_CONFIG_H */
25 #include "interface.h"
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <process.h>
29 #include <stddef.h>
30 #include <windows.h>
31 #undef RC_NONE
32 #include <commctrl.h>
33 #ifndef NO_STRING_H
34 #include <string.h>
35 #else
36 #include <strings.h>
37 #endif
38 
39 #include "timidity.h"
40 #include "common.h"
41 #include "instrum.h"
42 #include "playmidi.h"
43 #include "readmidi.h"
44 #include "output.h"
45 #include "controls.h"
46 #include "tables.h"
47 #include "miditrace.h"
48 #include "reverb.h"
49 #ifdef SUPPORT_SOUNDSPEC
50 #include "soundspec.h"
51 #endif /* SUPPORT_SOUNDSPEC */
52 #include "recache.h"
53 #include "arc.h"
54 #include "strtab.h"
55 #include "wrd.h"
56 #include "mid.defs"
57 
58 #include "w32g.h"
59 #include "w32g_res.h"
60 #include "w32g_utl.h"
61 #include "w32g_pref.h"
62 
63 #ifdef AU_GOGO
64 /* #include <musenc.h>		/* for gogo */
65 #include <gogo/gogo.h>		/* for gogo */
66 #include "gogo_a.h"
67 #endif
68 
69 /* TiMidity Win32GUI preference / PropertySheet */
70 
71 #ifndef IA_W32G_SYN
72 extern void w32g_restart(void);
73 #endif
74 extern void set_gogo_opts_use_commandline_options(char *commandline);
75 
76 extern void restore_voices(int save_voices);
77 
78 extern void TracerWndApplyQuietChannel( ChannelBitMask quietchannels_ );
79 
80 volatile int PrefWndDoing = 0;
81 
82 static void PrefSettingApply(void);
83 
84 static volatile int PrefWndSetOK = 0;
85 static HWND hPrefWnd = NULL;
86 static BOOL APIENTRY CALLBACK PrefWndDialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);
87 static BOOL APIENTRY PrefPlayerDialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);
88 static BOOL APIENTRY PrefTiMidity1DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);
89 static BOOL APIENTRY PrefTiMidity2DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);
90 static BOOL APIENTRY PrefTiMidity3DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);
91 static BOOL APIENTRY PrefTiMidity4DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);
92 #ifdef IA_W32G_SYN
93 static BOOL APIENTRY PrefSyn1DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);
94 #endif
95 static int DlgOpenConfigFile(char *Filename, HWND hwnd);
96 static int DlgOpenOutputFile(char *Filename, HWND hwnd);
97 
98 static int vorbisCofigDialog(void);
99 static int gogoCofigDialog(void);
100 
101 //#if defined(__CYGWIN32__) || defined(__MINGW32__)
102 #if 0 /* New version of mingw */
103 //#define pszTemplate	u1.pszTemplate
104 //#define pszIcon		u2.pszIcon
105 #ifndef NONAMELESSUNION
106 #define NONAMELESSUNION
107 #endif
108 #ifndef DUMMYUNIONNAME
109 #define DUMMYUNIONNAME	u1
110 #endif
111 #ifndef DUMMYUNIONNAME2
112 #define DUMMYUNIONNAME2	u2
113 #endif
114 #ifndef DUMMYUNIONNAME3
115 #define DUMMYUNIONNAME3	u3
116 #endif
117 #endif
118 
119 #ifdef IA_W32G_SYN
120 static char **GetMidiINDrivers ( void );
121 #endif
122 
123 #define WM_MYSAVE (WM_USER + 100)
124 #define WM_MYRESTORE (WM_USER + 101)
125 
126 typedef struct pref_page_t_ {
127 	int index;
128 	char *title;
129 	HWND hwnd;
130 	UINT control;
131 	DLGPROC dlgproc;
132 	int opt;
133 } pref_page_t;
134 
135 static pref_page_t pref_pages_ja[] = {
136 	{ 0, "�v���C��", (HWND)NULL, IDD_PREF_PLAYER, (DLGPROC) PrefPlayerDialogProc, 0 },
137 	{ 1, "�G�t�F�N�g", (HWND)NULL, IDD_PREF_TIMIDITY1, (DLGPROC) PrefTiMidity1DialogProc, 0 },
138 	{ 2, "���̑�", (HWND)NULL, IDD_PREF_TIMIDITY2, (DLGPROC) PrefTiMidity2DialogProc, 0 },
139 	{ 3, "�o��", (HWND)NULL, IDD_PREF_TIMIDITY3, (DLGPROC) PrefTiMidity3DialogProc, 0 },
140 	{ 4, "�`�����l��", (HWND)NULL, IDD_PREF_TIMIDITY4, (DLGPROC) PrefTiMidity4DialogProc, 0 },
141 #ifdef IA_W32G_SYN
142 	{ 5, "�V���Z�T�C�U", (HWND)NULL, IDD_PREF_SYN1, (DLGPROC) PrefSyn1DialogProc, 0 },
143 #endif
144 };
145 
146 static pref_page_t pref_pages_en[] = {
147 	{ 0, "Player", (HWND)NULL, IDD_PREF_PLAYER_EN, (DLGPROC) PrefPlayerDialogProc, 0 },
148 	{ 1, "Effect", (HWND)NULL, IDD_PREF_TIMIDITY1_EN, (DLGPROC) PrefTiMidity1DialogProc, 0 },
149 	{ 2, "Misc", (HWND)NULL, IDD_PREF_TIMIDITY2_EN, (DLGPROC) PrefTiMidity2DialogProc, 0 },
150 	{ 3, "Output", (HWND)NULL, IDD_PREF_TIMIDITY3_EN, (DLGPROC) PrefTiMidity3DialogProc, 0 },
151 	{ 4, "Channel", (HWND)NULL, IDD_PREF_TIMIDITY4_EN, (DLGPROC) PrefTiMidity4DialogProc, 0 },
152 #ifdef IA_W32G_SYN
153 	{ 5, "Synthesizer", (HWND)NULL, IDD_PREF_SYN1_EN, (DLGPROC) PrefSyn1DialogProc, 0 },
154 #endif
155 };
156 
157 #ifndef IA_W32G_SYN
158 #define PREF_PAGE_MAX 5
159 #else
160 #define PREF_PAGE_MAX 6
161 #endif
162 
163 static pref_page_t *pref_pages;
PrefWndCreatePage(HWND hwnd)164 static void PrefWndCreatePage ( HWND hwnd )
165 {
166 	int i;
167 	RECT rc;
168 	HWND hwnd_tab;
169 
170 #ifdef IA_W32G_SYN
171 	GetMidiINDrivers ();
172 #endif
173 
174 	switch(PlayerLanguage) {
175 		case LANGUAGE_JAPANESE:
176 			pref_pages = pref_pages_ja;
177 			break;
178 		default:
179 		case LANGUAGE_ENGLISH:
180 			pref_pages = pref_pages_en;
181 			break;
182 	}
183 
184 	hwnd_tab = GetDlgItem ( hwnd, IDC_TAB_MAIN );
185 	for ( i = 0; i < PREF_PAGE_MAX; i++ ) {
186 		TC_ITEM tci;
187     tci.mask = TCIF_TEXT;
188     tci.pszText = pref_pages[i].title;
189 		tci.cchTextMax = strlen ( pref_pages[i].title );
190 		SendMessage ( hwnd_tab, TCM_INSERTITEM, (WPARAM)i, (LPARAM)&tci );
191 	}
192 	GetClientRect ( hwnd_tab, &rc );
193 	SendDlgItemMessage ( hwnd, IDC_TAB_MAIN, TCM_ADJUSTRECT, (WPARAM)0, (LPARAM)&rc );
194 	for ( i = 0; i < PREF_PAGE_MAX; i++ ) {
195 		pref_pages[i].hwnd = CreateDialog ( hInst, MAKEINTRESOURCE(pref_pages[i].control),
196 			hwnd, pref_pages[i].dlgproc );
197     ShowWindow ( pref_pages[i].hwnd, SW_HIDE );
198 		MoveWindow ( pref_pages[i].hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE );
199 	}
200 }
201 
PrefWndCreate(HWND hwnd)202 void PrefWndCreate(HWND hwnd)
203 {
204 	VOLATILE_TOUCH(PrefWndDoing);
205 	if(PrefWndDoing)
206 		return;
207 	PrefWndDoing = 1;
208 	PrefWndSetOK = 1;
209 
210 	switch(PlayerLanguage) {
211 		case LANGUAGE_JAPANESE:
212 			DialogBox ( hInst, MAKEINTRESOURCE(IDD_DIALOG_PREF), hwnd, PrefWndDialogProc );
213 			break;
214 		default:
215 		case LANGUAGE_ENGLISH:
216 			DialogBox ( hInst, MAKEINTRESOURCE(IDD_DIALOG_PREF_EN), hwnd, PrefWndDialogProc );
217 			break;
218 	}
219 	hPrefWnd = NULL;
220 	PrefWndSetOK = 0;
221 	PrefWndDoing = 0;
222 	return;
223 }
224 
PrefWndDialogProc(HWND hwnd,UINT uMess,WPARAM wParam,LPARAM lParam)225 static BOOL APIENTRY CALLBACK PrefWndDialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
226 {
227 	int i;
228 
229 	switch (uMess){
230 	case WM_INITDIALOG:
231 	{
232 		hPrefWnd = hwnd;
233 		PrefWndCreatePage ( hwnd );
234 		SendDlgItemMessage ( hwnd, IDC_TAB_MAIN, TCM_SETCURSEL, (WPARAM)0, (LPARAM)0 );
235 		ShowWindow ( pref_pages[0].hwnd, TRUE );
236 		return TRUE;
237 	}
238 	case WM_COMMAND:
239 		switch (LOWORD(wParam)) {
240 		case IDOK:
241 			for ( i = 0; i < PREF_PAGE_MAX; i++ ) {
242 				SendMessage ( pref_pages[i].hwnd, WM_MYSAVE, (WPARAM)0, (LPARAM)0 );
243 			}
244 			PrefSettingApply();
245 			SetWindowLong(hwnd,	DWL_MSGRESULT, TRUE);
246 			EndDialog ( hwnd, TRUE );
247 			return TRUE;
248 		case IDCANCEL:
249 			SetWindowLong(hwnd,	DWL_MSGRESULT, FALSE);
250 			EndDialog ( hwnd, FALSE );
251 			return TRUE;
252 		case IDC_BUTTON_APPLY:
253 			for ( i = 0; i < PREF_PAGE_MAX; i++ ) {
254 				SendMessage ( pref_pages[i].hwnd, WM_MYSAVE, (WPARAM)0, (LPARAM)0 );
255 			}
256 			PrefSettingApply();
257 #ifndef IA_W32G_SYN
258 			TracerWndApplyQuietChannel(st_temp->quietchannels);
259 #endif
260 			SetWindowLong(hwnd,	DWL_MSGRESULT, TRUE);
261 			return TRUE;
262 		}
263 		break;
264 
265 	case WM_NOTIFY:
266 	{
267 		int idCtrl = (int) wParam;
268     LPNMHDR pnmh = (LPNMHDR) lParam;
269 		if ( pnmh->idFrom == IDC_TAB_MAIN ) {
270 			switch ( pnmh->code ) {
271 			case TCN_SELCHANGE:
272 			{
273 				int nIndex = SendDlgItemMessage ( hwnd, IDC_TAB_MAIN, TCM_GETCURSEL, (WPARAM)0, (LPARAM)0);
274 				for ( i = 0; i < PREF_PAGE_MAX; i++ ) {
275 					if ( nIndex == i ) {
276 						ShowWindow ( pref_pages[i].hwnd, TRUE );
277 					} else {
278 						ShowWindow ( pref_pages[i].hwnd, FALSE );
279 					}
280 				}
281 			}
282 				return TRUE;
283 			}
284 		}
285 		break;
286 	}
287 
288 	case WM_SIZE:
289 	{
290 		RECT rc;
291 		HWND hwnd_tab = GetDlgItem ( hwnd, IDC_TAB_MAIN );
292 		GetClientRect ( hwnd_tab, &rc );
293 		SendDlgItemMessage ( hwnd, IDC_TAB_MAIN, TCM_ADJUSTRECT, (WPARAM)TRUE, (LPARAM)&rc );
294 		for ( i = 0; i < PREF_PAGE_MAX; i++ ) {
295 			MoveWindow ( pref_pages[i].hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE );
296 		}
297 		return TRUE;
298 	}
299 
300 	case WM_CLOSE:
301 		break;
302 
303 	default:
304 	  break;
305 	}
306 
307 	return FALSE;
308 }
309 
310 //			SetWindowLong(hwnd,	DWL_MSGRESULT, FALSE);
311 
312 #define DLG_CHECKBUTTON_TO_FLAG(hwnd,ctlid,x)	\
313 	((SendDlgItemMessage((hwnd),(ctlid),BM_GETCHECK,0,0))?((x)=1):((x)=0))
314 #define DLG_FLAG_TO_CHECKBUTTON(hwnd,ctlid,x)	\
315 	((x)?(SendDlgItemMessage((hwnd),(ctlid),BM_SETCHECK,1,0)):\
316 	(SendDlgItemMessage((hwnd),(ctlid),BM_SETCHECK,0,0)))
317 
318 
319 extern void TracerWndApplyQuietChannel( ChannelBitMask quietchannels_ );
320 
321 #ifndef IA_W32G_SYN
322 /* st_temp, sp_temp ��K�p����
323  * ����: MainThread ����̌Ăяo���֎~�A�댯�I
324  */
PrefSettingApplyReally(void)325 void PrefSettingApplyReally(void)
326 {
327 	int restart;
328 	extern int IniFileAutoSave;
329 
330 	free_instruments(1);
331 	if(play_mode->fd != -1)
332 		play_mode->close_output();
333 
334 	restart = (PlayerLanguage != sp_temp->PlayerLanguage);
335 //	restart |= (strcmp(sp_temp->ConfigFile,ConfigFile) != 0);
336 	if(sp_temp->PlayerLanguage == LANGUAGE_JAPANESE)
337 		strcpy(st_temp->output_text_code, "SJIS");
338 	else
339 		strcpy(st_temp->output_text_code, "ASCII");
340 	ApplySettingPlayer(sp_temp);
341 	ApplySettingTiMidity(st_temp);
342 	SaveSettingPlayer(sp_current);
343 	SaveSettingTiMidity(st_current);
344 	memcpy(sp_temp, sp_current, sizeof(SETTING_PLAYER));
345 	memcpy(st_temp, st_current, sizeof(SETTING_TIMIDITY));
346 	restore_voices(1);
347 	PrefWndSetOK = 0;
348 	if(IniFileAutoSave)
349 		SaveIniFile(sp_current, st_current);
350 	if(restart &&
351 	   MessageBox(hListWnd,"Restart TiMidity?", "TiMidity",
352 				  MB_YESNO)==IDYES)
353 	{
354 		w32g_restart();
355 //		PrefWndDoing = 0;
356 	}
357 }
358 #endif
359 
360 #ifdef IA_W32G_SYN
361 extern int w32g_syn_do_before_pref_apply ( void );
362 extern int w32g_syn_do_after_pref_apply ( void );
363 #endif
364 
365 extern int IniFileAutoSave;
PrefSettingApply(void)366 static void PrefSettingApply(void)
367 {
368 #ifndef IA_W32G_SYN
369 	 w32g_send_rc(RC_EXT_APPLY_SETTING, 0);
370 #else
371 	int before_pref_apply_ok;
372 	before_pref_apply_ok = ( w32g_syn_do_before_pref_apply () == 0 );
373 	ApplySettingPlayer(sp_temp);
374 	ApplySettingTiMidity(st_temp);
375 	SaveSettingPlayer(sp_current);
376 	SaveSettingTiMidity(st_current);
377 	memcpy(sp_temp, sp_current, sizeof(SETTING_PLAYER));
378 	memcpy(st_temp, st_current, sizeof(SETTING_TIMIDITY));
379 	if(IniFileAutoSave)
380 		SaveIniFile(sp_current, st_current);
381 	if ( before_pref_apply_ok )
382 		w32g_syn_do_after_pref_apply ();
383 	PrefWndSetOK = 0;
384 //	PrefWndDoing = 0;
385 #endif
386 }
387 
reload_cfg(void)388 void reload_cfg(void)
389 {
390 	free_instrument_map();
391 	clean_up_pathlist();
392 	free_instruments(0);
393 	tmdy_free_config();
394 	timidity_start_initialize();
395 	read_config_file ( sp_temp->ConfigFile, 0 );
396 	PrefSettingApply();
397 #ifndef IA_W32G_SYN
398 	TracerWndApplyQuietChannel(st_temp->quietchannels);
399 #endif
400 }
401 
402 static BOOL APIENTRY
PrefPlayerDialogProc(HWND hwnd,UINT uMess,WPARAM wParam,LPARAM lParam)403 PrefPlayerDialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
404 {
405 	static int initflag = 1;
406 	switch (uMess){
407 	case WM_INITDIALOG:
408 		SetDlgItemText(hwnd,IDC_EDIT_CONFIG_FILE,TEXT(sp_temp->ConfigFile));
409 		{
410 		char buff[64];
411 		sprintf(buff,"%d",sp_temp->SubWindowMax);
412 		SetDlgItemText(hwnd,IDC_EDIT_SUBWINDOW_MAX,TEXT(buff));
413 		}
414 		switch(sp_temp->PlayerLanguage){
415 		case LANGUAGE_ENGLISH:
416 			CheckRadioButton(hwnd,IDC_RADIOBUTTON_JAPANESE,IDC_RADIOBUTTON_ENGLISH,
417 			IDC_RADIOBUTTON_ENGLISH);
418 			break;
419 		default:
420 		case LANGUAGE_JAPANESE:
421 			CheckRadioButton(hwnd,IDC_RADIOBUTTON_JAPANESE,IDC_RADIOBUTTON_ENGLISH,
422 			IDC_RADIOBUTTON_JAPANESE);
423 			break;
424 		}
425 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_AUTOQUIT,
426 								strchr(st_temp->opt_ctl + 1, 'x'));
427 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_AUTOUNIQ,
428 								strchr(st_temp->opt_ctl + 1, 'u'));
429 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_AUTOREFINE,
430 								strchr(st_temp->opt_ctl + 1, 'R'));
431 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_AUTOSTART,
432 								strchr(st_temp->opt_ctl + 1, 'a'));
433 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_NOT_CONTINUE,
434 								strchr(st_temp->opt_ctl + 1, 'C'));
435 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_NOT_DRAG_START,
436 								!strchr(st_temp->opt_ctl + 1, 'd'));
437 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_NOT_LOOPING,
438 								!strchr(st_temp->opt_ctl + 1, 'l'));
439 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_RANDOM,
440 								strchr(st_temp->opt_ctl + 1, 'r'));
441 
442 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECK_SEACHDIRRECURSIVE,
443 								sp_temp->SeachDirRecursive);
444 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECK_DOCWNDINDEPENDENT,
445 								sp_temp->DocWndIndependent);
446 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECK_DOCWNDAUTOPOPUP,
447 								sp_temp->DocWndAutoPopup);
448 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECK_INIFILE_AUTOSAVE,
449 								sp_temp->IniFileAutoSave);
450 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECK_AUTOLOAD_PLAYLIST,
451 								sp_temp->AutoloadPlaylist);
452 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECK_AUTOSAVE_PLAYLIST,
453 								sp_temp->AutosavePlaylist);
454 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECK_POS_SIZE_SAVE,
455 								sp_temp->PosSizeSave);
456 		initflag = 0;
457 		break;
458 	case WM_COMMAND:
459 	switch (LOWORD(wParam)) {
460 		case IDC_BUTTON_CONFIG_FILE:
461 			{
462 				char filename[MAXPATH+1];
463 				filename[0] = '\0';
464 				SendDlgItemMessage(hwnd,IDC_EDIT_CONFIG_FILE,WM_GETTEXT,
465 					(WPARAM)MAX_PATH,(LPARAM)TEXT(filename));
466 				if(!DlgOpenConfigFile(filename,hwnd))
467 				if(filename[0]!='\0')
468 						SetDlgItemText(hwnd,IDC_EDIT_CONFIG_FILE,TEXT(filename));
469 	   }
470 			break;
471 		case IDC_BUTTON_CFG_EDIT:
472 
473 		if(getenv("TIMIDITY_CFG_EDITOR") != NULL){
474 			ShellExecute(NULL, "open", getenv("TIMIDITY_CFG_EDITOR"), ConfigFile, NULL, SW_SHOWNORMAL);
475 		}else{
476 			ShellExecute(NULL, "open", "notepad.exe", ConfigFile, NULL, SW_SHOWNORMAL);
477 		}
478 			break;
479 /*			ShellExecute(NULL, "open", "notepad.exe", ConfigFile, NULL, SW_SHOWNORMAL);
480 			break;
481 		case IDC_BUTTON_CFG_DIR:
482 			ShellExecute(NULL, "open", ConfigFileOpenDir, NULL, NULL, SW_SHOWNORMAL);
483 			break;*/
484 		case IDC_BUTTON_CFG_RELOAD:
485 		{
486 			int i;
487 			for (i = 0; i < PREF_PAGE_MAX; i++ ) {
488 				SendMessage ( pref_pages[i].hwnd, WM_MYSAVE, (WPARAM)0, (LPARAM)0 );
489 			}
490 			reload_cfg();
491 			SetWindowLong(hwnd,	DWL_MSGRESULT, TRUE);
492 		}
493 			break;
494 		case IDC_RADIOBUTTON_JAPANESE:
495 		case IDC_RADIOBUTTON_ENGLISH:
496 			break;
497 		default:
498 		break;
499 	  }
500 		PrefWndSetOK = 1;
501 		break;
502 
503 	case WM_MYSAVE:
504 	{
505 		if ( initflag ) break;
506 		SendDlgItemMessage(hwnd,IDC_EDIT_CONFIG_FILE,WM_GETTEXT,
507 			(WPARAM)MAX_PATH,(LPARAM)TEXT(sp_temp->ConfigFile));
508 		{
509 		char buff[64];
510 		SendDlgItemMessage(hwnd,IDC_EDIT_SUBWINDOW_MAX,WM_GETTEXT,
511 			(WPARAM)60,(LPARAM)TEXT(buff));
512 		sp_temp->SubWindowMax = atoi(buff);
513 		if ( sp_temp->SubWindowMax < 1 )
514 			sp_temp->SubWindowMax = 1;
515 		if ( sp_temp->SubWindowMax > 10 )
516 			sp_temp->SubWindowMax = 10;
517 		}
518 		if(SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_ENGLISH,BM_GETCHECK,0,0)){
519 			sp_temp->PlayerLanguage = LANGUAGE_ENGLISH;
520 		} else if(SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_JAPANESE,BM_GETCHECK,0,0)){
521 			sp_temp->PlayerLanguage = LANGUAGE_JAPANESE;
522 		}
523 	 {
524 	 int flag;
525 
526 		SettingCtlFlag(st_temp, 'x',
527 							DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_AUTOQUIT,flag));
528 		SettingCtlFlag(st_temp, 'u',
529 							DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_AUTOUNIQ,flag));
530 		SettingCtlFlag(st_temp, 'R',
531 							DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_AUTOREFINE,flag));
532 		SettingCtlFlag(st_temp, 'a',
533 							DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_AUTOSTART,flag));
534 		SettingCtlFlag(st_temp, 'C',
535 							DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_NOT_CONTINUE,flag));
536 		SettingCtlFlag(st_temp, 'd',
537 							!DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_NOT_DRAG_START,flag));
538 		SettingCtlFlag(st_temp, 'l',
539 							!DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_NOT_LOOPING,flag));
540 		SettingCtlFlag(st_temp, 'r',
541 							DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_RANDOM,flag));
542 		}
543 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECK_SEACHDIRRECURSIVE,
544 			sp_temp->SeachDirRecursive);
545 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECK_DOCWNDINDEPENDENT,
546 			sp_temp->DocWndIndependent);
547 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECK_DOCWNDAUTOPOPUP,
548 			sp_temp->DocWndAutoPopup);
549 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECK_INIFILE_AUTOSAVE,
550 			sp_temp->IniFileAutoSave);
551 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECK_AUTOLOAD_PLAYLIST,
552 			sp_temp->AutoloadPlaylist);
553 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECK_AUTOSAVE_PLAYLIST,
554 			sp_temp->AutosavePlaylist);
555 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECK_POS_SIZE_SAVE,
556 			sp_temp->PosSizeSave);
557 		SetWindowLong(hwnd,DWL_MSGRESULT,FALSE);
558 	}
559 		break;
560 	case WM_SIZE:
561 		return FALSE;
562 	case WM_CLOSE:
563 		break;
564 	default:
565 	  break;
566 	}
567 	return FALSE;
568 }
569 
570 // IDC_COMBO_REVERB
571 #define cb_num_IDC_COMBO_REVERB 5
572 
573 static char *cb_info_IDC_COMBO_REVERB_en[] = {
574 	"No Reverb",
575 	"Standard Reverb",
576 	"Global Old Reverb",
577 	"New Reverb",
578 	"Global New Reverb",
579 };
580 
581 static char *cb_info_IDC_COMBO_REVERB_jp[] = {
582 	"���o�[�u�Ȃ�",
583 	"�W�����o�[�u",
584 	"�W�����o�[�u�i�O���[�o���j",
585 	"�V���o�[�u",
586 	"�V���o�[�u�i�O���[�o���j",
587 };
588 
589 // IDC_COMBO_CHORUS
590 #define cb_num_IDC_COMBO_CHORUS 3
591 
592 static char *cb_info_IDC_COMBO_CHORUS_en[] = {
593 	"No Chorus",
594 	"Standard Chorus",
595 	"Surround Chorus",
596 };
597 
598 static char *cb_info_IDC_COMBO_CHORUS_jp[] = {
599 	"�R�[���X�Ȃ�",
600 	"�W���R�[���X",
601 	"�T���E���h�R�[���X",
602 };
603 
604 // IDC_COMBO_DELAY
605 #define cb_num_IDC_COMBO_DELAY 2
606 
607 static char *cb_info_IDC_COMBO_DELAY_en[] = {
608 	"No Delay",
609 	"Standard Delay",
610 };
611 
612 static char *cb_info_IDC_COMBO_DELAY_jp[] = {
613 	"�f�B���C�Ȃ�",
614 	"�W���f�B���C",
615 };
616 
617 // IDC_COMBO_LPF
618 #define cb_num_IDC_COMBO_LPF 3
619 
620 static char *cb_info_IDC_COMBO_LPF_en[] = {
621 	"No Filter",
622 	"Lowpass Filter (12dB/oct)",
623 	"Lowpass Filter (24dB/oct)",
624 };
625 
626 static char *cb_info_IDC_COMBO_LPF_jp[] = {
627 	"�t�B���^�Ȃ�",
628 	"LPF (12dB/oct)",
629 	"LPF (24dB/oct)",
630 };
631 
632 // IDC_COMBO_MODULE
633 struct _ModuleList {
634 	int num;
635 	char *name;
636 };
637 
638 static struct _ModuleList cb_info_IDC_COMBO_MODULE[] = {
639 	MODULE_TIMIDITY_DEFAULT, "TiMidity++ Default",
640 	MODULE_SC55, "SC-55",
641 	MODULE_SC88, "SC-88",
642 	MODULE_SC88PRO, "SC-88Pro",
643 	MODULE_SC8850, "SC-8850",
644 	MODULE_MU50, "MU-50",
645 	MODULE_MU80, "MU-80",
646 	MODULE_MU90, "MU-90",
647 	MODULE_MU100, "MU-100",
648 	MODULE_SBLIVE, "Sound Blaster Live!",
649 	MODULE_SBAUDIGY, "Sound Blaster Audigy",
650 	MODULE_TIMIDITY_SPECIAL1, "TiMidity++ Special 1",
651 	MODULE_TIMIDITY_DEBUG, "TiMidity++ Debug",
652 };
653 
654 #define cb_num_IDC_COMBO_MODULE (sizeof(cb_info_IDC_COMBO_MODULE) / sizeof(struct _ModuleList))
655 
find_combo_module_item(int val)656 static int find_combo_module_item(int val)
657 {
658 	int i;
659 	for (i = 0; i < cb_num_IDC_COMBO_MODULE; i++)
660 		if (val == cb_info_IDC_COMBO_MODULE[i].num) {return i;}
661 	return 0;
662 }
663 
664 static BOOL APIENTRY
PrefTiMidity1DialogProc(HWND hwnd,UINT uMess,WPARAM wParam,LPARAM lParam)665 PrefTiMidity1DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
666 {
667 	static int initflag = 1;
668 	int i;
669 	char **cb_info;
670 	switch (uMess){
671 	case WM_INITDIALOG:
672 		// CHORUS
673 		if (PlayerLanguage == LANGUAGE_JAPANESE)
674 			cb_info = cb_info_IDC_COMBO_CHORUS_jp;
675 		else
676 			cb_info = cb_info_IDC_COMBO_CHORUS_en;
677 
678 		for (i = 0; i < cb_num_IDC_COMBO_CHORUS; i++)
679 			SendDlgItemMessage(hwnd, IDC_COMBO_CHORUS,
680 					CB_INSERTSTRING, (WPARAM) -1,
681 					(LPARAM) cb_info[i]);
682 
683 		if(GetDlgItemInt(hwnd, IDC_EDIT_CHORUS, NULL, FALSE)==0)
684 			SetDlgItemInt(hwnd, IDC_EDIT_CHORUS, 1, TRUE);
685 		if (st_temp->opt_surround_chorus)
686 			i = 2;
687 		else
688 			i = st_temp->opt_chorus_control;
689 		if (i >= 0) {
690 			SendDlgItemMessage(hwnd, IDC_COMBO_CHORUS, CB_SETCURSEL,
691 					(WPARAM) i, (LPARAM) 0);
692 			SendDlgItemMessage(hwnd, IDC_CHECKBOX_CHORUS_LEVEL, BM_SETCHECK, 0, 0);
693 		} else {
694 			SendDlgItemMessage(hwnd, IDC_COMBO_CHORUS, CB_SETCURSEL,
695 					(WPARAM) ((-i) / 128 + 1), (LPARAM) 0);
696 			SendDlgItemMessage(hwnd, IDC_CHECKBOX_CHORUS_LEVEL, BM_SETCHECK, 1, 0);
697 			SetDlgItemInt(hwnd, IDC_EDIT_CHORUS, -i, TRUE);
698 		}
699 		SendMessage(hwnd, WM_COMMAND, IDC_CHECKBOX_CHORUS_LEVEL, 0);
700 		// REVERB
701 		if (PlayerLanguage == LANGUAGE_JAPANESE)
702 			cb_info = cb_info_IDC_COMBO_REVERB_jp;
703 		else
704 			cb_info = cb_info_IDC_COMBO_REVERB_en;
705 
706 		for (i = 0; i < cb_num_IDC_COMBO_REVERB; i++)
707 			SendDlgItemMessage(hwnd, IDC_COMBO_REVERB,
708 					CB_INSERTSTRING, (WPARAM) -1,
709 					(LPARAM) cb_info[i]);
710 
711 		if(GetDlgItemInt(hwnd, IDC_EDIT_REVERB, NULL, FALSE)==0)
712 			SetDlgItemInt(hwnd, IDC_EDIT_REVERB, 1, TRUE);
713 		if (st_temp->opt_reverb_control >= 0) {
714 			SendDlgItemMessage(hwnd, IDC_COMBO_REVERB, CB_SETCURSEL,
715 					(WPARAM) st_temp->opt_reverb_control, (LPARAM) 0);
716 			SendDlgItemMessage(hwnd, IDC_CHECKBOX_REVERB_LEVEL, BM_SETCHECK, 0, 0);
717 		} else {
718 			SendDlgItemMessage(hwnd, IDC_COMBO_REVERB, CB_SETCURSEL,
719 					(WPARAM) ((-st_temp->opt_reverb_control) / 128 + 1), (LPARAM) 0);
720 			SendDlgItemMessage(hwnd, IDC_CHECKBOX_REVERB_LEVEL, BM_SETCHECK, 1, 0);
721 			SetDlgItemInt(hwnd, IDC_EDIT_REVERB, (-st_temp->opt_reverb_control) % 128, TRUE);
722 		}
723 		SendMessage(hwnd, WM_COMMAND, IDC_CHECKBOX_REVERB_LEVEL, 0);
724 		// DELAY
725 		if (PlayerLanguage == LANGUAGE_JAPANESE)
726 			cb_info = cb_info_IDC_COMBO_DELAY_jp;
727 		else
728 			cb_info = cb_info_IDC_COMBO_DELAY_en;
729 
730 		for (i = 0; i < cb_num_IDC_COMBO_DELAY; i++)
731 			SendDlgItemMessage(hwnd, IDC_COMBO_DELAY,
732 					CB_INSERTSTRING, (WPARAM) -1,
733 					(LPARAM) cb_info[i]);
734 
735 		SendDlgItemMessage(hwnd, IDC_COMBO_DELAY, CB_SETCURSEL,
736 				(WPARAM) st_temp->opt_delay_control, (LPARAM) 0);
737 		// DEFAULT MODULE
738 		for (i = 0; i < cb_num_IDC_COMBO_MODULE; i++)
739 			SendDlgItemMessage(hwnd, IDC_COMBO_MODULE,
740 					CB_INSERTSTRING, (WPARAM) -1,
741 					(LPARAM) cb_info_IDC_COMBO_MODULE[i].name);
742 
743 		SendDlgItemMessage(hwnd, IDC_COMBO_MODULE, CB_SETCURSEL,
744 				(WPARAM) find_combo_module_item(st_temp->opt_default_module), (LPARAM) 0);
745 		// LPF
746 		if (PlayerLanguage == LANGUAGE_JAPANESE)
747 			cb_info = cb_info_IDC_COMBO_LPF_jp;
748 		else
749 			cb_info = cb_info_IDC_COMBO_LPF_en;
750 
751 		for (i = 0; i < cb_num_IDC_COMBO_LPF; i++)
752 			SendDlgItemMessage(hwnd, IDC_COMBO_LPF,
753 					CB_INSERTSTRING, (WPARAM) -1,
754 					(LPARAM) cb_info[i]);
755 
756 		SendDlgItemMessage(hwnd, IDC_COMBO_LPF, CB_SETCURSEL,
757 				(WPARAM) st_temp->opt_lpf_def, (LPARAM) 0);
758 		// L&R DELAY
759 		SetDlgItemInt(hwnd,IDC_EDIT_DELAY,st_temp->effect_lr_delay_msec,TRUE);
760 		if(st_temp->effect_lr_mode<0){
761 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DELAY,BM_SETCHECK,0,0);
762 		} else {
763 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DELAY,BM_SETCHECK,1,0);
764 			switch(st_temp->effect_lr_mode){
765 		case 0:
766 				CheckRadioButton(hwnd,IDC_RADIOBUTTON_DELAY_LEFT,IDC_RADIOBUTTON_DELAY_CENTER,
767 			IDC_RADIOBUTTON_DELAY_LEFT);
768 				break;
769 			case 1:
770 				CheckRadioButton(hwnd,IDC_RADIOBUTTON_DELAY_LEFT,IDC_RADIOBUTTON_DELAY_CENTER,
771 			IDC_RADIOBUTTON_DELAY_RIGHT);
772 				break;
773 			case 2:
774 		default:
775 				CheckRadioButton(hwnd,IDC_RADIOBUTTON_DELAY_LEFT,IDC_RADIOBUTTON_DELAY_CENTER,
776 			IDC_RADIOBUTTON_DELAY_CENTER);
777 				break;
778 		 }
779 	 }
780 		SendMessage(hwnd,WM_COMMAND,IDC_CHECKBOX_DELAY,0);
781 		// NOISESHARPING
782 	 SetDlgItemInt(hwnd,IDC_EDIT_NOISESHARPING,st_temp->noise_sharp_type,TRUE);
783 	 // Misc
784 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_MODWHEEL,st_temp->opt_modulation_wheel);
785 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_PORTAMENTO,st_temp->opt_portamento);
786 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_NRPNVIB,st_temp->opt_nrpn_vibrato);
787 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CHPRESS,st_temp->opt_channel_pressure);
788 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_OVOICE,st_temp->opt_overlap_voice_allow);
789 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TRACETEXT,st_temp->opt_trace_text_meta_event);
790 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TVAA,st_temp->opt_tva_attack);
791 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TVAD,st_temp->opt_tva_decay);
792 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TVAR,st_temp->opt_tva_release);
793 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_DRUM_EFFECT,st_temp->opt_drum_effect);
794 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_MOD_ENV,st_temp->opt_modulation_envelope);
795 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_PAN_DELAY,st_temp->opt_pan_delay);
796 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_EQ,st_temp->opt_eq_control);
797 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_IEFFECT,st_temp->opt_insertion_effect);
798 		SetDlgItemInt(hwnd,IDC_EDIT_MODIFY_RELEASE,st_temp->modify_release,TRUE);
799 		initflag = 0;
800 		break;
801 	case WM_COMMAND:
802 	switch (LOWORD(wParam)) {
803 	  case IDCLOSE:
804 		break;
805 		case IDC_CHECKBOX_CHORUS_LEVEL:
806 			if(SendDlgItemMessage(hwnd, IDC_CHECKBOX_CHORUS_LEVEL, BM_GETCHECK, 0, 0)){
807 				EnableWindow(GetDlgItem(hwnd, IDC_EDIT_CHORUS), TRUE);
808 			} else {
809 				EnableWindow(GetDlgItem(hwnd, IDC_EDIT_CHORUS), FALSE);
810 			}
811 			break;
812 		case IDC_CHECKBOX_REVERB_LEVEL:
813 			if(SendDlgItemMessage(hwnd, IDC_CHECKBOX_REVERB_LEVEL, BM_GETCHECK, 0, 0)){
814 				EnableWindow(GetDlgItem(hwnd, IDC_EDIT_REVERB), TRUE);
815 			} else {
816 				EnableWindow(GetDlgItem(hwnd, IDC_EDIT_REVERB), FALSE);
817 			}
818 			break;
819 	 case IDC_CHECKBOX_DELAY:
820 		case IDC_RADIOBUTTON_DELAY_LEFT:
821 		case IDC_RADIOBUTTON_DELAY_RIGHT:
822 		case IDC_RADIOBUTTON_DELAY_CENTER:
823 			if(!SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_DELAY_LEFT,BM_GETCHECK,0,0))
824 			if(!SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_DELAY_RIGHT,BM_GETCHECK,0,0))
825 			if(!SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_DELAY_CENTER,BM_GETCHECK,0,0))
826 				CheckRadioButton(hwnd,IDC_RADIOBUTTON_DELAY_LEFT,IDC_RADIOBUTTON_DELAY_CENTER,IDC_RADIOBUTTON_DELAY_CENTER);
827 			if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_DELAY,BM_GETCHECK,0,0)){
828 				EnableWindow(GetDlgItem(hwnd,IDC_RADIOBUTTON_DELAY_LEFT),TRUE);
829 				EnableWindow(GetDlgItem(hwnd,IDC_RADIOBUTTON_DELAY_RIGHT),TRUE);
830 				EnableWindow(GetDlgItem(hwnd,IDC_RADIOBUTTON_DELAY_CENTER),TRUE);
831 				EnableWindow(GetDlgItem(hwnd,IDC_EDIT_DELAY),TRUE);
832 		 } else {
833 				EnableWindow(GetDlgItem(hwnd,IDC_RADIOBUTTON_DELAY_LEFT),FALSE);
834 				EnableWindow(GetDlgItem(hwnd,IDC_RADIOBUTTON_DELAY_RIGHT),FALSE);
835 				EnableWindow(GetDlgItem(hwnd,IDC_RADIOBUTTON_DELAY_CENTER),FALSE);
836 				EnableWindow(GetDlgItem(hwnd,IDC_EDIT_DELAY),FALSE);
837 		 }
838 			break;
839 		default:
840 		PrefWndSetOK = 1;
841 		return FALSE;
842 		break;
843 	  }
844 		PrefWndSetOK = 1;
845 		break;
846 	case WM_MYSAVE:
847 	{
848 		if ( initflag ) break;
849 		// CHORUS
850 		st_temp->opt_chorus_control = (int)SendDlgItemMessage(hwnd, IDC_COMBO_CHORUS, CB_GETCURSEL, 0, 0);
851 		if (st_temp->opt_chorus_control && SendDlgItemMessage(hwnd, IDC_CHECKBOX_CHORUS_LEVEL, BM_GETCHECK, 0, 0)) {
852 			st_temp->opt_chorus_control = -(int)GetDlgItemInt(hwnd, IDC_EDIT_CHORUS, NULL, TRUE);
853 		}
854 		if (st_temp->opt_chorus_control == 2) {
855 			st_temp->opt_chorus_control = 1;
856 			st_temp->opt_surround_chorus = 1;
857 		} else {
858 			st_temp->opt_surround_chorus = 0;
859 		}
860   		// REVERB
861 		st_temp->opt_reverb_control = (int)SendDlgItemMessage(hwnd, IDC_COMBO_REVERB, CB_GETCURSEL, 0, 0);
862 		if(st_temp->opt_reverb_control && SendDlgItemMessage(hwnd, IDC_CHECKBOX_REVERB_LEVEL, BM_GETCHECK, 0, 0)) {
863 			st_temp->opt_reverb_control = -(int)GetDlgItemInt(hwnd, IDC_EDIT_REVERB, NULL, TRUE)
864 				- (st_temp->opt_reverb_control - 1) * 128;
865 		}
866 		// DELAY
867 		st_temp->opt_delay_control = (int)SendDlgItemMessage(hwnd, IDC_COMBO_DELAY, CB_GETCURSEL, 0, 0);
868 		// DEFAULT MODULE
869 		st_temp->opt_default_module = cb_info_IDC_COMBO_MODULE[(int)SendDlgItemMessage(hwnd, IDC_COMBO_MODULE, CB_GETCURSEL, 0, 0)].num;
870 		// LPF
871 		st_temp->opt_lpf_def = (int)SendDlgItemMessage(hwnd, IDC_COMBO_LPF, CB_GETCURSEL, 0, 0);
872 		// L&R DELAY
873 		st_temp->effect_lr_delay_msec = GetDlgItemInt(hwnd,IDC_EDIT_DELAY,NULL,FALSE);
874 		if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_DELAY,BM_GETCHECK,0,0)){
875 			if(SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_DELAY_LEFT,BM_GETCHECK,0,0)){
876 				st_temp->effect_lr_mode = 0;
877 			} else if(SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_DELAY_RIGHT,BM_GETCHECK,0,0)){
878 				st_temp->effect_lr_mode = 1;
879 			} else {
880 				st_temp->effect_lr_mode = 2;
881 			}
882 		} else {
883 			st_temp->effect_lr_mode = -1;
884 		}
885 		// NOISESHARPING
886 	 st_temp->noise_sharp_type = GetDlgItemInt(hwnd,IDC_EDIT_NOISESHARPING,NULL,FALSE);
887 	 // Misc
888 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_MODWHEEL,st_temp->opt_modulation_wheel);
889 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_PORTAMENTO,st_temp->opt_portamento);
890 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_NRPNVIB,st_temp->opt_nrpn_vibrato);
891 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_CHPRESS,st_temp->opt_channel_pressure);
892 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_OVOICE,st_temp->opt_overlap_voice_allow);
893 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_TRACETEXT,st_temp->opt_trace_text_meta_event);
894 	 st_temp->modify_release = GetDlgItemInt(hwnd,IDC_EDIT_MODIFY_RELEASE,NULL,FALSE);
895 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_TVAA,st_temp->opt_tva_attack);
896 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_TVAD,st_temp->opt_tva_decay);
897 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_TVAR,st_temp->opt_tva_release);
898 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_DRUM_EFFECT,st_temp->opt_drum_effect);
899 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_MOD_ENV,st_temp->opt_modulation_envelope);
900 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_PAN_DELAY,st_temp->opt_pan_delay);
901 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_EQ,st_temp->opt_eq_control);
902 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_IEFFECT,st_temp->opt_insertion_effect);
903 		SetWindowLong(hwnd,DWL_MSGRESULT,FALSE);
904 	}
905 		break;
906 	case WM_SIZE:
907 		return FALSE;
908 	case WM_CLOSE:
909 		break;
910 	default:
911 	  break;
912 	}
913 	return FALSE;
914 }
915 
char_count(char * s,int c)916 static int char_count(char *s, int c)
917 {
918 	 int n = 0;
919 	 while(*s)
920 		  n += (*s++ == c);
921 	 return n;
922 }
923 
924 // IDC_COMBO_(INIT|FORCE)_KEYSIG
925 static char *cb_info_IDC_COMBO_KEYSIG[] = {
926 	"Cb Maj / Ab Min (b7)",
927 	"Gb Maj / Eb Min (b6)",
928 	"Db Maj / Bb Min (b5)",
929 	"Ab Maj / F  Min (b4)",
930 	"Eb Maj / C  Min (b3)",
931 	"Bb Maj / G  Min (b2)",
932 	"F  Maj / D  Min (b1)",
933 	"C  Maj / A  Min (0)",
934 	"G  Maj / E  Min (#1)",
935 	"D  Maj / B  Min (#2)",
936 	"A  Maj / F# Min (#3)",
937 	"E  Maj / C# Min (#4)",
938 	"B  Maj / G# Min (#5)",
939 	"F# Maj / D# Min (#6)",
940 	"C# Maj / A# Min (#7)"
941 };
942 
943 static BOOL APIENTRY
PrefTiMidity2DialogProc(HWND hwnd,UINT uMess,WPARAM wParam,LPARAM lParam)944 PrefTiMidity2DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
945 {
946 	int i;
947 	static int initflag = 1;
948 
949 	switch (uMess){
950 	case WM_INITDIALOG:
951 		SetDlgItemInt(hwnd,IDC_EDIT_VOICES,st_temp->voices,FALSE);
952 		SetDlgItemInt(hwnd,IDC_EDIT_AMPLIFICATION,st_temp->amplification,FALSE);
953 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_FREE_INST,st_temp->free_instruments_afterwards);
954 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_ANTIALIAS,st_temp->antialiasing_allowed);
955 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_LOADINST_PLAYING,st_temp->opt_realtime_playing);
956 		SetDlgItemInt(hwnd,IDC_EDIT_CACHE_SIZE,st_temp->allocate_cache_size,FALSE);
957 
958 		SetDlgItemInt(hwnd,IDC_EDIT_REDUCE_VOICE,st_temp->reduce_voice_threshold,TRUE);
959 		SendDlgItemMessage(hwnd,IDC_CHECKBOX_REDUCE_VOICE,BM_SETCHECK,st_temp->reduce_voice_threshold,0);
960 		SetDlgItemInt(hwnd,IDC_EDIT_DEFAULT_TONEBANK,st_temp->default_tonebank,FALSE);
961 		SetDlgItemInt(hwnd,IDC_EDIT_SPECIAL_TONEBANK,st_temp->special_tonebank,TRUE);
962 		if(st_temp->special_tonebank<0){
963 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_SPECIAL_TONEBANK,BM_SETCHECK,0,0);
964 		} else {
965 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_SPECIAL_TONEBANK,BM_SETCHECK,1,0);
966 		}
967 		SendMessage(hwnd,WM_COMMAND,IDC_CHECKBOX_SPECIAL_TONEBANK,0);
968 		switch(st_temp->opt_default_mid){
969 	 case 0x41:
970 			CheckRadioButton(hwnd,IDC_RADIOBUTTON_GM,IDC_RADIOBUTTON_XG,IDC_RADIOBUTTON_GS);
971 			break;
972 	 case 0x43:
973 			CheckRadioButton(hwnd,IDC_RADIOBUTTON_GM,IDC_RADIOBUTTON_XG,IDC_RADIOBUTTON_XG);
974 			break;
975 		default:
976 	 case 0x7e:
977 			CheckRadioButton(hwnd,IDC_RADIOBUTTON_GM,IDC_RADIOBUTTON_XG,IDC_RADIOBUTTON_GM);
978 			break;
979 		}
980 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CTL_TRACE_PLAYING,
981 										strchr(st_temp->opt_ctl + 1, 't'));
982 		SetDlgItemInt(hwnd,IDC_EDIT_CTL_VEBOSITY,
983 							char_count(st_temp->opt_ctl + 1, 'v') -
984 							char_count(st_temp->opt_ctl + 1, 'q') + 1, TRUE);
985 		SetDlgItemInt(hwnd,IDC_EDIT_CONTROL_RATIO,st_temp->control_ratio,FALSE);
986 		SetDlgItemInt(hwnd,IDC_EDIT_DRUM_POWER,st_temp->opt_drum_power,FALSE);
987 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_AMP_COMPENSATION,st_temp->opt_amp_compensation);
988 		DLG_FLAG_TO_CHECKBUTTON(hwnd, IDC_CHECKBOX_PURE_INTONATION,
989 				st_temp->opt_pure_intonation);
990 		SendMessage(hwnd, WM_COMMAND, IDC_CHECKBOX_PURE_INTONATION, 0);
991 		DLG_FLAG_TO_CHECKBUTTON(hwnd, IDC_CHECKBOX_INIT_KEYSIG,
992 				(st_temp->opt_init_keysig != 8));
993 		SendMessage(hwnd, WM_COMMAND, IDC_CHECKBOX_PURE_INTONATION, 0);
994 		for (i = 0; i < 15; i++)
995 			SendDlgItemMessage(hwnd, IDC_COMBO_INIT_KEYSIG, CB_INSERTSTRING,
996 					(WPARAM) -1, (LPARAM) cb_info_IDC_COMBO_KEYSIG[i]);
997 		if (st_temp->opt_init_keysig == 8) {
998 			SendDlgItemMessage(hwnd, IDC_COMBO_INIT_KEYSIG, CB_SETCURSEL,
999 					(WPARAM) 7, (LPARAM) 0);
1000 			SendDlgItemMessage(hwnd, IDC_CHECKBOX_INIT_MI, BM_SETCHECK,
1001 					0, 0);
1002 		} else {
1003 			SendDlgItemMessage(hwnd, IDC_COMBO_INIT_KEYSIG, CB_SETCURSEL,
1004 					(WPARAM) st_temp->opt_init_keysig + 7 & 0x0f,
1005 					(LPARAM) 0);
1006 			SendDlgItemMessage(hwnd, IDC_CHECKBOX_INIT_MI, BM_SETCHECK,
1007 					(st_temp->opt_init_keysig + 7 & 0x10) ? 1 : 0, 0);
1008 		}
1009 		SetDlgItemInt(hwnd, IDC_EDIT_KEY_ADJUST, st_temp->key_adjust, TRUE);
1010 		DLG_FLAG_TO_CHECKBUTTON(hwnd, IDC_CHECKBOX_FORCE_KEYSIG,
1011 				(st_temp->opt_force_keysig != 8));
1012 		SendMessage(hwnd, WM_COMMAND, IDC_CHECKBOX_FORCE_KEYSIG, 0);
1013 		for (i = 0; i < 15; i++)
1014 			SendDlgItemMessage(hwnd, IDC_COMBO_FORCE_KEYSIG, CB_INSERTSTRING,
1015 					(WPARAM) -1, (LPARAM) cb_info_IDC_COMBO_KEYSIG[i]);
1016 		if (st_temp->opt_force_keysig == 8)
1017 			SendDlgItemMessage(hwnd, IDC_COMBO_FORCE_KEYSIG, CB_SETCURSEL,
1018 					(WPARAM) 7, (LPARAM) 0);
1019 		else
1020 			SendDlgItemMessage(hwnd, IDC_COMBO_FORCE_KEYSIG, CB_SETCURSEL,
1021 					(WPARAM) st_temp->opt_force_keysig + 7, (LPARAM) 0);
1022 		initflag = 0;
1023 		break;
1024 	case WM_COMMAND:
1025 		switch (LOWORD(wParam)) {
1026 		case IDCLOSE:
1027 			break;
1028 		case IDC_CHECKBOX_SPECIAL_TONEBANK:
1029 			if (SendDlgItemMessage(hwnd, IDC_CHECKBOX_SPECIAL_TONEBANK,
1030 					BM_GETCHECK, 0, 0))
1031 				EnableWindow(GetDlgItem(hwnd, IDC_EDIT_SPECIAL_TONEBANK),
1032 						TRUE);
1033 			else
1034 				EnableWindow(GetDlgItem(hwnd, IDC_EDIT_SPECIAL_TONEBANK),
1035 						FALSE);
1036 			break;
1037 		case IDC_CHECKBOX_PURE_INTONATION:
1038 			if (SendDlgItemMessage(hwnd, IDC_CHECKBOX_PURE_INTONATION,
1039 					BM_GETCHECK, 0, 0)) {
1040 				EnableWindow(GetDlgItem(hwnd,
1041 						IDC_CHECKBOX_INIT_KEYSIG), TRUE);
1042 				if (SendDlgItemMessage(hwnd,
1043 						IDC_CHECKBOX_INIT_KEYSIG, BM_GETCHECK, 0, 0)) {
1044 					EnableWindow(GetDlgItem(hwnd,
1045 							IDC_COMBO_INIT_KEYSIG), TRUE);
1046 					EnableWindow(GetDlgItem(hwnd,
1047 							IDC_CHECKBOX_INIT_MI), TRUE);
1048 				} else {
1049 					EnableWindow(GetDlgItem(hwnd,
1050 							IDC_COMBO_INIT_KEYSIG), FALSE);
1051 					EnableWindow(GetDlgItem(hwnd,
1052 							IDC_CHECKBOX_INIT_MI), FALSE);
1053 				}
1054 			} else {
1055 				EnableWindow(GetDlgItem(hwnd,
1056 						IDC_CHECKBOX_INIT_KEYSIG), FALSE);
1057 				EnableWindow(GetDlgItem(hwnd, IDC_COMBO_INIT_KEYSIG), FALSE);
1058 				EnableWindow(GetDlgItem(hwnd, IDC_CHECKBOX_INIT_MI), FALSE);
1059 			}
1060 			break;
1061 		case IDC_CHECKBOX_INIT_KEYSIG:
1062 			if (SendDlgItemMessage(hwnd,
1063 					IDC_CHECKBOX_INIT_KEYSIG, BM_GETCHECK, 0, 0)) {
1064 				EnableWindow(GetDlgItem(hwnd, IDC_COMBO_INIT_KEYSIG), TRUE);
1065 				EnableWindow(GetDlgItem(hwnd, IDC_CHECKBOX_INIT_MI), TRUE);
1066 			} else {
1067 				EnableWindow(GetDlgItem(hwnd, IDC_COMBO_INIT_KEYSIG), FALSE);
1068 				EnableWindow(GetDlgItem(hwnd, IDC_CHECKBOX_INIT_MI), FALSE);
1069 			}
1070 			break;
1071 		case IDC_COMBO_INIT_KEYSIG:
1072 		case IDC_CHECKBOX_INIT_MI:
1073 			st_temp->opt_init_keysig = SendDlgItemMessage(hwnd,
1074 					IDC_COMBO_INIT_KEYSIG, CB_GETCURSEL,
1075 					(WPARAM) 0, (LPARAM) 0) + ((SendDlgItemMessage(hwnd,
1076 					IDC_CHECKBOX_INIT_MI, BM_GETCHECK,
1077 					0, 0)) ? 16 : 0) - 7;
1078 			break;
1079 		case IDC_CHECKBOX_FORCE_KEYSIG:
1080 			if (SendDlgItemMessage(hwnd,
1081 					IDC_CHECKBOX_FORCE_KEYSIG, BM_GETCHECK, 0, 0))
1082 				EnableWindow(GetDlgItem(hwnd, IDC_COMBO_FORCE_KEYSIG), TRUE);
1083 			else
1084 				EnableWindow(GetDlgItem(hwnd, IDC_COMBO_FORCE_KEYSIG), FALSE);
1085 			break;
1086 		case IDC_COMBO_FORCE_KEYSIG:
1087 			st_temp->opt_force_keysig = SendDlgItemMessage(hwnd,
1088 					IDC_COMBO_FORCE_KEYSIG, CB_GETCURSEL,
1089 					(WPARAM) 0, (LPARAM) 0) - 7;
1090 			break;
1091 		default:
1092 			break;
1093 		}
1094 		PrefWndSetOK = 1;
1095 		break;
1096 	case WM_MYSAVE:
1097 		if ( initflag ) break;
1098 	{
1099 		int i;
1100 		char *p;
1101 		st_temp->voices = GetDlgItemInt(hwnd,IDC_EDIT_VOICES,NULL,FALSE);
1102 		if(st_temp->voices > max_voices){
1103 			max_voices = st_temp->voices;
1104 			voice = (Voice *) safe_realloc(voice, max_voices * sizeof(Voice));
1105 			memset(voice, 0, max_voices * sizeof(Voice));
1106 		}
1107 		st_temp->amplification = GetDlgItemInt(hwnd,IDC_EDIT_AMPLIFICATION,NULL,FALSE);
1108 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_FREE_INST,st_temp->free_instruments_afterwards);
1109 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_ANTIALIAS,st_temp->antialiasing_allowed);
1110 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_LOADINST_PLAYING,st_temp->opt_realtime_playing);
1111 		st_temp->allocate_cache_size = GetDlgItemInt(hwnd,IDC_EDIT_CACHE_SIZE,NULL,FALSE);
1112 		if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_REDUCE_VOICE,BM_GETCHECK,0,0))
1113 		{
1114 			st_temp->reduce_voice_threshold = -1;
1115 			st_temp->auto_reduce_polyphony = 1;
1116 		}
1117 		else
1118 		{
1119 			st_temp->reduce_voice_threshold = 0;
1120 			st_temp->auto_reduce_polyphony = 0;
1121 		}
1122 
1123 		st_temp->default_tonebank = GetDlgItemInt(hwnd,IDC_EDIT_DEFAULT_TONEBANK,NULL,FALSE);
1124 		if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_SPECIAL_TONEBANK,BM_GETCHECK,0,0)){
1125 			st_temp->special_tonebank = GetDlgItemInt(hwnd,IDC_EDIT_SPECIAL_TONEBANK,NULL,TRUE);
1126 	 } else {
1127 			st_temp->special_tonebank = -1;
1128 	 }
1129 		if(SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_GS,BM_GETCHECK,0,0)){
1130 		st_temp->opt_default_mid = 0x41;
1131 		} else if(SendDlgItemMessage(hwnd,IDC_RADIOBUTTON_XG,BM_GETCHECK,0,0)){
1132 		st_temp->opt_default_mid = 0x43;
1133 	 } else
1134 		st_temp->opt_default_mid = 0x7e;
1135 
1136 		SettingCtlFlag(st_temp, 't',
1137 							DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_CTL_TRACE_PLAYING,i));
1138 
1139 		/* remove 'v' and 'q' from st_temp->opt_ctl */
1140 		while(strchr(st_temp->opt_ctl + 1, 'v'))
1141 			 SettingCtlFlag(st_temp, 'v', 0);
1142 		while(strchr(st_temp->opt_ctl + 1, 'q'))
1143 			 SettingCtlFlag(st_temp, 'q', 0);
1144 
1145 		/* append 'v' or 'q' */
1146 		p = st_temp->opt_ctl + strlen(st_temp->opt_ctl);
1147 		i = GetDlgItemInt(hwnd,IDC_EDIT_CTL_VEBOSITY,NULL,TRUE);
1148 		while(i > 1) { *p++ = 'v'; i--; }
1149 		while(i < 1) { *p++ = 'q'; i++; }
1150 
1151 		st_temp->control_ratio = GetDlgItemInt(hwnd,IDC_EDIT_CONTROL_RATIO,NULL,FALSE);
1152 		st_temp->opt_drum_power = GetDlgItemInt(hwnd,IDC_EDIT_DRUM_POWER,NULL,FALSE);
1153 
1154 		DLG_CHECKBUTTON_TO_FLAG(hwnd,IDC_CHECKBOX_AMP_COMPENSATION,st_temp->opt_amp_compensation);
1155 
1156 		DLG_CHECKBUTTON_TO_FLAG(hwnd,
1157 				IDC_CHECKBOX_PURE_INTONATION, st_temp->opt_pure_intonation);
1158 		if (SendDlgItemMessage(hwnd, IDC_CHECKBOX_PURE_INTONATION,
1159 				BM_GETCHECK, 0, 0) && SendDlgItemMessage(hwnd,
1160 				IDC_CHECKBOX_INIT_KEYSIG, BM_GETCHECK, 0, 0))
1161 			st_temp->opt_init_keysig = SendDlgItemMessage(hwnd,
1162 					IDC_COMBO_INIT_KEYSIG, CB_GETCURSEL,
1163 					(WPARAM) 0, (LPARAM) 0) + ((SendDlgItemMessage(hwnd,
1164 					IDC_CHECKBOX_INIT_MI, BM_GETCHECK,
1165 					0, 0)) ? 16 : 0) - 7;
1166 		else
1167 			st_temp->opt_init_keysig = 8;
1168 		st_temp->key_adjust = GetDlgItemInt(hwnd,
1169 				IDC_EDIT_KEY_ADJUST, NULL, TRUE);
1170 		if (SendDlgItemMessage(hwnd,
1171 				IDC_CHECKBOX_FORCE_KEYSIG, BM_GETCHECK, 0, 0))
1172 			st_temp->opt_force_keysig = SendDlgItemMessage(hwnd,
1173 					IDC_COMBO_FORCE_KEYSIG, CB_GETCURSEL,
1174 					(WPARAM) 0, (LPARAM) 0) - 7;
1175 		else
1176 			st_temp->opt_force_keysig = 8;
1177 
1178 		SetWindowLong(hwnd,DWL_MSGRESULT,FALSE);
1179 	}
1180 		break;
1181   case WM_SIZE:
1182 		return FALSE;
1183 	case WM_CLOSE:
1184 		break;
1185 	default:
1186 	  break;
1187 	}
1188 	return FALSE;
1189 }
1190 
1191 // IDC_COMBO_SAMPLE_RATE
1192 #define cb_num_IDC_COMBO_SAMPLE_RATE 10
1193 static char *cb_info_IDC_COMBO_SAMPLE_RATE[] = {
1194 	"4000",
1195 	"8000",
1196 	"11025",
1197 	"16000",
1198 	"22050",
1199 	"24000",
1200 	"32000",
1201 	"40000",
1202 	"44100",
1203 	"48000",
1204 };
1205 
1206 // IDC_COMBO_BANDWIDTH
1207 #define cb_num_IDC_COMBO_BANDWIDTH 3
1208 enum {
1209 	BANDWIDTH_8BIT = 0,
1210 	BANDWIDTH_16BIT = 1,
1211 	BANDWIDTH_24BIT = 2,
1212 };
1213 static char *cb_info_IDC_COMBO_BANDWIDTH_en[] = {
1214 	"8-bit",
1215 	"16-bit",
1216 	"24-bit",
1217 };
1218 static char *cb_info_IDC_COMBO_BANDWIDTH_jp[] = {
1219 	"8�r�b�g",
1220 	"16�r�b�g",
1221 	"24�r�b�g",
1222 };
1223 static char **cb_info_IDC_COMBO_BANDWIDTH;
1224 
1225 // IDC_COMBO_OUTPUT_MODE
1226 static char *cb_info_IDC_COMBO_OUTPUT_MODE_jp[]= {
1227 	"�ȉ��̃t�@�C���ɏo��",(char *)0,
1228 #if defined(__CYGWIN32__) || defined(__MINGW32__)
1229 //	"�t�@�C�����������Ō��肵�A�\\�[�X�Ɠ����t�H���_�ɏo��",(char *)1,
1230 #else
1231 	"�t�@�C�����������Ō��肵�A�\�[�X�Ɠ����t�H���_�ɏo��",(char *)1,
1232 #endif
1233 
1234 	"�t�@�C�����������Ō��肵�A�ȉ��̃t�H���_�ɏo��",(char *)2,
1235 	"�t�@�C�����������Ō��肵�A�ȉ��̃t�H���_�ɏo��(�t�H���_���t��)",(char *)3,
1236 	NULL
1237 };
1238 static char *cb_info_IDC_COMBO_OUTPUT_MODE_en[]= {
1239 	"next output file",(char *)0,
1240 	"auto filename",(char *)1,
1241 	"auto filename and output in next dir",(char *)2,
1242 	"auto filename and output in next dir (with folder name)",(char *)3,
1243 	NULL
1244 };
1245 static char **cb_info_IDC_COMBO_OUTPUT_MODE;
1246 
1247 static BOOL APIENTRY
PrefTiMidity3DialogProc(HWND hwnd,UINT uMess,WPARAM wParam,LPARAM lParam)1248 PrefTiMidity3DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
1249 {
1250 	static int initflag = 1;
1251 	switch (uMess){
1252    case WM_INITDIALOG:
1253 		{
1254 			int i;
1255 			SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT,CB_RESETCONTENT,(WPARAM)0,(LPARAM)0);
1256 			for(i=0;play_mode_list[i]!=0;i++){
1257 				SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)play_mode_list[i]->id_name);
1258 			}
1259 			if (PlayerLanguage == LANGUAGE_JAPANESE)
1260 			  cb_info_IDC_COMBO_OUTPUT_MODE = cb_info_IDC_COMBO_OUTPUT_MODE_jp;
1261 			else
1262 			  cb_info_IDC_COMBO_OUTPUT_MODE = cb_info_IDC_COMBO_OUTPUT_MODE_en;
1263 			for(i=0;cb_info_IDC_COMBO_OUTPUT_MODE[i];i+=2){
1264 				SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT_MODE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_OUTPUT_MODE[i]);
1265 			}
1266 			{
1267 				int cb_num;
1268 				for(cb_num=0;(int)cb_info_IDC_COMBO_OUTPUT_MODE[cb_num];cb_num+=2){
1269 					SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT_MODE,CB_SETCURSEL,(WPARAM)0,(LPARAM)0);
1270 					if(st_temp->auto_output_mode==(int)cb_info_IDC_COMBO_OUTPUT_MODE[cb_num+1]){
1271 						SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT_MODE,CB_SETCURSEL,(WPARAM)cb_num/2,(LPARAM)0);
1272 						break;
1273 					}
1274 				}
1275 			}
1276 		}
1277 		{
1278 		char *opt;
1279 		int num = 0;
1280 		int i;
1281 		for(i=0;play_mode_list[i]!=0;i++){
1282 			if(st_temp->opt_playmode[0]==play_mode_list[i]->id_character){
1283 				num = i;
1284 			break;
1285 		}
1286 		}
1287 		SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT,CB_SETCURSEL,(WPARAM)num,(LPARAM)0);
1288 		if(st_temp->auto_output_mode==0){
1289 		if(st_temp->OutputName[0]=='\0')
1290 			SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,TEXT("output.wav"));
1291 		else
1292 			SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,TEXT(st_temp->OutputName));
1293 		} else
1294 			SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputDirName);
1295 
1296 		opt = st_temp->opt_playmode + 1;
1297 		if(strchr(opt, 'U')){
1298 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,1,0);
1299 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1300 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,0,0);
1301 		} else if(strchr(opt, 'A')){
1302 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1303 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,1,0);
1304 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,0,0);
1305 		} else {
1306 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1307 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1308 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,1,0);
1309 		}
1310 		// BANDWIDTH
1311 		if (PlayerLanguage == LANGUAGE_JAPANESE)
1312 		  cb_info_IDC_COMBO_BANDWIDTH = cb_info_IDC_COMBO_BANDWIDTH_jp;
1313 		else
1314 		  cb_info_IDC_COMBO_BANDWIDTH = cb_info_IDC_COMBO_BANDWIDTH_en;
1315 		for (i = 0; i < cb_num_IDC_COMBO_BANDWIDTH; i++)
1316 			SendDlgItemMessage(hwnd, IDC_COMBO_BANDWIDTH,
1317 					CB_INSERTSTRING, (WPARAM) -1,
1318 					(LPARAM) cb_info_IDC_COMBO_BANDWIDTH[i]);
1319 		if (strchr(opt, '2')) {	// 24-bit
1320 			SendDlgItemMessage(hwnd, IDC_COMBO_BANDWIDTH, CB_SETCURSEL,
1321 					(WPARAM) BANDWIDTH_24BIT, (LPARAM) 0);
1322 		} else if (strchr(opt, '1')) {	// 16-bit
1323 			SendDlgItemMessage(hwnd, IDC_COMBO_BANDWIDTH, CB_SETCURSEL,
1324 					(WPARAM) BANDWIDTH_16BIT, (LPARAM) 0);
1325 		} else {	// 8-bit
1326 			SendDlgItemMessage(hwnd, IDC_COMBO_BANDWIDTH, CB_SETCURSEL,
1327 					(WPARAM) BANDWIDTH_8BIT, (LPARAM) 0);
1328 		}
1329 		if(strchr(opt, 's')){
1330 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_SIGNED,BM_SETCHECK,1,0);
1331 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_UNSIGNED,BM_SETCHECK,0,0);
1332 		} else {
1333 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_SIGNED,BM_SETCHECK,0,0);
1334 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_UNSIGNED,BM_SETCHECK,1,0);
1335 		}
1336 		if(strchr(opt, 'x')){
1337 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_BYTESWAP,BM_SETCHECK,1,0);
1338 		} else {
1339 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_BYTESWAP,BM_SETCHECK,0,0);
1340 		}
1341 		if(strchr(opt, 'M')){
1342 			SendDlgItemMessage(hwnd,IDC_RADIO_STEREO,BM_SETCHECK,0,0);
1343 			SendDlgItemMessage(hwnd,IDC_RADIO_MONO,BM_SETCHECK,1,0);
1344 		} else {
1345 			SendDlgItemMessage(hwnd,IDC_RADIO_STEREO,BM_SETCHECK,1,0);
1346 			SendDlgItemMessage(hwnd,IDC_RADIO_MONO,BM_SETCHECK,0,0);
1347 		}
1348 		// SAMPLE_RATE
1349 		for (i = 0; i < cb_num_IDC_COMBO_SAMPLE_RATE; i++)
1350 			SendDlgItemMessage(hwnd, IDC_COMBO_SAMPLE_RATE,
1351 					CB_INSERTSTRING, (WPARAM) -1,
1352 					(LPARAM) cb_info_IDC_COMBO_SAMPLE_RATE[i]);
1353 		SetDlgItemInt(hwnd, IDC_COMBO_SAMPLE_RATE, st_temp->output_rate, FALSE);
1354 		}
1355 		initflag = 0;
1356 		break;
1357 	case WM_COMMAND:
1358 	switch (LOWORD(wParam)) {
1359 	  case IDCLOSE:
1360 		break;
1361 		case IDC_BUTTON_OUTPUT_FILE:
1362 			{
1363 				char filename[MAXPATH+1];
1364 				filename[0] = '\0';
1365 				SendDlgItemMessage(hwnd,IDC_EDIT_OUTPUT_FILE,WM_GETTEXT,
1366 					(WPARAM)MAX_PATH,(LPARAM)TEXT(filename));
1367 				if(!DlgOpenOutputFile(filename,hwnd))
1368 				if(filename[0]!='\0')
1369 						SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,TEXT(filename));
1370 	   }
1371 		break;
1372 		case IDC_BUTTON_OUTPUT_FILE_DEL:
1373 			{
1374 			char filename[MAXPATH+1];
1375 			DWORD res;
1376 			if(st_temp->auto_output_mode>0){
1377 				break;
1378 			}
1379 			GetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,filename,(WPARAM)MAX_PATH);
1380 		 res = GetFileAttributes(filename);
1381 		 if(res!=0xFFFFFFFF && !(res & FILE_ATTRIBUTE_DIRECTORY)){
1382 				if(DeleteFile(filename)!=TRUE){
1383 				char buffer[MAXPATH + 1024];
1384 			   sprintf(buffer,"Can't delete file %s !",filename);
1385 					MessageBox(NULL,buffer,"Error!", MB_OK);
1386 				} else {
1387 				char buffer[MAXPATH + 1024];
1388 			   sprintf(buffer,"Delete file %s !",filename);
1389 					MessageBox(NULL,buffer,"Delete!", MB_OK);
1390 			}
1391 			}
1392 		 }
1393 			break;
1394 		case IDC_CHECKBOX_ULAW:
1395 			if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_GETCHECK,0,0)){
1396 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,1,0);
1397 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1398 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,0,0);
1399 				SendDlgItemMessage(hwnd, IDC_COMBO_BANDWIDTH, CB_SETCURSEL,
1400 					(WPARAM) BANDWIDTH_8BIT, (LPARAM) 0);
1401 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_SIGNED,BM_SETCHECK,0,0);
1402 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_UNSIGNED,BM_SETCHECK,1,0);
1403 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_BYTESWAP,BM_SETCHECK,0,0);
1404 			 } else {
1405 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1406 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1407 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,1,0);
1408 			 }
1409 			break;
1410 		case IDC_CHECKBOX_ALAW:
1411 			if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_GETCHECK,0,0)){
1412 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1413 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,1,0);
1414 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,0,0);
1415 				SendDlgItemMessage(hwnd, IDC_COMBO_BANDWIDTH, CB_SETCURSEL,
1416 					(WPARAM) BANDWIDTH_8BIT, (LPARAM) 0);
1417 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_SIGNED,BM_SETCHECK,0,0);
1418 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_UNSIGNED,BM_SETCHECK,1,0);
1419 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_BYTESWAP,BM_SETCHECK,0,0);
1420 			 } else {
1421 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1422 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1423 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,1,0);
1424 			 }
1425 			break;
1426 		case IDC_CHECKBOX_LINEAR:
1427 			if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_GETCHECK,0,0)){
1428 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1429 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1430 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,1,0);
1431 			 } else {
1432 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,1,0);
1433 			 }
1434 			break;
1435 		case IDC_CHECKBOX_SIGNED:
1436 			if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_SIGNED,BM_GETCHECK,0,0)){
1437 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_SIGNED,BM_SETCHECK,1,0);
1438 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_UNSIGNED,BM_SETCHECK,0,0);
1439 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1440 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1441 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,1,0);
1442 			 } else {
1443 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_SIGNED,BM_SETCHECK,0,0);
1444 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_UNSIGNED,BM_SETCHECK,1,0);
1445 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1446 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1447 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,1,0);
1448 			 }
1449 			break;
1450 		case IDC_CHECKBOX_UNSIGNED:
1451 			if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_UNSIGNED,BM_GETCHECK,0,0)){
1452 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_SIGNED,BM_SETCHECK,0,0);
1453 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_UNSIGNED,BM_SETCHECK,1,0);
1454 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1455 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1456 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,1,0);
1457 			} else {
1458 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_SIGNED,BM_SETCHECK,1,0);
1459 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_UNSIGNED,BM_SETCHECK,0,0);
1460 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1461 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1462 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,1,0);
1463 			 }
1464 			break;
1465 		case IDC_CHECKBOX_BYTESWAP:
1466 			if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_BYTESWAP,BM_GETCHECK,0,0)){
1467 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_BYTESWAP,BM_SETCHECK,1,0);
1468 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1469 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1470 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,1,0);
1471 			} else {
1472 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_BYTESWAP,BM_SETCHECK,0,0);
1473 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_SETCHECK,0,0);
1474 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_SETCHECK,0,0);
1475 				SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_SETCHECK,1,0);
1476 			}
1477 			break;
1478 		case IDC_RADIO_STEREO:
1479 			if(SendDlgItemMessage(hwnd,IDC_RADIO_STEREO,BM_GETCHECK,0,0)){
1480 				SendDlgItemMessage(hwnd,IDC_RADIO_STEREO,BM_SETCHECK,1,0);
1481 				SendDlgItemMessage(hwnd,IDC_RADIO_MONO,BM_SETCHECK,0,0);
1482 			 } else {
1483 				SendDlgItemMessage(hwnd,IDC_RADIO_STEREO,BM_SETCHECK,0,0);
1484 				SendDlgItemMessage(hwnd,IDC_RADIO_MONO,BM_SETCHECK,1,0);
1485 			 }
1486 			break;
1487 		case IDC_RADIO_MONO:
1488 			if(SendDlgItemMessage(hwnd,IDC_RADIO_MONO,BM_GETCHECK,0,0)){
1489 				SendDlgItemMessage(hwnd,IDC_RADIO_STEREO,BM_SETCHECK,0,0);
1490 				SendDlgItemMessage(hwnd,IDC_RADIO_MONO,BM_SETCHECK,1,0);
1491 		 } else {
1492 				SendDlgItemMessage(hwnd,IDC_RADIO_STEREO,BM_SETCHECK,1,0);
1493 				SendDlgItemMessage(hwnd,IDC_RADIO_MONO,BM_SETCHECK,0,0);
1494 		 }
1495 			break;
1496 		case IDC_BUTTON_OUTPUT_OPTIONS:
1497 			{
1498 				int num;
1499 				num = SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT,CB_GETCURSEL,(WPARAM)0,(LPARAM)0);
1500 				if(num>=0){
1501 					st_temp->opt_playmode[0]=play_mode_list[num]->id_character;
1502 				} else {
1503 					st_temp->opt_playmode[0]='d';
1504 				}
1505 #ifdef AU_VORBIS
1506 				if(st_temp->opt_playmode[0]=='v'){
1507 					vorbisConfigDialog();
1508 				}
1509 #endif
1510 #ifdef AU_GOGO
1511 				if(st_temp->opt_playmode[0]=='g'){
1512 					gogoConfigDialog();
1513 				}
1514 #endif
1515 #ifdef AU_PORTAUDIO_DLL
1516 				if(st_temp->opt_playmode[0]=='o'){
1517 					asioConfigDialog();
1518 				}
1519 #endif
1520 			}
1521 			break;
1522 		case IDC_COMBO_OUTPUT_MODE:
1523 			{
1524 				int cb_num1, cb_num2;
1525 				cb_num1 = SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT_MODE,CB_GETCURSEL,(WPARAM)0,(LPARAM)0);
1526 				if (PlayerLanguage == LANGUAGE_JAPANESE)
1527 				  cb_info_IDC_COMBO_OUTPUT_MODE = cb_info_IDC_COMBO_OUTPUT_MODE_jp;
1528 				else
1529 				  cb_info_IDC_COMBO_OUTPUT_MODE = cb_info_IDC_COMBO_OUTPUT_MODE_en;
1530 				for(cb_num2=0;(int)cb_info_IDC_COMBO_OUTPUT_MODE[cb_num2];cb_num2+=2){
1531 					if(cb_num1*2==cb_num2){
1532 						st_temp->auto_output_mode = (int)cb_info_IDC_COMBO_OUTPUT_MODE[cb_num2+1];
1533 						break;
1534 					}
1535 				}
1536 				if (PlayerLanguage == LANGUAGE_JAPANESE) {
1537 				  if(st_temp->auto_output_mode>0){
1538 				    SendDlgItemMessage(hwnd,IDC_BUTTON_OUTPUT_FILE,WM_SETTEXT,0,(LPARAM)"�o�͐�");
1539 				    SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputDirName);
1540 				  } else {
1541 				    SendDlgItemMessage(hwnd,IDC_BUTTON_OUTPUT_FILE,WM_SETTEXT,0,(LPARAM)"�o�̓t�@�C��");
1542 				    SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputName);
1543 				  }
1544 				} else {
1545 				  if(st_temp->auto_output_mode>0){
1546 				    SendDlgItemMessage(hwnd,IDC_BUTTON_OUTPUT_FILE,WM_SETTEXT,0,(LPARAM)"Output File");
1547 				    SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputDirName);
1548 				  } else {
1549 				    SendDlgItemMessage(hwnd,IDC_BUTTON_OUTPUT_FILE,WM_SETTEXT,0,(LPARAM)"Output File");
1550 				    SetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputName);
1551 				  }
1552 				}
1553 			}
1554 			break;
1555 		default:
1556 		break;
1557 	  }
1558 		PrefWndSetOK = 1;
1559 		break;
1560 	case WM_MYSAVE:
1561 		if ( initflag ) break;
1562 	{
1563 		int i = 0;
1564 		int num;
1565 		num = SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT,CB_GETCURSEL,(WPARAM)0,(LPARAM)0);
1566 		if(num>=0){
1567 			st_temp->opt_playmode[i]=play_mode_list[num]->id_character;
1568 		} else {
1569 			st_temp->opt_playmode[i]='d';
1570 		}
1571 		i++;
1572 		if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_ULAW,BM_GETCHECK,0,0))
1573 			st_temp->opt_playmode[i++] = 'U';
1574 		if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_ALAW,BM_GETCHECK,0,0))
1575 			st_temp->opt_playmode[i++] = 'A';
1576 		if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_LINEAR,BM_GETCHECK,0,0))
1577 			st_temp->opt_playmode[i++] = 'l';
1578 		num = SendDlgItemMessage(hwnd, IDC_COMBO_BANDWIDTH, CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
1579 		if(num == BANDWIDTH_8BIT)
1580 			st_temp->opt_playmode[i++] = '8';
1581 		else if(num == BANDWIDTH_24BIT)
1582 			st_temp->opt_playmode[i++] = '2';
1583 		else	// 16-bit
1584 			st_temp->opt_playmode[i++] = '1';
1585 		if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_SIGNED,BM_GETCHECK,0,0))
1586 			st_temp->opt_playmode[i++] = 's';
1587 		if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_UNSIGNED,BM_GETCHECK,0,0))
1588 			st_temp->opt_playmode[i++] = 'u';
1589 		if(SendDlgItemMessage(hwnd,IDC_CHECKBOX_BYTESWAP,BM_GETCHECK,0,0))
1590 			st_temp->opt_playmode[i++] = 'x';
1591 		if(SendDlgItemMessage(hwnd,IDC_RADIO_STEREO,BM_GETCHECK,0,0))
1592 			st_temp->opt_playmode[i++] = 'S';
1593 		if(SendDlgItemMessage(hwnd,IDC_RADIO_MONO,BM_GETCHECK,0,0))
1594 			st_temp->opt_playmode[i++] = 'M';
1595 		st_temp->opt_playmode[i] = '\0';
1596 		st_temp->output_rate = GetDlgItemInt(hwnd, IDC_COMBO_SAMPLE_RATE, NULL, FALSE);
1597  		if(st_temp->auto_output_mode==0)
1598 			GetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputName,(WPARAM)sizeof(st_temp->OutputName));
1599 		else
1600 			GetDlgItemText(hwnd,IDC_EDIT_OUTPUT_FILE,st_temp->OutputDirName,(WPARAM)sizeof(st_temp->OutputDirName));
1601 
1602 		SetWindowLong(hwnd,DWL_MSGRESULT,FALSE);
1603 	}
1604 		break;
1605 
1606 		break;
1607   case WM_SIZE:
1608 		return FALSE;
1609 	case WM_CLOSE:
1610 		break;
1611 	default:
1612 	  break;
1613 	}
1614 	return FALSE;
1615 }
1616 
1617 #define PREF_CHANNEL_MODE_DRUM_CHANNEL		1
1618 #define PREF_CHANNEL_MODE_DRUM_CHANNEL_MASK	2
1619 #define PREF_CHANNEL_MODE_QUIET_CHANNEL		3
1620 static BOOL APIENTRY
PrefTiMidity4DialogProc(HWND hwnd,UINT uMess,WPARAM wParam,LPARAM lParam)1621 PrefTiMidity4DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
1622 {
1623 	static int initflag = 1;
1624 	static int pref_channel_mode;
1625 	switch (uMess){
1626   case WM_INITDIALOG:
1627 		pref_channel_mode = PREF_CHANNEL_MODE_DRUM_CHANNEL;
1628 		SendMessage(hwnd,WM_MYRESTORE,(WPARAM)0,(LPARAM)0);
1629 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TEMPER_EQUAL,
1630 				st_temp->temper_type_mute & 1 << 0);
1631 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TEMPER_PYTHA,
1632 				st_temp->temper_type_mute & 1 << 1);
1633 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TEMPER_MEANTONE,
1634 				st_temp->temper_type_mute & 1 << 2);
1635 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TEMPER_PUREINT,
1636 				st_temp->temper_type_mute & 1 << 3);
1637 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TEMPER_USER0,
1638 				st_temp->temper_type_mute & 1 << 4);
1639 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TEMPER_USER1,
1640 				st_temp->temper_type_mute & 1 << 5);
1641 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TEMPER_USER2,
1642 				st_temp->temper_type_mute & 1 << 6);
1643 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_TEMPER_USER3,
1644 				st_temp->temper_type_mute & 1 << 7);
1645 		initflag = 0;
1646 		break;
1647 	case WM_MYRESTORE:
1648 	{
1649 		ChannelBitMask channelbitmask;
1650 		switch(pref_channel_mode){
1651 		case PREF_CHANNEL_MODE_DRUM_CHANNEL_MASK:
1652 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL,BM_SETCHECK,0,0);
1653 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL_MASK,BM_SETCHECK,1,0);
1654 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_QUIET_CHANNEL,BM_SETCHECK,0,0);
1655 			channelbitmask = st_temp->default_drumchannel_mask;
1656 			break;
1657 		case PREF_CHANNEL_MODE_QUIET_CHANNEL:
1658 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL,BM_SETCHECK,0,0);
1659 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL_MASK,BM_SETCHECK,0,0);
1660 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_QUIET_CHANNEL,BM_SETCHECK,1,0);
1661 			channelbitmask = st_temp->quietchannels;
1662 			break;
1663 		default:
1664 		case PREF_CHANNEL_MODE_DRUM_CHANNEL:
1665 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL,BM_SETCHECK,1,0);
1666 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL_MASK,BM_SETCHECK,0,0);
1667 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_QUIET_CHANNEL,BM_SETCHECK,0,0);
1668 			channelbitmask = st_temp->default_drumchannels;
1669 			break;
1670 		}
1671 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH01,IS_SET_CHANNELMASK(channelbitmask,0));
1672 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH02,IS_SET_CHANNELMASK(channelbitmask,1));
1673 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH03,IS_SET_CHANNELMASK(channelbitmask,2));
1674 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH04,IS_SET_CHANNELMASK(channelbitmask,3));
1675 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH05,IS_SET_CHANNELMASK(channelbitmask,4));
1676 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH06,IS_SET_CHANNELMASK(channelbitmask,5));
1677 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH07,IS_SET_CHANNELMASK(channelbitmask,6));
1678 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH08,IS_SET_CHANNELMASK(channelbitmask,7));
1679 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH09,IS_SET_CHANNELMASK(channelbitmask,8));
1680 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH10,IS_SET_CHANNELMASK(channelbitmask,9));
1681 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH11,IS_SET_CHANNELMASK(channelbitmask,10));
1682 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH12,IS_SET_CHANNELMASK(channelbitmask,11));
1683 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH13,IS_SET_CHANNELMASK(channelbitmask,12));
1684 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH14,IS_SET_CHANNELMASK(channelbitmask,13));
1685 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH15,IS_SET_CHANNELMASK(channelbitmask,14));
1686 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH16,IS_SET_CHANNELMASK(channelbitmask,15));
1687 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH17,IS_SET_CHANNELMASK(channelbitmask,16));
1688 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH18,IS_SET_CHANNELMASK(channelbitmask,17));
1689 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH19,IS_SET_CHANNELMASK(channelbitmask,18));
1690 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH20,IS_SET_CHANNELMASK(channelbitmask,19));
1691 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH21,IS_SET_CHANNELMASK(channelbitmask,20));
1692 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH22,IS_SET_CHANNELMASK(channelbitmask,21));
1693 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH23,IS_SET_CHANNELMASK(channelbitmask,22));
1694 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH24,IS_SET_CHANNELMASK(channelbitmask,23));
1695 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH25,IS_SET_CHANNELMASK(channelbitmask,24));
1696 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH26,IS_SET_CHANNELMASK(channelbitmask,25));
1697 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH27,IS_SET_CHANNELMASK(channelbitmask,26));
1698 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH28,IS_SET_CHANNELMASK(channelbitmask,27));
1699 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH29,IS_SET_CHANNELMASK(channelbitmask,28));
1700 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH30,IS_SET_CHANNELMASK(channelbitmask,29));
1701 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH31,IS_SET_CHANNELMASK(channelbitmask,30));
1702 		DLG_FLAG_TO_CHECKBUTTON(hwnd,IDC_CHECKBOX_CH32,IS_SET_CHANNELMASK(channelbitmask,31));
1703 	}
1704 		break;
1705 	case WM_COMMAND:
1706 	switch (LOWORD(wParam)) {
1707 	  case IDCLOSE:
1708 		break;
1709 		case IDC_CHECKBOX_DRUM_CHANNEL:
1710 			{
1711 			SendMessage(hwnd,WM_MYSAVE,(WPARAM)0,(LPARAM)0);
1712 			pref_channel_mode = PREF_CHANNEL_MODE_DRUM_CHANNEL;
1713 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL,BM_SETCHECK,1,0);
1714 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL_MASK,BM_SETCHECK,0,0);
1715 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_QUIET_CHANNEL,BM_SETCHECK,0,0);
1716 			SendMessage(hwnd,WM_MYRESTORE,(WPARAM)0,(LPARAM)0);
1717 			}
1718 		break;
1719 		case IDC_CHECKBOX_DRUM_CHANNEL_MASK:
1720 			{
1721 			SendMessage(hwnd,WM_MYSAVE,(WPARAM)0,(LPARAM)0);
1722 			pref_channel_mode = PREF_CHANNEL_MODE_DRUM_CHANNEL_MASK;
1723 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL,BM_SETCHECK,0,0);
1724 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL_MASK,BM_SETCHECK,1,0);
1725 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_QUIET_CHANNEL,BM_SETCHECK,0,0);
1726 			SendMessage(hwnd,WM_MYRESTORE,(WPARAM)0,(LPARAM)0);
1727 			}
1728 		break;
1729 		case IDC_CHECKBOX_QUIET_CHANNEL:
1730 			{
1731 			SendMessage(hwnd,WM_MYSAVE,(WPARAM)0,(LPARAM)0);
1732 			pref_channel_mode = PREF_CHANNEL_MODE_QUIET_CHANNEL;
1733 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL,BM_SETCHECK,0,0);
1734 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_DRUM_CHANNEL_MASK,BM_SETCHECK,0,0);
1735 			SendDlgItemMessage(hwnd,IDC_CHECKBOX_QUIET_CHANNEL,BM_SETCHECK,1,0);
1736 			SendMessage(hwnd,WM_MYRESTORE,(WPARAM)0,(LPARAM)0);
1737 			}
1738 		break;
1739 		case IDC_BUTTON_REVERSE:
1740 			{
1741 			SendMessage(hwnd,WM_MYSAVE,(WPARAM)0,(LPARAM)0);
1742 			switch(pref_channel_mode){
1743 			case PREF_CHANNEL_MODE_DRUM_CHANNEL_MASK:
1744 				REVERSE_CHANNELMASK(st_temp->default_drumchannel_mask);
1745 				break;
1746 			case PREF_CHANNEL_MODE_QUIET_CHANNEL:
1747 				REVERSE_CHANNELMASK(st_temp->quietchannels);
1748 				break;
1749 			default:
1750 			case PREF_CHANNEL_MODE_DRUM_CHANNEL:
1751 				REVERSE_CHANNELMASK(st_temp->default_drumchannels);
1752 				break;
1753 			}
1754 			SendMessage(hwnd,WM_MYRESTORE,(WPARAM)0,(LPARAM)0);
1755 			}
1756 			break;
1757 		default:
1758 		break;
1759 	  }
1760 		PrefWndSetOK = 1;
1761 		break;
1762 	case WM_MYSAVE:
1763 		if ( initflag ) break;
1764 	{
1765 		ChannelBitMask channelbitmask;
1766 		int tmp;
1767 #define PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,ctlid,channelbitmask,ch,tmp) \
1768 {	if(DLG_CHECKBUTTON_TO_FLAG((hwnd),(ctlid),(tmp))) SET_CHANNELMASK((channelbitmask),(ch)); \
1769 else UNSET_CHANNELMASK((channelbitmask),(ch)); }
1770 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH01,channelbitmask,0,tmp);
1771 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH02,channelbitmask,1,tmp);
1772 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH03,channelbitmask,2,tmp);
1773 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH04,channelbitmask,3,tmp);
1774 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH05,channelbitmask,4,tmp);
1775 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH06,channelbitmask,5,tmp);
1776 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH07,channelbitmask,6,tmp);
1777 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH08,channelbitmask,7,tmp);
1778 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH09,channelbitmask,8,tmp);
1779 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH10,channelbitmask,9,tmp);
1780 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH11,channelbitmask,10,tmp);
1781 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH12,channelbitmask,11,tmp);
1782 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH13,channelbitmask,12,tmp);
1783 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH14,channelbitmask,13,tmp);
1784 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH15,channelbitmask,14,tmp);
1785 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH16,channelbitmask,15,tmp);
1786 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH17,channelbitmask,16,tmp);
1787 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH18,channelbitmask,17,tmp);
1788 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH19,channelbitmask,18,tmp);
1789 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH20,channelbitmask,19,tmp);
1790 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH21,channelbitmask,20,tmp);
1791 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH22,channelbitmask,21,tmp);
1792 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH23,channelbitmask,22,tmp);
1793 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH24,channelbitmask,23,tmp);
1794 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH25,channelbitmask,24,tmp);
1795 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH26,channelbitmask,25,tmp);
1796 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH27,channelbitmask,26,tmp);
1797 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH28,channelbitmask,27,tmp);
1798 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH29,channelbitmask,28,tmp);
1799 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH30,channelbitmask,29,tmp);
1800 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH31,channelbitmask,30,tmp);
1801 		PREF_CHECKBUTTON_SET_CHANNELMASK(hwnd,IDC_CHECKBOX_CH32,channelbitmask,31,tmp);
1802 		switch(pref_channel_mode){
1803 		case PREF_CHANNEL_MODE_DRUM_CHANNEL_MASK:
1804 			st_temp->default_drumchannel_mask = channelbitmask;
1805 			break;
1806 		case PREF_CHANNEL_MODE_QUIET_CHANNEL:
1807 			st_temp->quietchannels = channelbitmask;
1808 			break;
1809 		default:
1810 		case PREF_CHANNEL_MODE_DRUM_CHANNEL:
1811 			st_temp->default_drumchannels = channelbitmask;
1812 			break;
1813 		}
1814 	}
1815 		st_temp->temper_type_mute = 0;
1816 		if (SendDlgItemMessage(hwnd, IDC_CHECKBOX_TEMPER_EQUAL,
1817 				BM_GETCHECK, 0, 0))
1818 			st_temp->temper_type_mute |= 1 << 0;
1819 		if (SendDlgItemMessage(hwnd, IDC_CHECKBOX_TEMPER_PYTHA,
1820 				BM_GETCHECK, 0, 0))
1821 			st_temp->temper_type_mute |= 1 << 1;
1822 		if (SendDlgItemMessage(hwnd, IDC_CHECKBOX_TEMPER_MEANTONE,
1823 				BM_GETCHECK, 0, 0))
1824 			st_temp->temper_type_mute |= 1 << 2;
1825 		if (SendDlgItemMessage(hwnd, IDC_CHECKBOX_TEMPER_PUREINT,
1826 				BM_GETCHECK, 0, 0))
1827 			st_temp->temper_type_mute |= 1 << 3;
1828 		if (SendDlgItemMessage(hwnd, IDC_CHECKBOX_TEMPER_USER0,
1829 				BM_GETCHECK, 0, 0))
1830 			st_temp->temper_type_mute |= 1 << 4;
1831 		if (SendDlgItemMessage(hwnd, IDC_CHECKBOX_TEMPER_USER1,
1832 				BM_GETCHECK, 0, 0))
1833 			st_temp->temper_type_mute |= 1 << 5;
1834 		if (SendDlgItemMessage(hwnd, IDC_CHECKBOX_TEMPER_USER2,
1835 				BM_GETCHECK, 0, 0))
1836 			st_temp->temper_type_mute |= 1 << 6;
1837 		if (SendDlgItemMessage(hwnd, IDC_CHECKBOX_TEMPER_USER3,
1838 				BM_GETCHECK, 0, 0))
1839 			st_temp->temper_type_mute |= 1 << 7;
1840 	SetWindowLong(hwnd,DWL_MSGRESULT,FALSE);
1841 	break;
1842   case WM_SIZE:
1843 		return FALSE;
1844 	case WM_CLOSE:
1845 		break;
1846 	default:
1847 	  break;
1848 	}
1849 	return FALSE;
1850 }
1851 
1852 #ifdef IA_W32G_SYN
1853 extern int syn_ThreadPriority;
1854 static char **MidiINDrivers = NULL;
1855 // 0 MIDI Mapper -1
1856 // 1 MIDI IN Driver 0
1857 // 2 MIDI IN Driver 1
GetMidiINDrivers(void)1858 static char **GetMidiINDrivers ( void )
1859 {
1860 	int i;
1861 	int max = midiInGetNumDevs ();
1862 	if ( MidiINDrivers != NULL ) {
1863 		for ( i = 0; MidiINDrivers[i] != NULL; i ++ ) {
1864 			free ( MidiINDrivers[i] );
1865 		}
1866 		free ( MidiINDrivers );
1867 		MidiINDrivers = NULL;
1868 	}
1869 	MidiINDrivers = ( char ** ) malloc ( sizeof ( char * ) * ( max + 2 ) );
1870 	if ( MidiINDrivers == NULL ) return MidiINDrivers;
1871 	MidiINDrivers[0] = strdup ( "MIDI Mapper" );
1872 	for ( i = 1; i <= max; i ++ ) {
1873 		MIDIINCAPS mic;
1874 		if ( midiInGetDevCaps ( i - 1, &mic, sizeof ( MIDIINCAPS ) ) == 0 ) {
1875 			MidiINDrivers[i] = strdup ( mic.szPname );
1876 			if ( MidiINDrivers[i] == NULL )
1877 				break;
1878 		} else {
1879 			MidiINDrivers[i] = NULL;
1880 			break;
1881 		}
1882 	}
1883 	MidiINDrivers[max+1] = NULL;
1884 	return MidiINDrivers;
1885 }
1886 
1887 static BOOL APIENTRY
PrefSyn1DialogProc(HWND hwnd,UINT uMess,WPARAM wParam,LPARAM lParam)1888 PrefSyn1DialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
1889 {
1890 	int i;
1891 	static int initflag = 1;
1892 	switch (uMess){
1893   case WM_INITDIALOG:
1894 		for ( i = 0; i <= MAX_PORT; i ++ ) {
1895 			char buff[32];
1896 			sprintf ( buff, "%d", i );
1897 			SendDlgItemMessage(hwnd, IDC_COMBO_PORT_NUM,
1898 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) buff );
1899 		}
1900 		if ( MidiINDrivers != NULL ) {
1901 			for ( i = 0; MidiINDrivers[i] != NULL; i ++ ) {
1902 				SendDlgItemMessage(hwnd, IDC_COMBO_IDPORT0,
1903 					CB_INSERTSTRING, (WPARAM) -1, (LPARAM) MidiINDrivers[i] );
1904 				SendDlgItemMessage(hwnd, IDC_COMBO_IDPORT1,
1905 					CB_INSERTSTRING, (WPARAM) -1, (LPARAM) MidiINDrivers[i] );
1906 				SendDlgItemMessage(hwnd, IDC_COMBO_IDPORT2,
1907 					CB_INSERTSTRING, (WPARAM) -1, (LPARAM) MidiINDrivers[i] );
1908 				SendDlgItemMessage(hwnd, IDC_COMBO_IDPORT3,
1909 					CB_INSERTSTRING, (WPARAM) -1, (LPARAM) MidiINDrivers[i] );
1910 			}
1911 		}
1912 		DLG_FLAG_TO_CHECKBUTTON(hwnd, IDC_CHECK_SYN_AUTOSTART, st_temp->syn_AutoStart);
1913 		if (PlayerLanguage == LANGUAGE_JAPANESE) {
1914 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1915 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "�Ⴂ" );
1916 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1917 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "�����Ⴂ" );
1918 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1919 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "����" );
1920 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1921 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "��������" );
1922 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1923 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "����" );
1924 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1925 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "���A���^�C��" );
1926 
1927 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1928 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "�Ⴂ" );
1929 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1930 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "�����Ⴂ" );
1931 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1932 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "����" );
1933 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1934 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "��������" );
1935 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1936 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "����" );
1937 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1938 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "�^�C���N���e�B�J��" );
1939 		} else {
1940 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1941 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Lowest" );
1942 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1943 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Below normal" );
1944 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1945 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Normal" );
1946 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1947 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Above nomal" );
1948 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1949 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Highest" );
1950 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1951 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Realtime" );
1952 
1953 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1954 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Lowest" );
1955 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1956 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Below normal" );
1957 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1958 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Normal" );
1959 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1960 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Above nomal" );
1961 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1962 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Highest" );
1963 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
1964 				CB_INSERTSTRING, (WPARAM) -1, (LPARAM) "Time critical" );
1965 		}
1966 		SendDlgItemMessage(hwnd, IDC_COMBO_PORT_NUM,
1967 			CB_SETCURSEL, (WPARAM) st_temp->SynPortNum, (LPARAM) 0 );
1968 		SendDlgItemMessage(hwnd, IDC_COMBO_IDPORT0,
1969 			CB_SETCURSEL, (WPARAM) st_temp->SynIDPort[0], (LPARAM) 0 );
1970 		SendDlgItemMessage(hwnd, IDC_COMBO_IDPORT1,
1971 			CB_SETCURSEL, (WPARAM) st_temp->SynIDPort[1], (LPARAM) 0 );
1972 		SendDlgItemMessage(hwnd, IDC_COMBO_IDPORT2,
1973 			CB_SETCURSEL, (WPARAM) st_temp->SynIDPort[2], (LPARAM) 0 );
1974 		SendDlgItemMessage(hwnd, IDC_COMBO_IDPORT3,
1975 			CB_SETCURSEL, (WPARAM) st_temp->SynIDPort[3], (LPARAM) 0 );
1976 		{
1977 			int index;
1978 
1979 			// Select process priority
1980 			if ( st_temp->processPriority == IDLE_PRIORITY_CLASS )
1981 				index = 0;
1982 			else if ( st_temp->processPriority == BELOW_NORMAL_PRIORITY_CLASS )
1983 				index = 1;
1984 			else if ( st_temp->processPriority == NORMAL_PRIORITY_CLASS )
1985 				index = 2;
1986 			else if ( st_temp->processPriority == ABOVE_NORMAL_PRIORITY_CLASS )
1987 				index = 3;
1988 			else if ( st_temp->processPriority == HIGH_PRIORITY_CLASS )
1989 				index = 4;
1990 			else if ( st_temp->processPriority == REALTIME_PRIORITY_CLASS )
1991 				index = 5;
1992 			SendDlgItemMessage(hwnd, IDC_COMBO_PROCESS_PRIORITY,
1993 				CB_SETCURSEL, (WPARAM) index, (LPARAM) 0 );
1994 
1995 			// Select thread priority
1996 			if ( st_temp->syn_ThreadPriority == THREAD_PRIORITY_LOWEST )
1997 				index = 0;
1998 			else if ( st_temp->syn_ThreadPriority == THREAD_PRIORITY_BELOW_NORMAL )
1999 				index = 1;
2000 			else if ( st_temp->syn_ThreadPriority == THREAD_PRIORITY_NORMAL )
2001 				index = 2;
2002 			else if ( st_temp->syn_ThreadPriority == THREAD_PRIORITY_ABOVE_NORMAL )
2003 				index = 3;
2004 			else if ( st_temp->syn_ThreadPriority == THREAD_PRIORITY_HIGHEST )
2005 				index = 4;
2006 			else if ( st_temp->syn_ThreadPriority == THREAD_PRIORITY_TIME_CRITICAL )
2007 				index = 5;
2008 			SendDlgItemMessage(hwnd, IDC_COMBO_SYN_THREAD_PRIORITY,
2009 				CB_SETCURSEL, (WPARAM) index, (LPARAM) 0 );
2010 		}
2011 		SetDlgItemInt(hwnd,IDC_EDIT_SYN_SH_TIME,st_temp->SynShTime,FALSE);
2012 		initflag = 0;
2013 		break;
2014 	case WM_COMMAND:
2015 	switch (LOWORD(wParam)) {
2016 		case IDC_RADIOBUTTON_JAPANESE:
2017 		case IDC_RADIOBUTTON_ENGLISH:
2018 			break;
2019 		default:
2020 		break;
2021 	  }
2022 		PrefWndSetOK = 1;
2023 		break;
2024 
2025 	case WM_MYSAVE:
2026 		if ( initflag ) break;
2027 	{
2028 		int res;
2029 		res = SendDlgItemMessage ( hwnd, IDC_COMBO_PORT_NUM, CB_GETCURSEL, 0, 0 );
2030 		if ( res != CB_ERR ) st_temp->SynPortNum = res;
2031 		res = SendDlgItemMessage ( hwnd, IDC_COMBO_IDPORT0, CB_GETCURSEL, 0, 0 );
2032 		if ( res != CB_ERR ) st_temp->SynIDPort[0] = res;
2033 		res = SendDlgItemMessage ( hwnd, IDC_COMBO_IDPORT1, CB_GETCURSEL, 0, 0 );
2034 		if ( res != CB_ERR ) st_temp->SynIDPort[1] = res;
2035 		res = SendDlgItemMessage ( hwnd, IDC_COMBO_IDPORT2, CB_GETCURSEL, 0, 0 );
2036 		if ( res != CB_ERR ) st_temp->SynIDPort[2] = res;
2037 		res = SendDlgItemMessage ( hwnd, IDC_COMBO_IDPORT3, CB_GETCURSEL, 0, 0 );
2038 		if ( res != CB_ERR ) st_temp->SynIDPort[3] = res;
2039 		SetWindowLong(hwnd,DWL_MSGRESULT,FALSE);
2040 		DLG_CHECKBUTTON_TO_FLAG(hwnd, IDC_CHECK_SYN_AUTOSTART, st_temp->syn_AutoStart);
2041 		// Set process priority
2042 		res = SendDlgItemMessage ( hwnd, IDC_COMBO_PROCESS_PRIORITY, CB_GETCURSEL, 0, 0 );
2043 		if ( res != CB_ERR ) {
2044 			switch ( res ) {
2045 			case 0:
2046 				st_temp->processPriority = IDLE_PRIORITY_CLASS;
2047 				break;
2048 			case 1:
2049 				st_temp->processPriority = BELOW_NORMAL_PRIORITY_CLASS;
2050 				break;
2051 			default:
2052 			case 2:
2053 				st_temp->processPriority = NORMAL_PRIORITY_CLASS;
2054 				break;
2055 			case 3:
2056 				st_temp->processPriority = ABOVE_NORMAL_PRIORITY_CLASS;
2057 				break;
2058 			case 4:
2059 				st_temp->processPriority = HIGH_PRIORITY_CLASS;
2060 				break;
2061 			case 5:
2062 				st_temp->processPriority = REALTIME_PRIORITY_CLASS;
2063 				break;
2064 			}
2065 		}
2066 
2067 		// Set thread priority
2068 		res = SendDlgItemMessage ( hwnd, IDC_COMBO_SYN_THREAD_PRIORITY, CB_GETCURSEL, 0, 0 );
2069 		if ( res != CB_ERR ) {
2070 			switch ( res ) {
2071 			case 0:
2072 				st_temp->syn_ThreadPriority = THREAD_PRIORITY_LOWEST;
2073 				break;
2074 			case 1:
2075 				st_temp->syn_ThreadPriority = THREAD_PRIORITY_BELOW_NORMAL;
2076 				break;
2077 			default:
2078 			case 2:
2079 				st_temp->syn_ThreadPriority = THREAD_PRIORITY_NORMAL;
2080 				break;
2081 			case 3:
2082 				st_temp->syn_ThreadPriority = THREAD_PRIORITY_ABOVE_NORMAL;
2083 				break;
2084 			case 4:
2085 				st_temp->syn_ThreadPriority = THREAD_PRIORITY_HIGHEST;
2086 				break;
2087 			case 5:
2088 				st_temp->syn_ThreadPriority = THREAD_PRIORITY_TIME_CRITICAL;
2089 				break;
2090 			}
2091 		}
2092 
2093 		st_temp->SynShTime = GetDlgItemInt(hwnd,IDC_EDIT_SYN_SH_TIME,NULL,FALSE);
2094 		if ( st_temp->SynShTime < 0 ) st_temp->SynShTime = 0;
2095 	}
2096 		break;
2097   case WM_SIZE:
2098 		return FALSE;
2099 	case WM_CLOSE:
2100 		break;
2101 	default:
2102 	  break;
2103 	}
2104 	return FALSE;
2105 }
2106 #endif
2107 
ShowPrefWnd(void)2108 void ShowPrefWnd ( void )
2109 {
2110 	if ( IsWindow ( (HWND)hPrefWnd ) )
2111 		ShowWindow ( (HWND)hPrefWnd, SW_SHOW );
2112 }
HidePrefWnd(void)2113 void HidePrefWnd ( void )
2114 {
2115 	if ( IsWindow ( (HWND)hPrefWnd ) )
2116 		ShowWindow ( (HWND)hPrefWnd, SW_HIDE );
2117 }
IsVisiblePrefWnd(void)2118 BOOL IsVisiblePrefWnd ( void )
2119 {
2120 	return IsWindowVisible ( (HWND)hPrefWnd );
2121 }
2122 
DlgOpenConfigFile(char * Filename,HWND hwnd)2123 static int DlgOpenConfigFile(char *Filename, HWND hwnd)
2124 {
2125 	OPENFILENAME ofn;
2126    char filename[MAXPATH + 256];
2127    char dir[MAXPATH + 256];
2128    int res;
2129 
2130    strncpy(dir,ConfigFileOpenDir,MAXPATH);
2131    dir[MAXPATH-1] = '\0';
2132    strncpy(filename,Filename,MAXPATH);
2133    filename[MAXPATH-1] = '\0';
2134 
2135 	memset(&ofn, 0, sizeof(OPENFILENAME));
2136 	ofn.lStructSize = sizeof(OPENFILENAME);
2137 	ofn.hwndOwner = hwnd;
2138 	ofn.hInstance = hInst ;
2139 	ofn.lpstrFilter =
2140 		"config file\0*.cfg;*.config\0"
2141 		"all files\0*.*\0"
2142 		"\0\0";
2143 	ofn.lpstrCustomFilter = NULL;
2144 	ofn.nMaxCustFilter = 0;
2145 	ofn.nFilterIndex = 1 ;
2146 	ofn.lpstrFile = filename;
2147 	ofn.nMaxFile = 256;
2148 	ofn.lpstrFileTitle = NULL;
2149 	ofn.nMaxFileTitle = 0;
2150 	if(dir[0] != '\0')
2151 		ofn.lpstrInitialDir	= dir;
2152 	else
2153 		ofn.lpstrInitialDir	= 0;
2154 	ofn.lpstrTitle	= "Open Config File";
2155 	ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_EXPLORER
2156 	| OFN_READONLY | OFN_HIDEREADONLY;
2157 	ofn.lpstrDefExt = 0;
2158 	ofn.lCustData = 0;
2159 	ofn.lpfnHook = 0;
2160 	ofn.lpTemplateName= 0;
2161 
2162 	res = GetOpenFileName(&ofn);
2163    strncpy(ConfigFileOpenDir,dir,MAXPATH);
2164    ConfigFileOpenDir[MAXPATH-1] = '\0';
2165    if(res==TRUE){
2166 	strncpy(Filename,filename,MAXPATH);
2167 	Filename[MAXPATH-1] = '\0';
2168 	return 0;
2169 	}
2170    else {
2171 	Filename[0] = '\0';
2172 	return -1;
2173 	}
2174 }
2175 
DlgOpenOutputFile(char * Filename,HWND hwnd)2176 static int DlgOpenOutputFile(char *Filename, HWND hwnd)
2177 {
2178 	OPENFILENAME ofn;
2179    char filename[MAXPATH + 256];
2180    char dir[MAXPATH + 256];
2181    int res;
2182 	static char OutputFileOpenDir[MAXPATH+256];
2183    static int initflag = 1;
2184 
2185    if(initflag){
2186 	OutputFileOpenDir[0] = '\0';
2187 	  initflag = 0;
2188    }
2189    strncpy(dir,OutputFileOpenDir,MAXPATH);
2190    dir[MAXPATH-1] = '\0';
2191    strncpy(filename,Filename,MAXPATH);
2192    filename[MAXPATH-1] = '\0';
2193 
2194 	memset(&ofn, 0, sizeof(OPENFILENAME));
2195 	ofn.lStructSize = sizeof(OPENFILENAME);
2196 	ofn.hwndOwner = hwnd;
2197 	ofn.hInstance = hInst ;
2198 	ofn.lpstrFilter =
2199 		"wave file\0*.wav;*.wave;*.aif;*.aiff;*.aifc;*.au;*.snd;*.audio\0"
2200 		"all files\0*.*\0"
2201 		"\0\0";
2202 	ofn.lpstrCustomFilter = NULL;
2203 	ofn.nMaxCustFilter = 0;
2204 	ofn.nFilterIndex = 1 ;
2205 	ofn.lpstrFile = filename;
2206 	ofn.nMaxFile = 256;
2207 	ofn.lpstrFileTitle = NULL;
2208 	ofn.nMaxFileTitle = 0;
2209 	if(dir[0] != '\0')
2210 		ofn.lpstrInitialDir	= dir;
2211 	else
2212 		ofn.lpstrInitialDir	= 0;
2213 	ofn.lpstrTitle	= "Output File";
2214 	ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY;
2215 	ofn.lpstrDefExt = 0;
2216 	ofn.lCustData = 0;
2217 	ofn.lpfnHook = 0;
2218 	ofn.lpTemplateName= 0;
2219 
2220 	res = GetSaveFileName(&ofn);
2221    strncpy(OutputFileOpenDir,dir,MAXPATH);
2222    OutputFileOpenDir[MAXPATH-1] = '\0';
2223    if(res==TRUE){
2224 	strncpy(Filename,filename,MAXPATH);
2225 	Filename[MAXPATH-1] = '\0';
2226 	return 0;
2227 	} else {
2228 	Filename[0] = '\0';
2229 	return -1;
2230 	}
2231 }
2232 
2233 volatile int w32g_interactive_id3_tag_set = 0;
w32g_gogo_id3_tag_dialog(void)2234 int w32g_gogo_id3_tag_dialog(void)
2235 {
2236 	return 0;
2237 }
2238 
2239 
2240 #ifdef AU_GOGO
2241 ///////////////////////////////////////////////////////////////////////
2242 //
2243 // gogo ConfigDialog
2244 //
2245 ///////////////////////////////////////////////////////////////////////
2246 
2247 // id �̃R���{�{�b�N�X�̏��̒�`
2248 #define CB_INFO_TYPE1_BEGIN(id) static int cb_info_ ## id [] = {
2249 #define CB_INFO_TYPE1_END };
2250 #define CB_INFO_TYPE2_BEGIN(id) static char * cb_info_ ## id [] = {
2251 #define CB_INFO_TYPE2_END };
2252 
2253 // cb_info_type1_�h�c  cb_info_type2_�h�c �Ƃ����ӂ��ɂȂ�B
2254 
2255 // IDC_COMBO_OUTPUT_FORMAT
2256 CB_INFO_TYPE2_BEGIN(IDC_COMBO_OUTPUT_FORMAT)
2257 	"MP3+TAG",(char *)MC_OUTPUT_NORMAL,
2258 	"RIFF/WAVE",(char *)MC_OUTPUT_RIFF_WAVE,
2259 	"RIFF/RMP",(char *)MC_OUTPUT_RIFF_RMP,
2260 	NULL
2261 CB_INFO_TYPE2_END
2262 
2263 // IDC_COMBO_MPEG1_AUDIO_BITRATE
2264 CB_INFO_TYPE1_BEGIN(IDC_COMBO_MPEG1_AUDIO_BITRATE)
2265 	32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1
2266 CB_INFO_TYPE1_END
2267 
2268 // IDC_COMBO_MPEG2_AUDIO_BITRATE
2269 CB_INFO_TYPE1_BEGIN(IDC_COMBO_MPEG2_AUDIO_BITRATE)
2270 	8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1
2271 CB_INFO_TYPE1_END
2272 
2273 // IDC_COMBO_ENCODE_MODE
2274 CB_INFO_TYPE2_BEGIN(IDC_COMBO_ENCODE_MODE)
2275 	"monoral",(char *)MC_MODE_MONO,
2276 	"stereo",(char *)MC_MODE_STEREO,
2277 	"joint stereo",(char *)MC_MODE_JOINT,
2278 	"mid/side stereo",(char *)MC_MODE_MSSTEREO,
2279 	"dual channel",(char *)MC_MODE_DUALCHANNEL,
2280 	NULL
2281 CB_INFO_TYPE2_END
2282 
2283 // IDC_COMBO_EMPHASIS_TYPE
2284 CB_INFO_TYPE2_BEGIN(IDC_COMBO_EMPHASIS_TYPE)
2285 	"NONE",(char *)MC_EMP_NONE,
2286 	"50/15ms (normal CD-DA emphasis)",(char *)MC_EMP_5015MS,
2287 	"CCITT",(char *)MC_EMP_CCITT,
2288 	NULL
2289 CB_INFO_TYPE2_END
2290 
2291 // IDC_COMBO_VBR_BITRATE_LOW
2292 CB_INFO_TYPE1_BEGIN(IDC_COMBO_VBR_BITRATE_LOW)
2293 	32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1
2294 CB_INFO_TYPE1_END
2295 
2296 // IDC_COMBO_VBR_BITRATE_HIGH
2297 CB_INFO_TYPE1_BEGIN(IDC_COMBO_VBR_BITRATE_HIGH)
2298 	32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1
2299 CB_INFO_TYPE1_END
2300 
2301 // IDC_COMBO_VBR
2302 CB_INFO_TYPE2_BEGIN(IDC_COMBO_VBR)
2303 	"Quality 0 (320 - 32 kbps)",(char *)0,
2304 	"Quality 1 (256 - 32 kbps)",(char *)1,
2305 	"Quality 2 (256 - 32 kbps)",(char *)2,
2306 	"Quality 3 (256 - 32 kbps)",(char *)3,
2307 	"Quality 4 (256 - 32 kbps)",(char *)4,
2308 	"Quality 5 (224 - 32 kbps)",(char *)5,
2309 	"Quality 6 (192 - 32 kbps)",(char *)6,
2310 	"Quality 7 (160 - 32 kbps)",(char *)7,
2311 	"Quality 8 (128 - 32 kbps)",(char *)8,
2312 	"Quality 9 (128 - 32 kbps)",(char *)9,
2313 	NULL
2314 CB_INFO_TYPE2_END
2315 
2316 // id �̃R���{�{�b�N�X��I���̐ݒ肷��B
2317 #define CB_SETCURSEL_TYPE1(id) \
2318 { \
2319 	int cb_num; \
2320 	for(cb_num=0;(int)cb_info_ ## id [cb_num]>=0;cb_num++){ \
2321 		SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)0,(LPARAM)0); \
2322 		if(gogo_ConfigDialogInfo.opt ## id == (int) cb_info_ ## id [cb_num]){ \
2323 			SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)cb_num,(LPARAM)0); \
2324 			break; \
2325 		} \
2326 	} \
2327 }
2328 #define CB_SETCURSEL_TYPE2(id) \
2329 { \
2330 	int cb_num; \
2331 	for(cb_num=0;(int)cb_info_ ## id [cb_num];cb_num+=2){ \
2332 		SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)0,(LPARAM)0); \
2333 	    if(gogo_ConfigDialogInfo.opt ## id == (int) cb_info_ ## id [cb_num+1]){ \
2334 			SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)cb_num/2,(LPARAM)0); \
2335 			break; \
2336 		} \
2337 	} \
2338 }
2339 // id �̃R���{�{�b�N�X�̑I����ϐ��ɑ������B
2340 #define CB_GETCURSEL_TYPE1(id) \
2341 { \
2342 	int cb_num1, cb_num2; \
2343 	cb_num1 = SendDlgItemMessage(hwnd,id,CB_GETCURSEL,(WPARAM)0,(LPARAM)0); \
2344 	for(cb_num2=0;(int)cb_info_ ## id [cb_num2]>=0;cb_num2++) \
2345 		if(cb_num1==cb_num2){ \
2346 			gogo_ConfigDialogInfo.opt ## id = (int)cb_info_ ## id [cb_num2]; \
2347 			break; \
2348 		} \
2349 }
2350 #define CB_GETCURSEL_TYPE2(id) \
2351 { \
2352 	int cb_num1, cb_num2; \
2353 	cb_num1 = SendDlgItemMessage(hwnd,id,CB_GETCURSEL,(WPARAM)0,(LPARAM)0); \
2354 	for(cb_num2=0;(int)cb_info_ ## id [cb_num2];cb_num2+=2) \
2355 		if(cb_num1*2==cb_num2){ \
2356 			gogo_ConfigDialogInfo.opt ## id = (int)cb_info_ ## id [cb_num2+1]; \
2357 			break; \
2358 		} \
2359 }
2360 // �`�F�b�N����Ă��邩�B
2361 #define IS_CHECK(id) SendDlgItemMessage(hwnd,id,BM_GETCHECK,0,0)
2362 // �`�F�b�N����B
2363 #define CHECK(id) SendDlgItemMessage(hwnd,id,BM_SETCHECK,1,0)
2364 // �`�F�b�N���͂����B
2365 #define UNCHECK(id) SendDlgItemMessage(hwnd,id,BM_SETCHECK,0,0)
2366 // id �̃`�F�b�N�{�b�N�X��ݒ肷��B
2367 #define CHECKBOX_SET(id) \
2368 	if(gogo_ConfigDialogInfo.opt ## id>0) \
2369 		SendDlgItemMessage(hwnd,id,BM_SETCHECK,1,0); \
2370 	else \
2371 		SendDlgItemMessage(hwnd,id,BM_SETCHECK,0,0); \
2372 // id �̃`�F�b�N�{�b�N�X��ϐ��ɑ������B
2373 #define CHECKBOX_GET(id) \
2374 	if(SendDlgItemMessage(hwnd,id,BM_GETCHECK,0,0)) \
2375 		gogo_ConfigDialogInfo.opt ## id = 1; \
2376 	else \
2377 		gogo_ConfigDialogInfo.opt ## id = 0; \
2378 // id �̃G�f�B�b�g��ݒ肷��B
2379 #define EDIT_SET(id) SendDlgItemMessage(hwnd,id,WM_SETTEXT,0,(LPARAM)gogo_ConfigDialogInfo.opt ## id);
2380 // id �̃G�f�B�b�g��ϐ��ɑ������B
2381 #define EDIT_GET(id,size) SendDlgItemMessage(hwnd,id,WM_GETTEXT,(WPARAM)size,(LPARAM)gogo_ConfigDialogInfo.opt ## id);
2382 #define EDIT_GET_RANGE(id,size,min,max) \
2383 { \
2384 	char tmpbuf[1024]; \
2385 	int value; \
2386 	SendDlgItemMessage(hwnd,id,WM_GETTEXT,(WPARAM)size,(LPARAM)gogo_ConfigDialogInfo.opt ## id); \
2387 	value = atoi((char *)gogo_ConfigDialogInfo.opt ## id); \
2388 	if(value<min) value = min; \
2389 	if(value>max) value = max; \
2390 	sprintf(tmpbuf,"%d",value); \
2391 	strncpy((char *)gogo_ConfigDialogInfo.opt ## id,tmpbuf,size); \
2392 	(gogo_ConfigDialogInfo.opt ## id)[size] = '\0'; \
2393 }
2394 // �R���g���[���̗L����
2395 #define ENABLE_CONTROL(id) EnableWindow(GetDlgItem(hwnd,id),TRUE);
2396 // �R���g���[���̖�����
2397 #define DISABLE_CONTROL(id) EnableWindow(GetDlgItem(hwnd,id),FALSE);
2398 
2399 static void gogoConfigDialogProcControlEnableDisable(HWND hwnd);
2400 static void gogoConfigDialogProcControlApply(HWND hwnd);
2401 static void gogoConfigDialogProcControlReset(HWND hwnd);
2402 static int gogo_ConfigDialogInfoLock();
2403 static int gogo_ConfigDialogInfoUnLock();
2404 static HANDLE hgogoConfigDailog = NULL;
gogoConfigDialogProc(HWND hwnd,UINT uMess,WPARAM wParam,LPARAM lParam)2405 static BOOL APIENTRY gogoConfigDialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
2406 {
2407 	char buff[1024];
2408 	switch (uMess){
2409 	case WM_INITDIALOG:
2410 	{
2411 		int i;
2412 		// �R���{�{�b�N�X�̏�����
2413 		for(i=0;cb_info_IDC_COMBO_OUTPUT_FORMAT[i];i+=2){
2414 			SendDlgItemMessage(hwnd,IDC_COMBO_OUTPUT_FORMAT,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_OUTPUT_FORMAT[i]);
2415 		}
2416 		for(i=0;cb_info_IDC_COMBO_MPEG1_AUDIO_BITRATE[i]>=0;i++){
2417 			sprintf(buff,"%d kbit/sec",cb_info_IDC_COMBO_MPEG1_AUDIO_BITRATE[i]);
2418 			SendDlgItemMessage(hwnd,IDC_COMBO_MPEG1_AUDIO_BITRATE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)buff);
2419 		}
2420 		for(i=0;cb_info_IDC_COMBO_MPEG2_AUDIO_BITRATE[i]>=0;i++){
2421 			sprintf(buff,"%d kbit/sec",cb_info_IDC_COMBO_MPEG2_AUDIO_BITRATE[i]);
2422 			SendDlgItemMessage(hwnd,IDC_COMBO_MPEG2_AUDIO_BITRATE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)buff);
2423 		}
2424 		for(i=0;cb_info_IDC_COMBO_ENCODE_MODE[i];i+=2){
2425 			SendDlgItemMessage(hwnd,IDC_COMBO_ENCODE_MODE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_ENCODE_MODE[i]);
2426 		}
2427 		for(i=0;cb_info_IDC_COMBO_EMPHASIS_TYPE[i];i+=2){
2428 			SendDlgItemMessage(hwnd,IDC_COMBO_EMPHASIS_TYPE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_EMPHASIS_TYPE[i]);
2429 		}
2430 		for(i=0;cb_info_IDC_COMBO_VBR_BITRATE_LOW[i]>=0;i++){
2431 			sprintf(buff,"%d kbit/sec",cb_info_IDC_COMBO_VBR_BITRATE_LOW[i]);
2432 			SendDlgItemMessage(hwnd,IDC_COMBO_VBR_BITRATE_LOW,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)buff);
2433 		}
2434 		for(i=0;cb_info_IDC_COMBO_VBR_BITRATE_HIGH[i]>=0;i++){
2435 			sprintf(buff,"%d kbit/sec",cb_info_IDC_COMBO_VBR_BITRATE_HIGH[i]);
2436 			SendDlgItemMessage(hwnd,IDC_COMBO_VBR_BITRATE_HIGH,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)buff);
2437 		}
2438 		for(i=0;cb_info_IDC_COMBO_VBR[i];i+=2){
2439 			SendDlgItemMessage(hwnd,IDC_COMBO_VBR,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_VBR[i]);
2440 		}
2441 		// �ݒ�
2442 		gogoConfigDialogProcControlReset(hwnd);
2443 	}
2444 		break;
2445 	case WM_COMMAND:
2446 		switch (LOWORD(wParam)) {
2447 		case IDCLOSE:
2448 			SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);
2449 			break;
2450 		case IDOK:
2451 			gogoConfigDialogProcControlApply(hwnd);
2452 			SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);
2453 			break;
2454 		case IDCANCEL:
2455 			SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);
2456 			break;
2457 		case IDC_BUTTON_APPLY:
2458 			gogoConfigDialogProcControlApply(hwnd);
2459 			break;
2460 		case IDC_CHECK_DEFAULT:
2461 			gogoConfigDialogProcControlEnableDisable(hwnd);
2462 			break;
2463 		case IDC_CHECK_COMMANDLINE_OPTS:
2464 			gogoConfigDialogProcControlEnableDisable(hwnd);
2465 			break;
2466 		case IDC_EDIT_COMMANDLINE_OPTION:
2467 			break;
2468 		case IDC_CHECK_OUTPUT_FORMAT:
2469 			gogoConfigDialogProcControlEnableDisable(hwnd);
2470 			break;
2471 		case IDC_COMBO_OUTPUT_FORMAT:
2472 			break;
2473 		case IDC_CHECK_MPEG1AUDIOBITRATE:
2474 			if(IS_CHECK(IDC_CHECK_MPEG1AUDIOBITRATE)){
2475 				CHECK(IDC_CHECK_MPEG2AUDIOBITRATE);
2476 				UNCHECK(IDC_CHECK_VBR);
2477 				UNCHECK(IDC_CHECK_VBR_BITRATE);
2478 			} else {
2479 				UNCHECK(IDC_CHECK_MPEG2AUDIOBITRATE);
2480 			}
2481 			gogoConfigDialogProcControlEnableDisable(hwnd);
2482 			break;
2483 		case IDC_COMBO_MPEG1_AUDIO_BITRATE:
2484 			break;
2485 		case IDC_CHECK_MPEG2AUDIOBITRATE:
2486 			if(IS_CHECK(IDC_CHECK_MPEG2AUDIOBITRATE)){
2487 				CHECK(IDC_CHECK_MPEG1AUDIOBITRATE);
2488 				UNCHECK(IDC_CHECK_VBR);
2489 				UNCHECK(IDC_CHECK_VBR_BITRATE);
2490 			} else {
2491 				UNCHECK(IDC_CHECK_MPEG1AUDIOBITRATE);
2492 			}
2493 			gogoConfigDialogProcControlEnableDisable(hwnd);
2494 			break;
2495 		case IDC_COMBO_MPEG2_AUDIO_BITRATE:
2496 			break;
2497 		case IDC_CHECK_ENHANCED_LOW_PASS_FILTER:
2498 			if(IS_CHECK(IDC_CHECK_ENHANCED_LOW_PASS_FILTER)){
2499 				UNCHECK(IDC_CHECK_16KHZ_LOW_PASS_FILTER);
2500 			}
2501 			gogoConfigDialogProcControlEnableDisable(hwnd);
2502 			break;
2503 		case IDC_EDIT_LPF_PARA1:
2504 			break;
2505 		case IDC_EDIT_LPF_PARA2:
2506 			break;
2507 		case IDC_CHECK_ENCODE_MODE:
2508 			gogoConfigDialogProcControlEnableDisable(hwnd);
2509 			break;
2510 		case IDC_COMBO_ENCODE_MODE:
2511 			break;
2512 		case IDC_CHECK_EMPHASIS_TYPE:
2513 			gogoConfigDialogProcControlEnableDisable(hwnd);
2514 			break;
2515 		case IDC_COMBO_EMPHASIS_TYPE:
2516 			break;
2517 		case IDC_CHECK_OUTFREQ:
2518 			gogoConfigDialogProcControlEnableDisable(hwnd);
2519 			break;
2520 		case IDC_EDIT_OUTFREQ:
2521 			break;
2522 		case IDC_CHECK_MSTHRESHOLD:
2523 			gogoConfigDialogProcControlEnableDisable(hwnd);
2524 			break;
2525 		case IDC_EDIT_MSTHRESHOLD_THRESHOLD:
2526 			break;
2527 		case IDC_EDIT_MSTHRESHOLD_MSPOWER:
2528 			break;
2529 		case IDC_CHECK_USE_CPU_OPTS:
2530 			gogoConfigDialogProcControlEnableDisable(hwnd);
2531 			break;
2532 		case IDC_CHECK_CPUMMX:
2533 			break;
2534 		case IDC_CHECK_CPUSSE:
2535 			break;
2536 		case IDC_CHECK_CPU3DNOW:
2537 			break;
2538 		case IDC_CHECK_CPUE3DNOW:
2539 			break;
2540 		case IDC_CHECK_CPUCMOV:
2541 			break;
2542 		case IDC_CHECK_CPUEMMX:
2543 			break;
2544 		case IDC_CHECK_CPUSSE2:
2545 			break;
2546 		case IDC_CHECK_VBR:
2547 			if(IS_CHECK(IDC_CHECK_VBR)){
2548 				UNCHECK(IDC_COMBO_MPEG1_AUDIO_BITRATE);
2549 				UNCHECK(IDC_COMBO_MPEG2_AUDIO_BITRATE);
2550 			}
2551 			gogoConfigDialogProcControlEnableDisable(hwnd);
2552 			break;
2553 		case IDC_COMBO_VBR:
2554 			break;
2555 		case IDC_CHECK_VBR_BITRATE:
2556 			if(IS_CHECK(IDC_CHECK_VBR_BITRATE)){
2557 				CHECK(IDC_CHECK_VBR);
2558 				UNCHECK(IDC_COMBO_MPEG1_AUDIO_BITRATE);
2559 				UNCHECK(IDC_COMBO_MPEG2_AUDIO_BITRATE);
2560 			}
2561 			gogoConfigDialogProcControlEnableDisable(hwnd);
2562 			break;
2563 		case IDC_COMBO_VBR_BITRATE_LOW:
2564 			break;
2565 		case IDC_COMBO_VBR_BITRATE_HIGH:
2566 			break;
2567 		case IDC_CHECK_USEPSY:
2568 			break;
2569 		case IDC_CHECK_VERIFY:
2570 			break;
2571 		case IDC_CHECK_16KHZ_LOW_PASS_FILTER:
2572 			if(IS_CHECK(IDC_CHECK_16KHZ_LOW_PASS_FILTER)){
2573 				UNCHECK(IDC_CHECK_ENHANCED_LOW_PASS_FILTER);
2574 			}
2575 			gogoConfigDialogProcControlEnableDisable(hwnd);
2576 			break;
2577 		default:
2578 			break;
2579 		}
2580 		break;
2581 	case WM_NOTIFY:
2582 		break;
2583 	case WM_SIZE:
2584 		return FALSE;
2585 	case WM_CLOSE:
2586 		gogo_ConfigDialogInfoSaveINI();
2587 //MessageBox(NULL,"CLOSE","CLOSE",MB_OK);
2588 		DestroyWindow(hwnd);
2589 		break;
2590 	case WM_DESTROY:
2591 		hgogoConfigDailog = NULL;
2592 //MessageBox(NULL,"DESTROY","DESTROY",MB_OK);
2593 		break;
2594 	default:
2595 		break;
2596 	}
2597 	return FALSE;
2598 }
2599 
2600 // �R���g���[���̗L�� / ������
gogoConfigDialogProcControlEnableDisable(HWND hwnd)2601 static void gogoConfigDialogProcControlEnableDisable(HWND hwnd)
2602 {
2603 	ENABLE_CONTROL(IDC_CHECK_DEFAULT);
2604 	if(IS_CHECK(IDC_CHECK_DEFAULT)){
2605 		DISABLE_CONTROL(IDC_CHECK_COMMANDLINE_OPTS);
2606 		DISABLE_CONTROL(IDC_EDIT_COMMANDLINE_OPTION);
2607 		DISABLE_CONTROL(IDC_CHECK_OUTPUT_FORMAT);
2608 		DISABLE_CONTROL(IDC_COMBO_OUTPUT_FORMAT);
2609 		DISABLE_CONTROL(IDC_CHECK_MPEG1AUDIOBITRATE);
2610 		DISABLE_CONTROL(IDC_COMBO_MPEG1_AUDIO_BITRATE);
2611 		DISABLE_CONTROL(IDC_CHECK_MPEG2AUDIOBITRATE);
2612 		DISABLE_CONTROL(IDC_COMBO_MPEG2_AUDIO_BITRATE);
2613 		DISABLE_CONTROL(IDC_CHECK_ENHANCED_LOW_PASS_FILTER);
2614 		DISABLE_CONTROL(IDC_EDIT_LPF_PARA1);
2615 		DISABLE_CONTROL(IDC_EDIT_LPF_PARA2);
2616 		DISABLE_CONTROL(IDC_CHECK_ENCODE_MODE);
2617 		DISABLE_CONTROL(IDC_COMBO_ENCODE_MODE);
2618 		DISABLE_CONTROL(IDC_CHECK_EMPHASIS_TYPE);
2619 		DISABLE_CONTROL(IDC_COMBO_EMPHASIS_TYPE);
2620 		DISABLE_CONTROL(IDC_CHECK_OUTFREQ);
2621 		DISABLE_CONTROL(IDC_EDIT_OUTFREQ);
2622 		DISABLE_CONTROL(IDC_CHECK_MSTHRESHOLD);
2623 		DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_THRESHOLD);
2624 		DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_MSPOWER);
2625 		DISABLE_CONTROL(IDC_CHECK_USE_CPU_OPTS);
2626 		DISABLE_CONTROL(IDC_CHECK_CPUMMX);
2627 		DISABLE_CONTROL(IDC_CHECK_CPUSSE);
2628 		DISABLE_CONTROL(IDC_CHECK_CPU3DNOW);
2629 		DISABLE_CONTROL(IDC_CHECK_CPUE3DNOW);
2630 		DISABLE_CONTROL(IDC_CHECK_CPUCMOV);
2631 		DISABLE_CONTROL(IDC_CHECK_CPUEMMX);
2632 		DISABLE_CONTROL(IDC_CHECK_CPUSSE2);
2633 		DISABLE_CONTROL(IDC_CHECK_VBR);
2634 		DISABLE_CONTROL(IDC_COMBO_VBR);
2635 		DISABLE_CONTROL(IDC_CHECK_VBR_BITRATE);
2636 		DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_LOW);
2637 		DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_HIGH);
2638 		DISABLE_CONTROL(IDC_CHECK_USEPSY);
2639 		DISABLE_CONTROL(IDC_CHECK_VERIFY);
2640 		DISABLE_CONTROL(IDC_CHECK_16KHZ_LOW_PASS_FILTER);
2641 	} else {
2642 		ENABLE_CONTROL(IDC_CHECK_COMMANDLINE_OPTS);
2643 		if(IS_CHECK(IDC_CHECK_COMMANDLINE_OPTS)){
2644 			ENABLE_CONTROL(IDC_EDIT_COMMANDLINE_OPTION);
2645 			DISABLE_CONTROL(IDC_CHECK_OUTPUT_FORMAT);
2646 			DISABLE_CONTROL(IDC_COMBO_OUTPUT_FORMAT);
2647 			DISABLE_CONTROL(IDC_CHECK_MPEG1AUDIOBITRATE);
2648 			DISABLE_CONTROL(IDC_COMBO_MPEG1_AUDIO_BITRATE);
2649 			DISABLE_CONTROL(IDC_CHECK_MPEG2AUDIOBITRATE);
2650 			DISABLE_CONTROL(IDC_COMBO_MPEG2_AUDIO_BITRATE);
2651 			DISABLE_CONTROL(IDC_CHECK_ENHANCED_LOW_PASS_FILTER);
2652 			DISABLE_CONTROL(IDC_EDIT_LPF_PARA1);
2653 			DISABLE_CONTROL(IDC_EDIT_LPF_PARA2);
2654 			DISABLE_CONTROL(IDC_CHECK_ENCODE_MODE);
2655 			DISABLE_CONTROL(IDC_COMBO_ENCODE_MODE);
2656 			DISABLE_CONTROL(IDC_CHECK_EMPHASIS_TYPE);
2657 			DISABLE_CONTROL(IDC_COMBO_EMPHASIS_TYPE);
2658 			DISABLE_CONTROL(IDC_CHECK_OUTFREQ);
2659 			DISABLE_CONTROL(IDC_EDIT_OUTFREQ);
2660 			DISABLE_CONTROL(IDC_CHECK_MSTHRESHOLD);
2661 			DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_THRESHOLD);
2662 			DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_MSPOWER);
2663 			DISABLE_CONTROL(IDC_CHECK_USE_CPU_OPTS);
2664 			DISABLE_CONTROL(IDC_CHECK_CPUMMX);
2665 			DISABLE_CONTROL(IDC_CHECK_CPUSSE);
2666 			DISABLE_CONTROL(IDC_CHECK_CPU3DNOW);
2667 			DISABLE_CONTROL(IDC_CHECK_CPUE3DNOW);
2668 			DISABLE_CONTROL(IDC_CHECK_CPUCMOV);
2669 			DISABLE_CONTROL(IDC_CHECK_CPUEMMX);
2670 			DISABLE_CONTROL(IDC_CHECK_CPUSSE2);
2671 			DISABLE_CONTROL(IDC_CHECK_VBR);
2672 			DISABLE_CONTROL(IDC_COMBO_VBR);
2673 			DISABLE_CONTROL(IDC_CHECK_VBR_BITRATE);
2674 			DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_LOW);
2675 			DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_HIGH);
2676 			DISABLE_CONTROL(IDC_CHECK_USEPSY);
2677 			DISABLE_CONTROL(IDC_CHECK_VERIFY);
2678 			DISABLE_CONTROL(IDC_CHECK_16KHZ_LOW_PASS_FILTER);
2679 		} else {
2680 			DISABLE_CONTROL(IDC_EDIT_COMMANDLINE_OPTION);
2681 			ENABLE_CONTROL(IDC_CHECK_OUTPUT_FORMAT);
2682 			if(IS_CHECK(IDC_CHECK_OUTPUT_FORMAT)){
2683 				ENABLE_CONTROL(IDC_COMBO_OUTPUT_FORMAT);
2684 			} else {
2685 				DISABLE_CONTROL(IDC_COMBO_OUTPUT_FORMAT);
2686 			}
2687 			ENABLE_CONTROL(IDC_CHECK_16KHZ_LOW_PASS_FILTER);
2688 			ENABLE_CONTROL(IDC_CHECK_ENHANCED_LOW_PASS_FILTER);
2689 			if(IS_CHECK(IDC_CHECK_16KHZ_LOW_PASS_FILTER)){
2690 				UNCHECK(IDC_CHECK_ENHANCED_LOW_PASS_FILTER);
2691 				DISABLE_CONTROL(IDC_EDIT_LPF_PARA1);
2692 				DISABLE_CONTROL(IDC_EDIT_LPF_PARA2);
2693 			} else {
2694 				if(IS_CHECK(IDC_CHECK_ENHANCED_LOW_PASS_FILTER)){
2695 					UNCHECK(IDC_CHECK_16KHZ_LOW_PASS_FILTER);
2696 					ENABLE_CONTROL(IDC_EDIT_LPF_PARA1);
2697 					ENABLE_CONTROL(IDC_EDIT_LPF_PARA2);
2698 				} else {
2699 					DISABLE_CONTROL(IDC_EDIT_LPF_PARA1);
2700 					DISABLE_CONTROL(IDC_EDIT_LPF_PARA2);
2701 				}
2702 			}
2703 			ENABLE_CONTROL(IDC_CHECK_ENCODE_MODE);
2704 			if(IS_CHECK(IDC_CHECK_ENCODE_MODE)){
2705 				ENABLE_CONTROL(IDC_COMBO_ENCODE_MODE);
2706 			} else {
2707 				DISABLE_CONTROL(IDC_COMBO_ENCODE_MODE);
2708 			}
2709 			ENABLE_CONTROL(IDC_CHECK_EMPHASIS_TYPE);
2710 			if(IS_CHECK(IDC_CHECK_EMPHASIS_TYPE)){
2711 				ENABLE_CONTROL(IDC_COMBO_EMPHASIS_TYPE);
2712 			} else {
2713 				DISABLE_CONTROL(IDC_COMBO_EMPHASIS_TYPE);
2714 			}
2715 			ENABLE_CONTROL(IDC_CHECK_OUTFREQ);
2716 			if(IS_CHECK(IDC_CHECK_OUTFREQ)){
2717 				ENABLE_CONTROL(IDC_EDIT_OUTFREQ);
2718 			} else {
2719 				DISABLE_CONTROL(IDC_EDIT_OUTFREQ);
2720 			}
2721 			ENABLE_CONTROL(IDC_CHECK_MSTHRESHOLD);
2722 			if(IS_CHECK(IDC_CHECK_MSTHRESHOLD)){
2723 				ENABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_THRESHOLD);
2724 				ENABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_MSPOWER);
2725 			} else {
2726 				DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_THRESHOLD);
2727 				DISABLE_CONTROL(IDC_EDIT_MSTHRESHOLD_MSPOWER);
2728 			}
2729 			ENABLE_CONTROL(IDC_CHECK_USE_CPU_OPTS);
2730 			if(IS_CHECK(IDC_CHECK_USE_CPU_OPTS)){
2731 				ENABLE_CONTROL(IDC_CHECK_CPUMMX);
2732 				ENABLE_CONTROL(IDC_CHECK_CPUSSE);
2733 				ENABLE_CONTROL(IDC_CHECK_CPU3DNOW);
2734 				ENABLE_CONTROL(IDC_CHECK_CPUE3DNOW);
2735 				ENABLE_CONTROL(IDC_CHECK_CPUCMOV);
2736 				ENABLE_CONTROL(IDC_CHECK_CPUEMMX);
2737 				ENABLE_CONTROL(IDC_CHECK_CPUSSE2);
2738 			} else {
2739 				DISABLE_CONTROL(IDC_CHECK_CPUMMX);
2740 				DISABLE_CONTROL(IDC_CHECK_CPUSSE);
2741 				DISABLE_CONTROL(IDC_CHECK_CPU3DNOW);
2742 				DISABLE_CONTROL(IDC_CHECK_CPUE3DNOW);
2743 				DISABLE_CONTROL(IDC_CHECK_CPUCMOV);
2744 				DISABLE_CONTROL(IDC_CHECK_CPUEMMX);
2745 				DISABLE_CONTROL(IDC_CHECK_CPUSSE2);
2746 			}
2747 			ENABLE_CONTROL(IDC_CHECK_VBR);
2748 			ENABLE_CONTROL(IDC_CHECK_MPEG1AUDIOBITRATE);
2749 			ENABLE_CONTROL(IDC_CHECK_MPEG2AUDIOBITRATE);
2750 			if(IS_CHECK(IDC_CHECK_VBR)){
2751 				ENABLE_CONTROL(IDC_COMBO_VBR);
2752 				ENABLE_CONTROL(IDC_CHECK_VBR_BITRATE);
2753 				if(IS_CHECK(IDC_CHECK_VBR_BITRATE)){
2754 					ENABLE_CONTROL(IDC_COMBO_VBR_BITRATE_LOW);
2755 					ENABLE_CONTROL(IDC_COMBO_VBR_BITRATE_HIGH);
2756 				} else {
2757 					DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_LOW);
2758 					DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_HIGH);
2759 				}
2760 				UNCHECK(IDC_CHECK_MPEG1AUDIOBITRATE);
2761 				UNCHECK(IDC_CHECK_MPEG2AUDIOBITRATE);
2762 				DISABLE_CONTROL(IDC_COMBO_MPEG1_AUDIO_BITRATE);
2763 				DISABLE_CONTROL(IDC_COMBO_MPEG2_AUDIO_BITRATE);
2764 			} else {
2765 				UNCHECK(IDC_CHECK_VBR_BITRATE);
2766 				DISABLE_CONTROL(IDC_COMBO_VBR);
2767 				DISABLE_CONTROL(IDC_CHECK_VBR_BITRATE);
2768 				DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_LOW);
2769 				DISABLE_CONTROL(IDC_COMBO_VBR_BITRATE_HIGH);
2770 				if(IS_CHECK(IDC_CHECK_MPEG1AUDIOBITRATE)){
2771 					ENABLE_CONTROL(IDC_COMBO_MPEG1_AUDIO_BITRATE);
2772 				} else {
2773 					DISABLE_CONTROL(IDC_COMBO_MPEG1_AUDIO_BITRATE);
2774 				}
2775 				if(IS_CHECK(IDC_CHECK_MPEG2AUDIOBITRATE)){
2776 					ENABLE_CONTROL(IDC_COMBO_MPEG2_AUDIO_BITRATE);
2777 				} else {
2778 					DISABLE_CONTROL(IDC_COMBO_MPEG2_AUDIO_BITRATE);
2779 				}
2780 			}
2781 			ENABLE_CONTROL(IDC_CHECK_USEPSY);
2782 			ENABLE_CONTROL(IDC_CHECK_VERIFY);
2783 		}
2784 	}
2785 }
2786 
gogoConfigDialogProcControlReset(HWND hwnd)2787 static void gogoConfigDialogProcControlReset(HWND hwnd)
2788 {
2789 	// �R���{�{�b�N�X�̑I��ݒ�
2790 	CB_SETCURSEL_TYPE2(IDC_COMBO_OUTPUT_FORMAT)
2791 	CB_SETCURSEL_TYPE1(IDC_COMBO_MPEG1_AUDIO_BITRATE)
2792 	CB_SETCURSEL_TYPE1(IDC_COMBO_MPEG2_AUDIO_BITRATE)
2793 	CB_SETCURSEL_TYPE2(IDC_COMBO_ENCODE_MODE)
2794 	CB_SETCURSEL_TYPE2(IDC_COMBO_EMPHASIS_TYPE)
2795 	CB_SETCURSEL_TYPE1(IDC_COMBO_VBR_BITRATE_LOW)
2796 	CB_SETCURSEL_TYPE1(IDC_COMBO_VBR_BITRATE_HIGH)
2797 	CB_SETCURSEL_TYPE2(IDC_COMBO_VBR)
2798 	// �`�F�b�N�{�b�N�X�̐ݒ�
2799 	CHECKBOX_SET(IDC_CHECK_DEFAULT)
2800 	CHECKBOX_SET(IDC_CHECK_COMMANDLINE_OPTS)
2801 	CHECKBOX_SET(IDC_CHECK_OUTPUT_FORMAT)
2802 	CHECKBOX_SET(IDC_CHECK_MPEG1AUDIOBITRATE)
2803 	CHECKBOX_SET(IDC_CHECK_MPEG2AUDIOBITRATE)
2804 	CHECKBOX_SET(IDC_CHECK_ENHANCED_LOW_PASS_FILTER)
2805 	CHECKBOX_SET(IDC_CHECK_ENCODE_MODE)
2806 	CHECKBOX_SET(IDC_CHECK_EMPHASIS_TYPE)
2807 	CHECKBOX_SET(IDC_CHECK_OUTFREQ)
2808 	CHECKBOX_SET(IDC_CHECK_MSTHRESHOLD)
2809 	CHECKBOX_SET(IDC_CHECK_USE_CPU_OPTS)
2810 	CHECKBOX_SET(IDC_CHECK_CPUMMX)
2811 	CHECKBOX_SET(IDC_CHECK_CPUSSE)
2812 	CHECKBOX_SET(IDC_CHECK_CPU3DNOW)
2813 	CHECKBOX_SET(IDC_CHECK_CPUE3DNOW)
2814 	CHECKBOX_SET(IDC_CHECK_CPUCMOV)
2815 	CHECKBOX_SET(IDC_CHECK_CPUEMMX)
2816 	CHECKBOX_SET(IDC_CHECK_CPUSSE2)
2817 	CHECKBOX_SET(IDC_CHECK_VBR)
2818 	CHECKBOX_SET(IDC_CHECK_VBR_BITRATE)
2819 	CHECKBOX_SET(IDC_CHECK_USEPSY)
2820 	CHECKBOX_SET(IDC_CHECK_VERIFY)
2821 	CHECKBOX_SET(IDC_CHECK_16KHZ_LOW_PASS_FILTER)
2822 	// �G�f�B�b�g�̐ݒ�
2823 	EDIT_SET(IDC_EDIT_OUTFREQ)
2824 	EDIT_SET(IDC_EDIT_MSTHRESHOLD_THRESHOLD)
2825 	EDIT_SET(IDC_EDIT_MSTHRESHOLD_MSPOWER)
2826 	EDIT_SET(IDC_EDIT_COMMANDLINE_OPTION)
2827 	EDIT_SET(IDC_EDIT_LPF_PARA1)
2828 	EDIT_SET(IDC_EDIT_LPF_PARA2)
2829 	// �R���g���[���̗L�� / ������
2830 	gogoConfigDialogProcControlEnableDisable(hwnd);
2831 }
2832 
gogoConfigDialogProcControlApply(HWND hwnd)2833 static void gogoConfigDialogProcControlApply(HWND hwnd)
2834 {
2835 	// �R���{�{�b�N�X�̑I��ݒ�
2836 	CB_GETCURSEL_TYPE2(IDC_COMBO_OUTPUT_FORMAT)
2837 	CB_GETCURSEL_TYPE1(IDC_COMBO_MPEG1_AUDIO_BITRATE)
2838 	CB_GETCURSEL_TYPE1(IDC_COMBO_MPEG2_AUDIO_BITRATE)
2839 	CB_GETCURSEL_TYPE2(IDC_COMBO_ENCODE_MODE)
2840 	CB_GETCURSEL_TYPE2(IDC_COMBO_EMPHASIS_TYPE)
2841 	CB_GETCURSEL_TYPE1(IDC_COMBO_VBR_BITRATE_LOW)
2842 	CB_GETCURSEL_TYPE1(IDC_COMBO_VBR_BITRATE_HIGH)
2843 	CB_GETCURSEL_TYPE2(IDC_COMBO_VBR)
2844 	// �`�F�b�N�{�b�N�X�̐ݒ�
2845 	CHECKBOX_GET(IDC_CHECK_DEFAULT)
2846 	CHECKBOX_GET(IDC_CHECK_COMMANDLINE_OPTS)
2847 	CHECKBOX_GET(IDC_CHECK_OUTPUT_FORMAT)
2848 	CHECKBOX_GET(IDC_CHECK_MPEG1AUDIOBITRATE)
2849 	CHECKBOX_GET(IDC_CHECK_MPEG2AUDIOBITRATE)
2850 	CHECKBOX_GET(IDC_CHECK_ENHANCED_LOW_PASS_FILTER)
2851 	CHECKBOX_GET(IDC_CHECK_ENCODE_MODE)
2852 	CHECKBOX_GET(IDC_CHECK_EMPHASIS_TYPE)
2853 	CHECKBOX_GET(IDC_CHECK_OUTFREQ)
2854 	CHECKBOX_GET(IDC_CHECK_MSTHRESHOLD)
2855 	CHECKBOX_GET(IDC_CHECK_USE_CPU_OPTS)
2856 	CHECKBOX_GET(IDC_CHECK_CPUMMX)
2857 	CHECKBOX_GET(IDC_CHECK_CPUSSE)
2858 	CHECKBOX_GET(IDC_CHECK_CPU3DNOW)
2859 	CHECKBOX_GET(IDC_CHECK_CPUE3DNOW)
2860 	CHECKBOX_GET(IDC_CHECK_CPUCMOV)
2861 	CHECKBOX_GET(IDC_CHECK_CPUEMMX)
2862 	CHECKBOX_GET(IDC_CHECK_CPUSSE2)
2863 	CHECKBOX_GET(IDC_CHECK_VBR)
2864 	CHECKBOX_GET(IDC_CHECK_VBR_BITRATE)
2865 	CHECKBOX_GET(IDC_CHECK_USEPSY)
2866 	CHECKBOX_GET(IDC_CHECK_VERIFY)
2867 	CHECKBOX_GET(IDC_CHECK_16KHZ_LOW_PASS_FILTER)
2868 	// �G�f�B�b�g�̐ݒ�
2869 	EDIT_GET_RANGE(IDC_EDIT_OUTFREQ,6,MIN_OUTPUT_RATE,MAX_OUTPUT_RATE)
2870 	EDIT_GET_RANGE(IDC_EDIT_MSTHRESHOLD_THRESHOLD,4,0,100)
2871 	EDIT_GET_RANGE(IDC_EDIT_MSTHRESHOLD_MSPOWER,4,0,100)
2872 	EDIT_GET(IDC_EDIT_COMMANDLINE_OPTION,1024)
2873 	EDIT_GET_RANGE(IDC_EDIT_LPF_PARA1,4,0,100)
2874 	EDIT_GET_RANGE(IDC_EDIT_LPF_PARA2,4,0,100)
2875 	// �R���g���[���̗L�� / ������
2876 	gogoConfigDialogProcControlEnableDisable(hwnd);
2877 	// ���Z�b�g
2878 	gogoConfigDialogProcControlReset(hwnd);
2879 }
2880 
2881 #undef CB_INFO_TYPE1_BEGIN
2882 #undef CB_INFO_TYPE1_END
2883 #undef CB_INFO_TYPE2_BEGIN
2884 #undef CB_INFO_TYPE2_END
2885 #undef CB_SETCURSEL_TYPE1
2886 #undef CB_SETCURSEL_TYPE2
2887 #undef CB_GETCURSEL_TYPE1
2888 #undef CB_GETCURSEL_TYPE2
2889 #undef CHECKBOX_SET
2890 #undef CHECKBOX_GET
2891 #undef EDIT_SET
2892 #undef EDIT_GET
2893 #undef EDIT_GET_RANGE
2894 
2895 #endif
2896 
gogoConfigDialog(void)2897 int gogoConfigDialog(void)
2898 {
2899 #ifdef AU_GOGO
2900   if(!IsWindow(hgogoConfigDailog)) {
2901     if (PlayerLanguage == LANGUAGE_JAPANESE)
2902       hgogoConfigDailog = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG_GOGO),(HWND)hPrefWnd,gogoConfigDialogProc);
2903     else
2904       hgogoConfigDailog = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG_GOGO_EN),(HWND)hPrefWnd,gogoConfigDialogProc);
2905   }
2906   ShowWindow(hgogoConfigDailog,SW_SHOW);
2907 #endif
2908   return 0;
2909 }
2910 
2911 #ifdef AU_GOGO
2912 
gogo_ConfigDialogInfoLock()2913 static int gogo_ConfigDialogInfoLock()
2914 {
2915 	return 0;
2916 }
gogo_ConfigDialogInfoUnLock()2917 static int gogo_ConfigDialogInfoUnLock()
2918 {
2919 	return 0;
2920 }
2921 
2922 volatile gogo_ConfigDialogInfo_t gogo_ConfigDialogInfo;
2923 
gogo_ConfigDialogInfoInit(void)2924 int gogo_ConfigDialogInfoInit(void)
2925 {
2926 	gogo_ConfigDialogInfo.optIDC_CHECK_DEFAULT = 1;
2927 	gogo_ConfigDialogInfo.optIDC_CHECK_COMMANDLINE_OPTS = 0;
2928 	gogo_ConfigDialogInfo.optIDC_EDIT_COMMANDLINE_OPTION[0] = '\0';
2929 	gogo_ConfigDialogInfo.optIDC_CHECK_OUTPUT_FORMAT = 1;
2930 	gogo_ConfigDialogInfo.optIDC_COMBO_OUTPUT_FORMAT = MC_OUTPUT_NORMAL;
2931 	gogo_ConfigDialogInfo.optIDC_CHECK_MPEG1AUDIOBITRATE = 1;
2932 	gogo_ConfigDialogInfo.optIDC_COMBO_MPEG1_AUDIO_BITRATE = 160;
2933 	gogo_ConfigDialogInfo.optIDC_CHECK_MPEG2AUDIOBITRATE = 1;
2934 	gogo_ConfigDialogInfo.optIDC_COMBO_MPEG2_AUDIO_BITRATE = 80;
2935 	gogo_ConfigDialogInfo.optIDC_CHECK_ENHANCED_LOW_PASS_FILTER = 0;
2936 	strcpy((char *)gogo_ConfigDialogInfo.optIDC_EDIT_LPF_PARA1,"55");
2937 	strcpy((char *)gogo_ConfigDialogInfo.optIDC_EDIT_LPF_PARA2,"70");
2938 	gogo_ConfigDialogInfo.optIDC_CHECK_ENCODE_MODE = 1;
2939 	gogo_ConfigDialogInfo.optIDC_COMBO_ENCODE_MODE = MC_MODE_STEREO;
2940 	gogo_ConfigDialogInfo.optIDC_CHECK_EMPHASIS_TYPE = 1;
2941 	gogo_ConfigDialogInfo.optIDC_COMBO_EMPHASIS_TYPE = MC_EMP_NONE;
2942 	gogo_ConfigDialogInfo.optIDC_CHECK_OUTFREQ = 0;
2943 	strcpy((char *)gogo_ConfigDialogInfo.optIDC_EDIT_OUTFREQ,"44100");
2944 	gogo_ConfigDialogInfo.optIDC_CHECK_MSTHRESHOLD = 0;
2945 	strcpy((char *)gogo_ConfigDialogInfo.optIDC_EDIT_MSTHRESHOLD_THRESHOLD,"75");
2946 	strcpy((char *)gogo_ConfigDialogInfo.optIDC_EDIT_MSTHRESHOLD_MSPOWER,"66");
2947 	gogo_ConfigDialogInfo.optIDC_CHECK_USE_CPU_OPTS = 0;
2948 	gogo_ConfigDialogInfo.optIDC_CHECK_CPUMMX = 0;
2949 	gogo_ConfigDialogInfo.optIDC_CHECK_CPUSSE = 0;
2950 	gogo_ConfigDialogInfo.optIDC_CHECK_CPU3DNOW = 0;
2951 	gogo_ConfigDialogInfo.optIDC_CHECK_CPUE3DNOW = 0;
2952 	gogo_ConfigDialogInfo.optIDC_CHECK_CPUCMOV = 0;
2953 	gogo_ConfigDialogInfo.optIDC_CHECK_CPUEMMX = 0;
2954 	gogo_ConfigDialogInfo.optIDC_CHECK_CPUSSE2 = 0;
2955 	gogo_ConfigDialogInfo.optIDC_CHECK_VBR = 0;
2956 	gogo_ConfigDialogInfo.optIDC_COMBO_VBR = 0;
2957 	gogo_ConfigDialogInfo.optIDC_CHECK_VBR_BITRATE = 0;
2958 	gogo_ConfigDialogInfo.optIDC_COMBO_VBR_BITRATE_LOW = 32;
2959 	gogo_ConfigDialogInfo.optIDC_COMBO_VBR_BITRATE_HIGH = 320;
2960 	gogo_ConfigDialogInfo.optIDC_CHECK_USEPSY = 1;
2961 	gogo_ConfigDialogInfo.optIDC_CHECK_VERIFY = 0;
2962 	gogo_ConfigDialogInfo.optIDC_CHECK_16KHZ_LOW_PASS_FILTER = 1;
2963 	return 0;
2964 }
2965 
gogo_ConfigDialogInfoApply(void)2966 int gogo_ConfigDialogInfoApply(void)
2967 {
2968 	gogo_ConfigDialogInfoLock();
2969 	if(gogo_ConfigDialogInfo.optIDC_CHECK_DEFAULT>0){
2970 		gogo_opts_reset();
2971 		gogo_ConfigDialogInfoUnLock();
2972 		return 0;
2973 	}
2974 	if(gogo_ConfigDialogInfo.optIDC_CHECK_COMMANDLINE_OPTS>0){
2975 		gogo_opts_reset();
2976 		set_gogo_opts_use_commandline_options((char *)gogo_ConfigDialogInfo.optIDC_EDIT_COMMANDLINE_OPTION);
2977 		gogo_ConfigDialogInfoUnLock();
2978 		return 0;
2979 	}
2980 	if(gogo_ConfigDialogInfo.optIDC_CHECK_OUTPUT_FORMAT>0){
2981 		gogo_opts.optOUTPUT_FORMAT = gogo_ConfigDialogInfo.optIDC_COMBO_OUTPUT_FORMAT;
2982 	}
2983 	if(gogo_ConfigDialogInfo.optIDC_CHECK_MPEG1AUDIOBITRATE>0){
2984 		gogo_opts.optBITRATE1 = gogo_ConfigDialogInfo.optIDC_COMBO_MPEG1_AUDIO_BITRATE;
2985 	}
2986 	if(gogo_ConfigDialogInfo.optIDC_CHECK_MPEG2AUDIOBITRATE>0){
2987 		gogo_opts.optBITRATE2 = gogo_ConfigDialogInfo.optIDC_COMBO_MPEG2_AUDIO_BITRATE;
2988 	}
2989 	if(gogo_ConfigDialogInfo.optIDC_CHECK_ENHANCED_LOW_PASS_FILTER>0){
2990 		gogo_opts.optENHANCEDFILTER_A = atoi((char *)gogo_ConfigDialogInfo.optIDC_EDIT_LPF_PARA1);
2991 		gogo_opts.optENHANCEDFILTER_B = atoi((char *)gogo_ConfigDialogInfo.optIDC_EDIT_LPF_PARA2);
2992 	}
2993 	if(gogo_ConfigDialogInfo.optIDC_CHECK_ENCODE_MODE>0){
2994 		gogo_opts.optENCODEMODE = gogo_ConfigDialogInfo.optIDC_COMBO_ENCODE_MODE;
2995 	}
2996 	if(gogo_ConfigDialogInfo.optIDC_CHECK_EMPHASIS_TYPE>0){
2997 		gogo_opts.optEMPHASIS = gogo_ConfigDialogInfo.optIDC_COMBO_EMPHASIS_TYPE;
2998 	}
2999 	if(gogo_ConfigDialogInfo.optIDC_CHECK_OUTFREQ>0){
3000 		gogo_opts.optOUTFREQ = atoi((char *)gogo_ConfigDialogInfo.optIDC_EDIT_OUTFREQ);
3001 	}
3002 	if(gogo_ConfigDialogInfo.optIDC_CHECK_MSTHRESHOLD>0){
3003 		gogo_opts.optMSTHRESHOLD_threshold = atoi((char *)gogo_ConfigDialogInfo.optIDC_EDIT_MSTHRESHOLD_THRESHOLD);
3004 		gogo_opts.optMSTHRESHOLD_mspower = atoi((char *)gogo_ConfigDialogInfo.optIDC_EDIT_MSTHRESHOLD_MSPOWER);
3005 	}
3006 	if(gogo_ConfigDialogInfo.optIDC_CHECK_USE_CPU_OPTS>0){
3007 		gogo_opts.optUSECPUOPT = 1;
3008 		gogo_opts.optUSEMMX = gogo_ConfigDialogInfo.optIDC_CHECK_CPUMMX;
3009 		gogo_opts.optUSEKNI = gogo_ConfigDialogInfo.optIDC_CHECK_CPUSSE;
3010 		gogo_opts.optUSE3DNOW = gogo_ConfigDialogInfo.optIDC_CHECK_CPU3DNOW;
3011 		gogo_opts.optUSEE3DNOW = gogo_ConfigDialogInfo.optIDC_CHECK_CPUE3DNOW;
3012 		gogo_opts.optUSESSE = gogo_ConfigDialogInfo.optIDC_CHECK_CPUSSE;
3013 		gogo_opts.optUSECMOV = gogo_ConfigDialogInfo.optIDC_CHECK_CPUCMOV;
3014 		gogo_opts.optUSEEMMX = gogo_ConfigDialogInfo.optIDC_CHECK_CPUEMMX;
3015 		gogo_opts.optUSESSE2 = gogo_ConfigDialogInfo.optIDC_CHECK_CPUSSE2;
3016 	} else {
3017 		gogo_opts.optUSECPUOPT = 0;
3018 	}
3019 	if(gogo_ConfigDialogInfo.optIDC_CHECK_VBR>0){
3020 		gogo_opts.optVBR = gogo_ConfigDialogInfo.optIDC_COMBO_VBR;
3021 	}
3022 	if(gogo_ConfigDialogInfo.optIDC_CHECK_VBR_BITRATE>0){
3023 		gogo_opts.optVBRBITRATE_low = gogo_ConfigDialogInfo.optIDC_COMBO_VBR_BITRATE_LOW;
3024 		gogo_opts.optVBRBITRATE_high = gogo_ConfigDialogInfo.optIDC_COMBO_VBR_BITRATE_HIGH;
3025 	}
3026 	if(gogo_ConfigDialogInfo.optIDC_CHECK_USEPSY>0){
3027 		gogo_opts.optUSEPSY = TRUE;
3028 	}
3029 	if(gogo_ConfigDialogInfo.optIDC_CHECK_VERIFY>0){
3030 		gogo_opts.optVERIFY = TRUE;
3031 	}
3032 	if(gogo_ConfigDialogInfo.optIDC_CHECK_16KHZ_LOW_PASS_FILTER>0){
3033 		gogo_opts.optUSELPF16 = TRUE;
3034 	}
3035 //	gogo_opts.optINPFREQ;			// SYSTEM USE(�V�X�e���Ŏg�p���邩��w��ł��Ȃ�)
3036 //	gogo_opts.optSTARTOFFSET;	// SYSTEM USE
3037 //	gogo_opts.optADDTAGnum;		// SYSTEM USE
3038 //	gogo_opts.optADDTAG_len[64];	// SYSTEM USE
3039 //	gogo_opts.optADDTAG_buf[64];	// SYSTEM USE
3040 //	gogo_opts.optCPU;					// PREPAIRING(������)
3041 //	gogo_opts.optBYTE_SWAP;			// SYSTEM USE
3042 //	gogo_opts.opt8BIT_PCM;			// SYSTEM USE
3043 //	gogo_opts.optMONO_PCM;		// SYSTEM USE
3044 //	gogo_opts.optTOWNS_SND;			// SYSTEM USE
3045 //	gogo_opts.optTHREAD_PRIORITY;	// PREPARING
3046 //	gogo_opts.optREADTHREAD_PRIORITY;	// PREPARING
3047 //	gogo_opts.optOUTPUTDIR[1024];			// SYSTEM USE
3048 //	gogo_opts.output_name[1024];				// SYSTEM USE
3049 	gogo_ConfigDialogInfoUnLock();
3050 	return 0;
3051 }
3052 
3053 #define SEC_GOGO	"gogo"
gogo_ConfigDialogInfoSaveINI(void)3054 int gogo_ConfigDialogInfoSaveINI(void)
3055 {
3056 	char *section = SEC_GOGO;
3057 	char *inifile = timidity_output_inifile;
3058 	char buffer[1024];
3059 #if defined(__MINGW32__) || defined(__CYGWIN__)
3060 #define NUMSAVE(name) \
3061 		sprintf(buffer,"%d",gogo_ConfigDialogInfo.name ); \
3062 		WritePrivateProfileString(section, #name ,buffer,inifile);
3063 #define STRSAVE(name) \
3064 		WritePrivateProfileString(section,(char *) #name ,(char *)gogo_ConfigDialogInfo.name ,inifile);
3065 #else
3066 #define NUMSAVE(name) \
3067 		sprintf(buffer,"%d",gogo_ConfigDialogInfo. ## name ); \
3068 		WritePrivateProfileString(section, #name ,buffer,inifile);
3069 #define STRSAVE(name) \
3070 		WritePrivateProfileString(section,(char *) #name ,(char *)gogo_ConfigDialogInfo. ## name ,inifile);
3071 #endif
3072 	NUMSAVE(optIDC_CHECK_DEFAULT)
3073 	NUMSAVE(optIDC_CHECK_COMMANDLINE_OPTS)
3074 	STRSAVE(optIDC_EDIT_COMMANDLINE_OPTION)
3075 	NUMSAVE(optIDC_CHECK_OUTPUT_FORMAT)
3076 	NUMSAVE(optIDC_COMBO_OUTPUT_FORMAT)
3077 	NUMSAVE(optIDC_CHECK_MPEG1AUDIOBITRATE)
3078 	NUMSAVE(optIDC_COMBO_MPEG1_AUDIO_BITRATE)
3079 	NUMSAVE(optIDC_CHECK_MPEG2AUDIOBITRATE)
3080 	NUMSAVE(optIDC_COMBO_MPEG2_AUDIO_BITRATE)
3081 	NUMSAVE(optIDC_CHECK_ENHANCED_LOW_PASS_FILTER)
3082 	STRSAVE(optIDC_EDIT_LPF_PARA1)
3083 	STRSAVE(optIDC_EDIT_LPF_PARA2)
3084 	NUMSAVE(optIDC_CHECK_ENCODE_MODE)
3085 	NUMSAVE(optIDC_COMBO_ENCODE_MODE)
3086 	NUMSAVE(optIDC_CHECK_EMPHASIS_TYPE)
3087 	NUMSAVE(optIDC_COMBO_EMPHASIS_TYPE)
3088 	NUMSAVE(optIDC_CHECK_OUTFREQ)
3089 	STRSAVE(optIDC_EDIT_OUTFREQ)
3090 	NUMSAVE(optIDC_CHECK_MSTHRESHOLD)
3091 	STRSAVE(optIDC_EDIT_MSTHRESHOLD_THRESHOLD)
3092 	STRSAVE(optIDC_EDIT_MSTHRESHOLD_MSPOWER)
3093 	NUMSAVE(optIDC_CHECK_USE_CPU_OPTS)
3094 	NUMSAVE(optIDC_CHECK_CPUMMX)
3095 	NUMSAVE(optIDC_CHECK_CPUSSE)
3096 	NUMSAVE(optIDC_CHECK_CPU3DNOW)
3097 	NUMSAVE(optIDC_CHECK_CPUE3DNOW)
3098 	NUMSAVE(optIDC_CHECK_CPUCMOV)
3099 	NUMSAVE(optIDC_CHECK_CPUEMMX)
3100 	NUMSAVE(optIDC_CHECK_CPUSSE2)
3101 	NUMSAVE(optIDC_CHECK_VBR)
3102 	NUMSAVE(optIDC_COMBO_VBR)
3103 	NUMSAVE(optIDC_CHECK_VBR_BITRATE)
3104 	NUMSAVE(optIDC_COMBO_VBR_BITRATE_LOW)
3105 	NUMSAVE(optIDC_COMBO_VBR_BITRATE_HIGH)
3106 	NUMSAVE(optIDC_CHECK_USEPSY)
3107 	NUMSAVE(optIDC_CHECK_VERIFY)
3108 	NUMSAVE(optIDC_CHECK_16KHZ_LOW_PASS_FILTER)
3109 	WritePrivateProfileString(NULL,NULL,NULL,inifile);		// Write Flush
3110 #undef NUMSAVE
3111 #undef STRSAVE
3112 	return 0;
3113 }
gogo_ConfigDialogInfoLoadINI(void)3114 int gogo_ConfigDialogInfoLoadINI(void)
3115 {
3116 	char *section = SEC_GOGO;
3117 	char *inifile = timidity_output_inifile;
3118 	int num;
3119 	char buffer[1024];
3120 #if defined(__MINGW32__) || defined(__CYGWIN__)
3121 #define NUMLOAD(name) \
3122 		num = GetPrivateProfileInt(section, #name ,-1,inifile); \
3123 		if(num!=-1) gogo_ConfigDialogInfo.name = num;
3124 #define STRLOAD(name,len) \
3125 		GetPrivateProfileString(section,(char *) #name ,"",buffer,len,inifile); \
3126 		buffer[len-1] = '\0'; \
3127 		if(buffer[0]!=0) \
3128 			strcpy((char *)gogo_ConfigDialogInfo.name ,buffer);
3129 #else
3130 #define NUMLOAD(name) \
3131 		num = GetPrivateProfileInt(section, #name ,-1,inifile); \
3132 		if(num!=-1) gogo_ConfigDialogInfo. ## name = num;
3133 #define STRLOAD(name,len) \
3134 		GetPrivateProfileString(section,(char *) #name ,"",buffer,len,inifile); \
3135 		buffer[len-1] = '\0'; \
3136 		if(buffer[0]!=0) \
3137 			strcpy((char *)gogo_ConfigDialogInfo. ## name ,buffer);
3138 #endif
3139 	gogo_ConfigDialogInfoLock();
3140 	NUMLOAD(optIDC_CHECK_DEFAULT)
3141 	NUMLOAD(optIDC_CHECK_COMMANDLINE_OPTS)
3142 	STRLOAD(optIDC_EDIT_COMMANDLINE_OPTION,1024)
3143 	NUMLOAD(optIDC_CHECK_OUTPUT_FORMAT)
3144 	NUMLOAD(optIDC_COMBO_OUTPUT_FORMAT)
3145 	NUMLOAD(optIDC_CHECK_MPEG1AUDIOBITRATE)
3146 	NUMLOAD(optIDC_COMBO_MPEG1_AUDIO_BITRATE)
3147 	NUMLOAD(optIDC_CHECK_MPEG2AUDIOBITRATE)
3148 	NUMLOAD(optIDC_COMBO_MPEG2_AUDIO_BITRATE)
3149 	NUMLOAD(optIDC_CHECK_ENHANCED_LOW_PASS_FILTER)
3150 	STRLOAD(optIDC_EDIT_LPF_PARA1,4)
3151 	STRLOAD(optIDC_EDIT_LPF_PARA2,4)
3152 	NUMLOAD(optIDC_CHECK_ENCODE_MODE)
3153 	NUMLOAD(optIDC_COMBO_ENCODE_MODE)
3154 	NUMLOAD(optIDC_CHECK_EMPHASIS_TYPE)
3155 	NUMLOAD(optIDC_COMBO_EMPHASIS_TYPE)
3156 	NUMLOAD(optIDC_CHECK_OUTFREQ)
3157 	STRLOAD(optIDC_EDIT_OUTFREQ,6)
3158 	NUMLOAD(optIDC_CHECK_MSTHRESHOLD)
3159 	STRLOAD(optIDC_EDIT_MSTHRESHOLD_THRESHOLD,4)
3160 	STRLOAD(optIDC_EDIT_MSTHRESHOLD_MSPOWER,4)
3161 	NUMLOAD(optIDC_CHECK_USE_CPU_OPTS)
3162 	NUMLOAD(optIDC_CHECK_CPUMMX)
3163 	NUMLOAD(optIDC_CHECK_CPUSSE)
3164 	NUMLOAD(optIDC_CHECK_CPU3DNOW)
3165 	NUMLOAD(optIDC_CHECK_CPUE3DNOW)
3166 	NUMLOAD(optIDC_CHECK_CPUCMOV)
3167 	NUMLOAD(optIDC_CHECK_CPUEMMX)
3168 	NUMLOAD(optIDC_CHECK_CPUSSE2)
3169 	NUMLOAD(optIDC_CHECK_VBR)
3170 	NUMLOAD(optIDC_COMBO_VBR)
3171 	NUMLOAD(optIDC_CHECK_VBR_BITRATE)
3172 	NUMLOAD(optIDC_COMBO_VBR_BITRATE_LOW)
3173 	NUMLOAD(optIDC_COMBO_VBR_BITRATE_HIGH)
3174 	NUMLOAD(optIDC_CHECK_USEPSY)
3175 	NUMLOAD(optIDC_CHECK_VERIFY)
3176 	NUMLOAD(optIDC_CHECK_16KHZ_LOW_PASS_FILTER)
3177 #undef NUMLOAD
3178 #undef STRLOAD
3179 	gogo_ConfigDialogInfoUnLock();
3180 	return 0;
3181 }
3182 
3183 #endif	// AU_GOGO
3184 
3185 
3186 #ifdef AU_VORBIS
3187 ///////////////////////////////////////////////////////////////////////
3188 //
3189 // vorbis ConfigDialog
3190 //
3191 ///////////////////////////////////////////////////////////////////////
3192 
3193 volatile vorbis_ConfigDialogInfo_t vorbis_ConfigDialogInfo;
3194 
3195 // id �̃R���{�{�b�N�X�̏��̒�`
3196 #define CB_INFO_TYPE1_BEGIN(id) static int cb_info_ ## id [] = {
3197 #define CB_INFO_TYPE1_END };
3198 #define CB_INFO_TYPE2_BEGIN(id) static char * cb_info_ ## id [] = {
3199 #define CB_INFO_TYPE2_END };
3200 
3201 // cb_info_type1_�h�c  cb_info_type2_�h�c �Ƃ����ӂ��ɂȂ�B
3202 
3203 // IDC_COMBO_MODE_jp
3204 CB_INFO_TYPE2_BEGIN(IDC_COMBO_MODE_jp)
3205 	"VBR �i�� 1 (��)",(char *)1,
3206 	"VBR �i�� 2",(char *)2,
3207 	"VBR �i�� 3",(char *)3,
3208 	"VBR �i�� 4",(char *)4,
3209 	"VBR �i�� 4.99",(char *)499,
3210 	"VBR �i�� 5",(char *)5,
3211 	"VBR �i�� 6",(char *)6,
3212 	"VBR �i�� 7",(char *)7,
3213 	"VBR �i�� 8 (�f�t�H���g)",(char *)8,
3214 	"VBR �i�� 9",(char *)9,
3215 	"VBR �i�� 10 (��)",(char *)10,
3216 #if 0
3217 	"�f�t�H���g(��128kbps VBR)",(char *)0,
3218 	"��112kbps VBR",(char *)1,
3219 	"��128kbps VBR",(char *)2,
3220 	"��160kbps VBR",(char *)3,
3221 	"��192kbps VBR",(char *)4,
3222 	"��256kbps VBR",(char *)5,
3223 	"��350kbps VBR",(char *)6,
3224 #endif
3225 	NULL
3226 CB_INFO_TYPE2_END
3227 
3228 // IDC_COMBO_MODE_en
3229 CB_INFO_TYPE2_BEGIN(IDC_COMBO_MODE_en)
3230 	"VBR Quality 1 (low)",(char *)1,
3231 	"VBR Quality 2",(char *)2,
3232 	"VBR Quality 3",(char *)3,
3233 	"VBR Quality 4",(char *)4,
3234 	"VBR Quality 4.99",(char *)499,
3235 	"VBR Quality 5",(char *)5,
3236 	"VBR Quality 6",(char *)6,
3237 	"VBR Quality 7",(char *)7,
3238 	"VBR Quality 8 (default)",(char *)8,
3239 	"VBR Quality 9",(char *)9,
3240 	"VBR Quality 10 (high)",(char *)10,
3241 #if 0
3242 	"Default (About 128kbps VBR)",(char *)0,
3243 	"About 112kbps VBR",(char *)1,
3244 	"About 128kbps VBR",(char *)2,
3245 	"About 160kbps VBR",(char *)3,
3246 	"About 192kbps VBR",(char *)4,
3247 	"About 256kbps VBR",(char *)5,
3248 	"About 350kbps VBR",(char *)6,
3249 #endif
3250 	NULL
3251 CB_INFO_TYPE2_END
3252 
3253 static char **cb_info_IDC_COMBO_MODE;
3254 
3255 // id �̃R���{�{�b�N�X��I���̐ݒ肷��B
3256 #define CB_SETCURSEL_TYPE1(id) \
3257 { \
3258 	int cb_num; \
3259 	for(cb_num=0;(int)cb_info_ ## id [cb_num]>=0;cb_num++){ \
3260 		SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)0,(LPARAM)0); \
3261 		if(vorbis_ConfigDialogInfo.opt ## id == (int) cb_info_ ## id [cb_num]){ \
3262 			SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)cb_num,(LPARAM)0); \
3263 			break; \
3264 		} \
3265 	} \
3266 }
3267 #define CB_SETCURSEL_TYPE2(id) \
3268 { \
3269 	int cb_num; \
3270 	for(cb_num=0;(int)cb_info_ ## id [cb_num];cb_num+=2){ \
3271 		SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)0,(LPARAM)0); \
3272 	    if(vorbis_ConfigDialogInfo.opt ## id == (int) cb_info_ ## id [cb_num+1]){ \
3273 			SendDlgItemMessage(hwnd,id,CB_SETCURSEL,(WPARAM)cb_num/2,(LPARAM)0); \
3274 			break; \
3275 		} \
3276 	} \
3277 }
3278 // id �̃R���{�{�b�N�X�̑I����ϐ��ɑ������B
3279 #define CB_GETCURSEL_TYPE1(id) \
3280 { \
3281 	int cb_num1, cb_num2; \
3282 	cb_num1 = SendDlgItemMessage(hwnd,id,CB_GETCURSEL,(WPARAM)0,(LPARAM)0); \
3283 	for(cb_num2=0;(int)cb_info_ ## id [cb_num2]>=0;cb_num2++) \
3284 		if(cb_num1==cb_num2){ \
3285 			vorbis_ConfigDialogInfo.opt ## id = (int)cb_info_ ## id [cb_num2]; \
3286 			break; \
3287 		} \
3288 }
3289 #define CB_GETCURSEL_TYPE2(id) \
3290 { \
3291 	int cb_num1, cb_num2; \
3292 	cb_num1 = SendDlgItemMessage(hwnd,id,CB_GETCURSEL,(WPARAM)0,(LPARAM)0); \
3293 	for(cb_num2=0;(int)cb_info_ ## id [cb_num2];cb_num2+=2) \
3294 		if(cb_num1*2==cb_num2){ \
3295 			vorbis_ConfigDialogInfo.opt ## id = (int)cb_info_ ## id [cb_num2+1]; \
3296 			break; \
3297 		} \
3298 }
3299 // �`�F�b�N����Ă��邩�B
3300 #define IS_CHECK(id) SendDlgItemMessage(hwnd,id,BM_GETCHECK,0,0)
3301 // �`�F�b�N����B
3302 #define CHECK(id) SendDlgItemMessage(hwnd,id,BM_SETCHECK,1,0)
3303 // �`�F�b�N���͂����B
3304 #define UNCHECK(id) SendDlgItemMessage(hwnd,id,BM_SETCHECK,0,0)
3305 // id �̃`�F�b�N�{�b�N�X��ݒ肷��B
3306 #define CHECKBOX_SET(id) \
3307 	if(vorbis_ConfigDialogInfo.opt ## id>0) \
3308 		SendDlgItemMessage(hwnd,id,BM_SETCHECK,1,0); \
3309 	else \
3310 		SendDlgItemMessage(hwnd,id,BM_SETCHECK,0,0); \
3311 // id �̃`�F�b�N�{�b�N�X��ϐ��ɑ������B
3312 #define CHECKBOX_GET(id) \
3313 	if(SendDlgItemMessage(hwnd,id,BM_GETCHECK,0,0)) \
3314 		vorbis_ConfigDialogInfo.opt ## id = 1; \
3315 	else \
3316 		vorbis_ConfigDialogInfo.opt ## id = 0; \
3317 // id �̃G�f�B�b�g��ݒ肷��B
3318 #define EDIT_SET(id) SendDlgItemMessage(hwnd,id,WM_SETTEXT,0,(LPARAM)vorbis_ConfigDialogInfo.opt ## id);
3319 // id �̃G�f�B�b�g��ϐ��ɑ������B
3320 #define EDIT_GET(id,size) SendDlgItemMessage(hwnd,id,WM_GETTEXT,(WPARAM)size,(LPARAM)vorbis_ConfigDialogInfo.opt ## id);
3321 #define EDIT_GET_RANGE(id,size,min,max) \
3322 { \
3323 	char tmpbuf[1024]; \
3324 	int value; \
3325 	SendDlgItemMessage(hwnd,id,WM_GETTEXT,(WPARAM)size,(LPARAM)vorbis_ConfigDialogInfo.opt ## id); \
3326 	value = atoi((char *)vorbis_ConfigDialogInfo.opt ## id); \
3327 	if(value<min) value = min; \
3328 	if(value>max) value = max; \
3329 	sprintf(tmpbuf,"%d",value); \
3330 	strncpy((char *)vorbis_ConfigDialogInfo.opt ## id,tmpbuf,size); \
3331 	(vorbis_ConfigDialogInfo.opt ## id)[size] = '\0'; \
3332 }
3333 // �R���g���[���̗L����
3334 #define ENABLE_CONTROL(id) EnableWindow(GetDlgItem(hwnd,id),TRUE);
3335 // �R���g���[���̖�����
3336 #define DISABLE_CONTROL(id) EnableWindow(GetDlgItem(hwnd,id),FALSE);
3337 
3338 
3339 static void vorbisConfigDialogProcControlEnableDisable(HWND hwnd);
3340 static void vorbisConfigDialogProcControlApply(HWND hwnd);
3341 static void vorbisConfigDialogProcControlReset(HWND hwnd);
3342 static int vorbis_ConfigDialogInfoLock();
3343 static int vorbis_ConfigDialogInfoUnLock();
3344 static HANDLE hvorbisConfigDailog = NULL;
vorbisConfigDialogProc(HWND hwnd,UINT uMess,WPARAM wParam,LPARAM lParam)3345 static BOOL APIENTRY vorbisConfigDialogProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam)
3346 {
3347 	switch (uMess){
3348 	case WM_INITDIALOG:
3349 	{
3350 		int i;
3351 		// �R���{�{�b�N�X�̏�����
3352 		if (PlayerLanguage == LANGUAGE_JAPANESE)
3353 		  cb_info_IDC_COMBO_MODE = cb_info_IDC_COMBO_MODE_jp;
3354 		else
3355 		  cb_info_IDC_COMBO_MODE = cb_info_IDC_COMBO_MODE_en;
3356 
3357 		for(i=0;cb_info_IDC_COMBO_MODE[i];i+=2){
3358 			SendDlgItemMessage(hwnd,IDC_COMBO_MODE,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)cb_info_IDC_COMBO_MODE[i]);
3359 		}
3360 		// �ݒ�
3361 		vorbisConfigDialogProcControlReset(hwnd);
3362 	}
3363 		break;
3364 	case WM_COMMAND:
3365 		switch (LOWORD(wParam)) {
3366 		case IDCLOSE:
3367 			SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);
3368 			break;
3369 		case IDOK:
3370 			vorbisConfigDialogProcControlApply(hwnd);
3371 			SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);
3372 			break;
3373 		case IDCANCEL:
3374 			SendMessage(hwnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);
3375 			break;
3376 		case IDC_BUTTON_APPLY:
3377 			vorbisConfigDialogProcControlApply(hwnd);
3378 			break;
3379 		case IDC_CHECK_DEFAULT:
3380 			vorbisConfigDialogProcControlEnableDisable(hwnd);
3381 			break;
3382 		case IDC_COMBO_MODE:
3383 			break;
3384 		default:
3385 			break;
3386 		}
3387 		break;
3388 	case WM_NOTIFY:
3389 		break;
3390 	case WM_SIZE:
3391 		return FALSE;
3392 	case WM_CLOSE:
3393 		vorbis_ConfigDialogInfoSaveINI();
3394 		DestroyWindow(hwnd);
3395 		break;
3396 	case WM_DESTROY:
3397 		hvorbisConfigDailog = NULL;
3398 		break;
3399 	default:
3400 		break;
3401 	}
3402 	return FALSE;
3403 }
3404 
3405 // �R���g���[���̗L�� / ������
vorbisConfigDialogProcControlEnableDisable(HWND hwnd)3406 static void vorbisConfigDialogProcControlEnableDisable(HWND hwnd)
3407 {
3408 	ENABLE_CONTROL(IDC_CHECK_DEFAULT);
3409 	if(IS_CHECK(IDC_CHECK_DEFAULT)){
3410 		DISABLE_CONTROL(IDC_COMBO_MODE);
3411 	} else {
3412 		ENABLE_CONTROL(IDC_COMBO_MODE);
3413 	}
3414 }
3415 
vorbisConfigDialogProcControlReset(HWND hwnd)3416 static void vorbisConfigDialogProcControlReset(HWND hwnd)
3417 {
3418 	// �R���{�{�b�N�X�̑I��ݒ�
3419 	CB_SETCURSEL_TYPE2(IDC_COMBO_MODE)
3420 	// �`�F�b�N�{�b�N�X�̐ݒ�
3421 	CHECKBOX_SET(IDC_CHECK_DEFAULT)
3422 	// �G�f�B�b�g�̐ݒ�
3423 	// �R���g���[���̗L�� / ������
3424 	vorbisConfigDialogProcControlEnableDisable(hwnd);
3425 }
3426 
vorbisConfigDialogProcControlApply(HWND hwnd)3427 static void vorbisConfigDialogProcControlApply(HWND hwnd)
3428 {
3429 	// �R���{�{�b�N�X�̑I��ݒ�
3430 	CB_GETCURSEL_TYPE2(IDC_COMBO_MODE)
3431 	// �`�F�b�N�{�b�N�X�̐ݒ�
3432 	CHECKBOX_GET(IDC_CHECK_DEFAULT)
3433 	// �G�f�B�b�g�̐ݒ�
3434 	// �R���g���[���̗L�� / ������
3435 	vorbisConfigDialogProcControlEnableDisable(hwnd);
3436 	// ���Z�b�g
3437 	vorbisConfigDialogProcControlReset(hwnd);
3438 }
3439 
3440 #undef CB_INFO_TYPE1_BEGIN
3441 #undef CB_INFO_TYPE1_END
3442 #undef CB_INFO_TYPE2_BEGIN
3443 #undef CB_INFO_TYPE2_END
3444 #undef CB_SETCURSEL_TYPE1
3445 #undef CB_SETCURSEL_TYPE2
3446 #undef CB_GETCURSEL_TYPE1
3447 #undef CB_GETCURSEL_TYPE2
3448 #undef CHECKBOX_SET
3449 #undef CHECKBOX_GET
3450 #undef EDIT_SET
3451 #undef EDIT_GET
3452 #undef EDIT_GET_RANGE
3453 
3454 #endif
3455 
vorbisConfigDialog(void)3456 int vorbisConfigDialog(void)
3457 {
3458 #ifdef AU_VORBIS
3459   if(!IsWindow(hvorbisConfigDailog)) {
3460     if (PlayerLanguage == LANGUAGE_JAPANESE)
3461       hvorbisConfigDailog = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG_VORBIS),(HWND)hPrefWnd,vorbisConfigDialogProc);
3462     else
3463       hvorbisConfigDailog = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG_VORBIS_EN),(HWND)hPrefWnd,vorbisConfigDialogProc);
3464   }
3465   ShowWindow(hvorbisConfigDailog,SW_SHOW);
3466 #endif
3467 	return 0;
3468 }
3469 
3470 #ifdef AU_VORBIS
3471 
vorbis_ConfigDialogInfoLock()3472 static int vorbis_ConfigDialogInfoLock()
3473 {
3474 	return 0;
3475 }
vorbis_ConfigDialogInfoUnLock()3476 static int vorbis_ConfigDialogInfoUnLock()
3477 {
3478 	return 0;
3479 }
3480 
vorbis_ConfigDialogInfoInit(void)3481 int vorbis_ConfigDialogInfoInit(void)
3482 {
3483 	vorbis_ConfigDialogInfo.optIDC_CHECK_DEFAULT = 1;
3484 	vorbis_ConfigDialogInfo.optIDC_COMBO_MODE = 0;
3485 	return 0;
3486 }
3487 
3488 extern volatile int ogg_vorbis_mode;
vorbis_ConfigDialogInfoApply(void)3489 int vorbis_ConfigDialogInfoApply(void)
3490 {
3491 	vorbis_ConfigDialogInfoLock();
3492 	if(vorbis_ConfigDialogInfo.optIDC_CHECK_DEFAULT>0){
3493 //		vorbis_opts_reset();
3494 		vorbis_ConfigDialogInfoUnLock();
3495 		return 0;
3496 	}
3497 	ogg_vorbis_mode = vorbis_ConfigDialogInfo.optIDC_COMBO_MODE;
3498 	vorbis_ConfigDialogInfoUnLock();
3499 	return 0;
3500 }
3501 
3502 #define SEC_VORBIS	"vorbis"
vorbis_ConfigDialogInfoSaveINI(void)3503 int vorbis_ConfigDialogInfoSaveINI(void)
3504 {
3505 	char *section = SEC_VORBIS;
3506 	char *inifile = timidity_output_inifile;
3507 	char buffer[1024];
3508 //	int len;
3509 #if defined(__MINGW32__) || defined(__CYGWIN__)
3510 #define NUMSAVE(name) \
3511 		sprintf(buffer,"%d",vorbis_ConfigDialogInfo.name ); \
3512 		WritePrivateProfileString(section, #name ,buffer,inifile);
3513 //#define STRSAVE(name,len) \
3514 //		WritePrivateProfileString(section,(char *) #name ,(char *)vorbis_ConfigDialogInfo.name ,inifile);
3515 #else
3516 #define NUMSAVE(name) \
3517 		sprintf(buffer,"%d",vorbis_ConfigDialogInfo. ## name ); \
3518 		WritePrivateProfileString(section, #name ,buffer,inifile);
3519 //#define STRSAVE(name,len) \
3520 //		WritePrivateProfileString(section,(char *) #name ,(char *)vorbis_ConfigDialogInfo. ## name ,inifile);
3521 #endif
3522 	NUMSAVE(optIDC_CHECK_DEFAULT)
3523 	NUMSAVE(optIDC_COMBO_MODE)
3524 	WritePrivateProfileString(NULL,NULL,NULL,inifile);		// Write Flush
3525 #undef NUMSAVE
3526 //#undef STRSAVE
3527 	return 0;
3528 }
vorbis_ConfigDialogInfoLoadINI(void)3529 int vorbis_ConfigDialogInfoLoadINI(void)
3530 {
3531 	char *section = SEC_VORBIS;
3532 	char *inifile = timidity_output_inifile;
3533 	int num;
3534 //	char buffer[1024];
3535 #if defined(__MINGW32__) || defined(__CYGWIN__)
3536 #define NUMLOAD(name) \
3537 		num = GetPrivateProfileInt(section, #name ,-1,inifile); \
3538 		if(num!=-1) vorbis_ConfigDialogInfo.name = num;
3539 //#define STRLOAD(name,len) \
3540 //		GetPrivateProfileString(section,(char *) #name ,"",buffer,len,inifile); \
3541 //		buffer[len-1] = '\0'; \
3542 //		if(buffer[0]!=0) \
3543 //			strcpy((char *)vorbis_ConfigDialogInfo.name ,buffer);
3544 #else
3545 #define NUMLOAD(name) \
3546 		num = GetPrivateProfileInt(section, #name ,-1,inifile); \
3547 		if(num!=-1) vorbis_ConfigDialogInfo. ## name = num;
3548 //#define STRLOAD(name,len) \
3549 //		GetPrivateProfileString(section,(char *) #name ,"",buffer,len,inifile); \
3550 //		buffer[len-1] = '\0'; \
3551 //		if(buffer[0]!=0) \
3552 //			strcpy((char *)vorbis_ConfigDialogInfo. ## name ,buffer);
3553 #endif
3554 	vorbis_ConfigDialogInfoLock();
3555 	NUMLOAD(optIDC_CHECK_DEFAULT)
3556 	NUMLOAD(optIDC_COMBO_MODE)
3557 #undef NUMLOAD
3558 //#undef STRLOAD
3559 	vorbis_ConfigDialogInfoUnLock();
3560 	return 0;
3561 }
3562 
3563 #endif	// AU_VORBIS
3564 
3565 
3566 #ifdef AU_PORTAUDIO_DLL
3567 ///////////////////////////////////////////////////////////////////////
3568 //
3569 // asioConfigDialog
3570 //
3571 ///////////////////////////////////////////////////////////////////////
3572 #include <portaudio.h>
3573 #include <pa_asio.h>
3574 #include "w32_portaudio.h"
3575 
3576 
asioConfigDialog(void)3577 int asioConfigDialog(void)
3578 {
3579 	extern HWND hMainWnd;
3580 
3581 	PaHostApiTypeId HostApiTypeId;
3582 	const PaHostApiInfo  *HostApiInfo;
3583 	PaDeviceIndex DeviceIndex;
3584 	PaError err;
3585 	HWND hWnd;
3586 	int buffered_data;
3587 
3588 	PaHostApiIndex i, ApiCount;
3589 
3590 
3591 	if(load_portaudio_dll(0))
3592 		return -1;
3593 
3594 	play_mode->acntl(PM_REQ_GETFILLED, &buffered_data);
3595 	if (buffered_data != 0) return -1;
3596 
3597 	play_mode->close_output();
3598 	err = Pa_Initialize();
3599 	if( err != paNoError ) goto error1;
3600 
3601 
3602 	HostApiTypeId = paASIO;
3603 	i = 0;
3604 	hWnd = hPrefWnd;
3605 	ApiCount = Pa_GetHostApiCount();
3606 	do{
3607 		HostApiInfo=Pa_GetHostApiInfo(i);
3608 		if( HostApiInfo->type == HostApiTypeId ) break;
3609 	    i++;
3610 	}while ( i < ApiCount );
3611 	if ( i == ApiCount ) goto error2;
3612     DeviceIndex = HostApiInfo->defaultOutputDevice;
3613 	if(DeviceIndex==paNoDevice) goto error2;
3614 
3615 	if (HostApiTypeId ==  paASIO){
3616     	err = PaAsio_ShowControlPanel( DeviceIndex, (void*) hWnd);
3617 		if( err != paNoError ) goto error1;
3618 	}
3619 	Pa_Terminate();
3620 	play_mode->open_output();
3621 //  	free_portaudio_dll();
3622 	return 0;
3623 
3624 error1:
3625 //  	free_portaudio_dll();
3626 	MessageBox(NULL, Pa_GetErrorText( err ), "Port Audio (asio) error", IDOK);
3627 error2:
3628 	Pa_Terminate();
3629 	return -1;
3630 }
3631 
3632 #endif //AU_PORTAUDIO_DLL
3633