NetBSD/share/man/man8/MAKEDEV2manpage.awk

232 lines
6.6 KiB
Awk

# $NetBSD: MAKEDEV2manpage.awk,v 1.13 2010/03/23 19:19:03 jakllsch Exp $
#
# Copyright (c) 2002
# Dieter Baron <dillo@NetBSD.org>. All rights reserved.
# Copyright (c) 1999
# Hubert Feyrer <hubertf@NetBSD.org>. All rights reserved.
# [converted from Hubert's Perl version]
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
# must display the following acknowledgement:
# This product includes software developed by Hubert Feyrer for
# the NetBSD Project.
# 4. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#
###########################################################################
#
# Convert src/etc/MAKEDEV.tmpl and
# src/share/man/man8/MAKEDEV.8.template to
# src/share/man/man8/MAKEDEV.8, replacing
# - @@@SPECIAL@@@ with all targets in the first section (all, std, ...)
# - @@@DEVICES@@@ with the remaining targets
# - @@@ARCH@@@ with the architecture name
#
# XXX: uses non-standard AWK function toupper()
BEGIN {
MAKEDEV = "../../../etc/MAKEDEV.tmpl";
print ".\\\" *** ------------------------------------------------------------------";
print ".\\\" *** This file was generated automatically";
print ".\\\" *** from src/etc/MAKEDEV.tmpl and";
print ".\\\" *** src/share/man/man8/MAKEDEV.8.template";
print ".\\\" ***";
print ".\\\" *** DO NOT EDIT - any changes will be lost!!!";
print ".\\\" *** ------------------------------------------------------------------";
print ".\\\"";
}
function read1line() {
if (r1kept)
r1l = r1last;
else
getline r1l < MAKEDEV;
while (r1l ~ /^#[ \t]*$/)
getline r1l < MAKEDEV;
if (r1l ~ /^#[ \t]/) {
if (r1l ~ /^# /) {
# Not a device/other target
r1kept = 0;
}
else {
# Continuation line (?)
getline r1ll < MAKEDEV;
while (r1ll ~ /^#\t[ \t]/) {
sub(/^#\t[ \t]/, " ", r1ll);
r1l = r1l r1ll;
getline r1ll < MAKEDEV;
}
r1last = r1ll;
r1kept = 1;
}
}
else
r1kept = 0;
return 1;
}
/^@@@SPECIAL@@@$/ {
print ".\\\" " $0;
print ".Bl -tag -width 01234567 -compact";
while (getline l < MAKEDEV > 0 && l !~ /^#.*Device.*Valid.*argument/)
;
while (read1line() && r1l ~ /^#\t/) {
sub(/#[ \t]*/, "", r1l);
target=r1l;
sub(/[ \t].*/, "", target);
line=r1l;
sub(/[^ \t]*[ \t]/, "", line);
# replace "foo" with ``foo''
gsub(/\"[^\"]*\"/, "``&''", line)
gsub(/\"/, "", line)
gsub(/[ \t]+/, " ", line);
print ".It Ar " target;
print toupper(substr(line, 1, 1)) substr(line, 2);
}
r1last = r1l;
r1kept = 1;
print ".El";
next;
}
/^@@@DEVICES@@@$/ {
print ".\\\" " $0;
print ".Bl -tag -width 01";
read1line();
do {
sub(/^#[ \t]+/, "", r1l);
if (r1l ~ /[^ \t]:$/)
sub(/:$/, " :", r1l);
print ".It " r1l; # print section heading
print ". Bl -tag -width 0123456789 -compact";
while(read1line() && r1l ~ /^#\t/) {
gsub(/#[ \t]+/, "", r1l);
target=r1l;
sub(/[ \t].*/, "", target);
line=r1l;
sub(/[^ \t]*[ \t]+/, "", line);
sub(/\*/, "#", target);
# replace "foo" with ``foo''
gsub(/\"[^\"]*\"/, "``&''", line)
gsub(/\"/, "", line)
# fix collateral damage of previous
sub(/5 1\/4''/, "5 1/4\"", line)
sub(/3 1\/2``/, "3 1/2\"", line)
# gc whitespace
sub(/\(XXX[^)]*\)/, "", line);
sub(/[ \t]*$/, "", line);
# add manpage, if available
if (target == "fd#")
page = "fdc"
else if (target == "pms#")
page = "opms"
else if (target == "ed#")
page = "edc"
else if (target == "ttye#")
page = "ite"
else if (target == "ttyh#")
page = "sab"
else if (target == "ttyU#")
page = "ucom"
else if (target == "fd")
page = "-----" # force no .Xr
else if (target == "sysmon")
page = "envsys"
else if (target == "ttyZ#")
page = "zstty"
else if (target == "ttyCZ?")
page = "cz"
else if (target == "ttyCY?")
page = "cy"
else if (target == "ttyB?")
page = "scc"
else if (target == "random")
page = "rnd"
else if (target == "scsibus#")
page = "scsi"
else {
page=target;
sub(/[^a-zA-Z]+/, "", page);
}
str = "ls ../man4/" page ".4 ../man4/man4.*/" page ".4 2>/dev/null"
while(str | getline) {
if (system("test -f " $0) != 0)
continue
# get the manpage including opt. arch name
sub(/^\.\.\/man4\//, "")
sub(/^man4\./, "")
sub(/\.4$/, "")
sub(/[ \t]*$/, "", line);
if (line ~ /see/) {
# already a manpage there, e.g. scsictl(8)
line = line " ,";
}
else
line = line ", see";
# Add .Xr \&foo 4 - ampersand to work around
# manpages that are *roff commands at the same
# time
line = line "\n.Xr \\&" $0 " 4";
}
close(str)
gsub(/[ \t]+$/, "", line);
gsub(/[ \t]+/, " ", line);
print ". It Ar " target;
line2=toupper(substr(line, 1, 1)) substr(line, 2);
sub(/Wscons/, "wscons", line2);
sub(/Pccons/, "pccons", line2);
print line2;
}
print MANPAGE ". El";
} while (r1l ~ /^# /);
print ".El";
next;
}
/@@@ARCH@@@/ {
gsub(/@@@ARCH@@@/, ARCH);
}
# date is substituted in the shell script
#/@@@DATE@@@/ {
# # date
#}
/\$NetBSD/ {
sub(/\$NetBSD.*\$/, "$""NetBSD$");
}
{ print }