1 /************************************************************************/
2 /*									*/
3 /* ��˥塼�⡼��							*/
4 /*									*/
5 /************************************************************************/
6 
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <ctype.h>
11 
12 #include "quasi88.h"
13 #include "initval.h"
14 #include "menu.h"
15 
16 #include "pc88main.h"
17 #include "pc88sub.h"
18 #include "graph.h"
19 #include "intr.h"
20 #include "keyboard.h"
21 #include "memory.h"
22 #include "screen.h"
23 
24 #include "emu.h"
25 #include "drive.h"
26 #include "image.h"
27 #include "status.h"
28 #include "monitor.h"
29 #include "snddrv.h"
30 #include "wait.h"
31 #include "file-op.h"
32 #include "suspend.h"
33 #include "snapshot.h"
34 #include "fdc.h"
35 #include "soundbd.h"
36 #include "getconf.h"
37 
38 #include "event.h"
39 #include "q8tk.h"
40 
41 
42 
43 int	menu_lang	= MENU_JAPAN;		/* ��˥塼�θ���           */
44 int	menu_readonly	= FALSE;		/* �ǥ������������������ */
45 						/* ������֤� ReadOnly ?    */
46 int	menu_swapdrv	= FALSE;		/* �ɥ饤�֤�ɽ�����       */
47 
48 
49 
50 /* ������Хå��ؿ��ΰ��� (Q8tkWidget*, void*) ��̤���Ѥξ�硢
51  * ��˥����Ф�ݵƫ�����Τǡ� gcc �����ǵ����Ƥ�餦�� */
52 #if defined(__GNUC__)
53 #define	UNUSED_WIDGET	__attribute__((__unused__)) Q8tkWidget *dummy_0
54 #define	UNUSED_PARM	__attribute__((__unused__)) void *dummy_1
55 #else
56 #define	UNUSED_WIDGET	Q8tkWidget *dummy_0
57 #define	UNUSED_PARM	void *dummy_1
58 #endif
59 
60 
61 
62 /*--------------------------------------------------------------*/
63 /* ��˥塼�Ǥ�ɽ����å����������ơ����Υե���������		*/
64 /*--------------------------------------------------------------*/
65 #include "message.h"
66 
67 
68 
69 
70 /****************************************************************/
71 /* ���							*/
72 /****************************************************************/
73 
74 static	int	menu_last_page = 0;	/* ������Υ�˥塼�������� */
75 
76 static	int	menu_boot_clock_async;	/* �ꥻ�åȻ��˥���å�����Ʊ������? */
77 
78 static	T_RESET_CFG	reset_req;	/* �ꥻ�åȻ����׵᤹���������¸ */
79 
80 /* ��˥塼��λ���ˡ�������ɤδĶ����Ѥ�äƤʤ�����ǧ�Τ��ᡢ�������¸ */
81 #define	NR_SD_CFG_LOCAL	(5)
82 typedef union {
83     int		i;
84     float	f;
85 } SD_CFG_LOCAL_VAL;
86 
87 static struct {
88 
89     int		sound_board;
90     int		use_fmgen;
91     int		sample_freq;
92     int		use_samples;
93 
94     /* �ʲ��������ƥ��¸������ */
95     int		local_cnt;
96     struct {
97 	T_SNDDRV_CONFIG		*info;
98 	SD_CFG_LOCAL_VAL	val;
99     } local[ NR_SD_CFG_LOCAL ];
100 
101 } sd_cfg_init, sd_cfg_now;
102 static	void	sd_cfg_save(void);
103 static	int	sd_cfg_has_changed(void);
104 
105 
106 static	int	cpu_timing_save;	/* ��˥塼���ϻ��� -cpu �� ���� */
107 
108 					/* ��ư�ǥХ����������ɬ�� */
109 static	Q8tkWidget	*widget_reset_boot;
110 static	Q8tkWidget	*widget_dipsw_b_boot_disk;
111 static	Q8tkWidget	*widget_dipsw_b_boot_rom;
112 
113 static	Q8tkWidget	*menu_accel;	/* �ᥤ���˥塼�Υ������ */
114 
115 /* ��˥塼�����Υꥻ�åȤȡ��ꥻ�åȥ����Υꥻ�åȤ�Ϣư���������Τǡ�
116    �����������줿�顢ȿ�ФΤ��������褦�ˡ��������åȤ���         */
117 static	Q8tkWidget	*widget_reset_basic[2][4];
118 static	Q8tkWidget	*widget_reset_clock[2][2];
119 
120 
121 
122 /*===========================================================================
123  * �ե��������顼��å������Υ�����������
124  *===========================================================================*/
cb_file_error_dialog_ok(UNUSED_WIDGET,UNUSED_PARM)125 static	void	cb_file_error_dialog_ok(UNUSED_WIDGET, UNUSED_PARM)
126 {
127     dialog_destroy();
128 }
129 
start_file_error_dialog(int drv,int result)130 static	void	start_file_error_dialog(int drv, int result)
131 {
132     char wk[128];
133     const t_menulabel *l = (drv<0) ? data_err_file : data_err_drive;
134 
135     if (result == ERR_NO) return;
136     if (drv < 0) sprintf(wk, GET_LABEL(l, result));
137     else         sprintf(wk, GET_LABEL(l, result), drv+1);
138 
139     dialog_create();
140     {
141 	dialog_set_title(wk);
142 	dialog_set_separator();
143 	dialog_set_button(GET_LABEL(l, ERR_NO),
144 			  cb_file_error_dialog_ok, NULL);
145     }
146     dialog_start();
147 }
148 
149 /*===========================================================================
150  * �ǥ��������� & �ӽ�
151  *===========================================================================*/
152 static void sub_misc_suspend_update(void);
153 static void sub_misc_snapshot_update(void);
154 static void sub_misc_waveout_update(void);
155 
156 /*===========================================================================
157  *
158  *	�ᥤ��ڡ���	�ꥻ�å�
159  *
160  *===========================================================================*/
161 
162 /*----------------------------------------------------------------------*/
163 						 /* BASIC�⡼���ڤ��ؤ� */
get_reset_basic(void)164 static	int	get_reset_basic(void)
165 {
166     return reset_req.boot_basic;
167 }
cb_reset_basic(UNUSED_WIDGET,void * p)168 static	void	cb_reset_basic(UNUSED_WIDGET, void *p)
169 {
170     if (reset_req.boot_basic != (int)p) {
171 	reset_req.boot_basic = (int)p;
172 
173 	q8tk_toggle_button_set_state(widget_reset_basic[ 1 ][ (int)p ], TRUE);
174     }
175 }
176 
177 
menu_reset_basic(void)178 static	Q8tkWidget	*menu_reset_basic(void)
179 {
180     Q8tkWidget *box;
181     Q8List     *list;
182 
183     box = PACK_VBOX(NULL);
184     {
185 	list = PACK_RADIO_BUTTONS(box,
186 				  data_reset_basic, COUNTOF(data_reset_basic),
187 				  get_reset_basic(), cb_reset_basic);
188 
189 	/* �ꥹ�Ȥ�귫�äơ����������åȤ���� */
190 	widget_reset_basic[0][BASIC_V2 ] = list->data;	list = list->next;
191 	widget_reset_basic[0][BASIC_V1H] = list->data;	list = list->next;
192 	widget_reset_basic[0][BASIC_V1S] = list->data;	list = list->next;
193 	widget_reset_basic[0][BASIC_N  ] = list->data;
194     }
195 
196     return box;
197 }
198 
199 /*----------------------------------------------------------------------*/
200 						       /* CLOCK�ڤ��ؤ� */
get_reset_clock(void)201 static	int	get_reset_clock(void)
202 {
203     return reset_req.boot_clock_4mhz;
204 }
cb_reset_clock(UNUSED_WIDGET,void * p)205 static	void	cb_reset_clock(UNUSED_WIDGET, void *p)
206 {
207     if (reset_req.boot_clock_4mhz != (int)p) {
208 	reset_req.boot_clock_4mhz = (int)p;
209 
210 	q8tk_toggle_button_set_state(widget_reset_clock[ 1 ][ (int)p ], TRUE);
211     }
212 }
get_reset_clock_async(void)213 static	int	get_reset_clock_async(void)
214 {
215     return menu_boot_clock_async;
216 }
cb_reset_clock_async(Q8tkWidget * widget,UNUSED_PARM)217 static	void	cb_reset_clock_async(Q8tkWidget *widget, UNUSED_PARM)
218 {
219     int async = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
220     menu_boot_clock_async = async;
221 }
222 
223 
menu_reset_clock(void)224 static	Q8tkWidget	*menu_reset_clock(void)
225 {
226     Q8tkWidget *box, *box2;
227     Q8List     *list;
228 
229     box = PACK_VBOX(NULL);
230     {
231 	list = PACK_RADIO_BUTTONS(box,
232 				  data_reset_clock, COUNTOF(data_reset_clock),
233 				  get_reset_clock(), cb_reset_clock);
234 
235 	/* �ꥹ�Ȥ�귫�äơ����������åȤ���� */
236 	widget_reset_clock[0][CLOCK_4MHZ] = list->data;	list = list->next;
237 	widget_reset_clock[0][CLOCK_8MHZ] = list->data;
238 
239 	PACK_LABEL(box, "");			/* ���� */
240 
241 	box2 = PACK_HBOX(box);
242 	{
243 	    PACK_LABEL(box2, "  ");		/* ����ǥ�� */
244 	    PACK_CHECK_BUTTON(box2,
245 			      GET_LABEL(data_reset_clock_async, 0),
246 			      get_reset_clock_async(),
247 			      cb_reset_clock_async, NULL);
248 	}
249     }
250 
251     return box;
252 }
253 
254 /*----------------------------------------------------------------------*/
255 					      /* ������ɥܡ����ڤ��ؤ� */
get_reset_sound(void)256 static	int	get_reset_sound(void)
257 {
258     return reset_req.sound_board;
259 }
cb_reset_sound(UNUSED_WIDGET,void * p)260 static	void	cb_reset_sound(UNUSED_WIDGET, void *p)
261 {
262     reset_req.sound_board = (int)p;
263 }
264 
265 
menu_reset_sound(void)266 static	Q8tkWidget	*menu_reset_sound(void)
267 {
268     Q8tkWidget *box;
269 
270     box = PACK_VBOX(NULL);
271     {
272 	PACK_RADIO_BUTTONS(box,
273 			   data_reset_sound, COUNTOF(data_reset_sound),
274 			   get_reset_sound(), cb_reset_sound);
275 	PACK_LABEL(box, "");			/* ���� */
276 	PACK_LABEL(box, "");			/* ���� */
277     }
278 
279     return box;
280 }
281 
282 /*----------------------------------------------------------------------*/
283 								/* ��ư */
set_reset_dipsw_boot(void)284 static	void	set_reset_dipsw_boot(void)
285 {
286     const t_menulabel *l = data_reset_boot;
287 
288     if (widget_reset_boot) {
289 	q8tk_label_set(widget_reset_boot,
290 		       (reset_req.boot_from_rom ? GET_LABEL(l, 1)
291 						: GET_LABEL(l, 0)));
292     }
293 }
294 
295 
menu_reset_boot(void)296 static	Q8tkWidget	*menu_reset_boot(void)
297 {
298     Q8tkWidget *vbox;
299 
300     vbox = PACK_VBOX(NULL);
301     {
302 	widget_reset_boot = PACK_LABEL(vbox, "");
303 	set_reset_dipsw_boot();
304     }
305     return vbox;
306 }
307 
308 /*----------------------------------------------------------------------*/
309 								/* �ܺ� */
310 static	Q8tkWidget	*reset_detail_widget;
311 static	int		reset_detail_hide;
312 static	Q8tkWidget	*reset_detail_button;
cb_reset_detail(UNUSED_WIDGET,UNUSED_PARM)313 static	void	cb_reset_detail(UNUSED_WIDGET, UNUSED_PARM)
314 {
315     reset_detail_hide ^= 1;
316 
317     if (reset_detail_hide) {
318 	q8tk_widget_hide(reset_detail_widget);
319     } else {
320 	q8tk_widget_show(reset_detail_widget);
321     }
322     q8tk_label_set(reset_detail_button->child,
323 		   GET_LABEL(data_reset_detail, reset_detail_hide));
324 }
325 
326 
menu_reset_detail(void)327 static	Q8tkWidget	*menu_reset_detail(void)
328 {
329     Q8tkWidget *box;
330 
331     box = PACK_VBOX(NULL);
332     {
333 	PACK_LABEL(box, "");
334 
335 	reset_detail_hide = 0;
336 	reset_detail_button = PACK_BUTTON(box,
337 					  "",
338 					  cb_reset_detail, NULL);
339 	cb_reset_detail(NULL, NULL);
340 
341 	PACK_LABEL(box, "");
342     }
343 
344     return box;
345 }
346 
347 /*----------------------------------------------------------------------*/
348 						/* �ǥ��åץ����å����� */
349 static	void	dipsw_create(void);
350 static	void	dipsw_start(void);
351 static	void	dipsw_finish(void);
352 
cb_reset_dipsw(UNUSED_WIDGET,UNUSED_PARM)353 static	void	cb_reset_dipsw(UNUSED_WIDGET, UNUSED_PARM)
354 {
355     dipsw_start();
356 }
357 
358 
menu_reset_dipsw(void)359 static	Q8tkWidget	*menu_reset_dipsw(void)
360 {
361     Q8tkWidget *button;
362 
363     button = PACK_BUTTON(NULL,
364 			 GET_LABEL(data_reset, DATA_RESET_DIPSW_BTN),
365 			 cb_reset_dipsw, NULL);
366     q8tk_misc_set_placement(button, Q8TK_PLACEMENT_X_CENTER, 0);
367 
368     return button;
369 }
370 
371 /*----------------------------------------------------------------------*/
372 						  /* �С�������ڤ��ؤ� */
get_reset_version(void)373 static	int	get_reset_version(void)
374 {
375     return reset_req.set_version;
376 }
cb_reset_version(Q8tkWidget * widget,UNUSED_PARM)377 static	void	cb_reset_version(Q8tkWidget *widget, UNUSED_PARM)
378 {
379     int i;
380     const t_menudata *p = data_reset_version;
381     const char       *combo_str = q8tk_combo_get_text(widget);
382 
383     for (i=0; i<COUNTOF(data_reset_version); i++, p++) {
384 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
385 	    reset_req.set_version = p->val;
386 	    break;
387 	}
388     }
389 }
390 
391 
menu_reset_version(void)392 static	Q8tkWidget	*menu_reset_version(void)
393 {
394     Q8tkWidget *box, *combo;
395     char wk[4];
396 
397     wk[0] = get_reset_version();
398     wk[1] = '\0';
399 
400     box = PACK_VBOX(NULL);
401     {
402 	combo = PACK_COMBO(box,
403 			   data_reset_version, COUNTOF(data_reset_version),
404 			   get_reset_version(), wk, 8,
405 			   cb_reset_version, NULL,
406 			   NULL, NULL);
407 	PACK_LABEL(box, "");			/* ���� */
408     }
409 
410     return box;
411 }
412 
413 /*----------------------------------------------------------------------*/
414 						  /* ��ĥ�����ڤ��ؤ� */
get_reset_extram(void)415 static	int	get_reset_extram(void)
416 {
417     return reset_req.use_extram;
418 }
cb_reset_extram(Q8tkWidget * widget,UNUSED_PARM)419 static	void	cb_reset_extram(Q8tkWidget *widget, UNUSED_PARM)
420 {
421     int i;
422     const t_menudata *p = data_reset_extram;
423     const char       *combo_str = q8tk_combo_get_text(widget);
424 
425     for (i=0; i<COUNTOF(data_reset_extram); i++, p++) {
426 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
427 	    reset_req.use_extram = p->val;
428 	    break;
429 	}
430     }
431 }
432 
433 
menu_reset_extram(void)434 static	Q8tkWidget	*menu_reset_extram(void)
435 {
436     Q8tkWidget *box, *combo;
437     char wk[16];
438 
439     sprintf(wk, "  %5dKB", use_extram * 128);
440 
441     box = PACK_VBOX(NULL);
442     {
443 	combo = PACK_COMBO(box,
444 			   data_reset_extram, COUNTOF(data_reset_extram),
445 			   get_reset_extram(), wk, 0,
446 			   cb_reset_extram, NULL,
447 			   NULL, NULL);
448 	PACK_LABEL(box, "");			/* ���� */
449     }
450 
451     return box;
452 }
453 
454 /*----------------------------------------------------------------------*/
455 						     /* ����ROM�ڤ��ؤ� */
get_reset_jisho(void)456 static	int	get_reset_jisho(void)
457 {
458     return reset_req.use_jisho_rom;
459 }
cb_reset_jisho(UNUSED_WIDGET,void * p)460 static	void	cb_reset_jisho(UNUSED_WIDGET, void *p)
461 {
462     reset_req.use_jisho_rom = (int)p;
463 }
464 
465 
menu_reset_jisho(void)466 static	Q8tkWidget	*menu_reset_jisho(void)
467 {
468     Q8tkWidget *box;
469 
470     box = PACK_VBOX(NULL);
471     {
472 	PACK_RADIO_BUTTONS(box,
473 			   data_reset_jisho, COUNTOF(data_reset_jisho),
474 			   get_reset_jisho(), cb_reset_jisho);
475     }
476 
477     return box;
478 }
479 
480 /*----------------------------------------------------------------------*/
481 						   /* ���ߤ�BASIC�⡼�� */
menu_reset_current(void)482 static	Q8tkWidget	*menu_reset_current(void)
483 {
484     static const char *type[] = {
485 	"PC-8801",
486 	"PC-8801",
487 	"PC-8801",
488 	"PC-8801mkII",
489 	"PC-8801mkIISR",
490 	"PC-8801mkIITR/FR/MR",
491 	"PC-8801mkIITR/FR/MR",
492 	"PC-8801mkIITR/FR/MR",
493 	"PC-8801FH/MH",
494 	"PC-8801FA/MA/FE/MA2/FE2/MC",
495     };
496     static const char *basic[] = { " N ", "V1S", "V1H", " V2", };
497     static const char *clock[] = { "8MHz", "4MHz", };
498     const char *t = "";
499     const char *b = "";
500     const char *c = "";
501     int i;
502     char wk[80], ext[40];
503 
504     i = (ROM_VERSION & 0xff) - '0';
505     if (0 <= i && i< COUNTOF(type)) t = type[ i ];
506 
507     i = get_reset_basic();
508     if (0 <= i && i< COUNTOF(basic)) b = basic[ i ];
509 
510     i = get_reset_clock();
511     if (0 <= i && i< COUNTOF(clock)) c = clock[ i ];
512 
513     ext[0] = 0;
514     {
515 	if (sound_port) {
516 	    if (ext[0] == 0) strcat(ext, "(");
517 	    else             strcat(ext, ", ");
518 	    if (sound_board == SOUND_I) strcat(ext, "OPN");
519 	    else                        strcat(ext, "OPNA");
520 	}
521 
522 	if (use_extram) {
523 	    if (ext[0] == 0) strcat(ext, "(");
524 	    else             strcat(ext, ", ");
525 	    sprintf(wk, "%dKB", use_extram * 128);
526 	    strcat(ext, wk);
527 	    strcat(ext, GET_LABEL(data_reset_current,0));/* ExtRAM*/
528 	}
529 
530 	if (use_jisho_rom) {
531 	    if (ext[0] == 0) strcat(ext, "(");
532 	    else             strcat(ext, ", ");
533 	    strcat(ext, GET_LABEL(data_reset_current,1));/*DictROM*/
534 	}
535     }
536     if (ext[0]) strcat(ext, ")");
537 
538 
539     sprintf(wk, " %-30s  %4s  %4s  %30s ",
540 	    t, b, c, ext);
541 
542     return PACK_LABEL(NULL, wk);
543 }
544 
545 /*----------------------------------------------------------------------*/
546 							    /* �ꥻ�å� */
cb_reset_now(UNUSED_WIDGET,UNUSED_PARM)547 static	void	cb_reset_now(UNUSED_WIDGET, UNUSED_PARM)
548 {
549     /* CLOCK����ȡ�CPU����å���Ʊ�������� */
550     if (menu_boot_clock_async == FALSE) {
551 	cpu_clock_mhz = reset_req.boot_clock_4mhz ? CONST_4MHZ_CLOCK
552 						  : CONST_8MHZ_CLOCK;
553     }
554 
555     /* reset_req ������˴�Ť����ꥻ�å� �� �¹� */
556     quasi88_reset(&reset_req);
557 
558     quasi88_exec();		/* �� q8tk_main_quit() �ƽкѤ� */
559 
560 #if 0
561     printf("boot_dipsw      %04x\n",boot_dipsw   );
562     printf("boot_from_rom   %d\n",boot_from_rom  );
563     printf("boot_basic      %d\n",boot_basic     );
564     printf("boot_clock_4mhz %d\n",boot_clock_4mhz);
565     printf("ROM_VERSION     %c\n",ROM_VERSION    );
566     printf("baudrate_sw     %d\n",baudrate_sw    );
567 #endif
568 }
569 
570 /*======================================================================*/
571 
menu_reset(void)572 static	Q8tkWidget	*menu_reset(void)
573 {
574     Q8tkWidget *hbox, *vbox;
575     Q8tkWidget *w, *f;
576     const t_menulabel *l = data_reset;
577 
578     dipsw_create();		/* �ǥ��åץ����å�������ɥ����� */
579 
580     vbox = PACK_VBOX(NULL);
581     {
582 	f = PACK_FRAME(vbox, "", menu_reset_current());
583 	q8tk_frame_set_shadow_type(f, Q8TK_SHADOW_ETCHED_OUT);
584 
585 	hbox = PACK_HBOX(vbox);
586 	{
587 	    PACK_FRAME(hbox,
588 		       GET_LABEL(l, DATA_RESET_BASIC), menu_reset_basic());
589 
590 	    PACK_FRAME(hbox,
591 		       GET_LABEL(l, DATA_RESET_CLOCK), menu_reset_clock());
592 
593 	    PACK_FRAME(hbox,
594 		       GET_LABEL(l, DATA_RESET_SOUND), menu_reset_sound());
595 
596 	    w = PACK_FRAME(hbox,
597 			   GET_LABEL(l, DATA_RESET_BOOT), menu_reset_boot());
598 	    q8tk_frame_set_shadow_type(w, Q8TK_SHADOW_ETCHED_IN);
599 	}
600 
601 	PACK_LABEL(vbox, GET_LABEL(l, DATA_RESET_NOTICE));
602 
603 	hbox = PACK_HBOX(vbox);
604 	{
605 	    reset_detail_widget = PACK_HBOX(NULL);
606 
607 	    q8tk_box_pack_start(hbox, menu_reset_detail());
608 	    q8tk_box_pack_start(hbox, reset_detail_widget);
609 	    {
610 		PACK_VSEP(reset_detail_widget);
611 
612 		f = PACK_FRAME(reset_detail_widget,
613 		       GET_LABEL(l, DATA_RESET_DIPSW), menu_reset_dipsw());
614 
615 		q8tk_misc_set_placement(f, 0, Q8TK_PLACEMENT_Y_CENTER);
616 
617 		f = PACK_FRAME(reset_detail_widget,
618 		       GET_LABEL(l, DATA_RESET_VERSION), menu_reset_version());
619 
620 		q8tk_misc_set_placement(f, 0, Q8TK_PLACEMENT_Y_BOTTOM);
621 
622 		f = PACK_FRAME(reset_detail_widget,
623 		       GET_LABEL(l, DATA_RESET_EXTRAM), menu_reset_extram());
624 
625 		q8tk_misc_set_placement(f, 0, Q8TK_PLACEMENT_Y_BOTTOM);
626 
627 		f = PACK_FRAME(reset_detail_widget,
628 		       GET_LABEL(l, DATA_RESET_JISHO), menu_reset_jisho());
629 
630 		q8tk_misc_set_placement(f, 0, Q8TK_PLACEMENT_Y_BOTTOM);
631 	    }
632 
633 	}
634 
635 	hbox = PACK_HBOX(vbox);
636 	{
637 	    w = PACK_LABEL(hbox, GET_LABEL(l, DATA_RESET_INFO));
638 	    q8tk_misc_set_placement(w, 0, Q8TK_PLACEMENT_Y_CENTER);
639 
640 	    w = PACK_BUTTON(hbox,
641 			    GET_LABEL(data_reset, DATA_RESET_NOW),
642 			    cb_reset_now, NULL);
643 	}
644 	q8tk_misc_set_placement(hbox, Q8TK_PLACEMENT_X_RIGHT, 0);
645     }
646 
647     return vbox;
648 }
649 
650 
651 
652 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
653  *
654  *	���֥�����ɥ�	DIPSW
655  *
656  * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
657 
658 static	Q8tkWidget	*dipsw_window;
659 static	Q8tkWidget	*dipsw[4];
660 static	Q8tkWidget	*dipsw_accel;
661 
662 enum {
663     DIPSW_WIN,
664     DIPSW_FRAME,
665     DIPSW_VBOX,
666     DIPSW_QUIT
667 };
668 
669 /*----------------------------------------------------------------------*/
670 					    /* �ǥ��åץ����å��ڤ��ؤ� */
get_dipsw_b(int p)671 static	int	get_dipsw_b(int p)
672 {
673     int shift = data_dipsw_b[p].val;
674 
675     return ((p<<1) | ((reset_req.boot_dipsw >> shift) & 1));
676 }
cb_dipsw_b(UNUSED_WIDGET,void * p)677 static	void	cb_dipsw_b(UNUSED_WIDGET, void *p)
678 {
679     int shift = data_dipsw_b[ (int)p >> 1 ].val;
680     int on    = (int)p & 1;
681 
682     if (on) reset_req.boot_dipsw |=  (1 << shift);
683     else    reset_req.boot_dipsw &= ~(1 << shift);
684 }
get_dipsw_b2(void)685 static	int	get_dipsw_b2(void)
686 {
687     return (reset_req.boot_from_rom ? TRUE : FALSE);
688 }
cb_dipsw_b2(UNUSED_WIDGET,void * p)689 static	void	cb_dipsw_b2(UNUSED_WIDGET, void *p)
690 {
691     if ((int)p) reset_req.boot_from_rom = TRUE;
692     else        reset_req.boot_from_rom = FALSE;
693 
694     set_reset_dipsw_boot();
695 }
696 
697 
menu_dipsw_b(void)698 static	Q8tkWidget	*menu_dipsw_b(void)
699 {
700     int i;
701     Q8tkWidget *vbox, *hbox;
702     Q8tkWidget *b = NULL;
703     const t_dipsw *pd;
704     const t_menudata *p;
705 
706 
707     vbox = PACK_VBOX(NULL);
708     {
709 	pd = data_dipsw_b;
710 	for (i=0; i<COUNTOF(data_dipsw_b); i++, pd++) {
711 
712 	    hbox = PACK_HBOX(vbox);
713 	    {
714 		PACK_LABEL(hbox, GET_LABEL(pd, 0));
715 
716 		PACK_RADIO_BUTTONS(hbox,
717 				   pd->p, 2,
718 				   get_dipsw_b(i), cb_dipsw_b);
719 	    }
720 	}
721 
722 	hbox = PACK_HBOX(vbox);
723 	{
724 	    pd = data_dipsw_b2;
725 	    p  = pd->p;
726 
727 	    PACK_LABEL(hbox, GET_LABEL(pd, 0));
728 
729 	    for (i=0; i<2; i++, p++) {
730 		b = PACK_RADIO_BUTTON(hbox,
731 				      b,
732 				      GET_LABEL(p, 0),
733 				      (get_dipsw_b2() == p->val) ?TRUE :FALSE,
734 				      cb_dipsw_b2, (void *)(p->val));
735 
736 		if (i == 0) widget_dipsw_b_boot_disk = b;  /*�����Υܥ����*/
737 		else        widget_dipsw_b_boot_rom  = b;  /*�Ф��Ƥ���      */
738 	    }
739 	}
740     }
741 
742     return vbox;
743 }
744 
745 /*----------------------------------------------------------------------*/
746 				   /* �ǥ��åץ����å��ڤ��ؤ�(RS-232C) */
get_dipsw_r(int p)747 static	int	get_dipsw_r(int p)
748 {
749     int shift = data_dipsw_r[p].val;
750 
751     return ((p<<1) | ((reset_req.boot_dipsw >> shift) & 1));
752 }
cb_dipsw_r(UNUSED_WIDGET,void * p)753 static	void	cb_dipsw_r(UNUSED_WIDGET, void *p)
754 {
755     int shift = data_dipsw_r[ (int)p >> 1 ].val;
756     int on    = (int)p & 1;
757 
758     if (on) reset_req.boot_dipsw |=  (1 << shift);
759     else    reset_req.boot_dipsw &= ~(1 << shift);
760 }
get_dipsw_r_baudrate(void)761 static	int	get_dipsw_r_baudrate(void)
762 {
763     return reset_req.baudrate_sw;
764 }
cb_dipsw_r_baudrate(Q8tkWidget * widget,UNUSED_PARM)765 static	void	cb_dipsw_r_baudrate(Q8tkWidget *widget, UNUSED_PARM)
766 {
767     int i;
768     const t_menudata *p = data_dipsw_r_baudrate;
769     const char       *combo_str = q8tk_combo_get_text(widget);
770 
771     for (i=0; i<COUNTOF(data_dipsw_r_baudrate); i++, p++) {
772 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
773 	    reset_req.baudrate_sw = p->val;
774 	    return;
775 	}
776     }
777 }
778 
779 
menu_dipsw_r(void)780 static	Q8tkWidget	*menu_dipsw_r(void)
781 {
782     int i;
783     Q8tkWidget *vbox, *hbox;
784     const t_dipsw *pd;
785 
786     vbox = PACK_VBOX(NULL);
787     {
788 	hbox = PACK_HBOX(vbox);
789 	{
790 	    PACK_LABEL(hbox, GET_LABEL(data_dipsw_r2, 0));
791 
792 	    PACK_COMBO(hbox,
793 		       data_dipsw_r_baudrate,
794 		       COUNTOF(data_dipsw_r_baudrate),
795 		       get_dipsw_r_baudrate(), NULL, 8,
796 		       cb_dipsw_r_baudrate, NULL,
797 		       NULL, NULL);
798 	}
799 
800 	pd = data_dipsw_r;
801 	for (i=0; i<COUNTOF(data_dipsw_r); i++, pd++) {
802 
803 	    hbox = PACK_HBOX(vbox);
804 	    {
805 		PACK_LABEL(hbox, GET_LABEL(data_dipsw_r, i));
806 
807 		PACK_RADIO_BUTTONS(hbox,
808 				   pd->p, 2,
809 				   get_dipsw_r(i), cb_dipsw_r);
810 	    }
811 	}
812     }
813 
814     return vbox;
815 }
816 
817 /*----------------------------------------------------------------------*/
818 
dipsw_create(void)819 static	void	dipsw_create(void)
820 {
821     Q8tkWidget *vbox;
822     const t_menulabel *l = data_dipsw;
823 
824     vbox = PACK_VBOX(NULL);
825     {
826 	PACK_FRAME(vbox, GET_LABEL(l, DATA_DIPSW_B), menu_dipsw_b());
827 
828 	PACK_FRAME(vbox, GET_LABEL(l, DATA_DIPSW_R), menu_dipsw_r());
829     }
830 
831     dipsw_window = vbox;
832 }
833 
cb_reset_dipsw_end(UNUSED_WIDGET,UNUSED_PARM)834 static	void	cb_reset_dipsw_end(UNUSED_WIDGET, UNUSED_PARM)
835 {
836     dipsw_finish();
837 }
838 
dipsw_start(void)839 static	void	dipsw_start(void)
840 {
841     Q8tkWidget *w, *f, *x, *b;
842     const t_menulabel *l = data_reset;
843 
844     {						/* �ᥤ��Ȥʤ륦����ɥ� */
845 	w = q8tk_window_new(Q8TK_WINDOW_DIALOG);
846 	dipsw_accel = q8tk_accel_group_new();
847 	q8tk_accel_group_attach(dipsw_accel, w);
848     }
849     {						/* �ˡ��ե졼���褻�� */
850 	f = q8tk_frame_new(GET_LABEL(l, DATA_RESET_DIPSW_SET));
851 	q8tk_frame_set_shadow_type(f, Q8TK_SHADOW_OUT);
852 	q8tk_container_add(w, f);
853 	q8tk_widget_show(f);
854     }
855     {						/* ����˥ܥå�����褻�� */
856 	x = q8tk_vbox_new();
857 	q8tk_container_add(f, x);
858 	q8tk_widget_show(x);
859 							/* �ܥå����ˤ�     */
860 	{						/* DIPSW��˥塼 �� */
861 	    q8tk_box_pack_start(x, dipsw_window);
862 	}
863 	{						/* ��λ�ܥ�������� */
864 	    b = PACK_BUTTON(x,
865 			    GET_LABEL(l, DATA_RESET_DIPSW_QUIT),
866 			    cb_reset_dipsw_end, NULL);
867 
868 	    q8tk_accel_group_add(dipsw_accel, Q8TK_KEY_ESC, b, "clicked");
869 	}
870     }
871 
872     q8tk_widget_show(w);
873     q8tk_grab_add(w);
874 
875     q8tk_widget_set_focus(b);
876 
877 
878     dipsw[ DIPSW_WIN   ] = w;	/* �����������Ĥ����Ȥ��������� */
879     dipsw[ DIPSW_FRAME ] = f;	/* �������åȤ�Ф��Ƥ����ޤ�     */
880     dipsw[ DIPSW_VBOX  ] = x;
881     dipsw[ DIPSW_QUIT  ] = b;
882 }
883 
884 /* �ǥ��åץ����å����ꥦ����ɥ��ξõ� */
885 
dipsw_finish(void)886 static	void	dipsw_finish(void)
887 {
888     q8tk_widget_destroy(dipsw[ DIPSW_QUIT ]);
889     q8tk_widget_destroy(dipsw[ DIPSW_VBOX ]);
890     q8tk_widget_destroy(dipsw[ DIPSW_FRAME ]);
891 
892     q8tk_grab_remove(dipsw[ DIPSW_WIN ]);
893     q8tk_widget_destroy(dipsw[ DIPSW_WIN ]);
894     q8tk_widget_destroy(dipsw_accel);
895 }
896 
897 
898 
899 
900 
901 /*===========================================================================
902  *
903  *	�ᥤ��ڡ���	CPU����
904  *
905  *===========================================================================*/
906 
907 /*----------------------------------------------------------------------*/
908 						     /* CPU�����ڤ��ؤ� */
get_cpu_cpu(void)909 static	int	get_cpu_cpu(void)
910 {
911     return cpu_timing;
912 }
cb_cpu_cpu(UNUSED_WIDGET,void * p)913 static	void	cb_cpu_cpu(UNUSED_WIDGET, void *p)
914 {
915     cpu_timing = (int)p;
916 }
917 
918 
menu_cpu_cpu(void)919 static	Q8tkWidget	*menu_cpu_cpu(void)
920 {
921     Q8tkWidget *vbox;
922 
923     vbox = PACK_VBOX(NULL);
924     {
925 	PACK_RADIO_BUTTONS(vbox,
926 			   data_cpu_cpu, COUNTOF(data_cpu_cpu),
927 			   get_cpu_cpu(), cb_cpu_cpu);
928     }
929 
930     return vbox;
931 }
932 
933 /*----------------------------------------------------------------------*/
934 								/* ���� */
935 static	Q8tkWidget	*help_widget[5];
936 static	Q8tkWidget	*help_string[40];
937 static	int		help_string_cnt;
938 static	Q8tkWidget	*help_accel;
939 
940 enum {
941     HELP_WIN,
942     HELP_VBOX,
943     HELP_SWIN,
944     HELP_BOARD,
945     HELP_EXIT
946 };
947 
948 static	void	help_finish(void);
cb_cpu_help_end(UNUSED_WIDGET,UNUSED_PARM)949 static	void	cb_cpu_help_end(UNUSED_WIDGET, UNUSED_PARM)
950 {
951     help_finish();
952 }
953 
cb_cpu_help(UNUSED_WIDGET,UNUSED_PARM)954 static	void	cb_cpu_help(UNUSED_WIDGET, UNUSED_PARM)
955 {
956     Q8tkWidget *w, *swin, *x, *b, *z;
957 
958     {						/* �ᥤ��Ȥʤ륦����ɥ� */
959 	w = q8tk_window_new(Q8TK_WINDOW_DIALOG);
960 	help_accel = q8tk_accel_group_new();
961 	q8tk_accel_group_attach(help_accel, w);
962     }
963     {						/* ����˥ܥå�����褻�� */
964 	x = q8tk_vbox_new();
965 	q8tk_container_add(w, x);
966 	q8tk_widget_show(x);
967 							/* �ܥå����ˤ�     */
968 	{						/* SCRL������ɥ��� */
969 	    swin  = q8tk_scrolled_window_new(NULL, NULL);
970 	    q8tk_widget_show(swin);
971 	    q8tk_scrolled_window_set_policy(swin, Q8TK_POLICY_NEVER,
972 						  Q8TK_POLICY_AUTOMATIC);
973 	    q8tk_misc_set_size(swin, 71, 20);
974 	    q8tk_box_pack_start(x, swin);
975 	}
976 	{						/* ��λ�ܥ�������� */
977 	    b = PACK_BUTTON(x,
978 			    " O K ",
979 			    cb_cpu_help_end, NULL);
980 	    q8tk_misc_set_placement(b, Q8TK_PLACEMENT_X_CENTER,
981 				       Q8TK_PLACEMENT_Y_CENTER);
982 
983 	    q8tk_accel_group_add(help_accel, Q8TK_KEY_ESC, b, "clicked");
984 	}
985     }
986 
987     {							/* SCRL������ɥ��� */
988 	int i;
989 	const char **s = (menu_lang == MENU_JAPAN) ? help_jp : help_en;
990 	z = q8tk_vbox_new();				/* VBOX���ä�     */
991 	q8tk_container_add(swin, z);
992 	q8tk_widget_show(z);
993 
994 	for (i=0; i<COUNTOF(help_string); i++) {	/* ������٥������ */
995 	    if (s[i] == NULL) break;
996 	    help_string[i] = q8tk_label_new(s[i]);
997 	    q8tk_widget_show(help_string[i]);
998 	    q8tk_box_pack_start(z, help_string[i]);
999 	}
1000 	help_string_cnt = i;
1001     }
1002 
1003     q8tk_widget_show(w);
1004     q8tk_grab_add(w);
1005 
1006     q8tk_widget_set_focus(b);
1007 
1008 
1009     help_widget[ HELP_WIN   ] = w;	/* �����������Ĥ����Ȥ��������� */
1010     help_widget[ HELP_VBOX  ] = x;	/* �������åȤ�Ф��Ƥ����ޤ�     */
1011     help_widget[ HELP_SWIN  ] = swin;
1012     help_widget[ HELP_BOARD ] = z;
1013     help_widget[ HELP_EXIT  ] = b;
1014 }
1015 
1016 /* ����������ɥ��ξõ� */
1017 
help_finish(void)1018 static	void	help_finish(void)
1019 {
1020     int i;
1021     for (i=0; i<help_string_cnt; i++)
1022 	q8tk_widget_destroy(help_string[ i ]);
1023 
1024     q8tk_widget_destroy(help_widget[ HELP_EXIT  ]);
1025     q8tk_widget_destroy(help_widget[ HELP_BOARD ]);
1026     q8tk_widget_destroy(help_widget[ HELP_SWIN  ]);
1027     q8tk_widget_destroy(help_widget[ HELP_VBOX  ]);
1028 
1029     q8tk_grab_remove(help_widget[ HELP_WIN ]);
1030     q8tk_widget_destroy(help_widget[ HELP_WIN ]);
1031     q8tk_widget_destroy(help_accel);
1032 }
1033 
1034 
1035 
menu_cpu_help(void)1036 static	Q8tkWidget	*menu_cpu_help(void)
1037 {
1038     Q8tkWidget *button;
1039     const t_menulabel *l = data_cpu;
1040 
1041     button = PACK_BUTTON(NULL,
1042 			 GET_LABEL(l, DATA_CPU_HELP),
1043 			 cb_cpu_help, NULL);
1044     q8tk_misc_set_placement(button, Q8TK_PLACEMENT_X_CENTER,
1045 				    Q8TK_PLACEMENT_Y_CENTER);
1046     return button;
1047 }
1048 
1049 /*----------------------------------------------------------------------*/
1050 						 /* CPU����å��ڤ��ؤ� */
get_cpu_clock(void)1051 static	double	get_cpu_clock(void)
1052 {
1053     return cpu_clock_mhz;
1054 }
cb_cpu_clock(Q8tkWidget * widget,void * mode)1055 static	void	cb_cpu_clock(Q8tkWidget *widget, void *mode)
1056 {
1057     int i;
1058     const t_menudata *p = data_cpu_clock_combo;
1059     const char       *combo_str = q8tk_combo_get_text(widget);
1060     char buf[16], *conv_end;
1061     double val = 0;
1062     int fit = FALSE;
1063 
1064     /* COMBO BOX ���� ENTRY �˰��פ����Τ�õ�� */
1065     for (i=0; i<COUNTOF(data_cpu_clock_combo); i++, p++) {
1066 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
1067 	    val = (double)p->val / 1000000.0;
1068 	    fit = TRUE;					/* ���פ����ͤ�Ŭ�� */
1069 	    break;
1070 	}
1071     }
1072 
1073     if (fit == FALSE) {			/* COMBO BOX �˳������ʤ���� */
1074 	strncpy(buf, combo_str, 15);
1075 	buf[15] = '\0';
1076 
1077 	val = strtod(buf, &conv_end);
1078 
1079 	if (((int)mode == 0) &&				/* ���� + ENTER ��   */
1080 	    (strlen(buf) == 0 || val == 0.0)) {		/*   0  + ENTER ���� */
1081 							/* �ǥե�����ͤ�Ŭ��*/
1082 	    val = boot_clock_4mhz ? CONST_4MHZ_CLOCK
1083 				  : CONST_8MHZ_CLOCK;
1084 	    fit = TRUE;
1085 
1086 	} else if (*conv_end != '\0') {			/* �����Ѵ����Ԥʤ� */
1087 	    fit = FALSE;				/* �����ͤϻȤ��ʤ� */
1088 
1089 	} else {					/* �����Ѵ������ʤ� */
1090 	    fit = TRUE;					/* �����ͤ�Ŭ�Ѥ��� */
1091 	}
1092     }
1093 
1094     if (fit) {				/* Ŭ�Ѥ����ͤ�ͭ���ϰϤʤ顢���å� */
1095 	if (0.1 <= val && val < 1000.0) {
1096 	    cpu_clock_mhz = val;
1097 	    interval_work_init_all();
1098 	}
1099     }
1100 
1101     if ((int)mode == 0) {		/* COMBO �ʤ��� ENTER���ϡ��ͤ��ɽ��*/
1102 	sprintf(buf, "%8.4f", get_cpu_clock());
1103 	q8tk_combo_set_text(widget, buf);
1104     }
1105 }
1106 
1107 
menu_cpu_clock(void)1108 static	Q8tkWidget	*menu_cpu_clock(void)
1109 {
1110     Q8tkWidget *vbox, *hbox;
1111     const t_menulabel *p = data_cpu_clock;
1112     char buf[16];
1113 
1114     vbox = PACK_VBOX(NULL);
1115     {
1116 	hbox = PACK_HBOX(vbox);
1117 	{
1118 	    PACK_LABEL(hbox, GET_LABEL(p, DATA_CPU_CLOCK_CLOCK));
1119 
1120 	    sprintf(buf, "%8.4f", get_cpu_clock());
1121 	    PACK_COMBO(hbox,
1122 		       data_cpu_clock_combo, COUNTOF(data_cpu_clock_combo),
1123 		       (int) get_cpu_clock(), buf, 9,
1124 		       cb_cpu_clock, (void *)0,
1125 		       cb_cpu_clock, (void *)1);
1126 
1127 	    PACK_LABEL(hbox, GET_LABEL(p, DATA_CPU_CLOCK_MHZ));
1128 
1129 	    PACK_LABEL(hbox, GET_LABEL(p, DATA_CPU_CLOCK_INFO));
1130 	}
1131     }
1132 
1133     return vbox;
1134 }
1135 
1136 /*----------------------------------------------------------------------*/
1137 							/* ���������ѹ� */
get_cpu_nowait(void)1138 static	int	get_cpu_nowait(void)
1139 {
1140     return no_wait;
1141 }
cb_cpu_nowait(Q8tkWidget * widget,UNUSED_PARM)1142 static	void	cb_cpu_nowait(Q8tkWidget *widget, UNUSED_PARM)
1143 {
1144     int key = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
1145     no_wait = key;
1146 }
1147 
get_cpu_wait(void)1148 static	int	get_cpu_wait(void)
1149 {
1150     return wait_rate;
1151 }
cb_cpu_wait(Q8tkWidget * widget,void * mode)1152 static	void	cb_cpu_wait(Q8tkWidget *widget, void *mode)
1153 {
1154     int i;
1155     const t_menudata *p = data_cpu_wait_combo;
1156     const char       *combo_str = q8tk_combo_get_text(widget);
1157     char buf[16], *conv_end;
1158     int val = 0;
1159     int fit = FALSE;
1160 
1161     /* COMBO BOX ���� ENTRY �˰��פ����Τ�õ�� */
1162     for (i=0; i<COUNTOF(data_cpu_wait_combo); i++, p++) {
1163 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
1164 	    val = p->val;
1165 	    fit = TRUE;					/* ���פ����ͤ�Ŭ�� */
1166 	    break;
1167 	}
1168     }
1169 
1170     if (fit == FALSE) {			/* COMBO BOX �˳������ʤ���� */
1171 	strncpy(buf, combo_str, 15);
1172 	buf[15] = '\0';
1173 
1174 	val = strtoul(buf, &conv_end, 10);
1175 
1176 	if (((int)mode == 0) &&				/* ���� + ENTER ��   */
1177 	    (strlen(buf) == 0 || val == 0)) {		/*   0  + ENTER ���� */
1178 							/* �ǥե�����ͤ�Ŭ��*/
1179 	    val = 100;
1180 	    fit = TRUE;
1181 
1182 	} else if (*conv_end != '\0') {			/* �����Ѵ����Ԥʤ� */
1183 	    fit = FALSE;				/* �����ͤϻȤ��ʤ� */
1184 
1185 	} else {					/* �����Ѵ������ʤ� */
1186 	    fit = TRUE;					/* �����ͤ�Ŭ�Ѥ��� */
1187 	}
1188     }
1189 
1190     if (fit) {				/* Ŭ�Ѥ����ͤ�ͭ���ϰϤʤ顢���å� */
1191 	if (5 <= val && val <= 5000) {
1192 	    wait_rate = val;
1193 	}
1194     }
1195 
1196     if ((int)mode == 0) {		/* COMBO �ʤ��� ENTER���ϡ��ͤ��ɽ��*/
1197 	sprintf(buf, "%4d", get_cpu_wait());
1198 	q8tk_combo_set_text(widget, buf);
1199     }
1200 }
1201 
1202 
menu_cpu_wait(void)1203 static	Q8tkWidget	*menu_cpu_wait(void)
1204 {
1205     Q8tkWidget *vbox, *hbox, *button;
1206     const t_menulabel *p = data_cpu_wait;
1207     char buf[16];
1208 
1209     vbox = PACK_VBOX(NULL);
1210     {
1211 	hbox = PACK_HBOX(vbox);
1212 	{
1213 	    PACK_LABEL(hbox, GET_LABEL(p, DATA_CPU_WAIT_RATE));
1214 
1215 	    sprintf(buf, "%4d", get_cpu_wait());
1216 	    PACK_COMBO(hbox,
1217 		       data_cpu_wait_combo, COUNTOF(data_cpu_wait_combo),
1218 		       get_cpu_wait(), buf, 5,
1219 		       cb_cpu_wait, (void *)0,
1220 		       cb_cpu_wait, (void *)1);
1221 
1222 	    PACK_LABEL(hbox, GET_LABEL(p, DATA_CPU_WAIT_PERCENT));
1223 
1224 	    PACK_LABEL(hbox, GET_LABEL(p, DATA_CPU_WAIT_INFO));
1225 	}
1226 
1227 	button = PACK_CHECK_BUTTON(vbox,
1228 				   GET_LABEL(p, DATA_CPU_WAIT_NOWAIT),
1229 				   get_cpu_nowait(),
1230 				   cb_cpu_nowait, NULL);
1231 	q8tk_misc_set_placement(button, Q8TK_PLACEMENT_X_RIGHT,
1232 					Q8TK_PLACEMENT_Y_CENTER);
1233     }
1234 
1235     return vbox;
1236 }
1237 
1238 /*----------------------------------------------------------------------*/
1239 							    /* �֡����� */
get_cpu_boost(void)1240 static	int	get_cpu_boost(void)
1241 {
1242     return boost;
1243 }
cb_cpu_boost(Q8tkWidget * widget,void * mode)1244 static	void	cb_cpu_boost(Q8tkWidget *widget, void *mode)
1245 {
1246     int i;
1247     const t_menudata *p = data_cpu_boost_combo;
1248     const char       *combo_str = q8tk_combo_get_text(widget);
1249     char buf[16], *conv_end;
1250     int val = 0;
1251     int fit = FALSE;
1252 
1253     /* COMBO BOX ���� ENTRY �˰��פ����Τ�õ�� */
1254     for (i=0; i<COUNTOF(data_cpu_boost_combo); i++, p++) {
1255 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
1256 	    val = p->val;
1257 	    fit = TRUE;					/* ���פ����ͤ�Ŭ�� */
1258 	    break;
1259 	}
1260     }
1261 
1262     if (fit == FALSE) {			/* COMBO BOX �˳������ʤ���� */
1263 	strncpy(buf, combo_str, 15);
1264 	buf[15] = '\0';
1265 
1266 	val = strtoul(buf, &conv_end, 10);
1267 
1268 	if (((int)mode == 0) &&				/* ���� + ENTER ��   */
1269 	    (strlen(buf) == 0 || val == 0)) {		/*   0  + ENTER ���� */
1270 							/* �ǥե�����ͤ�Ŭ��*/
1271 	    val = 1;
1272 	    fit = TRUE;
1273 
1274 	} else if (*conv_end != '\0') {			/* �����Ѵ����Ԥʤ� */
1275 	    fit = FALSE;				/* �����ͤϻȤ��ʤ� */
1276 
1277 	} else {					/* �����Ѵ������ʤ� */
1278 	    fit = TRUE;					/* �����ͤ�Ŭ�Ѥ��� */
1279 	}
1280     }
1281 
1282     if (fit) {				/* Ŭ�Ѥ����ͤ�ͭ���ϰϤʤ顢���å� */
1283 	if (1 <= val && val <= 100) {
1284 	    if (boost != val) {
1285 		boost_change(val);
1286 	    }
1287 	}
1288     }
1289 
1290     if ((int)mode == 0) {		/* COMBO �ʤ��� ENTER���ϡ��ͤ��ɽ��*/
1291 	sprintf(buf, "%4d", get_cpu_boost());
1292 	q8tk_combo_set_text(widget, buf);
1293     }
1294 }
1295 
menu_cpu_boost(void)1296 static	Q8tkWidget	*menu_cpu_boost(void)
1297 {
1298     Q8tkWidget *hbox;
1299     char buf[8];
1300     const t_menulabel *p = data_cpu_boost;
1301 
1302     hbox = PACK_HBOX(NULL);
1303     {
1304 	PACK_LABEL(hbox, GET_LABEL(p, DATA_CPU_BOOST_MAGNIFY));
1305 
1306 	sprintf(buf, "%4d", get_cpu_boost());
1307 	PACK_COMBO(hbox,
1308 		   data_cpu_boost_combo, COUNTOF(data_cpu_boost_combo),
1309 		   get_cpu_boost(), buf, 5,
1310 		   cb_cpu_boost, (void*)0,
1311 		   cb_cpu_boost, (void*)1);
1312 
1313 	PACK_LABEL(hbox, GET_LABEL(p, DATA_CPU_BOOST_UNIT));
1314 
1315 	PACK_LABEL(hbox, GET_LABEL(p, DATA_CPU_BOOST_INFO));
1316     }
1317 
1318     return hbox;
1319 }
1320 
1321 /*----------------------------------------------------------------------*/
1322 						      /* �Ƽ�������ѹ� */
get_cpu_misc(int type)1323 static	int	get_cpu_misc(int type)
1324 {
1325     switch (type) {
1326     case DATA_CPU_MISC_FDCWAIT:
1327 	return (fdc_wait == 0) ? FALSE : TRUE;
1328 
1329     case DATA_CPU_MISC_HSBASIC:
1330 	return highspeed_mode;
1331 
1332     case DATA_CPU_MISC_MEMWAIT:
1333 	return memory_wait;
1334 
1335     case DATA_CPU_MISC_CMDSING:
1336 	return use_cmdsing;
1337     }
1338     return FALSE;
1339 }
cb_cpu_misc(Q8tkWidget * widget,void * p)1340 static	void	cb_cpu_misc(Q8tkWidget *widget, void *p)
1341 {
1342     int key = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
1343 
1344     switch ((int)p) {
1345     case DATA_CPU_MISC_FDCWAIT:
1346 	fdc_wait = (key) ? 1 : 0;
1347 	return;
1348 
1349     case DATA_CPU_MISC_HSBASIC:
1350 	highspeed_mode = (key) ? TRUE : FALSE;
1351 	return;
1352 
1353     case DATA_CPU_MISC_MEMWAIT:
1354 	memory_wait = (key) ? TRUE : FALSE;
1355 	return;
1356 
1357     case DATA_CPU_MISC_CMDSING:
1358 	use_cmdsing = (key) ? TRUE : FALSE;
1359 #ifdef	USE_SOUND
1360 	xmame_dev_beep_cmd_sing((byte) use_cmdsing);
1361 #endif
1362 	return;
1363     }
1364 }
1365 
1366 
menu_cpu_misc(void)1367 static	Q8tkWidget	*menu_cpu_misc(void)
1368 {
1369     int i;
1370     Q8tkWidget *vbox, *l;
1371     const t_menudata *p = data_cpu_misc;
1372 
1373     vbox = PACK_VBOX(NULL);
1374     {
1375 	for (i=0; i<COUNTOF(data_cpu_misc); i++, p++) {
1376 	    if (p->val >= 0) {
1377 		PACK_CHECK_BUTTON(vbox,
1378 				  GET_LABEL(p, 0),
1379 				  get_cpu_misc(p->val),
1380 				  cb_cpu_misc, (void *)(p->val));
1381 	    } else {
1382 		l = PACK_LABEL(vbox, GET_LABEL(p, 0));
1383 		q8tk_misc_set_placement(l, Q8TK_PLACEMENT_X_RIGHT, 0);
1384 	    }
1385 	}
1386     }
1387 
1388     return vbox;
1389 }
1390 
1391 /*======================================================================*/
1392 
menu_cpu(void)1393 static	Q8tkWidget	*menu_cpu(void)
1394 {
1395     Q8tkWidget *vbox, *hbox, *vbox2;
1396     Q8tkWidget *f;
1397     const t_menulabel *l = data_cpu;
1398 
1399     vbox = PACK_VBOX(NULL);
1400     {
1401 	hbox = PACK_HBOX(vbox);
1402 	{
1403 	    PACK_FRAME(hbox, GET_LABEL(l, DATA_CPU_CPU), menu_cpu_cpu());
1404 
1405 	    f = PACK_FRAME(hbox, "              ", menu_cpu_help());
1406 	    q8tk_frame_set_shadow_type(f, Q8TK_SHADOW_NONE);
1407 	}
1408 
1409 	hbox = PACK_HBOX(vbox);
1410 	{
1411 	    vbox2 = PACK_VBOX(hbox);
1412 	    {
1413 		PACK_FRAME(vbox2,
1414 			   GET_LABEL(l, DATA_CPU_CLOCK), menu_cpu_clock());
1415 
1416 		PACK_FRAME(vbox2,
1417 			   GET_LABEL(l, DATA_CPU_WAIT), menu_cpu_wait());
1418 
1419 		PACK_FRAME(vbox2,
1420 			   GET_LABEL(l, DATA_CPU_BOOST), menu_cpu_boost());
1421 	    }
1422 
1423 	    f = PACK_FRAME(hbox, "", menu_cpu_misc());
1424 	    q8tk_frame_set_shadow_type(f, Q8TK_SHADOW_NONE);
1425 	}
1426     }
1427 
1428     return vbox;
1429 }
1430 
1431 
1432 
1433 
1434 
1435 
1436 
1437 
1438 /*===========================================================================
1439  *
1440  *	�ᥤ��ڡ���	����
1441  *
1442  *===========================================================================*/
1443 
1444 /*----------------------------------------------------------------------*/
1445 						  /* �ե졼��졼���ѹ� */
get_graph_frate(void)1446 static	int	get_graph_frate(void)
1447 {
1448     return quasi88_cfg_now_frameskip_rate();
1449 }
cb_graph_frate(Q8tkWidget * widget,void * label)1450 static	void	cb_graph_frate(Q8tkWidget *widget, void *label)
1451 {
1452     int i;
1453     const t_menudata *p = data_graph_frate;
1454     const char       *combo_str = q8tk_combo_get_text(widget);
1455     char  str[32];
1456 
1457     for (i=0; i<COUNTOF(data_graph_frate); i++, p++) {
1458 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
1459 	    sprintf(str, " fps (-frameskip %d)", p->val);
1460 	    q8tk_label_set((Q8tkWidget*)label, str);
1461 
1462 	    quasi88_cfg_set_frameskip_rate(p->val);
1463 	    return;
1464 	}
1465     }
1466 }
1467 						/* thanks floi ! */
get_graph_autoskip(void)1468 static	int	get_graph_autoskip(void)
1469 {
1470     return use_auto_skip;
1471 }
cb_graph_autoskip(Q8tkWidget * widget,UNUSED_PARM)1472 static	void	cb_graph_autoskip(Q8tkWidget *widget, UNUSED_PARM)
1473 {
1474     int key = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
1475     use_auto_skip = key;
1476 }
1477 
1478 
menu_graph_frate(void)1479 static	Q8tkWidget	*menu_graph_frate(void)
1480 {
1481     Q8tkWidget *vbox, *hbox, *combo, *label;
1482     char wk[32];
1483 
1484     vbox = PACK_VBOX(NULL);
1485     {
1486 	hbox = PACK_HBOX(vbox);
1487 	{
1488 	    label = q8tk_label_new(" fps");
1489 	    {
1490 		sprintf(wk, "%6.3f", 60.0f / get_graph_frate());
1491 		combo = PACK_COMBO(hbox,
1492 				   data_graph_frate, COUNTOF(data_graph_frate),
1493 				   get_graph_frate(), wk, 6,
1494 				   cb_graph_frate, label,
1495 				   NULL, NULL);
1496 	    }
1497 	    {
1498 		q8tk_box_pack_start(hbox, label);
1499 		q8tk_widget_show(label);
1500 		cb_graph_frate(combo, (void*)label);
1501 	    }
1502 	}
1503 
1504 	PACK_LABEL(vbox, "");			/* ���� */
1505 							/* thanks floi ! */
1506 	PACK_CHECK_BUTTON(vbox,
1507 			  GET_LABEL(data_graph_autoskip, 0),
1508 			  get_graph_autoskip(),
1509 			  cb_graph_autoskip, NULL);
1510     }
1511 
1512     return vbox;
1513 }
1514 
1515 /*----------------------------------------------------------------------*/
1516 						  /* ���̥������ڤ��ؤ� */
get_graph_resize(void)1517 static	int	get_graph_resize(void)
1518 {
1519     return quasi88_cfg_now_size();
1520 }
cb_graph_resize(UNUSED_WIDGET,void * p)1521 static	void	cb_graph_resize(UNUSED_WIDGET, void *p)
1522 {
1523     int new_size = (int)p;
1524 
1525     quasi88_cfg_set_size(new_size);
1526 }
get_graph_fullscreen(void)1527 static	int	get_graph_fullscreen(void)
1528 {
1529     return use_fullscreen;
1530 }
cb_graph_fullscreen(Q8tkWidget * widget,UNUSED_PARM)1531 static	void	cb_graph_fullscreen(Q8tkWidget *widget, UNUSED_PARM)
1532 {
1533     int on = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
1534 
1535     if (quasi88_cfg_can_fullscreen()) {
1536 	quasi88_cfg_set_fullscreen(on);
1537 
1538 	/* Q8TK ��������̵ͭ���� (���������ػ��˸Ƥ�ɬ�פ���) */
1539 	q8tk_set_cursor(now_swcursor);
1540     }
1541 }
1542 
1543 
menu_graph_resize(void)1544 static	Q8tkWidget	*menu_graph_resize(void)
1545 {
1546     Q8tkWidget *vbox;
1547     int i = COUNTOF(data_graph_resize);
1548     int j = quasi88_cfg_max_size() - quasi88_cfg_min_size() + 1;
1549 
1550     vbox = PACK_VBOX(NULL);
1551     {
1552 	PACK_RADIO_BUTTONS(PACK_VBOX(vbox),
1553 			   &data_graph_resize[quasi88_cfg_min_size()],
1554 			   MIN(i, j),
1555 			   get_graph_resize(), cb_graph_resize);
1556 
1557 	if (quasi88_cfg_can_fullscreen()) {
1558 
1559 	    PACK_LABEL(vbox, "");		/* ���� */
1560 
1561 	    PACK_CHECK_BUTTON(vbox,
1562 			      GET_LABEL(data_graph_fullscreen, 0),
1563 			      get_graph_fullscreen(),
1564 			      cb_graph_fullscreen, NULL);
1565 	}
1566     }
1567 
1568     return vbox;
1569 }
1570 
1571 /*----------------------------------------------------------------------*/
1572 						      /* �Ƽ�������ѹ� */
get_graph_misc(int type)1573 static	int	get_graph_misc(int type)
1574 {
1575     switch (type) {
1576     case DATA_GRAPH_MISC_15K:
1577 	return (monitor_15k == 0x02) ? TRUE: FALSE;
1578 
1579     case DATA_GRAPH_MISC_DIGITAL:
1580 	return (monitor_analog == FALSE) ? TRUE : FALSE;
1581 
1582     case DATA_GRAPH_MISC_NOINTERP:
1583 	return (quasi88_cfg_now_interp() == FALSE) ? TRUE : FALSE;
1584     }
1585     return FALSE;
1586 }
cb_graph_misc(Q8tkWidget * widget,void * p)1587 static	void	cb_graph_misc(Q8tkWidget *widget, void *p)
1588 {
1589     int key = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
1590 
1591     switch ((int)p) {
1592     case DATA_GRAPH_MISC_15K:
1593 	monitor_15k = (key) ? 0x02 : 0x00;
1594 	return;
1595 
1596     case DATA_GRAPH_MISC_DIGITAL:
1597 	monitor_analog = (key) ? FALSE : TRUE;
1598 	return;
1599 
1600     case DATA_GRAPH_MISC_NOINTERP:
1601 	if (quasi88_cfg_can_interp()) {
1602 	    quasi88_cfg_set_interp((key) ? FALSE : TRUE);
1603 	}
1604 	return;
1605     }
1606 }
get_graph_misc2(void)1607 static	int	get_graph_misc2(void)
1608 {
1609     return quasi88_cfg_now_interlace();
1610 }
cb_graph_misc2(UNUSED_WIDGET,void * p)1611 static	void	cb_graph_misc2(UNUSED_WIDGET, void *p)
1612 {
1613     quasi88_cfg_set_interlace((int)p);
1614 }
1615 
1616 
menu_graph_misc(void)1617 static	Q8tkWidget	*menu_graph_misc(void)
1618 {
1619     Q8tkWidget *vbox;
1620     const t_menudata *p = data_graph_misc;
1621     int i       = COUNTOF(data_graph_misc);
1622 
1623     if (quasi88_cfg_can_interp() == FALSE) {
1624 	i --;
1625     }
1626 
1627     vbox = PACK_VBOX(NULL);
1628     {
1629 	PACK_CHECK_BUTTONS(vbox,
1630 			   p, i,
1631 			   get_graph_misc, cb_graph_misc);
1632 
1633 	PACK_LABEL(vbox, "");
1634 
1635 	PACK_RADIO_BUTTONS(vbox,
1636 			   data_graph_misc2, COUNTOF(data_graph_misc2),
1637 			   get_graph_misc2(), cb_graph_misc2);
1638     }
1639 
1640     return vbox;
1641 }
1642 
1643 /*----------------------------------------------------------------------*/
1644 						 /* PCG̵ͭ �� �ե���� */
1645 static	Q8tkWidget	*graph_font_widget;
get_graph_pcg(void)1646 static	int	get_graph_pcg(void)
1647 {
1648     return use_pcg;
1649 }
cb_graph_pcg(Q8tkWidget * widget,void * p)1650 static	void	cb_graph_pcg(Q8tkWidget *widget, void *p)
1651 {
1652     if (widget) {
1653 	use_pcg = (int)p;
1654 	memory_set_font();
1655     }
1656 
1657     if (use_pcg) { q8tk_widget_set_sensitive(graph_font_widget, FALSE); }
1658     else         { q8tk_widget_set_sensitive(graph_font_widget, TRUE);  }
1659 }
1660 
get_graph_font(void)1661 static	int	get_graph_font(void)
1662 {
1663     return font_type;
1664 }
cb_graph_font(UNUSED_WIDGET,void * p)1665 static	void	cb_graph_font(UNUSED_WIDGET, void *p)
1666 {
1667     font_type = (int)p;
1668     memory_set_font();
1669 }
1670 
menu_graph_pcg(void)1671 static	Q8tkWidget	*menu_graph_pcg(void)
1672 {
1673     Q8tkWidget *vbox, *b;
1674     const t_menulabel *l = data_graph;
1675     t_menudata data_graph_font[3];
1676 
1677 
1678     /* �ե�������������å����� (PCG̵ͭ�ˤ�ꡢinsensitive �ˤʤ�) */
1679     {
1680 	data_graph_font[0] = data_graph_font1[ (font_loaded & 1) ? 1 : 0 ];
1681 	data_graph_font[1] = data_graph_font2[ (font_loaded & 2) ? 1 : 0 ];
1682 	data_graph_font[2] = data_graph_font3[ (font_loaded & 4) ? 1 : 0 ];
1683 
1684 	b = PACK_VBOX(NULL);
1685 	{
1686 	    PACK_RADIO_BUTTONS(b,
1687 			       data_graph_font, COUNTOF(data_graph_font),
1688 			       get_graph_font(), cb_graph_font);
1689 	}
1690 	graph_font_widget = PACK_FRAME(NULL,
1691 				       GET_LABEL(l, DATA_GRAPH_FONT), b);
1692     }
1693 
1694     /* PCG̵ͭ�������åȤȡ��ե�������������åȤ��¤٤� */
1695     vbox = PACK_VBOX(NULL);
1696     {
1697 	{
1698 	    b = PACK_HBOX(NULL);
1699 	    {
1700 		PACK_RADIO_BUTTONS(b,
1701 				   data_graph_pcg, COUNTOF(data_graph_pcg),
1702 				   get_graph_pcg(), cb_graph_pcg);
1703 	    }
1704 	    PACK_FRAME(vbox, GET_LABEL(l, DATA_GRAPH_PCG), b);
1705 	}
1706 
1707 	q8tk_box_pack_start(vbox, graph_font_widget);
1708     }
1709 
1710     return vbox;
1711 }
1712 
1713 /*======================================================================*/
1714 
menu_graph(void)1715 static	Q8tkWidget	*menu_graph(void)
1716 {
1717     Q8tkWidget *vbox, *hbox;
1718     Q8tkWidget *w;
1719     const t_menulabel *l = data_graph;
1720 
1721     vbox = PACK_VBOX(NULL);
1722     {
1723 	hbox = PACK_HBOX(vbox);
1724 	{
1725 	    PACK_FRAME(hbox,
1726 		       GET_LABEL(l, DATA_GRAPH_FRATE), menu_graph_frate());
1727 
1728 	    PACK_FRAME(hbox,
1729 		       GET_LABEL(l, DATA_GRAPH_RESIZE), menu_graph_resize());
1730 	}
1731 
1732 	hbox = PACK_HBOX(vbox);
1733 	{
1734 	    w = PACK_FRAME(hbox, "", menu_graph_misc());
1735 	    q8tk_frame_set_shadow_type(w, Q8TK_SHADOW_NONE);
1736 
1737 	    w = PACK_FRAME(hbox, "", menu_graph_pcg());
1738 	    q8tk_frame_set_shadow_type(w, Q8TK_SHADOW_NONE);
1739 	}
1740     }
1741 
1742     return vbox;
1743 }
1744 
1745 
1746 
1747 
1748 
1749 
1750 
1751 
1752 /*===========================================================================
1753  *
1754  *	�ᥤ��ڡ���	����
1755  *
1756  *===========================================================================*/
1757 
1758 /*----------------------------------------------------------------------*/
1759 						      /* �ܥ�塼���ѹ� */
1760 #ifdef	USE_SOUND
get_volume(int type)1761 static	int	get_volume(int type)
1762 {
1763     switch (type) {
1764     case VOL_TOTAL:  return  xmame_cfg_get_mastervolume();
1765     case VOL_FM:     return  xmame_cfg_get_mixer_volume(XMAME_MIXER_FM);
1766     case VOL_PSG:    return  xmame_cfg_get_mixer_volume(XMAME_MIXER_PSG);
1767     case VOL_BEEP:   return  xmame_cfg_get_mixer_volume(XMAME_MIXER_BEEP);
1768     case VOL_RHYTHM: return  xmame_cfg_get_mixer_volume(XMAME_MIXER_RHYTHM);
1769     case VOL_ADPCM:  return  xmame_cfg_get_mixer_volume(XMAME_MIXER_ADPCM);
1770     case VOL_FMGEN:  return  xmame_cfg_get_mixer_volume(XMAME_MIXER_FMGEN);
1771     case VOL_SAMPLE: return  xmame_cfg_get_mixer_volume(XMAME_MIXER_SAMPLE);
1772     }
1773     return 0;
1774 }
cb_volume(Q8tkWidget * widget,void * p)1775 static	void	cb_volume(Q8tkWidget *widget, void *p)
1776 {
1777     int vol = Q8TK_ADJUSTMENT(widget)->value;
1778 
1779     switch ((int)p) {
1780     case VOL_TOTAL:  xmame_cfg_set_mastervolume(vol);			 break;
1781     case VOL_FM:     xmame_cfg_set_mixer_volume(XMAME_MIXER_FM, vol);	 break;
1782     case VOL_PSG:    xmame_cfg_set_mixer_volume(XMAME_MIXER_PSG, vol);	 break;
1783     case VOL_BEEP:   xmame_cfg_set_mixer_volume(XMAME_MIXER_BEEP, vol);  break;
1784     case VOL_RHYTHM: xmame_cfg_set_mixer_volume(XMAME_MIXER_RHYTHM, vol);break;
1785     case VOL_ADPCM:  xmame_cfg_set_mixer_volume(XMAME_MIXER_ADPCM, vol); break;
1786     case VOL_FMGEN:  xmame_cfg_set_mixer_volume(XMAME_MIXER_FMGEN, vol); break;
1787     case VOL_SAMPLE: xmame_cfg_set_mixer_volume(XMAME_MIXER_SAMPLE, vol);break;
1788     }
1789 }
1790 
1791 
menu_volume_unit(const t_volume * p,int count)1792 static	Q8tkWidget	*menu_volume_unit(const t_volume *p, int count)
1793 {
1794     int i;
1795     Q8tkWidget *vbox, *hbox;
1796 
1797     vbox = PACK_VBOX(NULL);
1798     {
1799 	for (i=0; i<count; i++, p++) {
1800 
1801 	    hbox = PACK_HBOX(vbox);
1802 	    {
1803 		PACK_LABEL(hbox, GET_LABEL(p, 0));
1804 
1805 		PACK_HSCALE(hbox,
1806 			    p,
1807 			    get_volume(p->val),
1808 			    cb_volume, (void*)(p->val));
1809 	    }
1810 	}
1811     }
1812 
1813     return vbox;
1814 }
1815 
1816 
menu_volume_total(void)1817 static	Q8tkWidget	*menu_volume_total(void)
1818 {
1819     return menu_volume_unit(data_volume_total, COUNTOF(data_volume_total));
1820 }
menu_volume_level(void)1821 static	Q8tkWidget	*menu_volume_level(void)
1822 {
1823     return menu_volume_unit(data_volume_level, COUNTOF(data_volume_level));
1824 }
menu_volume_rhythm(void)1825 static	Q8tkWidget	*menu_volume_rhythm(void)
1826 {
1827     return menu_volume_unit(data_volume_rhythm, COUNTOF(data_volume_rhythm));
1828 }
menu_volume_fmgen(void)1829 static	Q8tkWidget	*menu_volume_fmgen(void)
1830 {
1831     return menu_volume_unit(data_volume_fmgen, COUNTOF(data_volume_fmgen));
1832 }
menu_volume_sample(void)1833 static	Q8tkWidget	*menu_volume_sample(void)
1834 {
1835     return menu_volume_unit(data_volume_sample, COUNTOF(data_volume_sample));
1836 }
1837 #endif
1838 /*----------------------------------------------------------------------*/
1839 					    /* ������ɤʤ�����å����� */
1840 
menu_volume_no_available(void)1841 static	Q8tkWidget	*menu_volume_no_available(void)
1842 {
1843     int type;
1844     Q8tkWidget *l;
1845 
1846 #ifdef	USE_SOUND
1847     type = 2;
1848 #else
1849     type = 0;
1850 #endif
1851 
1852     if (sound_board == SOUND_II) {
1853 	type |= 1;
1854     }
1855 
1856     l = q8tk_label_new(GET_LABEL(data_volume_no, type));
1857 
1858     q8tk_widget_show(l);
1859 
1860     return l;
1861 }
1862 
1863 /*----------------------------------------------------------------------*/
1864 					    /* ������ɥɥ饤�м���ɽ�� */
1865 #ifdef	USE_SOUND
menu_volume_type(void)1866 static	Q8tkWidget	*menu_volume_type(void)
1867 {
1868     int type;
1869     Q8tkWidget *l;
1870 
1871 #ifdef	USE_FMGEN
1872     if (xmame_cfg_get_use_fmgen()) {
1873 	type = 2;
1874     } else
1875 #endif
1876     {
1877 	type = 0;
1878     }
1879 
1880     if (sound_board == SOUND_II) {
1881 	type |= 1;
1882     }
1883 
1884     l = q8tk_label_new(GET_LABEL(data_volume_type, type));
1885 
1886     q8tk_widget_show(l);
1887 
1888     return l;
1889 }
1890 #endif
1891 
1892 /*----------------------------------------------------------------------*/
1893 							/* ������ɾܺ� */
1894 #ifdef	USE_SOUND
1895 static	void	audio_create(void);
1896 static	void	audio_start(void);
1897 static	void	audio_finish(void);
1898 
cb_volume_audio(UNUSED_WIDGET,UNUSED_PARM)1899 static	void	cb_volume_audio(UNUSED_WIDGET, UNUSED_PARM)
1900 {
1901     audio_start();
1902 }
1903 
menu_volume_audio(void)1904 static	Q8tkWidget	*menu_volume_audio(void)
1905 {
1906     Q8tkWidget *hbox;
1907 
1908     hbox = PACK_HBOX(NULL);
1909     {
1910 	PACK_LABEL(hbox, " ");			/* ���� */
1911 	PACK_BUTTON(hbox,
1912 		    GET_LABEL(data_volume, DATA_VOLUME_AUDIO),
1913 		    cb_volume_audio, NULL);
1914 	PACK_LABEL(hbox, " ");			/* ���� */
1915     }
1916     return hbox;
1917 }
1918 #endif
1919 
1920 /*----------------------------------------------------------------------*/
1921 
menu_volume(void)1922 static	Q8tkWidget	*menu_volume(void)
1923 {
1924     Q8tkWidget *vbox, *hbox, *vbox2;
1925     Q8tkWidget *w;
1926     const t_menulabel *l = data_volume;
1927 
1928     if (xmame_has_sound() == FALSE) {
1929 
1930 	w = PACK_FRAME(NULL, "", menu_volume_no_available());
1931 	q8tk_frame_set_shadow_type(w, Q8TK_SHADOW_ETCHED_OUT);
1932 
1933 	return w;
1934     }
1935 
1936 
1937 #ifdef	USE_SOUND
1938     audio_create();			/* ������ɾܺ٥�����ɥ����� */
1939 
1940     vbox = PACK_VBOX(NULL);
1941     {
1942 	hbox = PACK_HBOX(NULL);
1943 	{
1944 	    w = PACK_FRAME(hbox, "", menu_volume_type());
1945 	    q8tk_frame_set_shadow_type(w, Q8TK_SHADOW_ETCHED_OUT);
1946 
1947 	    PACK_LABEL(hbox, "  ");
1948 
1949 	    PACK_BUTTON(hbox, GET_LABEL(data_volume, DATA_VOLUME_AUDIO),
1950 			cb_volume_audio, NULL);
1951 	}
1952 	q8tk_box_pack_start(vbox, hbox);
1953 
1954 	if (xmame_has_mastervolume()) {
1955 	    PACK_FRAME(vbox,
1956 		       GET_LABEL(l, DATA_VOLUME_TOTAL), menu_volume_total());
1957 	}
1958 
1959 	vbox2 = PACK_VBOX(NULL);
1960 	{
1961 #ifdef	USE_FMGEN
1962 	    if (xmame_cfg_get_use_fmgen()) {
1963 		w = menu_volume_fmgen();
1964 	    }
1965 	    else
1966 #endif
1967 	    {
1968 		w = menu_volume_level();
1969 	    }
1970 	    q8tk_box_pack_start(vbox2, w);
1971 
1972 	    if (xmame_cfg_get_use_samples()) {
1973 		q8tk_box_pack_start(vbox2, menu_volume_sample());
1974 	    }
1975 	}
1976 	PACK_FRAME(vbox, GET_LABEL(l, DATA_VOLUME_LEVEL), vbox2);
1977 
1978 #ifdef	USE_FMGEN
1979 	if (xmame_cfg_get_use_fmgen()) {
1980 	    ;
1981 	}
1982 	else
1983 #endif
1984 	if (sound_board == SOUND_II) {
1985 	    PACK_FRAME(vbox,
1986 		       GET_LABEL(l, DATA_VOLUME_DEPEND), menu_volume_rhythm());
1987 	}
1988 
1989 	if (xmame_has_audiodevice() == FALSE) {
1990 	    PACK_LABEL(vbox, "");
1991 	    PACK_LABEL(vbox, GET_LABEL(data_volume_audiodevice_stop, 0));
1992 	}
1993     }
1994 
1995     return vbox;
1996 #endif
1997 }
1998 
1999 
2000 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
2001  *
2002  *	���֥�����ɥ�	AUDIO
2003  *
2004  * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
2005 #ifdef	USE_SOUND
2006 
2007 static	Q8tkWidget	*audio_window;
2008 static	Q8tkWidget	*audio[6];
2009 static	Q8tkWidget	*audio_accel;
2010 
2011 enum {
2012     AUDIO_WIN,
2013     AUDIO_FRAME,
2014     AUDIO_VBOX,
2015     AUDIO_HBOX,
2016     AUDIO_BUTTON,
2017     AUDIO_LABEL
2018 };
2019 
2020 /*----------------------------------------------------------------------*/
2021 						      /* FM���������ͥ졼�� */
2022 #ifdef	USE_FMGEN
get_volume_audio_fmgen(void)2023 static	int	get_volume_audio_fmgen(void)
2024 {
2025     return sd_cfg_now.use_fmgen;
2026 }
cb_volume_audio_fmgen(UNUSED_WIDGET,void * p)2027 static	void	cb_volume_audio_fmgen(UNUSED_WIDGET, void *p)
2028 {
2029     sd_cfg_now.use_fmgen = xmame_cfg_set_use_fmgen((int)p);
2030 }
2031 
2032 
volume_audio_fmgen(void)2033 static	Q8tkWidget	*volume_audio_fmgen(void)
2034 {
2035     Q8tkWidget *box;
2036     const t_menulabel *l = data_volume_audio;
2037 
2038     box = PACK_HBOX(NULL);
2039     {
2040 	PACK_LABEL(box, GET_LABEL(l, DATA_VOLUME_AUDIO_FMGEN));
2041 
2042 	PACK_RADIO_BUTTONS(box,
2043 		    data_volume_audio_fmgen, COUNTOF(data_volume_audio_fmgen),
2044 		    get_volume_audio_fmgen(), cb_volume_audio_fmgen);
2045     }
2046 
2047     return box;
2048 }
2049 #endif
2050 
2051 /*----------------------------------------------------------------------*/
2052 						      /* ����ץ���ȿ� */
get_volume_audio_freq(void)2053 static	int	get_volume_audio_freq(void)
2054 {
2055     return sd_cfg_now.sample_freq;
2056 }
cb_volume_audio_freq(Q8tkWidget * widget,void * mode)2057 static	void	cb_volume_audio_freq(Q8tkWidget *widget, void *mode)
2058 {
2059     int i;
2060     const t_menudata *p = data_volume_audio_freq_combo;
2061     const char       *combo_str = q8tk_combo_get_text(widget);
2062     char buf[16], *conv_end;
2063     int val = 0;
2064     int fit = FALSE;
2065 
2066     /* COMBO BOX ���� ENTRY �˰��פ����Τ�õ�� */
2067     for (i=0; i<COUNTOF(data_volume_audio_freq_combo); i++, p++) {
2068 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
2069 	    val = p->val;
2070 	    fit = TRUE;					/* ���פ����ͤ�Ŭ�� */
2071 	    break;
2072 	}
2073     }
2074 
2075     if (fit == FALSE) {			/* COMBO BOX �˳������ʤ���� */
2076 	strncpy(buf, combo_str, 15);
2077 	buf[15] = '\0';
2078 
2079 	val = strtoul(buf, &conv_end, 10);
2080 
2081 	if (((int)mode == 0) &&				/* ���� + ENTER ��   */
2082 	    (strlen(buf) == 0 || val == 0)) {		/*   0  + ENTER ���� */
2083 							/* �ǥե�����ͤ�Ŭ��*/
2084 	    val = 44100;
2085 	    fit = TRUE;
2086 
2087 	} else if (*conv_end != '\0') {			/* �����Ѵ����Ԥʤ� */
2088 	    fit = FALSE;				/* �����ͤϻȤ��ʤ� */
2089 
2090 	} else {					/* �����Ѵ������ʤ� */
2091 	    fit = TRUE;					/* �����ͤ�Ŭ�Ѥ��� */
2092 	}
2093     }
2094 
2095     if (fit) {				/* Ŭ�Ѥ����ͤ�ͭ���ϰϤʤ顢���å� */
2096 	if (8000 <= val && val <= 48000) {
2097 	    sd_cfg_now.sample_freq = xmame_cfg_set_sample_freq(val);
2098 	}
2099     }
2100 
2101     if ((int)mode == 0) {		/* COMBO �ʤ��� ENTER���ϡ��ͤ��ɽ��*/
2102 	sprintf(buf, "%5d", get_volume_audio_freq());
2103 	q8tk_combo_set_text(widget, buf);
2104     }
2105 }
2106 
2107 
volume_audio_freq(void)2108 static	Q8tkWidget	*volume_audio_freq(void)
2109 {
2110     Q8tkWidget *box;
2111     char buf[16];
2112     const t_menulabel *l = data_volume_audio;
2113 
2114     box = PACK_HBOX(NULL);
2115     {
2116 	PACK_LABEL(box, GET_LABEL(l, DATA_VOLUME_AUDIO_FREQ));
2117 
2118 	sprintf(buf, "%5d", get_volume_audio_freq());
2119 	PACK_COMBO(box,
2120 		   data_volume_audio_freq_combo,
2121 		   COUNTOF(data_volume_audio_freq_combo),
2122 		   get_volume_audio_freq(), buf, 6,
2123 		   cb_volume_audio_freq, (void*)0,
2124 		   cb_volume_audio_freq, (void*)1);
2125     }
2126 
2127     return box;
2128 }
2129 
2130 /*----------------------------------------------------------------------*/
2131 						      /* ����ץ벻 */
get_volume_audio_sample(void)2132 static	int	get_volume_audio_sample(void)
2133 {
2134     return sd_cfg_now.use_samples;
2135 }
cb_volume_audio_sample(UNUSED_WIDGET,void * p)2136 static	void	cb_volume_audio_sample(UNUSED_WIDGET, void *p)
2137 {
2138     sd_cfg_now.use_samples = xmame_cfg_set_use_samples((int)p);
2139 }
2140 
2141 
volume_audio_sample(void)2142 static	Q8tkWidget	*volume_audio_sample(void)
2143 {
2144     Q8tkWidget *box;
2145     const t_menulabel *l = data_volume_audio;
2146 
2147     box = PACK_HBOX(NULL);
2148     {
2149 	PACK_LABEL(box, GET_LABEL(l, DATA_VOLUME_AUDIO_SAMPLE));
2150 
2151 	PACK_RADIO_BUTTONS(box,
2152 		  data_volume_audio_sample, COUNTOF(data_volume_audio_sample),
2153 		  get_volume_audio_sample(), cb_volume_audio_sample);
2154     }
2155 
2156     return box;
2157 }
2158 
2159 /*----------------------------------------------------------------------*/
2160 
cb_audio_config(Q8tkWidget * widget,void * modes)2161 static	void	cb_audio_config(Q8tkWidget *widget, void *modes)
2162 {
2163     int index = ((int)modes) / 2;
2164     int mode  = ((int)modes) & 1;	/* 0:ENTER 1:INPUT */
2165 
2166     T_SNDDRV_CONFIG *p       = sd_cfg_now.local[index].info;
2167     SD_CFG_LOCAL_VAL def_val = sd_cfg_now.local[index].val;
2168 
2169     const char       *entry_str = q8tk_entry_get_text(widget);
2170     char buf[16], *conv_end;
2171     SD_CFG_LOCAL_VAL val = { 0 };
2172     int fit = FALSE;
2173     int zero = FALSE;
2174 
2175     strncpy(buf, entry_str, 15);
2176     buf[15] = '\0';
2177 
2178     switch (p->type) {
2179     case SNDDRV_INT:
2180 	val.i = (int)strtoul(buf, &conv_end, 10);
2181 	if (val.i == 0) zero = TRUE;
2182 	break;
2183 
2184     case SNDDRV_FLOAT:
2185 	val.f = (float)strtod(buf, &conv_end);
2186 	if (val.f == 0) zero = TRUE;
2187 	break;
2188     }
2189 
2190     if (((int)mode == 0) &&				/* ���� + ENTER ��   */
2191 	(strlen(buf) == 0 || zero)) {			/*   0  + ENTER ���� */
2192 							/* ľ����ͭ���ͤ�Ŭ��*/
2193 	val = def_val;
2194 	fit = TRUE;
2195 
2196     } else if (*conv_end != '\0') {			/* �����Ѵ����Ԥʤ� */
2197 	fit = FALSE;					/* �����ͤϻȤ��ʤ� */
2198 
2199     } else {						/* �����Ѵ������ʤ� */
2200 	fit = TRUE;					/* �����ͤ�Ŭ�Ѥ��� */
2201     }
2202 
2203     if (fit) {				/* Ŭ�Ѥ����ͤ�ͭ���ϰϤʤ顢���å� */
2204 	switch (p->type) {
2205 	case SNDDRV_INT:
2206 	    if ((int)(p->low) <=val.i && val.i <= (int)(p->high)) {
2207 		sd_cfg_now.local[index].val.i =
2208 		    *((int *)(p->work)) = val.i;
2209 	    }
2210 	    break;
2211 
2212 	case SNDDRV_FLOAT:
2213 	    if ((float)(p->low) <=val.f && val.f <= (float)(p->high)) {
2214 		sd_cfg_now.local[index].val.f =
2215 		    *((float *)(p->work)) = val.f;
2216 	    }
2217 	    break;
2218 	}
2219     }
2220 
2221     if ((int)mode == 0) {		/* COMBO �ʤ��� ENTER���ϡ��ͤ��ɽ��*/
2222 	switch (p->type) {
2223 	case SNDDRV_INT:
2224 	    sprintf(buf, "%7d", sd_cfg_now.local[index].val.i);
2225 	    break;
2226 
2227 	case SNDDRV_FLOAT:
2228 	    sprintf(buf, "%7.3f", sd_cfg_now.local[index].val.f);
2229 	    break;
2230 	}
2231 
2232 	q8tk_entry_set_text(widget, buf);
2233     }
2234 
2235     /*if(p->type==SNDDRV_INT)  printf("%d\n", *((int *)(p->work)));*/
2236     /*if(p->type==SNDDRV_FLOAT)printf("%f\n", *((float *)(p->work)));fflush(stdout);*/
2237 }
2238 
audio_config_widget(Q8tkWidget * box)2239 static	int	audio_config_widget(Q8tkWidget *box)
2240 {
2241     Q8tkWidget *hbox;
2242     char buf[32];
2243     int i;
2244     T_SNDDRV_CONFIG *p;
2245 
2246     for (i=0; i<sd_cfg_now.local_cnt; i++) {
2247 
2248 	p = sd_cfg_now.local[i].info;
2249 
2250 	switch (p->type) {
2251 	case SNDDRV_INT:
2252 	    sprintf(buf, "%7d", sd_cfg_now.local[i].val.i);
2253 	    break;
2254 
2255 	case SNDDRV_FLOAT:
2256 	    sprintf(buf, "%7.3f", sd_cfg_now.local[i].val.f);
2257 	    break;
2258 	}
2259 
2260 	hbox = PACK_HBOX(NULL);
2261 	{
2262 	    PACK_LABEL(hbox, p->title);
2263 
2264 	    PACK_ENTRY(hbox,
2265 		       8, 9, buf,
2266 		       cb_audio_config, (void *)(i*2),
2267 		       cb_audio_config, (void *)(i*2 + 1));
2268 	}
2269 	q8tk_box_pack_start(box, hbox);
2270 	PACK_LABEL(box, "");
2271     }
2272 
2273     return i;
2274 }
2275 
2276 
2277 /*----------------------------------------------------------------------*/
2278 
audio_create(void)2279 static	void	audio_create(void)
2280 {
2281     int i;
2282     Q8tkWidget *vbox;
2283     const t_menulabel *l = data_volume;
2284 
2285     vbox = PACK_VBOX(NULL);
2286     {
2287 	PACK_HSEP(vbox);
2288 
2289 #ifdef	USE_FMGEN
2290 	q8tk_box_pack_start(vbox, volume_audio_fmgen());
2291 	PACK_HSEP(vbox);
2292 #else
2293 	PACK_LABEL(vbox, "");
2294 	PACK_LABEL(vbox, "");
2295 #endif
2296 	q8tk_box_pack_start(vbox, volume_audio_freq());
2297 	PACK_LABEL(vbox, "");
2298 	q8tk_box_pack_start(vbox, volume_audio_sample());
2299 	PACK_HSEP(vbox);
2300 
2301 	i = audio_config_widget(vbox);
2302 
2303 	for ( ; i<5; i++) {
2304 	    PACK_LABEL(vbox, "");
2305 	    PACK_LABEL(vbox, "");
2306 	}
2307 	PACK_HSEP(vbox);
2308     }
2309 
2310     audio_window = vbox;
2311 }
2312 
cb_volume_audio_end(UNUSED_WIDGET,UNUSED_PARM)2313 static	void	cb_volume_audio_end(UNUSED_WIDGET, UNUSED_PARM)
2314 {
2315     audio_finish();
2316 }
2317 
audio_start(void)2318 static	void	audio_start(void)
2319 {
2320     Q8tkWidget *w, *f, *v, *h, *b, *l;
2321     const t_menulabel *p = data_volume;
2322 
2323     {						/* �ᥤ��Ȥʤ륦����ɥ� */
2324 	w = q8tk_window_new(Q8TK_WINDOW_DIALOG);
2325 	audio_accel = q8tk_accel_group_new();
2326 	q8tk_accel_group_attach(audio_accel, w);
2327     }
2328     {						/* �ˡ��ե졼���褻�� */
2329 	f = q8tk_frame_new(GET_LABEL(p, DATA_VOLUME_AUDIO_SET));
2330 	q8tk_frame_set_shadow_type(f, Q8TK_SHADOW_OUT);
2331 	q8tk_container_add(w, f);
2332 	q8tk_widget_show(f);
2333     }
2334     {						/* ����˥ܥå�����褻�� */
2335 	v = q8tk_vbox_new();
2336 	q8tk_container_add(f, v);
2337 	q8tk_widget_show(v);
2338 							/* �ܥå����ˤ�     */
2339 	{						/* AUDIO��˥塼 �� */
2340 	    q8tk_box_pack_start(v, audio_window);
2341 	}
2342 	{						/* ����˥ܥå���   */
2343 	    h = q8tk_hbox_new();
2344 	    q8tk_box_pack_start(v, h);
2345 	    q8tk_widget_show(h);
2346 							/* �ܥå����ˤ�     */
2347 	    {						/* ��λ�ܥ�������� */
2348 		b = PACK_BUTTON(h,
2349 				GET_LABEL(p, DATA_VOLUME_AUDIO_QUIT),
2350 				cb_volume_audio_end, NULL);
2351 
2352 		q8tk_accel_group_add(audio_accel, Q8TK_KEY_ESC, b, "clicked");
2353 
2354 
2355 							/* ��٥������ */
2356 		l = PACK_LABEL(h, GET_LABEL(p, DATA_VOLUME_AUDIO_INFO));
2357 		q8tk_misc_set_placement(l, 0, Q8TK_PLACEMENT_Y_CENTER);
2358 	    }
2359 	}
2360     }
2361 
2362     q8tk_widget_show(w);
2363     q8tk_grab_add(w);
2364 
2365     q8tk_widget_set_focus(b);
2366 
2367 
2368     audio[ AUDIO_WIN    ] = w;	/* �����������Ĥ����Ȥ��������� */
2369     audio[ AUDIO_FRAME  ] = f;	/* �������åȤ�Ф��Ƥ����ޤ�     */
2370     audio[ AUDIO_VBOX   ] = v;
2371     audio[ AUDIO_HBOX   ] = h;
2372     audio[ AUDIO_BUTTON ] = b;
2373     audio[ AUDIO_LABEL  ] = l;
2374 }
2375 
2376 /* ������ɾܺ٥�����ɥ��ξõ� */
2377 
audio_finish(void)2378 static	void	audio_finish(void)
2379 {
2380     q8tk_widget_destroy(audio[ AUDIO_LABEL  ]);
2381     q8tk_widget_destroy(audio[ AUDIO_BUTTON ]);
2382     q8tk_widget_destroy(audio[ AUDIO_HBOX   ]);
2383     q8tk_widget_destroy(audio[ AUDIO_VBOX   ]);
2384     q8tk_widget_destroy(audio[ AUDIO_FRAME  ]);
2385 
2386     q8tk_grab_remove(audio[ AUDIO_WIN ]);
2387     q8tk_widget_destroy(audio[ AUDIO_WIN ]);
2388     q8tk_widget_destroy(audio_accel);
2389 }
2390 
2391 #endif
2392 
2393 
2394 
2395 /*===========================================================================
2396  *
2397  *	�ᥤ��ڡ���	�ǥ�����
2398  *
2399  *===========================================================================*/
2400 
2401 /*----------------------------------------------------------------------*/
2402 
2403 typedef struct{
2404     Q8tkWidget	*list;			/* ���᡼�������Υꥹ��	*/
2405 /*  Q8tkWidget	*button[2];		 * �ܥ����		*/
2406     Q8tkWidget	*label[2];		/* ���Υ�٥� (2��)	*/
2407     int		func[2];		/* �ܥ���ε�ǽ IMG_xxx	*/
2408     Q8tkWidget	*stat_label;		/* ���� - Busy/Ready	*/
2409     Q8tkWidget	*attr_label;		/* ���� - RO/RW°��	*/
2410     Q8tkWidget	*num_label;		/* ���� - ���᡼����	*/
2411 } T_DISK_INFO;
2412 
2413 static	T_DISK_INFO	disk_info[2];	/* 2�ɥ饤��ʬ�Υ��	*/
2414 
2415 static	char		disk_filename[ QUASI88_MAX_FILENAME ];
2416 
2417 static	int		disk_drv;	/* ����ɥ饤�֤��ֹ� */
2418 static	int		disk_img;	/* ���륤�᡼�����ֹ� */
2419 
2420 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
2421 
2422 static	void	set_disk_widget(void);
2423 
2424 
2425 /* BOOT from DISK �ǡ�DISK �� CLOSE �������䡢
2426    BOOT from ROM  �ǡ�DISK �� OPEN �������ϡ� DIP-SW ��������ѹ� */
disk_update_dipsw_b_boot(void)2427 static	void	disk_update_dipsw_b_boot(void)
2428 {
2429     if (disk_image_exist(0) || disk_image_exist(1)) {
2430 	q8tk_toggle_button_set_state(widget_dipsw_b_boot_disk, TRUE);
2431     } else {
2432 	q8tk_toggle_button_set_state(widget_dipsw_b_boot_rom,  TRUE);
2433     }
2434     set_reset_dipsw_boot();
2435 
2436     /* �ꥻ�åȤ��ʤ��ǥ�˥塼�⡼�ɤ�ȴ��������꤬��¸����ʤ��Τǡ����� */
2437     boot_from_rom = reset_req.boot_from_rom;		/* thanks floi ! */
2438 }
2439 
2440 
2441 /*----------------------------------------------------------------------*/
2442 /* °���ѹ��γƼ����							*/
2443 
2444 enum {
2445     ATTR_RENAME,	/* drive[drv] �Υ��᡼�� img ���͡���		*/
2446     ATTR_PROTECT,	/* drive[drv] �Υ��᡼�� img ��ץ�ƥ���	*/
2447     ATTR_FORMAT,	/* drive[drv] �Υ��᡼�� img ����ե����ޥå�	*/
2448     ATTR_UNFORMAT,	/* drive[drv] �Υ��᡼�� img ��ե����ޥå�	*/
2449     ATTR_APPEND,	/* drive[drv] �˺Ǹ�˥��᡼�����ɲ�		*/
2450     ATTR_CREATE		/* �����˥ǥ��������᡼���ե���������		*/
2451 };
2452 
sub_disk_attr_file_ctrl(int drv,int img,int cmd,char * c)2453 static	void	sub_disk_attr_file_ctrl(int drv, int img, int cmd, char *c)
2454 {
2455     int ro = FALSE;
2456     int result = -1;
2457     OSD_FILE *fp;
2458 
2459 
2460     if (cmd != ATTR_CREATE) {		/* �ɥ饤�֤Υե�������ѹ������� */
2461 
2462 	fp = drive[ drv ].fp;			/* ���Υե�����ݥ��������*/
2463 	if (drive[ drv ].read_only) {
2464 	    ro = TRUE;
2465 	}
2466 
2467     } else {				/* �̤Υե�������������� */
2468 
2469 	fp = osd_fopen(FTYPE_DISK, c, "r+b");		/* "r+b" �ǥ����ץ� */
2470 	if (fp == NULL) {
2471 	    fp = osd_fopen(FTYPE_DISK, c, "rb");	/* "rb" �ǥ����ץ� */
2472 	    if (fp) ro = TRUE;
2473 	}
2474 
2475 	if (fp) {					/* �����ץ�Ǥ����� */
2476 	    if      (fp == drive[ 0 ].fp) drv = 0;	/* ���Ǥ˥ɥ饤�֤� */
2477 	    else if (fp == drive[ 1 ].fp) drv = 1;	/* �����Ƥʤ�����   */
2478 	    else                          drv = -1;	/* �����å�����     */
2479 	}
2480 	else {						/* �����ץ�Ǥ��ʤ� */
2481 	    fp = osd_fopen(FTYPE_DISK, c, "ab");	/* ���ϡ������˺��� */
2482 	    drv = -1;
2483 	}
2484 
2485     }
2486 
2487 
2488     if (fp == NULL) {			/* �����ץ��� */
2489 	start_file_error_dialog(drv, ERR_CANT_OPEN);
2490 	return;
2491     }
2492     else if (ro) {			/* �꡼�ɥ���꡼�ʤΤǽ����Բ� */
2493 	if (drv < 0) osd_fclose(fp);
2494 	if (cmd != ATTR_CREATE) start_file_error_dialog(drv, ERR_READ_ONLY);
2495 	else                    start_file_error_dialog( -1, ERR_READ_ONLY);
2496 	return;
2497     }
2498     else if (drv>=0 &&			/* ���줿���᡼�����ޤޤ��Τ��Բ� */
2499 	     drive[ drv ].detect_broken_image) {
2500 	start_file_error_dialog(drv, ERR_MAYBE_BROKEN);
2501 	return;
2502     }
2503 
2504 
2505 #if 0
2506     if (cmd == ATTR_CREATE || cmd == ATTR_APPEND) {
2507 	/* ���ν����˻��֤�������褦�ʾ�硢��å�������������� */
2508 	/* ���ν���������ʤ˻��֤������뤳�ȤϤʤ����� */
2509     }
2510 #endif
2511 
2512 		/* �������ե�������Ф��ơ����� */
2513 
2514     switch (cmd) {
2515     case ATTR_RENAME:	result = d88_write_name(fp, drv, img, c);	break;
2516     case ATTR_PROTECT:	result = d88_write_protect(fp, drv, img, c);	break;
2517     case ATTR_FORMAT:	result = d88_write_format(fp, drv, img);	break;
2518     case ATTR_UNFORMAT:	result = d88_write_unformat(fp, drv, img);	break;
2519     case ATTR_APPEND:
2520     case ATTR_CREATE:	result = d88_append_blank(fp, drv);		break;
2521     }
2522 
2523 		/* ���η�� */
2524 
2525     switch (result) {
2526     case D88_SUCCESS:	result = ERR_NO;			break;
2527     case D88_NO_IMAGE:	result = ERR_MAYBE_BROKEN;		break;
2528     case D88_BAD_IMAGE:	result = ERR_MAYBE_BROKEN;		break;
2529     case D88_ERR_READ:	result = ERR_MAYBE_BROKEN;		break;
2530     case D88_ERR_SEEK:	result = ERR_SEEK;			break;
2531     case D88_ERR_WRITE:	result = ERR_WRITE;			break;
2532     default:		result = ERR_UNEXPECTED;		break;
2533     }
2534 
2535 		/* ��λ�������ʤ������顼���ϥ�å�������Ф� */
2536 
2537     if (drv < 0) {		/* ���������ץ����ե��������������� */
2538 	osd_fclose(fp);			/* �ե�������Ĥ��ƽ����	  */
2539 
2540     } else {			/* �ɥ饤�֤Υե���������������	  */
2541 	if (result == ERR_NO) {		/* ��˥塼���̤������ͤ�	  */
2542 	    set_disk_widget();
2543 	    if (cmd != ATTR_CREATE) disk_update_dipsw_b_boot();
2544 	}
2545     }
2546 
2547     if (result != ERR_NO) {
2548 	start_file_error_dialog(drv, result);
2549     }
2550 
2551     return;
2552 }
2553 
2554 /*----------------------------------------------------------------------*/
2555 /* �֥�͡���ץ�������						*/
2556 
cb_disk_attr_rename_activate(UNUSED_WIDGET,void * p)2557 static	void	cb_disk_attr_rename_activate(UNUSED_WIDGET, void *p)
2558 {
2559     char wk[16 + 1];
2560 
2561     if ((int)p) {		/* dialog_destroy() �����˥���ȥ���å� */
2562 	strncpy(wk, dialog_get_entry(), 16);
2563 	wk[16] = '\0';
2564     }
2565 
2566     dialog_destroy();
2567 
2568     if ((int)p) {
2569 	sub_disk_attr_file_ctrl(disk_drv, disk_img, ATTR_RENAME, wk);
2570     }
2571 }
sub_disk_attr_rename(const char * image_name)2572 static	void	sub_disk_attr_rename(const char *image_name)
2573 {
2574     int save_code;
2575     const t_menulabel *l = data_disk_attr_rename;
2576 
2577 
2578     dialog_create();
2579     {
2580 	dialog_set_title(GET_LABEL(l, DATA_DISK_ATTR_RENAME_TITLE1 +disk_drv));
2581 
2582 	save_code = q8tk_set_kanjicode(Q8TK_KANJI_SJIS);
2583 	dialog_set_title(image_name);
2584 	q8tk_set_kanjicode(save_code);
2585 
2586 	dialog_set_title(GET_LABEL(l, DATA_DISK_ATTR_RENAME_TITLE2));
2587 
2588 	dialog_set_separator();
2589 
2590 	save_code = q8tk_set_kanjicode(Q8TK_KANJI_SJIS);
2591 	dialog_set_entry(drive[disk_drv].image[disk_img].name,
2592 			 16,
2593 			 cb_disk_attr_rename_activate, (void*)TRUE);
2594 	q8tk_set_kanjicode(save_code);
2595 
2596 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_RENAME_OK),
2597 			  cb_disk_attr_rename_activate, (void*)TRUE);
2598 
2599 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_RENAME_CANCEL),
2600 			  cb_disk_attr_rename_activate, (void*)FALSE);
2601 
2602 	dialog_accel_key(Q8TK_KEY_ESC);
2603     }
2604     dialog_start();
2605 }
2606 
2607 /*----------------------------------------------------------------------*/
2608 /* �֥ץ�ƥ��ȡץ�������						*/
2609 
cb_disk_attr_protect_clicked(UNUSED_WIDGET,void * p)2610 static	void	cb_disk_attr_protect_clicked(UNUSED_WIDGET, void *p)
2611 {
2612     char c;
2613 
2614     dialog_destroy();
2615 
2616     if ((int)p) {
2617 	if ((int)p == 1) c = DISK_PROTECT_TRUE;
2618 	else             c = DISK_PROTECT_FALSE;
2619 
2620 	sub_disk_attr_file_ctrl(disk_drv, disk_img, ATTR_PROTECT, &c);
2621     }
2622 }
sub_disk_attr_protect(const char * image_name)2623 static	void	sub_disk_attr_protect(const char *image_name)
2624 {
2625     int save_code;
2626     const t_menulabel *l = data_disk_attr_protect;
2627 
2628     dialog_create();
2629     {
2630 	dialog_set_title(GET_LABEL(l, DATA_DISK_ATTR_PROTECT_TITLE1+disk_drv));
2631 
2632 	save_code = q8tk_set_kanjicode(Q8TK_KANJI_SJIS);
2633 	dialog_set_title(image_name);
2634 	q8tk_set_kanjicode(save_code);
2635 
2636 	dialog_set_title(GET_LABEL(l, DATA_DISK_ATTR_PROTECT_TITLE2));
2637 
2638 	dialog_set_separator();
2639 
2640 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_PROTECT_SET),
2641 			  cb_disk_attr_protect_clicked, (void*)1);
2642 
2643 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_PROTECT_UNSET),
2644 			  cb_disk_attr_protect_clicked, (void*)2);
2645 
2646 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_PROTECT_CANCEL),
2647 			  cb_disk_attr_protect_clicked, (void*)0);
2648 
2649 	dialog_accel_key(Q8TK_KEY_ESC);
2650     }
2651     dialog_start();
2652 }
2653 
2654 /*----------------------------------------------------------------------*/
2655 /* �֥ե����ޥåȡץ�������						*/
2656 
cb_disk_attr_format_clicked(UNUSED_WIDGET,void * p)2657 static	void	cb_disk_attr_format_clicked(UNUSED_WIDGET, void *p)
2658 {
2659     dialog_destroy();
2660 
2661     if ((int)p) {
2662 	if ((int)p == 1)
2663 	    sub_disk_attr_file_ctrl(disk_drv, disk_img, ATTR_FORMAT,   NULL);
2664 	else
2665 	    sub_disk_attr_file_ctrl(disk_drv, disk_img, ATTR_UNFORMAT, NULL);
2666     }
2667 }
sub_disk_attr_format(const char * image_name)2668 static	void	sub_disk_attr_format(const char *image_name)
2669 {
2670     int save_code;
2671     const t_menulabel *l = data_disk_attr_format;
2672 
2673     dialog_create();
2674     {
2675 	dialog_set_title(GET_LABEL(l, DATA_DISK_ATTR_FORMAT_TITLE1 +disk_drv));
2676 
2677 	save_code = q8tk_set_kanjicode(Q8TK_KANJI_SJIS);
2678 	dialog_set_title(image_name);
2679 	q8tk_set_kanjicode(save_code);
2680 
2681 	dialog_set_title(GET_LABEL(l, DATA_DISK_ATTR_FORMAT_TITLE2));
2682 
2683 	dialog_set_title(GET_LABEL(l, DATA_DISK_ATTR_FORMAT_WARNING));
2684 
2685 	dialog_set_separator();
2686 
2687 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_FORMAT_DO),
2688 			  cb_disk_attr_format_clicked, (void*)1);
2689 
2690 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_FORMAT_NOT),
2691 			  cb_disk_attr_format_clicked, (void*)2);
2692 
2693 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_FORMAT_CANCEL),
2694 			  cb_disk_attr_format_clicked, (void*)0);
2695 
2696 	dialog_accel_key(Q8TK_KEY_ESC);
2697     }
2698     dialog_start();
2699 }
2700 
2701 /*----------------------------------------------------------------------*/
2702 /* �֥֥���ǥ������ץ�������					*/
2703 
cb_disk_attr_blank_clicked(UNUSED_WIDGET,void * p)2704 static	void	cb_disk_attr_blank_clicked(UNUSED_WIDGET, void *p)
2705 {
2706     dialog_destroy();
2707 
2708     if ((int)p) {
2709 	sub_disk_attr_file_ctrl(disk_drv, disk_img, ATTR_APPEND, NULL);
2710     }
2711 }
sub_disk_attr_blank(void)2712 static	void	sub_disk_attr_blank(void)
2713 {
2714     const t_menulabel *l = data_disk_attr_blank;
2715 
2716     dialog_create();
2717     {
2718 	dialog_set_title(GET_LABEL(l, DATA_DISK_ATTR_BLANK_TITLE1 + disk_drv));
2719 
2720 	dialog_set_title(GET_LABEL(l, DATA_DISK_ATTR_BLANK_TITLE2));
2721 
2722 	dialog_set_separator();
2723 
2724 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_BLANK_OK),
2725 			  cb_disk_attr_blank_clicked, (void*)TRUE);
2726 
2727 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_BLANK_CANCEL),
2728 			  cb_disk_attr_blank_clicked, (void*)FALSE);
2729 
2730 	dialog_accel_key(Q8TK_KEY_ESC);
2731     }
2732     dialog_start();
2733 }
2734 
2735 /*----------------------------------------------------------------------*/
2736 /* ��°���ѹ��� �ܥ��������ν���  -  �ܺ�����Υ�����������	*/
2737 
2738 static char disk_attr_image_name[20];
cb_disk_attr_clicked(UNUSED_WIDGET,void * p)2739 static	void	cb_disk_attr_clicked(UNUSED_WIDGET, void *p)
2740 {
2741     char *name = disk_attr_image_name;
2742 
2743     dialog_destroy();
2744 
2745     switch ((int)p) {
2746     case DATA_DISK_ATTR_RENAME:	 sub_disk_attr_rename(name);	break;
2747     case DATA_DISK_ATTR_PROTECT: sub_disk_attr_protect(name);	break;
2748     case DATA_DISK_ATTR_FORMAT:	 sub_disk_attr_format(name);	break;
2749     case DATA_DISK_ATTR_BLANK:	 sub_disk_attr_blank();		break;
2750     }
2751 }
2752 
2753 
sub_disk_attr(void)2754 static void sub_disk_attr(void)
2755 {
2756     int save_code;
2757     const t_menulabel *l = data_disk_attr;
2758 
2759     sprintf(disk_attr_image_name,		/* ���᡼��̾���å� */
2760 	    "\"%-16s\"", drive[disk_drv].image[disk_img].name);
2761 
2762     dialog_create();
2763     {
2764 	dialog_set_title(GET_LABEL(l, DATA_DISK_ATTR_TITLE1 + disk_drv));
2765 
2766 	save_code = q8tk_set_kanjicode(Q8TK_KANJI_SJIS);
2767 	dialog_set_title(disk_attr_image_name);
2768 	q8tk_set_kanjicode(save_code);
2769 
2770 	dialog_set_title(GET_LABEL(l, DATA_DISK_ATTR_TITLE2));
2771 
2772 	dialog_set_separator();
2773 
2774 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_RENAME),
2775 			  cb_disk_attr_clicked, (void*)DATA_DISK_ATTR_RENAME);
2776 
2777 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_PROTECT),
2778 			  cb_disk_attr_clicked, (void*)DATA_DISK_ATTR_PROTECT);
2779 
2780 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_FORMAT),
2781 			  cb_disk_attr_clicked, (void*)DATA_DISK_ATTR_FORMAT);
2782 
2783 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_BLANK),
2784 			  cb_disk_attr_clicked, (void*)DATA_DISK_ATTR_BLANK);
2785 
2786 	dialog_set_button(GET_LABEL(l, DATA_DISK_ATTR_CANCEL),
2787 			  cb_disk_attr_clicked, (void*)DATA_DISK_ATTR_CANCEL);
2788 
2789 	dialog_accel_key(Q8TK_KEY_ESC);
2790     }
2791     dialog_start();
2792 }
2793 
2794 
2795 
2796 
2797 /*----------------------------------------------------------------------*/
2798 /* �֥��᡼���ե���������� �ܥ��������ν���			*/
2799 
2800 static	int	disk_open_ro;
2801 static	int	disk_open_cmd;
2802 static void sub_disk_open_ok(void);
2803 
sub_disk_open(int cmd)2804 static void sub_disk_open(int cmd)
2805 {
2806     const char *initial;
2807     int num;
2808     const t_menulabel *l = (disk_drv == 0) ? data_disk_open_drv1
2809 					   : data_disk_open_drv2;
2810 
2811     disk_open_cmd = cmd;
2812     num = (cmd == IMG_OPEN) ? DATA_DISK_OPEN_OPEN : DATA_DISK_OPEN_BOTH;
2813 
2814     /* �ǥ�����������Ф��Υե�������ʤ���Хǥ������ѥǥ��쥯�ȥ����� */
2815     initial = filename_get_disk_or_dir(disk_drv);
2816 
2817     START_FILE_SELECTION(GET_LABEL(l, num),
2818 			 (menu_readonly) ? 1 : 0,     /* ReadOnly �������� */
2819 			 initial,
2820 
2821 			 sub_disk_open_ok,
2822 			 disk_filename,
2823 			 QUASI88_MAX_FILENAME,
2824 			 &disk_open_ro);
2825 }
2826 
sub_disk_open_ok(void)2827 static void sub_disk_open_ok(void)
2828 {
2829     if (disk_open_cmd == IMG_OPEN) {
2830 
2831 	if (quasi88_disk_insert(disk_drv, disk_filename, 0, disk_open_ro)
2832 								    == FALSE) {
2833 	    start_file_error_dialog(disk_drv, ERR_CANT_OPEN);
2834 	}
2835 	else {
2836 	    if (disk_same_file()) {	/* ȿ��¦��Ʊ���ե�������ä���� */
2837 		int dst = disk_drv;
2838 		int src = disk_drv ^ 1;
2839 		int img;
2840 
2841 		if (drive[ src ].empty) {	    /* ȿ��¦�ɥ饤�� ���ʤ� */
2842 		    img = 0;			    /*        �ǽ�Υ��᡼�� */
2843 		} else {
2844 		    if (disk_image_num(src) == 1) { /* ���᡼����1�Ĥξ��� */
2845 			img = -1;		    /*        �ɥ饤�� ����  */
2846 
2847 		    } else {			    /* ���᡼����ʣ�������  */
2848 						    /*        ��(��)���᡼�� */
2849 			img = disk_image_selected(src)
2850 						+ ((dst == DRIVE_1) ? -1 : +1);
2851 			if ((img < 0) ||
2852 			    (disk_image_num(dst) - 1 < img)) img = -1;
2853 		    }
2854 		}
2855 		if (img < 0) drive_set_empty(dst);
2856 		else         disk_change_image(dst, img);
2857 	    }
2858 	}
2859 
2860     } else {	/*   IMG_BOTH */
2861 
2862 	if (quasi88_disk_insert_all(disk_filename, disk_open_ro) == FALSE) {
2863 
2864 	    disk_drv = 0;
2865 	    start_file_error_dialog(disk_drv, ERR_CANT_OPEN);
2866 
2867 	}
2868 
2869     }
2870 
2871     if (filename_synchronize) {
2872 	sub_misc_suspend_update();
2873 	sub_misc_snapshot_update();
2874 	sub_misc_waveout_update();
2875     }
2876     set_disk_widget();
2877     disk_update_dipsw_b_boot();
2878 }
2879 
2880 /*----------------------------------------------------------------------*/
2881 /* �֥��᡼���ե�������Ĥ���� �ܥ��������ν���			*/
2882 
sub_disk_close(void)2883 static void sub_disk_close(void)
2884 {
2885     quasi88_disk_eject(disk_drv);
2886 
2887     if (filename_synchronize) {
2888 	sub_misc_suspend_update();
2889 	sub_misc_snapshot_update();
2890 	sub_misc_waveout_update();
2891     }
2892     set_disk_widget();
2893     disk_update_dipsw_b_boot();
2894 }
2895 
2896 /*----------------------------------------------------------------------*/
2897 /* ��ȿ�Хɥ饤�֤�Ʊ���ե���������� �ܥ��������ν���		*/
2898 
sub_disk_copy(void)2899 static void sub_disk_copy(void)
2900 {
2901     int dst = disk_drv;
2902     int src = disk_drv ^ 1;
2903     int img;
2904 
2905     if (! disk_image_exist(src)) return;
2906 
2907     if (drive[ src ].empty) {			/* ȿ��¦�ɥ饤�� ���ʤ� */
2908 	img = 0;				/*        �ǽ�Υ��᡼�� */
2909     } else {
2910 	if (disk_image_num(src) == 1) {		/* ���᡼����1�Ĥξ��� */
2911 	    img = -1;				/*        �ɥ饤�� ����  */
2912 
2913 	} else {				/* ���᡼����ʣ�������  */
2914 						/*        ��(��)���᡼�� */
2915 	    img = disk_image_selected(src) + ((dst == DRIVE_1) ? -1 : +1);
2916 	    if ((img < 0) ||
2917 		(disk_image_num(dst) -1 < img)) img = -1;
2918 	}
2919     }
2920 
2921     if (quasi88_disk_insert_A_to_B(src, dst, img) == FALSE) {
2922 	start_file_error_dialog(disk_drv, ERR_CANT_OPEN);
2923     }
2924 
2925     if (filename_synchronize) {
2926 	sub_misc_suspend_update();
2927 	sub_misc_snapshot_update();
2928 	sub_misc_waveout_update();
2929     }
2930     set_disk_widget();
2931     disk_update_dipsw_b_boot();
2932 }
2933 
2934 
2935 
2936 
2937 
2938 /*----------------------------------------------------------------------*/
2939 /* ���᡼���Υꥹ�ȥ����ƥ�������Ρ�������Хå��ؿ�			*/
2940 
cb_disk_image(UNUSED_WIDGET,void * p)2941 static	void	cb_disk_image(UNUSED_WIDGET, void *p)
2942 {
2943     int drv = ((int)p) & 0xff;
2944     int img = ((int)p) >> 8;
2945 
2946     if (img < 0) {			/* img == -1 �� <<�ʤ�>> */
2947 	drive_set_empty(drv);
2948     } else {				/* img >= 0 �ʤ� ���᡼���ֹ� */
2949 	drive_unset_empty(drv);
2950 	disk_change_image(drv, img);
2951     }
2952 }
2953 
2954 /*----------------------------------------------------------------------*/
2955 /* �ɥ饤�����¸�ߤ���ܥ���Ρ�������Хå��ؿ�			*/
2956 
cb_disk_button(UNUSED_WIDGET,void * p)2957 static	void	cb_disk_button(UNUSED_WIDGET, void *p)
2958 {
2959     int drv    = ((int)p) & 0xff;
2960     int button = ((int)p) >> 8;
2961 
2962     disk_drv = drv;
2963     disk_img = disk_image_selected(drv);
2964 
2965     switch (disk_info[drv].func[button]) {
2966     case IMG_OPEN:
2967     case IMG_BOTH:
2968 	sub_disk_open(disk_info[drv].func[button]);
2969 	break;
2970     case IMG_CLOSE:
2971 	sub_disk_close();
2972 	break;
2973     case IMG_COPY:
2974 	sub_disk_copy();
2975 	break;
2976     case IMG_ATTR:
2977 	if (! drive_check_empty(drv)) {	     /* ���᡼��<<�ʤ�>>�������̵�� */
2978 	    sub_disk_attr();
2979 	}
2980 	break;
2981     }
2982 }
2983 
2984 /*----------------------------------------------------------------------*/
2985 /* �ե����������ˡ�disk_info[] �˾�����å�			*/
2986 /*		(���᡼���Υꥹ���������ܥ�������Υ�٥���å�)	*/
2987 
set_disk_widget(void)2988 static	void	set_disk_widget(void)
2989 {
2990     int i, drv, save_code;
2991     Q8tkWidget *item;
2992     T_DISK_INFO *w;
2993     const t_menulabel *inf = data_disk_info;
2994     const t_menulabel *l   = data_disk_image;
2995     const t_menulabel *btn;
2996     char wk[40], wk2[20];
2997     const char *s;
2998 
2999 
3000     for (drv=0; drv<2; drv++) {
3001 	w = &disk_info[drv];
3002 
3003 	if (menu_swapdrv) {
3004 	    btn = (drv == 0) ? data_disk_button_drv1swap
3005 			     : data_disk_button_drv2swap;
3006 	} else {
3007 	    btn = (drv == 0) ? data_disk_button_drv1
3008 			     : data_disk_button_drv2;
3009 	}
3010 
3011 		/* ���᡼��̾�� LIST ITEM ���� */
3012 
3013 	q8tk_listbox_clear_items(w->list, 0, -1);
3014 
3015 	item = q8tk_list_item_new_with_label(GET_LABEL(l,
3016 						       DATA_DISK_IMAGE_EMPTY));
3017 	q8tk_widget_show(item);
3018 	q8tk_container_add(w->list, item);		/* <<�ʤ�>> ITEM */
3019 	q8tk_signal_connect(item, "select",
3020 			    cb_disk_image, (void *)((-1 << 8) + drv));
3021 
3022 	if (disk_image_exist(drv)) {		/* ---- �ǥ����������� ---- */
3023 	    save_code = q8tk_set_kanjicode(Q8TK_KANJI_SJIS);
3024 	    {
3025 		for (i=0; i<disk_image_num(drv); i++) {
3026 		    sprintf(wk, "%3d  %-16s  %s ", /*���᡼��No ���᡼��̾ RW*/
3027 			    i+1,
3028 			    drive[drv].image[i].name,
3029 			    (drive[drv].image[i].protect) ? "RO" : "RW");
3030 
3031 		    item = q8tk_list_item_new_with_label(wk);
3032 		    q8tk_widget_show(item);
3033 		    q8tk_container_add(w->list, item);
3034 		    q8tk_signal_connect(item, "select",
3035 					cb_disk_image, (void *)((i<<8) + drv));
3036 		}
3037 	    }
3038 	    q8tk_set_kanjicode(save_code);
3039 
3040 				/* <<�ʤ�>> or ����image �� ITEM ���쥯�� */
3041 	    if (drive_check_empty(drv)) i = 0;
3042 	    else                        i = disk_image_selected(drv) + 1;
3043 	    q8tk_listbox_select_item(w->list, i);
3044 
3045 	} else {				/* ---- �ɥ饤�ֶ��ä� ---- */
3046 	    q8tk_listbox_select_item(w->list, 0);	    /* <<�ʤ�>> ITEM */
3047 	}
3048 
3049 		/* �ܥ���ε�ǽ ���Ĥ���ס�°���ѹ��� / �ֳ����סֳ����� */
3050 
3051 	if (disk_image_exist(drv)) {
3052 	    w->func[0] = IMG_CLOSE;
3053 	    w->func[1] = IMG_ATTR;
3054 	} else {
3055 	    w->func[0] = (disk_image_exist(drv^1)) ? IMG_COPY : IMG_BOTH;
3056 	    w->func[1] = IMG_OPEN;
3057 	}
3058 	q8tk_label_set(w->label[0], GET_LABEL(btn, w->func[0]));
3059 	q8tk_label_set(w->label[1], GET_LABEL(btn, w->func[1]));
3060 
3061 		/* ���� - Busy/Ready */
3062 
3063 	if (get_drive_ready(drv)) s = GET_LABEL(inf,DATA_DISK_INFO_STAT_READY);
3064 	else                      s = GET_LABEL(inf,DATA_DISK_INFO_STAT_BUSY);
3065 	q8tk_label_set(w->stat_label, s);
3066 	q8tk_label_set_reverse(w->stat_label,	/* BUSY�ʤ�ȿžɽ�� */
3067 			       (get_drive_ready(drv)) ? FALSE : TRUE);
3068 
3069 		/* ���� - RO/RW°�� */
3070 
3071 	if (disk_image_exist(drv)) {
3072 	    if (drive[drv].read_only) s =GET_LABEL(inf,DATA_DISK_INFO_ATTR_RO);
3073 	    else                      s =GET_LABEL(inf,DATA_DISK_INFO_ATTR_RW);
3074 	} else {
3075 	    s = "";
3076 	}
3077 	q8tk_label_set(w->attr_label, s);
3078 	q8tk_label_set_color(w->attr_label,	/* ReadOnly�ʤ��ֿ�ɽ�� */
3079 			     (drive[drv].read_only) ? Q8GR_PALETTE_RED : -1);
3080 
3081 		/* ���� - ���᡼���� */
3082 
3083 	if (disk_image_exist(drv)) {
3084 	    if (drive[drv].detect_broken_image) {	/* ��»���� */
3085 		s = GET_LABEL(inf, DATA_DISK_INFO_NR_BROKEN);
3086 	    } else
3087 	    if (drive[drv].over_image ||		/* ���᡼��¿�᤮ */
3088 		disk_image_num(drv) > 99) {
3089 		s = GET_LABEL(inf, DATA_DISK_INFO_NR_OVER);
3090 	    } else {
3091 		s = "";
3092 	    }
3093 	    sprintf(wk, "%2d%s",
3094 		    (disk_image_num(drv)>99) ? 99 : disk_image_num(drv), s);
3095 	    sprintf(wk2, "%9.9s", wk);			/* 9ʸ�����ͤ���Ѵ� */
3096 	} else {
3097 	    wk2[0] = '\0';
3098 	}
3099 	q8tk_label_set(w->num_label,  wk2);
3100     }
3101 }
3102 
3103 
3104 /*----------------------------------------------------------------------*/
3105 /* �֥֥�������� �ܥ��������ν���					*/
3106 
3107 static	void	sub_disk_blank_ok(void);
3108 static	void	cb_disk_blank_warn_clicked(Q8tkWidget *, void *);
3109 
3110 
cb_disk_blank(UNUSED_WIDGET,UNUSED_PARM)3111 static	void	cb_disk_blank(UNUSED_WIDGET, UNUSED_PARM)
3112 {
3113     const char *initial;
3114     const t_menulabel *l = data_disk_blank;
3115 
3116     /* �ǥ�����������Ф��Υե�������ʤ���Хǥ������ѥǥ��쥯�ȥ����� */
3117     initial = filename_get_disk_or_dir(DRIVE_1);
3118 
3119     START_FILE_SELECTION(GET_LABEL(l, DATA_DISK_BLANK_FSEL),
3120 			 -1,	/* ReadOnly ��������Բ� */
3121 			 initial,
3122 
3123 			 sub_disk_blank_ok,
3124 			 disk_filename,
3125 			 QUASI88_MAX_FILENAME,
3126 			 NULL);
3127 }
3128 
sub_disk_blank_ok(void)3129 static	void	sub_disk_blank_ok(void)
3130 {
3131     const t_menulabel *l = data_disk_blank;
3132 
3133     switch (osd_file_stat(disk_filename)) {
3134 
3135     case FILE_STAT_NOEXIST:
3136 	/* �ե���������˺��������֥������� */
3137 	sub_disk_attr_file_ctrl(0, 0, ATTR_CREATE, disk_filename);
3138 	break;
3139 
3140     case FILE_STAT_DIR:
3141 	/* �ǥ��쥯�ȥ�ʤΤǡ��֥�����ɲäǤ��ʤ� */
3142 	start_file_error_dialog(-1, ERR_CANT_OPEN);
3143 	break;
3144 
3145     default:
3146 	/* ���Ǥ˥ե����뤬¸�ߤ��ޤ����֥�����ɲä��ޤ����� */
3147 	dialog_create();
3148 	{
3149 	    dialog_set_title(GET_LABEL(l, DATA_DISK_BLANK_WARN_0));
3150 
3151 	    dialog_set_title(GET_LABEL(l, DATA_DISK_BLANK_WARN_1));
3152 
3153 	    dialog_set_separator();
3154 
3155 	    dialog_set_button(GET_LABEL(l, DATA_DISK_BLANK_WARN_APPEND),
3156 			      cb_disk_blank_warn_clicked, (void*)TRUE);
3157 
3158 	    dialog_set_button(GET_LABEL(l, DATA_DISK_BLANK_WARN_CANCEL),
3159 			      cb_disk_blank_warn_clicked, (void*)FALSE);
3160 
3161 	    dialog_accel_key(Q8TK_KEY_ESC);
3162 	}
3163 	dialog_start();
3164 	break;
3165     }
3166 }
3167 
cb_disk_blank_warn_clicked(UNUSED_WIDGET,void * p)3168 static	void	cb_disk_blank_warn_clicked(UNUSED_WIDGET, void *p)
3169 {
3170     dialog_destroy();
3171 
3172     if ((int)p) {
3173 	/* �ե�����ˡ��֥�����ɵ� */
3174 	sub_disk_attr_file_ctrl(0, 0, ATTR_CREATE, disk_filename);
3175     }
3176 }
3177 
3178 /*----------------------------------------------------------------------*/
3179 /* �֥ե�����̾��ǧ�� �ܥ��������ν���				*/
3180 
cb_disk_fname_dialog_ok(UNUSED_WIDGET,UNUSED_PARM)3181 static	void	cb_disk_fname_dialog_ok(UNUSED_WIDGET, UNUSED_PARM)
3182 {
3183     dialog_destroy();
3184 }
3185 
cb_disk_fname(UNUSED_WIDGET,UNUSED_PARM)3186 static	void	cb_disk_fname(UNUSED_WIDGET, UNUSED_PARM)
3187 {
3188     const t_menulabel *l = data_disk_fname;
3189     char filename[66 +5 +1];		/* 5 == strlen("[1:] "), 1 �� '\0' */
3190     int save_code;
3191     int i, width, len;
3192     const char *ptr[2];
3193     const char *none = "(No Image File)";
3194 
3195     dialog_create();
3196     {
3197 	dialog_set_title(GET_LABEL(l, DATA_DISK_FNAME_TITLE));
3198 	dialog_set_title(GET_LABEL(l, DATA_DISK_FNAME_LINE));
3199 
3200 	{
3201 	    save_code = q8tk_set_kanjicode(osd_kanji_code());
3202 
3203 	    width = 0;
3204 	    for (i=0; i<2; i++) {
3205 		if ((ptr[i] = filename_get_disk(i)) == NULL) { ptr[i] = none; }
3206 		len = sprintf(filename, "%.66s", ptr[i]);	/* == max 66 */
3207 		width = MAX(width, len);
3208 	    }
3209 
3210 	    for (i=0; i<2; i++) {
3211 		sprintf(filename, "[%d:] %-*.*s", i+1, width, width, ptr[i]);
3212 		dialog_set_title(filename);
3213 	    }
3214 
3215 	    q8tk_set_kanjicode(save_code);
3216 	}
3217 
3218 	if (disk_image_exist(0) && disk_same_file()) {
3219 	    dialog_set_title(GET_LABEL(l, DATA_DISK_FNAME_SAME));
3220 	}
3221 
3222 	if ((disk_image_exist(0) && drive[0].read_only) ||
3223 	    (disk_image_exist(1) && drive[1].read_only)) {
3224 	    dialog_set_title(GET_LABEL(l, DATA_DISK_FNAME_SEP));
3225 	    dialog_set_title(GET_LABEL(l, DATA_DISK_FNAME_RO));
3226 
3227 	    if (fdc_ignore_readonly == FALSE) {
3228 		dialog_set_title(GET_LABEL(l, DATA_DISK_FNAME_RO_1));
3229 		dialog_set_title(GET_LABEL(l, DATA_DISK_FNAME_RO_2));
3230 	    } else {
3231 		dialog_set_title(GET_LABEL(l, DATA_DISK_FNAME_RO_X));
3232 		dialog_set_title(GET_LABEL(l, DATA_DISK_FNAME_RO_Y));
3233 	    }
3234 	}
3235 
3236 
3237 	dialog_set_separator();
3238 
3239 	dialog_set_button(GET_LABEL(l, DATA_DISK_FNAME_OK),
3240 			  cb_disk_fname_dialog_ok, NULL);
3241 
3242 	dialog_accel_key(Q8TK_KEY_ESC);
3243     }
3244     dialog_start();
3245 }
3246 
3247 
3248 /*----------------------------------------------------------------------*/
3249 					/* �ɥ饤��ɽ������ �������촹�� */
3250 
cb_disk_dispswap_clicked(UNUSED_WIDGET,UNUSED_PARM)3251 static	void	cb_disk_dispswap_clicked(UNUSED_WIDGET, UNUSED_PARM)
3252 {
3253     dialog_destroy();
3254 }
3255 
get_disk_dispswap(void)3256 static	int	get_disk_dispswap(void)
3257 {
3258     return menu_swapdrv;
3259 }
cb_disk_dispswap(Q8tkWidget * widget,UNUSED_PARM)3260 static	void	cb_disk_dispswap(Q8tkWidget *widget, UNUSED_PARM)
3261 {
3262     const t_menulabel *l = data_disk_dispswap;
3263     int parm = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
3264 
3265     menu_swapdrv = parm;
3266 
3267     dialog_create();
3268     {
3269 	dialog_set_title(GET_LABEL(l, DATA_DISK_DISPSWAP_INFO_1));
3270 	dialog_set_title(GET_LABEL(l, DATA_DISK_DISPSWAP_INFO_2));
3271 
3272 	dialog_set_separator();
3273 
3274 	dialog_set_button(GET_LABEL(l, DATA_DISK_DISPSWAP_OK),
3275 			  cb_disk_dispswap_clicked, NULL);
3276 
3277 	dialog_accel_key(Q8TK_KEY_ESC);
3278     }
3279     dialog_start();
3280 }
3281 
3282 /*----------------------------------------------------------------------*/
3283 					/* ���ơ������˥��᡼��̾ɽ�� */
3284 
cb_disk_dispstatus_clicked(UNUSED_WIDGET,UNUSED_PARM)3285 static	void	cb_disk_dispstatus_clicked(UNUSED_WIDGET, UNUSED_PARM)
3286 {
3287     dialog_destroy();
3288 }
3289 
get_disk_dispstatus(void)3290 static	int	get_disk_dispstatus(void)
3291 {
3292     return status_imagename;
3293 }
cb_disk_dispstatus(Q8tkWidget * widget,UNUSED_PARM)3294 static	void	cb_disk_dispstatus(Q8tkWidget *widget, UNUSED_PARM)
3295 {
3296     const t_menulabel *l = data_disk_dispstatus;
3297     int parm = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
3298 
3299     status_imagename = parm;
3300 
3301     if (status_imagename) {
3302 	/* ����ˤ������Τߡ�������ɽ�� */
3303 	dialog_create();
3304 	{
3305 	    dialog_set_title(GET_LABEL(l, DATA_DISK_DISPSTATUS_INFO));
3306 
3307 	    dialog_set_separator();
3308 
3309 	    dialog_set_button(GET_LABEL(l, DATA_DISK_DISPSTATUS_OK),
3310 			      cb_disk_dispstatus_clicked, NULL);
3311 
3312 	    dialog_accel_key(Q8TK_KEY_ESC);
3313 	}
3314 	dialog_start();
3315     }
3316 }
3317 
3318 /*======================================================================*/
3319 
menu_disk(void)3320 static	Q8tkWidget	*menu_disk(void)
3321 {
3322     Q8tkWidget *hbox, *vbox, *swin, *lab, *btn;
3323     Q8tkWidget *f, *vx, *hx;
3324     T_DISK_INFO *w;
3325     int i,j,k;
3326     const t_menulabel *l;
3327 
3328 
3329     hbox = PACK_HBOX(NULL);
3330     {
3331 	for (k=0; k<COUNTOF(disk_info); k++) {
3332 
3333 	    if (menu_swapdrv) { i = k ^ 1; }
3334 	    else              { i = k;     }
3335 
3336 	    w = &disk_info[i];
3337 	    {
3338 		vbox = PACK_VBOX(hbox);
3339 		{
3340 		    lab = PACK_LABEL(vbox, GET_LABEL(data_disk_image_drive,i));
3341 
3342 		    if (menu_swapdrv)
3343 			q8tk_misc_set_placement(lab, Q8TK_PLACEMENT_X_RIGHT,0);
3344 
3345 		    {
3346 			swin  = q8tk_scrolled_window_new(NULL, NULL);
3347 			q8tk_widget_show(swin);
3348 			q8tk_scrolled_window_set_policy(swin,
3349 							Q8TK_POLICY_NEVER,
3350 							Q8TK_POLICY_AUTOMATIC);
3351 			q8tk_misc_set_size(swin, 29, 11);
3352 
3353 			w->list = q8tk_listbox_new();
3354 			q8tk_widget_show(w->list);
3355 			q8tk_container_add(swin, w->list);
3356 
3357 			q8tk_box_pack_start(vbox, swin);
3358 		    }
3359 
3360 		    for (j=0; j<2; j++) {
3361 #if 0
3362 						/* ����٥�Υ������åȳ��� */
3363 			w->label[j] = q8tk_label_new("");
3364 			q8tk_widget_show(w->label[j]);
3365 			w->button[j] = q8tk_button_new();
3366 			q8tk_widget_show(w->button[j]);
3367 			q8tk_container_add(w->button[j], w->label[j]);
3368 			q8tk_signal_connect(w->button[j], "clicked",
3369 					    cb_disk_button,
3370 					    (void *)((j << 8) + i));
3371 
3372 			q8tk_box_pack_start(vbox, w->button[j]);
3373 #else
3374 						/* ����٥�Υ������åȳ��� */
3375 			w->label[j] = q8tk_label_new("");
3376 			q8tk_widget_show(w->label[j]);
3377 			btn = q8tk_button_new();
3378 			q8tk_widget_show(btn);
3379 			q8tk_container_add(btn, w->label[j]);
3380 			q8tk_signal_connect(btn, "clicked",
3381 					    cb_disk_button,
3382 					    (void *)((j << 8) + i));
3383 
3384 			q8tk_box_pack_start(vbox, btn);
3385 #endif
3386 		    }
3387 		}
3388 	    }
3389 
3390 	    PACK_VSEP(hbox);
3391 	}
3392 
3393 	{
3394 	    vbox = PACK_VBOX(hbox);
3395 	    {
3396 		l = data_disk_info;
3397 		for (i=0; i<COUNTOF(disk_info); i++) {
3398 		    w = &disk_info[i];
3399 
3400 		    vx = PACK_VBOX(NULL);
3401 		    {
3402 			hx = PACK_HBOX(vx);
3403 			{
3404 			    PACK_LABEL(hx, GET_LABEL(l, DATA_DISK_INFO_STAT));
3405 						/* ����٥�Υ������åȳ��� */
3406 			    w->stat_label = PACK_LABEL(hx, "");
3407 			}
3408 
3409 			hx = PACK_HBOX(vx);
3410 			{
3411 			    PACK_LABEL(hx, GET_LABEL(l, DATA_DISK_INFO_ATTR));
3412 						/* ����٥�Υ������åȳ��� */
3413 			    w->attr_label = PACK_LABEL(hx, "");
3414 			}
3415 
3416 			hx = PACK_HBOX(vx);
3417 			{
3418 			    PACK_LABEL(hx, GET_LABEL(l, DATA_DISK_INFO_NR));
3419 						/* ����٥�Υ������åȳ��� */
3420 			    w->num_label = PACK_LABEL(hx, "");
3421 			    q8tk_misc_set_placement(w->num_label,
3422 						    Q8TK_PLACEMENT_X_RIGHT, 0);
3423 			}
3424 		    }
3425 
3426 		    f = PACK_FRAME(vbox,
3427 				   GET_LABEL(data_disk_info_drive, i), vx);
3428 		    q8tk_frame_set_shadow_type(f, Q8TK_SHADOW_IN);
3429 		}
3430 
3431 		hx = PACK_HBOX(vbox);
3432 		{
3433 		    PACK_BUTTON(hx,
3434 				GET_LABEL(data_disk_fname, DATA_DISK_FNAME),
3435 				cb_disk_fname, NULL);
3436 		}
3437 
3438 		PACK_CHECK_BUTTON(vbox,
3439 				  GET_LABEL(data_disk_dispswap,
3440 					    DATA_DISK_DISPSWAP),
3441 				  get_disk_dispswap(),
3442 				  cb_disk_dispswap, NULL);
3443 
3444 		PACK_CHECK_BUTTON(vbox,
3445 				  GET_LABEL(data_disk_dispstatus, 0),
3446 				  get_disk_dispstatus(),
3447 				  cb_disk_dispstatus, NULL);
3448 
3449 #if 0
3450 		for (i=0; i<1; i++)	    /* ����Ĵ���Τ�����ߡ����Ĥ� */
3451 		    PACK_LABEL(vbox, "");
3452 #endif
3453 
3454 		PACK_BUTTON(vbox,
3455 			    GET_LABEL(data_disk_image, DATA_DISK_IMAGE_BLANK),
3456 			    cb_disk_blank, NULL);
3457 	    }
3458 	}
3459     }
3460 
3461 
3462     set_disk_widget();
3463 
3464     return hbox;
3465 }
3466 
3467 
3468 
3469 /*===========================================================================
3470  *
3471  *	�ᥤ��ڡ���	��������
3472  *
3473  *===========================================================================*/
3474 
3475 /*----------------------------------------------------------------------*/
3476 static Q8tkWidget *fkey_widget[20+1][2];
3477 
3478 				    /* �ե����������������Ƥ��ѹ� */
get_key_fkey(int fn_key)3479 static	int	get_key_fkey(int fn_key)
3480 {
3481     return (function_f[ fn_key ] < 0x20) ? function_f[ fn_key ] : FN_FUNC;
3482 }
cb_key_fkey(Q8tkWidget * widget,void * fn_key)3483 static	void	cb_key_fkey(Q8tkWidget *widget, void *fn_key)
3484 {
3485     int i;
3486     const t_menudata *p = data_key_fkey_fn;
3487     const char       *combo_str = q8tk_combo_get_text(widget);
3488 
3489     for (i=0; i<COUNTOF(data_key_fkey_fn); i++, p++) {
3490 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
3491 	    function_f[ (int)fn_key ] = p->val;
3492 	    q8tk_combo_set_text(fkey_widget[(int)fn_key][1],
3493 				keymap_assign[0].str);
3494 	    return;
3495 	}
3496     }
3497 }
3498 
get_key_fkey2(int fn_key)3499 static	int	get_key_fkey2(int fn_key)
3500 {
3501     return (function_f[ fn_key ] >= 0x20) ? function_f[ fn_key ]
3502 					  : KEY88_INVALID;
3503 }
cb_key_fkey2(Q8tkWidget * widget,void * fn_key)3504 static	void	cb_key_fkey2(Q8tkWidget *widget, void *fn_key)
3505 {
3506     int i;
3507     const t_keymap *q = keymap_assign;
3508     const char     *combo_str = q8tk_combo_get_text(widget);
3509 
3510     for (i=0; i<COUNTOF(keymap_assign); i++, q++) {
3511 	if (strcmp(q->str, combo_str) == 0) {
3512 	    function_f[ (int)fn_key ] = q->code;
3513 	    q8tk_combo_set_text(fkey_widget[(int)fn_key][0],
3514 				data_key_fkey_fn[0].str[menu_lang]);
3515 	    return;
3516 	}
3517     }
3518 }
3519 
3520 
menu_key_fkey(void)3521 static	Q8tkWidget	*menu_key_fkey(void)
3522 {
3523     int i;
3524     Q8tkWidget *vbox, *hbox;
3525     const t_menudata *p = data_key_fkey;
3526 
3527     vbox = PACK_VBOX(NULL);
3528     {
3529 	for (i=0; i<COUNTOF(data_key_fkey); i++, p++) {
3530 
3531 	    hbox = PACK_HBOX(vbox);
3532 	    {
3533 		PACK_LABEL(hbox, GET_LABEL(p, 0));
3534 
3535 		fkey_widget[p->val][0] =
3536 		    PACK_COMBO(hbox,
3537 			       data_key_fkey_fn, COUNTOF(data_key_fkey_fn),
3538 			       get_key_fkey(p->val), NULL, 42,
3539 			       cb_key_fkey, (void*)(p->val),
3540 			       NULL, NULL);
3541 
3542 		fkey_widget[p->val][1] =
3543 		    MAKE_KEY_COMBO(hbox,
3544 				   &data_key_fkey2[i],
3545 				   get_key_fkey2,
3546 				   cb_key_fkey2);
3547 	    }
3548 	}
3549     }
3550 
3551     return vbox;
3552 }
3553 
3554 /*----------------------------------------------------------------------*/
3555 						      /* ����������ѹ� */
get_key_cfg(int type)3556 static	int	get_key_cfg(int type)
3557 {
3558     switch (type) {
3559     case DATA_KEY_CFG_TENKEY:	return	tenkey_emu;
3560     case DATA_KEY_CFG_NUMLOCK:	return	numlock_emu;
3561     }
3562     return FALSE;
3563 }
cb_key_cfg(Q8tkWidget * widget,void * type)3564 static	void	cb_key_cfg(Q8tkWidget *widget, void *type)
3565 {
3566     int key = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
3567 
3568     switch ((int)type) {
3569     case DATA_KEY_CFG_TENKEY:	tenkey_emu  = (key) ? TRUE : FALSE;	break;
3570     case DATA_KEY_CFG_NUMLOCK:	numlock_emu = (key) ? TRUE : FALSE;	break;
3571     }
3572 }
3573 
3574 
menu_key_cfg(void)3575 static	Q8tkWidget	*menu_key_cfg(void)
3576 {
3577     Q8tkWidget *vbox;
3578 
3579     vbox = PACK_VBOX(NULL);
3580     {
3581 	PACK_CHECK_BUTTONS(vbox,
3582 			   data_key_cfg, COUNTOF(data_key_cfg),
3583 			   get_key_cfg, cb_key_cfg);
3584     }
3585 
3586     return vbox;
3587 }
3588 
3589 /*----------------------------------------------------------------------*/
3590 					      /* ���եȥ����������ܡ��� */
3591 static	void	keymap_start(void);
3592 static	void	keymap_finish(void);
3593 
cb_key_softkeyboard(UNUSED_WIDGET,UNUSED_PARM)3594 static	void	cb_key_softkeyboard(UNUSED_WIDGET, UNUSED_PARM)
3595 {
3596     keymap_start();
3597 }
3598 
menu_key_softkeyboard(void)3599 static	Q8tkWidget	*menu_key_softkeyboard(void)
3600 {
3601     Q8tkWidget *button;
3602     const t_menulabel *l = data_skey_set;
3603 
3604     button = PACK_BUTTON(NULL,
3605 			 GET_LABEL(l, DATA_SKEY_BUTTON_SETUP),
3606 			 cb_key_softkeyboard, NULL);
3607 
3608     return button;
3609 }
3610 
3611 
3612 
3613 /*----------------------------------------------------------------------*/
3614 static	void	menu_key_cursor_setting(void);
3615 					    /* �������륭���������ޥ��� */
3616 				     /* original idea by floi, thanks ! */
3617 static	int		key_cursor_widget_init_done;
3618 static	Q8tkWidget	*key_cursor_widget_sel;
3619 static	Q8tkWidget	*key_cursor_widget_sel_none;
3620 static	Q8tkWidget	*key_cursor_widget_sel_key;
3621 
get_key_cursor_key_mode(void)3622 static	int	get_key_cursor_key_mode(void)
3623 {
3624     return cursor_key_mode;
3625 }
cb_key_cursor_key_mode(UNUSED_WIDGET,void * p)3626 static	void	cb_key_cursor_key_mode(UNUSED_WIDGET, void *p)
3627 {
3628     cursor_key_mode = (int)p;
3629 
3630     menu_key_cursor_setting();
3631 }
get_key_cursor_key(int type)3632 static	int	get_key_cursor_key(int type)
3633 {
3634     return cursor_key_assign[ type ];
3635 }
cb_key_cursor_key(Q8tkWidget * widget,void * type)3636 static	void	cb_key_cursor_key(Q8tkWidget *widget, void *type)
3637 {
3638     int i;
3639     const t_keymap *q = keymap_assign;
3640     const char     *combo_str = q8tk_combo_get_text(widget);
3641 
3642     for (i=0; i<COUNTOF(keymap_assign); i++, q++) {
3643 	if (strcmp(q->str, combo_str) == 0) {
3644 	    cursor_key_assign[ (int)type ] = q->code;
3645 	    return;
3646 	}
3647     }
3648 }
3649 
3650 
menu_key_cursor(void)3651 static	Q8tkWidget	*menu_key_cursor(void)
3652 {
3653     int i;
3654     Q8tkWidget *hbox, *vbox;
3655 
3656     key_cursor_widget_init_done = FALSE;
3657 
3658     hbox = PACK_HBOX(NULL);
3659     {
3660 	{			/* ����������ƥ⡼�ɤ����� */
3661 	    vbox = PACK_VBOX(hbox);
3662 	    PACK_RADIO_BUTTONS(vbox,
3663 			       data_key_cursor_mode,
3664 			       COUNTOF(data_key_cursor_mode),
3665 			       get_key_cursor_key_mode(),
3666 			       cb_key_cursor_key_mode);
3667 
3668 	    for (i=0; i<2; i++) PACK_LABEL(vbox, "");	/* ����Ĵ���Υ��ߡ� */
3669 
3670 	    key_cursor_widget_sel = vbox;
3671 	}
3672 
3673 	PACK_VSEP(hbox);	/* ���ڤ��� */
3674 
3675 	{			/* ����������� �ʤ��α����� */
3676 	    vbox = PACK_VBOX(hbox);
3677 
3678 	    PACK_LABEL(vbox, GET_LABEL(data_key, DATA_KEY_CURSOR_SPACING));
3679 
3680 	    key_cursor_widget_sel_none = vbox;
3681 	}
3682 
3683 	{			/* ����������� Ǥ�դα����� */
3684 	    key_cursor_widget_sel_key =
3685 		PACK_KEY_ASSIGN(hbox,
3686 				data_key_cursor, COUNTOF(data_key_cursor),
3687 				get_key_cursor_key, cb_key_cursor_key);
3688 	}
3689     }
3690 
3691     key_cursor_widget_init_done = TRUE;
3692     menu_key_cursor_setting();
3693 
3694     return hbox;
3695 }
3696 
menu_key_cursor_setting(void)3697 static	void	menu_key_cursor_setting(void)
3698 {
3699     if (key_cursor_widget_init_done == FALSE) return;
3700 
3701     {
3702 	q8tk_widget_show(key_cursor_widget_sel);
3703 	q8tk_widget_hide(key_cursor_widget_sel_none);
3704 	q8tk_widget_hide(key_cursor_widget_sel_key);
3705 
3706 	switch (cursor_key_mode) {
3707 	case 0:
3708 	case 1:   q8tk_widget_show(key_cursor_widget_sel_none);		break;
3709 	case 2:   q8tk_widget_show(key_cursor_widget_sel_key);		break;
3710 	}
3711     }
3712 }
3713 
3714 /*----------------------------------------------------------------------*/
3715 
menu_key(void)3716 static	Q8tkWidget	*menu_key(void)
3717 {
3718     Q8tkWidget *vbox, *hbox, *vbox2, *w;
3719     const t_menulabel *l = data_key;
3720 
3721     vbox = PACK_VBOX(NULL);
3722     {
3723 	PACK_FRAME(vbox, GET_LABEL(l, DATA_KEY_FKEY), menu_key_fkey());
3724 
3725 	hbox = PACK_HBOX(vbox);
3726 	{
3727 	    PACK_FRAME(hbox, GET_LABEL(l, DATA_KEY_CURSOR), menu_key_cursor());
3728 
3729 	    vbox2 = PACK_VBOX(NULL);
3730 	    {
3731 		PACK_LABEL(vbox2, GET_LABEL(l, DATA_KEY_SKEY2));
3732 
3733 		w = menu_key_softkeyboard();
3734 		q8tk_box_pack_start(vbox2, w);
3735 		q8tk_misc_set_placement(w, Q8TK_PLACEMENT_X_CENTER,
3736 					Q8TK_PLACEMENT_Y_CENTER);
3737 
3738 		PACK_LABEL(vbox2, "");	/* ����Ĵ���Υ��ߡ� */
3739 	    }
3740 	    PACK_FRAME(hbox, GET_LABEL(l, DATA_KEY_SKEY), vbox2);
3741 	}
3742 
3743 	w = PACK_FRAME(vbox, "", menu_key_cfg());
3744 	q8tk_frame_set_shadow_type(w, Q8TK_SHADOW_NONE);
3745     }
3746 
3747     return vbox;
3748 }
3749 
3750 
3751 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
3752  *
3753  *	���֥�����ɥ�	���եȥ����������ܡ���
3754  *
3755  * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
3756 
3757 static	Q8tkWidget	*keymap[129];
3758 static	int		keymap_num;
3759 static	Q8tkWidget	*keymap_accel;
3760 
3761 enum {			/* keymap[] �ϰʲ��Υ������åȤ���¸�˻Ȥ� */
3762     KEYMAP_WIN,
3763 
3764     KEYMAP_VBOX,
3765     KEYMAP_SCRL,
3766     KEYMAP_SEP,
3767     KEYMAP_HBOX,
3768 
3769     KEYMAP_BTN_1,
3770     KEYMAP_BTN_2,
3771 
3772     KEYMAP_LINES,
3773     KEYMAP_LINE_1,
3774     KEYMAP_LINE_2,
3775     KEYMAP_LINE_3,
3776     KEYMAP_LINE_4,
3777     KEYMAP_LINE_5,
3778     KEYMAP_LINE_6,
3779 
3780     KEYMAP_KEY
3781 };
3782 
3783 /*----------------------------------------------------------------------*/
3784 
get_key_softkey(int code)3785 static	int	get_key_softkey(int code)
3786 {
3787     return softkey_is_pressed(code);
3788 }
cb_key_softkey(Q8tkWidget * button,void * code)3789 static	void	cb_key_softkey(Q8tkWidget *button, void *code)
3790 {
3791     if (Q8TK_TOGGLE_BUTTON(button)->active) softkey_press  ((int)code);
3792     else                                    softkey_release((int)code);
3793 }
3794 
cb_key_softkey_release(UNUSED_WIDGET,UNUSED_PARM)3795 static	void	cb_key_softkey_release(UNUSED_WIDGET, UNUSED_PARM)
3796 {
3797     softkey_release_all();	/* ���ƤΥ�����Υ�������֤ˤ���         */
3798     keymap_finish();		/* ���եȥ��������������������åȤ���� */
3799 }
3800 
cb_key_softkey_end(UNUSED_WIDGET,UNUSED_PARM)3801 static	void	cb_key_softkey_end(UNUSED_WIDGET, UNUSED_PARM)
3802 {
3803     softkey_bug();		/* ʣ������Ʊ���������Υϡ��ɥХ���Ƹ� */
3804     keymap_finish();		/* ���եȥ��������������������åȤ���� */
3805 }
3806 
3807 
3808 /* ���եȥ��ե��������ܡ��� ������ɥ�������ɽ�� */
3809 
keymap_start(void)3810 static	void	keymap_start(void)
3811 {
3812     Q8tkWidget *w, *v, *s, *l, *h, *b1, *b2, *vx, *hx, *n;
3813     int i,j;
3814     int model = (ROM_VERSION < '8') ? 0 : 1;
3815 
3816     for (i=0; i<COUNTOF(keymap); i++) keymap[i] = NULL;
3817 
3818     {						/* �ᥤ��Ȥʤ륦����ɥ� */
3819 	w = q8tk_window_new(Q8TK_WINDOW_DIALOG);
3820 	keymap_accel = q8tk_accel_group_new();
3821 	q8tk_accel_group_attach(keymap_accel, w);
3822     }
3823 
3824     {						/* �ˡ��ܥå�����褻�� */
3825 	v = q8tk_vbox_new();
3826 	q8tk_container_add(w, v);
3827 	q8tk_widget_show(v);
3828     }
3829 
3830     {							/* �ܥå����ˤ�     */
3831 	{						/* ���������� WIN */
3832 	    s = q8tk_scrolled_window_new(NULL, NULL);
3833 	    q8tk_box_pack_start(v, s);
3834 	    q8tk_misc_set_size(s, 80, 21);
3835 	    q8tk_scrolled_window_set_policy(s, Q8TK_POLICY_AUTOMATIC,
3836 					       Q8TK_POLICY_NEVER);
3837 	    q8tk_widget_show(s);
3838 	}
3839 	{						/* ���ɤ��Τ���ζ���*/
3840 	    l = q8tk_label_new("");
3841 	    q8tk_box_pack_start(v, l);
3842 	    q8tk_widget_show(l);
3843 	}
3844 	{						/* �ܥ��������� HBOX */
3845 	    h = q8tk_hbox_new();
3846 	    q8tk_box_pack_start(v, h);
3847 	    q8tk_misc_set_placement(h, Q8TK_PLACEMENT_X_CENTER, 0);
3848 	    q8tk_widget_show(h);
3849 
3850 	    {							/* HBOX�ˤ� */
3851 		const t_menulabel *l = data_skey_set;
3852 		{						/* �ܥ��� 1 */
3853 		    b1 = q8tk_button_new_with_label(
3854 					GET_LABEL(l,DATA_SKEY_BUTTON_OFF));
3855 		    q8tk_signal_connect(b1, "clicked",
3856 					cb_key_softkey_release, NULL);
3857 		    q8tk_box_pack_start(h, b1);
3858 		    q8tk_widget_show(b1);
3859 		}
3860 		{						/* �ܥ��� 2 */
3861 		    b2 = q8tk_button_new_with_label(
3862 					GET_LABEL(l,DATA_SKEY_BUTTON_QUIT));
3863 		    q8tk_signal_connect(b2, "clicked",
3864 					cb_key_softkey_end, NULL);
3865 		    q8tk_box_pack_start(h, b2);
3866 		    q8tk_widget_show(b2);
3867 		    q8tk_accel_group_add(keymap_accel,
3868 					 Q8TK_KEY_ESC, b2, "clicked");
3869 		}
3870 	    }
3871 	}
3872     }
3873 
3874     /* ���������� WIN �ˡ������ȥåפ�ʸ���Τ����줿���ܥ�����¤٤� */
3875 
3876     vx = q8tk_vbox_new();		/* ����6��ʬ���Ǽ���� VBOX ������ */
3877     q8tk_container_add(s, vx);
3878     q8tk_widget_show(vx);
3879 
3880     keymap[ KEYMAP_WIN   ] = w;
3881     keymap[ KEYMAP_VBOX  ] = v;
3882     keymap[ KEYMAP_SCRL  ] = s;
3883     keymap[ KEYMAP_SEP   ] = l;
3884     keymap[ KEYMAP_HBOX  ] = h;
3885     keymap[ KEYMAP_BTN_1 ] = b1;
3886     keymap[ KEYMAP_BTN_2 ] = b2;
3887     keymap[ KEYMAP_LINES ] = vx;
3888 
3889     keymap_num = KEYMAP_KEY;
3890 
3891 
3892     for (j=0; j<6; j++) {		/* ����6��ʬ�����֤� */
3893 
3894 	const t_keymap *p = keymap_line[ model ][ j ];
3895 
3896 	hx = q8tk_hbox_new();		/* ����ʣ���Ĥ��Ǽ���뤿���HBOX�� */
3897 	q8tk_box_pack_start(vx, hx);
3898 	q8tk_widget_show(hx);
3899 	keymap[ KEYMAP_LINE_1 + j ] = hx;
3900 
3901 	for (i=0; p[ i ].str; i++) {	/* ������1�ĤŤ����֤��Ƥ���*/
3902 
3903 	    if (keymap_num >= COUNTOF(keymap))	/* �ȥ�å� */
3904 		{ fprintf(stderr, "%s %d\n", __FILE__, __LINE__); break; }
3905 
3906 	    if (p[i].code)			/* �����ȥå�ʸ�� (�ܥ���) */
3907 	    {
3908 		n = q8tk_toggle_button_new_with_label(p[i].str);
3909 		if (get_key_softkey(p[i].code)) {
3910 		    q8tk_toggle_button_set_state(n, TRUE);
3911 		}
3912 		q8tk_signal_connect(n, "toggled",
3913 				    cb_key_softkey, (void *)p[i].code);
3914 	    }
3915 	    else				/* �ѥǥ����Ѷ��� (��٥�) */
3916 	    {
3917 		n = q8tk_label_new(p[i].str);
3918 	    }
3919 	    q8tk_box_pack_start(hx, n);
3920 	    q8tk_widget_show(n);
3921 
3922 	    keymap[ keymap_num ++ ] = n;
3923 	}
3924     }
3925 
3926 
3927     q8tk_widget_show(w);
3928     q8tk_grab_add(w);
3929 
3930     q8tk_widget_set_focus(b2);
3931 }
3932 
3933 
3934 /* �����ޥåץ��������ν�λ������ */
3935 
keymap_finish(void)3936 static	void	keymap_finish(void)
3937 {
3938     int i;
3939     for (i=keymap_num-1; i; i--) {
3940 	if (keymap[i]) {
3941 	    q8tk_widget_destroy(keymap[i]);
3942 	}
3943     }
3944 
3945     q8tk_grab_remove(keymap[ KEYMAP_WIN ]);
3946     q8tk_widget_destroy(keymap[ KEYMAP_WIN ]);
3947     q8tk_widget_destroy(keymap_accel);
3948 }
3949 
3950 
3951 
3952 
3953 
3954 
3955 
3956 
3957 /*===========================================================================
3958  *
3959  *	�ᥤ��ڡ���	�ޥ���
3960  *
3961  *===========================================================================*/
3962 
3963 static	void	menu_mouse_mouse_setting(void);
3964 static	void	menu_mouse_joy_setting(void);
3965 static	void	menu_mouse_joy2_setting(void);
3966 /*----------------------------------------------------------------------*/
3967 						/* �ޥ����⡼���ڤ��ؤ� */
get_mouse_mode(void)3968 static	int	get_mouse_mode(void)
3969 {
3970     return mouse_mode;
3971 }
cb_mouse_mode(Q8tkWidget * widget,UNUSED_PARM)3972 static	void	cb_mouse_mode(Q8tkWidget *widget, UNUSED_PARM)
3973 {
3974     int i;
3975     const t_menudata *p = data_mouse_mode;
3976     const char       *combo_str = q8tk_combo_get_text(widget);
3977 
3978     for (i=0; i<COUNTOF(data_mouse_mode); i++, p++) {
3979 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
3980 	    mouse_mode = p->val;
3981 	    menu_mouse_mouse_setting();
3982 	    menu_mouse_joy_setting();
3983 	    menu_mouse_joy2_setting();
3984 	    return;
3985 	}
3986     }
3987 }
3988 
3989 
menu_mouse_mode(void)3990 static	Q8tkWidget	*menu_mouse_mode(void)
3991 {
3992     Q8tkWidget *hbox;
3993 
3994 
3995     hbox  = PACK_HBOX(NULL);
3996     {
3997 	PACK_LABEL(hbox, " ");		/* ����ǥ�� */
3998 
3999 	PACK_COMBO(hbox,
4000 		   data_mouse_mode, COUNTOF(data_mouse_mode),
4001 		   get_mouse_mode(), NULL, 0,
4002 		   cb_mouse_mode, NULL,
4003 		   NULL, NULL);
4004     }
4005 
4006     return hbox;
4007 }
4008 
4009 /*----------------------------------------------------------------------*/
4010 						      /* ���ꥢ��ޥ��� */
get_mouse_serial(void)4011 static	int	get_mouse_serial(void)
4012 {
4013     return use_siomouse;
4014 }
cb_mouse_serial(Q8tkWidget * widget,UNUSED_PARM)4015 static	void	cb_mouse_serial(Q8tkWidget *widget, UNUSED_PARM)
4016 {
4017     int key = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
4018     use_siomouse = key;
4019 
4020     sio_mouse_init(use_siomouse);
4021 }
4022 
4023 
menu_mouse_serial(void)4024 static	Q8tkWidget	*menu_mouse_serial(void)
4025 {
4026     Q8tkWidget *hbox;
4027 
4028 
4029     hbox  = PACK_HBOX(NULL);
4030     {
4031 /*	PACK_LABEL(hbox, " ");*/
4032 
4033 	PACK_CHECK_BUTTON(hbox,
4034 			  GET_LABEL(data_mouse_serial, 0),
4035 			  get_mouse_serial(),
4036 			  cb_mouse_serial, NULL);
4037     }
4038 
4039     return hbox;
4040 }
4041 
4042 /*----------------------------------------------------------------------*/
4043 						  /* �ޥ������������ѹ� */
4044 static	int		mouse_mouse_widget_init_done;
4045 static	Q8tkWidget	*mouse_mouse_widget_sel;
4046 static	Q8tkWidget	*mouse_mouse_widget_sel_none;
4047 static	Q8tkWidget	*mouse_mouse_widget_sel_tenkey;
4048 static	Q8tkWidget	*mouse_mouse_widget_sel_key;
4049 static	Q8tkWidget	*mouse_mouse_widget_con;
4050 static	Q8tkWidget	*mouse_mouse_widget_con_con;
4051 
get_mouse_mouse_key_mode(void)4052 static	int	get_mouse_mouse_key_mode(void)
4053 {
4054     return mouse_key_mode;
4055 }
cb_mouse_mouse_key_mode(UNUSED_WIDGET,void * p)4056 static	void	cb_mouse_mouse_key_mode(UNUSED_WIDGET, void *p)
4057 {
4058     mouse_key_mode = (int)p;
4059 
4060     menu_mouse_mouse_setting();
4061 }
4062 
4063 static	Q8tkWidget	*mouse_swap_widget[2];
get_mouse_swap(void)4064 static	int	get_mouse_swap(void)
4065 {
4066     return mouse_swap_button;
4067 }
cb_mouse_swap(Q8tkWidget * widget,void * p)4068 static	void	cb_mouse_swap(Q8tkWidget *widget, void *p)
4069 {
4070     int key = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
4071 
4072     if (mouse_swap_button != key) {
4073 	mouse_swap_button = key;
4074 	if ((int)p >= 0) {
4075 	    q8tk_toggle_button_set_state(mouse_swap_widget[(int)p], -1);
4076 	}
4077     }
4078 }
4079 
get_mouse_sensitivity(void)4080 static	int	get_mouse_sensitivity(void)
4081 {
4082     return mouse_sensitivity;
4083 }
cb_mouse_sensitivity(Q8tkWidget * widget,UNUSED_PARM)4084 static	void	cb_mouse_sensitivity(Q8tkWidget *widget, UNUSED_PARM)
4085 {
4086     int val = Q8TK_ADJUSTMENT(widget)->value;
4087 
4088     mouse_sensitivity = val;
4089 }
4090 
get_mouse_mouse_key(int type)4091 static	int	get_mouse_mouse_key(int type)
4092 {
4093     return mouse_key_assign[ type ];
4094 }
cb_mouse_mouse_key(Q8tkWidget * widget,void * type)4095 static	void	cb_mouse_mouse_key(Q8tkWidget *widget, void *type)
4096 {
4097     int i;
4098     const t_keymap *q = keymap_assign;
4099     const char     *combo_str = q8tk_combo_get_text(widget);
4100 
4101     for (i=0; i<COUNTOF(keymap_assign); i++, q++) {
4102 	if (strcmp(q->str, combo_str) == 0) {
4103 	    mouse_key_assign[ (int)type ] = q->code;
4104 	    return;
4105 	}
4106     }
4107 }
4108 
4109 
menu_mouse_mouse(void)4110 static	Q8tkWidget	*menu_mouse_mouse(void)
4111 {
4112     int i;
4113     Q8tkWidget *hbox, *vbox;
4114 
4115     mouse_mouse_widget_init_done = FALSE;
4116 
4117     hbox = PACK_HBOX(NULL);
4118     {
4119 	{			/* ����������ƥ⡼�ɤ����� */
4120 	    vbox = PACK_VBOX(hbox);
4121 	    PACK_RADIO_BUTTONS(vbox,
4122 			       data_mouse_mouse_key_mode,
4123 			       COUNTOF(data_mouse_mouse_key_mode),
4124 			       get_mouse_mouse_key_mode(),
4125 			       cb_mouse_mouse_key_mode);
4126 
4127 	    for (i=0; i<5; i++) PACK_LABEL(vbox, "");	/* ����Ĵ���Υ��ߡ� */
4128 
4129 	    mouse_mouse_widget_sel = vbox;
4130 	}
4131 
4132 	{			/* ������������Բ� (��³��) */
4133 	    vbox = PACK_VBOX(hbox);
4134 
4135 	    PACK_LABEL(vbox, "");			/* ����Ĵ���Υ��ߡ� */
4136 
4137 	    PACK_LABEL(vbox, GET_LABEL(data_mouse, DATA_MOUSE_CONNECTING));
4138 
4139 	    for (i=0; i<6; i++) PACK_LABEL(vbox, "");	/* ����Ĵ���Υ��ߡ� */
4140 
4141 	    mouse_mouse_widget_con = vbox;
4142 	}
4143 
4144 	PACK_VSEP(hbox);	/* ���ڤ��� */
4145 
4146 	{			/* ����������� �ʤ��α����� */
4147 	    vbox = PACK_VBOX(hbox);
4148 
4149 	    PACK_LABEL(vbox, "");
4150 
4151 	    mouse_mouse_widget_sel_none = vbox;
4152 	}
4153 
4154 	{			/* ����������� �ƥ����α����� */
4155 	    vbox = PACK_VBOX(hbox);
4156 
4157 	    PACK_LABEL(vbox, "");
4158 
4159 	    mouse_swap_widget[0] =
4160 		PACK_CHECK_BUTTON(vbox,
4161 				  GET_LABEL(data_mouse, DATA_MOUSE_SWAP_MOUSE),
4162 				  get_mouse_swap(),
4163 				  cb_mouse_swap, (void*)1);
4164 
4165 	    mouse_mouse_widget_sel_tenkey = vbox;
4166 	}
4167 
4168 	{			/* ����������� Ǥ�դα����� */
4169 
4170 	    mouse_mouse_widget_sel_key =
4171 		PACK_KEY_ASSIGN(hbox,
4172 				data_mouse_mouse, COUNTOF(data_mouse_mouse),
4173 				get_mouse_mouse_key, cb_mouse_mouse_key);
4174 	}
4175 
4176 	{			/* ������������Բ� ������ */
4177 	    vbox = PACK_VBOX(hbox);
4178 
4179 	    PACK_LABEL(vbox, "");
4180 
4181 	    mouse_swap_widget[1] =
4182 		PACK_CHECK_BUTTON(vbox,
4183 				  GET_LABEL(data_mouse, DATA_MOUSE_SWAP_MOUSE),
4184 				  get_mouse_swap(),
4185 				  cb_mouse_swap, (void*)0);
4186 
4187 	    for (i=0; i<4; i++) PACK_LABEL(vbox, "");	/* ����Ĵ���Υ��ߡ� */
4188 
4189 	    {				/* �ޥ������� */
4190 		const t_volume *p = data_mouse_sensitivity;
4191 		Q8tkWidget *hbox2, *scale;
4192 
4193 		hbox2 = PACK_HBOX(vbox);
4194 		{
4195 		    PACK_LABEL(hbox2, GET_LABEL(p, 0));
4196 
4197 		    scale = PACK_HSCALE(hbox2,
4198 					 p,
4199 					 get_mouse_sensitivity(),
4200 					 cb_mouse_sensitivity, NULL);
4201 
4202 		    q8tk_adjustment_set_length(scale->stat.scale.adj, 20);
4203 		}
4204 	    }
4205 
4206 	    mouse_mouse_widget_con_con = vbox;
4207 	}
4208 
4209     }
4210 
4211     mouse_mouse_widget_init_done = TRUE;
4212     menu_mouse_mouse_setting();
4213 
4214     return hbox;
4215 }
4216 
menu_mouse_mouse_setting(void)4217 static	void	menu_mouse_mouse_setting(void)
4218 {
4219     if (mouse_mouse_widget_init_done == FALSE) return;
4220 
4221     if (mouse_mode == MOUSE_NONE ||		/* �ޥ����ϥݡ��Ȥ�̤��³ */
4222 	mouse_mode == MOUSE_JOYSTICK) {
4223 
4224 	q8tk_widget_show(mouse_mouse_widget_sel);
4225 	q8tk_widget_hide(mouse_mouse_widget_sel_none);
4226 	q8tk_widget_hide(mouse_mouse_widget_sel_tenkey);
4227 	q8tk_widget_hide(mouse_mouse_widget_sel_key);
4228 
4229 	switch (mouse_key_mode) {
4230 	case 0:   q8tk_widget_show(mouse_mouse_widget_sel_none);	break;
4231 	case 1:   q8tk_widget_show(mouse_mouse_widget_sel_tenkey);	break;
4232 	case 2:   q8tk_widget_show(mouse_mouse_widget_sel_key);		break;
4233 	}
4234 
4235 	q8tk_widget_hide(mouse_mouse_widget_con);
4236 	q8tk_widget_hide(mouse_mouse_widget_con_con);
4237 
4238     } else {					/* �ޥ����ϥݡ��Ȥ���³�� */
4239 	q8tk_widget_hide(mouse_mouse_widget_sel);
4240 	q8tk_widget_hide(mouse_mouse_widget_sel_none);
4241 	q8tk_widget_hide(mouse_mouse_widget_sel_tenkey);
4242 	q8tk_widget_hide(mouse_mouse_widget_sel_key);
4243 
4244 	q8tk_widget_show(mouse_mouse_widget_con);
4245 	q8tk_widget_hide(mouse_mouse_widget_con_con);
4246 
4247 	if (mouse_mode == MOUSE_JOYMOUSE) {
4248 	    q8tk_widget_show(mouse_mouse_widget_sel_tenkey);
4249 	} else {
4250 	    q8tk_widget_show(mouse_mouse_widget_con_con);
4251 	}
4252     }
4253 }
4254 
4255 /*----------------------------------------------------------------------*/
4256 					/* ���祤���ƥ��å����������ѹ� */
4257 static	int		mouse_joy_widget_init_done;
4258 static	Q8tkWidget	*mouse_joy_widget_sel;
4259 static	Q8tkWidget	*mouse_joy_widget_sel_none;
4260 static	Q8tkWidget	*mouse_joy_widget_sel_tenkey;
4261 static	Q8tkWidget	*mouse_joy_widget_sel_key;
4262 static	Q8tkWidget	*mouse_joy_widget_con;
4263 
get_mouse_joy_key_mode(void)4264 static	int	get_mouse_joy_key_mode(void)
4265 {
4266     return joy_key_mode;
4267 }
cb_mouse_joy_key_mode(UNUSED_WIDGET,void * p)4268 static	void	cb_mouse_joy_key_mode(UNUSED_WIDGET, void *p)
4269 {
4270     joy_key_mode = (int)p;
4271 
4272     menu_mouse_joy_setting();
4273 }
4274 
get_joy_swap(void)4275 static	int	get_joy_swap(void)
4276 {
4277     return joy_swap_button;
4278 }
cb_joy_swap(Q8tkWidget * widget,UNUSED_PARM)4279 static	void	cb_joy_swap(Q8tkWidget *widget, UNUSED_PARM)
4280 {
4281     int key = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
4282 
4283     joy_swap_button = key;
4284 }
4285 
get_mouse_joy_key(int type)4286 static	int	get_mouse_joy_key(int type)
4287 {
4288     return joy_key_assign[ type ];
4289 }
cb_mouse_joy_key(Q8tkWidget * widget,void * type)4290 static	void	cb_mouse_joy_key(Q8tkWidget *widget, void *type)
4291 {
4292     int i;
4293     const t_keymap *q = keymap_assign;
4294     const char     *combo_str = q8tk_combo_get_text(widget);
4295 
4296     for (i=0; i<COUNTOF(keymap_assign); i++, q++) {
4297 	if (strcmp(q->str, combo_str) == 0) {
4298 	    joy_key_assign[ (int)type ] = q->code;
4299 	    return;
4300 	}
4301     }
4302 }
4303 
4304 
menu_mouse_joy(void)4305 static	Q8tkWidget	*menu_mouse_joy(void)
4306 {
4307     int i;
4308     Q8tkWidget *hbox, *vbox;
4309 
4310     mouse_joy_widget_init_done = FALSE;
4311 
4312     hbox = PACK_HBOX(NULL);
4313     {
4314 	{			/* ����������ƥ⡼�ɤ����� */
4315 	    vbox = PACK_VBOX(hbox);
4316 	    PACK_RADIO_BUTTONS(vbox,
4317 			       data_mouse_joy_key_mode,
4318 			       COUNTOF(data_mouse_joy_key_mode),
4319 			       get_mouse_joy_key_mode(),
4320 			       cb_mouse_joy_key_mode);
4321 
4322 	    for (i=0; i<5; i++) PACK_LABEL(vbox, "");	/* ����Ĵ���Υ��ߡ� */
4323 
4324 	    mouse_joy_widget_sel = vbox;
4325 	}
4326 
4327 	{			/* ������������Բ� (��³��) */
4328 	    vbox = PACK_VBOX(hbox);
4329 
4330 	    PACK_LABEL(vbox, "");			/* ����Ĵ���Υ��ߡ� */
4331 
4332 	    PACK_LABEL(vbox, GET_LABEL(data_mouse, DATA_MOUSE_CONNECTING));
4333 
4334 	    for (i=0; i<6; i++) PACK_LABEL(vbox, "");	/* ����Ĵ���Υ��ߡ� */
4335 
4336 	    mouse_joy_widget_con = vbox;
4337 	}
4338 
4339 	PACK_VSEP(hbox);	/* ���ڤ��� */
4340 
4341 	{			/* ����������� �ʤ��α����� */
4342 	    vbox = PACK_VBOX(hbox);
4343 
4344 	    PACK_LABEL(vbox, "");
4345 
4346 	    mouse_joy_widget_sel_none = vbox;
4347 	}
4348 
4349 	{			/* ����������� �ƥ����α����� */
4350 	    vbox = PACK_VBOX(hbox);
4351 
4352 	    PACK_LABEL(vbox, "");
4353 
4354 	    PACK_CHECK_BUTTON(vbox,
4355 			      GET_LABEL(data_mouse, DATA_MOUSE_SWAP_JOY),
4356 			      get_joy_swap(),
4357 			      cb_joy_swap, NULL);
4358 
4359 	    mouse_joy_widget_sel_tenkey = vbox;
4360 	}
4361 
4362 	{			/* ����������� Ǥ�դα����� */
4363 
4364 	    mouse_joy_widget_sel_key =
4365 		PACK_KEY_ASSIGN(hbox,
4366 				data_mouse_joy, COUNTOF(data_mouse_joy),
4367 				get_mouse_joy_key, cb_mouse_joy_key);
4368 	}
4369     }
4370 
4371     mouse_joy_widget_init_done = TRUE;
4372     menu_mouse_joy_setting();
4373 
4374     return hbox;
4375 }
4376 
menu_mouse_joy_setting(void)4377 static	void	menu_mouse_joy_setting(void)
4378 {
4379     if (mouse_joy_widget_init_done == FALSE) return;
4380 
4381     if (mouse_mode == MOUSE_NONE ||	/* ���祤���ƥ��å��ϥݡ��Ȥ�̤��³ */
4382 	mouse_mode == MOUSE_MOUSE ||
4383 	mouse_mode == MOUSE_JOYMOUSE) {
4384 
4385 	q8tk_widget_show(mouse_joy_widget_sel);
4386 	q8tk_widget_hide(mouse_joy_widget_sel_none);
4387 	q8tk_widget_hide(mouse_joy_widget_sel_tenkey);
4388 	q8tk_widget_hide(mouse_joy_widget_sel_key);
4389 
4390 	switch (joy_key_mode) {
4391 	case 0:   q8tk_widget_show(mouse_joy_widget_sel_none);		break;
4392 	case 1:   q8tk_widget_show(mouse_joy_widget_sel_tenkey);	break;
4393 	case 2:   q8tk_widget_show(mouse_joy_widget_sel_key);		break;
4394 	}
4395 
4396 	q8tk_widget_hide(mouse_joy_widget_con);
4397 
4398     } else {				/* ���祤���ƥ��å��ϥݡ��Ȥ���³�� */
4399 	q8tk_widget_hide(mouse_joy_widget_sel);
4400 	q8tk_widget_hide(mouse_joy_widget_sel_none);
4401 	q8tk_widget_show(mouse_joy_widget_sel_tenkey);
4402 	q8tk_widget_hide(mouse_joy_widget_sel_key);
4403 
4404 	q8tk_widget_show(mouse_joy_widget_con);
4405     }
4406 }
4407 
4408 /*----------------------------------------------------------------------*/
4409 				      /* ���祤���ƥ��å������������ѹ� */
4410 static	int		mouse_joy2_widget_init_done;
4411 static	Q8tkWidget	*mouse_joy2_widget_sel;
4412 static	Q8tkWidget	*mouse_joy2_widget_sel_none;
4413 static	Q8tkWidget	*mouse_joy2_widget_sel_tenkey;
4414 static	Q8tkWidget	*mouse_joy2_widget_sel_key;
4415 
get_mouse_joy2_key_mode(void)4416 static	int	get_mouse_joy2_key_mode(void)
4417 {
4418     return joy2_key_mode;
4419 }
cb_mouse_joy2_key_mode(UNUSED_WIDGET,void * p)4420 static	void	cb_mouse_joy2_key_mode(UNUSED_WIDGET, void *p)
4421 {
4422     joy2_key_mode = (int)p;
4423 
4424     menu_mouse_joy2_setting();
4425 }
4426 
get_joy2_swap(void)4427 static	int	get_joy2_swap(void)
4428 {
4429     return joy2_swap_button;
4430 }
cb_joy2_swap(Q8tkWidget * widget,UNUSED_PARM)4431 static	void	cb_joy2_swap(Q8tkWidget *widget, UNUSED_PARM)
4432 {
4433     int key = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
4434 
4435     joy2_swap_button = key;
4436 }
4437 
get_mouse_joy2_key(int type)4438 static	int	get_mouse_joy2_key(int type)
4439 {
4440     return joy2_key_assign[ type ];
4441 }
cb_mouse_joy2_key(Q8tkWidget * widget,void * type)4442 static	void	cb_mouse_joy2_key(Q8tkWidget *widget, void *type)
4443 {
4444     int i;
4445     const t_keymap *q = keymap_assign;
4446     const char     *combo_str = q8tk_combo_get_text(widget);
4447 
4448     for (i=0; i<COUNTOF(keymap_assign); i++, q++) {
4449 	if (strcmp(q->str, combo_str) == 0) {
4450 	    joy2_key_assign[ (int)type ] = q->code;
4451 	    return;
4452 	}
4453     }
4454 }
4455 
4456 
menu_mouse_joy2(void)4457 static	Q8tkWidget	*menu_mouse_joy2(void)
4458 {
4459     int i;
4460     Q8tkWidget *hbox, *vbox;
4461 
4462     mouse_joy2_widget_init_done = FALSE;
4463 
4464     hbox = PACK_HBOX(NULL);
4465     {
4466 	{			/* ����������ƥ⡼�ɤ����� */
4467 	    vbox = PACK_VBOX(hbox);
4468 	    PACK_RADIO_BUTTONS(vbox,
4469 			       data_mouse_joy2_key_mode,
4470 			       COUNTOF(data_mouse_joy2_key_mode),
4471 			       get_mouse_joy2_key_mode(),
4472 			       cb_mouse_joy2_key_mode);
4473 
4474 	    for (i=0; i<5; i++) PACK_LABEL(vbox, "");	/* ����Ĵ���Υ��ߡ� */
4475 
4476 	    mouse_joy2_widget_sel = vbox;
4477 	}
4478 
4479 	PACK_VSEP(hbox);	/* ���ڤ��� */
4480 
4481 	{			/* ����������� �ʤ��α����� */
4482 	    vbox = PACK_VBOX(hbox);
4483 
4484 	    PACK_LABEL(vbox, "");
4485 
4486 	    mouse_joy2_widget_sel_none = vbox;
4487 	}
4488 
4489 	{			/* ����������� �ƥ����α����� */
4490 	    vbox = PACK_VBOX(hbox);
4491 
4492 	    PACK_LABEL(vbox, "");
4493 
4494 	    PACK_CHECK_BUTTON(vbox,
4495 			      GET_LABEL(data_mouse, DATA_MOUSE_SWAP_JOY2),
4496 			      get_joy2_swap(),
4497 			      cb_joy2_swap, NULL);
4498 
4499 	    mouse_joy2_widget_sel_tenkey = vbox;
4500 	}
4501 
4502 	{			/* ����������� Ǥ�դα����� */
4503 	    mouse_joy2_widget_sel_key =
4504 		PACK_KEY_ASSIGN(hbox,
4505 				data_mouse_joy2, COUNTOF(data_mouse_joy2),
4506 				get_mouse_joy2_key, cb_mouse_joy2_key);
4507 	}
4508     }
4509 
4510     mouse_joy2_widget_init_done = TRUE;
4511     menu_mouse_joy2_setting();
4512 
4513     return hbox;
4514 }
4515 
menu_mouse_joy2_setting(void)4516 static	void	menu_mouse_joy2_setting(void)
4517 {
4518     if (mouse_joy2_widget_init_done == FALSE) return;
4519 
4520     {
4521 	q8tk_widget_show(mouse_joy2_widget_sel);
4522 	q8tk_widget_hide(mouse_joy2_widget_sel_none);
4523 	q8tk_widget_hide(mouse_joy2_widget_sel_tenkey);
4524 	q8tk_widget_hide(mouse_joy2_widget_sel_key);
4525 
4526 	switch (joy2_key_mode) {
4527 	case 0:   q8tk_widget_show(mouse_joy2_widget_sel_none);		break;
4528 	case 1:   q8tk_widget_show(mouse_joy2_widget_sel_tenkey);	break;
4529 	case 2:   q8tk_widget_show(mouse_joy2_widget_sel_key);		break;
4530 	}
4531     }
4532 }
4533 
4534 /*----------------------------------------------------------------------*/
4535 				      /* �ޥ��������祤�����ѹ��ˤĤ��� */
menu_mouse_about(void)4536 static	Q8tkWidget	*menu_mouse_about(void)
4537 {
4538     Q8tkWidget *vbox;
4539     char wk[128];
4540     int joy_num = event_get_joystick_num();
4541 
4542     vbox = PACK_VBOX(NULL);
4543     {
4544 	sprintf(wk, GET_LABEL(data_mouse, DATA_MOUSE_DEVICE_NUM), joy_num);
4545 
4546 	/* �Ρ��ȥ֥å��Υ����������줹�뤿��ˡ��������ܰ��դΥ���������� */
4547 	PACK_LABEL(vbox, "                                                                          ");
4548 	PACK_LABEL(vbox, wk);
4549     }
4550     return vbox;
4551 }
4552 
4553 /*----------------------------------------------------------------------*/
4554 static	int	menu_mouse_last_page = 0;	/* ������Υ������� */
cb_mouse_notebook_changed(Q8tkWidget * widget,UNUSED_PARM)4555 static	void	cb_mouse_notebook_changed(Q8tkWidget *widget, UNUSED_PARM)
4556 {
4557     menu_mouse_last_page = q8tk_notebook_current_page(widget);
4558 }
4559 
menu_mouse_device(void)4560 static	Q8tkWidget	*menu_mouse_device(void)
4561 {
4562     Q8tkWidget *notebook, *w;
4563 
4564     notebook = q8tk_notebook_new();
4565     {
4566 	w = menu_mouse_mouse();
4567 	q8tk_notebook_append(notebook, w,
4568 			     GET_LABEL(data_mouse, DATA_MOUSE_DEVICE_MOUSE));
4569 
4570 	w = menu_mouse_joy();
4571 	q8tk_notebook_append(notebook, w,
4572 			     GET_LABEL(data_mouse, DATA_MOUSE_DEVICE_JOY));
4573 
4574 	w = menu_mouse_joy2();
4575 	q8tk_notebook_append(notebook, w,
4576 			     GET_LABEL(data_mouse, DATA_MOUSE_DEVICE_JOY2));
4577 
4578 	w = menu_mouse_about();
4579 	q8tk_notebook_append(notebook, w,
4580 			     GET_LABEL(data_mouse, DATA_MOUSE_DEVICE_ABOUT));
4581     }
4582 
4583     q8tk_notebook_set_page(notebook, menu_mouse_last_page);
4584 
4585     q8tk_signal_connect(notebook, "switch_page",
4586 			cb_mouse_notebook_changed, NULL);
4587     q8tk_widget_show(notebook);
4588 
4589     return notebook;
4590 }
4591 
4592 /*----------------------------------------------------------------------*/
4593 						      /* �Ƽ�������ѹ� */
4594 
4595 /* �ǥХå��ѡ����ޥ���������ȹ礻���� */
get_mouse_debug_hide(void)4596 static int  get_mouse_debug_hide(void) { return hide_mouse; }
get_mouse_debug_grab(void)4597 static int  get_mouse_debug_grab(void) { return grab_mouse; }
cb_mouse_debug_hide(UNUSED_WIDGET,void * p)4598 static void cb_mouse_debug_hide(UNUSED_WIDGET, void *p) { hide_mouse = (int)p;}
cb_mouse_debug_grab(UNUSED_WIDGET,void * p)4599 static void cb_mouse_debug_grab(UNUSED_WIDGET, void *p) { grab_mouse = (int)p;}
4600 
menu_mouse_debug(void)4601 static	Q8tkWidget	*menu_mouse_debug(void)
4602 {
4603     Q8tkWidget *hbox, *hbox2;
4604 
4605     hbox = PACK_HBOX(NULL);
4606     {
4607 	hbox2 = PACK_HBOX(hbox);
4608 	{
4609 	    PACK_RADIO_BUTTONS(hbox2,
4610 			data_mouse_debug_hide, COUNTOF(data_mouse_debug_hide),
4611 			get_mouse_debug_hide(), cb_mouse_debug_hide);
4612 	}
4613 	PACK_VSEP(hbox);	/* ���ڤ��� */
4614 	PACK_VSEP(hbox);	/* ���ڤ��� */
4615 	hbox2 = PACK_HBOX(hbox);
4616 	{
4617 	    PACK_RADIO_BUTTONS(hbox2,
4618 			data_mouse_debug_grab, COUNTOF(data_mouse_debug_grab),
4619 			get_mouse_debug_grab(), cb_mouse_debug_grab);
4620 	}
4621     }
4622     return hbox;
4623 }
4624 
4625 
4626 
get_mouse_misc(void)4627 static	int	get_mouse_misc(void)
4628 {
4629     if      (grab_mouse == AUTO_MOUSE) return -2;
4630     else if (grab_mouse == GRAB_MOUSE) return -1;
4631     else                               return hide_mouse;
4632 }
cb_mouse_misc(Q8tkWidget * widget,UNUSED_PARM)4633 static	void	cb_mouse_misc(Q8tkWidget *widget, UNUSED_PARM)
4634 {
4635     int i;
4636     const t_menudata *p = data_mouse_misc;
4637     const char       *combo_str = q8tk_combo_get_text(widget);
4638 
4639     for (i=0; i<COUNTOF(data_mouse_misc); i++, p++) {
4640 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
4641 	    if (p->val == -2) {
4642 		grab_mouse = AUTO_MOUSE;
4643 		hide_mouse = SHOW_MOUSE;
4644 	    } else if (p->val == -1) {
4645 		grab_mouse = GRAB_MOUSE;
4646 		/* hide_mouse = HIDE_MOUSE; */ /* ������ݻ����� */
4647 	    } else {
4648 		grab_mouse = UNGRAB_MOUSE;
4649 		hide_mouse = p->val;
4650 	    }
4651 	    return;
4652 	}
4653     }
4654 }
4655 
4656 
menu_mouse_misc(void)4657 static	Q8tkWidget	*menu_mouse_misc(void)
4658 {
4659     Q8tkWidget *vbox, *hbox;
4660 
4661 
4662     vbox = PACK_VBOX(NULL);
4663     {
4664 	if (screen_attr_mouse_debug() == FALSE) {	/* �̾�� */
4665 	    hbox  = PACK_HBOX(vbox);
4666 	    {
4667 		PACK_LABEL(hbox, GET_LABEL(data_mouse_misc_msg, 0));
4668 
4669 		PACK_COMBO(hbox,
4670 			   data_mouse_misc, COUNTOF(data_mouse_misc),
4671 			   get_mouse_misc(), NULL, 0,
4672 			   cb_mouse_misc, NULL,
4673 			   NULL, NULL);
4674 	    }
4675 	} else {					/* �ǥХå��� */
4676 	    q8tk_box_pack_start(vbox, menu_mouse_debug());
4677 	}
4678     }
4679 
4680     return vbox;
4681 }
4682 
4683 /*----------------------------------------------------------------------*/
4684 
menu_mouse(void)4685 static	Q8tkWidget	*menu_mouse(void)
4686 {
4687     Q8tkWidget *vbox, *hbox, *vbox2, *w;
4688     const t_menulabel *l = data_mouse;
4689 
4690 
4691     vbox = PACK_VBOX(NULL);
4692     {
4693 	hbox = PACK_HBOX(vbox);
4694 	{
4695 	    PACK_FRAME(hbox,
4696 		       GET_LABEL(l, DATA_MOUSE_MODE),   menu_mouse_mode());
4697 	    PACK_FRAME(hbox,
4698 		       GET_LABEL(l, DATA_MOUSE_SERIAL), menu_mouse_serial());
4699 	}
4700 
4701 	PACK_LABEL(vbox, "");			/* ���� */
4702 	PACK_LABEL(vbox, GET_LABEL(l, DATA_MOUSE_SYSTEM));
4703 
4704 	vbox2 = PACK_VBOX(vbox);
4705 	{
4706 	    w = menu_mouse_device();
4707 	    q8tk_box_pack_start(vbox2, w);
4708 	    q8tk_misc_set_placement(w, Q8TK_PLACEMENT_X_RIGHT, 0);
4709 
4710 	    w = menu_mouse_misc();
4711 	    q8tk_box_pack_start(vbox2, w);
4712 	    q8tk_misc_set_placement(w, Q8TK_PLACEMENT_X_RIGHT, 0);
4713 	}
4714     }
4715 
4716     return vbox;
4717 }
4718 
4719 
4720 
4721 /*===========================================================================
4722  *
4723  *	�ᥤ��ڡ���	�ơ���
4724  *
4725  *===========================================================================*/
4726 
4727 /*----------------------------------------------------------------------*/
4728 				      /* ���ɥ��᡼���������֥��᡼�� */
4729 int			tape_mode;
4730 static	char		tape_filename[ QUASI88_MAX_FILENAME ];
4731 
4732 static	Q8tkWidget	*tape_name[2];
4733 static	Q8tkWidget	*tape_rate[2];
4734 
4735 static	Q8tkWidget	*tape_button_eject[2];
4736 static	Q8tkWidget	*tape_button_rew;
4737 
4738 /*----------------------------------------------------------------------*/
set_tape_name(int c)4739 static	void	set_tape_name(int c)
4740 {
4741     const char *p = filename_get_tape(c);
4742 
4743     q8tk_entry_set_text(tape_name[ c ], (p ? p : "(No File)"));
4744 }
set_tape_rate(int c)4745 static	void	set_tape_rate(int c)
4746 {
4747     char buf[16];
4748     long cur, end;
4749 
4750     if (c == CLOAD) {
4751 
4752 	if (sio_tape_pos(&cur, &end)) {
4753 	    if (end == 0) {
4754 		sprintf(buf, "   END ");
4755 	    } else {
4756 		sprintf(buf, "   %3ld%%", cur * 100 / end);
4757 	    }
4758 	} else {
4759 	    sprintf(buf, "   ---%%");
4760 	}
4761 
4762 	q8tk_label_set(tape_rate[ c ], buf);
4763     }
4764 }
4765 
4766 
4767 /*----------------------------------------------------------------------*/
4768 /* ��EJECT�ץܥ��������ν���						*/
4769 
cb_tape_eject_do(UNUSED_WIDGET,void * c)4770 static	void	cb_tape_eject_do(UNUSED_WIDGET, void *c)
4771 {
4772     if ((int)c == CLOAD) {
4773 	quasi88_load_tape_eject();
4774     } else {
4775 	quasi88_save_tape_eject();
4776     }
4777 
4778     set_tape_name((int)c);
4779     set_tape_rate((int)c);
4780 
4781     q8tk_widget_set_sensitive(tape_button_eject[(int)c], FALSE);
4782     if ((int)c == CLOAD) {
4783 	q8tk_widget_set_sensitive(tape_button_rew, FALSE);
4784     }
4785     q8tk_widget_set_focus(NULL);
4786 }
4787 
4788 /*----------------------------------------------------------------------*/
4789 /* ��REW�ץܥ��������ν���						*/
4790 
cb_tape_rew_do(UNUSED_WIDGET,void * c)4791 static	void	cb_tape_rew_do(UNUSED_WIDGET, void *c)
4792 {
4793     if ((int)c == CLOAD) {
4794 					/* ���᡼�������᤹ */
4795 	if (quasi88_load_tape_rewind()) {			/* ���� */
4796 	    ;
4797 	} else {						/* ���� */
4798 	    set_tape_name((int)c);
4799 	}
4800 	set_tape_rate((int)c);
4801     }
4802 }
4803 
4804 /*----------------------------------------------------------------------*/
4805 /* ��OPEN�ץܥ��������ν���						*/
4806 
4807 static	void	sub_tape_open(void);
4808 static	void	sub_tape_open_do(void);
4809 static	void	cb_tape_open_warn_clicked(Q8tkWidget *, void *);
4810 
cb_tape_open(UNUSED_WIDGET,void * c)4811 static	void	cb_tape_open(UNUSED_WIDGET, void *c)
4812 {
4813     const char *initial;
4814     const t_menulabel *l = ((int)c == CLOAD) ? data_tape_load : data_tape_save;
4815 
4816 				/* ��������������ե����륻�쥯������ */
4817     tape_mode = (int)c;		/* LOAD�� �� SAVE�Ѥ� ��Ф��Ƥ���      */
4818 
4819     initial = filename_get_tape_or_dir(tape_mode);
4820 
4821     START_FILE_SELECTION(GET_LABEL(l, DATA_TAPE_FSEL),
4822 			 -1,	/* ReadOnly ��������Բ� */
4823 			 initial,
4824 
4825 			 sub_tape_open,
4826 			 tape_filename,
4827 			 QUASI88_MAX_FILENAME,
4828 			 NULL);
4829 }
4830 
sub_tape_open(void)4831 static	void	sub_tape_open(void)
4832 {
4833     const t_menulabel *l = data_tape_save;
4834 
4835     switch (osd_file_stat(tape_filename)) {
4836 
4837     case FILE_STAT_NOEXIST:
4838 	if (tape_mode == CLOAD) {		/* �ե�����̵���Τǥ��顼   */
4839 	    start_file_error_dialog(-1, ERR_CANT_OPEN);
4840 	} else {				/* �ե�����̵���Τǿ������� */
4841 	    sub_tape_open_do();
4842 	}
4843 	break;
4844 
4845     case FILE_STAT_DIR:
4846 	/* �ǥ��쥯�ȥ�ʤΤǡ������������ */
4847 	start_file_error_dialog(-1, ERR_CANT_OPEN);
4848 	break;
4849 
4850     default:
4851 	if (tape_mode == CSAVE) {
4852 	    /* ���Ǥ˥ե����뤬¸�ߤ��ޤ������᡼�����ɵ����ޤ����� */
4853 	    dialog_create();
4854 	    {
4855 		dialog_set_title(GET_LABEL(l, DATA_TAPE_WARN_0));
4856 
4857 		dialog_set_title(GET_LABEL(l, DATA_TAPE_WARN_1));
4858 
4859 		dialog_set_separator();
4860 
4861 		dialog_set_button(GET_LABEL(l, DATA_TAPE_WARN_APPEND),
4862 				  cb_tape_open_warn_clicked, (void*)TRUE);
4863 
4864 		dialog_set_button(GET_LABEL(l, DATA_TAPE_WARN_CANCEL),
4865 				  cb_tape_open_warn_clicked, (void*)FALSE);
4866 
4867 		dialog_accel_key(Q8TK_KEY_ESC);
4868 	    }
4869 	    dialog_start();
4870 	} else {
4871 	    sub_tape_open_do();
4872 	}
4873 	break;
4874     }
4875 }
4876 
sub_tape_open_do(void)4877 static	void	sub_tape_open_do(void)
4878 {
4879     int result, c = tape_mode;
4880 
4881     if (c == CLOAD) {			/* �ơ��פ��� */
4882 	result = quasi88_load_tape_insert(tape_filename);
4883     } else {
4884 	result = quasi88_save_tape_insert(tape_filename);
4885     }
4886 
4887     set_tape_name(c);
4888     set_tape_rate(c);
4889 
4890 
4891     if (result == FALSE) {
4892 	start_file_error_dialog(-1, ERR_CANT_OPEN);
4893     }
4894 
4895     q8tk_widget_set_sensitive(tape_button_eject[(int)c], (result ?TRUE :FALSE));
4896     if ((int)c == CLOAD) {
4897 	q8tk_widget_set_sensitive(tape_button_rew, (result ?TRUE :FALSE));
4898     }
4899 }
4900 
cb_tape_open_warn_clicked(UNUSED_WIDGET,void * p)4901 static	void	cb_tape_open_warn_clicked(UNUSED_WIDGET, void *p)
4902 {
4903     dialog_destroy();
4904 
4905     if ((int)p) {
4906 	sub_tape_open_do();
4907     }
4908 }
4909 
4910 
4911 
4912 
4913 /*----------------------------------------------------------------------*/
4914 
menu_tape_image_unit(const t_menulabel * l,int c)4915 INLINE	Q8tkWidget	*menu_tape_image_unit(const t_menulabel *l, int c)
4916 {
4917     int save_code;
4918     Q8tkWidget *vbox, *hbox, *w, *e;
4919 
4920     vbox = PACK_VBOX(NULL);
4921     {
4922 	hbox = PACK_HBOX(vbox);
4923 	{
4924 	    w = PACK_LABEL(hbox, GET_LABEL(l, DATA_TAPE_FOR));
4925 	    q8tk_misc_set_placement(w, Q8TK_PLACEMENT_X_CENTER,
4926 				       Q8TK_PLACEMENT_Y_CENTER);
4927 
4928 	    {
4929 		save_code = q8tk_set_kanjicode(osd_kanji_code());
4930 
4931 		e = PACK_ENTRY(hbox,
4932 			       QUASI88_MAX_FILENAME, 65, NULL,
4933 			       NULL, NULL, NULL, NULL);
4934 		q8tk_entry_set_editable(e, FALSE);
4935 
4936 		tape_name[ c ] = e;
4937 		set_tape_name(c);
4938 
4939 		q8tk_set_kanjicode(save_code);
4940 	    }
4941 	}
4942 
4943 	hbox = PACK_HBOX(vbox);
4944 	{
4945 	    PACK_BUTTON(hbox,
4946 			GET_LABEL(l, DATA_TAPE_CHANGE),
4947 			cb_tape_open, (void*)c);
4948 
4949 	    PACK_VSEP(hbox);
4950 
4951 	    tape_button_eject[c] = PACK_BUTTON(hbox,
4952 					       GET_LABEL(l, DATA_TAPE_EJECT),
4953 					       cb_tape_eject_do, (void*)c);
4954 
4955 	    if (c == CLOAD) {
4956 		tape_button_rew = PACK_BUTTON(hbox,
4957 					      GET_LABEL(l, DATA_TAPE_REWIND),
4958 					      cb_tape_rew_do, (void*)c);
4959 	    }
4960 	    if (c == CLOAD) {
4961 		w = PACK_LABEL(hbox, "");
4962 		q8tk_misc_set_placement(w, Q8TK_PLACEMENT_X_CENTER,
4963 					   Q8TK_PLACEMENT_Y_CENTER);
4964 		tape_rate[ c ] = w;
4965 		set_tape_rate(c);
4966 	    }
4967 
4968 	    if (c == CLOAD) {
4969 		if (tape_readable() == FALSE) {
4970 		    q8tk_widget_set_sensitive(tape_button_eject[c], FALSE);
4971 		    q8tk_widget_set_sensitive(tape_button_rew, FALSE);
4972 		}
4973 	    } else {
4974 		if (tape_writable() == FALSE) {
4975 		    q8tk_widget_set_sensitive(tape_button_eject[c], FALSE);
4976 		}
4977 	    }
4978 	}
4979     }
4980 
4981     return vbox;
4982 }
4983 
menu_tape_image(void)4984 static	Q8tkWidget	*menu_tape_image(void)
4985 {
4986     Q8tkWidget *vbox;
4987 
4988     vbox = PACK_VBOX(NULL);
4989     {
4990 	q8tk_box_pack_start(vbox, menu_tape_image_unit(data_tape_load, CLOAD));
4991 
4992 	PACK_HSEP(vbox);
4993 
4994 	q8tk_box_pack_start(vbox, menu_tape_image_unit(data_tape_save, CSAVE));
4995     }
4996 
4997     return vbox;
4998 }
4999 
5000 /*----------------------------------------------------------------------*/
5001 					    /* �ơ��׽����⡼���ڤ��ؤ� */
get_tape_intr(void)5002 static	int	get_tape_intr(void)
5003 {
5004     return cmt_intr;
5005 }
cb_tape_intr(UNUSED_WIDGET,void * p)5006 static	void	cb_tape_intr(UNUSED_WIDGET, void *p)
5007 {
5008     cmt_intr = (int)p;
5009 }
5010 
5011 
menu_tape_intr(void)5012 static	Q8tkWidget	*menu_tape_intr(void)
5013 {
5014     Q8tkWidget *vbox;
5015 
5016     vbox = PACK_VBOX(NULL);
5017     {
5018 	PACK_RADIO_BUTTONS(vbox,
5019 			   data_tape_intr, COUNTOF(data_tape_intr),
5020 			   get_tape_intr(), cb_tape_intr);
5021     }
5022 
5023     return vbox;
5024 }
5025 
5026 /*======================================================================*/
5027 
menu_tape(void)5028 static	Q8tkWidget	*menu_tape(void)
5029 {
5030     Q8tkWidget *vbox;
5031     const t_menulabel *l = data_tape;
5032 
5033     vbox = PACK_VBOX(NULL);
5034     {
5035 	PACK_FRAME(vbox, GET_LABEL(l, DATA_TAPE_IMAGE), menu_tape_image());
5036 
5037 	PACK_FRAME(vbox, GET_LABEL(l, DATA_TAPE_INTR), menu_tape_intr());
5038     }
5039 
5040     return vbox;
5041 }
5042 
5043 
5044 
5045 /*===========================================================================
5046  *
5047  *	�ᥤ��ڡ���	����¾
5048  *
5049  *===========================================================================*/
5050 
5051 /*----------------------------------------------------------------------*/
5052 							  /* �����ڥ�� */
5053 
5054 static	Q8tkWidget	*misc_suspend_entry;
5055 static	Q8tkWidget	*misc_suspend_combo;
5056 
5057 static	char		state_filename[ QUASI88_MAX_FILENAME ];
5058 
5059 
5060 /*	�����ڥ�ɻ��Υ�å���������������ä�			  */
cb_misc_suspend_dialog_ok(UNUSED_WIDGET,void * result)5061 static	void	cb_misc_suspend_dialog_ok(UNUSED_WIDGET, void *result)
5062 {
5063     dialog_destroy();
5064 
5065     if ((int)result == DATA_MISC_RESUME_OK ||
5066 	(int)result == DATA_MISC_RESUME_ERR) {
5067 	quasi88_exec();		/* �� q8tk_main_quit() �ƽкѤ� */
5068     }
5069 }
5070 
5071 /*	�����ڥ�ɼ¹Ը�Υ�å�������������				  */
sub_misc_suspend_dialog(int result)5072 static	void	sub_misc_suspend_dialog(int result)
5073 {
5074     const t_menulabel *l = data_misc_suspend_err;
5075     char filename[60 +11 +1];	/* 11 == strlen("[DRIVE 1:] "), 1 �� '\0' */
5076     int save_code;
5077     int i, width, len;
5078     const char *ptr[4];
5079     const char *none = "(No Image File)";
5080     const char *dev[] = { "[DRIVE 1:]", "[DRIVE 2:]",
5081 			  "[TapeLOAD]", "[TapeSAVE]", };
5082 
5083     dialog_create();
5084     {
5085 	dialog_set_title(GET_LABEL(l, result));	/* ���ɽ�� */
5086 
5087 	if (result == DATA_MISC_SUSPEND_OK ||	/* �������ϥ��᡼��̾ɽ�� */
5088 	    result == DATA_MISC_RESUME_OK) {
5089 
5090 	    dialog_set_title(GET_LABEL(l, DATA_MISC_SUSPEND_LINE));
5091 	    dialog_set_title(GET_LABEL(l, DATA_MISC_SUSPEND_INFO));
5092 
5093 	    save_code = q8tk_set_kanjicode(osd_kanji_code());
5094 
5095 	    width = 0;
5096 	    for (i=0; i<4; i++) {
5097 		if (i<2) {
5098 		    if ((ptr[i] = filename_get_disk(i)) == NULL) ptr[i] = none;
5099 		} else {
5100 		    if ((ptr[i] = filename_get_tape(i-2))==NULL) ptr[i] = none;
5101 		}
5102 		len = sprintf(filename, "%.60s", ptr[i]);	/* == max 60 */
5103 		width = MAX(width, len);
5104 	    }
5105 
5106 	    for (i=0; i<4; i++) {
5107 		sprintf(filename, "%s %-*.*s", dev[i], width, width, ptr[i]);
5108 		dialog_set_title(filename);
5109 	    }
5110 
5111 	    q8tk_set_kanjicode(save_code);
5112 	}
5113 
5114 	dialog_set_separator();
5115 
5116 	dialog_set_button(GET_LABEL(l, DATA_MISC_SUSPEND_AGREE),
5117 			  cb_misc_suspend_dialog_ok, (void*)result);
5118 
5119 	dialog_accel_key(Q8TK_KEY_ESC);
5120     }
5121     dialog_start();
5122 }
5123 
5124 /*	�쥸�塼��¹����Υ�å�������������				  */
sub_misc_suspend_not_access(void)5125 static	void	sub_misc_suspend_not_access(void)
5126 {
5127     const t_menulabel *l = data_misc_suspend_err;
5128 
5129     dialog_create();
5130     {
5131 	dialog_set_title(GET_LABEL(l, DATA_MISC_RESUME_CANTOPEN));
5132 
5133 	dialog_set_separator();
5134 
5135 	dialog_set_button(GET_LABEL(l, DATA_MISC_SUSPEND_AGREE),
5136 			  cb_misc_suspend_dialog_ok,
5137 			  (void*)DATA_MISC_SUSPEND_AGREE);
5138 
5139 	dialog_accel_key(Q8TK_KEY_ESC);
5140     }
5141     dialog_start();
5142 }
5143 
5144 /*	�����ڥ�ɼ¹����Υ�å�������������				  */
5145 static	void	cb_misc_suspend_overwrite(UNUSED_WIDGET, UNUSED_PARM);
sub_misc_suspend_really(void)5146 static	void	sub_misc_suspend_really(void)
5147 {
5148     const t_menulabel *l = data_misc_suspend_err;
5149 
5150     dialog_create();
5151     {
5152 	dialog_set_title(GET_LABEL(l, DATA_MISC_SUSPEND_REALLY));
5153 
5154 	dialog_set_separator();
5155 
5156 	dialog_set_button(GET_LABEL(l, DATA_MISC_SUSPEND_OVERWRITE),
5157 			  cb_misc_suspend_overwrite, NULL);
5158 	dialog_set_button(GET_LABEL(l, DATA_MISC_SUSPEND_CANCEL),
5159 			  cb_misc_suspend_dialog_ok,
5160 			  (void*)DATA_MISC_SUSPEND_CANCEL);
5161 
5162 	dialog_accel_key(Q8TK_KEY_ESC);
5163     }
5164     dialog_start();
5165 }
5166 
cb_misc_suspend_overwrite(UNUSED_WIDGET,UNUSED_PARM)5167 static	void	cb_misc_suspend_overwrite(UNUSED_WIDGET, UNUSED_PARM)
5168 {
5169     dialog_destroy();
5170     {
5171 	if (quasi88_statesave(-1)) {
5172 	    sub_misc_suspend_dialog(DATA_MISC_SUSPEND_OK);	/* ���� */
5173 	} else {
5174 	    sub_misc_suspend_dialog(DATA_MISC_SUSPEND_ERR);	/* ���� */
5175 	}
5176     }
5177 }
5178 
5179 /*----------------------------------------------------------------------*/
5180 /*	�����ڥ�ɽ��� (�֥����֡ץ���å���)				*/
cb_misc_suspend_save(UNUSED_WIDGET,UNUSED_PARM)5181 static	void	cb_misc_suspend_save(UNUSED_WIDGET, UNUSED_PARM)
5182 {
5183 #if 0	/* �������������ǧ���Ƥ���ΤϤ������� */
5184     if (statesave_check_file_exist()) {			/* �ե����뤢�� */
5185 	sub_misc_suspend_really();
5186     } else
5187 #endif
5188     {
5189 	if (quasi88_statesave(-1)) {
5190 	    sub_misc_suspend_dialog(DATA_MISC_SUSPEND_OK);	/* ���� */
5191 	} else {
5192 	    sub_misc_suspend_dialog(DATA_MISC_SUSPEND_ERR);	/* ���� */
5193 	}
5194     }
5195 }
5196 
5197 /*----------------------------------------------------------------------*/
5198 /*	�����ڥ�ɽ��� (�֥��ɡץ���å���)				*/
cb_misc_suspend_load(UNUSED_WIDGET,UNUSED_PARM)5199 static	void	cb_misc_suspend_load(UNUSED_WIDGET, UNUSED_PARM)
5200 {
5201     if (stateload_check_file_exist() == FALSE) {	/* �ե�����ʤ� */
5202 	sub_misc_suspend_not_access();
5203     } else {
5204 	if (quasi88_stateload(-1)) {
5205 	    sub_misc_suspend_dialog(DATA_MISC_RESUME_OK);	/* ���� */
5206 	} else {
5207 	    sub_misc_suspend_dialog(DATA_MISC_RESUME_ERR);	/* ���� */
5208 	}
5209     }
5210 }
5211 
5212 /*----------------------------------------------------------------------*/
5213 /*	�ե�����̾���ѹ�������ȥ꡼ changed (����)���˸ƤФ�롣       */
5214 /*		(�ե����륻�쥯�����Ǥ��ѹ����Ϥ���ϸƤФ�ʤ�)      */
5215 
sub_misc_suspend_combo_update(void)5216 static void sub_misc_suspend_combo_update(void)
5217 {
5218     int i;
5219     char buf[4];
5220 				/* ���ơ��ȥե������Ϣ�֤˱����ƥ�����ѹ� */
5221     i = filename_get_state_serial();
5222     if ('0' <= i && i <= '9') { buf[0] = i;   }
5223     else                      { buf[0] = ' '; }
5224     buf[1] = '\0';
5225     if (*(q8tk_combo_get_text(misc_suspend_combo)) != buf[0]) {
5226 	q8tk_combo_set_text(misc_suspend_combo, buf);
5227     }
5228 }
5229 
cb_misc_suspend_entry_change(Q8tkWidget * widget,UNUSED_PARM)5230 static void cb_misc_suspend_entry_change(Q8tkWidget *widget, UNUSED_PARM)
5231 {
5232     filename_set_state(q8tk_entry_get_text(widget));
5233 
5234     sub_misc_suspend_combo_update();
5235 }
5236 
5237 /*----------------------------------------------------------------------*/
5238 /*	�ե���������������ե����륻�쥯���������			*/
5239 
5240 static void sub_misc_suspend_update(void);
5241 static void sub_misc_suspend_change(void);
5242 
cb_misc_suspend_fsel(UNUSED_WIDGET,UNUSED_PARM)5243 static	void	cb_misc_suspend_fsel(UNUSED_WIDGET, UNUSED_PARM)
5244 {
5245     const t_menulabel *l = data_misc_suspend;
5246 
5247 
5248     START_FILE_SELECTION(GET_LABEL(l, DATA_MISC_SUSPEND_FSEL),
5249 			 -1,	/* ReadOnly ��������Բ� */
5250 			 q8tk_entry_get_text(misc_suspend_entry),
5251 
5252 			 sub_misc_suspend_change,
5253 			 state_filename,
5254 			 QUASI88_MAX_FILENAME,
5255 			 NULL);
5256 }
5257 
sub_misc_suspend_change(void)5258 static void sub_misc_suspend_change(void)
5259 {
5260     filename_set_state(state_filename);
5261     q8tk_entry_set_text(misc_suspend_entry, state_filename);
5262 
5263     sub_misc_suspend_combo_update();
5264 }
5265 
sub_misc_suspend_update(void)5266 static void sub_misc_suspend_update(void)
5267 {
5268     q8tk_entry_set_text(misc_suspend_entry, filename_get_state());
5269 
5270     sub_misc_suspend_combo_update();
5271 }
5272 
5273 
cb_misc_suspend_num(Q8tkWidget * widget,UNUSED_PARM)5274 static void cb_misc_suspend_num(Q8tkWidget *widget, UNUSED_PARM)
5275 {
5276     int i;
5277     const t_menudata *p = data_misc_suspend_num;
5278     const char       *combo_str = q8tk_combo_get_text(widget);
5279 
5280     for (i=0; i<COUNTOF(data_misc_suspend_num); i++, p++) {
5281 	if (strcmp(p->str[menu_lang], combo_str) == 0) {
5282 
5283 	    filename_set_state_serial(p->val);
5284 
5285 	    q8tk_entry_set_text(misc_suspend_entry, filename_get_state());
5286 	    return;
5287 	}
5288     }
5289 }
5290 
5291 /*----------------------------------------------------------------------*/
5292 
menu_misc_suspend(void)5293 static	Q8tkWidget	*menu_misc_suspend(void)
5294 {
5295     Q8tkWidget *vbox, *hbox;
5296     Q8tkWidget *w, *e;
5297     const t_menulabel *l = data_misc_suspend;
5298 
5299     vbox = PACK_VBOX(NULL);
5300     {
5301 	hbox = PACK_HBOX(vbox);
5302 	{
5303 	    {
5304 		PACK_LABEL(hbox, GET_LABEL(data_misc, DATA_MISC_SUSPEND));
5305 	    }
5306 	    {
5307 		int save_code = q8tk_set_kanjicode(osd_kanji_code());
5308 
5309 		e = PACK_ENTRY(hbox,
5310 			       QUASI88_MAX_FILENAME, 74 - 11,
5311 			       filename_get_state(),
5312 			       NULL, NULL,
5313 			       cb_misc_suspend_entry_change, NULL);
5314 /*		q8tk_entry_set_position(e, 0);*/
5315 		misc_suspend_entry = e;
5316 
5317 		q8tk_set_kanjicode(save_code);
5318 	    }
5319 	}
5320 
5321 	hbox = PACK_HBOX(vbox);
5322 	{
5323 	    PACK_LABEL(hbox, "    ");
5324 
5325 	    PACK_BUTTON(hbox,
5326 			GET_LABEL(l, DATA_MISC_SUSPEND_SAVE),
5327 			cb_misc_suspend_save, NULL);
5328 
5329 	    PACK_LABEL(hbox, " ");
5330 	    PACK_VSEP(hbox);
5331 	    PACK_LABEL(hbox, " ");
5332 
5333 	    PACK_BUTTON(hbox,
5334 			GET_LABEL(l, DATA_MISC_SUSPEND_LOAD),
5335 			cb_misc_suspend_load, NULL);
5336 
5337 	    w = PACK_LABEL(hbox, GET_LABEL(l, DATA_MISC_SUSPEND_NUMBER));
5338 	    q8tk_misc_set_placement(w, Q8TK_PLACEMENT_X_CENTER,
5339 				       Q8TK_PLACEMENT_Y_CENTER);
5340 
5341 	    w = PACK_COMBO(hbox,
5342 			   data_misc_suspend_num,
5343 			   COUNTOF(data_misc_suspend_num),
5344 			   filename_get_state_serial(), " ", 0,
5345 			   cb_misc_suspend_num, NULL,
5346 			   NULL, NULL);
5347 	    q8tk_misc_set_placement(w, Q8TK_PLACEMENT_X_CENTER,
5348 				       Q8TK_PLACEMENT_Y_CENTER);
5349 	    misc_suspend_combo = w;
5350 
5351 	    PACK_LABEL(hbox, "  ");
5352 
5353 	    PACK_BUTTON(hbox,
5354 			GET_LABEL(l, DATA_MISC_SUSPEND_CHANGE),
5355 			cb_misc_suspend_fsel, NULL);
5356 
5357 	}
5358     }
5359 
5360     return vbox;
5361 }
5362 
5363 
5364 
5365 /*----------------------------------------------------------------------*/
5366 					 /* �����꡼�� ���ʥåץ���å� */
5367 
5368 static	Q8tkWidget	*misc_snapshot_entry;
5369 
5370 static	char		snap_filename[ QUASI88_MAX_FILENAME ];
5371 
5372 
5373 /*----------------------------------------------------------------------*/
5374 /*	���ʥåץ���å� ������ (�ּ¹ԡץ���å���)			*/
cb_misc_snapshot_do(void)5375 static	void	cb_misc_snapshot_do(void)
5376 {
5377     /* ǰ�Τ��ᡢ���ʥåץ���åȤΥե�����̾������� */
5378     filename_set_snap_base(q8tk_entry_get_text(misc_snapshot_entry));
5379 
5380     quasi88_screen_snapshot();
5381 
5382     /* ���ʥåץ���åȤΥե�����̾�ϡ��¹Ի����Ѥ�뤳�Ȥ�����ΤǺ����� */
5383     q8tk_entry_set_text(misc_snapshot_entry, filename_get_snap_base());
5384 }
5385 
5386 /*----------------------------------------------------------------------*/
5387 /*	�����ե����ޥå��ڤ��ؤ�					*/
get_misc_snapshot_format(void)5388 static	int	get_misc_snapshot_format(void)
5389 {
5390     return snapshot_format;
5391 }
cb_misc_snapshot_format(UNUSED_WIDGET,void * p)5392 static	void	cb_misc_snapshot_format(UNUSED_WIDGET, void *p)
5393 {
5394     snapshot_format = (int)p;
5395 }
5396 
5397 
5398 
5399 /*----------------------------------------------------------------------*/
5400 /*	�ե�����̾���ѹ�������ȥ꡼ changed (����)���˸ƤФ�롣	*/
5401 /*		(�ե����륻�쥯�����Ǥ��ѹ����Ϥ���ϸƤФ�ʤ�)	*/
5402 
cb_misc_snapshot_entry_change(Q8tkWidget * widget,UNUSED_PARM)5403 static void cb_misc_snapshot_entry_change(Q8tkWidget *widget, UNUSED_PARM)
5404 {
5405     filename_set_snap_base(q8tk_entry_get_text(widget));
5406 }
5407 
5408 /*----------------------------------------------------------------------*/
5409 /*	�ե���������������ե����륻�쥯���������			*/
5410 
5411 static void sub_misc_snapshot_update(void);
5412 static void sub_misc_snapshot_change(void);
5413 
cb_misc_snapshot_fsel(UNUSED_WIDGET,UNUSED_PARM)5414 static	void	cb_misc_snapshot_fsel(UNUSED_WIDGET, UNUSED_PARM)
5415 {
5416     const t_menulabel *l = data_misc_snapshot;
5417 
5418 
5419     START_FILE_SELECTION(GET_LABEL(l, DATA_MISC_SNAPSHOT_FSEL),
5420 			 -1,	/* ReadOnly ��������Բ� */
5421 			 q8tk_entry_get_text(misc_snapshot_entry),
5422 
5423 			 sub_misc_snapshot_change,
5424 			 snap_filename,
5425 			 QUASI88_MAX_FILENAME,
5426 			 NULL);
5427 }
5428 
sub_misc_snapshot_change(void)5429 static void sub_misc_snapshot_change(void)
5430 {
5431     filename_set_snap_base(snap_filename);
5432     q8tk_entry_set_text(misc_snapshot_entry, snap_filename);
5433 }
5434 
sub_misc_snapshot_update(void)5435 static void sub_misc_snapshot_update(void)
5436 {
5437     q8tk_entry_set_text(misc_snapshot_entry, filename_get_snap_base());
5438 }
5439 
5440 
5441 /*----------------------------------------------------------------------*/
5442 #ifdef	USE_SSS_CMD
5443 /*	���ޥ�ɼ¹Ծ����ѹ� */
get_misc_snapshot_c_do(void)5444 static	int	get_misc_snapshot_c_do(void)
5445 {
5446     return snapshot_cmd_do;
5447 }
cb_misc_snapshot_c_do(Q8tkWidget * widget,UNUSED_PARM)5448 static	void	cb_misc_snapshot_c_do(Q8tkWidget *widget, UNUSED_PARM)
5449 {
5450     int key = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
5451     snapshot_cmd_do = key;
5452 }
5453 
5454 /*	���ޥ���ѹ�������ȥ꡼ changed (����)���˸ƤФ�롣  */
cb_misc_snapshot_c_entry_change(Q8tkWidget * widget,UNUSED_PARM)5455 static void cb_misc_snapshot_c_entry_change(Q8tkWidget *widget, UNUSED_PARM)
5456 {
5457     strncpy(snapshot_cmd, q8tk_entry_get_text(widget),
5458 	    SNAPSHOT_CMD_SIZE - 1);
5459     snapshot_cmd[ SNAPSHOT_CMD_SIZE - 1 ] = '\0';
5460 }
5461 #endif
5462 
5463 /*----------------------------------------------------------------------*/
menu_misc_snapshot(void)5464 static	Q8tkWidget	*menu_misc_snapshot(void)
5465 {
5466     Q8tkWidget *hbox, *vbox, *hbox2, *vbox2, *vbox3, *hbox3;
5467     Q8tkWidget *e;
5468     const t_menulabel *l = data_misc_snapshot;
5469 
5470     vbox = PACK_VBOX(NULL);
5471     {
5472 	hbox = PACK_HBOX(vbox);
5473 	{
5474 	    {
5475 		PACK_LABEL(hbox, GET_LABEL(data_misc, DATA_MISC_SNAPSHOT));
5476 	    }
5477 	    {
5478 		int save_code = q8tk_set_kanjicode(osd_kanji_code());
5479 
5480 		e = PACK_ENTRY(hbox,
5481 			       QUASI88_MAX_FILENAME, 74 - 11,
5482 			       filename_get_snap_base(),
5483 			       NULL, NULL,
5484 			       cb_misc_snapshot_entry_change, NULL);
5485 /*		q8tk_entry_set_position(e, 0);*/
5486 		misc_snapshot_entry = e;
5487 
5488 		q8tk_set_kanjicode(save_code);
5489 	    }
5490 	}
5491 
5492 	hbox = PACK_HBOX(vbox);
5493 	{
5494 	    PACK_LABEL(hbox, "    ");
5495 
5496 	    PACK_BUTTON(hbox,
5497 			GET_LABEL(l, DATA_MISC_SNAPSHOT_BUTTON),
5498 			cb_misc_snapshot_do, NULL);
5499 
5500 	    PACK_LABEL(hbox, " ");
5501 	    PACK_VSEP(hbox);
5502 
5503 
5504 	    vbox2 = PACK_VBOX(hbox);
5505 	    {
5506 		hbox2 = PACK_HBOX(vbox2);
5507 		{
5508 		    vbox3 = PACK_VBOX(hbox2);
5509 
5510 		    PACK_LABEL(vbox3, "");
5511 
5512 		    hbox3 = PACK_HBOX(vbox3);
5513 		    {
5514 			PACK_LABEL(hbox3,
5515 				   GET_LABEL(l, DATA_MISC_SNAPSHOT_FORMAT));
5516 
5517 			PACK_RADIO_BUTTONS(PACK_HBOX(hbox3),
5518 					   data_misc_snapshot_format,
5519 					   COUNTOF(data_misc_snapshot_format),
5520 					   get_misc_snapshot_format(),
5521 					   cb_misc_snapshot_format);
5522 
5523 			PACK_LABEL(hbox3,
5524 				   GET_LABEL(l, DATA_MISC_SNAPSHOT_PADDING));
5525 		    }
5526 
5527 		    PACK_BUTTON(hbox2,
5528 				GET_LABEL(l, DATA_MISC_SNAPSHOT_CHANGE),
5529 				cb_misc_snapshot_fsel, NULL);
5530 		}
5531 
5532 #ifdef	USE_SSS_CMD
5533 		if (snapshot_cmd_enable) {
5534 		    hbox2 = PACK_HBOX(vbox2);
5535 		    {
5536 			PACK_CHECK_BUTTON(hbox2,
5537 					  GET_LABEL(l, DATA_MISC_SNAPSHOT_CMD),
5538 					  get_misc_snapshot_c_do(),
5539 					  cb_misc_snapshot_c_do, NULL);
5540 
5541 			PACK_LABEL(hbox2, " ");
5542 
5543 			PACK_ENTRY(hbox2,
5544 				   SNAPSHOT_CMD_SIZE, 38, snapshot_cmd,
5545 				   NULL, NULL,
5546 				   cb_misc_snapshot_c_entry_change, NULL);
5547 		    }
5548 		}
5549 #endif	/* USE_SSS_CMD */
5550 	    }
5551 	}
5552     }
5553 
5554     return vbox;
5555 }
5556 
5557 /*----------------------------------------------------------------------*/
5558 						  /* ������ɽ��ϥ����� */
5559 
5560 static	Q8tkWidget	*misc_waveout_entry;
5561 static	Q8tkWidget	*misc_waveout_start;
5562 static	Q8tkWidget	*misc_waveout_stop;
5563 static	Q8tkWidget	*misc_waveout_change;
5564 
5565 static	char		wave_filename[ QUASI88_MAX_FILENAME ];
5566 
5567 
sub_misc_waveout_sensitive(void)5568 static void sub_misc_waveout_sensitive(void)
5569 {
5570     if (xmame_wavout_opened() == FALSE) {
5571 	q8tk_widget_set_sensitive(misc_waveout_start,  TRUE);
5572 	q8tk_widget_set_sensitive(misc_waveout_stop,   FALSE);
5573 	q8tk_widget_set_sensitive(misc_waveout_change, TRUE);
5574 	q8tk_widget_set_sensitive(misc_waveout_entry,  TRUE);
5575     } else {
5576 	q8tk_widget_set_sensitive(misc_waveout_start,  FALSE);
5577 	q8tk_widget_set_sensitive(misc_waveout_stop,   TRUE);
5578 	q8tk_widget_set_sensitive(misc_waveout_change, FALSE);
5579 	q8tk_widget_set_sensitive(misc_waveout_entry,  FALSE);
5580     }
5581     q8tk_widget_set_focus(NULL);
5582 }
5583 /*----------------------------------------------------------------------*/
5584 /*	������ɽ��� ��¸���� (�ֳ��ϡץ���å���)			*/
cb_misc_waveout_start(void)5585 static	void	cb_misc_waveout_start(void)
5586 {
5587     /* ǰ�Τ��ᡢ������ɽ��ϤΥե�����̾������� */
5588     filename_set_wav_base(q8tk_entry_get_text(misc_waveout_entry));
5589 
5590     quasi88_waveout(TRUE);
5591 
5592     /* ���ʥåץ���åȤΥե�����̾�ϡ��¹Ի����Ѥ�뤳�Ȥ�����ΤǺ����� */
5593     q8tk_entry_set_text(misc_waveout_entry, filename_get_wav_base());
5594 
5595 
5596     sub_misc_waveout_sensitive();
5597 }
5598 
5599 /*----------------------------------------------------------------------*/
5600 /*	������ɽ��� ��¸��λ (����ߡץ���å���)			*/
cb_misc_waveout_stop(void)5601 static	void	cb_misc_waveout_stop(void)
5602 {
5603     quasi88_waveout(FALSE);
5604 
5605     sub_misc_waveout_sensitive();
5606 }
5607 
5608 /*----------------------------------------------------------------------*/
5609 /*	�ե�����̾���ѹ�������ȥ꡼ changed (����)���˸ƤФ�롣	*/
5610 /*		(�ե����륻�쥯�����Ǥ��ѹ����Ϥ���ϸƤФ�ʤ�)	*/
5611 
cb_misc_waveout_entry_change(Q8tkWidget * widget,UNUSED_PARM)5612 static void cb_misc_waveout_entry_change(Q8tkWidget *widget, UNUSED_PARM)
5613 {
5614     filename_set_wav_base(q8tk_entry_get_text(widget));
5615 }
5616 
5617 /*----------------------------------------------------------------------*/
5618 /*	�ե���������������ե����륻�쥯���������			*/
5619 
5620 static void sub_misc_waveout_update(void);
5621 static void sub_misc_waveout_change(void);
5622 
cb_misc_waveout_fsel(UNUSED_WIDGET,UNUSED_PARM)5623 static	void	cb_misc_waveout_fsel(UNUSED_WIDGET, UNUSED_PARM)
5624 {
5625     const t_menulabel *l = data_misc_waveout;
5626 
5627 
5628     START_FILE_SELECTION(GET_LABEL(l, DATA_MISC_WAVEOUT_FSEL),
5629 			 -1,	/* ReadOnly ��������Բ� */
5630 			 q8tk_entry_get_text(misc_waveout_entry),
5631 
5632 			 sub_misc_waveout_change,
5633 			 wave_filename,
5634 			 QUASI88_MAX_FILENAME,
5635 			 NULL);
5636 }
5637 
sub_misc_waveout_change(void)5638 static void sub_misc_waveout_change(void)
5639 {
5640     filename_set_wav_base(wave_filename);
5641     q8tk_entry_set_text(misc_waveout_entry, wave_filename);
5642 }
5643 
sub_misc_waveout_update(void)5644 static void sub_misc_waveout_update(void)
5645 {
5646     q8tk_entry_set_text(misc_waveout_entry, filename_get_wav_base());
5647 }
5648 
5649 
5650 /*----------------------------------------------------------------------*/
menu_misc_waveout(void)5651 static	Q8tkWidget	*menu_misc_waveout(void)
5652 {
5653     Q8tkWidget *hbox, *vbox;
5654     Q8tkWidget *e;
5655     const t_menulabel *l = data_misc_waveout;
5656 
5657     vbox = PACK_VBOX(NULL);
5658     {
5659 	hbox = PACK_HBOX(vbox);
5660 	{
5661 	    {
5662 		PACK_LABEL(hbox, GET_LABEL(data_misc, DATA_MISC_WAVEOUT));
5663 	    }
5664 	    {
5665 		int save_code = q8tk_set_kanjicode(osd_kanji_code());
5666 
5667 		e = PACK_ENTRY(hbox,
5668 			       QUASI88_MAX_FILENAME, 63,
5669 			       filename_get_wav_base(),
5670 			       NULL, NULL,
5671 			       cb_misc_waveout_entry_change, NULL);
5672 /*		q8tk_entry_set_position(e, 0);*/
5673 		misc_waveout_entry = e;
5674 
5675 		q8tk_set_kanjicode(save_code);
5676 	    }
5677 	}
5678 
5679 	hbox = PACK_HBOX(vbox);
5680 	{
5681 	    PACK_LABEL(hbox, "    ");
5682 
5683 	    misc_waveout_start =
5684 		PACK_BUTTON(hbox,
5685 			    GET_LABEL(l, DATA_MISC_WAVEOUT_START),
5686 			    cb_misc_waveout_start, NULL);
5687 
5688 	    PACK_LABEL(hbox, " ");
5689 	    PACK_VSEP(hbox);
5690 	    PACK_LABEL(hbox, " ");
5691 
5692 	    misc_waveout_stop =
5693 		PACK_BUTTON(hbox,
5694 			    GET_LABEL(l, DATA_MISC_WAVEOUT_STOP),
5695 			    cb_misc_waveout_stop, NULL);
5696 
5697 	    PACK_LABEL(hbox, GET_LABEL(l, DATA_MISC_WAVEOUT_PADDING));
5698 
5699 	    misc_waveout_change =
5700 		PACK_BUTTON(hbox,
5701 			    GET_LABEL(l, DATA_MISC_WAVEOUT_CHANGE),
5702 			    cb_misc_waveout_fsel, NULL);
5703 	}
5704     }
5705 
5706     sub_misc_waveout_sensitive();
5707 
5708     return vbox;
5709 }
5710 
5711 /*----------------------------------------------------------------------*/
5712 						    /* �ե�����̾��碌 */
get_misc_sync(void)5713 static	int	get_misc_sync(void)
5714 {
5715     return filename_synchronize;
5716 }
cb_misc_sync(Q8tkWidget * widget,UNUSED_PARM)5717 static	void	cb_misc_sync(Q8tkWidget *widget, UNUSED_PARM)
5718 {
5719     filename_synchronize = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
5720 }
5721 
5722 
5723 
5724 /*======================================================================*/
5725 
menu_misc(void)5726 static	Q8tkWidget	*menu_misc(void)
5727 {
5728     Q8tkWidget *vbox;
5729     Q8tkWidget *w;
5730 
5731     vbox = PACK_VBOX(NULL);
5732     {
5733 	PACK_HSEP(vbox);
5734 
5735 	q8tk_box_pack_start(vbox, menu_misc_suspend());
5736 
5737 	PACK_HSEP(vbox);
5738 
5739 	q8tk_box_pack_start(vbox, menu_misc_snapshot());
5740 
5741 	PACK_HSEP(vbox);
5742 
5743 	w = menu_misc_waveout();
5744 
5745 	if (xmame_has_sound()) {
5746 	    q8tk_box_pack_start(vbox, w);
5747 	    PACK_HSEP(vbox);
5748 	}
5749 
5750 	PACK_CHECK_BUTTON(vbox,
5751 			  GET_LABEL(data_misc_sync, 0),
5752 			  get_misc_sync(),
5753 			  cb_misc_sync, NULL);
5754     }
5755 
5756     return vbox;
5757 }
5758 
5759 
5760 
5761 
5762 
5763 
5764 
5765 
5766 
5767 
5768 /*===========================================================================
5769  *
5770  *	�ᥤ��ڡ���	�С���������
5771  *
5772  *===========================================================================*/
5773 
menu_about(void)5774 static	Q8tkWidget	*menu_about(void)
5775 {
5776     int i;
5777     Q8tkWidget *vx, *hx, *vbox, *swin, *hbox, *w;
5778 
5779     vx = PACK_VBOX(NULL);
5780     {
5781 	hx = PACK_HBOX(vx);				/* ��Ⱦʬ�˥�ɽ�� */
5782 	{
5783 	    PACK_LABEL(hx, " ");	/* ����ǥ�� */
5784 
5785 	    if (strcmp(Q_TITLE, "QUASI88") == 0) {
5786 		w = q8tk_logo_new();
5787 		q8tk_widget_show(w);
5788 		q8tk_box_pack_start(hx, w);
5789 	    } else {
5790 		PACK_LABEL(hx, Q_TITLE);
5791 	    }
5792 
5793 	    vbox = PACK_VBOX(hx);
5794 	    {
5795 		i = Q8GR_LOGO_H;
5796 
5797 		PACK_LABEL(vbox, "  " Q_COPYRIGHT);
5798 		i--;
5799 
5800 		for ( ; i>1; i--) PACK_LABEL(vbox, "");
5801 
5802 		PACK_LABEL(vbox, "  ver. " Q_VERSION  "  <" Q_COMMENT ">");
5803 	    }
5804 	}
5805 							/* ��Ⱦʬ�Ͼ���ɽ�� */
5806 	swin = q8tk_scrolled_window_new(NULL, NULL);
5807 	{
5808 	    hbox = PACK_HBOX(NULL);
5809 	    {
5810 		vbox = PACK_VBOX(hbox);
5811 		{
5812 		    {		/* ������ɤ˴ؤ������ɽ�� */
5813 			const char *(*s) = (menu_lang == 0) ? data_about_en
5814 							    : data_about_jp;
5815 
5816 			for (i=0; s[i]; i++) {
5817 			    if (strcmp(s[i], "@MAMEVER") == 0) {
5818 				PACK_LABEL(vbox, xmame_version_mame());
5819 			    } else if (strcmp(s[i], "@FMGENVER") == 0) {
5820 				PACK_LABEL(vbox, xmame_version_fmgen());
5821 			    } else {
5822 				PACK_LABEL(vbox, s[i]);
5823 			    }
5824 			}
5825 		    }
5826 
5827 		    {		/* �����ƥ��¸���˴ؤ������ɽ�� */
5828 			int new_code, save_code = 0;
5829 			const char *msg;
5830 			char buf[256];
5831 			int i;
5832 
5833 			if (menu_about_osd_msg(menu_lang, &new_code, &msg)) {
5834 
5835 			    if (menu_lang == MENU_JAPAN && new_code >= 0) {
5836 				save_code = q8tk_set_kanjicode(new_code);
5837 			    }
5838 
5839 			    i = 0;
5840 			    for (;;) {
5841 				if (i == 255 || *msg == '\n' || *msg == '\0') {
5842 				    buf[i] = '\0';
5843 				    PACK_LABEL(vbox, buf);
5844 				    i = 0;
5845 				    if (*msg == '\n') msg++;
5846 				    if (*msg == '\0') break;
5847 				} else {
5848 				    buf[i] = *msg++;
5849 				    i++;
5850 				}
5851 			    }
5852 
5853 			    if (menu_lang == MENU_JAPAN && new_code >= 0) {
5854 				q8tk_set_kanjicode(save_code);
5855 			    }
5856 			}
5857 		    }
5858 		}
5859 	    }
5860 	    q8tk_container_add(swin, hbox);
5861 	}
5862 
5863 	q8tk_scrolled_window_set_policy(swin, Q8TK_POLICY_AUTOMATIC,
5864 					      Q8TK_POLICY_AUTOMATIC);
5865 	q8tk_misc_set_size(swin, 78, 18-Q8GR_LOGO_H);
5866 	q8tk_widget_show(swin);
5867 	q8tk_box_pack_start(vx, swin);
5868     }
5869 
5870     return vx;
5871 }
5872 
5873 
5874 
5875 
5876 
5877 
5878 
5879 
5880 
5881 
5882 /*===========================================================================
5883  *
5884  *	�ᥤ������ɥ�
5885  *
5886  *===========================================================================*/
5887 
5888 /*----------------------------------------------------------------------*/
5889 				     /* NOTEBOOK ��ĥ���դ��롢�ƥڡ��� */
5890 static	struct{
5891     int		data_num;
5892     Q8tkWidget	*(*menu_func)(void);
5893 } menu_page[] =
5894 {
5895     { DATA_TOP_RESET,	menu_reset,	},
5896     { DATA_TOP_CPU,	menu_cpu,	},
5897     { DATA_TOP_GRAPH,	menu_graph,	},
5898 #ifdef	USE_SOUND
5899     { DATA_TOP_VOLUME,	menu_volume,	},
5900 #endif
5901     { DATA_TOP_DISK,	menu_disk,	},
5902     { DATA_TOP_KEY,	menu_key,	},
5903     { DATA_TOP_MOUSE,	menu_mouse,	},
5904     { DATA_TOP_TAPE,	menu_tape,	},
5905     { DATA_TOP_MISC,	menu_misc,	},
5906     { DATA_TOP_ABOUT,	menu_about,	},
5907 };
5908 
5909 /*----------------------------------------------------------------------*/
5910 /* NOTEBOOK �γƥڡ������ե��������������������褦�ˡ�
5911    ��������졼�����������ꤹ�롣���Τ��ᡢ���ߡ��������å����� */
5912 
5913 #define	cb_note_fake(fn,n)						\
5914 static	void	cb_note_fake_##fn(UNUSED_WIDGET, Q8tkWidget *notebook)	\
5915 {									\
5916     q8tk_notebook_set_page(notebook, n);				\
5917 }
5918 cb_note_fake(f1,0)
5919 cb_note_fake(f2,1)
5920 cb_note_fake(f3,2)
5921 cb_note_fake(f4,3)
5922 cb_note_fake(f5,4)
5923 cb_note_fake(f6,5)
5924 cb_note_fake(f7,6)
5925 cb_note_fake(f8,7)
5926 cb_note_fake(f9,8)
5927 cb_note_fake(f10,9)
5928 
5929      /* �ʲ��Υ�������졼�����������ϡ� floi�� ���� Thanks ! */
cb_note_fake_prev(UNUSED_WIDGET,Q8tkWidget * notebook)5930 static	void	cb_note_fake_prev(UNUSED_WIDGET, Q8tkWidget *notebook)
5931 {
5932     int n = q8tk_notebook_current_page(notebook) - 1;
5933     if (n < 0) n = COUNTOF(menu_page) - 1;
5934     q8tk_notebook_set_page(notebook, n);
5935 }
5936 
cb_note_fake_next(UNUSED_WIDGET,Q8tkWidget * notebook)5937 static	void	cb_note_fake_next(UNUSED_WIDGET, Q8tkWidget *notebook)
5938 {
5939     int n = q8tk_notebook_current_page(notebook) + 1;
5940     if (COUNTOF(menu_page) <= n) n = 0;
5941     q8tk_notebook_set_page(notebook, n);
5942 }
5943 
5944 static	struct {
5945     int		key;
5946     void	(*cb_func)(Q8tkWidget *, Q8tkWidget *);
5947 } menu_fkey[] =
5948 {
5949     { Q8TK_KEY_F1,	cb_note_fake_f1,  },
5950     { Q8TK_KEY_F2,	cb_note_fake_f2,  },
5951     { Q8TK_KEY_F3,	cb_note_fake_f3,  },
5952     { Q8TK_KEY_F4,	cb_note_fake_f4,  },
5953     { Q8TK_KEY_F5,	cb_note_fake_f5,  },
5954     { Q8TK_KEY_F6,	cb_note_fake_f6,  },
5955     { Q8TK_KEY_F7,	cb_note_fake_f7,  },
5956     { Q8TK_KEY_F8,	cb_note_fake_f8,  },
5957     { Q8TK_KEY_F9,	cb_note_fake_f9,  },
5958     { Q8TK_KEY_F10,	cb_note_fake_f10, },
5959 
5960     { Q8TK_KEY_HOME,	cb_note_fake_prev, },
5961     { Q8TK_KEY_END,	cb_note_fake_next, },
5962 };
5963 
5964 /*----------------------------------------------------------------------*/
5965 				/* �ʰץꥻ�åȥܥ��� �� ��˥����ܥ��� */
5966 static	Q8tkWidget	*monitor_widget;
5967 static	Q8tkWidget	*quickres_widget;
5968 
5969 static	int		top_misc_stat	= 1;
5970 static	Q8tkWidget	*top_misc_button;
5971 
5972 static	Q8tkWidget *menu_top_misc_quickres(void);
5973 static	Q8tkWidget *menu_top_misc_monitor(void);
5974 
cb_top_misc_stat(UNUSED_WIDGET,UNUSED_PARM)5975 static	void	cb_top_misc_stat(UNUSED_WIDGET, UNUSED_PARM)
5976 {
5977     top_misc_stat ^= 1;
5978     if (top_misc_stat) {
5979 	q8tk_widget_hide(quickres_widget);
5980 	q8tk_label_set(top_misc_button->child,  ">>");
5981 	q8tk_widget_show(monitor_widget);
5982     } else {
5983 	q8tk_widget_show(quickres_widget);
5984 	q8tk_label_set(top_misc_button->child,  "<<");
5985 	q8tk_widget_hide(monitor_widget);
5986     }
5987 }
menu_top_button_misc(void)5988 static	Q8tkWidget	*menu_top_button_misc(void)
5989 {
5990     Q8tkWidget *box;
5991 
5992     box = PACK_HBOX(NULL);
5993 
5994     quickres_widget = menu_top_misc_quickres();
5995     monitor_widget  = menu_top_misc_monitor();
5996 
5997     top_misc_button = PACK_BUTTON(NULL,
5998 				  "<<",
5999 				  cb_top_misc_stat, NULL);
6000 
6001     q8tk_box_pack_start(box, quickres_widget);
6002     q8tk_box_pack_start(box, top_misc_button);
6003     q8tk_box_pack_start(box, monitor_widget);
6004     PACK_LABEL(box, "     ");
6005 
6006     top_misc_stat ^= 1;
6007     cb_top_misc_stat(0, 0);
6008 
6009     return box;
6010 }
6011 
6012 /*----------------------------------------------------------------------*/
6013 						/* �ʰץꥻ�åȥܥ���   */
get_quickres_basic(void)6014 static	int	get_quickres_basic(void)
6015 {
6016     return reset_req.boot_basic;
6017 }
cb_quickres_basic(UNUSED_WIDGET,void * p)6018 static	void	cb_quickres_basic(UNUSED_WIDGET, void *p)
6019 {
6020     if (reset_req.boot_basic != (int)p) {
6021 	reset_req.boot_basic = (int)p;
6022 
6023 	q8tk_toggle_button_set_state(widget_reset_basic[ 0 ][ (int)p ], TRUE);
6024     }
6025 }
get_quickres_clock(void)6026 static	int	get_quickres_clock(void)
6027 {
6028     return reset_req.boot_clock_4mhz;
6029 }
cb_quickres_clock(UNUSED_WIDGET,void * p)6030 static	void	cb_quickres_clock(UNUSED_WIDGET, void *p)
6031 {
6032     if (reset_req.boot_clock_4mhz != (int)p) {
6033 	reset_req.boot_clock_4mhz = (int)p;
6034 
6035 	q8tk_toggle_button_set_state(widget_reset_clock[ 0 ][ (int)p ], TRUE);
6036     }
6037 }
6038 
menu_top_misc_quickres(void)6039 static	Q8tkWidget *menu_top_misc_quickres(void)
6040 {
6041     Q8tkWidget *box;
6042     Q8List     *list;
6043 
6044     box = PACK_HBOX(NULL);
6045     {
6046 	list = PACK_RADIO_BUTTONS(PACK_VBOX(box),
6047 			data_quickres_basic, COUNTOF(data_quickres_basic),
6048 			get_quickres_basic(), cb_quickres_basic);
6049 
6050 	/* �ꥹ�Ȥ�귫�äơ����������åȤ���� */
6051 	widget_reset_basic[1][BASIC_V2 ] = list->data;	list = list->next;
6052 	widget_reset_basic[1][BASIC_V1H] = list->data;	list = list->next;
6053 	widget_reset_basic[1][BASIC_V1S] = list->data;	list = list->next;
6054 	widget_reset_basic[1][BASIC_N  ] = list->data;
6055 
6056 
6057 	list = PACK_RADIO_BUTTONS(PACK_VBOX(box),
6058 			data_quickres_clock, COUNTOF(data_quickres_clock),
6059 			get_quickres_clock(), cb_quickres_clock);
6060 
6061 	/* �ꥹ�Ȥ�귫�äơ����������åȤ���� */
6062 	widget_reset_clock[1][CLOCK_4MHZ] = list->data;	list = list->next;
6063 	widget_reset_clock[1][CLOCK_8MHZ] = list->data;
6064 
6065 
6066 	PACK_BUTTON(box,
6067 		    GET_LABEL(data_quickres_reset, 0),
6068 		    cb_reset_now, NULL);
6069 
6070 	PACK_VSEP(box);
6071     }
6072     q8tk_widget_hide(box);
6073 
6074     return box;
6075 }
6076 
6077 /*----------------------------------------------------------------------*/
6078 						/* ��˥����ܥ���	*/
cb_top_monitor(UNUSED_WIDGET,UNUSED_PARM)6079 static	void	cb_top_monitor(UNUSED_WIDGET, UNUSED_PARM)
6080 {
6081     quasi88_monitor();		/* �� q8tk_main_quit() �ƽкѤ� */
6082 }
6083 
menu_top_misc_monitor(void)6084 static	Q8tkWidget *menu_top_misc_monitor(void)
6085 {
6086     Q8tkWidget *box;
6087 
6088     box = PACK_HBOX(NULL);
6089     {
6090 	PACK_LABEL(box, "  ");
6091 
6092 	if (debug_mode) {
6093 	    PACK_BUTTON(box,
6094 			GET_LABEL(data_top_monitor, DATA_TOP_MONITOR_BTN),
6095 			cb_top_monitor, NULL);
6096 	} else {
6097 	    PACK_LABEL(box,
6098 		       GET_LABEL(data_top_monitor, DATA_TOP_MONITOR_PAD));
6099 	}
6100 
6101 	PACK_LABEL(box, "     ");
6102     }
6103     q8tk_widget_hide(box);
6104 
6105     return box;
6106 }
6107 /*----------------------------------------------------------------------*/
6108 							/* ���ơ�����	*/
get_top_status(void)6109 static	int	get_top_status(void) { return quasi88_cfg_now_showstatus(); }
cb_top_status(Q8tkWidget * widget,UNUSED_PARM)6110 static	void	cb_top_status(Q8tkWidget *widget, UNUSED_PARM)
6111 {
6112     int on = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
6113 
6114     if (quasi88_cfg_can_showstatus()) {
6115 	quasi88_cfg_set_showstatus(on);
6116     }
6117 }
6118 
menu_top_status(Q8tkWidget * base_hbox)6119 static	void	menu_top_status(Q8tkWidget *base_hbox)
6120 {
6121     Q8tkWidget *vbox;
6122 
6123     vbox = PACK_VBOX(base_hbox);
6124     {
6125 	PACK_LABEL(vbox, GET_LABEL(data_top_status, DATA_TOP_STATUS_PAD));
6126 
6127 	if (quasi88_cfg_can_showstatus()) {
6128 
6129 	    PACK_CHECK_BUTTON(vbox,
6130 			      GET_LABEL(data_top_status, DATA_TOP_STATUS_CHK),
6131 			      get_top_status(),
6132 			      cb_top_status, NULL);
6133 
6134 	    PACK_LABEL(vbox, GET_LABEL(data_top_status, DATA_TOP_STATUS_KEY));
6135 	}
6136     }
6137 }
6138 /*----------------------------------------------------------------------*/
6139 					/* �ᥤ������ɥ������Υܥ��� */
6140 static	void	sub_top_savecfg(void);
6141 static	void	sub_top_quit(void);
6142 
cb_top_button(UNUSED_WIDGET,void * p)6143 static	void	cb_top_button(UNUSED_WIDGET, void *p)
6144 {
6145     switch ((int)p) {
6146     case DATA_TOP_SAVECFG:
6147 	sub_top_savecfg();
6148 	break;
6149     case DATA_TOP_EXIT:
6150 	quasi88_exec();		/* �� q8tk_main_quit() �ƽкѤ� */
6151 	break;
6152     case DATA_TOP_QUIT:
6153 	sub_top_quit();
6154 	return;
6155     }
6156 }
6157 
menu_top_button(void)6158 static	Q8tkWidget	*menu_top_button(void)
6159 {
6160     int i;
6161     Q8tkWidget *hbox, *w;
6162     const t_menudata *p = data_top_button;
6163 
6164     hbox = PACK_HBOX(NULL);
6165     {
6166 	w = menu_top_button_misc();
6167 	q8tk_box_pack_start(hbox, w);
6168 
6169 	menu_top_status(hbox);
6170 
6171 	for (i=0; i<COUNTOF(data_top_button); i++, p++) {
6172 
6173 	    w = PACK_BUTTON(hbox, GET_LABEL(p, 0),
6174 			    cb_top_button, (void *)(p->val));
6175 
6176 	    if (p->val == DATA_TOP_QUIT) {
6177 		q8tk_accel_group_add(menu_accel, Q8TK_KEY_F12, w, "clicked");
6178 	    }
6179 	    if (p->val == DATA_TOP_EXIT) {
6180 		q8tk_accel_group_add(menu_accel, Q8TK_KEY_ESC, w, "clicked");
6181 	    }
6182 	}
6183     }
6184     q8tk_misc_set_placement(hbox, Q8TK_PLACEMENT_X_RIGHT, 0);
6185 
6186     return hbox;
6187 }
6188 
6189 
6190 /*----------------------------------------------------------------------*/
6191 				/* ������¸�ܥ��������Ρ���ǧ�������� */
6192 
6193 static	char	*top_savecfg_filename;
6194 
cb_top_savecfg_clicked(UNUSED_WIDGET,void * p)6195 static	void	cb_top_savecfg_clicked(UNUSED_WIDGET, void *p)
6196 {
6197     dialog_destroy();
6198 
6199     if ((int)p) {
6200 	config_save(top_savecfg_filename);
6201     }
6202 
6203     free(top_savecfg_filename);
6204     top_savecfg_filename = NULL;
6205 }
get_top_savecfg_auto(void)6206 static	int	get_top_savecfg_auto(void)
6207 {
6208     return save_config;
6209 }
cb_top_savecfg_auto(Q8tkWidget * widget,UNUSED_PARM)6210 static	void	cb_top_savecfg_auto(Q8tkWidget *widget, UNUSED_PARM)
6211 {
6212     int parm = (Q8TK_TOGGLE_BUTTON(widget)->active) ? TRUE : FALSE;
6213     save_config = parm;
6214 }
6215 
sub_top_savecfg(void)6216 static	void	sub_top_savecfg(void)
6217 {
6218     const t_menulabel *l = data_top_savecfg;
6219 
6220     top_savecfg_filename = filename_alloc_global_cfgname();
6221 
6222     if (top_savecfg_filename) {
6223 	dialog_create();
6224 	{
6225 	    dialog_set_title(GET_LABEL(l, DATA_TOP_SAVECFG_TITLE));
6226 	    dialog_set_title(GET_LABEL(l, DATA_TOP_SAVECFG_INFO));
6227 	    dialog_set_title("");
6228 	    dialog_set_title(top_savecfg_filename);
6229 	    dialog_set_title("");
6230 	    dialog_set_check_button(GET_LABEL(l, DATA_TOP_SAVECFG_AUTO),
6231 				    get_top_savecfg_auto(),
6232 				    cb_top_savecfg_auto, NULL);
6233 
6234 	    dialog_set_separator();
6235 
6236 	    dialog_set_button(GET_LABEL(l, DATA_TOP_SAVECFG_OK),
6237 			      cb_top_savecfg_clicked, (void*)TRUE);
6238 
6239 	    dialog_accel_key(Q8TK_KEY_F12);
6240 
6241 	    dialog_set_button(GET_LABEL(l, DATA_TOP_SAVECFG_CANCEL),
6242 			      cb_top_savecfg_clicked, (void*)FALSE);
6243 
6244 	    dialog_accel_key(Q8TK_KEY_ESC);
6245 	}
6246 	dialog_start();
6247     }
6248 }
6249 
6250 
6251 /*----------------------------------------------------------------------*/
6252 				  /* QUIT�ܥ��������Ρ���ǧ�������� */
6253 
cb_top_quit_clicked(UNUSED_WIDGET,void * p)6254 static	void	cb_top_quit_clicked(UNUSED_WIDGET, void *p)
6255 {
6256     dialog_destroy();
6257 
6258     if ((int)p) {
6259 	quasi88_quit();		/* �� q8tk_main_quit() �ƽкѤ� */
6260     }
6261 }
sub_top_quit(void)6262 static	void	sub_top_quit(void)
6263 {
6264     const t_menulabel *l = data_top_quit;
6265 
6266     dialog_create();
6267     {
6268 	dialog_set_title(GET_LABEL(l, DATA_TOP_QUIT_TITLE));
6269 
6270 	dialog_set_separator();
6271 
6272 	dialog_set_button(GET_LABEL(l, DATA_TOP_QUIT_OK),
6273 			  cb_top_quit_clicked, (void*)TRUE);
6274 
6275 	dialog_accel_key(Q8TK_KEY_F12);
6276 
6277 	dialog_set_button(GET_LABEL(l, DATA_TOP_QUIT_CANCEL),
6278 			  cb_top_quit_clicked, (void*)FALSE);
6279 
6280 	dialog_accel_key(Q8TK_KEY_ESC);
6281     }
6282     dialog_start();
6283 }
6284 
6285 
6286 /*----------------------------------------------------------------------*/
6287 				  /* ��˥塼�ΥΡ��ȥڡ������Ѥ�ä��� */
6288 
cb_top_notebook_changed(Q8tkWidget * widget,UNUSED_PARM)6289 static	void	cb_top_notebook_changed(Q8tkWidget *widget, UNUSED_PARM)
6290 {
6291     menu_last_page = q8tk_notebook_current_page(widget);
6292 }
6293 
6294 /*======================================================================*/
6295 
menu_top(void)6296 static Q8tkWidget *menu_top(void)
6297 {
6298     int i;
6299     const t_menudata *l = data_top;
6300     Q8tkWidget *note_fake[ COUNTOF(menu_fkey) ];
6301     Q8tkWidget *win, *vbox, *notebook, *w;
6302 
6303     win = q8tk_window_new(Q8TK_WINDOW_TOPLEVEL);
6304     menu_accel = q8tk_accel_group_new();
6305     q8tk_accel_group_attach(menu_accel, win);
6306     q8tk_widget_show(win);
6307 
6308     vbox = PACK_VBOX(NULL);
6309     {
6310 	{
6311 	    /* �ƥ�˥塼��Ρ��ȥڡ����˾褻�Ƥ��� */
6312 
6313 	    notebook = q8tk_notebook_new();
6314 	    {
6315 		for (i=0; i<COUNTOF(menu_page); i++) {
6316 
6317 		    w = (*menu_page[i].menu_func)();
6318 		    q8tk_notebook_append(notebook, w,
6319 					 GET_LABEL(l, menu_page[i].data_num));
6320 
6321 		    if (i<COUNTOF(menu_fkey)) {
6322 			note_fake[i] = q8tk_button_new();
6323 			q8tk_signal_connect(note_fake[i], "clicked",
6324 					    menu_fkey[i].cb_func, notebook);
6325 			q8tk_accel_group_add(menu_accel, menu_fkey[i].key,
6326 					     note_fake[i], "clicked");
6327 		    }
6328 		}
6329 
6330 		for ( ; i < COUNTOF(menu_fkey); i++) {
6331 		    note_fake[i] = q8tk_button_new();
6332 		    q8tk_signal_connect(note_fake[i], "clicked",
6333 					menu_fkey[i].cb_func, notebook);
6334 		    q8tk_accel_group_add(menu_accel, menu_fkey[i].key,
6335 					 note_fake[i], "clicked");
6336 		}
6337 	    }
6338 	    q8tk_signal_connect(notebook, "switch_page",
6339 				cb_top_notebook_changed, NULL);
6340 	    q8tk_widget_show(notebook);
6341 	    q8tk_box_pack_start(vbox, notebook);
6342 
6343 	    /* �¸����ȥåפΥΡ��ȥ֥å��ϡ��ե���������Ŭ�����ꥢ
6344 	             (������ʬ�Υ�������饤��ɽ�����ʤ��ʤ롣�����������) */
6345 	    q8tk_notebook_hook_focus_lost(notebook, TRUE);
6346 	}
6347 	{
6348 	    /* ���Ĥ��ϡ��ܥ��� */
6349 
6350 	    w = menu_top_button();
6351 	    q8tk_box_pack_start(vbox, w);
6352 	}
6353     }
6354     q8tk_container_add(win, vbox);
6355 
6356 
6357 	/* �Ρ��ȥ֥å����֤��ޤ� */
6358     return notebook;
6359 }
6360 
6361 
6362 
6363 
6364 
6365 /****************************************************************/
6366 /* ��˥塼�⡼�� �ᥤ�����					*/
6367 /****************************************************************/
6368 
menu_init(void)6369 void	menu_init(void)
6370 {
6371     int i;
6372 
6373     for (i=0; i<0x10; i++) {			/* ������������������ */
6374 	if      (i == 0x08) key_scan[i] |= 0xdf;	/* ���ʤϻĤ� */
6375 	else if (i == 0x0a) key_scan[i] |= 0x7f;	/* CAPS��Ĥ� */
6376 	else                key_scan[i]  = 0xff;
6377     }
6378 
6379     /* ���ߤΡ��ꥻ�åȾ������� */
6380     quasi88_get_reset_cfg(&reset_req);
6381 
6382     /* ���ߤΡ�������ɤ��������¸ */
6383     sd_cfg_save();
6384 
6385     cpu_timing_save = cpu_timing;
6386 
6387     widget_reset_boot    = NULL;
6388 
6389 
6390     status_message_default(0, " MENU ");
6391     status_message_default(1, "<ESC> key to return");
6392     status_message_default(2, NULL);
6393 
6394 
6395 
6396     /* �������顢Q8TK ��Ϣ�ν���� */
6397     {
6398 	Q8tkWidget *notebook;
6399 
6400 	/* Q8TK ����� */
6401 	q8tk_init();
6402 
6403 	/* Q8TK ʸ�������ɥ��å� */
6404 	if     (strcmp(menu_kanji_code, menu_kanji_code_euc) == 0)
6405 	{
6406 	    q8tk_set_kanjicode(Q8TK_KANJI_EUC);
6407 	}
6408 	else if (strcmp(menu_kanji_code, menu_kanji_code_sjis) == 0)
6409 	{
6410 	    q8tk_set_kanjicode(Q8TK_KANJI_SJIS);
6411 	}
6412 	else if (strcmp(menu_kanji_code, menu_kanji_code_utf8) == 0)
6413 	{
6414 	    q8tk_set_kanjicode(Q8TK_KANJI_UTF8);
6415 	}
6416 	else
6417 	{
6418 	    q8tk_set_kanjicode(Q8TK_KANJI_ANK);
6419 	}
6420 
6421 	/* Q8TK ��������̵ͭ���� (��������˸Ƥ�ɬ�פ���) */
6422 	q8tk_set_cursor(now_swcursor);
6423 
6424 	/* Q8TK ��˥塼���� */
6425 	notebook = menu_top();
6426 	q8tk_notebook_set_page(notebook, menu_last_page);
6427     }
6428 }
6429 
6430 
6431 
menu_main(void)6432 void	menu_main(void)
6433 {
6434     /* Q8TK �ᥤ����� */
6435     q8tk_main_loop();
6436 
6437 
6438     /* ��˥塼��ȴ�����顢��˥塼���ѹ��������Ƥ˱����ơ��ƽ���� */
6439     if (quasi88_event_flags & EVENT_MODE_CHANGED) {
6440 
6441 	if (quasi88_event_flags & EVENT_QUIT) {
6442 
6443 	    /* QUASI88��λ���ϡ��ʤˤ⤷�ʤ�      */
6444 	    /* (�ƽ�������Ƥ⤹���˽�λ�ʤΤǡ�) */
6445 
6446 	} else {
6447 
6448 #ifdef	USE_SOUND
6449 	    if (sd_cfg_has_changed()) {	/* ������ɴ�Ϣ��������ѹ�������� */
6450 		menu_sound_restart(TRUE);     /* ������ɥɥ饤�Фκƽ���� */
6451 	    }
6452 #endif
6453 
6454 	    if (cpu_timing_save != cpu_timing) {
6455 		emu_reset();
6456 	    }
6457 
6458 	    pc88main_bus_setup();
6459 	    pc88sub_bus_setup();
6460 	}
6461 
6462     } else {
6463 
6464 	quasi88_event_flags |= EVENT_FRAME_UPDATE;
6465     }
6466 }
6467 
6468 
6469 /*---------------------------------------------------------------------------*/
6470 /*
6471  * ���ߤΥ�����ɤ������ͤ������� (��˥塼���ϻ��˸ƤӽФ�)
6472  */
sd_cfg_save(void)6473 static	void	sd_cfg_save(void)
6474 {
6475     int i;
6476     T_SNDDRV_CONFIG *p;
6477 
6478 
6479     memset(&sd_cfg_init, 0, sizeof(sd_cfg_init));
6480     memset(&sd_cfg_now,  0, sizeof(sd_cfg_now));
6481 
6482     sd_cfg_init.sound_board = sound_board;
6483 
6484 #ifdef	USE_SOUND
6485     sd_cfg_init.sample_freq = xmame_cfg_get_sample_freq();
6486     sd_cfg_init.use_samples = xmame_cfg_get_use_samples();
6487 
6488 #ifdef	USE_FMGEN
6489     sd_cfg_init.use_fmgen = xmame_cfg_get_use_fmgen();
6490 #endif
6491 
6492     p = xmame_config_get_sndopt_tbl();
6493 
6494     if (p == NULL) {
6495 
6496 	i = 0;
6497 
6498     } else {
6499 
6500 	for (i=0; i<NR_SD_CFG_LOCAL; i++, p++) {
6501 	    if (p->type == SNDDRV_NULL) break;
6502 
6503 	    sd_cfg_init.local[i].info = p;
6504 
6505 	    switch (p->type) {
6506 	    case SNDDRV_INT:
6507 		sd_cfg_init.local[i].val.i = *((int *)(p->work));
6508 		break;
6509 
6510 	    case SNDDRV_FLOAT:
6511 		sd_cfg_init.local[i].val.f = *((float *)(p->work));
6512 		break;
6513 	    }
6514 	}
6515     }
6516 
6517     sd_cfg_init.local_cnt = i;
6518 
6519 #endif
6520 
6521     sd_cfg_now = sd_cfg_init;
6522 }
6523 
6524 /*
6525  * ������ɤ������ͤ������������ͤȰ㤦�ȡ������֤� (��˥塼��λ���˥����å�)
6526  */
sd_cfg_has_changed(void)6527 static	int	sd_cfg_has_changed(void)
6528 {
6529 #ifdef	USE_SOUND
6530     int i;
6531     T_SNDDRV_CONFIG *p;
6532 
6533     /* ������ɥܡ��ɤ��ѹ������������å����������㤦������ */
6534     if (sd_cfg_init.sound_board != sound_board) {
6535 	return TRUE;
6536     }
6537 
6538 
6539 #ifdef	USE_FMGEN
6540     if (sd_cfg_init.use_fmgen != sd_cfg_now.use_fmgen) {
6541 	return TRUE;
6542     }
6543 #endif
6544 
6545     if (sd_cfg_init.sample_freq != sd_cfg_now.sample_freq) {
6546 	return TRUE;
6547     }
6548 
6549     if (sd_cfg_init.use_samples != sd_cfg_now.use_samples) {
6550 	return TRUE;
6551     }
6552 
6553     for (i = 0; i<sd_cfg_init.local_cnt; i++) {
6554 
6555 	p = sd_cfg_init.local[i].info;
6556 
6557 	switch (p->type) {
6558 	case SNDDRV_INT:
6559 	    if (sd_cfg_init.local[i].val.i != sd_cfg_now.local[i].val.i) {
6560 		return TRUE;
6561 	    }
6562 	    break;
6563 
6564 	case SNDDRV_FLOAT:
6565 	    if (sd_cfg_init.local[i].val.f != sd_cfg_now.local[i].val.f) {
6566 		return TRUE;
6567 	    }
6568 	    break;
6569 	}
6570     }
6571 #endif
6572 
6573     return FALSE;
6574 }
6575 
menu_sound_restart(int output)6576 void	menu_sound_restart(int output)
6577 {
6578     xmame_sound_resume();		/* ���Ǥ���������ɤ�������� */
6579     xmame_sound_stop();			/* ������ɤ���ߤ����롣     */
6580     xmame_sound_start();		/* �����ơ�������ɺƽ����   */
6581 
6582 
6583     /* ������ɥɥ饤�Ф�ƽ��������ȡ�WAV���Ϥ���³�Ǥ��ʤ���礬���� */
6584     if (xmame_wavout_damaged()) {
6585 	quasi88_waveout(FALSE);
6586 	XPRINTF("*** Waveout Stop ***\n");
6587     }
6588 
6589 
6590     /* �����ꥹ�����Ȼ��ϡ��ݡ��Ȥκƽ�����ϡ��ƤӽФ����ˤƼ»ܤ��롣
6591        �����Ǥʤ����ϡ������Ǻƽ���� */
6592     if (output) {
6593 	sound_output_after_stateload();
6594     }
6595 
6596 
6597     /* ��˥塼�⡼�ɤǤ��δؿ����ƤФ줿���������ơ�����ꥻ�å� */
6598     sd_cfg_save();
6599 
6600 
6601     XPRINTF("*** Sound Setting Is Applied ***\n\n");
6602 }
6603