?? menuconfig
字號(hào):
#! /bin/sh## This script is used to configure the VIVI# derived from Linux kernel.## ## Change this to TRUE if you prefer all VIVI options listed# in a single menu rather than the standard menu hierarchy.#single_menu_mode=## Make sure we're really running bash.#[ -z "$BASH" ] && { echo "Menuconfig requires bash" 1>&2; exit 1; }## Cache function definitions, turn off posix compliance#set -h +o posix# Given a configuration variable, set the global variable $x to its value,# and the global variable $info to the string " (NEW)" if this is a new# variable.## This function looks for: (1) the current value, or (2) the default value# from the arch-dependent defconfig file, or (3) a default passed by the caller.function set_x_info () { eval x=\$$1 if [ -z "$x" ]; then eval `sed -n -e 's/# \(.*\) is not set.*/\1=n/' -e "/^$1=/p" arch/defconfig` eval x=\${$1:-"$2"} eval $1=$x eval INFO_$1="' (NEW)'" fi eval info="\$INFO_$1"}## Load the functions used by the config.in files.## I do this because these functions must be redefined depending# on whether they are being called for interactive use or for# saving a configuration to a file.## Thank the heavens bash supports nesting function definitions.#load_functions () {## Additional comments#function comment () { comment_ctr=$[ comment_ctr + 1 ] echo -ne "': $comment_ctr' '--- $1' " >>MCmenu}## Define a boolean to a specific value.#function define_bool () { eval $1=$2}function define_hex () { eval $1=$2}function define_int () { eval $1=$2}function define_string () { eval $1="$2"}## Create a boolean (Yes/No) function for our current menu# which calls our local bool function.#function bool () { set_x_info "$2" "n" case $x in y|m) flag="*" ;; n) flag=" " ;; esac echo -ne "'$2' '[$flag] $1$info' " >>MCmenu echo -e "function $2 () { l_bool '$2' \"\$1\" ;}\n" >>MCradiolists}## Same as above, but now only Y and N are allowed as dependency# (i.e. third and next arguments).#function dep_bool () { ques="$1" var="$2" dep=y shift 2 while [ $# -gt 0 ]; do if [ "$1" = y ]; then shift else dep=n shift $# fi done if [ "$dep" = y ]; then bool "$ques" "$var" else define_bool "$var" n fi}function dep_mbool () { ques="$1" var="$2" dep=y shift 2 while [ $# -gt 0 ]; do if [ "$1" = y -o "$1" = m ]; then shift else dep=n shift $# fi done if [ "$dep" = y ]; then bool "$ques" "$var" else define_bool "$var" n fi}## Add a menu item which will call our local int function.# function int () { set_x_info "$2" "$3" echo -ne "'$2' '($x) $1$info' " >>MCmenu echo -e "function $2 () { l_int '$1' '$2' '$3' '$x' ;}" >>MCradiolists}## Add a menu item which will call our local hex function.# function hex () { set_x_info "$2" "$3" x=${x##*[x,X]} echo -ne "'$2' '($x) $1$info' " >>MCmenu echo -e "function $2 () { l_hex '$1' '$2' '$3' '$x' ;}" >>MCradiolists}## Add a menu item which will call our local string function.# function string () { set_x_info "$2" "$3" echo -ne "'$2' ' $1: \"$x\"$info' " >>MCmenu echo -e "function $2 () { l_string '$1' '$2' '$3' '$x' ;}" >>MCradiolists}## Add a menu item which will call our local One-of-Many choice list.#function choice () { # # Need to remember params cause they're gonna get reset. # title=$1 choices=$2 default=$3 current= # # Find out if one of the choices is already set. # If it's not then make it the default. # set -- $choices firstchoice=$2 while [ -n "$2" ] do if eval [ "_\$$2" = "_y" ] then current=$1 break fi shift ; shift done : ${current:=$default} echo -ne "'$firstchoice' '($current) $title' " >>MCmenu echo -e " function $firstchoice () \ { l_choice '$title' \"$choices\" \"$current\" ;}" >>MCradiolists}} # END load_functions()## Extract available help for an option from Configure.help# and send it to standard output.## Most of this function was borrowed from the original VIVI# Configure script.#function extract_help () { if [ -f Documentation/Configure.help ] then #first escape regexp special characters in the argument: var=$(echo "$1"|sed 's/[][\/.^$*]/\\&/g') #now pick out the right help text: text=$(sed -n "/^$var[ ]*\$/,\${ /^$var[ ]*\$/c\\${var}:\\ /^#/b /^[^ ]/q s/^ // /<file:\\([^>]*\\)>/s//\\1/g p }" Documentation/Configure.help) if [ -z "$text" ] then echo "There is no help available for this VIVI option." return 1 else echo "$text" fi else echo "There is no help available for this VIVI option." return 1 fi}## Activate a help dialog.#function help () { if extract_help $1 >help.out then $DIALOG --backtitle "$backtitle" --title "$2"\ --textbox help.out $ROWS $COLS else $DIALOG --backtitle "$backtitle" \ --textbox help.out $ROWS $COLS fi rm -f help.out}## Show the README file.#function show_readme () { $DIALOG --backtitle "$backtitle" \ --textbox scripts/README.Menuconfig $ROWS $COLS}## Begin building the dialog menu command and Initialize the # Radiolist function file.#function menu_name () { echo -ne "#!/bin/sh\n$DIALOG --title '$1'\ --backtitle '$backtitle' \ --menu '$menu_instructions' \ $ROWS $COLS $((ROWS-10)) \ '$default' " >MCmenu >MCradiolists}## Add a submenu option to the menu currently under construction.#function submenu () { echo -ne "'activate_menu $2' '$1 --->' " >>MCmenu}## Handle a boolean (Yes/No) option.#function l_bool () { if [ -n "$2" ] then case "$2" in y|m) eval $1=y ;; c) eval x=\$$1 case $x in y) eval $1=n ;; n) eval $1=y ;; *) eval $1=y ;; esac ;; *) eval $1=n ;; esac else echo -ne "\007" fi}## Same as bool() except options are (Module/No)#function mod_bool () { if [ "$CONFIG_MODULES" != "y" ]; then define_bool "$2" "n" else set_x_info "$2" "n" case $x in y|m) flag='M' ;; *) flag=' ' ;; esac echo -ne "'$2' '<$flag> $1$info' " >>MCmenu echo -e "function $2 () { l_mod_bool '$2' \"\$1\" ;}" >>MCradiolists fi}## Same as l_bool() except options are (Module/No)#function l_mod_bool() { if [ -n "$2" ] then case "$2" in y) echo -en "\007" ${DIALOG} --backtitle "$backtitle" \ --infobox "\This feature depends on another which has been configured as a module. \As a result, this feature will be built as a module." 4 70 sleep 5 eval $1=m ;; m) eval $1=m ;; c) eval x=\$$1 case $x in m) eval $1=n ;; n) eval $1=m ;; *) eval $1=m ;; esac ;; *) eval $1=n ;; esac else echo -ne "\007" fi}## Create a dialog for entering an integer into a VIVI option.#function l_int () { while true do if $DIALOG --title "$1" \ --backtitle "$backtitle" \ --inputbox "$inputbox_instructions_int" \ 10 75 "$4" 2>MCdialog.out then answer="`cat MCdialog.out`" answer="${answer:-$3}" # Semantics of + and ? in GNU expr changed, so # we avoid them: if expr "$answer" : '0$' '|' "$answer" : '[1-9][0-9]*$' '|' "$answer" : '-[1-9][0-9]*$' >/dev/null then eval $2="$answer" else eval $2="$3" echo -en "\007" ${DIALOG} --backtitle "$backtitle" \ --infobox "You have made an invalid entry." 3 43 sleep 2 fi break fi help "$2" "$1" done}## Create a dialog for entering a hexadecimal into a VIVI option.#function l_hex () { while true do if $DIALOG --title "$1" \ --backtitle "$backtitle" \ --inputbox "$inputbox_instructions_hex" \ 10 75 "$4" 2>MCdialog.out then answer="`cat MCdialog.out`" answer="${answer:-$3}" answer="${answer##*[x,X]}" if expr "$answer" : '[0-9a-fA-F][0-9a-fA-F]*$' >/dev/null then eval $2="$answer" else eval $2="$3" echo -en "\007" ${DIALOG} --backtitle "$backtitle" \ --infobox "You have made an invalid entry." 3 43 sleep 2 fi break fi help "$2" "$1" done}## Create a dialog for entering a string into a VIVI option.#function l_string () { while true do if $DIALOG --title "$1" \ --backtitle "$backtitle" \ --inputbox "$inputbox_instructions_string" \ 10 75 "$4" 2>MCdialog.out then answer="`cat MCdialog.out`" answer="${answer:-$3}" # # Someone may add a nice check for the entered # string here... # eval $2=\"$answer\" break fi help "$2" "$1" done}## Handle a one-of-many choice list.#function l_choice () { # # Need to remember params cause they're gonna get reset. # title="$1" choices="$2" current="$3" chosen= # # Scan current value of choices and set radiolist switches. # list= set -- $choices firstchoice=$2 while [ -n "$2" ] do case "$1" in "$current"*) if [ -z "$chosen" ]; then list="$list $2 $1 ON " chosen=1 else list="$list $2 $1 OFF " fi ;; *) list="$list $2 $1 OFF " ;; esac shift ; shift done while true do if $DIALOG --title "$title" \ --backtitle "$backtitle" \ --radiolist "$radiolist_instructions" \ 15 70 6 $list 2>MCdialog.out then choice=`cat MCdialog.out` break fi help "$firstchoice" "$title" done # # Now set the boolean value of each option based on # the selection made from the radiolist. # set -- $choices while [ -n "$2" ] do if [ "$2" = "$choice" ] then eval $2="y" else eval $2="n" fi shift ; shift done}## Call awk, and watch for error codes, etc.#function callawk () {awk "$1" || echo "Awk died with error code $?. Giving up." || exit 1}## A faster awk based recursive parser. (I hope)#function parser1 () {callawk 'BEGIN { menu_no = 0 comment_is_option = 0 parser("'$CONFIG_IN'","MCmenu0")}function parser(ifile,menu) { while (getline <ifile) { if ($1 == "mainmenu_option") { comment_is_option = "1" } else if ($1 == "comment" && comment_is_option == "1") { comment_is_option= "0" sub($1,"",$0) ++menu_no printf("submenu %s MCmenu%s\n", $0, menu_no) >>menu newmenu = sprintf("MCmenu%d", menu_no); printf( "function MCmenu%s () {\n"\ "default=$1\n"\ "menu_name %s\n",\ menu_no, $0) >newmenu parser(ifile, newmenu) } else if ($0 ~ /^#|\$MAKE|mainmenu_name/) { printf("") >>menu } else if ($1 ~ "endmenu") { printf("}\n") >>menu return } else if ($1 == "source") { parser($2,menu) } else { print >>menu } }}'}## Secondary parser for single menu mode.#function parser2 () {callawk 'BEGIN { parser("'$CONFIG_IN'","MCmenu0")}function parser(ifile,menu) { while (getline <ifile) { if ($0 ~ /^#|$MAKE|mainmenu_name/) { printf("") >>menu } else if ($1 ~ /mainmenu_option|endmenu/) { printf("") >>menu } else if ($1 == "source") { parser($2,menu) } else { print >>menu } }}'}## Parse all the config.in files into mini scripts.#function parse_config_files () { rm -f MCmenu* echo "function MCmenu0 () {" >MCmenu0 echo 'default=$1' >>MCmenu0 echo "menu_name 'Main Menu'" >>MCmenu0 if [ "_$single_menu_mode" = "_TRUE" ] then parser2 else parser1 fi echo "comment ''" >>MCmenu0 echo "g_alt_config" >>MCmenu0 echo "s_alt_config" >>MCmenu0
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -