|
|
1.1 ! root 1: #! /bin/sh ! 2: # ! 3: # This script is used to configure dmsdos options. ! 4: # It is shamelessly stolen from the Linux kernel. ! 5: # For a list of credits see there. ! 6: # ! 7: #---------------------------------------------------------------------------- ! 8: ! 9: # ! 10: # Make sure we're really running bash. ! 11: # ! 12: [ -z "$BASH" ] && { echo "Menuconfig requires bash" 1>&2; exit 1; } ! 13: ! 14: # ! 15: # Cache function definitions, turn off posix compliance ! 16: # ! 17: set -h +o posix ! 18: ! 19: ! 20: # ! 21: # If you prefer all kernel options listed in a single menu rather than ! 22: # the standard menu hierarchy, set SINGLE_MENU_MODE to "TRUE" in your ! 23: # environment. ! 24: # ! 25: single_menu_mode="${SINGLE_MENU_MODE:-FALSE}" ! 26: ! 27: ! 28: # ! 29: # Load the functions used by the config.in files. ! 30: # ! 31: # I do this because these functions must be redefined depending ! 32: # on whether they are being called for interactive use or for ! 33: # saving a configuration to a file. ! 34: # ! 35: # Thank the heavens bash supports nesting function definitions. ! 36: # ! 37: load_functions () { ! 38: ! 39: # ! 40: # Additional comments ! 41: # ! 42: function comment () { ! 43: comment_ctr=$[ comment_ctr + 1 ] ! 44: echo -ne "': $comment_ctr' '--- $1' " >>MCmenu ! 45: } ! 46: ! 47: # ! 48: # Don't need this yet, but we don't want to puke either. ! 49: # ! 50: function define_bool () { ! 51: : ! 52: } ! 53: ! 54: # ! 55: # Create a boolean (Yes/No) function for our current menu ! 56: # which calls our local bool function. ! 57: # ! 58: function bool () { ! 59: eval $2=\${$2:-'n'} x=\$$2 ! 60: ! 61: case $x in ! 62: y|m) flag="*" ;; ! 63: n) flag=" " ;; ! 64: esac ! 65: ! 66: echo -ne "'$2' '[$flag] $1' " >>MCmenu ! 67: ! 68: echo -e "function $2 () { l_bool '$2' \"\$1\" ;}\n" >>MCradiolists ! 69: } ! 70: ! 71: # ! 72: # Create a tristate (Yes/No/Module) radiolist function ! 73: # which calls our local tristate function. ! 74: # ! 75: # Collapses to a boolean (Yes/No) if module support is disabled. ! 76: # ! 77: function tristate () { ! 78: if [ "$CONFIG_MODULES" != "y" ] ! 79: then ! 80: bool "$1" "$2" ! 81: else ! 82: eval $2=\${$2:-'n'} x=\$$2 ! 83: ! 84: case $x in ! 85: y) flag="*" ;; ! 86: m) flag="M" ;; ! 87: *) flag=" " ;; ! 88: esac ! 89: ! 90: echo -ne "'$2' '<$flag> $1' " >>MCmenu ! 91: ! 92: echo -e " ! 93: function $2 () { l_tristate '$2' \"\$1\" ;}" >>MCradiolists ! 94: fi ! 95: } ! 96: ! 97: # ! 98: # Create a tristate radiolist function which is dependent on ! 99: # another kernel configuration option. ! 100: # ! 101: # Quote from the original configure script: ! 102: # ! 103: # If the option we depend upon is a module, ! 104: # then the only allowable options are M or N. If Y, then ! 105: # this is a normal tristate. This is used in cases where modules ! 106: # are nested, and one module requires the presence of something ! 107: # else in the kernel. ! 108: # ! 109: function dep_tristate () { ! 110: if [ "$CONFIG_MODULES" != "y" ] ! 111: then ! 112: bool "$1" "$2" ! 113: else ! 114: if eval [ "_$3" != "_m" ] ! 115: then ! 116: tristate "$1" "$2" $3 ! 117: else ! 118: mod_bool "$1" "$2" ! 119: fi ! 120: fi ! 121: } ! 122: ! 123: # ! 124: # Add a menu item which will call our local int function. ! 125: # ! 126: function int () { ! 127: eval $2=\${$2:-"$3"} x=\$$2 ! 128: ! 129: echo -ne "'$2' '($x) $1' " >>MCmenu ! 130: ! 131: echo -e "function $2 () { l_int '$1' '$2' '$3' '$x' ;}" >>MCradiolists ! 132: } ! 133: ! 134: # ! 135: # Add a menu item which will call our local int function. ! 136: # ! 137: function hex () { ! 138: eval $2=\${$2:-"$3"} x=\${$2##*[x,X]} ! 139: ! 140: echo -ne "'$2' '($x) $1' " >>MCmenu ! 141: ! 142: echo -e "function $2 () { l_hex '$1' '$2' '$3' '$x' ;}" >>MCradiolists ! 143: } ! 144: ! 145: # ! 146: # Add a menu item which will call our local One-of-Many choice list. ! 147: # ! 148: function choice () { ! 149: # ! 150: # Need to remember params cause they're gonna get reset. ! 151: # ! 152: title=$1 ! 153: choices=$2 ! 154: default=$3 ! 155: current= ! 156: ! 157: # ! 158: # Find out if one of the choices is already set. ! 159: # If it's not then make it the default. ! 160: # ! 161: set -- $choices ! 162: firstchoice=$2 ! 163: ! 164: while [ -n "$2" ] ! 165: do ! 166: if eval [ "_\$$2" = "_y" ] ! 167: then ! 168: current=$1 ! 169: break ! 170: fi ! 171: shift ; shift ! 172: done ! 173: ! 174: : ${current:=$default} ! 175: ! 176: echo -ne "'$firstchoice' '($current) $title' " >>MCmenu ! 177: ! 178: echo -e " ! 179: function $firstchoice () \ ! 180: { l_choice '$title' \"$choices\" $current ;}" >>MCradiolists ! 181: } ! 182: ! 183: } # END load_functions() ! 184: ! 185: ! 186: ! 187: ! 188: ! 189: # ! 190: # Extract available help for an option from Configure.help ! 191: # and send it to standard output. ! 192: # ! 193: # Most of this function was borrowed from the original kernel ! 194: # Configure script. ! 195: # ! 196: function extract_help () { ! 197: if [ -f Configure.help ] ! 198: then ! 199: #first escape regexp special characters in the argument: ! 200: var=$(echo "$1"|sed 's/[][\/.^$*]/\\&/g') ! 201: #now pick out the right help text: ! 202: text=$(sed -n "/^$var[ ]*\$/,\${ ! 203: /^$var[ ]*\$/d ! 204: /^#.*/d ! 205: /^[ ]*\$/q ! 206: s/^ // ! 207: p ! 208: }" Configure.help) ! 209: ! 210: if [ -z "$text" ] ! 211: then ! 212: echo "There is no help available for this dmsdos option." ! 213: return 1 ! 214: else ! 215: echo "$text" ! 216: fi ! 217: else ! 218: echo "There is no help available for this dmsdos option." ! 219: return 1 ! 220: fi ! 221: } ! 222: ! 223: # ! 224: # Activate a help dialog. ! 225: # ! 226: function help () { ! 227: if extract_help $1 >help.out ! 228: then ! 229: $DIALOG --backtitle "$backtitle" --title "$2"\ ! 230: --textbox help.out $ROWS $COLS ! 231: else ! 232: $DIALOG --backtitle "$backtitle" \ ! 233: --textbox help.out $ROWS $COLS ! 234: fi ! 235: rm help.out ! 236: } ! 237: ! 238: # ! 239: # Show the README file. ! 240: # ! 241: function show_readme () { ! 242: $DIALOG --backtitle "$backtitle" \ ! 243: --textbox scripts/README.Menuconfig $ROWS $COLS ! 244: } ! 245: ! 246: # ! 247: # Begin building the dialog menu command and Initialize the ! 248: # Radiolist function file. ! 249: # ! 250: function menu_name () { ! 251: echo -ne "$DIALOG --title '$1'\ ! 252: --backtitle '$backtitle' \ ! 253: --menu '$menu_instructions' \ ! 254: $ROWS $COLS $((ROWS-10)) \ ! 255: '$default' " >MCmenu ! 256: >MCradiolists ! 257: } ! 258: ! 259: # ! 260: # Add a submenu option to the menu currently under construction. ! 261: # ! 262: function submenu () { ! 263: echo -ne "'activate_menu $2' '$1 --->' " >>MCmenu ! 264: } ! 265: ! 266: # ! 267: # Create a menu entry to handle the traditional sound configuration. ! 268: # ! 269: function soundcfg () { ! 270: echo -ne "'l_soundcfg' "\ ! 271: "'Old configuration script "\ ! 272: "(For: SM Wave, PSS & AudioTrix Pro) -->' " >>MCmenu ! 273: } ! 274: ! 275: # ! 276: # Startup the traditional sound configuration program. ! 277: # ! 278: function l_soundcfg () { ! 279: clear ! 280: $MAKE -C drivers/sound config ! 281: } ! 282: ! 283: # ! 284: # Handle a boolean (Yes/No) option. ! 285: # ! 286: function l_bool () { ! 287: if [ -n "$2" ] ! 288: then ! 289: case "$2" in ! 290: y|m) eval $1=y ;; ! 291: c) eval x=\$$1 ! 292: case $x in ! 293: y) eval $1=n ;; ! 294: n) eval $1=y ;; ! 295: esac ;; ! 296: *) eval $1=n ;; ! 297: esac ! 298: else ! 299: echo -ne "\007" ! 300: fi ! 301: } ! 302: ! 303: # ! 304: # Same as bool() except options are (Module/No) ! 305: # ! 306: function mod_bool () { ! 307: eval $2=\${$2:-'n'} x=\$$2 ! 308: ! 309: case $x in ! 310: y|m) flag='M' ;; ! 311: *) flag=' ' ;; ! 312: esac ! 313: ! 314: echo -ne "'$2' '<$flag> $1' " >>MCmenu ! 315: ! 316: echo -e "function $2 () { l_mod_bool '$2' \"\$1\" ;}" >>MCradiolists ! 317: } ! 318: ! 319: # ! 320: # Same as l_bool() except options are (Module/No) ! 321: # ! 322: function l_mod_bool() { ! 323: if [ -n "$2" ] ! 324: then ! 325: case "$2" in ! 326: y) echo -en "\007" ! 327: ${DIALOG} --backtitle "$backtitle" \ ! 328: --infobox "\ ! 329: This feature depends on another which has been configured as a module. \ ! 330: As a result, this feature will be built as a module." 4 70 ! 331: sleep 5 ! 332: eval $1=m ;; ! 333: m) eval $1=m ;; ! 334: c) eval x=\$$1 ! 335: case $x in ! 336: m) eval $1=n ;; ! 337: n) eval $1=m ;; ! 338: esac ;; ! 339: *) eval $1=n ;; ! 340: esac ! 341: else ! 342: echo -ne "\007" ! 343: fi ! 344: } ! 345: ! 346: # ! 347: # Handle a tristate (Yes/No/Module) option. ! 348: # ! 349: function l_tristate () { ! 350: if [ -n "$2" ] ! 351: then ! 352: eval x=\$$1 ! 353: ! 354: case "$2" in ! 355: y) eval $1=y ;; ! 356: m) eval $1=m ;; ! 357: c) eval x=\$$1 ! 358: case $x in ! 359: y) eval $1=n ;; ! 360: n) eval $1=m ;; ! 361: m) eval $1=y ;; ! 362: esac ;; ! 363: *) eval $1=n ;; ! 364: esac ! 365: else ! 366: echo -ne "\007" ! 367: fi ! 368: } ! 369: ! 370: # ! 371: # Create a dialog for entering an integer into a kernel option. ! 372: # ! 373: function l_int () { ! 374: while true ! 375: do ! 376: if $DIALOG --title "$1" \ ! 377: --backtitle "$backtitle" \ ! 378: --inputbox "$inputbox_instructions_int" \ ! 379: 10 75 "$4" 2>MCdialog.out ! 380: then ! 381: answer="`cat MCdialog.out`" ! 382: answer="${answer:-$3}" ! 383: ! 384: # Avoid problems with GNU vs POSIX expr semantics. ! 385: if expr "$answer" : '0$\|-[1-9][0-9]*$\|[1-9][0-9]*$' >/dev/null ! 386: then ! 387: eval $2="$answer" ! 388: else ! 389: eval $2="$3" ! 390: echo -en "\007" ! 391: ${DIALOG} --backtitle "$backtitle" \ ! 392: --infobox "You have made an invalid entry." 3 43 ! 393: sleep 2 ! 394: fi ! 395: ! 396: break ! 397: fi ! 398: ! 399: help "$2" "$1" ! 400: done ! 401: } ! 402: ! 403: # ! 404: # Create a dialog for entering a hexadecimal into a kernel option. ! 405: # ! 406: function l_hex () { ! 407: while true ! 408: do ! 409: if $DIALOG --title "$1" \ ! 410: --backtitle "$backtitle" \ ! 411: --inputbox "$inputbox_instructions_hex" \ ! 412: 10 75 "$4" 2>MCdialog.out ! 413: then ! 414: answer="`cat MCdialog.out`" ! 415: answer="${answer:-$3}" ! 416: answer="${answer##*[x,X]}" ! 417: ! 418: # Avoid problems with GNU vs POSIX expr semantics. ! 419: if expr "$answer" : '[0-9a-fA-F][0-9a-fA-F]*$' >/dev/null ! 420: then ! 421: eval $2="$answer" ! 422: else ! 423: eval $2="$3" ! 424: echo -en "\007" ! 425: ${DIALOG} --backtitle "$backtitle" \ ! 426: --infobox "You have made an invalid entry." 3 43 ! 427: sleep 2 ! 428: fi ! 429: ! 430: break ! 431: fi ! 432: ! 433: help "$2" "$1" ! 434: done ! 435: } ! 436: ! 437: # ! 438: # Handle a one-of-many choice list. ! 439: # ! 440: function l_choice () { ! 441: # ! 442: # Need to remember params cause they're gonna get reset. ! 443: # ! 444: title="$1" ! 445: choices="$2" ! 446: current="$3" ! 447: ! 448: # ! 449: # Scan current value of choices and set radiolist switches. ! 450: # ! 451: list= ! 452: set -- $choices ! 453: firstchoice=$2 ! 454: while [ -n "$2" ] ! 455: do ! 456: case "$1" in ! 457: "$current") list="$list $2 $1 ON " ;; ! 458: *) list="$list $2 $1 OFF " ;; ! 459: esac ! 460: ! 461: shift ; shift ! 462: done ! 463: ! 464: while true ! 465: do ! 466: if $DIALOG --title "$title" \ ! 467: --backtitle "$backtitle" \ ! 468: --radiolist "$radiolist_instructions" \ ! 469: 15 70 6 $list 2>MCdialog.out ! 470: then ! 471: choice=`cat MCdialog.out` ! 472: break ! 473: fi ! 474: ! 475: help "$firstchoice" "$title" ! 476: done ! 477: ! 478: # ! 479: # Now set the boolean value of each option based on ! 480: # the selection made from the radiolist. ! 481: # ! 482: set -- $choices ! 483: while [ -n "$2" ] ! 484: do ! 485: if [ "$2" = "$choice" ] ! 486: then ! 487: eval $2="y" ! 488: else ! 489: eval $2="n" ! 490: fi ! 491: ! 492: shift ; shift ! 493: done ! 494: } ! 495: ! 496: ! 497: # ! 498: # A faster awk based recursive parser. (I hope) ! 499: # ! 500: function parser1 () { ! 501: awk ' ! 502: BEGIN { ! 503: menu_no = 0 ! 504: comment_is_option = 0 ! 505: parser("'$CONFIG_IN'","MCmenu0") ! 506: } ! 507: ! 508: function parser(ifile,menu) { ! 509: ! 510: while (getline <ifile) { ! 511: if ($1 == "mainmenu_option") { ! 512: comment_is_option = "1" ! 513: } ! 514: else if ($1 == "comment" && comment_is_option == "1") { ! 515: comment_is_option= "0" ! 516: sub($1,"",$0) ! 517: ++menu_no ! 518: ! 519: printf("submenu %s MCmenu%s\n", $0, menu_no) >>menu ! 520: ! 521: printf( "function MCmenu%s () {\n"\ ! 522: "default=$1\n"\ ! 523: "menu_name %s\n",\ ! 524: menu_no, $0) >"MCmenu"menu_no ! 525: ! 526: parser(ifile, "MCmenu"menu_no) ! 527: } ! 528: else if ($1 ~ "endmenu") { ! 529: printf("}\n") >>menu ! 530: return ! 531: } ! 532: else if ($0 ~ /^#|\$MAKE|mainmenu_name/) { ! 533: printf("") >>menu ! 534: } ! 535: else if ($1 == "source") { ! 536: # Yuk! Blah! Phooey! ! 537: if ($2 ~ "drivers/sound") { ! 538: printf("soundcfg\n") >>menu ! 539: } ! 540: ! 541: parser($2,menu) ! 542: } ! 543: else { ! 544: print >>menu ! 545: } ! 546: } ! 547: }' ! 548: } ! 549: ! 550: # ! 551: # Secondary parser for single menu mode. ! 552: # ! 553: function parser2 () { ! 554: awk ' ! 555: BEGIN { ! 556: parser("'$CONFIG_IN'","MCmenu0") ! 557: } ! 558: ! 559: function parser(ifile,menu) { ! 560: ! 561: while (getline <ifile) { ! 562: if ($1 ~ /mainmenu_option|endmenu/) { ! 563: printf("") >>menu ! 564: } ! 565: else if ($0 ~ /^#|\$MAKE|mainmenu_name/) { ! 566: printf("") >>menu ! 567: } ! 568: else if ($1 == "source") { ! 569: if ($2 ~ "drivers/sound") { ! 570: printf("soundcfg\n") >>menu ! 571: } ! 572: parser($2,menu) ! 573: } ! 574: else { ! 575: print >>menu ! 576: } ! 577: } ! 578: }' ! 579: } ! 580: ! 581: # ! 582: # Parse all the config.in files into mini scripts. ! 583: # ! 584: function parse_config_files () { ! 585: rm -f MCmenu* ! 586: ! 587: echo "function MCmenu0 () {" >MCmenu0 ! 588: echo 'default=$1' >>MCmenu0 ! 589: echo "menu_name 'Main Menu'" >>MCmenu0 ! 590: ! 591: if [ "_$single_menu_mode" = "_TRUE" ] ! 592: then ! 593: parser2 ! 594: else ! 595: parser1 ! 596: fi ! 597: ! 598: echo "comment ''" >>MCmenu0 ! 599: echo "g_alt_config" >>MCmenu0 ! 600: echo "s_alt_config" >>MCmenu0 ! 601: ! 602: echo "}" >>MCmenu0 ! 603: ! 604: # ! 605: # These mini scripts must be sourced into the current ! 606: # environment in order for all of this to work. Leaving ! 607: # them on the disk as executables screws up the recursion ! 608: # in activate_menu(), among other things. Once they are ! 609: # sourced we can discard them. ! 610: # ! 611: for i in MCmenu* ! 612: do ! 613: source ./$i ! 614: done ! 615: ! 616: rm -f MCmenu* ! 617: } ! 618: ! 619: # ! 620: # This is the menu tree's bootstrap. ! 621: # ! 622: # Executes the parsed menus on demand and creates a set of functions, ! 623: # one per configuration option. These functions will in turn execute ! 624: # dialog commands or recursively call other menus. ! 625: # ! 626: function activate_menu () { ! 627: while true ! 628: do ! 629: comment_ctr=0 #So comment lines get unique tags ! 630: ! 631: $1 "$default" #Create the lxdialog menu & functions ! 632: ! 633: if [ "$?" != "0" ] ! 634: then ! 635: clear ! 636: cat <<EOM ! 637: ! 638: Menuconfig has encountered a possible error in one of the kernel's ! 639: configuration files and is unable to continue. ! 640: ! 641: Please report this to the author <[email protected]>. You may also ! 642: send a problem report to [email protected] or post a ! 643: message to the linux.dev.kernel news group. ! 644: ! 645: Please indicate the kernel version you are trying to configure and ! 646: which menu you were trying to enter when this error occurred. ! 647: ! 648: EOM ! 649: cleanup ! 650: exit 1 ! 651: fi ! 652: ! 653: . ./MCradiolists #Source the menu's functions ! 654: ! 655: . ./MCmenu 2>MCdialog.out #Activate the lxdialog menu ! 656: ret=$? ! 657: ! 658: read selection <MCdialog.out ! 659: ! 660: case "$ret" in ! 661: 0|3|4|5|6) ! 662: defaults="$selection$defaults" #pseudo stack ! 663: case "$ret" in ! 664: 0) eval $selection ;; ! 665: 3) eval $selection y ;; ! 666: 4) eval $selection n ;; ! 667: 5) eval $selection m ;; ! 668: 6) eval $selection c ;; ! 669: esac ! 670: default="${defaults%%*}" defaults="${defaults#*}" ! 671: ;; ! 672: 2) ! 673: default="${selection%%\ *}" ! 674: ! 675: case "$selection" in ! 676: *"-->"*|*"alt_config"*) ! 677: show_readme ;; ! 678: *) ! 679: eval help $selection ;; ! 680: esac ! 681: ;; ! 682: 255|1) ! 683: break ! 684: ;; ! 685: 139) ! 686: stty sane ! 687: clear ! 688: cat <<EOM ! 689: ! 690: There seems to be a problem with the lxdialog companion utility which is ! 691: built prior to running Menuconfig. Usually this is an indicator that you ! 692: have upgraded/downgraded your ncurses libraries and did not remove the ! 693: old ncurses header file(s) in /usr/include or /usr/include/ncurses. ! 694: ! 695: It is VERY important that you have only one set of ncurses header files ! 696: and that those files are properly version matched to the ncurses libraries ! 697: installed on your machine. ! 698: ! 699: You may also need to rebuild lxdialog. This can be done by moving to ! 700: the /usr/src/linux/scripts/lxdialog directory and issuing the ! 701: "make clean all" command. ! 702: ! 703: If you have verified that your ncurses install is correct, you may email ! 704: the author <[email protected]> or post a message on the linux.dev.kernel ! 705: news group for additional assistance. ! 706: ! 707: EOM ! 708: cleanup ! 709: exit 139 ! 710: ;; ! 711: esac ! 712: done ! 713: } ! 714: ! 715: # ! 716: # Create a menu item to load an alternate configuration file. ! 717: # ! 718: g_alt_config () { ! 719: echo -n "get_alt_config 'Load an Alternate Configuration File' "\ ! 720: >>MCmenu ! 721: } ! 722: ! 723: # ! 724: # Get alternate config file name and load the ! 725: # configuration from it. ! 726: # ! 727: get_alt_config () { ! 728: set -f ## Switch file expansion OFF ! 729: ! 730: while true ! 731: do ! 732: ALT_CONFIG="${ALT_CONFIG:-$_CONFIG}" ! 733: ! 734: $DIALOG --backtitle "$backtitle" \ ! 735: --inputbox "\ ! 736: Enter the name of the configuration file you wish to load. \ ! 737: Accept the name shown to restore the configuration you \ ! 738: last retrieved. Leave blank to abort."\ ! 739: 11 55 "$ALT_CONFIG" 2>MCdialog.out ! 740: ! 741: if [ "$?" = "0" ] ! 742: then ! 743: ALT_CONFIG=`cat MCdialog.out` ! 744: ! 745: [ "_" = "_$ALT_CONFIG" ] && break ! 746: ! 747: if eval [ -r "$ALT_CONFIG" ] ! 748: then ! 749: eval load_config_file "$ALT_CONFIG" ! 750: break ! 751: else ! 752: echo -ne "\007" ! 753: $DIALOG --backtitle "$backtitle" \ ! 754: --infobox "File does not exist!" 3 38 ! 755: sleep 2 ! 756: fi ! 757: else ! 758: cat <<EOM >help.out ! 759: ! 760: For various reasons, one may wish to keep several different kernel ! 761: configurations available on a single machine. ! 762: ! 763: If you have saved a previous configuration in a file other than the ! 764: kernel's default, entering the name of the file here will allow you ! 765: to modify that configuration. ! 766: ! 767: If you are uncertain, then you have probably never used alternate ! 768: configuration files. You should therefor leave this blank to abort. ! 769: ! 770: EOM ! 771: $DIALOG --backtitle "$backtitle"\ ! 772: --title "Load Alternate Configuration"\ ! 773: --textbox help.out $ROWS $COLS ! 774: fi ! 775: done ! 776: ! 777: set +f ## Switch file expansion ON ! 778: rm -f help.out MCdialog.out ! 779: } ! 780: ! 781: # ! 782: # Create a menu item to store an alternate config file. ! 783: # ! 784: s_alt_config () { ! 785: echo -n "save_alt_config 'Save Configuration to an Alternate File' "\ ! 786: >>MCmenu ! 787: } ! 788: ! 789: # ! 790: # Get an alternate config file name and save the current ! 791: # configuration to it. ! 792: # ! 793: save_alt_config () { ! 794: set -f ## Switch file expansion OFF ! 795: ! 796: while true ! 797: do ! 798: ! 799: $DIALOG --backtitle "$backtitle" \ ! 800: --inputbox "\ ! 801: Enter a filename to which this configuration should be saved \ ! 802: as an alternate. Leave blank to abort."\ ! 803: 10 55 "$ALT_CONFIG" 2>MCdialog.out ! 804: ! 805: if [ "$?" = "0" ] ! 806: then ! 807: ALT_CONFIG=`cat MCdialog.out` ! 808: ! 809: [ "_" = "_$ALT_CONFIG" ] && break ! 810: ! 811: if eval touch $ALT_CONFIG 2>/dev/null ! 812: then ! 813: eval save_configuration $ALT_CONFIG ! 814: load_functions ## RELOAD ! 815: break ! 816: else ! 817: echo -ne "\007" ! 818: $DIALOG --backtitle "$backtitle" \ ! 819: --infobox "Can't create file! Probably a nonexistent directory." 3 60 ! 820: sleep 2 ! 821: fi ! 822: else ! 823: cat <<EOM >help.out ! 824: ! 825: For various reasons, one may wish to keep different ! 826: configurations available on a single machine. ! 827: ! 828: Entering a file name here will allow you to later retrieve, modify ! 829: and use the current configuration as an alternate to whatever ! 830: configuration options you have selected at that time. ! 831: ! 832: If you are uncertain what all this means then you should probably ! 833: leave this blank. ! 834: EOM ! 835: $DIALOG --backtitle "$backtitle"\ ! 836: --title "Save Alternate Configuration"\ ! 837: --textbox help.out $ROWS $COLS ! 838: fi ! 839: done ! 840: ! 841: set +f ## Switch file expansion ON ! 842: rm -f help.out MCdialog.out ! 843: } ! 844: ! 845: ! 846: # ! 847: # Load config file into the environment converting all ! 848: # "# OPTION is not set" lines to "OPTION=n". ! 849: # ! 850: # The $ARCH defaults are loaded first so "new"/previously ! 851: # unconfigured parameters are assigned the proper defaults. ! 852: # ! 853: function load_config_file () { ! 854: eval "`sed -e 's/# \(.*\) is not set.*/\1=n/' dmsdos-config.default $1`" ! 855: } ! 856: ! 857: ! 858: # ! 859: # Just what it says. ! 860: # ! 861: save_configuration () { ! 862: ${DIALOG} --backtitle "$backtitle" \ ! 863: --infobox "Saving dmsdos configuration..." 3 40 ! 864: ! 865: # ! 866: # Now, let's redefine the configuration functions for final ! 867: # output to the config files. ! 868: # ! 869: # Nested function definitions, YIPEE! ! 870: # ! 871: function bool () { ! 872: eval define_bool "$2" "\${$2:-n}" ! 873: } ! 874: ! 875: function tristate () { ! 876: eval define_bool "$2" "\${$2:-n}" ! 877: } ! 878: ! 879: function dep_tristate () { ! 880: eval x=\${$2:-n} ! 881: ! 882: if eval [ "_$3" = "_m" ] ! 883: then ! 884: if [ "$x" = "y" ] ! 885: then ! 886: x="m" ! 887: fi ! 888: fi ! 889: ! 890: define_bool "$2" "$x" ! 891: } ! 892: ! 893: function int () { ! 894: eval x=\${$2:-"$3"} ! 895: echo "$2=$x" >>$CONFIG ! 896: echo "#define $2 ($x)" >>$CONFIG_H ! 897: } ! 898: ! 899: function hex () { ! 900: eval x=\${$2:-"$3"} ! 901: echo "$2=$x" >>$CONFIG ! 902: echo "#define $2 0x${x##*[x,X]}" >>$CONFIG_H ! 903: } ! 904: ! 905: function define_bool () { ! 906: eval $1="$2" ! 907: ! 908: case "$2" in ! 909: y) ! 910: echo "$1=y" >>$CONFIG ! 911: echo "#define $1 1" >>$CONFIG_H ! 912: ;; ! 913: ! 914: m) ! 915: if [ "$CONFIG_MODULES" = "y" ] ! 916: then ! 917: echo "$1=m" >>$CONFIG ! 918: echo "#undef $1" >>$CONFIG_H ! 919: echo "#define $1_MODULE 1" >>$CONFIG_H ! 920: else ! 921: echo "$1=y" >>$CONFIG ! 922: echo "#define $1 1" >>$CONFIG_H ! 923: fi ! 924: ;; ! 925: ! 926: n) ! 927: echo "# $1 is not set" >>$CONFIG ! 928: echo "#undef $1" >>$CONFIG_H ! 929: ;; ! 930: esac ! 931: } ! 932: ! 933: function choice () { ! 934: # ! 935: # Find the first choice that's already set to 'y' ! 936: # ! 937: choices="$2" ! 938: default="$3" ! 939: current= ! 940: ! 941: set -- $choices ! 942: while [ -n "$2" ] ! 943: do ! 944: if eval [ "_\$$2" = "_y" ] ! 945: then ! 946: current=$1 ! 947: break ! 948: fi ! 949: shift ; shift ! 950: done ! 951: ! 952: # ! 953: # Use the default if none were set. ! 954: # ! 955: : ${current:=$default} ! 956: ! 957: # ! 958: # Then extract the actual option from the list of choices. ! 959: # ! 960: current=${choices#*$current} ; set $current ! 961: ! 962: define_bool "$1" "y" ! 963: } ! 964: ! 965: function mainmenu_name () { ! 966: : ! 967: } ! 968: ! 969: function mainmenu_option () { ! 970: comment_is_option=TRUE ! 971: } ! 972: ! 973: function endmenu () { ! 974: : ! 975: } ! 976: ! 977: function comment () { ! 978: if [ "$comment_is_option" ] ! 979: then ! 980: comment_is_option= ! 981: echo >>$CONFIG ! 982: echo "#" >>$CONFIG ! 983: echo "# $1" >>$CONFIG ! 984: echo "#" >>$CONFIG ! 985: ! 986: echo >>$CONFIG_H ! 987: echo "/*" >>$CONFIG_H ! 988: echo " * $1" >>$CONFIG_H ! 989: echo " */" >>$CONFIG_H ! 990: fi ! 991: } ! 992: ! 993: DEF_CONFIG="${1:-$_CONFIG}" ! 994: DEF_CONFIG_H="$AUTOCONF_H" ! 995: ! 996: CONFIG=.tmpconfig ! 997: CONFIG_H=.tmpconfig.h ! 998: ! 999: echo "#" >$CONFIG ! 1000: echo "# Automatically generated by make menuconfig: don't edit" >>$CONFIG ! 1001: echo "#" >>$CONFIG ! 1002: ! 1003: echo "/*" >$CONFIG_H ! 1004: echo " * Automatically generated by make menuconfig: don't edit" >>$CONFIG_H ! 1005: echo " * Use make menuconfig instead." >>$CONFIG_H ! 1006: echo " */" >>$CONFIG_H ! 1007: ! 1008: MAKE=: #To prevent sound Makefile from running. ! 1009: ! 1010: if . $CONFIG_IN >>.menuconfig.log 2>&1 ! 1011: then ! 1012: if [ -f "$DEF_CONFIG" ] ! 1013: then ! 1014: rm -f ${DEF_CONFIG}.old ! 1015: mv $DEF_CONFIG ${DEF_CONFIG}.old ! 1016: fi ! 1017: ! 1018: mv $CONFIG $DEF_CONFIG ! 1019: mv $CONFIG_H $DEF_CONFIG_H ! 1020: ! 1021: return 0 ! 1022: else ! 1023: return 1 ! 1024: fi ! 1025: } ! 1026: ! 1027: ! 1028: # ! 1029: # Remove temporary files ! 1030: # ! 1031: cleanup () { ! 1032: cleanup1 ! 1033: cleanup2 ! 1034: stty $S_TERMIO ! 1035: } ! 1036: ! 1037: cleanup1 () { ! 1038: rm -f MCmenu* MCradiolists MCdialog.out help.out ! 1039: } ! 1040: ! 1041: cleanup2 () { ! 1042: rm -f .tmpconfig .tmpconfig.h ! 1043: } ! 1044: ! 1045: set_geometry () { ! 1046: # Some distributions export these with incorrect values ! 1047: # which can really screw up some ncurses programs. ! 1048: LINES= COLUMNS= ! 1049: ! 1050: ROWS=${1:-24} COLS=${2:-80} ! 1051: ! 1052: # Just in case the nasty rlogin bug returns. ! 1053: # ! 1054: [ $ROWS = 0 ] && ROWS=24 ! 1055: [ $COLS = 0 ] && COLS=80 ! 1056: ! 1057: if [ $ROWS -lt 19 -o $COLS -lt 80 ] ! 1058: then ! 1059: echo -e "\n\007Your display is too small to run Menuconfig!" ! 1060: echo "It must be at least 19 lines by 80 columns." ! 1061: exit 0 ! 1062: fi ! 1063: ! 1064: ROWS=$((ROWS-4)) COLS=$((COLS-5)) ! 1065: } ! 1066: ! 1067: S_TERMIO=`stty -g` ! 1068: ! 1069: set_geometry `stty size 2>/dev/null` ! 1070: ! 1071: menu_instructions="\ ! 1072: Arrow keys navigate the menu. \ ! 1073: <Enter> selects submenus --->. \ ! 1074: Highlighted letters are hotkeys. \ ! 1075: Pressing <Y> includes, <N> excludes features. \ ! 1076: Press <Esc><Esc> to exit, <?> for Help. \ ! 1077: Legend: [*] built-in [ ] excluded " ! 1078: ! 1079: radiolist_instructions="\ ! 1080: Use the arrow keys to navigate this window or \ ! 1081: press the hotkey of the item you wish to select \ ! 1082: followed by the <SPACE BAR>. ! 1083: Press <?> for additional information about this option." ! 1084: ! 1085: inputbox_instructions_int="\ ! 1086: Please enter a decimal value. \ ! 1087: Fractions will not be accepted. \ ! 1088: Use the <TAB> key to move from the input field to the buttons below it." ! 1089: ! 1090: inputbox_instructions_hex="\ ! 1091: Please enter a hexadecimal value. \ ! 1092: Use the <TAB> key to move from the input field to the buttons below it." ! 1093: ! 1094: DIALOG="${DIALOG:-/usr/src/linux/scripts/lxdialog/lxdialog}" ! 1095: ! 1096: if [ ! -x $DIALOG ]; ! 1097: then ! 1098: echo "Compiling lxdialog in kernel source tree..." ! 1099: make -C /usr/src/linux/scripts/lxdialog lxdialog ! 1100: if [ "$?" != "0" ]; ! 1101: then ! 1102: echo "Something's wrong here. Sorry, I don't know what." ! 1103: exit 1 ! 1104: fi ! 1105: fi ! 1106: ! 1107: backtitle="Dmsdos CVF-FAT Module Configuration" ! 1108: ! 1109: trap "cleanup ; rm -f .menuconfig ; exit 1" 1 2 15 ! 1110: ! 1111: ! 1112: # ! 1113: # Locate default files. ! 1114: # ! 1115: DEFAULTS="dmsdos-config.default" ! 1116: ! 1117: CONFIG_IN="${1:-./config.in}" ! 1118: ! 1119: _CONFIG="${2:-.config}" ! 1120: ! 1121: AUTOCONF_H="dmsdos-config.h" ! 1122: ! 1123: if [ -f "$_CONFIG" ]; then ! 1124: DEFAULTS=$_CONFIG ! 1125: fi ! 1126: ! 1127: if [ -f $DEFAULTS ] ! 1128: then ! 1129: echo ! 1130: echo "Using defaults found in" $DEFAULTS ! 1131: load_config_file $DEFAULTS ! 1132: else ! 1133: echo ! 1134: echo "No defaults found" ! 1135: fi ! 1136: ! 1137: # Fresh new log. ! 1138: >.menuconfig.log ! 1139: ! 1140: $DIALOG --backtitle "$backtitle" \ ! 1141: --infobox "Preparing configuration scripts..." 3 40 ! 1142: ! 1143: # Load the functions used by the config.in files. ! 1144: load_functions ! 1145: ! 1146: # ! 1147: # Read config.in files and parse them into one shell function per menu. ! 1148: # ! 1149: parse_config_files $CONFIG_IN ! 1150: ! 1151: # ! 1152: # Start the ball rolling from the top. ! 1153: # ! 1154: activate_menu MCmenu0 ! 1155: ! 1156: # ! 1157: # All done! ! 1158: # ! 1159: cleanup1 ! 1160: ! 1161: # ! 1162: # Confirm and Save ! 1163: # ! 1164: if $DIALOG --backtitle "$backtitle" \ ! 1165: --yesno "Do you wish to save your new dmsdos configuration?" 5 60 ! 1166: ! 1167: then ! 1168: save_configuration ! 1169: stty $S_TERMIO ! 1170: clear ! 1171: ! 1172: cat <<EOM ! 1173: ! 1174: ! 1175: The dmsdos module is now configured. Do a 'make clean; make' to (re)compile. ! 1176: ! 1177: EOM ! 1178: else ! 1179: clear ! 1180: stty $S_TERMIO ! 1181: echo -e "Your dmsdos configuration changes were NOT saved.\n" ! 1182: exit 1 ! 1183: fi ! 1184: ! 1185: ! 1186: exit 0 ! 1187:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.