#!/bin/sh
# $Id: gen-dir-node,v 1.1.1.2 1998/03/22 20:43:12 law Exp $
# Generate the top-level Info node, given a directory of Info files
# and (optionally) a skeleton file.  The output will be suitable for a
# top-level dir file.  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 "--").  Once the script reaches the end of the
# skeleton file, it goes through the remaining files in the directory
# in order, putting their entries at the end.  The script will use the
# ENTRY information in each info file if it exists.  Otherwise it will
# make a minimal entry.

# sent by Jeffrey Osier <jeffrey@cygnus.com>, who thinks it came from
# zoo@winternet.com (david d `zoo' zuhn)

# modified 7 April 1995 by Joe Harrington <jh@tecate.gsfc.nasa.gov> to
# take special flags

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

### 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 `(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.
  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.

moobler

### 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 entry.
###
### Then remove that file from the list of existing files.  If any
### additional files remain (ones that don't have a skeleton entry), 
### then generate entries for those in the same way, putting the info for 
### those at the end....

infofiles=`(cd ${INFODIR}; ls | egrep -v '\-|^dir$|^dir\.info$|^dir\.orig$')`

# echoing gets clobbered by backquotes; we do it the hard way...
lines=`wc $SKELETON | awk '{print $1}'`
line=1
while [ $lines -ge $line ] ; do
  # Read one line from the file.  This is so that we can echo lines with
  # whitespace and quoted characters in them.
  fileline=`awk NR==$line $SKELETON`

  # flag fancy features
  if [ ! -z "$echoline" ] ; then	# echo line
    echo "$fileline"
    fileline=
    echoline=
  elif [ "${fileline}" = "--" ] ; then	# should we echo the next line?
    echoline=1
  elif [ "${fileline}" = "%%" ] ; then	# eliminate remaining files from dir?
    skip=1
  elif [ "${fileline}" = "!!" ] ; then	# quit now
    exit 0
  fi

  # handle files if they exist
  for file in $fileline"" ; do	# expand wildcards ("" handles blank lines)

    fname=

    if [ -z "$echoline" -a ! -z "$file" ] ; then

      # Find the file to operate upon.  Check both possible names.
      infoname=`echo $file | sed 's/\.info$//'`
      noext=
      ext=
      if [ -f ${INFODIR}/$infoname ] ; then
        noext=$infoname
      fi
      if [ -f ${INFODIR}/${infoname}.info ] ; then
        ext=${infoname}.info
      fi

      # If it exists with both names take what was said in the file.
      if [ ! -z "$ext" -a ! -z "$noext" ]; then
        fname=$file
        warn="### Warning: $ext and $noext both exist!  Using ${file}. ###"
      elif [ ! \( -z "$ext" -a -z "$noext" \) ]; then
        # just take the name if it exists only once
        fname=${noext}${ext}
      fi

      # if we found something and aren't skipping, do the entry
      if [ ! -z "$fname" ] ; then
        if [ -z "$skip" ] ; then

          if [ ! -z "$warn" ] ; then	# issue any warning
	    echo $warn
	    warn=
          fi

          entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' \
		     -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/$fname`
          if [ ! -z "${entry}" ] ; then
            echo "${entry}"
          else
            echo "* ${infoname}: (${fname})."
          fi
        fi

        # remove the name from the directory listing
        infofiles=`echo ${infofiles} | sed -e "s/ ${fname} / /" \
					 -e "s/^${fname} //" \
					 -e "s/ ${fname}$//"`

      fi

    fi

  done

  line=`expr $line + 1`
done

if [ -z "${infofiles}" ] ; then
  exit 0
else
  echo
fi

for file in ${infofiles}; do
  case $file in
    *.gz) zcat=zcat; file=`echo $file|sed 's/\.gz$//'`; gz=.gz;;
    *) zcat=cat; gz=;;
  esac
  infoname=`echo $file | sed 's/\.info$//'`
  entry=`$zcat ${INFODIR}/${file}$gz \
           |sed -e '1,/START-INFO-DIR-ENTRY/d' \
		-e '/END-INFO-DIR-ENTRY/,$d'`

  if [ ! -z "${entry}" ] ; then
    echo "${entry}"
  else
    echo "* ${infoname}: (${file})."
  fi
done
