From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20519 invoked by alias); 10 Jan 2006 14:51:39 -0000 Received: (qmail 20496 invoked by uid 22791); 10 Jan 2006 14:51:37 -0000 X-Spam-Check-By: sourceware.org Received: from lon-del-04.spheriq.net (HELO lon-del-04.spheriq.net) (195.46.50.101) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 10 Jan 2006 14:51:33 +0000 Received: from lon-out-01.spheriq.net ([195.46.50.129]) by lon-del-04.spheriq.net with ESMTP id k0AEpNa7007057 for ; Tue, 10 Jan 2006 14:51:24 GMT Received: from lon-cus-02.spheriq.net (lon-cus-02.spheriq.net [195.46.50.38]) by lon-out-01.spheriq.net with ESMTP id k0AEpM0Q018198 for ; Tue, 10 Jan 2006 14:51:22 GMT Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by lon-cus-02.spheriq.net with ESMTP id k0AEpGLs001357 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=OK) for ; Tue, 10 Jan 2006 14:51:22 GMT Received: from zeta.dmz-eu.st.com (ns2.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id DF177DA58 for ; Tue, 10 Jan 2006 14:51:11 +0000 (GMT) Received: by zeta.dmz-eu.st.com (STMicroelectronics, from userid 60012) id 643CF47559; Tue, 10 Jan 2006 14:52:59 +0000 (GMT) Received: from zeta.dmz-eu.st.com (localhost [127.0.0.1]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 20AF57599D for ; Tue, 10 Jan 2006 14:52:59 +0000 (UTC) Received: from mail1.bri.st.com (mail1.bri.st.com [164.129.8.218]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 715A74754F for ; Tue, 10 Jan 2006 14:52:58 +0000 (GMT) Received: from [164.129.15.13] (terrorhawk.bri.st.com [164.129.15.13]) by mail1.bri.st.com (MOS 3.5.8-GR) with ESMTP id CHC90087 (AUTH stubbsa); Tue, 10 Jan 2006 14:49:32 GMT Message-ID: <43C3C906.9050205@st.com> Date: Tue, 10 Jan 2006 14:51:00 -0000 From: Andrew STUBBS User-Agent: Mozilla Thunderbird 1.0.7 (Windows/20050923) MIME-Version: 1.0 To: insight@sourceware.org Subject: [PATCH] Arbitrary width memory window. Content-Type: multipart/mixed; boundary="------------020709090401090709070004" X-O-Spoofed: Not Scanned X-O-General-Status: No X-O-Spam1-Status: Not Scanned X-O-Spam2-Status: Not Scanned X-O-URL-Status: Not Scanned X-O-Virus1-Status: No X-O-Virus2-Status: Not Scanned X-O-Virus3-Status: No X-O-Virus4-Status: No X-O-Virus5-Status: Not Scanned X-O-Image-Status: Not Scanned X-O-Attach-Status: Not Scanned X-SpheriQ-Ver: 4.2.0 X-IsSubscribed: yes Mailing-List: contact insight-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: insight-owner@sourceware.org X-SW-Source: 2006-q1/txt/msg00011.txt.bz2 This is a multi-part message in MIME format. --------------020709090401090709070004 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 482 Hi, The attached patch permits the memory window to be set to any number of bytes per row between 1 and 150 (alignment permitting). It changes the combo box from a fixed list to an editable value. This value is then properly validated and adjusted to fit the current word size. It is also adjusted automatically when the word size is altered. Therefore it is now possible to have, say, 10 bytes, or 3 words, or 5 floats, all of which were not possible before. Andrew Stubbs --------------020709090401090709070004 Content-Type: text/plain; name="memwin.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="memwin.patch" Content-length: 4840 2005-01-10 Andrew Stubbs * library/mempref.itb (MemPref::constructor): Allow the Byte Per Row combo box to accept arbitrary values. (MemPref::set_bytes_per_row): Validate the new value; reject invalid entries and round up to a multiple of the word size. (MemPref::apply): Read the value from the text box even if the user has not pressed return. (MemPref::enable_format): Ensure the bytes per row value is still valid. (MemPref::disable_format): Likewise. * library/mempref.ith (MemPref): Add $gbprlist. Index: src/gdb/gdbtk/library/mempref.itb =================================================================== --- src.orig/gdb/gdbtk/library/mempref.itb 2006-01-03 18:23:57.000000000 +0000 +++ src/gdb/gdbtk/library/mempref.itb 2006-01-10 14:00:00.000000000 +0000 @@ -41,6 +41,7 @@ itcl::body MemPref::constructor {args} { set gnumbytes $numbytes set gbpr $bpr + set gbprlist [list 4 8 16 32 64 128] set gascii $ascii set gascii_char $ascii_char @@ -153,14 +154,11 @@ itcl::body MemPref::build_win {} { label $fr.2.l -text "Bytes Per Row " set Widgets(b-bytes_per_row) [::combobox::combobox $fr.2.c \ -command [code $this set_bytes_per_row] \ - -width 4 -editable 0 -font global/fixed \ + -width 4 -editable 1 -font global/fixed \ -bg $::Colors(textbg)] - $fr.2.c list insert end 4 - $fr.2.c list insert end 8 - $fr.2.c list insert end 16 - $fr.2.c list insert end 32 - $fr.2.c list insert end 64 - $fr.2.c list insert end 128 + foreach item $gbprlist { + $fr.2.c list insert end $item + } $fr.2.c configure -value $gbpr pack $fr.2.l -side left -anchor e @@ -264,7 +262,40 @@ itcl::body MemPref::check_numbytes {var # METHOD: set_bytes_per_row - combobox callback to set the bytes per row # ------------------------------------------------------------------ itcl::body MemPref::set_bytes_per_row {w value} { - set gbpr $value + if {[string is integer -strict $value] && [expr {$value != 0}]} { + # The input is a value number. + set gbpr $value + set gbpr [string trim $gbpr] + + # Too high a number will cause a Segmentation fault. + if {[expr {$gbpr > 150}]} {set gbpr 150} + + # Insert the value into the combo box list, if it isn't there already. + set found 0 + foreach item $gbprlist { + if {$item == $gbpr} { + set found 1 + } + } + if {[expr {$found == 0}]} { + lappend gbprlist $gbpr + $Widgets(b-bytes_per_row) list insert end $gbpr + } + + set s $gsize + if {[expr {$s == 3}]} {set s 4} + if {[expr {$s == 5}]} {set s 8} + set rem [expr {$gbpr % $s}] + if {[expr {$rem != 0}]} { + # The bytes-per-row is not a multiple of the size. + set gbpr [expr {$gbpr + ($s - $rem)}] + } + } + + # Set the display to the new value. This may be different if the input + # was zero or not a number, or if the user entered any whitespace. + $Widgets(b-bytes_per_row) delete 0 end + $Widgets(b-bytes_per_row) insert end $gbpr } # ------------------------------------------------------------------ @@ -318,6 +349,9 @@ itcl::body MemPref::apply {} { } } + # Ensure the value has been read from the text field. + set_bytes_per_row "" [$Widgets(b-bytes_per_row) get] + # pass all the changed values back to parent debug "$win configChange -size $size -numbytes $numbytes \ -format $format -ascii $gascii \ @@ -338,6 +372,10 @@ itcl::body MemPref::apply {} { # METHOD: enable_format - turn on the format radio buttons # ------------------------------------------------------------------ itcl::body MemPref::enable_format {} { + # First ensure bytes per row is a multiple of the size. + # Use the value of the widget, not $gbpr to ensure the typed value is kept. + set_bytes_per_row "" [$Widgets(b-bytes_per_row) get] + if {!$format_disabled} { return } @@ -353,6 +391,10 @@ itcl::body MemPref::enable_format {} { # METHOD: disable_format - turn off the format radio buttons # ------------------------------------------------------------------ itcl::body MemPref::disable_format {} { + # First ensure bytes per row is a multiple of the size. + # Use the value of the widget, not $gbpr to ensure the typed value is kept. + set_bytes_per_row "" [$Widgets(b-bytes_per_row) get] + if {$format_disabled} { return } Index: src/gdb/gdbtk/library/mempref.ith =================================================================== --- src.orig/gdb/gdbtk/library/mempref.ith 2006-01-03 18:23:57.000000000 +0000 +++ src/gdb/gdbtk/library/mempref.ith 2006-01-06 18:41:05.000000000 +0000 @@ -47,6 +47,7 @@ itcl::class MemPref { variable gformat variable gnumbytes variable gbpr + variable gbprlist variable gascii variable gascii_char variable gvar --------------020709090401090709070004--