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]} {
debug "$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]} {
debug "$fd"
return
}
set prefs_init_filename $name
set file_opened 1
}
}
if {$file_opened == "1"} {
set section gdb
while {[gets $fd line] >= 0} {
switch -regexp -- $line {
{^[ \t\n]* ; }
{^[ \t\n]*$} {
; }
{\[.*\]} {
regexp {\[(.*)\]} $line match section
}
{[ \t\n]*option.*} {
set line [string trimleft $line]
eval $line
}
default {
regexp "\[ \t\n\]*\(.+\)=\(.+\)" $line a name val
set val [unescape_value $val]
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 {
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]]
}
}
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"
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" && [lindex $t 2] == ""} {
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
foreach section $secs {
puts $fd "\[$section\]"
foreach var $plist {
set t [split $var /]
if {[lindex $t 0] == "gdb" && [lindex $t 1] == $section} {
set x [lindex $t 2]
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 {[regsub -all -- = $val {!%} newval]} {
return $newval
}
return $val
}
proc unescape_value {val} {
if {[regsub -all -- {!%} $val = newval]} {
return $newval
}
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/font src-font
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 src-font
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/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 ""
set val [pref get global/font/fixed]
eval font create src-font $val
pref add_hook global/font/fixed pref_src-font_trace
pref define gdb/variable/font src-font
pref define gdb/variable/highlight_fg blue
pref define gdb/variable/disabled_fg gray
pref define gdb/stack/font src-font
pref define gdb/reg/highlight_fg blue
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]
pref define gdb/warnings/signal 0
}
proc pref_src-font_trace {varname val} {
eval font configure src-font $val
}