John Eaton's man 1.1 (jwe@che.utexas.edu) Binaries for Linux prepared by faith@cs.unc.edu, Wed Dec 23 14:45:39 1992 Compiled with gcc 2.2.2d7 (-O6) Linked with jump-4.1 libraries (-s), but tested with jump-4.2 libraries To install from Linux binary distribution: 1) Get binary distribution (man11B.taz) from ftp.cs.unc.edu:/pub/faith/linux/utils or from tsx-11.mit.edu 2) cd / 3) gtar zpxvf man11B.taz Alternatively, the SLS sysinstall program can be used. To uninstall this binary distribution, do the following: cd /usr/src/man-1.1 ./man11B.Unins To install from source: 1) Get source from: ftp.che.utexas.edu:/pub/unix/man-1.1.tar.Z or: ftp.cs.unc.edu:/pub/faith/linux/utils or: tsx-11 2) Untar man-1.1.tar.Z in /usr/src 3) cd man-1.1 4) patch -p1 < man11B.Notes [no editing is necessary!] 5) ./configure Use defaults for everything (because of the patch): vgrind and grap are missing. Do not install with setuid option, unless you want to. 6) make CC=gcc 'CDEBUG=-O6 -s' 7) make install WHAT YOU NEED: 1) /usr/bin/groff and support: I have recently built and uploaded this as grof106A.taz You can recompile man to use nroff, but you may miss out on the mandoc feature which will allow you to use standard (i.e., GNU) man pages as well as the NET-2 man pages. If you think groff is too big, you can delete most of /usr/lib/groff, leaving the macros and the ascii device driver. You could also delete a bunch of the binaries and recompile man so that it just uses groff in ascii mode. This would be sufficient for most man page needs, but I don't recommend doing this. 2) /usr/bin/gawk: I have recently built and uploaded this as gawk214A.taz 3) bash: make a link from /bin/sh to bash (or change apropos and whatis to use bash). ASH WILL *NOT* WORK. [/bin/sh is needed by apropos and whatis]. 2) /usr/bin/less: I have recently build and uploaded this as less177A.taz 3) /bin/compress and /bin/zcat: I have recently built and uploaded ncmp424A.taz, although the versions on the root disk should work fine. 4) /usr/bin/col: I have recently built and uploaded this as utila11.taz 5) I have uploaded other support utilities in the packages futl34A.taz, shutl18A.taz, and txtutl13A.taz, but you probably have these on your system already. Major changes: 1) I completely re-wrote makewhatis to make it produce a "standard" whatis file. Patches have been applied, based on those sent to me by Mitchum DSouza (mitchum.dsouza@mrc-apu.cam.ac.uk), which allow the makewhatis database to be made from cat pages. Please let me know if there are any problems with this. 2) A bug, which did cause man to dump core, was found and fixed by Willem Kasdorp (wkasdo@nikhefk.nikhef.nl). This fix has been applied Minor changes: 1) I removed the -C option from less (-C forces less to *always* use the whole screen, which looks really bad when you do a 'whatis' and have one line of output). 2) I made groff use the -mandoc macros, which will auto-magically select either the standard man macros or the NET-2 doc macros. This feature allows the free mixing of GNU and NET-2 man pages! How man is configured: 1) The man pages in /usr/man/cat* are compressed. If you don't want these pre-formatted pages around, just delete the /usr/man/cat* directories. 2) Yabba and freeze are not supported, but you can recompile man if you want to use one of these instead of compress. 3) I did *not* select the option to have man run set-uid, and I did *not* select the option to support multi-architecture man page trees. 4) Man will not deal with compressed nroff source. Making it deal with compressed nroff files requires patches in about 5 places in the program, and also requires re-writing at least one of the analysis routines, since it expects the nroff source to be readable. If anyone actually wants to take the time to change this, please send me patches. I'd like to point out that a whole set of nroff man pages only takes up about 10MB, and half of that is the section 2 and 3 pages that we don't have for Linux. Also, as soon as the file system converts to 4k blocks, the savings will not be nearly as much as it is now. Patches from the original man-1.1: diff -rc man-1.1.old/apropos.sh man-1.1/apropos.sh *** man-1.1.old/apropos.sh Mon Aug 26 03:35:46 1991 --- man-1.1/apropos.sh Wed Dec 23 13:22:32 1992 *************** *** 40,46 **** while [ $1 ] do found=0 ! for d in $manpath /usr/lib do if [ -f $d/whatis ] then --- 40,46 ---- while [ $1 ] do found=0 ! for d in $manpath do if [ -f $d/whatis ] then diff -rc man-1.1.old/configure man-1.1/configure *** man-1.1.old/configure Mon Aug 26 03:42:18 1991 --- man-1.1/configure Wed Dec 23 13:49:20 1992 *************** *** 232,248 **** FILTERS=pager else ! troff="/usr/local/bin/groff -Tps -man" ! nroff="/usr/local/bin/groff -Tascii -man" ! eqn="/usr/local/bin/geqn -Tps" ! neqn="/usr/local/bin/geqn -Tascii" ! tbl="/usr/local/bin/gtbl" col="/usr/bin/col" vgrind="/usr/bin/vgrind" ! refer="/usr/bin/refer" grap="/usr/bin/grap" ! pic="/usr/local/bin/gpic" ! pager="/usr/local/bin/less -sC" FILTERS="troff nroff eqn neqn tbl col vgrind refer grap pic pager" fi --- 232,248 ---- FILTERS=pager else ! troff="/usr/bin/groff -Tps -mandoc" ! nroff="/usr/bin/groff -Tascii -mandoc" ! eqn="/usr/bin/geqn -Tps" ! neqn="/usr/bin/geqn -Tascii" ! tbl="/usr/bin/gtbl" col="/usr/bin/col" vgrind="/usr/bin/vgrind" ! refer="/usr/bin/grefer" grap="/usr/bin/grap" ! pic="/usr/bin/gpic" ! pager="/usr/bin/less -s" FILTERS="troff nroff eqn neqn tbl col vgrind refer grap pic pager" fi *************** *** 300,308 **** # How should man be installed? ! bindir="/usr/local/bin" ! libdir="/usr/local/lib" ! mandir="/usr/local/man/man1" for d in bindir libdir mandir do --- 300,308 ---- # How should man be installed? ! bindir="/usr/bin" ! libdir="/usr/lib" ! mandir="/usr/man/man1" for d in bindir libdir mandir do *************** *** 390,396 **** # What sections do we anticipate? ! tmpsections="1 n l 6 8 2 3 4 5 7 p o" echo "" echo "Enter the man page sections your system uses, separated by" echo "spaces, and in the order they should be searched." --- 390,396 ---- # What sections do we anticipate? ! tmpsections="1 n l 6 8 2 3 4 5 7 p o 9" echo "" echo "Enter the man page sections your system uses, separated by" echo "spaces, and in the order they should be searched." *************** *** 429,435 **** if test "$ans" = "true" then DO_COMPRESSION=true ! compress="/usr/ucb/compress -c" echo "" echo "What program should be used to compress the formatted pages?" echo $n "Note that it must work as a filter! [${compress}] $c" --- 429,435 ---- if test "$ans" = "true" then DO_COMPRESSION=true ! compress="/bin/compress -c" echo "" echo "What program should be used to compress the formatted pages?" echo $n "Note that it must work as a filter! [${compress}] $c" *************** *** 513,521 **** if test "$ans" = "true" then DO_UNCOMPRESSION=true ! zcat="/usr/ucb/zcat" ! fcat="/usr/local/bin/fcat" ! unyabba="/usr/local/bin/unyabba" echo "" echo "If you don't have one of the following programs, enter \`missing'." echo "It's best to enter absolute pathnames so that man won't have to" --- 513,521 ---- if test "$ans" = "true" then DO_UNCOMPRESSION=true ! zcat="/bin/zcat" ! fcat="/usr/bin/fcat" ! unyabba="/usr/bin/unyabba" echo "" echo "If you don't have one of the following programs, enter \`missing'." echo "It's best to enter absolute pathnames so that man won't have to" diff -rc man-1.1.old/makewhatis.sh man-1.1/makewhatis.sh *** man-1.1.old/makewhatis.sh Mon Aug 26 03:35:38 1991 --- man-1.1/makewhatis.sh Wed Dec 23 14:22:44 1992 *************** *** 1,79 **** #!/bin/sh ! # ! # makewhatis -- update the whatis database in the man directories. ! # ! # Copyright (c) 1990, 1991, John W. Eaton. ! # ! # You may distribute under the terms of the GNU General Public ! # License as specified in the README file that comes with the man ! # distribution. ! # ! # John W. Eaton ! # jwe@che.utexas.edu ! # Department of Chemical Engineering ! # The University of Texas at Austin ! # Austin, Texas 78712 ! ! PATH=/bin:/usr/local/bin:/usr/ucb:/usr/bin ! ! if [ $# = 0 ] ! then ! echo "usage: makewhatis directory [...]" ! exit 1 ! fi ! for dir in $* do ! cd $dir ! for subdir in man* ! do ! if [ -d $subdir ] then ! for f in `find . -name '*' -print` ! do ! sed -n '/^\.TH.*$/p ! /^\.SH[ ]*NAME/,/^\.SH/p' $f |\ ! sed -e 's/\\[ ]*\-/-/ ! s/^.PP.*$// ! s/\\(em// ! s/\\fI// ! s/\\fR//' |\ ! awk 'BEGIN {insh = 0} { ! if ($1 == ".TH") ! sect = $3 ! else if ($1 == ".SH" && insh == 1) { ! if (i > 0 && name != NULL) { ! namesect = sprintf("%s (%s)", name, sect) ! printf("%-20.20s", namesect) ! printf(" - ") ! for (j = 0; j < i-1; j++) ! printf("%s ", desc[j]) ! printf("%s\n", desc[i-1]) ! } ! } else if ($1 == ".SH" && insh == 0) { ! insh = 1 ! count = 0 ! i = 0 ! } else if (insh == 1) { ! count++ ! if (count == 1 && NF > 2) { ! start = 2 ! if ($2 == "-") start = 3 ! if (NF > start + 1) ! for (j = start; j <= NF; j++) ! desc[i++] = $j ! name = $1 ! } else { ! for (j = 1; j <= NF; j++) ! desc[i++] = $j ! } ! } ! }' ! done ! cd .. ! fi ! done | sort | colrm 80 > $dir/whatis.db.tmp ! mv $dir/whatis.db.tmp $dir/whatis done ! exit --- 1,131 ---- #!/bin/sh ! # makewhatis: create the whatis database ! # Created: Sun Jun 14 10:49:37 1992 ! # Revised: Wed Dec 23 14:22:44 1992 by root ! # Copyright 1992 Rickard E. Faith (faith@cs.unc.edu) ! # May be freely distributed and modified as long as copyright is retained. ! # Wed Dec 23 13:27:50 1992: Rik Faith (faith@cs.unc.edu) applied changes ! # based on Mitchum DSouza (mitchum.dsouza@mrc-apu.cam.ac.uk) cat patches. ! # Also, cleaned up code and make it work with NET-2 doc pages. ! ! ! PATH=/usr/bin:/bin ! ! for name in $* do ! case $name in ! -u) update="-ctime 0"; ! continue;; ! -c) pages=cat; ! filter="col -bx"; ! continue;; ! -*) echo "Usage: makewhatis -c -u [manpath]"; ! echo " -c: build database from cat pages"; ! echo " -u: update database with new pages"; ! echo " [manpath]: man directory (default: /usr/man)"; ! exit;; ! *) if [-d $name] then ! mandir=$name ! else ! echo "No such directory $name" ! exit ! fi;; ! esac done ! pages=${pages-man} ! export pages ! mandir=${mandir-/usr/man} ! filter=${filter-cat} ! ! cd $mandir ! ! for i in 1 2 3 4 5 6 7 8 9 n l ! do ! if [ -d ${pages}$i ] ! then ! cd ${pages}$i ! section=$i ! export section ! for j in `find . -name '*' ${update} -print` ! do ! if [ `basename $j .Z` != `basename $j` ] ! then ! Cat=zcat ! else ! Cat=cat ! fi ! ${Cat} ${j} | ${filter} |\ ! gawk 'BEGIN {after = 0; insh = 0; ! pages = ENVIRON["pages"]; ! section = ENVIRON["section"]} { ! if (($1 ~ /^\.[Ss][Hh]/ && $2 ~ /[Nn][Aa][Mm][Ee]/) || ! (pages == "cat" && $1 ~ /^NAME/)) { ! if (!insh) ! insh = 1 ! else { ! printf "\n" ! exit ! } ! } else if (insh) { ! if ($1 ~ /^\.[Ss][HhYS]/ || ! (pages == "cat" && $1 ~ /^S[yYeE]/)) { ! printf "\n" ! exit ! } else { # Substitutions after Tom Christiansen perl script ! gsub(/ /, " ") # Translate tabs to spaces ! gsub(/ /, " ") # Collapse spaces ! gsub(/ /, " ") # Collapse spaces ! gsub(/ /, " ") # Collapse spaces ! sub(/^[ ]/, "") # Kill initial spaces ! sub(/-$/,"") # Handle Hyphenations ! sub(/^.[IB] /, "") # Kill bold and italics ! gsub(/\\f[PRIB0123]/, "") # Kill font changes ! gsub(/\\s[-+0-9]*/, "") # Kill size changes ! gsub(/\\&/, "") # Kill \& ! gsub(/\\\((ru|ul)/, "_") # Translate ! gsub(/\\\((mi|hy|em)/, "-") # Translate ! gsub(/\\\*\(../, "") # Kill troff strings ! sub(/^\.\\\"/, "") # Kill comments ! gsub(/\\/, "") # Kill all backslashes ! if ($0 !~ / - / && $0 !~ / -$/ && $0 !~ /^- /) { ! if (after) { ! if ($1 !~ /^\.../ && $1 != "") ! printf " %s", $0 ! else { ! printf "\n" ! after = 0 ! } ! } else { ! if ($1 !~ /^\.../ && $1 != "") ! printf "%s ", $0 ! else ! printf "\n" ! } ! } else { ! after = 1 ! if ($0 ~ / - /) { ! printf "%-20s", sprintf( "%s (%s)", ! substr( $0, 0, match( $0, / - / )-1 ), ! section ) ! printf "%s", substr( $0, match( $0, / - / ) ) ! } else if ($0 ~ / -$/) { ! printf "%-20s", sprintf( "%s (%s) -", ! substr( $0, 0, match( $0, / -$/ )-1 ), ! section ) ! } else { ! printf "(%s) %s", section, $0 ! } ! } ! } ! } ! }' ! done ! cd .. ! fi ! done > /tmp/whatis$$ ! sed '/^$/d' < /tmp/whatis$$ | sort | uniq > ${mandir}/whatis ! chmod 644 ${mandir}/whatis ! rm /tmp/whatis$$ diff -rc man-1.1.old/man.c man-1.1/man.c *** man-1.1.old/man.c Mon Aug 26 12:01:03 1991 --- man-1.1/man.c Wed Dec 23 14:35:36 1992 *************** *** 12,17 **** --- 12,22 ---- * Department of Chemical Engineering * The University of Texas at Austin * Austin, Texas 78712 + * + * + * Wed Dec 23 13:26:03 1992: Rik Faith (faith@cs.unc.edu) applied bug fixes + * supplied by Willem Kasdorp (wkasdo@nikhefk.nikef.nl) + * */ #define MAN_MAIN *************** *** 440,446 **** register char **vs; for (vs = section_list; *vs != NULL; vs++) ! if ((strcmp (*vs, name) == NULL) || (isdigit (name[0]))) return strdup (name); return NULL; --- 445,452 ---- register char **vs; for (vs = section_list; *vs != NULL; vs++) ! if ((strcmp (*vs, name) == NULL) || (isdigit (name[0]) ! && !isdigit(name[1]))) return strdup (name); return NULL; *************** *** 586,591 **** --- 592,613 ---- gf = glob_filename (pathname); } + + /* + * If we're given a section that looks like `3f', we may want to try + * file names like .../man3/foo.3f as well. This seems a bit + * kludgey to me, but what the hey... + */ + if (section[1] != '\0') + { + if (cat) + sprintf (pathname, "%s/cat%c/%s.%s", path, section[0], name, section); + else + sprintf (pathname, "%s/man%c/%s.%s", path, section[0], name, section); + + gf = glob_filename (pathname); + } + return gf; } *************** *** 715,722 **** char *path; { FILE *fp; ! char buf[BUFSIZ]; ! char ult[BUFSIZ]; char *beg; char *end; --- 737,744 ---- char *path; { FILE *fp; ! static char buf[BUFSIZ]; ! static char ult[BUFSIZ]; char *beg; char *end; *************** *** 1111,1117 **** { status = is_newer (man_file, cat_file); if (debug) ! fprintf (stderr, "status from is_newer() = %d\n"); if (status == 1 || status == -2) { --- 1133,1139 ---- { status = is_newer (man_file, cat_file); if (debug) ! fprintf (stderr, "status from is_newer() = %d\n", status); if (status == 1 || status == -2) { diff -rc man-1.1.old/manpath.config man-1.1/manpath.config *** man-1.1.old/manpath.config Sat Aug 24 16:42:59 1991 --- man-1.1/manpath.config Wed Dec 23 13:47:50 1992 *************** *** 10,22 **** # # MANBIN is optional # ! #MANBIN /usr/local/bin/man # # every automatically generated MANPATH includes these fields # MANDATORY_MANPATH /usr/man - MANDATORY_MANPATH /usr/local/man - MANDATORY_MANPATH /usr/local/X11R4/man # # set up PATH to MANPATH mapping # --- 10,20 ---- # # MANBIN is optional # ! MANBIN /usr/bin/man # # every automatically generated MANPATH includes these fields # MANDATORY_MANPATH /usr/man # # set up PATH to MANPATH mapping # *************** *** 23,30 **** MANPATH_MAP /bin /usr/man MANPATH_MAP /usr/bin /usr/man MANPATH_MAP /usr/ucb /usr/man ! MANPATH_MAP /usr/local/mh /usr/local/mh/man ! MANPATH_MAP /usr/local/bin /usr/local/man ! MANPATH_MAP /usr/local/gnu /usr/local/man ! MANPATH_MAP /usr/local/pbm /usr/local/pbm/man ! MANPATH_MAP /usr/local/X11R4 /usr/local/X11R4/man --- 21,25 ---- MANPATH_MAP /bin /usr/man MANPATH_MAP /usr/bin /usr/man MANPATH_MAP /usr/ucb /usr/man ! MANPATH_MAP /usr/local/bin /usr/man ! MANPATH_MAP /usr/bin/X11 /usr/man diff -rc man-1.1.old/whatis.sh man-1.1/whatis.sh *** man-1.1.old/whatis.sh Mon Aug 26 03:34:48 1991 --- man-1.1/whatis.sh Wed Dec 23 13:22:33 1992 *************** *** 41,51 **** while [ $1 ] do found=0 ! for d in $manpath /usr/lib do if [ -f $d/whatis ] then ! grep -iw "^$1" $d/whatis status=$? if [ "$status" = "0" ] then --- 41,52 ---- while [ $1 ] do found=0 ! for d in $manpath do if [ -f $d/whatis ] then ! # grep -iw "^$1" $d/whatis ! egrep -i "((^$1)|($1,)) .*- " $d/whatis status=$? if [ "$status" = "0" ] then