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