head	1.1;
branch	1.1.1;
access;
symbols
	netbsd-11-0-RC5:1.1.1.1
	netbsd-11-0-RC4:1.1.1.1
	netbsd-11-0-RC3:1.1.1.1
	netbsd-11-0-RC2:1.1.1.1
	netbsd-11-0-RC1:1.1.1.1
	perseant-exfatfs-base-20250801:1.1.1.1
	netbsd-11:1.1.1.1.0.30
	netbsd-11-base:1.1.1.1
	netbsd-10-1-RELEASE:1.1.1.1
	perseant-exfatfs-base-20240630:1.1.1.1
	perseant-exfatfs:1.1.1.1.0.28
	perseant-exfatfs-base:1.1.1.1
	netbsd-8-3-RELEASE:1.1.1.1
	netbsd-9-4-RELEASE:1.1.1.1
	netbsd-10-0-RELEASE:1.1.1.1
	netbsd-10-0-RC6:1.1.1.1
	netbsd-10-0-RC5:1.1.1.1
	netbsd-10-0-RC4:1.1.1.1
	netbsd-10-0-RC3:1.1.1.1
	netbsd-10-0-RC2:1.1.1.1
	netbsd-10-0-RC1:1.1.1.1
	netbsd-10:1.1.1.1.0.26
	netbsd-10-base:1.1.1.1
	netbsd-9-3-RELEASE:1.1.1.1
	cjep_sun2x-base1:1.1.1.1
	cjep_sun2x:1.1.1.1.0.24
	cjep_sun2x-base:1.1.1.1
	cjep_staticlib_x-base1:1.1.1.1
	netbsd-9-2-RELEASE:1.1.1.1
	cjep_staticlib_x:1.1.1.1.0.22
	cjep_staticlib_x-base:1.1.1.1
	netbsd-9-1-RELEASE:1.1.1.1
	phil-wifi-20200421:1.1.1.1
	phil-wifi-20200411:1.1.1.1
	is-mlppp:1.1.1.1.0.20
	is-mlppp-base:1.1.1.1
	phil-wifi-20200406:1.1.1.1
	netbsd-8-2-RELEASE:1.1.1.1
	netbsd-9-0-RELEASE:1.1.1.1
	netbsd-9-0-RC2:1.1.1.1
	netbsd-9-0-RC1:1.1.1.1
	phil-wifi-20191119:1.1.1.1
	netbsd-9:1.1.1.1.0.18
	netbsd-9-base:1.1.1.1
	phil-wifi-20190609:1.1.1.1
	netbsd-8-1-RELEASE:1.1.1.1
	netbsd-8-1-RC1:1.1.1.1
	pgoyette-compat-merge-20190127:1.1.1.1
	pgoyette-compat-20190127:1.1.1.1
	pgoyette-compat-20190118:1.1.1.1
	pgoyette-compat-1226:1.1.1.1
	pgoyette-compat-1126:1.1.1.1
	pgoyette-compat-1020:1.1.1.1
	pgoyette-compat-0930:1.1.1.1
	pgoyette-compat-0906:1.1.1.1
	pgoyette-compat-0728:1.1.1.1
	netbsd-8-0-RELEASE:1.1.1.1
	phil-wifi:1.1.1.1.0.16
	phil-wifi-base:1.1.1.1
	pgoyette-compat-0625:1.1.1.1
	netbsd-8-0-RC2:1.1.1.1
	pgoyette-compat-0521:1.1.1.1
	pgoyette-compat-0502:1.1.1.1
	pgoyette-compat-0422:1.1.1.1
	netbsd-8-0-RC1:1.1.1.1
	pgoyette-compat-0415:1.1.1.1
	pgoyette-compat-0407:1.1.1.1
	pgoyette-compat-0330:1.1.1.1
	pgoyette-compat-0322:1.1.1.1
	pgoyette-compat-0315:1.1.1.1
	pgoyette-compat:1.1.1.1.0.14
	pgoyette-compat-base:1.1.1.1
	matt-nb8-mediatek:1.1.1.1.0.12
	matt-nb8-mediatek-base:1.1.1.1
	perseant-stdc-iso10646:1.1.1.1.0.10
	perseant-stdc-iso10646-base:1.1.1.1
	netbsd-8:1.1.1.1.0.8
	netbsd-8-base:1.1.1.1
	prg-localcount2-base3:1.1.1.1
	prg-localcount2-base2:1.1.1.1
	prg-localcount2-base1:1.1.1.1
	prg-localcount2:1.1.1.1.0.6
	prg-localcount2-base:1.1.1.1
	pgoyette-localcount-20170426:1.1.1.1
	bouyer-socketcan-base1:1.1.1.1
	pgoyette-localcount-20170320:1.1.1.1
	bouyer-socketcan:1.1.1.1.0.4
	bouyer-socketcan-base:1.1.1.1
	pgoyette-localcount-20170107:1.1.1.1
	pgoyette-localcount-20161104:1.1.1.1
	localcount-20160914:1.1.1.1
	pgoyette-localcount-20160806:1.1.1.1
	pgoyette-localcount-20160726:1.1.1.1
	pgoyette-localcount:1.1.1.1.0.2
	pgoyette-localcount-base:1.1.1.1
	texinfo-4-8a:1.1.1.1
	FSF:1.1.1;
