|
|
1.1 ! root 1: BEGIN { ! 2: # develop is set from first argument of form develop=filename ! 3: ! 4: fillstring = "; line from GL.n to GL.s; line from GL.e to GL.w "\ ! 5: "; line from GL.ne to GL.sw; line from GL.nw to GL.se" ! 6: set(textname, "small s medium m big b bigbig B") ! 7: set(linename, "solid s fat f fatfat F") ! 8: set(justtr, "l ljust r rjust a above b below") ! 9: set(linetr, "o dotted a dashed"); linetr["s"] = linetr["f"] = linetr["F"] = "" ! 10: set(arrowtr, "< <- > -> x <->"); arrowtr["-"] = "" ! 11: set(convert, "dot \\s+3.\\s-3 bullet \\s-3\\(bu\\s+3 "\ ! 12: "times \\s-3\\(mu\\s+3 circle \\s-3\\(ob\\s+3") ! 13: instills = 0 ! 14: } ! 15: ! 16: instills == 0 { if ($1 == ".begin" && /^\.begin[ \t]+stills/) { ! 17: instills = 1; startstills() ! 18: } else print ! 19: next ! 20: } ! 21: /^\.end/ { instills = 0; endstills(); next } ! 22: END { if (instills) fatal("eof inside begin/end") } ! 23: ! 24: { inputline = $0; sub(/\#.*$/, "") } ! 25: /^[ \t]*$/ { next } ! 26: $1 == "view" { viewnum[$2] = viewct++ ! 27: if (NF <= 2) text = $2 ! 28: else { text = rest(3) ! 29: if (text ~ /^"/) { ! 30: if (text !~ /"$/) text = substr(text,2) ! 31: else text=substr(text,2,length(text)-2) ! 32: } ! 33: } ! 34: inviewtitle[$2] = text ! 35: next ! 36: } ! 37: $1 == "print" { sawprint = 1 ! 38: if ($2 == "all") printglobal = 1 ! 39: else if ($2 == "final") printfinal = 1 ! 40: else { # print <clickname> ... ! 41: if ($3 == "all") { # print <clickname> all ! 42: allnamearr[$2] = 1 ! 43: } else { # print <clickname> v1 v2 ... ! 44: if (!($2 in snamenum)) ! 45: snamenum[$2] = snamenumct++ ! 46: for (i = 3; i <= NF; i++) ! 47: printsome[snamenum[$2] "." $i]=1 ! 48: } ! 49: } ! 50: next ! 51: } ! 52: /./ { # parameter assignments ! 53: n = $2; sub(/^\+/, "", n); n = 0 + n ! 54: if ($1 == "file") infile = $2 ! 55: else if ($1 == "across") across = n ! 56: else if ($1 == "down") down = n ! 57: else if ($1 == "margin") margin = n ! 58: else if ($1 == "frameht") frameht = n ! 59: else if ($1 == "framewid") framewid = n ! 60: else if ($1 in textname) textinc[textname[$1]] = n ! 61: else if ($1 in linename) lineinc[linename[$1]] = n ! 62: else if ($1 ~ /^times?$/) { ! 63: wanttime = 1; if ($2 == "invis") wanttime = 0 ! 64: } else if ($1 ~ /^frames?$/) { ! 65: wantframe = 1; if ($2 == "invis") wantframe = 0 ! 66: } else warn("unrecognized command") ! 67: next ! 68: } ! 69: ! 70: function rest(f, s, i) { # rest of $0, starting at $f ! 71: if (NF <= f) return $f ! 72: s = $0 ! 73: sub(/^[ \t]+/, "", s) ! 74: for (i = 1; i < f; i++) ! 75: sub(/^[^ \t]+[ \t]+/, "", s) ! 76: return s ! 77: } ! 78: ! 79: function dump(time, i, gtype, vnum, x1, x2, y1, y2, ! 80: opts, text, delta, btype) { ! 81: btype = ""; if (wantframe == 0) btype = " invis" ! 82: if (goacross == 0) { # time goes down the page, views go across ! 83: if (colcnt >= colmax) { ! 84: delta = .1; if (wanttime) delta += .8 ! 85: print "A0: box invis wid 0 ht 0 with .sw at A0.sw + ("\ ! 86: viewct*framewid + delta " , 0)" ! 87: print "B0: box invis wid 0 ht 0 with .sw at A0.sw" ! 88: colcnt = 0 ! 89: } ! 90: print "B0: box" btype " wid framewid ht frameht with .n at B0.s" ! 91: for (i = 1; i < viewct; i++) ! 92: print "B" i ": box" btype\ ! 93: " wid framewid ht frameht with .w at B" i-1 ".e" ! 94: if (colcnt == 0) ! 95: for (i = 0; i < viewct; i++) ! 96: if (viewtitle[i] != "") ! 97: print "\"" viewtitle[i] "\" at B"\ ! 98: viewbase[i] ".n + (0, .1)" ! 99: if (wanttime) ! 100: print "\"" time "\" ljust at B" viewct-1 ".e + (.1,0)" ! 101: } else { # time goes across the page, views go down ! 102: if (colcnt >= colmax) { ! 103: delta = .1; if (wanttime) delta += .3 ! 104: print "A0: box invis wid 0 ht 0 with .c at A0.c - (0,"\ ! 105: viewct*frameht + delta ")" ! 106: print "B0: box invis wid 0 ht 0 with .c at A0.c" ! 107: colcnt = 0 ! 108: } ! 109: print "B0: box" btype " wid framewid ht frameht with .w at B0.e" ! 110: for (i = 1; i < viewct; i++) ! 111: print "B" i ": box" btype\ ! 112: " wid framewid ht frameht with .n at B" i-1 ".s" ! 113: if (colcnt == 0) ! 114: for (i = 0; i < viewct; i++) ! 115: if (viewtitle[i] != "") ! 116: print "\"" viewtitle[i] "\" rjust at B"\ ! 117: viewbase[i] ".w - (.1, 0)" ! 118: if (wanttime) ! 119: print "\"" time "\" at B" viewct-1 ".s + (0,-.15)" ! 120: } ! 121: colcnt++ ! 122: for (i = 1; i <= slotcnt; i++) ! 123: if (slot[i] != "") { ! 124: if (slot[i] ~ /^g\t/) slot[i] = makepic(slot[i]) ! 125: print slot[i] ! 126: } ! 127: for (i = 1; i <= staticcnt; i++) ! 128: print static[i] ! 129: } ! 130: ! 131: function pos(x, y) { ! 132: return sprintf("B%d.sw+(%.3g,%.3g)", basenum,\ ! 133: framexfac*(frameborder+x), frameyfac*(frameborder+y)) ! 134: } ! 135: ! 136: function makepic(istring, fields, gtype, vnum, pstring, just, ! 137: x1, x2, y1, y2, opts, text, i, t, linemode, arrow, ! 138: inc, ss, es) { # convert int file string to pic ! 139: fields = split(istring, f, "\t") ! 140: gtype=f[3]; vnum=f[4]; opts=f[5]; x1=f[6]; y1=f[7] ! 141: basenum = viewbase[vnum] ! 142: if (gtype == "l") { # line ! 143: x2 = f[8]; y2 = f[9] ! 144: linemode = substr(opts,1,1) # solid,fat,fatfat,dotted,dashed ! 145: arrow = substr(opts,2,1) # -,->,<-, <-> ! 146: pstring = "line " linetr[linemode] " " arrowtr[arrow]\ ! 147: " from " pos(x1, y1) " to " pos(x2, y2) ! 148: if (linemode != "f" && linemode != "F") linemode = "s" ! 149: inc = lineinc[linemode] ! 150: if (inc != 0) { ! 151: if (inc < 0) { ss = inc; es = "+" 0-inc } ! 152: else { ss = "+" inc; es = "-" inc } ! 153: pstring = ".ps " ss "\n" pstring "\n.ps " es ! 154: } ! 155: } else if (gtype == "b") { # box ! 156: x2 = f[8]; y2 = f[9] ! 157: if (x1 > x2) { t = x1; x1 = x2; x2 = t } ! 158: if (y1 > y2) { t = y1; y1 = y2; y2 = t } ! 159: pstring = "GL: box with .sw at " pos(x1,y1)\ ! 160: " ht " (y2-y1)*frameyfac\ ! 161: " wid " (x2-x1)*framexfac ! 162: if (substr(opts,1,1) == "f") pstring = pstring fillstring ! 163: } else if (gtype == "c") { # circle ! 164: pstring = "GL: circle radius " framexfac*f[8]\ ! 165: " at " pos(x1, y1) ! 166: if (substr(opts,1,1) == "f") pstring = pstring fillstring ! 167: } else if (gtype == "t") { # text ! 168: if (fields == 8) text = f[8] ! 169: for (i = 9; i <= fields; i++) text = text "\t" f[i] ! 170: if (text in convert) text = convert[text] ! 171: just = justtr[substr(opts,1,1)] ! 172: pstring = "\"" text "\" " just " at " pos(x1, y1) ! 173: inc = textinc[substr(opts,2,1)] ! 174: if (inc != 0) { ! 175: if (inc < 0) { ss = inc; es = "+" 0-inc } ! 176: else { ss = "+" inc; es = "-" inc } ! 177: pstring = ".ps " ss "\n" pstring "\n.ps " es ! 178: } ! 179: } else warn("int file bug: illegal modifier after g") ! 180: return pstring ! 181: } ! 182: ! 183: function warn(s) { ! 184: print "stills warning: " s >"/dev/tty" ! 185: print " near input line " NR ": " inputline >"/dev/tty" ! 186: } ! 187: function fatal(s) { ! 188: print "stills fatal error: " s >"/dev/tty" ! 189: print " near input line " NR ": " inputline >"/dev/tty" ! 190: exit ! 191: } ! 192: ! 193: function startstills() { ! 194: set(textinc, "s -2 m 0 b 3 B 8") ! 195: set(lineinc, "s 0 f 3 F 8") ! 196: infile = ""; sawprint = 0 ! 197: frameht = 1.5; framewid = 1.5; margin = 0.05 ! 198: wanttime = wantframe = 1 ! 199: printglobal = printfinal = 0 ! 200: across = 0; down = -1 ! 201: clear(allnamearr) ! 202: clear(allnumarr) ! 203: clear(clickname) ! 204: clear(inviewtitle) ! 205: clear(printsome) ! 206: clear(slot) ; slotcnt = 0 ! 207: clear(somenum) ! 208: clear(snamenum) ; snamenumct = 0 ! 209: clear(static) ; staticcnt = 0 ! 210: clear(timectr) ! 211: clear(viewactive) ! 212: clear(viewtitle) ! 213: clear(viewnum) ; viewct = 0 ! 214: print ".PS" ! 215: print "A0: B0: box invis wid 0 ht 0" ! 216: } ! 217: ! 218: function clear(a, i) { ! 219: for (i in a) delete a[i] ! 220: } ! 221: function set(a, s, i, n, q) { ! 222: n = split(s, q) ! 223: for (i = 1; i < n; i += 2) ! 224: a[q[i]] = q[i+1] ! 225: } ! 226: ! 227: function endstills() { ! 228: if (sawprint = 0) warn("no print statements") ! 229: if (viewct == 0) viewglobal = 1 ! 230: if (down < 0) { ! 231: goacross = 1; colmax = across; ratio = 6/framewid ! 232: } else { ! 233: goacross = 0; colmax = down; ratio = 8/frameht ! 234: } ! 235: if (colmax <= 0) colmax = int(ratio) ! 236: inputrange = 10000 # 0..9999 ! 237: frameborder = inputrange * margin # border of whitespace ! 238: framexfac = framewid/(inputrange + 2*frameborder) ! 239: frameyfac = frameht/(inputrange + 2*frameborder) ! 240: print "frameht = " frameht ! 241: print "framewid = " framewid ! 242: if (infile == "") fatal("missing script file name") ! 243: if (infile !~ /\.s$/) fatal("script file name must end in .s") ! 244: system(develop " " infile) ! 245: sub(".s$", ".i", infile) ! 246: OFMT = "%.3g" ! 247: FS = "\t" ! 248: while ((getline <infile) > 0) { ! 249: if ($1 == "g") { ! 250: if (viewactive[$4]) { ! 251: snum = $2 ! 252: if (snum > slotcnt) slotcnt = snum ! 253: if (snum != 0) slot[snum] = $0 ! 254: else static[++staticcnt] = makepic($0) ! 255: } ! 256: } else if ($1 == "e") { # erase ! 257: if (viewactive[$4]) slot[$2] = "" ! 258: } else if ($1 == "c") { # click ! 259: ++timectr[$2] ! 260: if (printglobal || allnumarr[$2] || ! 261: (somenum[$2] "." timectr[$2] in printsome)) ! 262: dump(clickname[$2] ": " timectr[$2]) ! 263: } else if ($1 == "#") { # comment -- ignore it ! 264: } else if ($1 == "b") { # blank the current view by enclosed erases ! 265: } else if ($1 == "d") { # define ! 266: if ($2 == "c") { # click ! 267: clickname[$3] = $4 ! 268: allnumarr[$3] = 0 ! 269: if ($4 in allnamearr) allnumarr[$3] = 1 ! 270: somenum[$3] = -1 ! 271: if ($4 in snamenum) somenum[$3] = snamenum[$4] ! 272: } else if ($2 == "v") { # view ! 273: viewactive[$3] = 0 ! 274: if ($4 in viewnum) { ! 275: viewactive[$3] = 1 ! 276: viewbase[$3] = viewnum[$4] ! 277: viewtitle[$3] = inviewtitle[$4] ! 278: } else if (viewglobal) { ! 279: viewactive[$3] = 1 ! 280: viewbase[$3] = viewct++ ! 281: viewtitle[$3] = $4 ! 282: } ! 283: } else if ($2 == "p") { # ``pragmas'' -- check here? ! 284: } else warn("int file bug: illegal modifier following d") ! 285: } else warn("int file bug: unrecognized command") ! 286: } ! 287: close(infile) ! 288: if (printfinal) dump("final") ! 289: print ".PE" ! 290: FS = " " ! 291: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.