#!/bin/sh
# srctoman - extract manual page from source file comment
# @(#) srctoman.sh 1.2 11/4/89 15:56:22
LANG=
# process arguments
while :
do
case $1 in
[0-9]) SECT=$1;;
-) LANG=$1; B='[#:]';;
-awk) LANG=$1; B='#';;
-c) LANG=$1; B='\/\*';;
-f) LANG=$1; B='[Cc]';;
-mk) LANG=$1; B='#';;
-n|-t) LANG=$1; B='\\"';;
-p) LANG=$1; B='{';;
-r) LANG=$1; B='#';;
-C) LANG=$1; B=$2; shift;;
-*) ERROR="unknown option: $1"; break;;
"") ERROR="missing file argument"; break;;
*) break;;
esac
shift
done
# check error status
case $ERROR in
"") ;;
*) echo "$0: $ERROR" 1>&2
echo "usage: $0 [-|-awk|-c|-f|-mk|-n|-p|-t|-r|-C] [section] file(s)" 1>&2; exit 1;;
esac
# set up for file suffix processing
case $LANG in
"") sh='[:#]'; r='#'; rh=$r; awk='#'; mk='#';
c='\/\*'; h=$c; y=$c; l=$c;
f='[Cc]'; fh=$f; p='{'; ph=$p;
ms='\\"'; nr=$ms; mn=$ms; man=$ms;
esac
# extract comments
for i in $*
do
case $LANG in
"") eval B\="\$`expr $i : '.*\.\([^.]*\)$'`"
test "$B" || { echo "$0: unknown suffix: $i; assuming c" 1>&2; B=$c; }
esac
sed '
/^'"$B"'++/,/^'"$B"'--/!d
/^'"$B"'++/d
/^'"$B"'--/d
s/[ ]*$//
/^'"$B"' \([A-Z]\)/{
s//\1/
/^NAME[ ]*$/{
N
s/^.*\n'"$B"'[ ]*//
h
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
s/^.*$/.TH & '"$SECT"'\
.ad\
.fi\
.SH NAME/
p
g
s/[ ][ ]*[0-9][ ]*$//
a\
\\-
p
d
}
/^SUMMARY/d
/^DESCRIPTION/s//.SH &\
.ad\
.fi/
/^BUGS/s//.SH &\
.ad\
.fi/
/^DIAGNOSTICS/s//.SH &\
.ad\
.fi/
/^HISTORY/s//.SH &\
.ad\
.fi/
/^[A-Z][A-Z][A-Z][^a-z]*$/s//.SH "&"\
.na\
.nf/
p
d
}
s/^'"$B"' *//
s/^ //
s/^[ ]*$//
/^\\"/d
/^\./{
s/\([^ ]\)-/\1\\-/g
}
/^'"'"'/{
s/^/\\\&/
}
/^[^.]/{
s/-/\\-/g
}
' $i
done | expand
exit
#++
# NAME
# srctoman 1
# SUMMARY
# extract manual page from source file comment
# PACKAGE
# sdetools
# SYNOPSIS
# srctoman [-|-awk|-c|-f|-mk|-m|-n|-p|-t|-r|-C] [section] file(s)
# DESCRIPTION
# \fIsrctoman\fR converts comments in various programming languages to
# UNIX-style manual pages.
# The command processes comments in the style of newsrc(1);
# its standard output is suitable for formatting with nroff(1) or
# troff(1) using the "-man" macro package.
# Typically, srctoman is invoked from make(1) scripts.
#
# Source files are processed in the indicated order; if no
# files are specified the command produces no output.
#
# The source file language can be specified through a command-line
# option, or can be implied by the filename suffix.
# The expected start-of-comment symbol is shown in the last column.
#
# .nf
# .ft C
option language comment
- shell [:#]
-awk awk #
-c c /*
-f fortran [Cc]
-mk make #
-n nroff \\"
-p pascal {
-t troff \\"
-r ratfor #
-C any language next argument
#
suffix language comment
.awk awk #
.c c /*
.f fortran [Cc]
.fh fortran [Cc]
.h c /*
.l lex /*
.man nroff,troff \\"
.mk make #
.me nroff,troff \\"
.ms nroff,troff \\"
.nr nroff,troff \\"
.p pascal {
.ph pascal {
.r ratfor #
.rh ratfor #
.sh shell [:#]
.y yacc /*
# .ft
# .PP
# .fi
#
# The required format of comments is discussed below, where SOC
# stands for the start-of-comment symbol of the language being used.
# .IP o
# Start of manual: SOC, followed by `++'.
# .IP o
# Section heading: SOC, blank, section name in upper case.
# .IP o
# All other text: SOC and subsequent blanks or tabs are removed.
# Lines that do not start with SOC are left unchanged (useful for
# inclusion of program text).
# .IP o
# End of manual: SOC, followed by `--'.
# An end-of-comment may follow if the source file language requires this.
# .PP
# The following manual sections receive a special treatment:
# NAME and SUMMARY should appear at the beginning and in
# this order; DESCRIPTION, DIAGNOSTICS and BUGS will be
# right-margin adjusted.
# Other sections may be added freely without confusing srctoman.
# COMMANDS
# sh(1), sed(1), expand(1)
# SEE ALSO
# newsrc(1)
# DIAGNOSTICS
# The program complains if an unknown language is specified
# of if the language cannot be deduced from the file suffix.
# AUTHOR(S)
# W.Z. Venema
# Eindhoven University of Technology
# Department of Mathematics and Computer Science
# Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
# CREATION DATE
# Fri Jan 17 22:59:27 MET 1986
# STATUS
# srctoman.sh 1.2 11/4/89 15:56:22 (draft)
#--