Blame


1 b3878828 2004-05-16 devnull awk '
2 b3878828 2004-05-16 devnull function error(s) { print "dformat error: " s " near input line " NR | "cat 1>&2" }
3 b3878828 2004-05-16 devnull
4 b3878828 2004-05-16 devnull BEGIN { s = "recht 0.3 addrht 0.055 recspread 0.15 "
5 b3878828 2004-05-16 devnull s = s "charwid 0.07 textht 0.167 addrdelta 4 "
6 b3878828 2004-05-16 devnull s = s "bitwid 0.125 linedisp 0.04 addr both "
7 b3878828 2004-05-16 devnull s = s "fill off linethrutext 1"
8 b3878828 2004-05-16 devnull n = split(s, x)
9 b3878828 2004-05-16 devnull for (i = 1; i <= n-1; i += 2) oparm[x[i]] = parm[x[i]] = x[i+1]
10 b3878828 2004-05-16 devnull }
11 b3878828 2004-05-16 devnull
12 b3878828 2004-05-16 devnull inlang == 0 { if ($0 !~ /^\.begin[ \t]/ || $2 != "dformat") print
13 b3878828 2004-05-16 devnull else {
14 b3878828 2004-05-16 devnull inlang = 1; print ".PS"; boxacnt = 0
15 b3878828 2004-05-16 devnull if (firstpic != 1) { firstpic = 1; print "fillval = 0.9" }
16 b3878828 2004-05-16 devnull }
17 b3878828 2004-05-16 devnull next
18 b3878828 2004-05-16 devnull }
19 b3878828 2004-05-16 devnull /^\.end/ { inlang = 0; print ".PE"; next }
20 b3878828 2004-05-16 devnull
21 b3878828 2004-05-16 devnull $1 == "style" { if (!($2 in parm)) error("unrecognized name: " $2)
22 b3878828 2004-05-16 devnull else if ($3 == "reset") {
23 b3878828 2004-05-16 devnull t = oparm[$2]; oparm[$2] = parm[$2]; parm[$2] = t
24 b3878828 2004-05-16 devnull } else {
25 b3878828 2004-05-16 devnull oparm[$2] = parm[$2]; parm[$2] = $3
26 b3878828 2004-05-16 devnull }
27 b3878828 2004-05-16 devnull next
28 b3878828 2004-05-16 devnull }
29 b3878828 2004-05-16 devnull
30 b3878828 2004-05-16 devnull $1 == "pic" { $1 = ""; print $0; next }
31 b3878828 2004-05-16 devnull
32 b3878828 2004-05-16 devnull /^[^ \t]/ { printf "BoxA: box invis ht %g wid 0", parm["recht"]
33 b3878828 2004-05-16 devnull if (boxacnt++) printf " with .n at BoxA.s - (0,%g)",
34 b3878828 2004-05-16 devnull parm["recspread"] + maxdy*parm["textht"]
35 b3878828 2004-05-16 devnull printf "\n"
36 b3878828 2004-05-16 devnull maxdy = sumboxlen = 0
37 b3878828 2004-05-16 devnull gsub(/[ \t]+$/, "")
38 b3878828 2004-05-16 devnull if ($0 != "noname") {
39 b3878828 2004-05-16 devnull printf " \"%s \" rjust at BoxA.w\n", $0
40 b3878828 2004-05-16 devnull printf " box invis with .e at BoxA.w ht 0 wid %g\n",
41 b3878828 2004-05-16 devnull parm["charwid"] * (length($0) + 3)
42 b3878828 2004-05-16 devnull }
43 b3878828 2004-05-16 devnull printf " BoxB: box invis ht %g wid 0 at BoxA\n", parm["recht"]
44 b3878828 2004-05-16 devnull next
45 b3878828 2004-05-16 devnull }
46 b3878828 2004-05-16 devnull /./ { boxname = ""
47 b3878828 2004-05-16 devnull if ($1 ~ /:$/) {
48 b3878828 2004-05-16 devnull boxname = substr($1, 1, length($1)-1)
49 b3878828 2004-05-16 devnull $1 = ""; $0 = " " $0
50 b3878828 2004-05-16 devnull }
51 b3878828 2004-05-16 devnull range = $1; $1 = ""
52 b3878828 2004-05-16 devnull gsub(/^[ \t]+/, ""); gsub(/[ \t]+$/, ""); text = $0
53 b3878828 2004-05-16 devnull n = split(range, x, "-")
54 b3878828 2004-05-16 devnull rlo = x[1]
55 b3878828 2004-05-16 devnull rhi = (n >= 2) ? x[2] : rlo
56 b3878828 2004-05-16 devnull cwid = (rhi >= rlo) ? rhi - rlo + 1 : rlo - rhi + 1
57 b3878828 2004-05-16 devnull rwid = (n >= 3) ? (0 + x[3]) : cwid
58 b3878828 2004-05-16 devnull btype = x[4]
59 b3878828 2004-05-16 devnull if (btype !~ /^(dot|dash|invis)/) btype = "solid"
60 b3878828 2004-05-16 devnull textlen = parm["charwid"] * length(text)
61 b3878828 2004-05-16 devnull boxlen = parm["bitwid"] * rwid
62 b3878828 2004-05-16 devnull dy = 0
63 b3878828 2004-05-16 devnull if (textlen > boxlen) { # set dy, the channel for this text
64 b3878828 2004-05-16 devnull chan[maxdy+1] = -999
65 b3878828 2004-05-16 devnull for (dy = 1; chan[dy]+textlen > sumboxlen; dy++) ;
66 b3878828 2004-05-16 devnull if (dy > maxdy) maxdy = dy
67 b3878828 2004-05-16 devnull if (parm["linethrutext"] == 0)
68 b3878828 2004-05-16 devnull for (k = 1; k <= dy; k++)
69 b3878828 2004-05-16 devnull chan[k] = sumboxlen+boxlen
70 b3878828 2004-05-16 devnull else
71 b3878828 2004-05-16 devnull chan[dy] = sumboxlen
72 b3878828 2004-05-16 devnull }
73 b3878828 2004-05-16 devnull sumboxlen += boxlen
74 b3878828 2004-05-16 devnull fill = ""
75 b3878828 2004-05-16 devnull if (parm["fill"] == "on") fill = " fill "
76 b3878828 2004-05-16 devnull if (boxname != "") printf " %s:", boxname
77 b3878828 2004-05-16 devnull printf " BoxB: box %s %s ht %g wid %g with .w at BoxB.e\n",
78 b3878828 2004-05-16 devnull fill, btype, parm["recht"], boxlen
79 b3878828 2004-05-16 devnull if (dy == 0) printf " \"%s\" at BoxB.c\n", text
80 b3878828 2004-05-16 devnull else { if (rwid < 2) start = "BoxB.s"
81 b3878828 2004-05-16 devnull else start = "BoxB.se - (" parm["linedisp"] ",0)"
82 b3878828 2004-05-16 devnull printf " line from %s down %g\n",
83 b3878828 2004-05-16 devnull start, dy*parm["textht"]
84 b3878828 2004-05-16 devnull printf " \"%s\\|\" at last line .s rjust\n", text
85 b3878828 2004-05-16 devnull printf " box invis with .e at last line .s ht 0 wid %g\n",
86 b3878828 2004-05-16 devnull textlen
87 b3878828 2004-05-16 devnull }
88 b3878828 2004-05-16 devnull
89 b3878828 2004-05-16 devnull if (parm["addr"] ~ /^(left|right|both)$/) {
90 b3878828 2004-05-16 devnull dp = int(parm["addrdelta"]) # Delta Point size
91 b3878828 2004-05-16 devnull if (dp < 0 || dp > 9) error("bad addrdelta value: " dp)
92 b3878828 2004-05-16 devnull dah = parm["addrht"] # Delta Addr Height
93 b3878828 2004-05-16 devnull pb = parm["addr"] # Parameter for Bits
94 b3878828 2004-05-16 devnull if (rlo == rhi) {
95 b3878828 2004-05-16 devnull printf " \"\\s-%d%s\\s+%d\" at BoxB.s + (0,%g)\n",
96 b3878828 2004-05-16 devnull dp, rlo, dp, dah
97 b3878828 2004-05-16 devnull } else {
98 b3878828 2004-05-16 devnull if (pb == "left" || pb == "both")
99 b3878828 2004-05-16 devnull printf "\t\"\\|\\s-%d%s\\s+%d\" ljust at BoxB.sw + (0,%g)\n",
100 b3878828 2004-05-16 devnull dp, rlo, dp, dah
101 b3878828 2004-05-16 devnull if (pb == "right" || pb == "both")
102 b3878828 2004-05-16 devnull printf "\t\"\\s-%d%s\\s+%d\\|\" rjust at BoxB.se + (0,%g)\n",
103 b3878828 2004-05-16 devnull dp, rhi, dp, dah
104 b3878828 2004-05-16 devnull }
105 b3878828 2004-05-16 devnull }
106 b3878828 2004-05-16 devnull }
107 b3878828 2004-05-16 devnull END { if (inlang) error("eof inside begin/end") }
108 b3878828 2004-05-16 devnull ' $*