This is the mail archive of the insight@sourceware.cygnus.com mailing list for the Insight project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Yet Another Register Window Patch


Steven,

This looks good, thanks for catching this.  If you are going to save
away the hidden registers, then you need to make sure that the
"Display All Registers" menu item is activated whenever there are
missing registers.  As it now stands, it only turns on when you
actually remove one from the UI.  The following patch adds this bit
too (it is against the sourceware cvs.)  Does this look okay to you?
If so, I will check it in.

Jim

Index: regwin.ith
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/library/regwin.ith,v
retrieving revision 1.1.1.1
diff -p -c -r1.1.1.1 regwin.ith
*** regwin.ith	2000/02/07 00:19:42	1.1.1.1
--- regwin.ith	2000/04/05 18:19:36
*************** class RegWin {
*** 17,22 ****
--- 17,24 ----
    
    private {
      variable reg_display_list {}
+     variable all_regs_shown    1
+     variable disp_all_menu_item
      variable num_regs 0
      variable nRows
      variable nCols
Index: regwin.itb
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/library/regwin.itb,v
retrieving revision 1.3
diff -p -c -r1.3 regwin.itb
*** regwin.itb	2000/04/04 00:17:47	1.3
--- regwin.itb	2000/04/05 18:18:12
***************
*** 11,17 ****
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
- 
  # ------------------------------------------------------------------
  #  CONSTRUCTOR - create new register window
  # ------------------------------------------------------------------
--- 11,16 ----
*************** body RegWin::constructor {args} {
*** 46,51 ****
--- 45,51 ----
  # ------------------------------------------------------------------
  body RegWin::destructor {} {
    debug "RegWin::destructor"
+   save_reg_display_vars
    remove_hook gdb_update_hook "$this update"
    remove_hook gdb_busy_hook [list $this busy]
    remove_hook gdb_idle_hook [list $this idle]
*************** body RegWin::destructor {} {
*** 55,61 ****
  }
    
  
- 
  # ------------------------------------------------------------------
  #  METHOD:  build_win - build the main register window
  # ------------------------------------------------------------------
--- 55,60 ----
*************** body RegWin::build_win {} {
*** 160,166 ****
      $m add command -label "Remove from Display" -underline 0 -state disabled
      $m add separator
      $m add command -label "Display All Registers" -underline 0 -state disabled \
!       -command "$this display_all"
    }
    
    set Menu [menu $ScrolledWin.pop -tearoff 0]
--- 159,170 ----
      $m add command -label "Remove from Display" -underline 0 -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]
! 
!     if {!$all_regs_shown} {
!       $m entryconfigure $disp_all_menu_item -state normal
!     }
    }
    
    set Menu [menu $ScrolledWin.pop -tearoff 0]
*************** body RegWin::init_reg_display_vars {args
*** 187,193 ****
--- 191,199 ----
    set reg_display_list {}
    set regnames [gdb_regnames -numbers]
    set i 1
+   set x 0
    foreach r $regnames {
+     incr x
      set name [lindex $r 0]
      set rn   [lindex $r 1]
      set reg_display($rn,name) $name
*************** body RegWin::init_reg_display_vars {args
*** 195,200 ****
--- 201,207 ----
      if {$format == ""} { set format x }
      set reg_display($rn,format) $format
      if {$args != "" && [pref getd gdb/reg/$name] == "no"} {
+       set all_regs_shown 0
        set reg_display($rn,line) 0
      } else {
        set reg_display($rn,line) $i
*************** body RegWin::init_reg_display_vars {args
*** 203,209 ****
      }
    }
    set num_regs [expr {$i - 1}]
!   set max_regs $rn
    set reg_names_dirty 0
  }
  
--- 210,216 ----
      }
    }
    set num_regs [expr {$i - 1}]
!   set max_regs $x
    set reg_names_dirty 0
  }
  
*************** body RegWin::disassembly_changed {} {
*** 224,231 ****
  # ------------------------------------------------------------------------------
  body RegWin::save_reg_display_vars {} {
    global reg_display max_regs
!   set rn 0
!   while {$rn < $max_regs} {
      set name $reg_display($rn,name)
      if {$reg_display($rn,line) == 0} {
        pref setd gdb/reg/$name no
--- 231,239 ----
  # ------------------------------------------------------------------------------
  body RegWin::save_reg_display_vars {} {
    global reg_display max_regs
!   set regnames [gdb_regnames -numbers]
!   foreach r $regnames {
!     set rn   [lindex $r 1]
      set name $reg_display($rn,name)
      if {$reg_display($rn,line) == 0} {
        pref setd gdb/reg/$name no
*************** body RegWin::save_reg_display_vars {} {
*** 237,243 ****
      } else {
        pref setd gdb/reg/$name-format {}
      }
-     incr rn
    }
    pref_save ""
  }
--- 245,250 ----
*************** body RegWin::but3 {rn X Y} {
*** 429,435 ****
  # ------------------------------------------------------------------
  body RegWin::display_all {} {
    init_reg_display_vars
!   $itk_interior.m.reg entryconfigure 4 -state disabled
    reconfig
  }
  
--- 436,443 ----
  # ------------------------------------------------------------------
  body RegWin::display_all {} {
    init_reg_display_vars
!   $itk_interior.m.reg entryconfigure $disp_all_menu_item -state disabled
!   set all_regs_shown 1
    reconfig
  }
  
*************** body RegWin::delete_from_display_list {r
*** 441,460 ****
    global reg_display max_regs
    set reg_display($rn,line) 0
    set reg_display_list {}
!   set rn 0
    set i 0
!   while {$rn < $max_regs} {
!     if {$reg_display($rn,line) > 0} {
!       lappend reg_display_list $rn
        incr i
!       set reg_display($rn,line) $i
      }
-     incr rn
    }
    set num_regs $i
    reconfig
    $itk_interior.m.reg entryconfigure 4 -state normal
  }
  
  # ------------------------------------------------------------------
  #  PUBLIC METHOD:  edit - edit a cell
--- 449,470 ----
    global reg_display max_regs
    set reg_display($rn,line) 0
    set reg_display_list {}
!   set regnames [gdb_regnames -numbers]
    set i 0
!   foreach r $regnames {
!     set rnx [lindex $r 1]
!     if {$reg_display($rnx,line) > 0} {
!       lappend reg_display_list $rnx
        incr i
!       set reg_display($rnx,line) $i
      }
    }
    set num_regs $i
    reconfig
    $itk_interior.m.reg entryconfigure 4 -state normal
  }
+ 
+ 
  
  # ------------------------------------------------------------------
  #  PUBLIC METHOD:  edit - edit a cell


 > Hi All,
 > 
 > Following is a patch the fixes a problem with non sequential register
 > numbers (actually finalising a previous patch by someone else patch that
 > only half did this). The problem was that on such systems registers
 > could not be hidden as that code assumed sequential numbered registers.
 > I fixed that, as well as similar code in the Save State routine for the
 > registers. Because I was there, and i needed it I put a call in to the
 > function when the window is closed, so now the register window remebers
 > its state. 
 > 
 > Anyway, Heres the patch.
 > 
 > 2000-04-04   Steve Johnson  <sbjohnson@ozemail.com.au>
 >         
 >         * regwin.itb (destructor): Call save_reg_display_vars to save
 > the
 >         state of the register window when exiting.
 >         * regwin.itb (init_reg_display_vars): Count the number of
 > registers
 >         actually available, instead of using the last real register
 > number.
 >         * regwin.itb (save_reg_display_vars): allows register state to
 > be
 >         saved when registers numbers are not sequential.
 >         * regwin.itb (delete_from_display_list): allows registers to be
 >         hidden when a target does not have sequentially numbered
 > registers.
 > 
 > diff -C2 -r -b ../gdb_cvs/src/gdb/gdbtk/library/regwin.itb
 > src/gdb/gdbtk/library/regwin.itb
 > *** ../gdb_cvs/src/gdb/gdbtk/library/regwin.itb Tue Apr  4 23:09:38 2000
 > --- src/gdb/gdbtk/library/regwin.itb    Wed Apr  5 05:32:39 2000
 > ***************
 > *** 12,16 ****
 >   # GNU General Public License for more details.
 >   
 > - 
 >   # ------------------------------------------------------------------
 >   #  CONSTRUCTOR - create new register window
 > --- 12,15 ----
 > ***************
 > *** 47,50 ****
 > --- 46,50 ----
 >   body RegWin::destructor {} {
 >     debug "RegWin::destructor"
 > +   save_reg_display_vars
 >     remove_hook gdb_update_hook "$this update"
 >     remove_hook gdb_busy_hook [list $this busy]
 > ***************
 > *** 56,60 ****
 >     
 >   
 > - 
 >   # ------------------------------------------------------------------
 >   #  METHOD:  build_win - build the main register window
 > --- 56,59 ----
 > ***************
 > *** 188,192 ****
 > --- 187,193 ----
 >     set regnames [gdb_regnames -numbers]
 >     set i 1
 > +   set x 0
 >     foreach r $regnames {
 > +     incr x
 >       set name [lindex $r 0]
 >       set rn   [lindex $r 1]
 > ***************
 > *** 204,208 ****
 >     }
 >     set num_regs [expr {$i - 1}]
 > !   set max_regs $rn
 >     set reg_names_dirty 0
 >   }
 > --- 205,209 ----
 >     }
 >     set num_regs [expr {$i - 1}]
 > !   set max_regs $x
 >     set reg_names_dirty 0
 >   }
 > ***************
 > *** 225,230 ****
 >   body RegWin::save_reg_display_vars {} {
 >     global reg_display max_regs
 > !   set rn 0
 > !   while {$rn < $max_regs} {
 >       set name $reg_display($rn,name)
 >       if {$reg_display($rn,line) == 0} {
 > --- 226,232 ----
 >   body RegWin::save_reg_display_vars {} {
 >     global reg_display max_regs
 > !   set regnames [gdb_regnames -numbers]
 > !   foreach r $regnames {
 > !     set rn   [lindex $r 1]
 >       set name $reg_display($rn,name)
 >       if {$reg_display($rn,line) == 0} {
 > ***************
 > *** 238,242 ****
 >         pref setd gdb/reg/$name-format {}
 >       }
 > -     incr rn
 >     }
 >     pref_save ""
 > --- 240,243 ----
 > ***************
 > *** 442,454 ****
 >     set reg_display($rn,line) 0
 >     set reg_display_list {}
 > !   set rn 0
 >     set i 0
 > !   while {$rn < $max_regs} {
 > !     if {$reg_display($rn,line) > 0} {
 > !       lappend reg_display_list $rn
 >         incr i
 > !       set reg_display($rn,line) $i
 >       }
 > -     incr rn
 >     }
 >     set num_regs $i
 > --- 443,455 ----
 >     set reg_display($rn,line) 0
 >     set reg_display_list {}
 > !   set regnames [gdb_regnames -numbers]
 >     set i 0
 > !   foreach r $regnames {
 > !     set rnx [lindex $r 1]
 > !     if {$reg_display($rnx,line) > 0} {
 > !       lappend reg_display_list $rnx
 >         incr i
 > !       set reg_display($rnx,line) $i
 >       }
 >     }
 >     set num_regs $i
 > ***************
 > *** 457,460 ****
 > --- 458,463 ----
 >   }
 >   
 > + 
 > + 
 >   # ------------------------------------------------------------------
 >   #  PUBLIC METHOD:  edit - edit a cell
 > 

-- 
++==++==++==++==++==++==++==++==++==++==++==++==++==++==++==++==++==++==++
Jim Ingham                                              jingham@cygnus.com
Cygnus Solutions, a Red Hat Company                      

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]