From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17001 invoked by alias); 17 Dec 2002 20:32:32 -0000 Mailing-List: contact insight-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: insight-owner@sources.redhat.com Received: (qmail 16893 invoked from network); 17 Dec 2002 20:32:21 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 17 Dec 2002 20:32:20 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id gBHK6Bg17266 for ; Tue, 17 Dec 2002 15:06:11 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id gBHKWJ205458 for ; Tue, 17 Dec 2002 15:32:19 -0500 Received: from dragon (romulus-int.sfbay.redhat.com [172.16.27.46]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id gBHKWHL14714 for ; Tue, 17 Dec 2002 15:32:17 -0500 Subject: [patch] Add register groups to the register window From: "Martin M. Hunt" To: "insight@sources.redhat.com" Content-Type: multipart/mixed; boundary="=-gDo3U7gaWo59OwkGzUyG" Date: Tue, 17 Dec 2002 12:32:00 -0000 Message-Id: <1040157330.1129.2.camel@Dragon> Mime-Version: 1.0 X-SW-Source: 2002-q4/txt/msg00217.txt.bz2 --=-gDo3U7gaWo59OwkGzUyG Content-Type: text/plain Content-Transfer-Encoding: 7bit Content-length: 1182 GDB now allows registers to be placed in groups, such as "float", "general", "sse", etc. This patch adds an optionmenu to the register display to allow the group to be selected. The default group is "all". Screenshot attached. 2002-12-17 Martin M. Hunt * library/regwin.itb (_load_prefs): Get list of registers from the group name. (_build_win): Remove old menu system. Replace with an optionmenu that contains all the valid group names for this architecture. (_layout_table): No need to update old menu. (_but3): Add "Close" to popup menu. (_delete_from_display): No need to update old menu. (_display_all): Ditto. (_post_menu): Deleted. (_select_group): New method. Callback for group optionmenu. * library/regwin.ith: New private variable _group. New private method _select_group. Removed _post_menu. * generic/gdbtk-register.c: Include reggroups.h. (gdb_register_info): Add "group" and "grouplist". (gdb_regformat): Fix Tcl_WrongNumArgs call so it doesn't crash. (gdb_reggrouplist): New function. Returns the names of the register groups. (gdb_reggroup): New function. Returns the register numbers of the registers in a group. --=-gDo3U7gaWo59OwkGzUyG Content-Disposition: attachment; filename=reg.png Content-Type: image/png; name=reg.png Content-Transfer-Encoding: base64 Content-length: 11859 iVBORw0KGgoAAAANSUhEUgAAAVoAAAHGCAIAAAC6l9QZAAAABmJLR0QA/wD/ AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH0gwRFB0r9ohU jwAAIABJREFUeJzt3XuUHnV9x/HvPLvJkiyXJFqRBEXkqig11MaSLmAxgXBT D964bAgSgzlgqQ2Vejza01PrSdkWDsdiewDlkm6AoxUqoQdKwBshlqhcEsJN iBCSDUUgkOtmd7PTP2Z2Mju35zfPPHP5/eb9+gNmZ2eenezzzOf5/n7PzHet WXOXCACINMo+AABVQRwAcBEHAFzEAQAXcQDARRwAcBEHAFzEAQAXcQDARRwA cBEHAFzEAQAXcQDARRwAcBEHAFzEAQBXZ9kHYJpHH7im7EPI0cdOu7LsQ0CO qA6gqq+vr+xDQL6oDnIxMDBQ9iG0WX9/f9mHgNxRHQBwEQcAXMQBABdxAMBF HABwEQcAXHzQWKgZM2Y4C5s3b25hJZAr4qA4M2bM8M5tb1l9JZA34qA4mzdv Dr/nR64UX3UAFIY4KFTke37ySqAwTCUWJ/INv2kVQJmAwlAdFEd9sBA3ggBy RRwUKvLcVl8J5IrBAgAXcQDARRwAcBEHAFzEAQAXcQDARRwAcBEHAFzEAQAX cQDARRwAcBEHAFzEAQAXdzQWxH/Dsr8JWtOV3nLRR4z6oTooiHM+e6e9c57H rfSf/IEvgfwQBxXlrxeAYhAHFeWvF4BiEAdV5NUFJAKKxFRiQcJntXonVUYN KAZxUJBAx/TA6R25MrAjkDcGCwBc2lQHa1ZeW/YhKLqm7APIkT7PQslmzV1S 9iG0QoM4cF6Ctm2n2uuPZ31p6dKlbTyMdD/eUPc88H9teJT0v8pvfvMbT675 fss/cNmyZRdddFGRu1uWJRqGQtXjYM3Ka50gWL9+vWVZlmU1Gg1rjLccXhCR p5590/9Q0S/C1s/y6Hw66xN/1PIjVt/ap99svlGYHbEU/ELBE088kfDUJ7we it997969ItLR0aFXIlQ6DpwsWLduXaonz7IsJ0Fe+8P2Nh5Mo2GNjrov4M5O a+9et17pmtgYGh51lidN6mjjT6ygrVt3HHn4Aa8M7NqzZ6+IFLk8Ojra2sns nM8F7z4wMNBoNB5//PGZM2dqlAiVjgNH2ifPsqzR0VERGRoebtcxWNa+YqCz s7F70D3/u7o6du4ecWJi8qTO7Tv2tOsnVtMxR+7/4kvbdu0eEZEPf2BqYcsi Ytt2ayezcz6XsnsJz1A21Y0DpzRIO0ZwlkdGRkRkeKhtceDp7GwM7h52smC/ ro5dO90s6J48YceOwb17DZ9h+N2LW7fvGBaRWSe865nnC1p2OCdkCydzo9EI 73755Zd7p2tgwbKsW2+9NXn3RqNx2WWXicgNN9zgrVy0aJGI3HLLLd6aQw45 5P777583b54uBUJ148AReHYXL15sWdZNN90UeG4uvvhiy7KWLVvmrByrDoYC j/aD6+Z4y/bo6Buvvv3A3U899DvVt/TOjsbuQdu2bedxFi15yMmC/bsnbNux y/gsEJE3tu4UkT+fNX3dM394e9ueYpYfWTMgIrZtt5YF1tjbe+RbdzgLZOxV l7C7kwUisnjxYufV6GSBZVmXXHLJbbfd5o8SjWgQB4EsEJFFixbdfPPNgSwQ kQULFvT391tjcwdx1cGsU77WmDDxgz2n3/z3J3/ukiPuWLxmandX0yPpaFiD w+4HHIu++sCTj68UkWOPO7W7e8L27YMjI6MiMuWg5o+jteGh4VNmH7ru6dfe eHO3iBSz7DyP4XJdMQusqGrf+edEZoGE3oSSd1+0aFHC7jk/IW1W9TjwP7v+ X/fChQudqszLAu+/jUbDOWkT5g7ed/jHdg1sF5GOCQe9tvHJ7iNnHvDeQxf3 Hv2h93aP7tj58xWP3/aLrSLSPX364ouOOf6w/bs63R993qJ7uiZ23HTdGSKn nbfongkTpOOQg7967uFHH9rd1bB3mT53cNKJ09c989qrr+0UkU+cfFhhyzI2 mddCFjhv0YHdRTkLIne/4YYbFi9eHLn7smXLAj9II1WPA/+ze9NNN/mT+JJL LpHxT8by5cudp8GtDkKDBc9ow/rYvI+KyIv3/8i2B0et/b79tzOn7Xmp99xr jr788m9fOPvhB+743cRpf/eNE2bIW0sWLv3tq3v+/a5vHd/dueH5hw874s+c B9nw/MOHH3Xi1y877qj9Gl//Ut8vf//2O2ccfM+yK/L/rbSiLZ1U1q5/deDV 7SIy9+PvL2zZ4S/XU2WBFar2HeEhp7OwYMGCpruHX43OQQaygMFCmzUaDf8v 95Zbblm4cKHzrcAzcccdd3ibudVBzGBhzS/+2Vn47a0/vPyW9Z2TjzjgmOPf PdF64ccrXt7W2fGzQeu0js8ctumaiX9xWFdjYNV/Pvry4NR3HS1jP2hwcF/K 7Nq156AOS0T+6itzZ/zs9VWPvZbLb6EdAq2WWvPSxjdFZN6pRz751JZNA9uK Wb7/py+I74RMFQTeORnYXUQ6Ojridg+86pJ/uvObiXvMLL/t4mkQB4Hf7623 3hoYIMj4LLAsy7kIxLZj5w4OPPykB24558iTpk+667Du7skHHtUlIkeef8Wj 57vbHHjMpAl2l4js2jzY2O/dnR2j3u7+h7Xt4X/418cuPveYj35k5l9+RL68 bWsev4TqsO3heZ84+qlnB17Z/LaIFLPs/MID5fpDDz105513WlEF//z58888 88zA23t4rBGXBRJ61YV3bzQaCxcuDP/0+fPneyWqRXXQdpGRv2zZsgULFsRl gTU2WLBHR+Ietmv369956M1vzem55tMbvvk/I9t/Pygiv7/7+i9c97K3zWFn DonIQcdOtRrbOiZMPniC++MmTtj3ON2TOjY99tS3Hv75Qe9517mfm/P5kw5J /uc0bY4oocYn/to+vDJyY38J0N4bIk8/9Yj1zwxs3PSWiMybc0xhyxKa24/L AhHp7+8/66yzAm/Rgd1l/Cx1clKEd4/MAufL3t5e5wXJVGL7hbPA0d/fP3/+ fInKAi8OJKY6cL615ub7njrxvJkXn3/y//5g9W8efnnwM+854wvzfvnfjw8M dU+bcsSU3U8/t3bEPuQdH/rckgseO/Tkmfs33IcdGd43Xzg0NPzpk2c8+oTs GLRX3PXrz5/0yYR/i79tgT8LAisDnRQTtpSYHmqBBGljIjz9zOaNm7aKyLw5 Hyhs2eFdFxhZpYe/9L8eIndPmHdU2d37cc7H286rMfzT2/WbL0bV4yDhyQtU Zf7vNq0O7NGRvUNvL136+PJ//NOvXv3x3yx6cMmVK744/4Qrl84/sKux6+0d j/7w7jXPPP+177/7G70fPueco390Y3/3ZV88buIuEWvEN0M5tGfohFP/5Nz5 px44qWN49+5nH1t/7AnHpf03Ro7nI89h9ZF/Tj2UXt74BxE5Y+5x65/evHHT m8Us37dyvYQuBLrgggtuv/32yCzwzwV6Z3hgdxEJDzm9haa7eyNW71KX5cuX 9/b2isidd94ZiBKNVD0OkoM87rtuHISqgzM+c90br2/2vvXmM4+c/sn7tr69 3Wp0TR0duf7q567esW1oeNi2xbIak6YdO3nDuksvXPHqW7uPmnXSBZM733r2 l2I1bHv43Au/t2nTSyIyOrrrO9++c2DzpqGRYdsWq9Hx6M/+Ke2/Uf3dW3HL QB2R9ngS2PbwGXM//NTTG8fO1SKWnScrUK6ffvrp8+bNU3w9hHf3XynUwu5O EAT28o8R/FGiEQ3ioIWPl8biIKI6mPaOg/3fsjonT3vHZBERGRGro/uAqd1j W07c/6DzvnTy+2ZM2b+rY3D7tl//dNW/9K2yOiZNnGgNDe1xHqe7u3PX4J7u A6d1i0yd0r1rd+xHmyrUC/uy2qWdMfeDTz2zceMrb4jImacdX9iytPsypMJ2 L/45yqLqcdDCk9doNJyLlO3RTPcs7Nn27N/89brtO3ftHdlri2U1rM4JXdOm TR4eGty7d1REuid3De7eNTy8V0SmHDR5586de/Yk/cTIPqhxE4EJcwoyfirR +6+//1p4ztJbk+UChHXrX974yusicuZpHyls2REo11O9HkrcPe1vuFx6xIH6 M+csONXBhEmHZj+Aad0RK50ScMgW6ZQJnSIiO4dEGjJhUpNHi6zhEyYCA1+G T+C4Uzq8V1uqiS2v7+f8Vlc+/LpIQcsiIvKibdvhT/UVXw8iUtbu2X/nRap0 HHz3u9/NsvvPV1zWriNJY34ZP7QgJf1K5YgPfuH2229vefcpU6aUuLtGKh0H V1xxxZYtW5zllStXzpkzJ3l7v89+9rMi/5DPcbVO97+5+Pzzz5V9CBp48MEH L7roIuelu3bt2rIPJ4VKx4F5NE0B1IRmH4QAyA/VQdtMnz697EPIXfZ/48DA QFuOBHmgOkBx+vr6yj4EJKE6yMUvfmVmzmZ5b+/v72/jkSAPZr5q0V5Lr/5m 2YeAIlAd5Oj2H/+07ENog5dfMOFfARVUBwBcVAdFu/eOC52Fs89fHv4SKJH2 caDXdX733nFh4LQPhEJbHhNojd5xENkgCEBr9I6DSHG9BiPvIw4sJ/QpzM4p ARRHB+HN/BVEYGUpI46mlyRxxZF2zImDwN3+gTO5afuAQCKE9wp/mdbZ5y9X LOz9m3nL/h39K6s5WOjr63OahUEjhsRBoP9HTkofjGSZYshJZAnAFUeaMiQO IhsNGSZQMpR7MB7OfJNw3YFRCo4J7kEwjN7VQcvtAyNXxv0dFE/GuQP/tF/4 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 qhIJbDMAAAAASUVORK5CYII= --=-gDo3U7gaWo59OwkGzUyG Content-Disposition: attachment; filename=p Content-Transfer-Encoding: quoted-printable Content-Type: text/x-patch; name=p; charset=UTF-8 Content-length: 18251 Index: generic/gdbtk-register.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-register.c,v retrieving revision 1.12 diff -p -r1.12 gdbtk-register.c *** generic/gdbtk-register.c 30 Nov 2002 17:49:21 -0000 1.12 --- generic/gdbtk-register.c 17 Dec 2002 20:27:26 -0000 *************** *** 21,26 **** --- 21,27 ---- #include "defs.h" #include "frame.h" #include "regcache.h" + #include "reggroups.h" #include "value.h" #include "target.h" #include "gdb_string.h" *************** static int map_arg_registers (Tcl_Interp *** 43,48 **** --- 44,52 ---- static void register_changed_p (int, void *); static void setup_architecture_data (void); static int gdb_regformat (ClientData, Tcl_Interp *, int, Tcl_Obj **); + static int gdb_reggroup (ClientData, Tcl_Interp *, int, Tcl_Obj **); + static int gdb_reggrouplist (ClientData, Tcl_Interp *, int, Tcl_Obj **); +=20 static void get_register_types (int regnum, void *arg); =20=20 static char *old_regs =3D NULL; *************** gdb_register_info (ClientData clientData *** 117,129 **** int index; void *argp; void (*func)(int, void *); ! static char *commands[] =3D {"changed", "name", "size", "value", "type"= , "format", NULL}; ! enum commands_enum { REGINFO_CHANGED, REGINFO_NAME, REGINFO_SIZE,=20 ! REGINFO_VALUE, REGINFO_TYPE, REGINFO_FORMAT }; =20=20 if (objc < 2) { ! Tcl_WrongNumArgs (interp, 1, objv, "name|size|value|type|format [re= gnum1 ... regnumN]"); return TCL_ERROR; } =20=20 --- 121,134 ---- int index; void *argp; void (*func)(int, void *); ! static char *commands[] =3D {"changed", "name", "size", "value", "type"= ,=20 ! "format", "group", "grouplist", NULL}; ! enum commands_enum { REGINFO_CHANGED, REGINFO_NAME, REGINFO_SIZE, REGIN= FO_VALUE,=20 ! REGINFO_TYPE, REGINFO_FORMAT, REGINFO_GROUP, REGINFO_GROUPLIST }; =20=20 if (objc < 2) { ! Tcl_WrongNumArgs (interp, 1, objv, "name|size|value|type|format|gro= ups [regnum1 ... regnumN]"); return TCL_ERROR; } =20=20 *************** gdb_register_info (ClientData clientData *** 180,185 **** --- 185,196 ---- case REGINFO_FORMAT: return gdb_regformat (clientData, interp, objc, objv); =20=20 + case REGINFO_GROUP: + return gdb_reggroup (clientData, interp, objc, objv); +=20 + case REGINFO_GROUPLIST: + return gdb_reggrouplist (clientData, interp, objc, objv); +=20 default: return TCL_ERROR; } *************** gdb_regformat (ClientData clientData, Tc *** 467,473 **** =20=20 if (objc !=3D 3) { ! Tcl_WrongNumArgs (interp, 1, objv, "regno type format"); return TCL_ERROR; } =20=20 --- 478,484 ---- =20=20 if (objc !=3D 3) { ! Tcl_WrongNumArgs (interp, 0, objv, "gdb_reginfo regno type format"); return TCL_ERROR; } =20=20 *************** gdb_regformat (ClientData clientData, Tc *** 488,490 **** --- 499,572 ---- =20=20 return TCL_OK; } +=20 +=20 + /* gdb_reggrouplist returns the names of the register groups */ + /* for the current architecture. */ + /* Usage: gdb_reginfo groups */ +=20 + static int + gdb_reggrouplist (ClientData clientData, Tcl_Interp *interp, + int objc, Tcl_Obj **objv) + { + struct reggroup *const *groups; + int i =3D 0; +=20 + if (objc !=3D 0) + { + Tcl_WrongNumArgs (interp, 0, objv, "gdb_reginfo grouplist"); + return TCL_ERROR; + } +=20 + groups =3D reggroups (current_gdbarch); +=20 + while (groups[i] !=3D NULL) { + if (reggroup_type (groups[i]) =3D=3D USER_REGGROUP) + Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr, Tcl_NewStringO= bj (reggroup_name(groups[i]), -1)); + i++; + } + return TCL_OK; + } +=20 +=20 + /* gdb_reggroup returns the names of the registers in a group. */ + /* Usage: gdb_reginfo group groupname */ +=20 + static int + gdb_reggroup (ClientData clientData, Tcl_Interp *interp, + int objc, Tcl_Obj **objv) + { + struct reggroup *const *group; + char *groupname; + int regnum; +=20 + if (objc !=3D 1) + { + Tcl_WrongNumArgs (interp, 0, objv, "gdb_reginfo group groupname"); + return TCL_ERROR; + } +=20=20=20 + groupname =3D Tcl_GetStringFromObj (objv[0], NULL); + if (groupname =3D=3D NULL) + { + gdbtk_set_result (interp, "could not read groupname"); + return TCL_ERROR; + } +=20 + for (group =3D reggroups (current_gdbarch); *group !=3D NULL; group++) + { + if (strcmp (groupname, reggroup_name (*group)) =3D=3D 0) + break; + } +=20 + if (*group =3D=3D NULL) + return TCL_ERROR; +=20 + for (regnum =3D 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++) + { + if (gdbarch_register_reggroup_p (current_gdbarch, regnum, *group)) + Tcl_ListObjAppendElement (NULL, result_ptr->obj_ptr, Tcl_NewIntObj (regn= um)); + } + return TCL_OK; + } +=20 Index: library/regwin.itb =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/gdbtk/library/regwin.itb,v retrieving revision 1.22 diff -p -r1.22 regwin.itb *** library/regwin.itb 5 Dec 2002 18:32:10 -0000 1.22 --- library/regwin.itb 17 Dec 2002 20:27:27 -0000 *************** itcl::body RegWin::_load_prefs {} { *** 80,89 **** set _reg_display_list {} set _register(hidden) {} =20=20 ! foreach r [gdb_reginfo name -numbers] { set nm [lindex $r 0] set rn [lindex $r 1] -=20 set size [string length $nm] if {$size > $_max_label_width} { set _max_label_width $size --- 80,89 ---- set _reg_display_list {} set _register(hidden) {} =20=20 ! set regs [gdb_reginfo group $_group] ! foreach r [gdb_reginfo name -numbers $regs] { set nm [lindex $r 0] set rn [lindex $r 1] set size [string length $nm] if {$size > $_max_label_width} { set _max_label_width $size *************** itcl::body RegWin::_build_win {} { *** 202,218 **** $itk_component(hscroll) configure -command [code $itk_component(table) = xview] $itk_component(vscroll) configure -command [code $itk_component(table) = yview] =20=20 - grid $itk_component(table) -row 0 -column 0 -sticky news - grid $itk_component(vscroll) -row 0 -column 1 -sticky ns - grid $itk_component(hscroll) -row 1 -column 0 -sticky ew - grid columnconfigure $itk_interior 0 -weight 1 - grid rowconfigure $itk_interior 0 -weight 1 -=20 - # Add sizebox for windows - if {[string compare $::tcl_platform(platform) "windows"] =3D=3D 0} { - ide_sizebox $itk_interior.sbox - place $itk_interior.sbox -relx 1.0 -rely 1.0 -anchor se - } =20=20 # Create/configure tags for various display styles # normal - the "normal" display style --- 202,207 ---- *************** itcl::body RegWin::_build_win {} { *** 235,305 **** $itk_component(table) tag raise edit $itk_component(table) tag raise sel =20=20 ! # Register to receive notifications on preference changes ! # (Note that these are not supported by the preference dialogs, but...) ! #foreach opt [list highlight select header] { ! # pref add_hook gdb/font/${opt}_fg [code $this _prefs_changed] ! # pref add_hook gdb/font/${opt}_bg [code $this _prefs_changed] ! #} !=20 ! # Create toplevel menubar ! itk_component add menubar { ! menu $itk_interior.m -tearoff false ! } { ! ignore -tearoff } ! $_top configure -menu $itk_component(menubar) !=20 ! # Create register menu ! itk_component add reg_menu { ! menu $itk_component(menubar).reg -tearoff false \ ! -postcommand [code $this _post_menu] ! } { ! ignore -tearoff ! } ! $itk_component(menubar) add cascade -menu $itk_component(reg_menu) \ ! -label "Register" -underline 0 =20=20 ! # Create register->format cascade menu ! itk_component add reg_format { ! menu $itk_component(reg_menu).format -tearoff false ! } { ! ignore -tearoff } =20=20 - $itk_component(reg_menu) add cascade -menu $itk_component(reg_format) \ - -label "Format" -underline 0 - $itk_component(reg_format) add radio -label "Hex" -value x \ - -underline 0 -state disabled -command [code $this update dummy] - $itk_component(reg_format) add radio -label "Decimal" -value d \ - -underline 0 -state disabled -command [code $this update dummy] - $itk_component(reg_format) add radio -label "Unsigned" -value u \ - -underline 0 -state disabled -command [code $this update dummy] - $itk_component(reg_format) add radio -label "Floating Point" -value f \ - -underline 0 -state disabled -command [code $this update dummy] - $itk_component(reg_menu) add command -label "Open Memory Window" \ - -underline 7 -state disabled - set _menuitems(open_memory) [$itk_component(reg_menu) index last] - $itk_component(reg_menu) add command -label "Add to Watch" \ - -underline 7 -state disabled - set _menuitems(add_to_watch) [$itk_component(reg_menu) index last] - $itk_component(reg_menu) add separator - $itk_component(reg_menu) add command -label "Remove from Display" \ - -underline 0 -state disabled - set _menuitems(remove_from_display) [$itk_component(reg_menu) index las= t] - $itk_component(reg_menu) add command -label "Display all Registers" \ - -underline 0 -state disabled -command [code $this _display_all] - set _menuitems(display_all_registers) [$itk_component(reg_menu) index l= ast] - $itk_component(reg_menu) add separator - $itk_component(reg_menu) add command -label "Close" \ - -underline 0 -command [code delete object $this] -=20 # Add popup menu - we populate it in the event handler itk_component add popup { menu $itk_interior.pop -tearoff 0 } {} - $itk_component(popup) configure \ - -disabledforeground [$itk_component(menubar) cget -fg] } =20=20 # ------------------------------------------------------------------ --- 224,256 ---- $itk_component(table) tag raise edit $itk_component(table) tag raise sel =20=20 ! itk_component add frame { ! frame $itk_interior.m } ! iwidgets::optionmenu $itk_component(frame).opt -labeltext "Group:" \ ! -labelpos w -command [code $this _select_group] ! eval $itk_component(frame).opt insert end [gdb_reginfo grouplist] ! $itk_component(frame).opt select "all" !=20=20=20 ! pack $itk_component(frame).opt -anchor nw ! grid $itk_component(frame) -row 0 -columnspan 2 -sticky news ! grid $itk_component(table) -row 1 -column 0 -sticky news ! grid $itk_component(vscroll) -row 1 -column 1 -sticky ns ! grid $itk_component(hscroll) -row 2 -column 0 -sticky ew ! grid columnconfigure $itk_interior 0 -weight 1 ! grid rowconfigure $itk_interior 0 -weight 0 ! grid rowconfigure $itk_interior 1 -weight 1 =20=20 ! # Add sizebox for windows ! if {[string compare $::tcl_platform(platform) "windows"] =3D=3D 0} { ! ide_sizebox $itk_interior.sbox ! place $itk_interior.sbox -relx 1.0 -rely 1.0 -anchor se } =20=20 # Add popup menu - we populate it in the event handler itk_component add popup { menu $itk_interior.pop -tearoff 0 } {} } =20=20 # ------------------------------------------------------------------ *************** itcl::body RegWin::_layout_table {} { *** 404,415 **** incr x 2 } } -=20 - # Update register menu - if {[llength $_register(hidden)] !=3D 0} { - $itk_component(reg_menu) entryconfigure $_menuitems(display_all_regis= ters) \ - -state normal - } } =20=20 # ------------------------------------------------------------------ --- 355,360 ---- *************** itcl::body RegWin::_but3 {x y X Y} { *** 637,642 **** --- 582,592 ---- $itk_component(popup) add command \ -label "Help" -command {open_help register.html} =20=20 + # Close + $itk_component(popup) add separator + $itk_component(popup) add command -label "Close" \ + -underline 0 -command [code delete object $this] +=20 tk_popup $itk_component(popup) $X $Y } } *************** itcl::body RegWin::_delete_from_display=20 *** 659,667 **** =20=20 # Relayout table _layout_table -=20 - $itk_component(reg_menu) entryconfigure $_menuitems(display_all_regis= ters) \ - -state normal } } =20=20 --- 609,614 ---- *************** itcl::body RegWin::_delete_from_display=20 *** 674,689 **** # ------------------------------------------------------------------ itcl::body RegWin::_display_all {} { =20=20 - $itk_component(reg_menu) entryconfigure $_menuitems(display_all_registe= rs) \ - -state disabled -=20 # Unhide all hidden registers foreach r $_register(hidden) { pref setd gdb/reg/[gdb_reginfo name $r] {} } =20=20 - set _register(hidden) {} -=20 # Note which register is active and restore it if {[catch {$itk_component(table) index active} cell]} { set active {} --- 621,631 ---- *************** itcl::body RegWin::_move {direction} { *** 815,893 **** } } =20=20 - # ------------------------------------------------------------------ - # NAME: private method RegWin::_post_menu - # DESCRIPTION: Configures the Register menu before it is posted - # - # ARGUMENTS: None - # RETURNS: Nothing - # ------------------------------------------------------------------ - itcl::body RegWin::_post_menu {} { - global gdb_running -=20 - # Configure the menu for the active cell - if {![catch {$itk_component(table) index active} cell] - && [info exists _register($cell)] && $gdb_running} { -=20 - set code $_type($_register($cell),code) -=20 - $itk_component(reg_menu) entryconfigure $_menuitems(remove_from_displ= ay) \ - -state normal -command [code $this _delete_from_display $_register(= $cell)] -=20 - set state normal -=20 - for {set i 0} {$i <=3D [$itk_component(reg_format) index end]} {incr = i} { - $itk_component(reg_format) entryconfigure $i \ - -state $state \ - -variable [scope _format($_register($cell))] \ - -command [code $this _change_format $_register($cell)] - } -=20 - if {$code =3D=3D "float"} { - # disable decimal and unsigned - $itk_component(reg_format) entryconfigure 1 -state disabled - $itk_component(reg_format) entryconfigure 2 -state disabled - } elseif {$code =3D=3D "int"} { - # disable float - $itk_component(reg_format) entryconfigure 3 -state disabled - } -=20 - # memory window - if {$code =3D=3D "int"} { - $itk_component(reg_menu) entryconfigure $_menuitems(open_memory) \ - -state normal -command [code $this _open_memory $_register($cell)] - } else { - $itk_component(reg_menu) entryconfigure $_menuitems(open_memory) \ - -state disabled - } -=20 - # add to watch - $itk_component(reg_menu) entryconfigure $_menuitems(add_to_watch) \ - -state normal -command [code $this _add_to_watch $_register($cell)] -=20 - } else { - # Disable everything - $itk_component(reg_menu) entryconfigure $_menuitems(remove_from_displ= ay) \ - -state disabled -command {} -=20 - for {set i 0} {$i <=3D [$itk_component(reg_format) index end]} {incr = i} { - $itk_component(reg_format) entryconfigure $i -state disabled \ - -variable {} - } -=20 - $itk_component(reg_menu) entryconfigure $_menuitems(open_memory) \ - -state disabled -command {} -=20 - $itk_component(reg_menu) entryconfigure $_menuitems(add_to_watch) \ - -state disabled -command {} -=20 - if {0} { - $itk_component(reg_menu) entryconfigure $_menuitems(edit) \ - -state disabled -command {} - } - } - } -=20 =20=20 # ------------------------------------------------------------------ # NAME: private method RegWin::_select_cell --- 757,762 ---- *************** itcl::body RegWin::_change_format {rn {n *** 1020,1025 **** --- 889,914 ---- # ------------------------------------------------------------------ itcl::body RegWin::_update_register {rn} { set _data($_cell($rn)) [_get_value $rn] + } +=20 + # ------------------------------------------------------------------ + # NAME: private_method RegWin::_select_group + # DESCRIPTION: Changes the register group. Callback + # + # ARGUMENTS: + #=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 + # RETURNS: Nothing + # ------------------------------------------------------------------ + itcl::body RegWin::_select_group {} { + set gr [$itk_component(frame).opt get] + if {$gr =3D=3D ""} { + return + } + set _group $gr + # Clear gdb's change list + catch {gdb_reginfo changed} + update "" + _layout_table } =20=20 =20=20 Index: library/regwin.ith =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/gdbtk/library/regwin.ith,v retrieving revision 1.10 diff -p -r1.10 regwin.ith *** library/regwin.ith 15 Oct 2002 21:19:51 -0000 1.10 --- library/regwin.ith 17 Dec 2002 20:27:27 -0000 *************** itcl::class RegWin { *** 28,33 **** --- 28,36 ---- # Mapping of table cell index to register number variable _register =20=20 + # the register group that is displayed + variable _group "all" +=20 # Mapping of register number to table cell index. "hidden" if # the register was "removed" from the display. variable _cell *************** itcl::class RegWin { *** 74,80 **** method _edit {x y} method _move {direction} method _open_memory {rn} ! method _post_menu {} method _select_cell {cell} method _unedit {} =20=20 --- 77,83 ---- method _edit {x y} method _move {direction} method _open_memory {rn} ! method _select_group {} method _select_cell {cell} method _unedit {} =20=20 --=-gDo3U7gaWo59OwkGzUyG--