locks; strict;
comment	@# @;


1.1
date	2016.01.14.00.11.29;	author christos;	state Exp;
branches
	1.1.1.1;
next	;
commitid	9dronS78TckhBPQy;

1.1.1.1
date	2016.01.14.00.11.29;	author christos;	state Exp;
branches;
next	;
commitid	9dronS78TckhBPQy;


desc
@@



1.1
log
@Initial revision
@
text
@#!/bin/sh
#fix-info-dir (GNU texinfo)
VERSION=1.1
#Copyright (C) 1998, 2003 Free Software Foundation, Inc.
#fix-info-dir comes with NO WARRANTY, to the extent permitted by law.
#You may redistribute copies of fix-info-dir
#under the terms of the GNU General Public License.
#For more information about these matters, see the files named COPYING."
#fix-info-dir was derived from update-info and gen-dir-node
# The skeleton file contains info topic names in the
# order they should appear in the output.  There are three special
# lines that alter the behavior: a line consisting of just "--" causes
# the next line to be echoed verbatim to the output.  A line
# containing just "%%" causes all the remaining filenames (wildcards
# allowed) in the rest of the file to be ignored.  A line containing
# just "!!" exits the script when reached (unless preceded by a line
# containing just "--").
#Author: Richard L. Hawes, rhawes@@dmapub.dma.org.

# ###SECTION 1### Constants
set -h 2>/dev/null
# ENVIRONMENT
if test -z "$TMPDIR"; then
	TMPDIR="/usr/tmp"
fi
if test -z "$LINENO"; then
	LINENO="0"
fi

MENU_BEGIN='^\*\([ 	]\)\{1,\}Menu:'
MENU_ITEM='^\* ([^ 	]).*:([ 	])+\('
MENU_FILTER1='s/^\*\([ 	]\)\{1,\}/* /'
MENU_FILTER2='s/\([ 	]\)\{1,\}$//g'

TMP_FILE1="${TMPDIR}/fx${$}.info"
TMP_FILE2="${TMPDIR}/fy${$}.info"
TMP_FILE_LIST="$TMP_FILE1 $TMP_FILE2"

TRY_HELP_MSG="Try --help for more information"

# ###SECTION 100### main program
#variables set by options
CREATE_NODE=""
DEBUG=":"
MODE=""
#
Total="0"
Changed=""

while test "$*"; do
	case "$1" in
		-c|--create)    CREATE_NODE="y";;
		--debug)	set -eux; DEBUG="set>&2";;
		-d|--delete)	MODE="Detect_Invalid";;
		+d);;
		--version)
cat<<VersionEOF
fix-info-dir (GNU Texinfo) $VERSION
Copyright (C) 1998 Free Software Foundation, Inc.
fix-info-dir comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of fix-info-dir
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:	fix-info-dir  [OPTION]... [INFO_DIR/[DIR_FILE]] [SKELETON]

It detects and inserts missing menu items into the info dir file.
The info dir must be the current directory.

Options:
-c,	--create	create a new info node
-d,	--delete	delete invalid menu items (ignore missing menu items)
	--debug		print debug information to standard error path
	--help		print this help message and exit
	--version	print current version and exit
Backup of the info node has a '.old' suffix added.  This is a shell script.
Environment Variables: 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

ORIGINAL_DIR=`pwd`

if test "$#" -gt "0"; then
	INFO_DIR="$1"
	shift
else
	INFO_DIR=$DEFAULT_INFO_DIR
fi

if test ! -d "${INFO_DIR}"; then
	DIR_FILE=`basename ${INFO_DIR}`;
	INFO_DIR=`dirname ${INFO_DIR}`;
else
	DIR_FILE="dir"
fi

cd "$INFO_DIR"||exit


if test "$CREATE_NODE"; then
	if test "$#" -gt "0"; then
		if test `expr $1 : /` = '1'; then
			SKELETON="$1"
		else
			SKELETON="$ORIGINAL_DIR/$1"
		fi
		if test ! -r "$SKELETON" && test -f "$SKELETON"; then
			echo "$0:$LINENO: $SKELETON is not readable">&2
			exit 2
		fi
		shift
	else
		SKELETON=/dev/null

	fi
else
	if test ! -f "$DIR_FILE"; then
		echo "$0:$LINENO: $DIR_FILE is irregular or nonexistant">&2
		exit 2
	elif test ! -r "$DIR_FILE"; then
		echo "$0:$LINENO: $DIR_FILE is not readable">&2
		exit 2
	elif test ! -w "$DIR_FILE"; then
		echo "$0:$LINENO: $DIR_FILE is not writeable">&2
		exit 2
	fi
fi

