|
|
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.