--- np2/x11/gtk/Attic/gtk_menu.c 2003/12/19 16:08:02 1.2 +++ np2/x11/gtk/Attic/gtk_menu.c 2005/03/05 13:25:17 1.10 @@ -44,10 +44,13 @@ #include "pc9861k.h" #include "s98.h" #include "scrnbmp.h" +#include "sxsi.h" #include "kdispwin.h" #include "toolwin.h" #include "viewer.h" +#include "debugwin.h" +#include "skbdwin.h" #include "mousemng.h" #include "scrnmng.h" @@ -57,7 +60,6 @@ #include "gtk/gtk_menu.h" #include "gtk/gtk_keyboard.h" -#include #include @@ -76,10 +78,14 @@ static void exit_from_menu(gpointer, gui static void reset(gpointer, guint, GtkWidget *); static void rotate(gpointer, guint, GtkWidget *); -static void fddopen(gpointer, guint, GtkWidget *); -static void fddeject(gpointer, guint, GtkWidget *); +static void fddopen(GtkMenuItem *, gpointer); +static void fddeject(GtkMenuItem *, gpointer); static void sasiopen(gpointer, guint, GtkWidget *); static void sasiremove(gpointer, guint, GtkWidget *); +#if defined(SUPPORT_IDEIO) +static void atapiopen(gpointer, guint, GtkWidget *); +static void atapiremove(gpointer, guint, GtkWidget *); +#endif static void change_font(gpointer, guint, GtkWidget *); @@ -109,15 +115,17 @@ enum { static void sound_board(gpointer, guint, GtkWidget *); enum { - NOSOUNDBOARD = 0, - PC9801_14 = 1, - PC9801_26K = 2, - PC9801_86 = 4, - PC9801_118 = 8, - CHIBI_OTO = 0x14, - SPEAK_BOARD = 0x20, - SPARK_BOARD = 0x40, - AMD98_BOARD = 0x80 + PC9801_14 = 0x01, + PC9801_26K = 0x02, + PC9801_86 = 0x04, + PC9801_118 = 0x08, + CHIBI_OTO = 0x10, + SPEAK_BOARD = 0x20, + SPARK_BOARD = 0x40, + AMD98_BOARD = 0x80, + PC9801_26K_86 = (PC9801_26K|PC9801_86), + PC9801_86_CB = (PC9801_86|CHIBI_OTO), + NOSOUNDBOARD = 0x00 }; static void memory(gpointer, guint, GtkWidget *); @@ -132,6 +140,9 @@ static void memory_dump(GtkWidget *w, Gd #if defined(SUPPORT_VIEWER) static void debug_utility(GtkWidget *w, GdkEvent *e); #endif +#if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) +static void memory_debug(GtkWidget *w, GdkEvent *e); +#endif static void toggle(gpointer, guint, GtkWidget *); @@ -216,23 +227,25 @@ static GtkItemFactoryEntry menu_items[] { "/Emulate/sep2", NULL, NULL, 0, "" }, { "/Emulate/E_xit", NULL, f(exit_from_menu), 0, NULL }, { "/FDD", NULL, NULL, 0, "" }, -{ "/FDD/Drive_1", NULL, NULL, 0, "" }, -{ "/FDD/Drive1/_Open...", NULL, f(fddopen), 0, NULL }, -{ "/FDD/Drive1/_Eject", NULL, f(fddeject), 0, NULL }, -{ "/FDD/Drive_2", NULL, NULL, 0, "" }, -{ "/FDD/Drive2/_Open...", NULL, f(fddopen), 1, NULL }, -{ "/FDD/Drive2/_Eject", NULL, f(fddeject), 1, NULL }, -{ "/FDD/sep1", NULL, NULL, 0, "" }, -{ "/FDD/_Eject All", NULL, f(fddeject), ~0, NULL }, { "/HardDisk", NULL, NULL, 0, "" }, +#if !defined(SUPPORT_IDEIO) { "/HardDisk/SASI-_1", NULL, NULL, 0, "" }, { "/HardDisk/SASI-1/_Open...", NULL, f(sasiopen), 0, NULL }, { "/HardDisk/SASI-1/_Remove", NULL, f(sasiremove), 0, NULL }, { "/HardDisk/SASI-_2", NULL, NULL, 0, "" }, { "/HardDisk/SASI-2/_Open...", NULL, f(sasiopen), 1, NULL }, { "/HardDisk/SASI-2/_Remove", NULL, f(sasiremove), 1, NULL }, -{ "/HardDisk/sep1", NULL, NULL, 0, "" }, -{ "/HardDisk/_Remove All", NULL, f(sasiremove), ~0, NULL }, +#else +{ "/HardDisk/IDE0-_0", NULL, NULL, 0, "" }, +{ "/HardDisk/IDE0-0/_Open...", NULL, f(sasiopen), 0, NULL }, +{ "/HardDisk/IDE0-0/_Remove", NULL, f(sasiremove), 0, NULL }, +{ "/HardDisk/IDE0-_1", NULL, NULL, 0, "" }, +{ "/HardDisk/IDE0-1/_Open...", NULL, f(sasiopen), 1, NULL }, +{ "/HardDisk/IDE0-1/_Remove", NULL, f(sasiremove), 1, NULL }, +{ "/HardDisk/_CD-ROM", NULL, NULL, 0, "" }, +{ "/HardDisk/CD-ROM/_Open...", NULL, f(atapiopen), 0x02, NULL }, +{ "/HardDisk/CD-ROM/_Remove", NULL, f(atapiremove), 0x02, NULL}, +#endif { "/Screen", NULL, NULL, 0, "" }, { "/Screen/_Window", NULL, NULL, 0, "" }, { "/Screen/_FullScreen", NULL, NULL, 0, "/Screen/Window" }, @@ -264,8 +277,8 @@ static GtkItemFactoryEntry menu_items[] { "/Device/Keyboard/F12 = _Mouse", NULL, f(f12), 0, "" }, { "/Device/Keyboard/F12 = Co_py",NULL, f(f12),1,"/Device/Keyboard/F12 = Mouse"}, { "/Device/Keyboard/F12 = S_top",NULL, f(f12),2,"/Device/Keyboard/F12 = Copy" }, -{ "/Device/Keyboard/F12 = tenkey [=]", NULL, f(f12),3,"/Device/Keyboard/F12 = Stop" }, -{ "/Device/Keyboard/F12 = tenkey [,]", NULL, f(f12),4,"/Device/Keyboard/F12 = tenkey [=]" }, +{ "/Device/Keyboard/F12 = tenkey [=]", NULL, f(f12),4,"/Device/Keyboard/F12 = Stop" }, +{ "/Device/Keyboard/F12 = tenkey [,]", NULL, f(f12),3,"/Device/Keyboard/F12 = tenkey [=]" }, { "/Device/_Sound", NULL, NULL, 0, "" }, { "/Device/Sound/Beep _off", NULL, f(beepvol), BEEP_OFF, "" }, { "/Device/Sound/Beep _low", NULL, f(beepvol), BEEP_LOW, "/Device/Sound/Beep off" }, @@ -276,13 +289,15 @@ static GtkItemFactoryEntry menu_items[] { "/Device/Sound/PC-9801-_14", NULL, f(sound_board), PC9801_14, "/Device/Sound/Disable board" }, { "/Device/Sound/PC-9801-_26K", NULL, f(sound_board), PC9801_26K, "/Device/Sound/PC-9801-14" }, { "/Device/Sound/PC-9801-8_6", NULL, f(sound_board), PC9801_86, "/Device/Sound/PC-9801-26K" }, -{ "/Device/Sound/PC-9801-11_8", NULL, f(sound_board), PC9801_118, "/Device/Sound/PC-9801-86" }, -{ "/Device/Sound/_Chibi-oto", NULL, f(sound_board), CHIBI_OTO, "/Device/Sound/PC-9801-118" }, -{ "/Device/Sound/S_peak board", NULL, f(sound_board), SPEAK_BOARD, "/Device/Sound/Chibi-oto" }, +{ "/Device/Sound/PC-9801-26_K+86", NULL, f(sound_board), PC9801_26K_86, "/Device/Sound/PC-9801-86" }, +{ "/Device/Sound/PC-9801-86+_Chibi-oto", NULL, f(sound_board), PC9801_86_CB, "/Device/Sound/PC-9801-26K+86" }, +{ "/Device/Sound/PC-9801-11_8", NULL, f(sound_board), PC9801_118, "/Device/Sound/PC-9801-86+Chibi-oto" }, +{ "/Device/Sound/S_peak board", NULL, f(sound_board), SPEAK_BOARD, "/Device/Sound/PC-9801-118" }, { "/Device/Sound/Sp_ark board", NULL, f(sound_board), SPARK_BOARD, "/Device/Sound/Speak board" }, -{ "/Device/Sound/_AMD98", NULL, f(sound_board), SPARK_BOARD, "/Device/Sound/Spark board" }, +{ "/Device/Sound/_AMD98", NULL, f(sound_board), AMD98_BOARD, "/Device/Sound/Spark board" }, +{ "/Device/Sound/_Jast Sound", NULL, f(toggle), JAST_SOUND, "" }, { "/Device/Sound/sep2", NULL, NULL, 0, "" }, -{ "/Device/Sound/_Seek Sound", NULL, NULL, 0, "" }, +{ "/Device/Sound/_Seek Sound", NULL, f(toggle), SEEK_SOUND, "" }, { "/Device/M_emory", NULL, NULL, 0, "" }, { "/Device/Memory/64_0KB", NULL, f(memory), 0, "" }, { "/Device/Memory/_1.6MB", NULL, f(memory), 1, "/Device/Memory/640KB" }, @@ -318,6 +333,7 @@ static GtkItemFactoryEntry menu_items[] { "/Other/sep1", NULL, NULL, 0, "" }, { "/Other/_Tool Window", NULL, f(toggle), TOOL_WINDOW, "" }, { "/Other/_Key Display", NULL, f(toggle), KEY_DISPLAY, "" }, +{ "/Other/S_oftware Keyboard", NULL, f(toggle), SOFT_KBD, "" }, { "/Other/sep2", NULL, NULL, 0, "" }, { "/Other/_About...", NULL, f(_create_about_dialog), 0, NULL }, }; @@ -347,6 +363,8 @@ static struct { { "/Other/S98 logging...", 0, 0 }, { "/Other/Tool Window", 0, SYS_UPDATEOSCFG }, { "/Other/Key Display", 0, SYS_UPDATEOSCFG }, + { "/Other/Software Keyboard", 0, SYS_UPDATEOSCFG }, + { "/Device/Sound/Jast Sound", 0, SYS_UPDATEOSCFG }, }; static _MENU_HDL menu_hdl; @@ -356,15 +374,17 @@ static BOOL inited = FALSE; * menu initialize */ GtkWidget * -create_menu(GtkWidget *w) +create_menu(void) { GtkAccelGroup *accel_group; GtkWidget *menubar; + int i; accel_group = gtk_accel_group_new(); menu_hdl.item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "
", accel_group); gtk_item_factory_create_items(menu_hdl.item_factory, NELEMENTS(menu_items), menu_items, NULL); - gtk_accel_group_attach(accel_group, GTK_OBJECT(w)); + + menubar = gtk_item_factory_get_widget(menu_hdl.item_factory, "
"); disable_unused_items(); @@ -383,6 +403,8 @@ create_menu(GtkWidget *w) xmenu_toggle_item(MOUSE_RAPID, np2cfg.MOUSERAPID, TRUE); xmenu_toggle_item(TOOL_WINDOW, np2oscfg.toolwin, TRUE); xmenu_toggle_item(KEY_DISPLAY, np2oscfg.keydisp, TRUE); + xmenu_toggle_item(SOFT_KBD, np2oscfg.softkbd, TRUE); + xmenu_toggle_item(JAST_SOUND, np2oscfg.jastsnd, TRUE); xmenu_select_framerate(np2oscfg.DRAW_SKIP); xmenu_select_f12key(np2oscfg.F12KEY); @@ -391,9 +413,52 @@ create_menu(GtkWidget *w) xmenu_select_extmem(np2cfg.EXTMEM); xmenu_select_mouse_move_ratio(np2oscfg.mouse_move_ratio); - inited = 1; + if (np2cfg.fddequip) { + GtkWidget *fddmenu; + GtkWidget *sep; + GtkWidget *ejectall; + + fddmenu = gtk_item_factory_get_widget(menu_hdl.item_factory, "/FDD"); + for (i = 0; i < 4; i++) { + if (np2cfg.fddequip & (1 << i)) { + char label[32]; + GtkWidget *menu, *menuitem, *openitem, *ejectitem; + + menu = gtk_menu_new(); + + openitem = gtk_menu_item_new_with_label("Open..."); + gtk_widget_show(openitem); + gtk_menu_append(GTK_MENU(menu), openitem); + gtk_signal_connect(GTK_OBJECT(openitem), + "activate", GTK_SIGNAL_FUNC(fddopen), (gpointer)i); + + ejectitem = gtk_menu_item_new_with_label("Eject"); + gtk_widget_show(ejectitem); + gtk_menu_append(GTK_MENU(menu), ejectitem); + gtk_signal_connect(GTK_OBJECT(ejectitem), + "activate", GTK_SIGNAL_FUNC(fddeject), (gpointer)i); + + g_snprintf(label, sizeof(label), "Drive%d", i+1); + menuitem = gtk_menu_item_new_with_label(label); + gtk_widget_show(menuitem); - menubar = gtk_item_factory_get_widget(menu_hdl.item_factory, "
"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); + gtk_menu_append(GTK_MENU(fddmenu), menuitem); + + } + } + sep = gtk_menu_item_new(); + gtk_widget_show(sep); + gtk_menu_append(GTK_MENU(fddmenu), sep); + + ejectall = gtk_menu_item_new_with_label("Eject All"); + gtk_widget_show(ejectall); + gtk_menu_append(GTK_MENU(fddmenu), ejectall); + gtk_signal_connect_object(GTK_OBJECT(ejectall), + "activate", GTK_SIGNAL_FUNC(fddeject), (gpointer)~0); + } + + inited = 1; if (np2oscfg.I286SAVE) { GtkWidget *debug_menu; @@ -403,6 +468,9 @@ create_menu(GtkWidget *w) #if defined(SUPPORT_VIEWER) GtkWidget *dbgutil_item; #endif +#if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) + GtkWidget *memdbg_item; +#endif debug_menu = gtk_menu_new(); @@ -426,6 +494,14 @@ create_menu(GtkWidget *w) GTK_SIGNAL_FUNC(debug_utility), (gpointer)0); #endif +#if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) + memdbg_item = gtk_menu_item_new_with_label("Memory Map"); + gtk_widget_show(memdbg_item); + gtk_menu_append(GTK_MENU(debug_menu), memdbg_item); + gtk_signal_connect_object(GTK_OBJECT(memdbg_item), "activate", + GTK_SIGNAL_FUNC(memory_debug), (gpointer)0); +#endif + debug_item = gtk_menu_item_new_with_label("Debug"); gtk_menu_item_right_justify(GTK_MENU_ITEM(debug_item)); gtk_widget_show(debug_item); @@ -450,12 +526,19 @@ disable_unused_items(void) "/Device/Sound/PC-9801-14", "/Device/Sound/PC-9801-26K", "/Device/Sound/PC-9801-86", + "/Device/Sound/PC-9801-26K+86", + "/Device/Sound/PC-9801-86+Chibi-oto", "/Device/Sound/PC-9801-118", - "/Device/Sound/Chibi-oto", "/Device/Sound/Speak board", "/Device/Sound/Spark board", "/Device/Sound/AMD98", - "/Device/Sound/Seek Sound" + "/Device/Sound/Seek Sound", +#endif +#if !defined(SUPPORT_KEYDISP) + "/Other/Key Display", +#endif +#if !defined(SUPPORT_SOFTKBD) + "/Other/Software Keyboard", #endif }; int i; @@ -492,8 +575,9 @@ xmenu_toggle_item(int arg, int onoff, in if (arg < NELEMENTS(toggle_items)) { if (onoff != toggle_items[arg].stat) { toggle_items[arg].stat = onoff; - if (emitp) + if (emitp) { xmenu_select_item(&menu_hdl, toggle_items[arg].name); + } if (inited && arg != MOUSE_MODE) { sysmng_update(toggle_items[arg].flag); } @@ -570,8 +654,9 @@ xmenu_select_soundboard(int kind) { "/Device/Sound/PC-9801-14", PC9801_14 }, { "/Device/Sound/PC-9801-26K", PC9801_26K }, { "/Device/Sound/PC-9801-86", PC9801_86 }, + { "/Device/Sound/PC-9801-26K+86", PC9801_26K_86 }, + { "/Device/Sound/PC-9801-86+Chibi-oto", PC9801_86_CB }, { "/Device/Sound/PC-9801-118", PC9801_118 }, - { "/Device/Sound/Chibi-oto", CHIBI_OTO }, { "/Device/Sound/Speak board", SPEAK_BOARD }, { "/Device/Sound/Spark board", SPARK_BOARD }, { "/Device/Sound/AMD98", AMD98_BOARD }, @@ -588,7 +673,7 @@ xmenu_select_soundboard(int kind) #else UNUSED(kind); - np2cfg.SOUND_SW = 0; + np2cfg.SOUND_SW = NOSOUNDBOARD; xmenu_select_item(&menu_hdl, "/Device/Sound/Disable board"); #endif } @@ -660,7 +745,7 @@ exit_from_menu(gpointer data, guint acti UNUSED(action); UNUSED(w); - gtk_widget_destroy(GTK_WIDGET(window)); + gtk_widget_destroy(GTK_WIDGET(main_window)); } static void @@ -706,28 +791,28 @@ fddopen_dialog_ok_cb(void *arg, const ch } static void -fddopen(gpointer data, guint action, GtkWidget *w) +fddopen(GtkMenuItem *w, gpointer data) { - UNUSED(data); UNUSED(w); - create_file_selection("Open FDD image", fddfolder, (void *)action, - fddopen_dialog_ok_cb, NULL); + create_file_selection("Open floppy disk image", + fddfolder, (void *)data, fddopen_dialog_ok_cb, NULL); } static void -fddeject(gpointer data, guint action, GtkWidget *w) +fddeject(GtkMenuItem *w, gpointer data) { + guint action = (guint)data; int i; - UNUSED(data); UNUSED(w); if (action == (guint)~0) { - for (i = 0; i < 4; i++) + for (i = 0; i < 4; i++) { diskdrv_setfdd(i, NULL, FALSE); toolwin_setfdd(i, NULL); + } } else { diskdrv_setfdd(action, NULL, FALSE); toolwin_setfdd(action, NULL); @@ -735,7 +820,7 @@ fddeject(gpointer data, guint action, Gt } -/* ----- SASI */ +/* ----- SASI/IDE */ static BOOL sasiopen_dialog_ok_cb(void *arg, const char *path) { @@ -762,7 +847,7 @@ sasiopen(gpointer data, guint action, Gt UNUSED(data); UNUSED(w); - create_file_selection("Open SASI image", hddfolder, (void *)action, + create_file_selection("Open hard disk image", hddfolder, (void *)action, sasiopen_dialog_ok_cb, NULL); } @@ -775,14 +860,58 @@ sasiremove(gpointer data, guint action, UNUSED(w); if (action == (guint)~0) { - for (i = 0; i < 2; i++) + for (i = 0; i < 2; i++) { diskdrv_sethdd(i, ""); + } } else { diskdrv_sethdd(action, ""); } +} + +#if defined(SUPPORT_IDEIO) +/* ---- ATAPI */ +static BOOL +atapiopen_dialog_ok_cb(void *arg, const char *path) +{ + struct stat sb; + int drive = GPOINTER_TO_UINT(arg); + BOOL result = FALSE; + + if (stat(path, &sb) == 0) { + if (S_ISREG(sb.st_mode) && (sb.st_mode & S_IRUSR)) { + file_cpyname(hddfolder, path, sizeof(hddfolder)); + sxsi_devopen(drive, path); + result = TRUE; + } + } + + return result; +} + +static void +atapiopen(gpointer data, guint action, GtkWidget *w) +{ + + UNUSED(data); + UNUSED(w); + create_file_selection("Open CD-ROM image", hddfolder, + GUINT_TO_POINTER(action), atapiopen_dialog_ok_cb, NULL); } +static void +atapiremove(gpointer data, guint action, GtkWidget *w) +{ + + UNUSED(data); + UNUSED(w); + + if (action == 0x02) { + sxsi_devclose(action); + } +} +#endif + /* ---- font */ static BOOL font_change_dialog_ok_cb(void *arg, const char *path) @@ -944,15 +1073,15 @@ sound_board(gpointer data, guint action, switch (action) { case NOSOUNDBOARD: - case PC9801_86: case PC9801_14: case PC9801_26K: + case PC9801_86: + case PC9801_26K_86: + case PC9801_86_CB: case PC9801_118: - case CHIBI_OTO: case SPEAK_BOARD: case SPARK_BOARD: case AMD98_BOARD: - /* XXX: ÆóË纹¤· */ if (np2cfg.SOUND_SW != action) { np2cfg.SOUND_SW = action; sysmng_update(SYS_UPDATECFG); @@ -1030,6 +1159,7 @@ bmpsave_dialog_ok_cb(void *arg, const ch file_close(fh); result = TRUE; } + _MFREE(bmp); return result; } @@ -1109,6 +1239,18 @@ debug_utility(GtkWidget *w, GdkEvent *e) } #endif +#if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) +static void +memory_debug(GtkWidget *w, GdkEvent *e) +{ + + UNUSED(w); + UNUSED(e); + + debugwin_create(); +} +#endif + /* ----- toggle item */ static void toggle(gpointer data, guint action, GtkWidget *w) @@ -1140,7 +1282,7 @@ toggle(gpointer data, guint action, GtkW case SEEK_SOUND: np2cfg.MOTOR = !np2cfg.MOTOR; - xmenu_toggle_item(SEEK_SOUND, np2cfg.MOTOR, TRUE); + xmenu_toggle_item(SEEK_SOUND, np2cfg.MOTOR, FALSE); break; case MOUSE_MODE: @@ -1236,6 +1378,21 @@ toggle(gpointer data, guint action, GtkW } break; + case SOFT_KBD: + np2oscfg.softkbd = !np2oscfg.softkbd; + xmenu_toggle_item(SOFT_KBD, np2oscfg.softkbd, FALSE); + if (np2oscfg.softkbd) { + skbdwin_create(); + } else { + skbdwin_destroy(); + } + break; + + case JAST_SOUND: + np2oscfg.jastsnd = !np2oscfg.jastsnd; + xmenu_toggle_item(JAST_SOUND, np2oscfg.jastsnd, FALSE); + break; + case NUM_TOGGLE_ITEMS: default: break;