| #!/bin/sh | 
 |  | 
 | OUTDIR=$1 | 
 | shift | 
 |  | 
 | # Create libc.texinfo from the chapter files. | 
 |  | 
 | trap "rm -f ${OUTDIR}*.$$; exit 1" 1 2 15 | 
 |  | 
 | exec 3>${OUTDIR}incl.$$ 4>${OUTDIR}smenu.$$ 5>${OUTDIR}lmenu.$$ | 
 |  | 
 | build_menu () { | 
 |   while IFS=: read file node; do | 
 |     echo "@include $file" >&3 | 
 |     echo "* $node:: `sed -n 's/^@c %MENU% //p' $file`" >&4 | 
 |     $AWK 'BEGIN { do_menu = 0 } | 
 | 	  /^@node / { sub(/^@node /, ""); sub(/,.*$/, ""); node = $0 } | 
 | 	  /^@menu/ { printf "\n%s\n\n", node; do_menu = 1; next } | 
 | 	  /^@end menu/ { do_menu = 0 } | 
 | 	  do_menu { print }' $file >&5 | 
 |   done | 
 | } | 
 |  | 
 | collect_nodes () { | 
 |   egrep '^(@c )?@node.*Top' "$@" /dev/null | cut -d, -f-2 | | 
 |   sed 's/@c //; s/, /:/; s/:@node /:/; s/ /_/g; s/:/ /g' | | 
 |   $AWK '{ file[$2] = $1; nnode[$2] = $3 } | 
 | 	END  { for (x in file) | 
 | 		 if (file[x] != "") | 
 | 		   print file[x] ":" x, file[nnode[x]] ":" nnode[x] }' | | 
 |   $AWK -f tsort.awk | sed 's/_/ /g' | 
 | } | 
 |  | 
 | # Emit "@set ADD-ON" for each add-on contributing a manual chapter. | 
 | for addon in $2; do | 
 |   addon=`basename $addon .texi` | 
 |   echo >&3 "@set $addon" | 
 | done | 
 |  | 
 | collect_nodes $1 | build_menu | 
 |  | 
 | if [ -n "$2" ]; then | 
 |  | 
 |   { echo; echo 'Add-ons'; echo; } >&4 | 
 |  | 
 |   egrep '^(@c )?@node.*Top' `echo $2 /dev/null | tr ' ' '\n' | sort` | | 
 |   cut -d, -f1 | sed 's/@c //;s/@node //' | build_menu | 
 |  | 
 | fi | 
 |  | 
 | { echo; echo 'Appendices'; echo; } >&4 | 
 |  | 
 | collect_nodes $3 | build_menu | 
 |  | 
 | exec 3>&- 4>&- 5>&- | 
 |  | 
 | mv -f ${OUTDIR}incl.$$ ${OUTDIR}chapters.texi | 
 |  | 
 | { | 
 |  echo '@menu' | 
 |  $AWK -F: ' | 
 |   /^\*/ { | 
 |     printf("%-32s", $1 "::"); | 
 |     x = split($3, word, " "); | 
 |     hpos = 34; | 
 |     for (i = 1; i <= x; i++) { | 
 |       hpos += length(word[i]) + 1; | 
 |       if (hpos > 78) { | 
 | 	printf("\n%34s", ""); | 
 | 	hpos = 35 + length(word[i]); | 
 |       } | 
 |       printf(" %s", word[i]); | 
 |     } | 
 |     print "."; | 
 |   } | 
 |  | 
 |   !/^\*/ { print; } | 
 |  ' ${OUTDIR}smenu.$$ | 
 |  cat <<EOF | 
 | * Free Manuals::		 Free Software Needs Free Documentation. | 
 | * Copying::                      The GNU Lesser General Public License says | 
 |                                   how you can copy and share the GNU C Library. | 
 | * Documentation License::        This manual is under the GNU Free | 
 |                                   Documentation License. | 
 |  | 
 | Indices | 
 |  | 
 | * Concept Index::                Index of concepts and names. | 
 | * Type Index::                   Index of types and type qualifiers. | 
 | * Function Index::               Index of functions and function-like macros. | 
 | * Variable Index::               Index of variables and variable-like macros. | 
 | * File Index::                   Index of programs and files. | 
 |  | 
 |  @detailmenu | 
 |  --- The Detailed Node Listing --- | 
 | EOF | 
 |  cat ${OUTDIR}lmenu.$$ | 
 |  echo '@end detailmenu' | 
 |  echo '@end menu'; } >${OUTDIR}top-menu.texi.$$ | 
 | mv -f ${OUTDIR}top-menu.texi.$$ ${OUTDIR}top-menu.texi | 
 |  | 
 | rm -f ${OUTDIR}*.$$ |