|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 7262 (0x1c5e)
Types: TextFile
Names: »mkdriv.awk«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦2fafebccf⟧ »EurOpenD3/mail/smail3.1.19.tar.Z«
└─⟦bcd2bc73f⟧
└─⟦this⟧ »src/mkdriv.awk«
# @(#)mkdriv.awk 3.9 10/15/88 23:29:44
# Copyright (C) 1987, 1988 by Ronald S. Karr and Landon Curt Noll
#
# See the file COPYING, distributed with smail, for restriction
# and warranty information.
# awk program used from the mkdrivtab.sh shell script in building the
# drivertab.c file and makefiles for the directors/, routers/,
# transports/, lib/ and lookup/ directories.
#
# this awk file takes care of parsing the file and producing on the
# stdout directives and text which the shell can interpret to build the
# correct files. The directives are always of the form '%string' and
# are used to indicate when the shell script should change state.
#
# See mkdrivtab.sh for details on the input format and on how this awk
# script is used.
BEGIN {
n_director = 0
n_router = 0
n_transport = 0
n_lookup = 0
n_dlib = 0
n_rlib = 0
n_tlib = 0
n_llib = 0
lheader[" "] = ""
}
$2 == "library" {
type = $1; d = 0; r = 0; t = 0; l = 0
if (type == "director") d = 1
else if (type == "router") r = 1
else if (type == "transport") t = 1
else if (type == "lookup") l = 1
for (k = 3; k <= NF; k++) {
if ($k ~ /^.*\.c$/) {
if (d) dlib[++n_dlib] = $k
else if (r) rlib[++n_rlib] = $k
else if (t) tlib[++n_tlib] = $k
else if (l) llib[++n_llib] = $k
} else if ($k ~ /^.*\.h$/) {
if (d) dheader[$k] = $k
else if (r) rheader[$k] = $k
else if (t) theader[$k] = $k
else if (l) lheader[$k] = $k
}
}
next
}
$1 == "director" || $1 == "router" || $1 == "transport" {
type = $1; d = 0; r = 0; t = 0
if (type == "director") {
i = ++n_director
d = 1
prefix = "dt"
} else if (type == "router") {
i = ++n_router
r = 1
prefix = "rt"
} else if (type == "transport") {
i = ++n_transport
t = 1
prefix = "tp"
}
source = ""
header = ""
name = $2
cache = prefix "c_" name
driver = prefix "d_" name
verify = prefix "v_" name
finish = prefix "f_" name
builder = prefix "b_" name
for (k = 3; k <= NF; k++) {
if ($k == "nofinish") finish = "NULL"
else if ($k == "nocache") cache = "NULL"
else if ($k == "nobuilder") builder = "NULL"
else if ($k ~ /^source=..*\.c$/) source = substr($k, 8)
else if ($k ~ /^header=./) header = substr($k, 8)
}
if (! source) source = name ".c"
if (! header) header = substr(source, 1, length(source)-2) ".h"
if (d) {
dname[i] = name
dcache[i] = cache
ddriver[i] = driver
dverify[i] = verify
dfinish[i] = finish
dbuilder[i] = builder
dsource[source] = source
dheader[header] = header
} else if (r) {
rname[i] = name
rcache[i] = cache
rdriver[i] = driver
rverify[i] = verify
rfinish[i] = finish
rbuilder[i] = builder
rsource[source] = source
rheader[header] = header
} else if (t) {
tname[i] = name
tcache[i] = cache
tdriver[i] = driver
tverify[i] = verify
tfinish[i] = finish
tbuilder[i] = builder
tsource[source] = source
theader[header] = header
}
}
$1 == "lookup" {
name = $2
lname[++n_lookup] = name
source = ""
header = ""
for (k = 3; k <= NF; k++) {
if ($k ~ /^source=..*\.c$/) source = substr($k, 8)
else if ($k ~ /^header=./) header = substr($k, 8)
}
if (! source) source = name ".c"
lsource[source] = source
if (header) lheader[header] = header
}
END {
for (i = 1; i <= n_director; i++) {
print "%CC%" dcache[i] "();"
print "%DD%" ddriver[i] "();"
print "%VV%" dverify[i] "();"
print "%FF%" dfinish[i] "();"
print "%BB%" dbuilder[i] "();"
}
for (i = 1; i <= n_router; i++) {
print "%CC%" rcache[i] "();"
print "%RD%" rdriver[i] "();"
print "%VV%" rverify[i] "();"
print "%FF%" rfinish[i] "();"
print "%BB%" rbuilder[i] "();"
}
for (i = 1; i <= n_transport; i++) {
print "%CC%" tcache[i] "();"
print "%TD%" tdriver[i] "();"
print "%FF%" tfinish[i] "();"
print "%BB%" tbuilder[i] "();"
}
for (i = 1; i <= n_lookup; i++) {
print "%LO%" lname[i] "_open" "();"
print "%LC%" lname[i] "_close" "();"
print "%LL%" lname[i] "_lookup" "();"
}
print
if (n_director) {
print "struct direct_driver direct_drivers[] = {"
for (i = 1; i <= n_director; i++) {
printf("%%drop { \"%s\",%s,%s,%s,%s,%s },\n", \
dname[i], dcache[i], ddriver[i],\
dverify[i], dfinish[i], dbuilder[i])
}
printf "%%drop { NULL },\n};\n\n"
}
if (n_router) {
print "struct route_driver route_drivers[] = {"
for (i = 1; i <= n_router; i++) {
printf("%%drop { \"%s\",%s,%s,%s,%s,%s },\n", \
rname[i], rcache[i], rdriver[i],\
rverify[i], rfinish[i], rbuilder[i])
}
printf "%%drop { NULL },\n};\n\n"
}
if (n_transport) {
print "struct transport_driver transport_drivers[] = {"
for (i = 1; i <= n_transport; i++) {
printf("%%drop { \"%s\",%s,%s,%s,%s },\n", \
tname[i], tcache[i], tdriver[i],\
tfinish[i], tbuilder[i])
}
printf "%%drop { NULL },\n};\n\n"
}
if (n_lookup) {
print "struct lookup_proto lookup_protos[] = {"
for (i = 1; i <= n_lookup; i++) {
printf("%%drop ");
printf("{ \"%s\", %s_open, %s_close, %s_lookup },\n", \
lname[i], lname[i], lname[i], lname[i])
}
printf "%%drop { NULL },\n};\n"
}
for (step = 0; step < 4; step++) {
d = 0; r = 0; t = 0; l = 0
if (step == 0) {
if (n_director == 0) continue;
d = 1
type = "directors"
target = "ddrivlib"
} else if (step == 1) {
if (n_router == 0) continue;
r = 1
type = "routers"
target = "rdrivlib"
} else if (step == 2) {
if (n_transport == 0) continue;
t = 1
type = "transports"
target = "tdrivlib"
} else {
if (n_lookup == 0) continue;
l = 1
type = "lookup"
target = "ldrivlib"
}
print "%makefile_start " type
print "TARGET=" target ".a"
printf("OBJ=")
if (d) {
for (s in dsource) {
printf(" %s.o", substr(s, 1, length(s)-2))
}
for (i = 1; i <= n_dlib; i++) {
s = dlib[i]
printf(" %s.o", substr(s, 1, length(s)-2))
}
}
if (r) {
for (s in rsource) {
printf(" %s.o", substr(s, 1, length(s)-2))
}
for (i = 1; i <= n_rlib; i++) {
s = rlib[i]
printf(" %s.o", substr(s, 1, length(s)-2))
}
}
if (t) {
for (s in tsource) {
printf(" %s.o", substr(s, 1, length(s)-2))
}
for (i = 1; i <= n_tlib; i++) {
s = tlib[i]
printf(" %s.o", substr(s, 1, length(s)-2))
}
}
if (l) {
for (s in lsource) {
printf(" %s.o", substr(s, 1, length(s)-2))
}
for (i = 1; i <= n_llib; i++) {
s = llib[i]
printf(" %s.o", substr(s, 1, length(s)-2))
}
}
printf("\nCSRC=")
if (d) {
for (s in dsource) {
printf(" %s", s)
}
for (i = 1; i <= n_dlib; i++) {
printf(" %s", dlib[i])
}
}
if (r) {
for (s in rsource) {
printf(" %s", s)
}
for (i = 1; i <= n_rlib; i++) {
printf(" %s", rlib[i])
}
}
if (t) {
for (s in tsource) {
printf(" %s", s)
}
for (i = 1; i <= n_tlib; i++) {
printf(" %s", tlib[i])
}
}
if (l) {
for (s in lsource) {
printf(" %s", s)
}
for (i = 1; i <= n_llib; i++) {
printf(" %s", llib[i])
}
}
printf("\nHSRC=")
if (d) for (s in dheader) {
printf(" %s", s)
}
if (r) for (s in rheader) {
printf(" %s", s)
}
if (t) for (s in theader) {
printf(" %s", s)
}
if (l) for (s in lheader) {
if (s != " ") {
printf(" %s", s)
}
}
printf("\n%%makefile_end\n")
}
}