diff --git a/bochs/gui/enh_dbg.cc b/bochs/gui/enh_dbg.cc index 154f89a04..1d121d2e8 100644 --- a/bochs/gui/enh_dbg.cc +++ b/bochs/gui/enh_dbg.cc @@ -8,7 +8,7 @@ // // Modified by Bruce Ewing // -// Copyright (C) 2008-2013 The Bochs Project +// Copyright (C) 2008-2014 The Bochs Project #include "config.h" @@ -76,6 +76,7 @@ bx_bool ignoreNxtT = TRUE; // Do not show "Next at t=" output lines bx_bool ignSSDisasm = TRUE; // Do not show extra disassembly line at each break int UprCase = 0; // 1 = convert all Asm, Register names, Register values to uppercase int DumpInAsciiMode = 3; // bit 1 = show ASCII in dumps, bit 2 = show hex, value=0 is illegal +bx_bool LogView = 0; // Send log to output window bx_bool isLittleEndian = TRUE; int DefaultAsmLines = 512; // default # of asm lines disassembled and "cached" @@ -3382,6 +3383,12 @@ void ActivateMenuItem (int cmd) ResizeColmns = TRUE; // column widths are font dependent if (NewFont() != FALSE) VSizeChange(); + break; + + case CMD_LOGVIEW: // Toggle sending log to output window + LogView ^= 1; + SIM->set_log_viewer(LogView); + break; } } @@ -3419,6 +3426,12 @@ BxEvent *enh_dbg_notify_callback(void *unused, BxEvent *event) ParseIDText(event->u.logmsg.msg); return event; } + case BX_ASYNC_EVT_LOG_MSG: + if (LogView) { + ParseIDText(event->u.logmsg.msg); + free((void*)event->u.logmsg.msg); + return event; + } default: return (*old_callback)(old_callback_arg, event); } diff --git a/bochs/gui/enh_dbg.h b/bochs/gui/enh_dbg.h index 0885aadca..d89fcee36 100644 --- a/bochs/gui/enh_dbg.h +++ b/bochs/gui/enh_dbg.h @@ -8,7 +8,7 @@ // // Modified by Bruce Ewing // -// Copyright (C) 2008-2013 The Bochs Project +// Copyright (C) 2008-2014 The Bochs Project #ifndef BX_ENH_DBG_DEF_H @@ -87,6 +87,7 @@ extern bx_bool vgaw_refresh; #define CHK_CMD_IGNNT CMD_IGNNT #define CHK_CMD_RCLR CMD_RCLR #define CHK_CMD_EREG CMD_EREG +#define CHK_CMD_LOGVIEW CMD_LOGVIEW #else // GTK+ @@ -110,6 +111,7 @@ extern bx_bool vgaw_refresh; #define XMM_R 16 #define D_REG 17 //#define T_REG 18 +#define LOG_VIEW 19 #define CHK_CMD_MODEB MODE_BRK #define CHK_CMD_ONECPU ONE_CPU @@ -123,6 +125,7 @@ extern bx_bool vgaw_refresh; #define CHK_CMD_IGNNT IGN_NT #define CHK_CMD_RCLR R_CLR #define CHK_CMD_EREG E_REG +#define CHK_CMD_LOGVIEW LOG_VIEW #endif @@ -165,6 +168,7 @@ extern bx_bool ignoreNxtT; // Do not show "Next at t=" output lines extern bx_bool ignSSDisasm; // Do not show extra disassembly line at each break extern int UprCase; // 1 = convert all Asm, Register names, Register values to uppercase extern int DumpInAsciiMode; // bit 1 = show ASCII in dumps, bit 2 = show hex, value=0 is illegal +extern bx_bool LogView; // Send log to output window extern bx_bool isLittleEndian; diff --git a/bochs/gui/gtk_enh_dbg_osdep.cc b/bochs/gui/gtk_enh_dbg_osdep.cc index 451869fa8..5127c0f07 100644 --- a/bochs/gui/gtk_enh_dbg_osdep.cc +++ b/bochs/gui/gtk_enh_dbg_osdep.cc @@ -8,7 +8,7 @@ // // Modified by Bruce Ewing // -// Copyright (C) 2008-2013 The Bochs Project +// Copyright (C) 2008-2014 The Bochs Project #include "config.h" @@ -65,8 +65,8 @@ void ActivateMenuItem (int LW); void SetMemLine (int L); void MakeBL(TreeParent *tp, bx_param_c *p); -#define NUM_CHKS 24 // slight overestimate of # of Optmenu items with checkmarks -#define WSChkIdx 19 // "checkmark index" of the first "wordsize" menu item +#define NUM_CHKS 25 // slight overestimate of # of Optmenu items with checkmarks +#define WSChkIdx 20 // "checkmark index" of the first "wordsize" menu item // reverse mapping from command indexes to menu item widgets GtkWidget *Cmd2MI[CMD_IDX_HI - CMD_IDX_LO + 1]; @@ -144,6 +144,7 @@ GtkWidget *sep4; GtkWidget *sep5; GtkWidget *sep6; GtkWidget *sep7; +GtkWidget *sep10; GtkWidget *sep8; // separators around the ListViews GtkWidget *sep9; @@ -336,6 +337,7 @@ void InitMenus() ChkMIs[XMM_R] = gtk_check_menu_item_new_with_label("Show SSE Registers\t\tCtrl+F4"); ChkMIs[D_REG] = gtk_check_menu_item_new_with_label("Show Debug Registers\t\tShift+F4"); // ChkMIs[T_REG] = gtk_check_menu_item_new_with_label("Show Test Registers"); + ChkMIs[LOG_VIEW] = gtk_check_menu_item_new_with_label("Show log in output window"); ChkMIs[WSChkIdx] = gtk_check_menu_item_new_with_label("1 byte\t\tAlt+1"); ChkMIs[WSChkIdx+1] = gtk_check_menu_item_new_with_label("2 bytes\t\tAlt+2"); ChkMIs[WSChkIdx+2] = gtk_check_menu_item_new_with_label("4 bytes\t\tAlt+4"); @@ -352,6 +354,7 @@ void InitMenus() sep5 = gtk_separator_menu_item_new(); sep6 = gtk_separator_menu_item_new(); sep7 = gtk_separator_menu_item_new(); + sep10 = gtk_separator_menu_item_new(); // insert all the menu items into each menu gtk_menu_shell_append(GTK_MENU_SHELL(CmdMenu), ContMI); @@ -405,6 +408,8 @@ void InitMenus() gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[XMM_R]); gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[D_REG]); // gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[T_REG]); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), sep10); + gtk_menu_shell_append(GTK_MENU_SHELL(OptMenu), ChkMIs[LOG_VIEW]); gtk_menu_shell_append(GTK_MENU_SHELL(HelpMenu), AboutMI); gtk_menu_item_set_submenu(GTK_MENU_ITEM(WrdSizeMI), WSmenu); // set up popup menu @@ -432,6 +437,7 @@ void InitMenus() gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[IGN_SA]), ignSSDisasm); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[IGN_NT]), ignoreNxtT); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[R_CLR]), SeeRegColors); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[LOG_VIEW]), LogView); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ChkMIs[WSChkIdx]), TRUE); if (DumpInAsciiMode == 0) // prevent an illegal value DumpInAsciiMode = 3; @@ -1747,6 +1753,7 @@ void AttachSignals() Cmd2MI[CMD_DREG - CMD_IDX_LO + 1] = ChkMIs[D_REG]; // g_signal_connect (G_OBJECT(ChkMIs[T_REG]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_TREG); // Cmd2MI[CMD_TREG - CMD_IDX_LO + 1] = ChkMIs[T_REG]; + g_signal_connect (G_OBJECT(ChkMIs[CHK_CMD_LOGVIEW]), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_LOGVIEW); g_signal_connect (G_OBJECT(AboutMI), "activate", GTK_SIGNAL_FUNC(nbCmd_cb), (gpointer) CMD_ABOUT); diff --git a/bochs/gui/wenhdbg_res.h b/bochs/gui/wenhdbg_res.h index 07bb56b52..93c6eae65 100644 --- a/bochs/gui/wenhdbg_res.h +++ b/bochs/gui/wenhdbg_res.h @@ -8,6 +8,7 @@ // // Modified by Bruce Ewing // +// Copyright (C) 2008-2014 The Bochs Project #ifndef BX_ENH_DBG_RES_H #define BX_ENH_DBG_RES_H @@ -62,7 +63,9 @@ #define CMD_DREG 148 #define CMD_TREG 149 -#define CMD_ABOUT 150 +#define CMD_LOGVIEW 150 + +#define CMD_ABOUT 151 // The CMD_WS popup menuID's must be strictly "contiguous" and in-order #define CMD_WS_1 160 diff --git a/bochs/win32_enh_dbg.rc b/bochs/win32_enh_dbg.rc index 7b19482b8..2f9699e64 100644 --- a/bochs/win32_enh_dbg.rc +++ b/bochs/win32_enh_dbg.rc @@ -67,6 +67,8 @@ MENU_1 MENU MENUITEM "Show SSE Registers\tCtrl+F4",CMD_XMMR MENUITEM "Show Debug Registers\tShift+F4",CMD_DREG MENUITEM "Show Test Registers",CMD_TREG + MENUITEM SEPARATOR + MENUITEM "Show log in output window",CMD_LOGVIEW END POPUP "&Help" BEGIN