|
|
1.1 root 1: # compile: make fname.o (intermediate output) from fname.t (troff), if needed
2: awk '
3: function warn(s) {
4: print "compile error: " s >"/dev/stderr"
5: }
6: function fatal(s) {
7: print "compile fatal error: " s >"/dev/stderr"
8: exit 1
9: }
10:
11: BEGIN {
12: lsfile = "/tmp/compile.ls"
13: missingfile = "/tmp/compile.miss"
14: system("rm -f " lsfile " " missingfile)
15: for (i = 1; i < ARGC; i++) dofile(ARGV[i])
16: }
17:
18: function dofile(infile, outfile, langname, i) {
19: # STARTUP
20: if (infile !~ /\.t$/) {
21: warn("usage: compile filename.t")
22: return
23: }
24: if ((getline < infile) == -1) {
25: warn("cannot open file " infile)
26: return
27: }
28: close(infile)
29: outfile = infile; sub(/\.t$/, ".o", outfile)
30: for (i in langs) delete x[i]
31: for (i in files) delete files[i]
32: # READ FILE (if too expensive, grep first, as in doctype)
33: langname = ""
34: while ((getline <infile) > 0) {
35: sub(/^\.EQ[ \t]?/, ".begin eqn ")
36: sub(/^\.EN[ \t]?/, ".end ")
37: sub(/^\.PS[ \t]?/, ".begin pic ")
38: sub(/^\.PE[ \t]?/, ".end ")
39: sub(/^\.G1[ \t]?/, ".begin grap ")
40: sub(/^\.G2[ \t]?/, ".end ")
41: if (langname == "") { # outside .begin/.end
42: if (/^\.begin[ \t]/) {
43: langname = $2
44: langs[langname]++
45: }
46: } else { # inside ``.begin langname''
47: if (/^\.end/) {
48: langname = ""
49: } else if ($1 == "file") {
50: files[$2]++
51: }
52: }
53: }
54: close(infile)
55: # CLEANUP
56: # Check currency and return if okay
57: filestr = ""
58: for (i in files) filestr = filestr " " i
59: system("ls -t " outfile " " infile\
60: filestr " >" lsfile " 2>" missingfile)
61: if ((getline < missingfile) == 0) {
62: getline newest < lsfile
63: close(lsfile)
64: if (newest == outfile) return
65: }
66: close(missingfile)
67: # Make and execute system call
68: need["chem"] = need["newman"] = need["stills"] = need["dformat"] \
69: = need["grap"] = need["scatter"] = need["swizzle"] = "pic"
70: need["dot"] = "grap"
71: n = split("dot grap scatter newman stills dformat " \
72: "swizzle chem pic eqn", pname)
73: for (i = 1; i <= n; i++) {
74: s = pname[i]
75: if (langs[s]) {
76: pipe = pipe " | " s
77: langs[need[s]]++
78: }
79: }
80: system("cat " infile pipe " > " outfile)
81: }
82: ' $*
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.