summaryrefslogtreecommitdiff
path: root/gdb/gdbtk/library/actiondlg.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/gdbtk/library/actiondlg.tcl')
-rw-r--r--gdb/gdbtk/library/actiondlg.tcl810
1 files changed, 0 insertions, 810 deletions
diff --git a/gdb/gdbtk/library/actiondlg.tcl b/gdb/gdbtk/library/actiondlg.tcl
deleted file mode 100644
index 20314bfabf9..00000000000
--- a/gdb/gdbtk/library/actiondlg.tcl
+++ /dev/null
@@ -1,810 +0,0 @@
-# Tracepoint actions dialog for Insight.
-# Copyright (C) 1997, 1998, 1999, 2001 Red Hat, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License (GPL) as published by
-# the Free Software Foundation; either version 2 of the License, or (at
-# your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-
-itcl::class ActionDlg {
- inherit ManagedWin
-
- # ------------------------------------------------------------------
- # CONSTRUCTOR
- # ------------------------------------------------------------------
- constructor {args} {
- global _TStepCount _TOtherVariable
-
- eval itk_initialize $args
-
- set Registers [gdb_reginfo name]
- if {$Line != ""} {
- set Locals [gdb_get_locals "$File:$Line"]
- set Args [gdb_get_args "$File:$Line"]
- } else {
- set Locals [gdb_get_locals "*$Address"]
- set Args [gdb_get_args "*$Address"]
- }
- set Variables [concat $Locals $Args]
- foreach a $Registers {
- lappend Variables "\$$a"
- }
-
- if {[llength $Args] > 0} {
- lappend Variables "All Arguments"
- }
- if {[llength $Locals] > 0} {
- lappend Variables "All Locals"
- }
- lappend Variables "All Registers"
- lappend Variables "Collect Stack"
-
- build_win
-
- # Set a default return status, in case we are destroyed
- set _TOtherVariable {}
-
- # Fill the listboxes with any default data
- if {"$Data" != {}} {
- change 1 $Data
- }
- }
-
- # ------------------------------------------------------------------
- # DESTRUCTOR - destroy window containing widget
- # ------------------------------------------------------------------
- destructor {
-
- # Remove this window and all hooks
- # grab release $this
-
- # Note that this is okay: the callback (TraceDlg::done, usually) will
- # ignore stray "cancel" callbacks
- eval $Callback cancel
- }
-
- # ------------------------------------------------------------------
- # METHOD: build_win - build the Trace dialog box (cache this?)
- # ------------------------------------------------------------------
- method build_win {} {
- global _TStepCount _TOtherVariable
-
- set f $itk_interior
-
- # The two frames of this dialog
- set bbox [frame $f.bbox]; # for holding OK,CANCEL buttons
- set data [frame $f.data]; # for everything else
-
- # Setup the button box
- button $bbox.ok -text OK -command "$this ok"
- button $bbox.cancel -text CANCEL -command "$this cancel"
- pack $bbox.ok $bbox.cancel -side left -padx 10 -expand yes
-
- # The "Data Collection" Frame
- set top [frame $data.top]
- set bot [frame $data.bot]
-
- set boxes [frame $top.boxes]
- set cFrame [frame $boxes.cFrame]
- set vFrame [frame $boxes.vFrame]
- set bFrame [frame $boxes.bframe]
- set oFrame [frame $top.uFrame]
- pack $cFrame $bFrame $vFrame -side left -expand yes -padx 5
-
- # While stepping
- if {$WhileStepping} {
- set step_frame [frame $top.stepf]
- label $step_frame.whilelbl -text {While Stepping, Steps:}
- set WhileSteppingEntry [entry $step_frame.steps \
- -textvariable _TStepCount \
- -width 5]
- pack $step_frame.whilelbl $WhileSteppingEntry -side left
- }
-
- # The Collect listbox
- label $cFrame.lbl -text {Collect:}
- set CollectLB [iwidgets::scrolledlistbox $cFrame.lb -hscrollmode dynamic \
- -vscrollmode dynamic \
- -selectioncommand [code $this toggle_button_state 0] \
- -dblclickcommand [code $this change 0] \
- -selectmode extended \
- -exportselection false]
- [$CollectLB component listbox] configure -background gray92
- pack $cFrame.lbl $cFrame.lb -side top -expand yes -pady 2
-
- # The Variables listbox
- label $vFrame.lbl -text {Variables:}
- set VariablesLB [iwidgets::scrolledlistbox $vFrame.lb -hscrollmode dynamic \
- -vscrollmode dynamic \
- -selectioncommand [code $this toggle_button_state 1] \
- -dblclickcommand [code $this change 1] \
- -selectmode extended \
- -exportselection false]
- [$VariablesLB component listbox] configure -background gray92
- pack $vFrame.lbl $vFrame.lb -side top -expand yes -pady 2
-
- # The button frame
- set AddButton [button $bFrame.add -text {<<< Collect} \
- -command "$this change 1" -state disabled]
- set RemoveButton [button $bFrame.del -text {Ignore >>>} \
- -command "$this change 0" -state disabled]
- pack $bFrame.add $bFrame.del -side top -expand yes -pady 5
-
- # The other frame (type-in)
- label $oFrame.lbl -text {Other:}
- set OtherEntry [entry $oFrame.ent -textvariable _TOtherVariable]
- pack $oFrame.lbl $OtherEntry -side left
- bind $OtherEntry <Return> "$this change_other"
-
- # Pack these frames
- if {$WhileStepping} {
- pack $step_frame -side top
- }
-
- pack $boxes $oFrame -side top -padx 5 -pady 5
- pack $top $bot -side top
-
- # Fill the list boxes
- fill_listboxes
-
- # Pack the main frames
- # after idle
- pack $f.data $bbox -side top -padx 4 -pady 2 \
- -expand yes -fill x
-
- # !!???
- if {$WhileStepping} {
- $WhileSteppingEntry delete 0 end
- $WhileSteppingEntry insert 0 $Steps
- }
- }
-
- method toggle_button_state {add} {
-
- # This is invoked whenever a <1> event is generated in
- # the listbox...
- if {$add} {
- set a [$VariablesLB getcurselection]
- if {"$a" != ""} {
- $AddButton configure -state normal
- $RemoveButton configure -state disabled
- }
- } else {
- set a [$CollectLB getcurselection]
- if {"$a" != ""} {
- $AddButton configure -state disabled
- $RemoveButton configure -state normal
- }
- }
- }
-
-
- # ------------------------------------------------------------------
- # METHOD: fill_listboxes - fills the two listboxes
- # ------------------------------------------------------------------
- method fill_listboxes {{last {}}} {
-
- # Fill the Collect listbox with the variables being collected
- if {[info exists Collect]} {
- fill_collect $last
- }
-
- fill_variables $last
- }
-
- # ------------------------------------------------------------------
- # METHOD: change - change a selected variable
- # ------------------------------------------------------------------
- method change {add {select {}}} {
- if {"$select" == {}} {
- set selections [get_selections $add]
- set lb [lindex $selections 0]
- set last [lindex $selections 1]
- set selection [lindex $selections 2]
- set noname 1
- } else {
- # This usually (only) occurs when we open this dialog for editing
- # some existing action.
- set lb {}
- set last {}
- set noname 0
- set selection $select
- }
-
- $RemoveButton configure -state disabled
- $AddButton configure -state disabled
-
- # Remove all the selections from one list
- # and add them to the other list
- if {$add} {
- set list1 $Variables
- set list2 $Collect
- } else {
- set list1 $Collect
- set list2 $Variables
- }
-
- foreach a $selection {
- if {$noname} {
- set name [$lb get $a]
- } else {
- set name $a
- }
-
- if {"$name" == "All Locals" || "$name" == {$loc}} {
- set name "All Locals"
- set lists [all_locals $add]
- set list1 [lindex $lists 0]
- set list2 [lindex $lists 1]
- } elseif {"$name" == "All Registers" || "$name" == {$reg}} {
- set name "All Registers"
- set lists [all_regs $add]
- set list1 [lindex $lists 0]
- set list2 [lindex $lists 1]
- } elseif {"$name" == "All Arguments" || "$name" == {$arg}} {
- set name "All Arguments"
- set lists [all_args $add]
- set list1 [lindex $lists 0]
- set list2 [lindex $lists 1]
- } else {
- set i [lsearch -exact $list1 $name]
- set list1 [lreplace $list1 $i $i]
-
- # Check if this is something we want to keep on a list
- if {[lsearch $Args $name] != -1 || [lsearch $Registers [string trim $name \$]] != -1 || [lsearch $Locals $name] != -1 || $add} {
- lappend list2 $name
- }
- }
-
- if {$add} {
- set Collect $list2
- set Variables $list1
- } else {
- set Collect $list1
- set Variables $list2
- }
- }
-
- # Update boxes (!! SLOW !!)
- fill_collect $last
- fill_variables $last
- }
-
- # ------------------------------------------------------------------
- # METHOD: fill_collect - fill the collect box
- # ------------------------------------------------------------------
- method fill_collect {{last {}}} {
-
- $CollectLB delete 0 end
- set Collect [sort $Collect]
- foreach a $Collect {
- $CollectLB insert end $a
- }
- if {"$last" != ""} {
- $CollectLB see $last
- }
- }
-
- # ------------------------------------------------------------------
- # METHOD: fill_variables - fill the variables box
- # ------------------------------------------------------------------
- method fill_variables {{last {}}} {
-
- $VariablesLB delete 0 end
- set Variables [sort $Variables]
- foreach a $Variables {
- $VariablesLB insert end $a
- }
-
- if {"$last" != ""} {
- $VariablesLB see $last
- }
- }
-
- # ------------------------------------------------------------------
- # METHOD: sort - sort a list of variables, placing regs and
- # special identifiers (like "All Locals") at end
- # ------------------------------------------------------------------
- method sort {list} {
-
- set special_names {
- "All Arguments" args \
- "All Locals" locs \
- "All Registers" regs \
- "Collect Stack" stack
- }
-
- foreach {name var} $special_names {
- set i [lsearch $list $name]
- if {$i != -1} {
- set $var 1
- set list [lreplace $list $i $i]
- } else {
- set $var 0
- }
- }
-
- # Extract all the locals, regs, args, globals
- set types_list {Args Locals Registers }
- foreach type $types_list {
- set used_$type {}
-
- foreach a [set $type] {
- set i [lsearch $list $a]
- if {$i != -1} {
- lappend used_$type $a
- set list [lreplace $list $i $i]
- }
- }
- set used_$type [lsort [set used_$type]]
- }
-
- set globals [lsort $list]
-
- # Sort the remaining list in order: args, locals, globals, regs
- set list [concat $used_Args $used_Locals $globals $used_Registers]
-
- set list2 {}
-
- foreach {name var} $special_names {
- if {[set $var]} {
- lappend list2 $name
- }
- }
-
- set list [concat $list2 $list]
- return $list
- }
-
- # ------------------------------------------------------------------
- # METHOD: all_args - add/remove all args
- # ------------------------------------------------------------------
- method all_args {add} {
-
- if {$add} {
- set list1 $Variables
- set list2 $Collect
- } else {
- set list1 $Collect
- set list2 $Variables
- }
-
-# foreach var $Args {
-# set i [lsearch $list1 $var]
-# if {$i != -1} {
-# set list1 [lreplace $list1 $i $i]
-# lappend list2 $var
-# }
-# }
-
- lappend list2 "All Arguments"
- set i [lsearch $list1 "All Arguments"]
- if {$i != -1} {
- set list1 [lreplace $list1 $i $i]
- }
-
- return [list $list1 $list2]
- }
-
- # ------------------------------------------------------------------
- # METHOD: all_locals - add/remove all locals
- # ------------------------------------------------------------------
- method all_locals {add} {
-
- if {$add} {
- set list1 $Variables
- set list2 $Collect
- } else {
- set list1 $Collect
- set list2 $Variables
- }
-
-# foreach var $Locals {
-# set i [lsearch $list1 $var]
-# if {$i != -1} {
-# set list1 [lreplace $list1 $i $i]
-# lappend list2 $var
-# }
-# }
-
- lappend list2 "All Locals"
- set i [lsearch $list1 "All Locals"]
- if {$i != -1} {
- set list1 [lreplace $list1 $i $i]
- }
-
- return [list $list1 $list2]
- }
-
- # ------------------------------------------------------------------
- # METHOD: all_regs - add/remove all registers
- # ------------------------------------------------------------------
- method all_regs {add} {
-
- if {$add} {
- set list1 $Variables
- set list2 $Collect
- } else {
- set list1 $Collect
- set list2 $Variables
- }
-
-# foreach var $Registers {
-# set i [lsearch $list1 "\$$var"]
-# if {$i != -1} {
-# set list1 [lreplace $list1 $i $i]
-# lappend list2 "\$$var"
-# }
-# }
-
- lappend list2 "All Registers"
- set i [lsearch $list1 "All Registers"]
- if {$i != -1} {
- set list1 [lreplace $list1 $i $i]
- }
-
- return [list $list1 $list2]
- }
-
- # ------------------------------------------------------------------
- # METHOD: change_other - add/remove a user defined type
- # ------------------------------------------------------------------
- method change_other {} {
- set other [$OtherEntry get]
-
- if {"$other" != ""} {
- set added 0
-
- # Check if this is a local/register/arg
- set i [lsearch $Locals "$other"]
- if {$i != -1} {
- set i [lsearch $Collect "$other"]
- set added 1
- if {$i != -1} {
- # It's a local on the collection list
- debug "local on collection list"
- set add 0
- set list1 [lreplace $Collect $i $i]
- set list2 [concat $Variables "$other"]
- } else {
- # It's a local on the variables list
- debug "local on variable list"
- set add 1
- set i [lsearch $Variables "$other"]
- set list1 [lreplace $Variables $i $i]
- set list2 [concat $Collect "$other"]
- }
- }
-
- set i [lsearch $Registers [string trim "$other" \$]]
- if {$i != -1} {
- set i [lsearch $Collect "$other"]
- set added 1
- if {$i != -1} {
- # It's a register on the collection list
- debug "register on collection list"
- set add 0
- set list1 [lreplace $Collect $i $i]
- set list2 [concat $Variables "$other"]
- } else {
- # It's a register on the variables list
- debug "register on variable list"
- set add 1
- set i [lsearch $Variables "$other"]
- set list1 [lreplace $Variables $i $i]
- set list2 [concat $Collect "$other"]
- }
- }
-
- set i [lsearch $Args $other]
- if {$i != -1} {
- set i [lsearch $Collect "$other"]
- set added 1
- if {$i != -1} {
- # It's an arg on the collection list
- debug "arg on collection list"
- set add 0
- set list1 [lreplace $Collect $i $i]
- set list2 [concat $Variables "$other"]
- } else {
- # It's an arg on the variables list
- debug "arg on variable list"
- set add 1
- set i [lsearch $Variables "$other"]
- set list1 [lreplace $Variables $i $i]
- set list2 [concat $Collect "$other"]
- }
- }
-
- # Check for special tags
- if {!$added} {
- if {"[string tolower $other]" == "all locals"} {
- set i [lsearch $Variables "All Locals"]
- if {$i != -1} {
- # It's "All Locals" on the variables list
- set add 1
- set lists [all_locals 1]
- set list1 [lindex $lists 0]
- set list2 [lindex $lists 1]
- } else {
- # It's "All Locals" on the Collect list
- set add 0
- set lists [all_locals 0]
- set list1 [lindex $lists 0]
- set list2 [lindex $lists 1]
- }
- } elseif {"[string tolower $other]" == "all registers"} {
- set i [lsearch $Variables "All Registers"]
- if {$i != -1} {
- # It's "All Registers" on the Variables list
- set add 1
- set lists [all_regs 1]
- set list1 [lindex $lists 0]
- set list2 [lindex $lists 1]
- } else {
- set add 0
- set lists [all_regs 0]
- set list1 [lindex $lists 0]
- set list2 [lindex $lists 1]
- }
- } elseif {"[string tolower $other]" == "all arguments"} {
- set i [lsearch $Variables "All Arguments"]
- if {$i != -1} {
- # It's "All Arguments" on the Variables list
- set add 1
- set lists [all_args 1]
- set list1 [lindex $lists 0]
- set list2 [lindex $lists 1]
- } else {
- set add 0
- set lists [all_args 0]
- set list1 [lindex $lists 0]
- set list2 [lindex $lists 1]
- }
- } elseif {"[string tolower $other]" == "collect stack"} {
- set i [lsearch $Variables "Collect Stack"]
- if {$i != -1} {
- # It's "All Arguments" on the Variables list
- set add 1
- set lists [all_args 1]
- set list1 [lindex $lists 0]
- set list2 [lindex $lists 1]
- } else {
- set add 0
- set lists [all_args 0]
- set list1 [lindex $lists 0]
- set list2 [lindex $lists 1]
- }
- } else {
- # Check if this entry is on the Collect list
- set i [lsearch $Collect $other]
- if {$i != -1} {
- # It's on the list -- remove it
- set add 0
- set list1 [lreplace $Collect $i $i]
- set list2 $Variables
- } else {
- # It's not on the list -- add it
-
- set other [string trim $other \ \r\t\n]
-
- # accept everything, send to gdb to validate
- set ok 1
-
- # memranges will be rejected right here
-
- if {[string range $other 0 1] == "\$("} {
- tk_messageBox -type ok -icon error \
- -message "Expression syntax not supported"
- set ok 0
- }
-
- # do all syntax checking later
- if {$ok} {
- #debug "Keeping \"$other\""
- # We MUST string out all spaces...
- if {[regsub -all { } $other {} expression]} {
- set other $expression
- }
- set add 1
- set list1 $Variables
- set list2 [concat $Collect "$other"]
- } else {
- #debug "Discarding \"$other\""
- }
- }
- }
- }
-
- # Clear the entry
- $OtherEntry delete 0 end
-
- if {$add} {
- set Variables $list1
- set Collect $list2
- } else {
- set Variables $list2
- set Collect $list1
- }
- fill_listboxes
- }
- }
-
-
- # ------------------------------------------------------------------
- # METHOD: get_selections - get all the selected variables
- # pass 0 to get the selections from the collect box
- # Returns a list of: listbox in which the selections were
- # obtained, last element selected on the list, and all the
- # selected elements
- # ------------------------------------------------------------------
- method get_selections {vars} {
-
- if {$vars} {
- set widget $VariablesLB
- } else {
- set widget $CollectLB
- }
-
- set elements [$widget curselection]
- set list {}
- set i 0
- foreach i $elements {
- lappend list [$widget get $i]
- }
-
- return [list $widget $i $elements]
- }
-
- # ------------------------------------------------------------------
- # METHOD: cancel - cancel the dialog and do not set the trace
- # ------------------------------------------------------------------
- method cancel {} {
- ::delete object $this
- }
-
- method remove_special {list items} {
-
- foreach item $items {
- set i [lsearch $list $item]
- if {$i != -1} {
- set list [lreplace $list $i $i]
- } else {
- set i [lsearch $list \$$item]
- if {$i != -1} {
- set list [lreplace $list $i $i]
- }
- }
- }
-
- return $list
- }
-
- # ------------------------------------------------------------------
- # METHOD: ok - validate the tracepoint and install it
- # ------------------------------------------------------------------
- method ok {} {
- global _TStepCount
-
- # Add anything in the OtherEntry
- change_other
-
- # Check that we are collecting data
- if {[llength $Collect] == 0} {
- # No data!
- set msg "No data specified for the given action."
- set answer [tk_messageBox -type ok -title "Tracepoint Error" \
- -icon error \
- -message $msg]
- case $answer {
- cancel {
- cancel
- }
- ok {
- return
- }
- }
- }
-
- set i [lsearch $Collect "All Locals"]
- if {$i != -1} {
- set data [lreplace $Collect $i $i]
- set data [concat $data {$loc}]
-
- # Remove all the locals from the list
- set data [remove_special $data $Locals]
- } else {
- set data $Collect
- }
-
- set i [lsearch $data "All Registers"]
- if {$i != -1} {
- set data [lreplace $data $i $i]
- set data [concat $data {$reg}]
-
- # Remove all the locals from the list
- set data [remove_special $data $Registers]
- }
-
- set i [lsearch $data "All Arguments"]
- if {$i != -1} {
- set data [lreplace $data $i $i]
- set data [concat $data {$arg}]
-
- # Remove all the locals from the list
- set data [remove_special $data $Args]
- }
-
- set i [lsearch $data "Collect Stack"]
- if {$i != -1} {
- set data [lreplace $data $i $i]
- set data [concat $data [collect_stack]]
-
- }
-
- # Remove repeats
- set d {}
- foreach i $data {
- if {![info exists check($i)]} {
- set check($i) 1
- lappend d $i
- }
- }
-
- if {$WhileStepping} {
- set steps $_TStepCount
- } else {
- set steps 0
- }
-
- if {"$Data" != {}} {
- set command "modify"
- } else {
- set command "add"
- }
-
- debug "DATA = $data"
- eval $Callback $command $steps [list $data]
- ::delete object $this
- }
-
-
- method collect_stack {} {
- return $StackCollect
- }
-
- method cmd {line} {
- $line
- }
-
- # PUBLIC DATA
- public variable File
- public variable Line {}
- public variable WhileStepping 0
- public variable Number
- public variable Callback
- public variable Data {}
- public variable Steps {}
- public variable Address {}
-
- # PROTECTED DATA
- protected variable WhileSteppingEntry
- protected variable CollectLB
- protected variable VariablesLB
- protected variable Variables {}
- protected variable Collect {}
- protected variable Locals
- protected variable Args
- protected variable Registers
- protected variable Others {}
- protected variable AddButton
- protected variable RemoveButton
- protected variable OtherEntry
- protected variable StackCollect {*(char*)$sp@64}
-}