: srctoman - see comment below

: process arguments

LOCAL=
HOST=
while :
do
    case $1 in
    -L) HOST=`hostname`;
	HOST=`expr $HOST : '\([^.]*\)' | tr "[a-z]" "[A-Z]"`
	LOCAL=LOCAL;;
 [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] [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/,.*\([ 	][0-9][ 	]*\)$/ \1/
	    s/^.*$/.TH & '"$SECT $LOCAL $HOST"'\
.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/
	/^[A-Z][A-Z][A-Z][^a-z]*$/s//.SH &\
.na\
.nf/
	p
	d
    }
    s/^'"$B"'[ 	]*//
    s/^[ 	]*$//
' $i
done | ./detab

exit

:++
: NAME
:	srctoman 1
: SUMMARY
:	extract manual page from source file comment
: PACKAGE
:	source file maintentance tools
: SYNOPSIS
:	srctoman [-|-awk|-c|-f|-mk|-m|-n|-p|-t|-r] [section] file(s)
: DESCRIPTION
:	Sourcetoman converts comments in various programming languages to
:	UNIX-style manual pages.
:	The command processes comments in the style of newsource(1);
:	its standard output is suitable for formatting with nroff(1) or 
:	troff(1) using the "-man" macro package.  
:	Typically, srctoman is integrated with make(1) scripts.
:	If the option -L is given the text <hostname> (LOCAL) will be in
:	the heading.
:
:	Source files are processed in the indicated order; if no
:	files argument 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
	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
: .fi
:
: .nf
	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		/*
: .fi
:
:	The required format of comments is discussed below, where SOC
:	stands for the start-of-comment symbol of the language being used.
:
:	1) Start of manual: SOC, followed by `++'.
:
:	2) Section heading: SOC, blank, section name in upper case.
:
:	3) New paragraph: empty line or line with SOC only.
:
:	4) 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).
:
:	5) End of manual: SOC, followed by `--'.
:	An end-of-comment may follow if the source file language requires this.
:
:	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), detab(1)
: SEE ALSO
:	newsource(1), modsource(1), xman(1)
:	The earlier commands new(1), mod(1), mkman(1) and dssman(1)
:	by Ruud Zwart and Ben Noordzij (Erasmus University, Rotterdam) 
: DIAGNOSTICS
:	The program complaints 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
: LAST MODIFICATION
:	Tue Mar 22 07:24:47 PST 1988
: VERSION/RELEASE
:	1.20
:--


