#!/bin/sh # update-info -- update dir file from all extant info pages. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, you can either send email to this # program's maintainer or write to: The Free Software Foundation, # Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA. # # Author: rhawes@dmapub.dma.org. Please report bugs to him. # # run this program to install update-info # ###SECTION 0### install script # These constants set the version numbers for both files: PROGRAM_VERSION="1.4" PACKAGE_VERSION="4.0" # ENVIRONMENT if test -z "$TMPDIR"; then TMPDIR="/usr/tmp" fi TMP_SED="$TMPDIR/uss$$.info" TMP_F_ADD_SECTION="$TMPDIR/ufa$$.info" TMP_F_DELETE_INVALID="$TMPDIR/ufd$$.info" TMP_F_INSERT_MISSING="$TMPDIR/ufi$$.info" TMP_FILES="$TMP_SED $TMP_F_ADD_SECTION $TMP_F_DELETE_INVALID\ $TMP_F_INSERT_MISSING" trap 'rm -f $TMP_FILES' 0 # file boundaries UPDATE_INFO="/^# _file: 'update-info'_/" UPDATE_INFO_F="/^# _file: 'update-info.f'_/" # @F_ADD_SECTION@ echo 'Item_Num=`expr "$Item_Num" + "1"` echo "$1">>"$TMP_SECTIONS" if test "$Item_Status"; then Item_Status=`echo "${Item_Status} X"` else Item_Status="X" fi '>$TMP_F_ADD_SECTION # @F_INSERT_MISSING@ echo 'if test -z "$Create_Node"; then rm -f ${Info_Node}.old cp $Info_Node ${Info_Node}.old echo "$BACKUP_MSG" fi echo "/$MENU_BEGIN/ +,$ d r $TMP_MENU w q"|ed -s $Info_Node>/dev/null'>$TMP_F_INSERT_MISSING # @F_DELETE_INVALID@ echo ' rm -f ${Info_Node}.old cp $Info_Node ${Info_Node}.old echo "$BACKUP_MSG" echo "/$MENU_BEGIN/ +,$ d w q"|ed -s $Info_Node>/dev/null sed -f "$TMP_SED" "$TMP_MENU">>"$Info_Node"'>$TMP_F_DELETE_INVALID cat<$TMP_SED s/@UPDATE_INFO_VERSION@/$PROGRAM_VERSION/g s/@TEXINFO_VERSION@/$PACKAGE_VERSION/g s/@SET_ITEM@/Item_Status=\`echo "\$Item_Status"|sed -e "\${1}s%^.*%\${2}%"\`/ /@F_ADD_SECTION@/r $TMP_F_ADD_SECTION /@F_ADD_SECTION@/d /@F_DELETE_INVALID@/r $TMP_F_DELETE_INVALID /@F_DELETE_INVALID@/d /@F_INSERT_MISSING@/r $TMP_F_INSERT_MISSING /@F_INSERT_MISSING@/d Sed_Script_EOF sed -e "1,${UPDATE_INFO}d" -e "$UPDATE_INFO_F,\$d" -f $TMP_SED $0>update-info sed -e "1,${UPDATE_INFO_F}d" -f $TMP_SED $0>update-info.f chmod +x update-info update-info.f echo "installed update-info, and update-info.f into `pwd`" rm -f $TMP_FILES exit # _file: 'update-info'_ #!/bin/sh #update-info (GNU texinfo @TEXINFO_VERSION@) @UPDATE_INFO_VERSION@ #Copyright (C) 1997 Free Software Foundation, Inc. #update-info comes with NO WARRANTY, to the extent permitted by law. #You may redistribute copies of update-info #under the terms of the GNU General Public License. #For more information about these matters, see the files named COPYING." #Author: Richard L. Hawes # ###SECTION 1### Constants set -h 2>/dev/null # ENVIRONMENT if test -z "$TMPDIR"; then TMPDIR="/usr/tmp" fi if test -z "$LINES"; then LINES=24 fi if test -z "$COLUMNS"; then COLUMNS=80 fi if test -z "$EDITOR"; then EDITOR=vi fi if test -z "$LINENO"; then LINENO="0" fi # constants redefined by update-info.f PROMPT1="(y=yes, Y=yes to all, n=no, N=No to all):" FUNCTIONS="" # ARGUMENTS="$*" DISPLAY_NUM=`expr "$LINES" - 4` CONTROL_D="{Ctrl-D}" DIR_SECTION="^INFO-DIR-SECTION" ENTRY_END="^END-INFO-DIR-ENTRY" ENTRY_START="^START-INFO-DIR-ENTRY" MENU_BEGIN='^\*\([ ]\)\{1,\}Menu:' MENU_ITEM='^\* ([^ ]).*:([ ])+\(' SECTION_TITLE="^[A-Za-z0-9]" MENU_FILTER1='s/^\*\([ ]\)\{1,\}/* /' MENU_FILTER2='s/\([ ]\)\{1,\}$//g' TMP_ITEM="${TMPDIR}/ui${$}.info" TMP_LIST="${TMPDIR}/ul${$}.info" TMP_MENU="${TMPDIR}/um${$}.info" TMP_SECTIONS="${TMPDIR}/us${$}.info" # used only in Detect_Missing TMP_SED="$TMP_SECTIONS" # used only in Detect_Invalid routines TMP_FILE1="${TMPDIR}/ux${$}.info" TMP_FILE2="${TMPDIR}/uy${$}.info" TMP_COUNT="$TMP_FILE2" TMP_FILE_LIST="$TMP_LIST $TMP_MENU $TMP_SECTIONS $TMP_FILE1 $TMP_FILE2\ $TMP_ITEM" TRY_HELP_MSG="Try --help for more information" if zcat --version 2>/dev/null>/dev/null; then CAT_COMMAND="zcat -f" else echo "$0:$LINENO: GNU zcat not found">&2 CAT_COMMAND="cat" fi # ###SECTION 100### main program #variables set by options Create_Node="" Debug=":" Interactive="" Load_Functions="y" Mode="" # Inserts="0" Inserts_Total="0" Invalid="0" Invalid_Total="0" Changed="" while test "$*" do case "$1" in -c) Create_Node="y";; -ci|-ic) Create_Node="y"; Interactive="y";; -cif|-cfi|-ifc|-icf|-fci|-fic) Create_Node="y" Interactive="y"; Load_Functions="";; --debug) set -eux; Debug="set>&2";; -d|--delete) Mode="Detect_Invalid";; -f) Load_Functions="";; -i|--interactive) Interactive="y";; -fi|-if) Load_Functions=""; Interactive="y";; -id|-di) Mode="Detect_Invalid"; Interactive="y";; +i|+d|+f);; --version) cat<&2 echo "$TRY_HELP_MSG">&2 exit 2;; *) break;; esac shift done if test "$#" -lt "1"; then echo "$0:$LINENO: Too few parameters">&2 echo "$TRY_HELP_MSG">&2 exit 2 elif test "$#" -gt "1"; then echo "$0:$LINENO: Too many parameters">&2 echo "$TRY_HELP_MSG">&2 exit 2 fi Info_Path="$1" Info_Node=`basename "$Info_Path"` if echo "$Info_Node"|grep ".*dir$">/dev/null; then : else echo "$0:$LINENO: $Info_Node is not a valid info node name">&2 exit 2 fi Info_Pathname=`dirname "$Info_Path"` cd "$Info_Pathname"||exit BACKUP_MSG="Backed up $Info_Node to ${Info_Node}.old." HANGUP_MSG="Hang up on \"update-info $ARGUMENTS\"" INSERT_MSG="menu item(s) were inserted (not counting duplicates)." INSERT_MSG2="total menu item(s) were inserted into `pwd`/$Info_Node" DELETE_MSG="invalid menu item(s) were removed (not counting duplicates)." DELETE_MSG2="total invalid menu item(s) were removed from `pwd`/$Info_Node" if test "$Create_Node"; then if test "$Mode"; then echo "$0:$LINENO: ERROR: Illogical option combination: -d -c">&2 echo "$TRY_HELP_MSG">&2 exit 2 fi if test -f "$Info_Node"; then rm -f ${Info_Node}.old mv "$Info_Node" "${Info_Node}.old" echo "$BACKUP_MSG" fi echo "Creating new Info Node: `pwd`/$Info_Node" cat>$Info_Node<" visits Texinfo topic, etc. Or click mouse button 2 on a menu item or cross reference to select it. --- PLEASE ADD DOCUMENTATION TO THIS TREE. (See INFO topic first.) --- * Menu: The list of major topics begins on the next line. NodeEndOfFile else if test ! -f "$Info_Node"; then echo "$0:$LINENO: $Info_Node is irregular or nonexistant">&2 exit 2 elif test ! -r "$Info_Node"; then echo "$0:$LINENO: $Info_Node is not readable">&2 exit 2 elif test ! -w "$Info_Node"; then echo "$0:$LINENO: $Info_Node is not writeable">&2 exit 2 fi fi if test "$Load_Functions" -a "$Interactive" -a -z "$Mode"; then if FUNCTIONS_VERSION=`( update-info.f )`; then if test `echo "$FUNCTIONS_VERSION"\ |cut -d' ' -f5` = "@UPDATE_INFO_VERSION@"; then echo "Loading functions..." . update-info.f else echo "$0:$LINENO: wrong version of update-info.f">&2 echo "(functions were not loaded)">&2 fi else echo "(functions were not loaded)">&2 fi fi trap ' eval "$Debug"; rm -f $TMP_FILE_LIST; exit ' 0 if test "$Interactive"; then if test ! -t "1"; then echo "$0:$LINENO: Cannot run in interactive mode "\ "standard out is redirected">&2 exit 2 fi trap ' ' 2 3 else trap ' rm -f $TMP_FILE_LIST echo "$0:$LINENO: received INT signal. All edits are canceled.">&2 exit ' 2 trap ' rm -f $TMP_FILE_LIST echo "$0:$LINENO: received QUIT signal. All edits are canceled.">&2 exit ' 3 fi if test -z "$Mode"; then trap ' if test "$Changed"; then { echo $HANGUP_MSG @F_INSERT_MISSING@ Inserts_Total=`wc -c<"$TMP_COUNT"` echo $Inserts_Total $INSERT_MSG2 }|mail "$LOGNAME" fi rm -f $TMP_FILE_LIST exit ' 1 else trap ' if test "$Changed"; then { echo $HANGUP_MSG @F_DELETE_INVALID@ Invalid_Total=`wc -l<"$TMP_SED"` echo $Invalid_Total $DELETE_MSG2 }|mail $LOGNAME fi rm -f $TMP_FILE_LIST exit ' 1 fi sed -e "1,/$MENU_BEGIN/d" -e "$MENU_FILTER1" -e "$MENU_FILTER2"<$Info_Node\ |tee $TMP_MENU\ |sed -n -e '/\* /{ s/).*$//g s/\.gz$// s/\.info$// s/^.*(//p }'|sort -u>$TMP_FILE1 ls -F|sed -e '/\/$/d' -e '/[-.][0-9]/d'\ -e '/:$/d' -e '/^$/d' -e "/^${Info_Node}~\$/d"\ -e "/^${Info_Node}\$/d" -e "/^${Info_Node}.old\$/d"\ -e 's/\.gz$//' -e 's/\.info$//'|sort>$TMP_FILE2 if test -z "$Mode"; then #Detect Missing comm -13 $TMP_FILE1 $TMP_FILE2>$TMP_LIST cat$TMP_COUNT #get sections, initialize variables sed -n -e "/$SECTION_TITLE/p" "$TMP_MENU">"$TMP_SECTIONS" Item_Num=`wc -l<"$TMP_SECTIONS"|tr -d ' '` Item_Status=`echo\ |awk "BEGIN{for(i=1;i<=${Item_Num};i++)printf(\"_\n\")}"` Item_Dir="$Item_Num" for Info_Name in `cat $TMP_LIST` do if test -r "$Info_Name"; then Info_File="$Info_Name" elif test -r "${Info_Name}.info"; then Info_File="${Info_Name}.info" elif test -r "${Info_Name}.gz"; then Info_File="${Info_Name}.gz" elif test -r "${Info_Name}.info.gz"; then Info_File="${Info_Name}.info.gz" else echo "$0:$LINENO: can't find info file for ${Info_Name}?">&2 fi #generate menu item echo|tr -d '\012'>$TMP_FILE1 eval $CAT_COMMAND "$Info_File"\ |sed -n -e "/$DIR_SECTION/w $TMP_FILE1"\ -e "/$ENTRY_START/,/$ENTRY_END/{ $MENU_FILTER1 p }"|awk "BEGIN{Mode=0} /^$/{if(Mode==1)exit} /^([ ])+([^ ])+/{if(Mode==1)print} /^[^ ]/{if(Mode==1)exit} /${MENU_ITEM}${Info_Name}\)\./{if(Mode==0){Mode++ print} else exit}">"$TMP_ITEM" if test ! -s "$TMP_ITEM"; then echo "* $Info_Name: ($Info_Name).">"$TMP_ITEM" fi Item_Status=`echo "$Item_Status"|sed -e '1,$s/^./_/'` if test -s "$TMP_FILE1"; then Item_Section=`sed -e "s/$DIR_SECTION[ ]*//"\ <$TMP_FILE1` else Item_Section=`echo "Miscellaneous"` fi Size=`echo "$Item_Section"|wc -l|tr -d ' '` # initialize variables, check for new sections Num1=1 while test "$Num1" -le "$Size" do Item=`echo "$Item_Section"|sed -n -e "${Num1}p"` if Num=`grep -in "^$Item$" "$TMP_SECTIONS"`; then Num=`echo "$Num"|sed -e 's/:.*$//g'` ##F#Set_Item set "$Num" "X" @SET_ITEM@ else set "$Item" @F_ADD_SECTION@ fi Num1=`expr "$Num1" + "1"` done if test "$Interactive"; then echo "$Item_Section" cat "$TMP_ITEM" echo "add menu item for $Info_File? " while true do echo "$PROMPT1"|tr -d '\012' read Answer case $Answer in y) break;; e) if test "$FUNCTIONS"; then Select_Sections break else echo "Can't edit. "\ "Functions are not loaded.">&2 fi;; Y) Interactive=""; break;; n) continue 2;; N) break 2;; *) echo "\"$Answer\" "\ "is an invalid response">&2;; esac done fi if echo "$Item_Status"|grep '^X'>/dev/null; then # edit $TMP_MENU Changed="y" ( trap ' ' 1 2 3 Tmp_Var=`echo "$Item_Status"|tr -d '\012'` Key=`awk -F':' ' FNR==1{ print $1}' $TMP_ITEM` # add new sections to 'dir' file if test "$Item_Num" -gt "$Item_Dir"; then if test "$Item_Dir" -ne "0"; then sed -e "1,${Item_Dir}d" -e 'i\ ' "$TMP_SECTIONS">>"$TMP_MENU" else sed -e 'i\ ' "$TMP_SECTIONS">>"$TMP_MENU" fi fi # awk determines the insertion points for each section awk -F":" "function Insert(Line){ if(Mode==2){ Mode=1;if(substr(\"$Tmp_Var\",Item++,1)==\"X\") print Line } } BEGIN{Mode=1;Item=1} /$SECTION_TITLE/{Insert(FNR-1);if(Mode>=1)Mode=2} /${MENU_ITEM}.*\)\./{if(\$1>Item_Name)Insert(FNR-1)} /^$/{Insert(FNR-1)} END{Insert(FNR)}" Item_Name="$Key" "$TMP_MENU"\ |sort -nr|sed -e "s%\$% r $TMP_ITEM%"|sed -e '$a\ w ' -e '$a\ q '|ed -s "$TMP_MENU" echo "$Item_Status"|tr -cd "X">>$TMP_COUNT ) Inserts=`expr "$Inserts" + "1"` echo "$Info_File installed into section(s):"\ |tr -d '\012' echo "$Item_Status"|awk '/X/{printf(" %d", FNR)}' echo Item_Dir="$Item_Num" else echo "$Info_File not installed (no section selected)" fi done # print summary trap ' ' 1 2 3 if test "$Changed"; then @F_INSERT_MISSING@ Inserts_Total=`wc -c<"$TMP_COUNT"|tr -d " "` if test "$Inserts" -ne "$Inserts_Total"; then echo "$Inserts $INSERT_MSG" fi echo "$Inserts_Total $INSERT_MSG2" fi else # Detect Invalid cat"$TMP_SED" comm -23 $TMP_FILE1 $TMP_FILE2>$TMP_LIST for Info_Name in `cat $TMP_LIST` do if test "$Interactive"; then # display invalid menu item(s) awk "BEGIN{Mode=1} /^([ ])+([^ ])+/{if(Mode==2)print} /^$/{if(Mode==2)Mode=1} /$SECTION_TITLE/{Section=\$0} /^[^ ]/{if(Mode==2)Mode=1} /${MENU_ITEM}${Info_Name}\)\./{if(Mode==1){Mode++ print Section print}}" $TMP_MENU echo "delete menu item for $Info_Name? " while true do echo\ "(y=yes, n=no, Y=yes to all, N=No to all):"\ |tr -d '\012' read Answer case "$Answer" in y) break;; Y) Interactive=""; break;; n) continue 2;; N) break 2;; *) echo "\"$Answer\" "\ "is an invalid reponse">&2;; esac done fi # remove menu item from $TMP_MENU Invalid=`expr "$Invalid" + "1"` Changed="y" ( trap ' ' 1 2 3 echo\ "invalid menu item for $Info_Name removed from section(s):"\ |tr -d '\012' awk "function Delete(Last){ printf(\"%d,%dd\n\",First,Last-1)>>\"$TMP_SED\"} BEGIN{Mode=1;Section=0} /^$/{if(Mode==2){Delete(FNR);Mode=1}} /$SECTION_TITLE/{Section++} /^[^ ]/{if(Mode==2){Delete(FNR);Mode=1}} /${MENU_ITEM}${Info_Name}\)\./{if(Mode==1){ First=FNR;printf(\" %d\",Section);Mode=2}} END{if(Mode==2)Delete(FNR+1)}" $TMP_MENU echo ) done # display a summary trap ' ' 1 2 3 if test "$Changed"; then Invalid_Total=`wc -l<"$TMP_SED"|tr -d ' '` @F_DELETE_INVALID@ if test "$Invalid" -ne "$Invalid_Total"; then echo "$Invalid $DELETE_MSG" fi echo "$Invalid_Total $DELETE_MSG2" fi fi if test -z "$Changed"; then echo "Nothing to do" fi rm -f $TMP_FILE_LIST eval "$Debug" exit 0 # _file: 'update-info.f'_ #update-info.f (GNU texinfo @TEXINFO_VERSION@) @UPDATE_INFO_VERSION@ #Copyright (C) 1997 Free Software Foundation, Inc. #update-info comes with NO WARRANTY, to the extent permitted by law. #You may redistribute copies of update-info #under the terms of the GNU General Public License. #For more information about these matters, see the files named COPYING." #Author: Richard L. Hawes # update-info.f functions for update-info # ###SECTION 1### functions used to insert missing menu items Set_Item (){ # set item status @SET_ITEM@ } Add_Section (){ # add a section @F_ADD_SECTION@ } # ###SECTION 2### functions for menu selection of sections Print (){ # print a line without a linefeed echo "$*"|tr -d '\012' } Get_Answer (){ # get an answer to question _gs_Valid="$1" _gs_Prompt="$2" set -f Answer="" while test -z "$Answer" do Print "$_gs_Prompt" if read Answer; then : else Answer="$CONTROL_D" echo fi if expr "$Answer" : "[$_gs_Valid]$">/dev/null; then : else Print "\"$Answer\" is not a valid response! --">&2 Answer="" fi done set +f } Do_Previous (){ # go to previous screen if test "$Previous"; then Next="$Top_Item" Top_Item="$Previous" if Previous=`expr "$Top_Item" - "$DISPLAY_NUM"`; then if test "$Previous" -le "0"; then Previous="" fi else Previous="" fi elif test "$Next"; then Last_Page else Print "There is no previous page. ">&2 fi } Do_Next (){ # process go to next if test "$Next"; then Previous="$Top_Item" Top_Item="$Next" Set_Next elif test "$Previous"; then Top_Item="1" Previous="" Set_Next else Print "There is no next page. ">&2 fi } Do_Add_Section (){ # process add section command echo echo "Please enter the name of the new section:" if read Answer; then Answer=`echo "$Answer"\ |sed -e 's/^\([ ]\)\{1,\}//g' -e "$MENU_FILTER2"` if test "$Answer"; then Add_Section "$Answer" Last_Page clear fi else Answer="" fi if test -z "$Answer"; then clear Print "no section added. " fi } Do_Edit (){ # process edit item command if test -t "2"; then _de_Done="" cp "$TMP_ITEM" "$TMP_FILE1" while test -z "$_de_Done" do eval $EDITOR "$TMP_FILE1" clear _de_Done="t" if sed -n -e "$MENU_FILTER1" -e '1p' "$TMP_FILE1"\ |egrep "${MENU_ITEM}${Info_Name}\)\.">/dev/null; then : else sed -n -e '1p' "$TMP_FILE1" echo "Pattern mismatch: `echo\ "/${MENU_ITEM}${Info_Name}\)\./"\ |tr -d "\011"`">&2 echo _de_Done="" fi if sed -n -e '2,$p' "$TMP_FILE1"|grep '^[^ ]'>&2; then echo "These lines must have leading spaces">&2 echo _de_Done="" fi if test -z "$_de_Done"; then Get_Answer "yn" "Invalid entry, cancel edits? (y or n):" if test "y" = "$Answer"; then clear Print "Canceling edits -- invalid entry ">&2 _de_Done="t" fi else sed -e "$MENU_FILTER1" -e "$MENU_FILTER2" -e '/^$/d'\ <"$TMP_FILE1">"$TMP_ITEM" fi done else Print "editor cannot run with error path redirected " fi } Do_Number (){ # process number _dn_Num="$1" if test "$_dn_Num" -ge 1 -a "$_dn_Num" -le "$Item_Num"; then if test `echo "$Item_Status"|sed -n -e "${_dn_Num}p"` = "_"; then Set_Item "$_dn_Num" "X" else Set_Item "$_dn_Num" "_" fi else Print "\"$_dn_Num\" is an invalid section number. ">&2 fi } Do_Help (){ # process menu help echo echo "\ Enter the following commands seperated by spaces and terminated by: # : (section number) toggle section a : add a new section e : edit item -- changes will not be accepted if you change the '(info_file_name).' or delete the key parts: '*' 'Menu Name' ':' h : get this help screen n : next page p : previous page q : quit and do not put into menu s : save and put into menu" Print "Press enter to continue:" read junk clear } Set_Next (){ # determine value of Next Next=`expr "$DISPLAY_NUM" + "$Top_Item"` if test "$Next" -gt "$Item_Num"; then Next="" fi } Last_Page (){ # go to last page of menu Top_Item=`echo|awk "BEGIN{printf(\"%d\", int((${Item_Num}-1)/${DISPLAY_NUM})*${DISPLAY_NUM}+1)}"` if test "$Top_Item" -gt "$DISPLAY_NUM"; then Previous=`expr "$Top_Item" '-' "$DISPLAY_NUM"` else Previous="" fi Set_Next } Select_Sections (){ # prompt user for which sections set -f Top_Item="1" Previous="" Set_Next clear echo "Default sections are selected." Done="" while test -z "$Done" do awk "FNR==1{printf(\"%s\n\", substr(\$0,1,${COLUMNS}))}" $TMP_ITEM Tmp_Var=`echo "$Item_Status"|tr -d '\012'` awk "BEGIN{Max=$Top_Item+$DISPLAY_NUM} FNR>=$Top_Item{if(FNR>=Max)exit printf(\"%2d:%s %s\n\",FNR,substr(\"$Tmp_Var\",FNR,1), substr(\$0,1,${COLUMNS}-5))}" "$TMP_SECTIONS" echo "Enter 1-${Item_Num}, add, edit, help," if test "$Previous" -o "$Next"; then Print "next, previous, " fi Print "quit, save :" read Command_List||Command_List="$CONTROL_D" Command_List=`echo "$Command_List"\ |tr '\011' ' '|tr ' ' '\012'|sed -e "/^$/d"` clear if test -z "$Command_List"; then Help="y" else Help="" fi while test "$Command_List" do Command=`echo "$Command_List"|sed -n -e '1p'` Command_List=`echo "$Command_List"|sed -e '1d'` case "$Command" in [0-9]|[0-9][0-9]) Do_Number "$Command";; n*) Do_Next;; p*) Do_Previous;; a*) Do_Add_Section;; e*) Do_Edit; break;; h*) Help="y";; s*) Done="s"; break;; q*) Done="q" Item_Status=`echo "$Item_Status"|sed -e '1,$s/^./_/'` break;; *) Print "$Command is not a valid command. ">&2 Help="y";; esac done if test "$Help"; then Do_Help fi echo done set +f # if new sections added, remove unused ones if test "$Item_Num" -gt "$Item_Dir"; then Tmp_Var=`echo "$Item_Status"|awk "FNR>$Item_Dir{ if(\\$0==\"_\")printf(\"%d\n\", FNR)}"` if test "$Tmp_Var"; then Tmp_Var1=`echo "$Tmp_Var"|sed -e 's/$/d/'` sed -e "$Tmp_Var1" "$TMP_SECTIONS">$TMP_FILE1 cp $TMP_FILE1 "$TMP_SECTIONS" Item_Status=`echo "$Item_Status"|sed -e "$Tmp_Var1"` Tmp_Var="" Tmp_Var1="" Item_Num=`wc -l<"$TMP_SECTIONS"|tr -d ' '` fi fi } # ###SECTION 100### Constants that redefine PROMPT1="(y=yes, e=edit, Y=yes to all, n=no, N=No to all):" FUNCTIONS="y" # echo "update-info.f (GNU texinfo @TEXINFO_VERSION@) @UPDATE_INFO_VERSION@"