| #!/bin/sh |
| # |
| # generate an Info directory, given a directory of Info files and a |
| # list of entries. The output will be suitable for a dir.info file, |
| # in the order given in the skeleton file |
| |
| INFODIR=$1 |
| if [ $# = 2 ] ; then |
| SKELETON=$2 |
| else |
| SKELETON=/dev/null |
| fi |
| |
| skip= |
| |
| if [ $# -gt 2 ] ; then |
| echo usage: $0 info-directory [ skeleton-file ] 1>&2 |
| exit 1 |
| else |
| true |
| fi |
| |
| if [ ! -d ${INFODIR} ] ; then |
| echo "$0: first argument must specify a directory" |
| exit 1 |
| fi |
| |
| infofiles=`(cd ${INFODIR}; ls *.info | sort | sed "s/dir\.info//")` |
| template=`cat ${SKELETON}` |
| |
| ### output the dir.info header |
| echo "-*- Text -*-" |
| echo "This file was generated automatically by the gen-info-dir script." |
| echo "This version was generated on `date`" |
| echo "by `whoami`@`hostname` for `(cd ${INFODIR}; pwd)`" |
| |
| cat << moobler |
| |
| 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. |
| --- PLEASE ADD DOCUMENTATION TO THIS TREE. (See INFO topic first.) --- |
| |
| * Menu: The list of major topics begins on the next line. |
| |
| moobler |
| |
| |
| ### go through the list of files in the template. If an info file |
| ### exists, grab the ENTRY information from it. If there is no entry |
| ### info, then create a minimal dir entry, otherwise use the given info. |
| ### |
| ### Then remove that file from the list of existing files. If any |
| ### additional files remain (ones that don't have a template entry), |
| ### then generate entries for those in the same way, putting the info for |
| ### those at the very end.... |
| |
| for file in ${template} ; do |
| if [ "${file}" = "--" ] ; then |
| skip=1 |
| else |
| if [ -f ${INFODIR}/${file}.info ] ; then |
| entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/${file}.info` |
| if [ ! -z "${skip}" ] ; then |
| echo |
| skip= |
| fi |
| |
| if [ ! -z "${entry}" ] ; then |
| echo "${entry}" |
| else |
| echo "* ${file}: (${file})." |
| fi |
| |
| infofiles=`echo ${infofiles} | sed -e "s/${file}\.info//"` |
| fi |
| fi |
| done |
| |
| if [ -z "${infofiles}" ] ; then |
| exit 0 |
| else |
| echo |
| fi |
| |
| for file in ${infofiles}; do |
| entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/${file}` |
| |
| if [ ! -z "${entry}" ] ; then |
| echo "${entry}" |
| else |
| echo "* ${file}: (${file})." |
| fi |
| done |
| |