aboutsummaryrefslogtreecommitdiff
path: root/texinfo/util
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1998-03-22 21:41:58 -0700
committerJeff Law <law@gcc.gnu.org>1998-03-22 21:41:58 -0700
commit1eb3e8442f8c549c9b2ed21ca75eb7fb12b10b0d (patch)
tree9bc386a0875ecd26d247a4eb18407b6c59020a25 /texinfo/util
parent34b6478b59f51c9d5b2b634ea0aefa6813cdbb2a (diff)
downloadgcc-1eb3e8442f8c549c9b2ed21ca75eb7fb12b10b0d.zip
gcc-1eb3e8442f8c549c9b2ed21ca75eb7fb12b10b0d.tar.gz
gcc-1eb3e8442f8c549c9b2ed21ca75eb7fb12b10b0d.tar.bz2
Initial revision
From-SVN: r18770
Diffstat (limited to 'texinfo/util')
-rw-r--r--texinfo/util/Makefile.am23
-rw-r--r--texinfo/util/README3
-rwxr-xr-xtexinfo/util/update-info875
3 files changed, 901 insertions, 0 deletions
diff --git a/texinfo/util/Makefile.am b/texinfo/util/Makefile.am
new file mode 100644
index 0000000..d1f973e
--- /dev/null
+++ b/texinfo/util/Makefile.am
@@ -0,0 +1,23 @@
+## Makefile.am for texinfo/util.
+## $Id: Makefile.am,v 1.1 1998/03/23 04:43:11 law Exp $
+## Run automake in .. to produce Makefile.in from this.
+
+bin_PROGRAMS = texindex
+bin_SCRIPTS = texi2dvi
+
+## CYGNUS LOCAL: Build install-inf locally, and install it as
+## install-info, to avoid confusing with the install-info target
+## generated by automake --cygnus.
+noinst_PROGRAMS = install-inf
+install_inf_SOURCES = install-info.c
+
+localedir = $(datadir)/locale
+INCLUDES = -I$(top_srcdir)/lib -I../intl -DLOCALEDIR=\"$(localedir)\"
+LDADD = ../lib/libtxi.a @INTLLIBS@
+
+EXTRA_DIST = README deref.c fixfonts gen-dir-node tex3patch texi2dvi \
+ update-info
+
+install-exec-local: $(noinst_PROGRAMS)
+ $(mkinstalldirs) $(bindir)
+ $(INSTALL_PROGRAM) install-inf$(EXEEXT) $(bindir)/`echo install-info$(EXEEXT)|sed '$(transform)'`; \
diff --git a/texinfo/util/README b/texinfo/util/README
new file mode 100644
index 0000000..b1ce44c
--- /dev/null
+++ b/texinfo/util/README
@@ -0,0 +1,3 @@
+Assorted Texinfo-related programs and scripts.
+texindex, texi2dvi, and install-info get installed.
+The other programs are for your amusement.
diff --git a/texinfo/util/update-info b/texinfo/util/update-info
new file mode 100755
index 0000000..d946bce
--- /dev/null
+++ b/texinfo/util/update-info
@@ -0,0 +1,875 @@
+#!/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<<Sed_Script_EOF>$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<<VersionEOF
+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
+VersionEOF
+ exit;;
+
+ --help)
+cat<<HelpEndOfFile
+Usage: update-info [OPTION]... INFO_PATH/INFO_DIR_FILE
+
+It detects and inserts missing menu items into the info node file.
+
+Options:
+-c create a new info node
+ --debug print debug information to standard error path
+-d, --delete delete invalid menu items (ignore missing menu items)
+-f do not load functions (file update-info.f)
+ --help print this help message and exit
+-i, --interactive interactive mode prompts before inserting or removing
+ menu items
+ --version print current version and exit
+Backup of the info node has a '.old' suffix added. This is a shell script.
+Files: update-info.f -- contains functions (optional).
+Environment Variables: COLUMNS, EDITOR, LINES, TMPDIR
+Email bug reports to bug-texinfo@prep.ai.mit.edu.
+HelpEndOfFile
+ exit;;
+
+ [-+]*) echo "$0:$LINENO: \"$1\" is not a valid option">&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<<NodeEndOfFile||exit
+
+This is the file .../info/dir, which contains the topmost node of the
+Info hierarchy. The first time you invoke Info you start off
+looking at that node, which is (dir)Top.
+
+File: dir Node: Top This is the top of the INFO tree
+ This (the Directory node) gives a menu of major topics.
+ Typing "d" returns here, "q" exits, "?" lists all INFO commands, "h"
+ gives a primer for first-timers, "mTexinfo<Return>" 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</dev/null>$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</dev/null>"$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<ENTER>:
+# : (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@"