1 1.1 tron #!/bin/sh 2 1.1 tron 3 1.1 tron # srctoman - extract manual page from source file comment 4 1.1 tron 5 1.1 tron # @(#) srctoman.sh 1.2 11/4/89 15:56:22 6 1.1 tron 7 1.1 tron LANG= 8 1.1 tron 9 1.1 tron # process arguments 10 1.1 tron 11 1.1 tron while : 12 1.1 tron do 13 1.1 tron case $1 in 14 1.1 tron [0-9]) SECT=$1;; 15 1.1 tron -) LANG=$1; B='[#:]';; 16 1.1 tron -awk) LANG=$1; B='#';; 17 1.1 tron -c) LANG=$1; B='\/\*';; 18 1.1 tron -f) LANG=$1; B='[Cc]';; 19 1.1 tron -mk) LANG=$1; B='#';; 20 1.1 tron -n|-t) LANG=$1; B='\\"';; 21 1.1 tron -p) LANG=$1; B='{';; 22 1.1 tron -r) LANG=$1; B='#';; 23 1.1 tron -C) LANG=$1; B=$2; shift;; 24 1.1 tron -*) ERROR="unknown option: $1"; break;; 25 1.1 tron "") ERROR="missing file argument"; break;; 26 1.1 tron *) break;; 27 1.1 tron esac 28 1.1 tron shift 29 1.1 tron done 30 1.1 tron 31 1.1 tron # check error status 32 1.1 tron 33 1.1 tron case $ERROR in 34 1.1 tron "") ;; 35 1.1 tron *) echo "$0: $ERROR" 1>&2 36 1.1 tron echo "usage: $0 [-|-awk|-c|-f|-mk|-n|-p|-t|-r|-C] [section] file(s)" 1>&2; exit 1;; 37 1.1 tron esac 38 1.1 tron 39 1.1 tron # set up for file suffix processing 40 1.1 tron 41 1.1 tron case $LANG in 42 1.1 tron "") sh='[:#]'; r='#'; rh=$r; awk='#'; mk='#'; 43 1.1 tron c='\/\*'; h=$c; y=$c; l=$c; 44 1.1 tron f='[Cc]'; fh=$f; p='{'; ph=$p; 45 1.1 tron ms='\\"'; nr=$ms; mn=$ms; man=$ms; 46 1.1 tron esac 47 1.1 tron 48 1.1 tron # extract comments 49 1.1 tron 50 1.1 tron for i in $* 51 1.1 tron do 52 1.1 tron case $LANG in 53 1.1 tron "") eval B\="\$`expr $i : '.*\.\([^.]*\)$'`" 54 1.1 tron test "$B" || { echo "$0: unknown suffix: $i; assuming c" 1>&2; B=$c; } 55 1.1 tron esac 56 1.1 tron sed ' 57 1.1 tron /^'"$B"'++/,/^'"$B"'--/!d 58 1.1 tron /^'"$B"'++/d 59 1.1 tron /^'"$B"'--/d 60 1.1 tron s/[ ]*$// 61 1.1 tron /^'"$B"' \([A-Z]\)/{ 62 1.1 tron s//\1/ 63 1.1 tron /^NAME[ ]*$/{ 64 1.1 tron N 65 1.1 tron s/^.*\n'"$B"'[ ]*// 66 1.1.1.4 christos s/[ ]*$// 67 1.1 tron h 68 1.1.1.4 christos s/,.*\( [0-9][^ ]*\)$/\1/ 69 1.1 tron y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ 70 1.1 tron s/^.*$/.TH & '"$SECT"'\ 71 1.1 tron .ad\ 72 1.1 tron .fi\ 73 1.1 tron .SH NAME/ 74 1.1 tron p 75 1.1 tron g 76 1.1 tron s/[ ][ ]*[0-9][ ]*$// 77 1.1 tron a\ 78 1.1 tron \\- 79 1.1 tron p 80 1.1 tron d 81 1.1 tron } 82 1.1 tron /^SUMMARY/d 83 1.1 tron /^DESCRIPTION/s//.SH &\ 84 1.1 tron .ad\ 85 1.1 tron .fi/ 86 1.1 tron /^BUGS/s//.SH &\ 87 1.1 tron .ad\ 88 1.1 tron .fi/ 89 1.1 tron /^DIAGNOSTICS/s//.SH &\ 90 1.1 tron .ad\ 91 1.1 tron .fi/ 92 1.1.1.2 christos /^HISTORY/s//.SH &\ 93 1.1.1.2 christos .ad\ 94 1.1.1.2 christos .fi/ 95 1.1.1.5 christos /^[A-Z][A-Za-z][A-Za-z].*$/s//.SH "&"\ 96 1.1 tron .na\ 97 1.1 tron .nf/ 98 1.1 tron p 99 1.1 tron d 100 1.1 tron } 101 1.1 tron s/^'"$B"' *// 102 1.1 tron s/^ // 103 1.1 tron s/^[ ]*$// 104 1.1 tron /^\\"/d 105 1.1.1.2 christos /^\./{ 106 1.1.1.2 christos s/\([^ ]\)-/\1\\-/g 107 1.1.1.2 christos } 108 1.1.1.3 christos /^'"'"'/{ 109 1.1.1.3 christos s/^/\\\&/ 110 1.1.1.3 christos } 111 1.1.1.2 christos /^[^.]/{ 112 1.1.1.2 christos s/-/\\-/g 113 1.1.1.2 christos } 114 1.1 tron ' $i 115 1.1 tron done | expand 116 1.1 tron 117 1.1 tron exit 118 1.1 tron 119 1.1 tron #++ 120 1.1 tron # NAME 121 1.1 tron # srctoman 1 122 1.1 tron # SUMMARY 123 1.1 tron # extract manual page from source file comment 124 1.1 tron # PACKAGE 125 1.1 tron # sdetools 126 1.1 tron # SYNOPSIS 127 1.1 tron # srctoman [-|-awk|-c|-f|-mk|-m|-n|-p|-t|-r|-C] [section] file(s) 128 1.1 tron # DESCRIPTION 129 1.1 tron # \fIsrctoman\fR converts comments in various programming languages to 130 1.1 tron # UNIX-style manual pages. 131 1.1 tron # The command processes comments in the style of newsrc(1); 132 1.1 tron # its standard output is suitable for formatting with nroff(1) or 133 1.1 tron # troff(1) using the "-man" macro package. 134 1.1 tron # Typically, srctoman is invoked from make(1) scripts. 135 1.1 tron # 136 1.1 tron # Source files are processed in the indicated order; if no 137 1.1 tron # files are specified the command produces no output. 138 1.1 tron # 139 1.1 tron # The source file language can be specified through a command-line 140 1.1 tron # option, or can be implied by the filename suffix. 141 1.1 tron # The expected start-of-comment symbol is shown in the last column. 142 1.1 tron # 143 1.1 tron # .nf 144 1.1 tron # .ft C 145 1.1 tron option language comment 146 1.1 tron 147 1.1 tron - shell [:#] 148 1.1 tron -awk awk # 149 1.1 tron -c c /* 150 1.1 tron -f fortran [Cc] 151 1.1 tron -mk make # 152 1.1 tron -n nroff \\" 153 1.1 tron -p pascal { 154 1.1 tron -t troff \\" 155 1.1 tron -r ratfor # 156 1.1 tron -C any language next argument 157 1.1 tron # 158 1.1 tron suffix language comment 159 1.1 tron 160 1.1 tron .awk awk # 161 1.1 tron .c c /* 162 1.1 tron .f fortran [Cc] 163 1.1 tron .fh fortran [Cc] 164 1.1 tron .h c /* 165 1.1 tron .l lex /* 166 1.1 tron .man nroff,troff \\" 167 1.1 tron .mk make # 168 1.1 tron .me nroff,troff \\" 169 1.1 tron .ms nroff,troff \\" 170 1.1 tron .nr nroff,troff \\" 171 1.1 tron .p pascal { 172 1.1 tron .ph pascal { 173 1.1 tron .r ratfor # 174 1.1 tron .rh ratfor # 175 1.1 tron .sh shell [:#] 176 1.1 tron .y yacc /* 177 1.1 tron # .ft 178 1.1 tron # .PP 179 1.1 tron # .fi 180 1.1 tron # 181 1.1 tron # The required format of comments is discussed below, where SOC 182 1.1 tron # stands for the start-of-comment symbol of the language being used. 183 1.1 tron # .IP o 184 1.1 tron # Start of manual: SOC, followed by `++'. 185 1.1 tron # .IP o 186 1.1 tron # Section heading: SOC, blank, section name in upper case. 187 1.1 tron # .IP o 188 1.1 tron # All other text: SOC and subsequent blanks or tabs are removed. 189 1.1 tron # Lines that do not start with SOC are left unchanged (useful for 190 1.1 tron # inclusion of program text). 191 1.1 tron # .IP o 192 1.1 tron # End of manual: SOC, followed by `--'. 193 1.1 tron # An end-of-comment may follow if the source file language requires this. 194 1.1 tron # .PP 195 1.1 tron # The following manual sections receive a special treatment: 196 1.1 tron # NAME and SUMMARY should appear at the beginning and in 197 1.1 tron # this order; DESCRIPTION, DIAGNOSTICS and BUGS will be 198 1.1 tron # right-margin adjusted. 199 1.1 tron # Other sections may be added freely without confusing srctoman. 200 1.1 tron # COMMANDS 201 1.1 tron # sh(1), sed(1), expand(1) 202 1.1 tron # SEE ALSO 203 1.1 tron # newsrc(1) 204 1.1 tron # DIAGNOSTICS 205 1.1 tron # The program complains if an unknown language is specified 206 1.1 tron # of if the language cannot be deduced from the file suffix. 207 1.1 tron # AUTHOR(S) 208 1.1 tron # W.Z. Venema 209 1.1 tron # Eindhoven University of Technology 210 1.1 tron # Department of Mathematics and Computer Science 211 1.1 tron # Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands 212 1.1 tron # CREATION DATE 213 1.1 tron # Fri Jan 17 22:59:27 MET 1986 214 1.1 tron # STATUS 215 1.1 tron # srctoman.sh 1.2 11/4/89 15:56:22 (draft) 216 1.1 tron #-- 217