header.tk
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:18k
- # FILE: header.tk
- # This file is boilerplate TCL/TK function definitions for 'make xconfig'.
- #
- # CHANGES
- # =======
- #
- # 8 January 1999, Michael Elizabeth Chastain, <mec@shout.net>
- # - Remove unused do_cmd function (part of the 2.0 sound support).
- # - Arrange buttons in three columns for better screen fitting.
- # - Add CONSTANT_Y, CONSTANT_M, CONSTANT_N for commands like:
- # dep_tristate 'foo' CONFIG_FOO m
- #
- # 23 January 1999, Michael Elizabeth Chastain, <mec@shout.net>
- # - Shut vfix the hell up.
- #
- # 24 January 1999, Michael Elizabeth Chastain, <mec@shout.net>
- # - Improve the exit message (Jeff Ronne).
- #
- # This is a handy replacement for ".widget cget" that requires neither tk4
- # nor additional source code uglification.
- #
- proc cget { w option } {
- return "[lindex [$w configure $option] 4]"
- }
- #
- # Function to compensate for broken config.in scripts like the sound driver,
- # which make dependencies on variables that are never even conditionally
- # defined.
- #
- proc vfix { var } {
- global $var
- if [ catch {eval concat $$var} ] {
- set $var 4
- }
- }
- #
- # Constant values used by certain dep_tristate commands.
- #
- set CONSTANT_Y 1
- set CONSTANT_M 2
- set CONSTANT_N 0
- set CONSTANT_E 4
- #
- # Create a "reference" object to steal colors from.
- #
- button .ref
- #
- # On monochrome displays, -disabledforeground is blank by default; that's
- # bad. Fill it with -foreground instead.
- #
- if { [cget .ref -disabledforeground] == "" } {
- .ref configure -disabledforeground [cget .ref -foreground]
- }
- #
- # Define some macros we will need to parse the config.in file.
- #
- proc mainmenu_name { text } {
- wm title . "$text"
- }
- proc menu_option { w menu_num text } {
- global menus_per_column
- global processed_top_level
- set processed_top_level [expr $processed_top_level + 1]
- if { $processed_top_level <= $menus_per_column } then {
- set myframe left
- } elseif { $processed_top_level <= [expr 2 * $menus_per_column] } then {
- set myframe middle
- } else {
- set myframe right
- }
- button .f0.x$menu_num -anchor w -text "$text"
- -command "$w .$w "$text""
- pack .f0.x$menu_num -pady 0 -side top -fill x -in .f0.$myframe
- }
- proc load_configfile { w title func } {
- catch {destroy $w}
- toplevel $w -class Dialog
- global loadfile
- frame $w.x
- label $w.bm -bitmap questhead
- pack $w.bm -pady 10 -side top -padx 10
- label $w.x.l -text "Enter filename:" -relief raised
- entry $w.x.x -width 35 -relief sunken -borderwidth 2
- -textvariable loadfile
- pack $w.x.l $w.x.x -anchor w -side left
- pack $w.x -side top -pady 10
- wm title $w "$title"
- set oldFocus [focus]
- frame $w.f
- button $w.f.back -text "OK" -width 20
- -command "destroy $w; focus $oldFocus;$func .fileio"
- button $w.f.canc -text "Cancel"
- -width 20 -command "destroy $w; focus $oldFocus"
- pack $w.f.back $w.f.canc -side left -pady 10 -padx 45
- pack $w.f -pady 10 -side bottom -padx 10 -anchor w
- focus $w
- global winx; global winy
- set winx [expr [winfo x .]+30]; set winy [expr [winfo y .]+30]
- wm geometry $w +$winx+$winy
- }
- bind all <Alt-q> {maybe_exit .maybe}
- proc maybe_exit { w } {
- catch {destroy $w}
- toplevel $w -class Dialog
- label $w.bm -bitmap questhead
- pack $w.bm -pady 10 -side top -padx 10
- message $w.m -width 400 -aspect 300
- -text "Changes will be lost. Are you sure?" -relief flat
- pack $w.m -pady 10 -side top -padx 10
- wm title $w "Are you sure?"
- set oldFocus [focus]
- frame $w.f
- button $w.f.back -text "OK" -width 20
- -command "exit"
- button $w.f.canc -text "Cancel"
- -width 20 -command "destroy $w; focus $oldFocus"
- pack $w.f.back $w.f.canc -side left -pady 10 -padx 45
- pack $w.f -pady 10 -side bottom -padx 10 -anchor w
- bind $w <Return> "exit"
- bind $w <Escape> "destroy $w; focus $oldFocus"
- focus $w
- global winx; global winy
- set winx [expr [winfo x .]+30]; set winy [expr [winfo y .]+30]
- wm geometry $w +$winx+$winy
- }
- proc read_config_file { w } {
- global loadfile
- if { [string length $loadfile] != 0 && [file readable $loadfile] == 1 } then {
- read_config $loadfile
- } else {
- catch {destroy $w}
- toplevel $w -class Dialog
- message $w.m -width 400 -aspect 300 -text
- "Unable to read file $loadfile"
- -relief raised
- label $w.bm -bitmap error
- pack $w.bm $w.m -pady 10 -side top -padx 10
- wm title $w "Xconfig Internal Error"
- set oldFocus [focus]
- frame $w.f
- button $w.f.back -text "Bummer"
- -width 10 -command "destroy $w; focus $oldFocus"
- pack $w.f.back -side bottom -pady 10 -anchor s
- pack $w.f -pady 10 -side top -padx 10 -anchor s
- focus $w
- global winx; global winy
- set winx [expr [winfo x .]+30]; set winy [expr [winfo y .]+30]
- wm geometry $w +$winx+$winy
- }
- }
- proc write_config_file { w } {
- global loadfile
- if { [string length $loadfile] != 0
- && ([file writable $loadfile] == 1 || ([file exists $loadfile] == 0 && [file writable [file dirname $loadfile]] == 1)) } then {
- writeconfig $loadfile /dev/null
- } else {
- catch {destroy $w}
- toplevel $w -class Dialog
- message $w.m -width 400 -aspect 300 -text
- "Unable to write file $loadfile"
- -relief raised
- label $w.bm -bitmap error
- pack $w.bm $w.m -pady 10 -side top -padx 10
- wm title $w "Xconfig Internal Error"
- set oldFocus [focus]
- frame $w.f
- button $w.f.back -text "OK"
- -width 10 -command "destroy $w; focus $oldFocus"
- pack $w.f.back -side bottom -pady 10 -anchor s
- pack $w.f -pady 10 -side top -padx 10 -anchor s
- focus $w
- global winx; global winy
- set winx [expr [winfo x .]+30]; set winy [expr [winfo y .]+30]
- wm geometry $w +$winx+$winy
- }
- }
- proc read_config { filename } {
- set file1 [open $filename r]
- clear_choices
- while { [gets $file1 line] >= 0} {
- if [regexp {([0-9A-Za-z_]+)=([ynm])} $line foo var value] {
- if { $value == "y" } then { set cmd "global $var; set $var 1" }
- if { $value == "n" } then { set cmd "global $var; set $var 0" }
- if { $value == "m" } then { set cmd "global $var; set $var 2" }
- eval $cmd
- }
- if [regexp {# ([0-9A-Za-z_]+) is not set} $line foo var] {
- set cmd "global $var; set $var 0"
- eval $cmd
- }
- if [regexp {([0-9A-Za-z_]+)=([0-9A-Fa-f]+)} $line foo var value] {
- set cmd "global $var; set $var $value"
- eval $cmd
- }
- if [regexp {([0-9A-Za-z_]+)="([^"]*)"} $line foo var value] {
- set cmd "global $var; set $var "$value""
- eval $cmd
- }
- }
- close $file1
- update_choices
- update_mainmenu
- }
- proc write_comment { file1 file2 text } {
- puts $file1 ""
- puts $file1 "#"
- puts $file1 "# $text"
- puts $file1 "#"
- puts $file2 "/*"
- puts $file2 " * $text"
- puts $file2 " */"
- }
- proc effective_dep { deplist } {
- global CONFIG_MODULES
- set depend 1
- foreach i $deplist {
- if {$i == 0} then {set depend 0}
- if {$i == 2 && $depend == 1} then {set depend 2}
- }
- if {$depend == 2 && $CONFIG_MODULES == 0} then {set depend 0}
- return $depend
- }
- proc sync_tristate { var dep } {
- global CONFIG_MODULES
- if {$dep == 0 && ($var == 1 || $var == 2)} then {
- set var 0
- } elseif {$dep == 2 && $var == 1} then {
- set var 2
- } elseif {$var == 2 && $CONFIG_MODULES == 0} then {
- if {$dep == 1} then {set var 1} else {set var 0}
- }
- return $var
- }
- proc sync_bool { var dep modset } {
- set var [sync_tristate $var $dep]
- if {$dep == 2 && $var == 2} then {
- set var $modset
- }
- return $var
- }
- proc write_tristate { file1 file2 varname variable deplist modset } {
- set variable [sync_tristate $variable [effective_dep $deplist]]
- if { $variable == 2 }
- then { set variable $modset }
- if { $variable == 1 }
- then { puts $file1 "$varname=y";
- puts $file2 "#define $varname 1" }
- elseif { $variable == 2 }
- then { puts $file1 "$varname=m";
- puts $file2 "#undef $varname";
- puts $file2 "#define ${varname}_MODULE 1" }
- elseif { $variable == 0 }
- then { puts $file1 "# $varname is not set";
- puts $file2 "#undef $varname"}
- else {
- puts stdout "ERROR - Attempting to write value for unconfigured variable ($varname)."
- }
- }
- proc write_int { file1 file2 varname variable dep } {
- if { $dep == 0 }
- then { puts $file1 "# $varname is not set";
- puts $file2 "#undef $varname"}
- else {
- puts $file1 "$varname=$variable";
- puts $file2 "#define $varname ($variable)";
- }
- }
- proc write_hex { file1 file2 varname variable dep } {
- if { $dep == 0 }
- then { puts $file1 "# $varname is not set";
- puts $file2 "#undef $varname"}
- else {
- puts $file1 "$varname=$variable";
- puts -nonewline $file2 "#define $varname 0x";
- puts $file2 [exec echo $variable | sed s/^0[xX]//];
- }
- }
- proc write_string { file1 file2 varname variable dep } {
- if { $dep == 0 }
- then { puts $file1 "# $varname is not set";
- puts $file2 "#undef $varname"}
- else {
- puts $file1 "$varname="$variable"";
- puts $file2 "#define $varname "$variable"";
- }
- }
- proc option_name {w mnum line text helpidx} {
- button $w.x$line.l -text "$text" -relief groove -anchor w
- $w.x$line.l configure -activefore [cget $w.x$line.l -fg]
- -activeback [cget $w.x$line.l -bg]
- button $w.x$line.help -text "Help" -relief raised
- -command "dohelp .dohelp $helpidx .menu$mnum"
- pack $w.x$line.help -side right -fill y
- pack $w.x$line.l -side right -fill both -expand on
- }
- proc toggle_switch2 {w mnum line text variable} {
- frame $w.x$line -relief sunken
- radiobutton $w.x$line.y -text "y" -variable $variable -value 1
- -relief groove -width 2 -command "update_active"
- radiobutton $w.x$line.m -text "-" -variable $variable -value 2
- -relief groove -width 2 -command "update_active"
- radiobutton $w.x$line.n -text "n" -variable $variable -value 0
- -relief groove -width 2 -command "update_active"
- option_name $w $mnum $line $text $variable
- pack $w.x$line.n $w.x$line.m $w.x$line.y -side right -fill y
- }
- proc toggle_switch3 {w mnum line text variable} {
- frame $w.x$line -relief sunken
- radiobutton $w.x$line.y -text "y" -variable $variable -value 1
- -relief groove -width 2 -command "update_active"
- radiobutton $w.x$line.m -text "m" -variable $variable -value 2
- -relief groove -width 2 -command "update_active"
- radiobutton $w.x$line.n -text "n" -variable $variable -value 0
- -relief groove -width 2 -command "update_active"
- option_name $w $mnum $line $text $variable
- global CONFIG_MODULES
- if {($CONFIG_MODULES == 0)} then {
- $w.x$line.m configure -state disabled
- }
- pack $w.x$line.n $w.x$line.m $w.x$line.y -side right -fill y
- }
- proc bool {w mnum line text variable} {
- toggle_switch2 $w $mnum $line $text $variable
- $w.x$line.m configure -state disabled
- pack $w.x$line -anchor w -fill both -expand on
- }
- proc tristate {w mnum line text variable } {
- toggle_switch3 $w $mnum $line $text $variable
- pack $w.x$line -anchor w -fill both -expand on
- }
- proc dep_tristate {w mnum line text variable } {
- tristate $w $mnum $line $text $variable
- }
- proc dep_bool {w mnum line text variable } {
- bool $w $mnum $line $text $variable
- }
- proc int { w mnum line text variable } {
- frame $w.x$line
- entry $w.x$line.x -width 18 -relief sunken -borderwidth 2
- -textvariable $variable
- option_name $w $mnum $line $text $variable
- pack $w.x$line.x -anchor w -side right -fill y
- pack $w.x$line -anchor w -fill both -expand on
- }
- proc hex { w mnum line text variable } {
- int $w $mnum $line $text $variable
- }
- proc istring { w mnum line text variable } {
- frame $w.x$line
- entry $w.x$line.x -width 18 -relief sunken -borderwidth 2
- -textvariable $variable
- option_name $w $mnum $line $text $variable
- pack $w.x$line.x -anchor w -side right -fill y
- pack $w.x$line -anchor w -fill both -expand on
- }
- proc minimenu { w mnum line text variable helpidx } {
- frame $w.x$line
- menubutton $w.x$line.x -textvariable $variable -menu
- $w.x$line.x.menu -relief raised
- -anchor w
- option_name $w $mnum $line $text $helpidx
- pack $w.x$line.x -anchor w -side right -fill y
- pack $w.x$line -anchor w -fill both -expand on
- }
- proc menusplit {w m n} {
- if { $n > 2 } then {
- update idletasks
- set menuoptsize [expr [$m yposition 2] - [$m yposition 1]]
- set maxsize [winfo screenheight $w]
- set splitpoint [expr $maxsize * 4 / 5 / $menuoptsize - 1]
- for {set i [expr $splitpoint + 1]} {$i <= $n} {incr i $splitpoint} {
- $m entryconfigure $i -columnbreak 1
- }
- }
- }
- proc menutitle {text menu w} {
- wm title $w "$text"
- }
- proc submenu { w mnum line text subnum } {
- frame $w.x$line
- button $w.x$line.l -text "" -width 15 -relief groove
- $w.x$line.l configure -activefore [cget $w.x$line.l -fg]
- -activeback [cget $w.x$line.l -bg] -state disabled
- button $w.x$line.m -text "$text" -relief raised -anchor w
- -command "catch {destroy .menu$subnum}; menu$subnum .menu$subnum "$text""
- pack $w.x$line.l -side left -fill both
- pack $w.x$line.m -anchor w -side right -fill both -expand on
- pack $w.x$line -anchor w -fill both -expand on
- }
- proc comment {w mnum line text } {
- frame $w.x$line
- button $w.x$line.l -text "" -width 15 -relief groove
- $w.x$line.l configure -activefore [cget $w.x$line.l -fg]
- -activeback [cget $w.x$line.l -bg] -state disabled
- button $w.x$line.m -text "$text" -relief groove -anchor w
- $w.x$line.m configure -activefore [cget $w.x$line.m -fg]
- -activeback [cget $w.x$line.m -bg]
- pack $w.x$line.l -side left -fill both
- pack $w.x$line.m -anchor w -side right -fill both -expand on
- pack $w.x$line -anchor w -fill both -expand on
- }
- proc dohelp {w var parent} {
- catch {destroy $w}
- toplevel $w -class Dialog
- set filefound 0
- set found 0
- set lineno 0
- if { [file readable Documentation/Configure.help] == 1} then {
- set filefound 1
- # First escape sed regexp special characters in var:
- set var [exec echo "$var" | sed s/[][/.^$*]/\\&/g]
- # Now pick out right help text:
- set message [exec sed -n "
- /^$var[ ]*$/,${
- /^$var[ ]*$/c\
- ${var}:\
- /^#/b
- /^[^ ]/q
- s/^ //
- /<file:\([^>]*\)>/s//\1/g
- p
- }
- " Documentation/Configure.help]
- set found [expr [string length "$message"] > 0]
- }
- frame $w.f1
- pack $w.f1 -fill both -expand on
- # Do the OK button
- #
- set oldFocus [focus]
- frame $w.f2
- button $w.f2.ok -text "OK"
- -width 10 -command "destroy $w; catch {focus $oldFocus}"
- pack $w.f2.ok -side bottom -pady 6 -anchor n
- pack $w.f2 -side bottom -padx 10 -anchor s
- scrollbar $w.f1.vscroll -command "$w.f1.canvas yview"
- pack $w.f1.vscroll -side right -fill y
- canvas $w.f1.canvas -relief flat -borderwidth 0
- -yscrollcommand "$w.f1.vscroll set"
- frame $w.f1.f
- pack $w.f1.canvas -side right -fill y -expand on
- if { $found == 0 } then {
- if { $filefound == 0 } then {
- message $w.f1.f.m -width 750 -aspect 300 -relief flat -text
- "No help available - unable to open file Documentation/Configure.help. This file should have come with your kernel."
- } else {
- message $w.f1.f.m -width 400 -aspect 300 -relief flat -text
- "No help available for $var"
- }
- label $w.f1.bm -bitmap error
- wm title $w "RTFM"
- } else {
- text $w.f1.f.m -width 73 -relief flat -wrap word
- $w.f1.f.m insert 0.0 $message
- $w.f1.f.m conf -state disabled -height [$w.f1.f.m index end]
- label $w.f1.bm -bitmap info
- wm title $w "Configuration help"
- }
- pack $w.f1.f.m -side left
- pack $w.f1.bm $w.f1.f -side left -padx 10
- focus $w
- set winx [expr [winfo x $parent]+20]
- set winy [expr [winfo y $parent]+20]
- wm geometry $w +$winx+$winy
- set sizok [expr [winfo reqheight $w.f2.ok] + 12]
- set maxy [expr [winfo screenheight .] * 3 / 4]
- set canvtotal [winfo reqheight $w.f1.f.m]
- if [expr $sizok + $canvtotal < $maxy] {
- set sizy $canvtotal
- } else {
- set sizy [expr $maxy - $sizok]
- }
- $w.f1.canvas configure -height $sizy -width [winfo reqwidth $w.f1.f.m]
- -scrollregion "0 0 [winfo reqwidth $w.f1.f.m]
- [winfo reqheight $w.f1.f.m]"
- $w.f1.canvas create window 0 0 -anchor nw -window $w.f1.f
- update idletasks
- set maxy [winfo screenheight .]
- if [expr $sizok + $canvtotal < $maxy] {
- set sizy [expr $sizok + $canvtotal]
- } else {
- set sizy $maxy
- }
- wm maxsize $w [winfo width $w] $sizy
- }
- bind all <Alt-s> { catch {exec cp -f .config .config.old};
- writeconfig .config include/linux/autoconf.h; wrapup .wrap }
- proc wrapup {w } {
- catch {destroy $w}
- toplevel $w -class Dialog
- global CONFIG_MODVERSIONS; vfix CONFIG_MODVERSIONS
- if { ([file exists .hdepend] != 1) || ($CONFIG_MODVERSIONS == 1) } then {
- message $w.m -width 400 -aspect 300 -relief raised -text
- "End of Linux kernel configuration. Check the top-level Makefile for additional configuration. Next, you must run 'make dep'."
- } else {
- message $w.m -width 400 -aspect 300 -relief raised -text
- "End of Linux kernel configuration. Check the top-level Makefile for additional configuration. Next, you may 'make bzImage', 'make bzdisk', or 'make bzlilo.'"
- }
- label $w.bm -bitmap info
- pack $w.bm $w.m -pady 10 -side top -padx 10
- wm title $w "Kernel build instructions"
- set oldFocus [focus]
- frame $w.f
- button $w.f.back -text "OK"
- -width 10 -command "exit"
- pack $w.f.back -side bottom -pady 10 -anchor s
- pack $w.f -pady 10 -side top -padx 10 -anchor s
- focus $w
- bind $w <Return> "exit"
- global winx; global winy
- set winx [expr [winfo x .]+30]; set winy [expr [winfo y .]+30]
- wm geometry $w +$winx+$winy
- }
- proc unregister_active {num} {
- global active_menus
- set index [lsearch -exact $active_menus $num]
- if {$index != -1} then {set active_menus [lreplace $active_menus $index $index]}
- }
- proc update_active {} {
- global active_menus total_menus
- set max 0
- if {[llength $active_menus] > 0} then {
- set max [lindex $active_menus end]
- update_define [toplevel_menu [lindex $active_menus 0]] $max 0
- }
- foreach i $active_menus {
- if {[winfo exists .menu$i] == 0} then {
- unregister_active $i
- } else {
- update_menu$i
- }
- }
- update_define [expr $max + 1] $total_menus 1
- update_mainmenu
- }
- proc configure_entry {w option items} {
- foreach i $items {
- $w.$i configure -state $option
- }
- }
- proc validate_int {name val default} {
- if {([exec echo $val | sed s/^-//g | tr -d [:digit:] ] != "")} then {
- global $name; set $name $default
- }
- }
- proc validate_hex {name val default} {
- if {([exec echo $val | tr -d [:xdigit:] ] != "")} then {
- global $name; set $name $default
- }
- }
- proc update_define {first last allow_update} {
- for {set i $first} {$i <= $last} {incr i} {
- update_define_menu$i
- if {$allow_update == 1} then update
- }
- }
- #
- # Next set up the particulars for the top level menu, and define a few
- # buttons which we will stick down at the bottom.
- #
- frame .f0
- frame .f0.left
- frame .f0.middle
- frame .f0.right
- set active_menus [list]
- set processed_top_level 0