1#!/bin/sh - 2# Copyright (C) 1996 Robert de Bath <rdebath@cix.compulink.co.uk> 3# This file is part of the Linux-8086 C library and is distributed 4# under the GNU Library General Public License. 5 6main() 7{ 8 rm -f .config.tmp 9 ALLON=yes 10 11 if [ "$ALLON" = yes -a -f .config.lst ] 12 then grep '^[^:]*:+:' .config.lst > .config.tmp 13 [ -s .config.tmp ] && ALLON=no 14 fi 15 16 if [ "$ALLON" = yes -a -f Config.dflt ] 17 then grep '^[^:]*:+:' Config.dflt > .config.tmp 18 [ -s .config.tmp ] && { 19 ALLON=no 20 grep -q '^kinclude:' .config.tmp >/dev/null 2>&1 || { 21 [ -d "$ELKSSRC/include" ] || 22 echo 'kinclude:+:' >> .config.tmp 23 } 24 } 25 fi 26 27 egrep -v '^#|^$' /dev/null */[Cc]onfig | \ 28 sed -e 's./.:.' -e 's/[ ]*:[ ]*/:/g' >> .config.tmp 2>/dev/null 29 ls */Makefile | sed 's-/Makefile-:+:+-' >> .config.tmp 30 sort .config.tmp > .config.lst 31 32 unset_dups 33 34 if [ ! -s .config.lst ] 35 then echo 'No configuration options' 36 exit 0 37 fi 38 39 CHANGED=0 40 RUNNING=1 41 [ "$DIST" != "" -o ! -t 1 -o ! -t 0 ] && { 42 RUNNING=0 43 echo 'Using default configuration' 44 } 45 while [ $RUNNING = 1 ] 46 do 47 display 48 echo 49 echon 'Select config option to flip [or quit] >' 50 read n 51 v="" 52 case "$n" in 53 [qQ]* ) RUNNING=0 54 ;; 55 [0-9] ) v=$n ;; 56 [0-9][0-9] ) v=$n ;; 57 * ) echo '\007' 58 ;; 59 esac 60 61 if [ "$v" != "" ] 62 then set_option $v 63 fi 64 done 65 66 if [ "$CHANGED" = 1 -a \( -f libc.a -o -f crt0.o \) ] 67 then echo ' 68 You should now run a "make clean" to clean out the libc.a 69' 70 exit 1 71 fi 72 73 exit 0 74} 75 76display() 77{ 78 clear 79 awk -F: < .config.lst '{ 80 if( $3 == "+" ) next; 81 if( $2 == "+" ) { flags[$1] = 1; next; } 82 83 printf("%2d) ", ++count); 84 if( $1 in flags ) printf("(ON) "); 85 else printf("(OFF) "); 86 if( $2 == "Config" ) printf(" "); else printf("* "); 87 printf("%s\n", $4); 88 }' 89} 90 91unset_dups() 92{ 93 awk -F: < .config.lst '{ 94 if( $2 == "+" && $3 == "+") { if( noco[$1] != 1 ) noco[$1] = 2; next; } 95 if( $2 == "+" ) { flags[$1] = 1; next; } 96 if( "'$ALLON'" == "yes" && $2 == "Config" ) flags[$1] = 1; 97 98 if( $1 in flags ) 99 { 100 if( $3 in gottype ) 101 ; 102 else 103 { 104 printf("%s:+:\n", $1); 105 gottype[$3] = 1; 106 } 107 } 108 noco[$1] = 1; 109 printf("%s\n", $0); 110 } END { 111 for(i in noco) 112 if( noco[i] == 2 ) 113 printf("%s:+:+\n", i); 114 }' | sort > .config.tmp 115 ALLON=no 116 mv -f .config.tmp .config.lst 117} 118 119set_option() 120{ 121 rm -f .config.tmp1 122 awk -F: < .config.lst '{ 123 if( $2 == "+" && $3 == "+" ) { print $0; next; } 124 if( $2 == "+" ) { flags[$1] = 1; next; } 125 126 if( ++cnt == '$1' ) 127 { 128 if( $1 in flags ) 129 ; 130 else 131 printf("%s:+:\n", $1) > ".config.tmp1"; 132 printf("%s\n", $0) > ".config.tmp1"; 133 } 134 else 135 { 136 if( $1 in flags ) 137 printf("%s:+:\n", $1); 138 printf("%s\n", $0); 139 } 140 }' > .config.tmp2 141 if [ -f .config.tmp1 ] 142 then CHANGED=1 143 else echo 'Cannot change that option!' 144 sleep 2 145 fi 146 cat .config.tmp[12] > .config.lst 147 rm .config.tmp[12] 148 unset_dups 149} 150 151echon() { 152 [ "$ECHON" = "" ] && { 153 if echo -n | grep -e -n >/dev/null 154 then ECHON="echo "; ECHOT='\c' 155 else ECHON="echo -n"; ECHOT='' 156 fi 157 } 158 $ECHON "$@""$ECHOT" 159} 160 161main 162