NetBSD/gnu/dist/texinfo/util/update-info
1999-02-11 03:57:13 +00:00

876 lines
22 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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@gnu.org.
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@"