if test "$#" -gt "0"; then
	echo "$0:$LINENO: Too many parameters">&2
	echo "$TRY_HELP_MSG">&2
	exit 2
fi

if test -f "$DIR_FILE"; then
	cp "$DIR_FILE" "$DIR_FILE.old"
	echo "Backed up $DIR_FILE to $DIR_FILE.old."
fi

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
	echo "Creating new Info Node: `pwd`/$DIR_FILE"
	Changed="y"

{

	### output the dir header
	echo "-*- Text -*-"
	echo "This file was generated automatically by $0."
	echo "This version was generated on `date`"
	echo "by `whoami`@@`hostname` for `pwd`"

	cat<<DIR_FILE_END_OF_FILE
This is the file .../info/$DIR_FILE, 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_FILE)Top.


File: $DIR_FILE       Node: Top       This is the top of the INFO tree

  This (the Directory node) gives a menu of major topics.
  Typing "q" exits, "?" lists all Info commands, "d" returns here,
  "h" gives a primer for first-timers,
  "mEmacs<Return>" visits the Emacs topic, etc.

  In Emacs, you can click mouse button 2 on a menu item or cross reference
  to select it.

* Menu: The list of major topics begins on the next line.

DIR_FILE_END_OF_FILE

### go through the list of files in the skeleton.  If an info file
### exists, grab the ENTRY information from it.  If an entry exists
### use it, otherwise create a minimal $DIR_FILE entry.

	# Read one line from the file.  This is so that we can echo lines with
	# whitespace and quoted characters in them.
	while read fileline; do
		# flag fancy features
		if test ! -z "$echoline"; then        # echo line
			echo "$fileline"
			echoline=""
			continue
		elif test "${fileline}" = "--"; then
			# echo the next line
			echoline="1"
			continue
		elif test "${fileline}" = "%%"; then
			# skip remaining files listed in skeleton file
			skip="1"
			continue
		elif test "${fileline}" = "!!"; then
			# quit now
			break
		fi

		# handle files if they exist
		for file in $fileline""; do
			fname=
			if test -z "$file"; then
				break
			fi
			# Find the file to operate upon.
			if test -r "$file"; then
				fname="$file"
			elif test -r "${file}.info"; then
				fname="${file}.info"
			elif test -r "${file}.gz"; then
				fname="${file}.gz"
			elif test -r "${file}.info.gz"; then
				fname="${file}.info.gz"
			else
				echo "$0:$LINENO: can't find info file for ${file}?">&2
				continue
			fi

			# if we found something and aren't skipping, do the entry
			if test "$skip"; then
				continue
			fi

			infoname=`echo $file|sed -e 's/.info$//'`
			entry=`zcat -f $fname|\
			sed -e '1,/START-INFO-DIR-ENTRY/d'\
			-e '/END-INFO-DIR-ENTRY/,$d'`
			if [ ! -z "${entry}" ]; then
				echo "${entry}"
			else
				echo "* ${infoname}: (${infoname})."
			fi
			Total=`expr "$Total" + "1"`
		done
	done
}>$DIR_FILE<$SKELETON
fi

trap ' eval "$DEBUG"; rm -f $TMP_FILE_LIST; exit ' 0
trap ' rm -f $TMP_FILE_LIST
	exit ' 1
trap ' rm -f $TMP_FILE_LIST
	echo "$0:$LINENO: received INT signal.">&2
	exit ' 2
trap ' rm -f $TMP_FILE_LIST
	echo "$0:$LINENO: received QUIT signal.">&2
	exit ' 3

sed -e "1,/$MENU_BEGIN/d" -e "$MENU_FILTER1" -e "$MENU_FILTER2"<$DIR_FILE\
|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 "/^$DIR_FILE\$/d" -e "/^$DIR_FILE.old\$/d"\
	-e 's/[*@@]$//' -e 's/\.gz$//' -e 's/\.info$//'|sort>$TMP_FILE2

if test -z "$MODE"; then
	#Detect Missing
	DONE_MSG="total menu item(s) were inserted into `pwd`/$DIR_FILE"
	for Info_Name in `comm -13 $TMP_FILE1 $TMP_FILE2`; 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
			continue
		fi
		Changed="y"
		if install-info $Info_File $DIR_FILE; then
			Total=`expr "$Total" + "1"`
		fi
	done
else
	# Detect Invalid
	DONE_MSG="total invalid menu item(s) were removed from `pwd`/$DIR_FILE"
	for Info_Name in `comm -23 $TMP_FILE1 $TMP_FILE2`; do
		Changed="y"
		if install-info --remove $Info_Name $DIR_FILE; then
			Total=`expr "$Total" + "1"`
		fi
	done
fi

# print summary
if test "$Changed"; then
	echo "$Total $DONE_MSG"
else
	echo "Nothing to do"
fi
rm -f $TMP_FILE_LIST
eval "$DEBUG"
exit 0
@


1.1.1.1
log
@import texinfo-4.8a
@
text
@@
