public inbox for insight@sourceware.org
 help / color / mirror / Atom feed
From: Syd Polk <spolk@cygnus.com>
To: Fernando Nasser <fnasser@cygnus.com>, insight@sourceware.cygnus.com
Subject: Re: RFA: Fixes to the Registers window
Date: Wed, 03 May 2000 10:44:00 -0000	[thread overview]
Message-ID: <4.2.0.58.20000503104415.00b8dc10@pop.cygnus.com> (raw)
In-Reply-To: <390F2D7B.FEAA501@cygnus.com>

This looks reasonable to me.

At 03:33 PM 5/2/00 -0400, Fernando Nasser wrote:
>This improves the overall appearance of the Registers window when there 
>are registers with values that differ much in length. It also avoids a 
>stack trace if a value is not accepted.
>
>The main improvement though is the ability to handle typed registers, as 
>we now have for several new processors to which gdb has been ported.  To 
>make the user's life easier, an option to add registers to the Watch 
>window (were typed register details can be seen and values edited) has 
>been added.
>
>The ChangeLog entry tells the above in some more detailed terms.
>
>--
>Fernando Nasser
>Red Hat - Toronto                       E-Mail:  fnasser@cygnus.com
>
>
>Index: ChangeLog
>===================================================================
>RCS file: /cvs/src/src/gdb/gdbtk/library/ChangeLog,v
>retrieving revision 1.18
>diff -c -p -r1.18 ChangeLog
>*** ChangeLog   2000/04/27 16:46:12     1.18
>--- ChangeLog   2000/05/02 19:24:23
>***************
>*** 1,3 ****
>--- 1,18 ----
>+ 2000-05-01  Fernando Nasser  <fnasser@cygnus.com>
>+
>+       * regwin.itb (build_win): Adjust size of columns independently, force
>+       typed registers to raw mode and check if values can be edited.
>+       Also, add "Add to Watch" option to the menu.
>+       (update): Similar changes to similar code.
>+       (init_reg_display_vars): Initialize new variables used above.
>+       (reg_select): Deactivate menu options when action is not possible.
>+       (but3): Ditto.
>+       (edit): Do not edit if it is not editable.
>+       (acceptEdit): Fix bug is error message box display.
>+       (addToWatch): New mwthod.  Add a register to the Watch window.
>+       * regwin.ith: Add addToWatch to the class.
>+       * tclIndex: Regenerate.
>+
>   2000-04-27  James Ingham  <jingham@leda.cygnus.com>
>
>         These changes allow Insight to handle the case where there are
>Index: regwin.itb
>===================================================================
>RCS file: /cvs/src/src/gdb/gdbtk/library/regwin.itb,v
>retrieving revision 1.4
>diff -c -p -r1.4 regwin.itb
>*** regwin.itb  2000/04/05 23:53:12     1.4
>--- regwin.itb  2000/05/02 19:24:23
>*************** body RegWin::build_win {} {
>*** 70,79 ****
>       tixScrolledWindow $itk_interior.scrolled -scrollbar auto
>     }
>     set ScrolledWin [$itk_interior.scrolled subwidget window]
>-   # Create labels
>-   set row 0
>-   set col 0
>
>     set regMaxLen 0
>     foreach r [gdb_regnames] {
>       set l [string length $r]
>--- 70,77 ----
>       tixScrolledWindow $itk_interior.scrolled -scrollbar auto
>     }
>     set ScrolledWin [$itk_interior.scrolled subwidget window]
>
>+   # Calculate the maximum length of a register name
>     set regMaxLen 0
>     foreach r [gdb_regnames] {
>       set l [string length $r]
>*************** body RegWin::build_win {} {
>*** 82,100 ****
>       }
>     }
>
>!   set vmax 0
>     foreach r $reg_display_list {
>!     if {[catch {gdb_fetch_registers $reg_display($r,format) $r} 
>values($r)]} {
>         set values($r) ""
>       } else {
>!       set values($r) [string trim $values($r) \ ]
>       }
>       set l [string length $values($r)]
>!     if {$l > $vmax} {
>!       set vmax $l
>       }
>     }
>
>     foreach r $reg_display_list {
>       if {$row == $nRows} {
>         grid columnconfigure $ScrolledWin $col -weight 1
>--- 80,139 ----
>       }
>     }
>
>!   # Calculate the minimum size for each column so that the register 
>values fit.
>!   set row 0
>!   set col 0
>     foreach r $reg_display_list {
>!     if {$row == 0} {
>!       # A minimum of 10 so the appearence is nice
>!       set vmax($col) 10
>!     }
>!
>!     # Typed registers natural values start with a brace (escaped by a slash)
>!     if {[catch {gdb_fetch_registers {} $r} valtest]} {
>         set values($r) ""
>+     } else {
>+       if {[string index $valtest 1] == "\{"} {
>+         # If it is a typed register, we print it raw
>+         set format r
>+         set reg_display($r,format) r
>+         set reg_display($r,typed) 1
>+       } else {
>+         set format $reg_display($r,format)
>+       }
>+       if {[catch {gdb_fetch_registers $format $r} values($r)]} {
>+         set values($r) ""
>+       } else {
>+         set values($r) [string trim $values($r) \ ]
>+       }
>+     }
>+
>+     # Check if we can edit this value
>+     if {[catch {gdb_cmd "set \$$reg_display($r,name)=$valtest"} rst]} {
>+       set reg_display($r,editable) 0
>       } else {
>!       set reg_display($r,editable) 1
>       }
>+     catch {gdb_fetch_registers {} $r} valtest2
>+     if {$valtest2 != $valtest} {
>+       tk_messageBox -icon error -type ok -message "Register value 
>clobbered!" \
>+         -title "Internal Error" -parent [winfo toplevel $itk_interior]
>+     }
>+
>       set l [string length $values($r)]
>!     if {$l > $vmax($col)} {
>!       set vmax($col) $l
>       }
>+     incr row
>+     if {$row == $nRows} {
>+       set row 0
>+       incr col
>+     }
>     }
>
>+   # Create labels
>+   set row 0
>+   set col 0
>     foreach r $reg_display_list {
>       if {$row == $nRows} {
>         grid columnconfigure $ScrolledWin $col -weight 1
>*************** body RegWin::build_win {} {
>*** 114,120 ****
>
>       label $ScrolledWin.$r.lbl -text [fixLength $reg_display($r,name) 
> $regMaxLen left] \
>         -relief solid -bd 1 -font src-font
>!     label $ScrolledWin.$r.val -anchor e -text [fixLength $values($r) 
>$vmax right] \
>         -relief ridge -bd 1 -font src-font -bg $tixOption(input1_bg)
>
>       grid $ScrolledWin.$r.lbl $ScrolledWin.$r.val -sticky nsew
>--- 153,159 ----
>
>       label $ScrolledWin.$r.lbl -text [fixLength $reg_display($r,name) 
> $regMaxLen left] \
>         -relief solid -bd 1 -font src-font
>!     label $ScrolledWin.$r.val -anchor e -text [fixLength $values($r) 
>$vmax($col) right] \
>         -relief ridge -bd 1 -font src-font -bg $tixOption(input1_bg)
>
>       grid $ScrolledWin.$r.lbl $ScrolledWin.$r.val -sticky nsew
>*************** body RegWin::build_win {} {
>*** 158,163 ****
>--- 197,204 ----
>         -command "$this update"
>       $m add command -label "Remove from Display" -underline 0 -state 
> disabled
>       $m add separator
>+     $m add command -label "Add to Watch" -underline 7 -state disabled
>+     $m add separator
>       $m add command -label "Display All Registers" -underline 0 -state 
> disabled \
>                               -command "$this display_all"
>       set disp_all_menu_item [$m index last]
>*************** body RegWin::init_reg_display_vars {args
>*** 190,195 ****
>--- 231,237 ----
>     global reg_display max_regs
>     set reg_display_list {}
>     set regnames [gdb_regnames -numbers]
>+
>     set i 1
>     set x 0
>     foreach r $regnames {
>*************** body RegWin::init_reg_display_vars {args
>*** 197,205 ****
>--- 239,256 ----
>       set name [lindex $r 0]
>       set rn   [lindex $r 1]
>       set reg_display($rn,name) $name
>+
>+     # All registers shall be considered editable
>+     # and non-typed until proved otherwise
>+     set reg_display($rn,typed) 0
>+     set reg_display($rn,editable) 0
>+
>+     # If user has no preference, show register in hex (if we can)
>       set format [pref getd gdb/reg/$name-format]
>       if {$format == ""} { set format x }
>       set reg_display($rn,format) $format
>+
>+     # Check if the user prefers not to show this register
>       if {$args != "" && [pref getd gdb/reg/$name] == "no"} {
>         set all_regs_shown 0
>         set reg_display($rn,line) 0
>*************** body RegWin::init_reg_display_vars {args
>*** 209,214 ****
>--- 260,266 ----
>         incr i
>       }
>     }
>+
>     set num_regs [expr {$i - 1}]
>     set max_regs $x
>     set reg_names_dirty 0
>*************** body RegWin::reg_select_left { } {
>*** 309,315 ****
>   #  PUBLIC METHOD:  reg_select - select a register
>   # ------------------------------------------------------------------
>   body RegWin::reg_select { r } {
>!   global tixOption
>
>     if {$Running} { return }
>     if {$selected != -1} {
>--- 361,367 ----
>   #  PUBLIC METHOD:  reg_select - select a register
>   # ------------------------------------------------------------------
>   body RegWin::reg_select { r } {
>!   global reg_display tixOption
>
>     if {$Running} { return }
>     if {$selected != -1} {
>*************** body RegWin::reg_select { r } {
>*** 336,350 ****
>     $ScrolledWin.$r.lbl configure -fg $tixOption(select_fg) -bg 
> $tixOption(select_bg)
>     $ScrolledWin.$r.val configure -fg $tixOption(fg) -bg $tixOption(bg)
>
>!   if {![pref get gdb/mode]} {
>       $itk_interior.m.reg entryconfigure 0 -state normal -command "$this 
> edit $r"
>     }
>     $itk_interior.m.reg entryconfigure 2 -state normal \
>       -command "$this delete_from_display_list $r"
>     for {set i 0} {$i < 6} {incr i} {
>!     $itk_interior.m.reg.format entryconfigure $i -state normal \
>         -variable reg_display($r,format)
>     }
>     focus -force $ScrolledWin.$r
>     set selected $r
>   }
>--- 388,410 ----
>     $ScrolledWin.$r.lbl configure -fg $tixOption(select_fg) -bg 
> $tixOption(select_bg)
>     $ScrolledWin.$r.val configure -fg $tixOption(fg) -bg $tixOption(bg)
>
>!   if {![pref get gdb/mode] && $reg_display($r,editable)} {
>       $itk_interior.m.reg entryconfigure 0 -state normal -command "$this 
> edit $r"
>     }
>     $itk_interior.m.reg entryconfigure 2 -state normal \
>       -command "$this delete_from_display_list $r"
>+   if {$reg_display($r,typed)} {
>+     set state disabled
>+   } else {
>+     set state normal
>+   }
>     for {set i 0} {$i < 6} {incr i} {
>!     debug "RegWin format $i $state"
>!     $itk_interior.m.reg.format entryconfigure $i -state $state \
>         -variable reg_display($r,format)
>     }
>+   $itk_interior.m.reg entryconfigure 4 -state normal \
>+     -command "$this addToWatch $r"
>     focus -force $ScrolledWin.$r
>     set selected $r
>   }
>*************** body RegWin::but3 {rn X Y} {
>*** 407,424 ****
>       $Menu delete 0 end
>       $Menu add command -label $reg_display($rn,name) -state disabled
>       $Menu add separator
>!     $Menu add radio -label "Hex" -command "$this update" \
>!       -value x -variable reg_display($rn,format)
>!     $Menu add radio -label "Decimal" -command "$this update" \
>!       -value d -variable reg_display($rn,format)
>!     $Menu add radio -label "Natural" -command "$this update" \
>!       -value {} -variable reg_display($rn,format)
>!     $Menu add radio -label "Binary" -command "$this update" \
>!       -value t -variable reg_display($rn,format) -underline 0
>!     $Menu add radio -label "Octal" -command "$this update" \
>!       -value o -variable reg_display($rn,format)
>!     $Menu add radio -label "Raw" -command "$this update" \
>!       -value r -variable reg_display($rn,format)
>       $Menu add separator
>       $Menu add command  -command "$this delete_from_display_list $rn" \
>         -label "Remove $reg_display($rn,name) from Display"
>--- 467,489 ----
>       $Menu delete 0 end
>       $Menu add command -label $reg_display($rn,name) -state disabled
>       $Menu add separator
>!     if {!$reg_display($rn,typed)} {
>!       $Menu add radio -label "Hex" -command "$this update" \
>!         -value x -variable reg_display($rn,format)
>!       $Menu add radio -label "Decimal" -command "$this update" \
>!         -value d -variable reg_display($rn,format)
>!       $Menu add radio -label "Natural" -command "$this update" \
>!         -value {} -variable reg_display($rn,format)
>!       $Menu add radio -label "Binary" -command "$this update" \
>!         -value t -variable reg_display($rn,format) -underline 0
>!       $Menu add radio -label "Octal" -command "$this update" \
>!         -value o -variable reg_display($rn,format)
>!       $Menu add radio -label "Raw" -command "$this update" \
>!         -value r -variable reg_display($rn,format)
>!       $Menu add separator
>!     }
>!     $Menu add command  -command "$this addToWatch $rn" \
>!       -label "Add $reg_display($rn,name) to Watch"
>       $Menu add separator
>       $Menu add command  -command "$this delete_from_display_list $rn" \
>         -label "Remove $reg_display($rn,name) from Display"
>*************** body RegWin::delete_from_display_list {r
>*** 461,467 ****
>     }
>     set num_regs $i
>     reconfig
>!   $itk_interior.m.reg entryconfigure 4 -state normal
>   }
>
>
>--- 526,532 ----
>     }
>     set num_regs $i
>     reconfig
>!   $itk_interior.m.reg entryconfigure 6 -state normal
>   }
>
>
>*************** body RegWin::delete_from_display_list {r
>*** 472,477 ****
>--- 537,543 ----
>   body RegWin::edit {r} {
>     global reg_display
>     if {$Running} { return }
>+   if {!$reg_display($r,editable)} {return}
>     unedit
>
>     set Editing $r
>*************** body RegWin::acceptEdit {r} {
>*** 502,508 ****
>     }
>     if {[catch {gdb_cmd "set \$$reg_display($r,name)=$value"} result]} {
>       tk_messageBox -icon error -type ok -message $result \
>!       -title "Error in Expression" -parent $this
>       focus $ScrolledWin.$r.ent
>       $ScrolledWin.$r.ent selection to end
>     } else {
>--- 568,574 ----
>     }
>     if {[catch {gdb_cmd "set \$$reg_display($r,name)=$value"} result]} {
>       tk_messageBox -icon error -type ok -message $result \
>!       -title "Error in Expression" -parent [winfo toplevel $itk_interior]
>       focus $ScrolledWin.$r.ent
>       $ScrolledWin.$r.ent selection to end
>     } else {
>*************** body RegWin::acceptEdit {r} {
>*** 512,517 ****
>--- 578,591 ----
>   }
>
>   # ------------------------------------------------------------------
>+ # PUBLIC METHOD:  addToWatch - add a register to the watch window
>+ # ------------------------------------------------------------------
>+ body RegWin::addToWatch {reg} {
>+   global reg_display
>+   [ManagedWin::open WatchWin] add "\$$reg_display($reg,name)"
>+ }
>+
>+ # ------------------------------------------------------------------
>   # PUBLIC METHOD:  unedit - clear any editing entry on the screen
>   # ------------------------------------------------------------------
>   body RegWin::unedit {} {
>*************** body RegWin::update {} {
>*** 537,563 ****
>       set changed_reg_list {}
>     }
>
>!   set vmax 0
>     foreach r $reg_display_list {
>!     if {[catch {gdb_fetch_registers $reg_display($r,format) $r} 
>values($r)]} {
>         set values($r) ""
>       } else {
>!       set values($r) [string trim $values($r) \ ]
>       }
>       set l [string length $values($r)]
>!     if {$l > $vmax} {
>!       set vmax $l
>       }
>     }
>
>     foreach r $reg_display_list {
>       if {[lsearch -exact $changed_reg_list $r] != -1} {
>         set fg $HighlightForeground
>       } else {
>         set fg $NormalForeground
>       }
>!     $ScrolledWin.$r.val configure -text [fixLength $values($r) $vmax 
>right] \
>         -fg $fg
>     }
>     debug "END REGISTER UPDATE CALLBACK"
>   }
>--- 611,682 ----
>       set changed_reg_list {}
>     }
>
>!   set row 0
>!   set col 0
>     foreach r $reg_display_list {
>!     if {$row == 0} {
>!       # A minimum of 10 so the appearence is nice
>!       set vmax($col) 10
>!     }
>!
>!     # Typed registers natural values start with a brace (escaped by a slash)
>!     if {[catch {gdb_fetch_registers {} $r} valtest]} {
>         set values($r) ""
>+     } else {
>+       if {[string index $valtest 1] == "\{"} {
>+         # If it is a typed register, we print it raw
>+         set format r
>+         set reg_display($r,format) r
>+         set reg_display($r,typed) 1
>+       } else {
>+         set format $reg_display($r,format)
>+       }
>+       if {[catch {gdb_fetch_registers $format $r} values($r)]} {
>+         set values($r) ""
>+       } else {
>+         set values($r) [string trim $values($r) \ ]
>+       }
>+     }
>+
>+     # Check if we can edit this value
>+     if {[catch {gdb_cmd "set \$$reg_display($r,name)=$valtest"} rst]} {
>+       set reg_display($r,editable) 0
>       } else {
>!       set reg_display($r,editable) 1
>       }
>+     # Make sure we did not changed the original value with the test above
>+     catch {gdb_fetch_registers {} $r} valtest2
>+     if {$valtest2 != $valtest} {
>+       tk_messageBox -icon error -type ok -message "Register value 
>clobbered!" \
>+         -title "Internal Error" -parent [winfo toplevel $itk_interior]
>+     }
>+
>       set l [string length $values($r)]
>!     if {$l > $vmax($col)} {
>!       set vmax($col) $l
>!     }
>!     incr row
>!     if {$row == $nRows} {
>!       set row 0
>!       incr col
>       }
>     }
>
>+   set row 0
>+   set col 0
>     foreach r $reg_display_list {
>       if {[lsearch -exact $changed_reg_list $r] != -1} {
>         set fg $HighlightForeground
>       } else {
>         set fg $NormalForeground
>       }
>!     $ScrolledWin.$r.val configure -text [fixLength $values($r) 
>$vmax($col) right] \
>         -fg $fg
>+     incr row
>+     if {$row == $nRows} {
>+       set row 0
>+       incr col
>+     }
>     }
>     debug "END REGISTER UPDATE CALLBACK"
>   }
>Index: regwin.ith
>===================================================================
>RCS file: /cvs/src/src/gdb/gdbtk/library/regwin.ith,v
>retrieving revision 1.2
>diff -c -p -r1.2 regwin.ith
>*** regwin.ith  2000/04/05 23:53:12     1.2
>--- regwin.ith  2000/05/02 19:24:23
>*************** class RegWin {
>*** 56,61 ****
>--- 56,62 ----
>       method but3 {rn X Y}
>       method display_all {}
>       method delete_from_display_list {rn}
>+     method addToWatch {reg}
>       method edit {r}
>       method acceptEdit {r}
>       method unedit {}
>Index: tclIndex
>===================================================================
>RCS file: /cvs/src/src/gdb/gdbtk/library/tclIndex,v
>retrieving revision 1.3
>diff -c -p -r1.3 tclIndex
>*** tclIndex    2000/03/28 01:59:40     1.3
>--- tclIndex    2000/05/02 19:24:23
>*************** set auto_index(::RegWin::fixLength) [lis
>*** 393,398 ****
>--- 393,399 ----
>   set auto_index(::RegWin::but3) [list source [file join $dir regwin.itb]]
>   set auto_index(::RegWin::display_all) [list source [file join $dir 
> regwin.itb]]
>   set auto_index(::RegWin::delete_from_display_list) [list source [file 
> join $dir regwin.itb]]
>+ set auto_index(::RegWin::addToWatch) [list source [file join $dir 
>regwin.itb]]
>   set auto_index(::RegWin::edit) [list source [file join $dir regwin.itb]]
>   set auto_index(::RegWin::acceptEdit) [list source [file join $dir 
> regwin.itb]]
>   set auto_index(::RegWin::unedit) [list source [file join $dir regwin.itb]]
>Index: variables.tcl
>===================================================================
>RCS file: /cvs/src/src/gdb/gdbtk/library/variables.tcl,v
>retrieving revision 1.2
>diff -c -p -r1.2 variables.tcl
>*** variables.tcl       2000/03/30 22:14:24     1.2
>--- variables.tcl       2000/05/02 19:24:23
>*************** class VariableWin {
>*** 534,539 ****
>--- 534,543 ----
>             $Editing.ent selection to end
>         } else {
>             UnEdit
>+
>+             # We may have changed a register or something else that is
>+             # being displayed in another window
>+             gdbtk_update
>
>             # Get rid of entry... and replace it with new value
>             focus $Tree

Syd Polk
Engineering Manager
Cygnus Solutions,a Red Hat company


  reply	other threads:[~2000-05-03 10:44 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-05-02 12:33 Fernando Nasser
2000-05-03 10:44 ` Syd Polk [this message]
2000-05-03 11:00   ` Fernando Nasser

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4.2.0.58.20000503104415.00b8dc10@pop.cygnus.com \
    --to=spolk@cygnus.com \
    --cc=fnasser@cygnus.com \
    --cc=insight@sourceware.cygnus.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).