proc pref_read {} {
global prefs_init_filename env gdb_ImageDir GDBTK_LIBRARY GDBStartup
global tcl_platform
if {[info exists env(HOME)]} {
if {$tcl_platform(platform) == "windows"} {
set home [ide_cygwin_path to_win32 $env(HOME)]
} else {
set home $env(HOME)
}
} else {
set home ""
}
if {$tcl_platform(platform) == "windows"} {
set prefs_init_filename "gdbtk.ini"
} else {
set prefs_init_filename ".gdbtkinit"
}
if {!$GDBStartup(inhibit_prefs)} {
set file_opened 0
if {[file exists $prefs_init_filename]} {
if {[catch {open $prefs_init_filename r} fd]} {
dbug E "$fd"
return
}
set file_opened 1
} elseif {$home != ""} {
set name [file join $home $prefs_init_filename]
if {[file exists $name]} {
if {[catch {open $name r} fd]} {
dbug E "$fd"
return
}
set prefs_init_filename $name
set file_opened 1
}
}
if {$file_opened == "1"} {
set section gdb
set version 0
while {[gets $fd line] >= 0} {
switch -regexp -- $line {
{^[ \t\n]* if {[regexp -- "^# GDBtkInitVersion: (\[0-9\]+)\$" $line \
dummy v]} {
set version $v
}
}
{^[ \t\n]*$} {
; }
{\[.*\]} {
regexp {\[(.*)\]} $line match section
}
{[ \t\n]*option.*} {
set line [string trimleft $line]
eval $line
}
default {
set a ""
set name ""
set val ""
regexp "\[ \t\n\]*\(.+\)=\(.+\)" $line a name val
if {$a == "" || $name == ""} {
dbug W "Cannot parse line: $line"
} else {
set val [unescape_value $val $version]
if {$section == "gdb"} {
pref setd gdb/$name $val
} elseif {$section == "global" && [regexp "^font/" $name]} {
set name [split $name /]
set f global/
append f [join [lrange $name 1 end] /]
if {[lsearch [font names] $f] == -1} {
eval define_font $f $val
} else {
pref set global/font/[join [lrange $name 1 end] /] $val
}
} elseif {$section == "global"} {
pref setd $section/$name $val
} else {
if {$val == "src-font"} {set val "global/fixed"}
pref setd gdb/$section/$name $val
}
}
}
}
}
close $fd
} elseif {$home != ""} {
set prefs_init_filename [file join $home $prefs_init_filename]
}
set gdb_ImageDir [file join $GDBTK_LIBRARY [pref get gdb/ImageDir]]
}
pref_set_colors
}
proc pref_save {{win {}}} {
global prefs_init_filename GDBStartup
if {!$GDBStartup(inhibit_prefs)} {
debug "pref_save $prefs_init_filename"
if {[catch {open $prefs_init_filename w} fd]} {
debug "ERROR: $fd"
return
}
puts $fd "\# GDBtk Init file"
puts $fd {
set plist [pref list]
puts $fd "\[global\]"
foreach var $plist {
set t [split $var /]
if {[lindex $t 0] == "global"} {
set x [join [lrange $t 1 end] /]
set v [escape_value [pref get $var]]
if {$x != "" && $v != ""} {
puts $fd "\t$x=$v"
}
}
}
puts $fd "\[gdb\]"
foreach var $plist {
set t [split $var /]
if {[lindex $t 0] == "gdb"
&& [string compare [join [lreplace $t 0 1] /] ""] == 0} {
set x [lindex $t 1]
if {$x != ""} {
set v [escape_value [pref get $var]]
puts $fd "\t$x=$v"
}
}
}
lappend secs load console src reg stack locals watch bp search \
process geometry help browser kod window session mem
foreach section $secs {
puts $fd "\[$section\]"
foreach var $plist {
set t [split $var /]
if {[lindex $t 0] == "gdb" && [lindex $t 1] == $section} {
set x [join [lrange $t 2 end] /]
set v [escape_value [pref get $var]]
if {$x != "" && $v != ""} {
puts $fd "\t$x=$v"
}
}
}
}
close $fd
}
if {$win != ""} {
$win delete
}
}
proc escape_value {val} {
if {[info tclversion] >= 8.1} {
set expr {([\[\]=%\n])}
} else {
set expr "(\[\]\[=%\n\])"
}
regsub -all -- $expr $val \
{[format "%%%02x" [scan {\1} %c x; set x]]} newval
return [subst -nobackslashes -novariables $newval]
}
proc unescape_value {val version} {
switch -exact -- $version {
0 {
if {[regsub -all -- {!%} $val = newval]} {
return $newval
}
}
1 {
regsub -all -- "%(..)" $val \
{[format %c 0x\1]} newval
return [subst -nobackslashes -novariables $newval]
}
default {
error "Unknown encoding version $version"
}
}
return $val
}
proc pref_set_defaults {} {
global GDBTK_LIBRARY tcl_platform gdb_ImageDir
pref define gdb/ImageDir images2
set gdb_ImageDir [file join $GDBTK_LIBRARY [pref get gdb/ImageDir]]
pref define gdb/font_cache ""
pref define gdb/mode 0; pref define gdb/control_target 1; pref define gdb/B1_behavior 1; pref define gdb/use_icons 1; pref define gdb/load/verbose 0
pref define gdb/load/main 1
pref define gdb/load/exit 1
pref define gdb/load/check 0
pref define gdb/load/bp_at_func 0
pref define gdb/load/bp_func ""
pref define gdb/load/baud 38400
if {$tcl_platform(platform) == "windows"} {
pref define gdb/load/port com1
} else {
pref define gdb/load/port "/dev/ttyS0"
}
pref define gdb/window/active {}
pref define gdb/console/prompt "(gdb) "
pref define gdb/console/deleteLeft 1
pref define gdb/console/wrap 0
pref define gdb/console/prompt_fg DarkGreen
pref define gdb/console/error_fg red
pref define gdb/console/log_fg green
pref define gdb/console/target_fg blue
pref define gdb/console/font global/fixed
pref define gdb/src/PC_TAG green
pref define gdb/src/STACK_TAG gold
pref define gdb/src/BROWSE_TAG \ pref define gdb/src/handlebg red
pref define gdb/src/bp_fg red
pref define gdb/src/temp_bp_fg orange
pref define gdb/src/disabled_fg black
pref define gdb/src/font global/fixed
pref define gdb/src/break_fg black
pref define gdb/src/source2_fg navy
pref define gdb/src/variableBalloons 1
pref define gdb/src/trace_fg magenta
pref define gdb/src/tab_size 8
pref define gdb/src/linenums 1
pref define gdb/src/thread_fg pink
pref define gdb/src/top_control 1;
pref define gdb/src/run_attach 0
pref define gdb/src/run_load 0
pref define gdb/src/run_run 1
pref define gdb/src/run_cont 0
pref define gdb/src/disassembly-flavor ""
pref define gdb/variable/font global/fixed
pref define gdb/variable/disabled_fg gray
pref define gdb/stack/font global/fixed
pref define gdb/reg/rows 16
pref define gdb/global_prefs/save_fg red
pref define gdb/global_prefs/message_fg white
pref define gdb/global_prefs/message_bg red
pref define gdb/search/last_symbol ""
pref define gdb/search/filter_mode "starts with"
pref define gdb/browser/hide_h 0
pref define gdb/browser/width 0
pref define gdb/browser/top_height 0
pref define gdb/browser/view_height -1
pref define gdb/browser/view_is_open 0
pref define gdb/bp/show_threads 0
pref define gdb/help/browser 0
pref define gdb/kod/show_icon 0
pref define gdb/main_names [list MAIN___ MAIN__ main cyg_user_start cyg_start ]
pref define gdb/warnings/signal 0
pref define gdb/mem/size 4
pref define gdb/mem/numbytes 0
pref define gdb/mem/format x
pref define gdb/mem/ascii 1
pref define gdb/mem/ascii_char .
pref define gdb/mem/bytes_per_row 16
pref define gdb/mem/color green
pref define gdb/editor ""
}
proc pref_set_colors {} {
global Colors tcl_platform
debug
if {$tcl_platform(platform) == "windows"} {
option add *foreground SystemButtonText
set Colors(fg) SystemButtonText
option add *background SystemButtonFace
set Colors(bg) SystemButtonFace
option add *Entry*foreground SystemWindowText
option add *Text*foreground SystemWindowText
set Colors(textfg) SystemWindowText
option add *Entry*background SystemWindow
option add *Text*background SystemWindow
set Colors(textbg) SystemWindow
option add *selectForeground SystemHighlightText
set Colors(sfg) SystemHighlightText
option add *selectBackground SystemHighlight
set Colors(sbg) SystemHighlight
option add *highlightBackground SystemButtonFace
set Colors(hbg) SystemButtonFace
return
}
entry .e
set Colors(textbg) [option get .e background {}]
if {$Colors(textbg) == ""} {set Colors(textbg) white}
set Colors(textfg) [option get .e foreground {}]
if {$Colors(textfg) == ""} {set Colors(textfg) black}
set Colors(bg) [option get . background {}]
if {$Colors(bg) == ""} {set Colors(bg) lightgray}
set Colors(fg) [option get . foreground {}]
if {$Colors(fg) == ""} {set Colors(fg) black}
option add *background $Colors(bg)
option add *Text*background $Colors(textbg)
option add *Entry*background $Colors(textbg)
option add *foreground $Colors(fg)
option add *Text*foreground $Colors(textfg)
option add *Entry*foreground $Colors(textfg)
set Colors(hbg) $Colors(bg)
option add *highlightBackground $Colors(hbg)
set Colors(sbg) [option get .e selectBackground {}]
if {$Colors(sbg) == ""} {set Colors(sbg) blue}
option add *selectBackground $Colors(sbg)
set Colors(sfg) [option get .e selectForeground {}]
if {$Colors(sfg) == ""} {set Colors(sfg) white}
option add *selectForeground $Colors(sfg)
set bg2 [winfo rgb . $Colors(bg)]
set dbg [format option add *activeBackground $dbg
option add *troughColor $dbg
option add *selectColor $Colors(sbg)
destroy .e
}