From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2292 invoked by alias); 10 Jan 2006 15:56:56 -0000 Received: (qmail 2137 invoked by uid 22791); 10 Jan 2006 15:56:55 -0000 X-Spam-Check-By: sourceware.org Received: from lon-del-02.spheriq.net (HELO lon-del-02.spheriq.net) (195.46.50.98) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 10 Jan 2006 15:56:52 +0000 Received: from lon-out-01.spheriq.net ([195.46.50.129]) by lon-del-02.spheriq.net with ESMTP id k0AFujx7020822 for ; Tue, 10 Jan 2006 15:56:46 GMT Received: from lon-cus-01.spheriq.net (lon-cus-01.spheriq.net [195.46.50.37]) by lon-out-01.spheriq.net with ESMTP id k0AFuilB022319 for ; Tue, 10 Jan 2006 15:56:44 GMT Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by lon-cus-01.spheriq.net with ESMTP id k0AFuhC0024454 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=OK) for ; Tue, 10 Jan 2006 15:56:44 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 23D2DDA42 for ; Tue, 10 Jan 2006 15:56:43 +0000 (GMT) Received: by zeta.dmz-eu.st.com (STMicroelectronics, from userid 60012) id E3C98475CB; Tue, 10 Jan 2006 15:59:08 +0000 (GMT) Received: from zeta.dmz-eu.st.com (localhost [127.0.0.1]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 3CCE0759AE for ; Tue, 10 Jan 2006 15:59:08 +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 4A3D7475C6 for ; Tue, 10 Jan 2006 15:59:07 +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 CHC90758 (AUTH stubbsa); Tue, 10 Jan 2006 15:55:41 GMT Message-ID: <43C3D887.5090904@st.com> Date: Tue, 10 Jan 2006 15:56:00 -0000 From: Andrew STUBBS User-Agent: Mozilla Thunderbird 1.0.7 (Windows/20050923) MIME-Version: 1.0 To: insight@sourceware.org Subject: Re: [PATCH] Arbitrary width memory window. References: <43C3C906.9050205@st.com> In-Reply-To: <43C3C906.9050205@st.com> Content-Type: multipart/mixed; boundary="------------050203000001060001090207" 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/msg00012.txt.bz2 This is a multi-part message in MIME format. --------------050203000001060001090207 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 77 Here is the patch again complete with documentation changes I missed before. --------------050203000001060001090207 Content-Type: text/plain; name="memwin.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="memwin.patch" Content-length: 5848 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. * library/help/memory.html: Update. Index: src/gdb/gdbtk/library/mempref.itb =================================================================== --- src.orig/gdb/gdbtk/library/mempref.itb 2006-01-10 14:59:39.000000000 +0000 +++ src/gdb/gdbtk/library/mempref.itb 2006-01-10 15:19:54.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-10 14:59:39.000000000 +0000 +++ src/gdb/gdbtk/library/mempref.ith 2006-01-10 15:19:54.000000000 +0000 @@ -47,6 +47,7 @@ itcl::class MemPref { variable gformat variable gnumbytes variable gbpr + variable gbprlist variable gascii variable gascii_char variable gvar Index: src/gdb/gdbtk/library/help/memory.html =================================================================== --- src.orig/gdb/gdbtk/library/help/memory.html 2006-01-10 15:48:34.000000000 +0000 +++ src/gdb/gdbtk/library/help/memory.html 2006-01-10 15:26:08.000000000 +0000 @@ -232,7 +232,9 @@ of bytes. By default, the Memory Window Miscellaneous memory preferences include the option to display the ASCII representation of the memory, including what character to use for non-ASCII bytes (the "control" character). Additionally, users may specify the number -of bytes per row, either four, eight, sixteen, or thirty-two. The default -is sixteen bytes per row. +of bytes per row, either by typing a number into the box or by choosing one +from the list. The default is sixteen bytes per row. If the entered value is +not a multiple of the cell size then it will be automatically rounded up. The +maximum permitted value is 150 (before rounding). --------------050203000001060001090207--