Commit | Line | Data |
---|---|---|
e1edd7cd JA |
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 | ||
038ad352 JA |
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 |