21eb6c6e63
now, DO_COMPRESS. This controls whether or not catpages are compressed or not (on by default, since little else uses the catpages and those few things that do can always configure in a `zmore' in place of more or something, and saving space is more important, IMHO). Uncompression support is now on by default since that's the only way to support mixed-mode environments. If you don't like it, just don't compress your man pages and it won't be used! :-). Supports gzip. You can also compress the man pages themselves (or gzip them) now and it will work.
121 lines
3.5 KiB
Bash
121 lines
3.5 KiB
Bash
#!/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 $subdir -type f -print`
|
|
do
|
|
suffix=`echo $f | sed -e 's/.*\\.//'`
|
|
if [ ".$suffix" = "%compext%" ]; then
|
|
output=%zcat%
|
|
else
|
|
output=cat
|
|
fi
|
|
$output $f | \
|
|
sed -n '/^\.TH.*$/p
|
|
/^\.Dt.*$/p
|
|
/^\.S[hH][ ]*NAME/,/^\.S[hH]/p'|\
|
|
sed -e 's/\\[ ]*\-/-/
|
|
s/^.P[Pp].*$//
|
|
s/\\(em//
|
|
s/\\fI//
|
|
s/\\fR//' |\
|
|
awk 'BEGIN {insh = 0; inSh = 0; Nd = 0} {
|
|
if ($1 == ".TH" || $1 == ".Dt")
|
|
sect = $3
|
|
else if (($1 == ".br" && insh == 1)\
|
|
|| ($1 == ".SH" && insh == 1)\
|
|
|| ($1 == ".Sh" && inSh == 1)) {
|
|
if (i > 0 && nc > 0) {
|
|
for (k= 1; k <= nc; k++) {
|
|
namesect = sprintf("%s (%s)", name[k], sect)
|
|
printf("%s", namesect)
|
|
printf(" - ")
|
|
for (j = 0; j < i-1; j++)
|
|
printf("%s ", desc[j])
|
|
printf("%s\n", desc[i-1])
|
|
}
|
|
}
|
|
count = 0
|
|
i = 0
|
|
nc = 0
|
|
} else if ($1 == ".SH" && insh == 0) {
|
|
insh = 1
|
|
count = 0
|
|
i = 0
|
|
nc = 0
|
|
} else if ($1 == ".Sh" && inSh == 0) {
|
|
inSh = 1
|
|
i = 0
|
|
nc = 0
|
|
} else if (insh == 1) {
|
|
count++
|
|
if (count == 1 && NF > 2) {
|
|
start = 2
|
|
for (k = 1; k <= NF; k++)
|
|
if ($k == "-") {
|
|
start = k + 1
|
|
break
|
|
} else {
|
|
sub(",","",$k)
|
|
if ($k != "")
|
|
name[++nc] = $k
|
|
}
|
|
if (NF >= start)
|
|
for (j = start; j <= NF; j++)
|
|
desc[i++] = $j
|
|
} else {
|
|
for (j = 1; j <= NF; j++)
|
|
desc[i++] = $j
|
|
}
|
|
} else if ($1 == ".Nm" && inSh == 1 && Nd == 0) {
|
|
for (k = 2; k <= NF; k++) {
|
|
sub(",","",$k)
|
|
if ($k != "")
|
|
name[++nc] = $k
|
|
}
|
|
} else if ($1 == ".Nd" && inSh == 1) {
|
|
Nd = 1
|
|
for (j = 2; j <= NF; j++)
|
|
desc[i++] = $j
|
|
} else if (Nd == 1) {
|
|
start = 1
|
|
if ($1 ~ /\..*/)
|
|
start = 2
|
|
for (j = start; j <= NF; j++)
|
|
desc[i++] = $j
|
|
}
|
|
}'
|
|
done
|
|
fi
|
|
done | sort | colrm 80 | uniq > $dir/whatis.db.tmp
|
|
mv $dir/whatis.db.tmp $dir/whatis
|
|
done
|
|
|
|
exit
|