|
|
1.1 ! root 1: May 85: ! 2: ! 3: "solid" is now a valid (though uninteresting) attribute. ! 4: ! 5: Mar 85: ! 6: ! 7: Limited amount of point arithmetic: ! 8: point +/- point ! 9: works ! 10: ! 11: Dec, 1984: ! 12: ! 13: reset varlist ! 14: resets built-in variables in list to default values. ! 15: empty list resets everything. ! 16: ! 17: sprintf("format", exprlist) ! 18: returns a text string suitable for use anywhere "..." ! 19: can be used. ! 20: ! 21: sh X anything X ! 22: passes "anything" to a shell for execution after ! 23: replacing any defined terms in it. ! 24: ! 25: Nov, 1984: ! 26: ! 27: line expr and move expr are treated as line/move by expr ! 28: in current direction. ! 29: ! 30: The -D option has been rendered obsolete -- all output is ! 31: produced with \D commands. The -T option is also ! 32: meaningless -- the output is independent of typesetter. ! 33: ! 34: A new variable "arrowhead" controls printing of arrowheads, ! 35: by defining the number of lines printed in a little fan. ! 36: Default is 2; values around 7 give a filled-in head; ! 37: other values are basically worthless. Arrowheads on arcs ! 38: are now tilted somewhat in an attempt to improve their ! 39: appearance. ! 40: ! 41: "undef foo" removes the definition of foo. ! 42: ! 43: July 1984: ! 44: ! 45: The functions log, exp (both base 10), sqrt, sin, cos, atan2(,), ! 46: max, min (2 arguments only), int, and rand (which returns a ! 47: float random on [0,1)) are now available, stolen directly ! 48: from grap. ! 49: ! 50: Added copy, for and if from grap: ! 51: copy "file" ! 52: copy "file" thru X macro body X ! 53: copy thru X macro X [until "str"] ! 54: for var = expr to expr [by expr] do X anything X ! 55: if expr then X anything [else X anything X] ! 56: ! 57: In a copy, any .PS or .PE is discarded [sic], so copied files ! 58: can be nested without editing. .PS <file still works ! 59: but its use is discouraged. ! 60: ! 61: In an if, you can also test "string1" == "string2" or ! 62: "string1" != "string2" ! 63: ! 64: The text primitive is now more systematic: ! 65: "..." ".." "." makes an invisible object with ! 66: properties much like a box. Height and width ! 67: are settable: explicit ht and wid modifiers ! 68: affect a specific instance; variables textht ! 69: and textwid affect all subsequent occurrences. ! 70: "textht" is the height of one line, so the height ! 71: of n strings is n*textht. ! 72: ! 73: Added code from Eric Grosse to correctly compute bounding ! 74: box for arcs. Also defined corners for arcs as same as ! 75: corresponding circle, an idea due to Tom Cargill. ! 76: ! 77: Limits on text strings, attributes and objects grow until ! 78: memory limit reached. ! 79: ! 80: Permits E format on input numbers. ! 81: ! 82: Output produced in inches, not units, so somewhat more ! 83: typesetter-independent. The environment variable TYPESETTER ! 84: is examined. ! 85: ! 86: Saves and restores fill state around .PS/.PE. ! 87: ! 88: .PS wid ht ! 89: can be used to set width and height separately for picture; ! 90: default ht is to scale in same proportion as width (as before). ! 91: ! 92: ! 93: Dec 10/81: ! 94: ! 95: The "scale = ..." construction has been reinstated: ! 96: if ! 97: scale = 100 ! 98: or some such appears in a picture, all numbers in that ! 99: and subsequent pictures will be scaled by 1/100. ! 100: Default scale is 1.0. ! 101: ! 102: Oct 8/81: ! 103: ! 104: I have finally installed sensible floating-point ! 105: numbers in pic. This means that the trailing "i", ! 106: as in 1.25i, is no longer necessary: all numbers ! 107: are taken to be in inches. ! 108: Furthermore, expressions may now use numbers like ! 109: 1.25 instead of circumlocutions like 5/4. ! 110: It is now best to enter dimensions and positions simply ! 111: in terms of inches, as in "box at 1,2" instead of in terms ! 112: of internal units (which used to be "box at 200,400"). ! 113: Internal units are no longer used. ! 114: ! 115: I will be glad to assist with conversion if necessary; ! 116: opic will remain around for a while too. ! 117: ! 118: New May, 1981: ! 119: ! 120: 0. Diagnostics: ! 121: Error reporting is better; error location is marked ! 122: with a ^ at the point in the input where the error was detected; ! 123: line numbers are more accurate when define's are used. ! 124: ! 125: 1. Shorthand for points ! 126: ( place1 , place2 ) now refers to the point ( place1.x, place2.y ), ! 127: as it does in i. ! 128: ! 129: 2. Blocks ! 130: Any sequence of pic statements may be enclosed in [...] to form ! 131: a block, which can be positioned rather like an ordinary box. ! 132: Typical constructions look like ! 133: box ... ! 134: [ box; circle; arrow; whatever ] with .ne at last box.sw ! 135: move to top of 2nd last [] ! 136: "last"-type constructs treat blocks as a unit and don't look ! 137: inside for objects. Blocks have the same compass corners as ! 138: boxes (determined by the bounding box); in addition it is ! 139: possible to position them by placing either an absolute ! 140: coordinate (like 0,0) or an internal label (like A) at some ! 141: external point. Thus: ! 142: [ ...; A: ...; ... ] with .A at ... ! 143: You can use "last []" just like "last box". ! 144: Blocks join with other things like boxes do (i.e., at the ! 145: center of the appropriate side). It's not clear that this ! 146: is the right thing to do, so it may change. ! 147: ! 148: Names of variables and places within a block are local ! 149: to that block, and thus do not affect variables and places ! 150: of the same name outside. You can get at the internal ! 151: place names with constructs like ! 152: last [].A ! 153: or ! 154: B.A ! 155: where B is a name attached to a block like so: ! 156: B : [ ... ; A: ...; ] ! 157: ! 158: When combined with define statements, blocks provide ! 159: a reasonable simulation of a procedure mechanism. ! 160: ! 161: Blocks nest, but the code is shaky; let me know if ! 162: something suspicious happens. ! 163: It is currently possible to look only one level deep ! 164: with constructs like B.A, although A may be ! 165: further qualified (i.e., B.A.sw or "top of B.A" are legal). ! 166: ! 167: 3. Flyback ! 168: If .PF is used instead of .PE, the position after printing is ! 169: restored to where it was before the picture started. ! 170: ("F" is for "flyback".) ! 171: ! 172: 4. "Between" positions ! 173: It is now possible to specify a position somewhere between two ! 174: other positions either by the phrase ! 175: expr of the way between position1 and position2 ! 176: or by the notation ! 177: expr <position1, position2> ! 178: where expr is some number like 0.3333 and the positions are anything ! 179: like corners, labels, etc. The result is a new position which is ! 180: "expr" of the way along a line from position1 to position2. Naturally ! 181: expr can be bigger than 1 or negative. "of the way" is optional. ! 182: ! 183: ! 184: These are changes since the TM was issued in June, 1980: ! 185: ! 186: .PS <file ! 187: causes input to come from "file". ! 188: the .PS evaporates, so "file" has to ! 189: have balanced .PS/.PE pairs. ! 190: ! 191: splines are here. To get smooth curves, ! 192: "spline" followed by a set of up, down, from, to, etc. ! 193: causes a B-spline to be drawn using the specified ! 194: points to guide it. the word "then" can be stuck ! 195: in to separate unrelated groups of relative motions. ! 196: Arrows can go on either end. ! 197: E.g., spline from 10,20 up 30 right 40 then left 50 then \ ! 198: down 20 to 100,200 to 300,350 -> ! 199: ! 200: Lines have been generalized somewhat, so you can use the same ! 201: construct as for splines, to specify a path rather than ! 202: just a single segment. ! 203: ! 204:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.