Edition 8 Version of pic (July 1985).
[unix-history] / usr / src / local / ditroff / ditroff.okeeffe / pic / UNDOC
CommitLineData
e1edd7cd
JA
1May 85:
2
3"solid" is now a valid (though uninteresting) attribute.
4
5Mar 85:
6
7Limited amount of point arithmetic:
8 point +/- point
9works
10
038ad352
JA
11Dec, 1984:
12
13reset varlist
14 resets built-in variables in list to default values.
15 empty list resets everything.
16
17sprintf("format", exprlist)
18 returns a text string suitable for use anywhere "..."
19 can be used.
20
21sh X anything X
22 passes "anything" to a shell for execution after
23 replacing any defined terms in it.
24
25Nov, 1984:
26
27line expr and move expr are treated as line/move by expr
28in current direction.
29
30The -D option has been rendered obsolete -- all output is
31produced with \D commands. The -T option is also
32meaningless -- the output is independent of typesetter.
33
34A new variable "arrowhead" controls printing of arrowheads,
35by defining the number of lines printed in a little fan.
36Default is 2; values around 7 give a filled-in head;
37other values are basically worthless. Arrowheads on arcs
38are now tilted somewhat in an attempt to improve their
39appearance.
40
41"undef foo" removes the definition of foo.
42
43July 1984:
44
45The functions log, exp (both base 10), sqrt, sin, cos, atan2(,),
46max, min (2 arguments only), int, and rand (which returns a
47float random on [0,1)) are now available, stolen directly
48from grap.
49
50Added 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
57In a copy, any .PS or .PE is discarded [sic], so copied files
58can be nested without editing. .PS <file still works
59but its use is discouraged.
60
61In an if, you can also test "string1" == "string2" or
62"string1" != "string2"
63
64The text primitive is now more systematic:
65"..." ".." "." makes an invisible object with
66properties much like a box. Height and width
67are settable: explicit ht and wid modifiers
68affect a specific instance; variables textht
69and textwid affect all subsequent occurrences.
70"textht" is the height of one line, so the height
71of n strings is n*textht.
72
73Added code from Eric Grosse to correctly compute bounding
74box for arcs. Also defined corners for arcs as same as
75corresponding circle, an idea due to Tom Cargill.
76
77Limits on text strings, attributes and objects grow until
78memory limit reached.
79
80Permits E format on input numbers.
81
82Output produced in inches, not units, so somewhat more
83typesetter-independent. The environment variable TYPESETTER
84is examined.
85
86Saves and restores fill state around .PS/.PE.
87
88.PS wid ht
89can be used to set width and height separately for picture;
90default ht is to scale in same proportion as width (as before).
91
92
93Dec 10/81:
94
95The "scale = ..." construction has been reinstated:
96if
97 scale = 100
98or some such appears in a picture, all numbers in that
99and subsequent pictures will be scaled by 1/100.
100Default scale is 1.0.
101
102Oct 8/81:
103
104I have finally installed sensible floating-point
105numbers in pic. This means that the trailing "i",
106as in 1.25i, is no longer necessary: all numbers
107are taken to be in inches.
108Furthermore, expressions may now use numbers like
1091.25 instead of circumlocutions like 5/4.
110It is now best to enter dimensions and positions simply
111in terms of inches, as in "box at 1,2" instead of in terms
112of internal units (which used to be "box at 200,400").
113Internal units are no longer used.
114
115I will be glad to assist with conversion if necessary;
116opic will remain around for a while too.
117
118New May, 1981:
119
1200. 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
1251. Shorthand for points
126 ( place1 , place2 ) now refers to the point ( place1.x, place2.y ),
127 as it does in i.
128
1292. 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
1673. 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
1724. "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
184These 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
191splines 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
200Lines 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