Rename *ll* and *ul* to ll and ul in defint
[maxima.git] / archive / share / unknown / plot2.rch
blob422ae9bbe7ee7bdfb6c2eeffb4621b229c191144
1 CFFK@MIT-MC 07/02/81 17:37:35
2 To: BDB at MIT-MC
3 CC: PLOT2 at MIT-MC
4 OK here is a description of REPLOT(XXX);
5 REPLOT is an FEXPR which means that LISP does NOT
6 evaluation its args.  REPLOT does it when it thinks
7 it should.
8 The plots that REPLOT plots are given by the following
9 list:
10 If atom(xxx) then (if listp(ev(xxx)) then ev(xxx) else [xxx])
11  else (if listp(xxx) then xxx else [xxx]);
12 Thus FOO:BAR; REPLOT(FOO); replots FOO not BAR.  Also
13 note that subscripts get an extra evaluation so that
14 REPLOT(PLOT[FOO]); replots PLOT[BAR] not PLOT[FOO].
15 Thus if you have a sequence of plots to be named and
16 replotted, do P():=(For i thru 10 do (... , nameplot(PLT[i])));
17 RP():=For i thru 10 do replot(PLT[i]);
18 If you need the extra evaluation on the atoms do:
19 APPLY(REPLOT,[FOO]); (which replots BAR.)  So you might have
20 wanted RP(name):=APPLY('REPLOT,[name]);
21 But RP(PLT[i]) will still not work. (Mainly because the plot
22 is stored as the VALUE of the array element and the Macsyma
23 simplifier which knows nothing about plots munges it badly
24 when the arg to RP gets evaluated.  This is not a problem with
25 atoms because the plot is then stored on the property list of
26 the atom.)  All rather muddling.  It might have been a good
27 idea to stay clear of FEXPRs.  They always cause confusion
28 sooner or later.
29 In any case, the reason for the behavior you see is buried
30 in that If atom(xxx)... stuff above (if you think about it.)
31 \x1f
32 Date:  1 APR 1981 1530-EST
33 From: CFFK at MIT-MC (Charles F. F. Karney)
34 Subject: Contours going through grid points.
35 To: MJA at MIT-MC
36 CC: PLOT2 at MIT-MC
38 What I do is to pretend that grid points with Z=0 actually
39 are Z=0+.  This allows me to uniquely determine which cells
40 the contour goes through.  Logically the contours no longer
41 can go through the grid points (although the intercept of the
42 contour with the side of the cell will of course coincide
43 with one of the grid points).  The only time when the position of
44 the contours is effected by this scheme is when there is a flat
45 region (e.g. when neighboring grid points have Z=0).  But
46 then the contour is ill-defined anyway.
47 Your handling of saddle points seems OK, although I'm note
48 sure I understand how you compute the value of the middle of
49 the cell.  I take the mean of the 4 corners.  But just about anything
50 will work as long as the value is invariant to rotation of the
51 cell.
52 \x1f
53 Date: 27 MAR 1981 0923-EST
54 From: CFFK at MIT-MC (Charles F. F. Karney)
55 To: MJA at MIT-MC
56 CC: PLOT2 at MIT-MC
58 The ref is The computer journal vol 15 num 4 p 382 (1972).
59 (This appears half way through PLOT3D just before the definition
60 of the contour plotting functions.)
61 Sorry I'm don't think I know what you mean by a nodal surface.
62 But I can explain what CONTOURPLOT2 does.
63 You give it a 2D array of points (normally a cartesian array
64 but it can be e.g. in polar coords).  Consider 4 neighboring
65 points of the array which are at the 4 corners of a rectangle.
66 CONTOURPLOT2 breaks this rectangle up into 4 triangles by
67 inserting a central point which is the mean of the 4 corners.
68 The entire surface may be considered as a polyhedron
69 made up of triangular faces.  CONTOURPLOT2 then calculates
70 the exact contours for this polyhedral surface.  Special
71 fixes are put in to resolve ambiguities when some faces
72 are horizontal.  As far as I can remember the idea of inserting
73 the central point was mine.  The ref I gave didn't do this
74 which meant that which way the contour turned when entering
75 a rectangle containing a saddle point was ill-defined.  This
76 could have lead to crossing contours.
77 If you like you can mail me an array of numbers and I try
78 CONTOURPLOT2 out on them and mail (by US mail) the results
79 to you.  I believe that all the funny cases can be tried out
80 with small arrays (5 x 5 or so).
81 Macsyma on a TOPS-10.  Forget it, at least for the time being.
82 You need a lot of memory which is not usually available on
83 TOPS-10 systems.  The MACSYMA group is gearing up to license
84 use of Macsyma on VAXes and maybe some other DEC systems. In
85 addition a special purpose computer is being built (for about
86 $60k ?) which will run Macsyma (this is the LISP machine).
87 You can get more details from JM if you are interested.
88 \x1f
89 Date: 17 February 1981 21:11-EST
90 From: James E. O'Dell <JIM at MIT-MC>
91 To: CFFK at MIT-MC
92 cc: PLOT2 at MIT-MC
94     Date: 17 February 1981 08:34-EST
95     From: Charles F. F. Karney <CFFK>
96     To:   JIM
97     cc:   PLOT2
99     I moved the special declarations out of $LABEL.
100     I'm afraid I don't know anything else you have to do to
101     make PLOT2 work on Multics.  Maybe I will be able to fix
102     things if you do have problems though.
104 Thanks a lot. I'll let you know how it works. The Multics code looks
105 very straightforward so.....
106 \x1f
107 CFFK@MIT-MC 02/17/81 08:34:49
108 To: JIM at MIT-MC
109 CC: PLOT2 at MIT-MC
110 I moved the special declarations out of $LABEL.
111 I'm afraid I don't know anything else you have to do to
112 make PLOT2 work on Multics.  Maybe I will be able to fix
113 things if you do have problems though.
114 \x1f
115 CFFK@MIT-MC 02/13/81 08:58:09
116 To: PLOT2 at MIT-MC
117 namefile now returs the truename of its arg.
118 \x1f
119 Date: 12 FEB 1981 1523-EST
120 From: CFFK at MIT-MC (Charles F. F. Karney)
121 Subject: PLOT2 working again.
122 To: INFO-PLOT2 at MIT-MC
124 Thanks to GJC, PLOT2 is working once more.
125 \x1f
126 Date: 12 FEB 1981 1232-EST
127 From: CFFK at MIT-MC (Charles F. F. Karney)
128 To: INFO-PLOT2 at MIT-MC
130 I've managed to break PLOT2.  TEKPLT FASL won't load up.
131 The older versions of TEKPLT also don't work.  Should
132 be fixed by the end of today.  Sorry for inconvenience.
133 \x1f
134 CFFK@MIT-MC 12/18/80 17:23:32 Re: Expansion of previous message.
135 To: EISLER at MIT-MC
136 CC: JPG at MIT-MC, PLOT2 at MIT-MC
137 Suppose you have 3 arrays Z[I,J], X[I], and Y[J] and
138 you want a contour plot with I going from 0 to IM and
139 J from 0 to JM.
140 (1) Declare X and Y by ARRAY(X,FLOAT,IM) and ARRAY(Y,FLOAT,JM)
141 (before fill the arrays up).
142 (2) Define a function ZF(XV,YV):=Z[LOOKUPX(XV),LOOKUPY(YV)];
143 LOOKUPX(XV):=FOR I FROM 0 THRU IM DO IF X[I]=XV THEN RETURN(I) ELSE FALSE;
144 and similarly for LOOKUPY.
145 (3) CONTOURPLOT2(ZF(XV,YV),XV,X,YV,Y);
146 This should do what you want.  Let me know if it works OK.
147 \x1f
148 CFFK@MIT-MC 12/18/80 08:40:29 Re: GRAPH3D(..., CONTOUR);
149 To: EISLER at MIT-MC
150 CC: JPG at MIT-MC, (BUG PLOT2) at MIT-MC, PLOT2 at MIT-MC
151 No, this is not meant to work.  The problem is that the CONTOUR plotter
152 requires a 2*2 matrix of values to work on.  (I.e. if the x-values
153 are xi and the y-values are yj, there must be a z(i,j) for all
154 i and j.  Within this rstriction CONTOURPLOT2 allows you to
155 be fairly general so that the xi and yj need not be uniformly
156 spaced and you are allowed to specify a transformation from
157 one set of (x,y) to another so that the plotted region
158 need not be rectangular.
159 I don't think the PLOT2 USAGE is misleading:  it says that
160 contour plots are available by PLOT3D(..., CONTOUR) and
161 CONTOURPLOT2.  Maybe it should explicity exclude GRAPH3D?
162 Certainly GRAPH3D(..., CONTOUR) should fail more gracefully.
163 \x1f
164 GJC@MIT-MC 10/25/80 15:05:53
165 To: CFFK at MIT-MC
166 CC: PLOT2 at MIT-MC
167 Yes, that stuff was dis-installed, it was taking up core
168 and didn't seem to be too popular. A more general way of
169 collecting that kind of information may be put into macsyma,
170 so thats why the special case was taken out of PLOT2.
171 If anyone depends on the time-check, feature then please tell
174 \x1f
175 CFFK@MIT-MC 10/25/80 14:55:55
176 To: GJC at MIT-MC
177 CC: PLOT2 at MIT-MC
178 It looks as though your TICKS_PER_WARNING stuff in PLOT2 has
179 been dis-installed.  Is that right?  There's no mention of
180 such an action in PLOT2 RECENT.
181 \x1f
182 Date:  6 OCT 1980 0814-EDT
183 From: CFFK at MIT-MC (Charles F. F. Karney)
184 To: YAU at MIT-MC
185 CC: JIM at MIT-MC, PLOT2 at MIT-MC
187 Sorry, there's no easy way to get the tickmarks for
188 log plots arranged as they would be on log-log graph
189 paper.  They would be fairly easy to put in by hand with
190 GRAPH2([.1,.2,.3,...,1,2,3,...,10,20,30,..],
191 [0,.1,0,.1,0,.1....],LOG,SAME)$  (You would have to
192 turn of the regular tickmarks of course, and you should
193 specify FIRST in the ordinary call to PLOT2, and you
194 may want to fiddle around with XMAX and XMIN etc.)
195 \x1f
196 CFFK@MIT-MC 09/12/80 10:26:09 Re: 3D surfaces specfied parametrically
197 To: CMA at MIT-MC
198 CC: JPG at MIT-MC, PLOT2 at MIT-MC
199 No, there is no easy way of getting this done.  You'll
200 have to somehow convert your data to the form Z(X,Y).
201 (Maybe numerically.)  [If the transformation between
202 (A,B) and (X,Y) is well-behaved, it's possible you can
203 manage to do something using the user-defined transformation
204 capability.  But you'll have to factor in the 3-D transformation
205 also.  See PLOT2 USAGE for details.]
206 \x1f
207 JEHUDA@MIT-MC 08/24/80 11:41:38
208 To: PLOT2 at MIT-MC
209 BUGE. I get a printplot on a TK4025 term. insted of a good 
210 plot like on a TK4010. Can you fix this ? Thankyou JEHUDA.
211 \x1f
212 CFFK@MIT-MC 08/16/80 16:14:48
213 To: CMA at MIT-MC
214 CC: PLOT2 at MIT-MC, (BUG GLP) at MIT-MC
215 The problem is that the resolution of the XGP is slightly
216 different in the horiz and vertical directions.  (One
217 is 192/inch and the other is 200/inch.  I forget which is
218 which.  Actually the horiz resolution is NOT constant across
219 the page, as you may have noticed.)  There is no provision
220 is PLOT2 for allowing for this difference (partly to maintain
221 an easy conversion between plots produced for the XGP, Gould
222 printer (which has the same vert. and horiz. resolutions)
223 and Tektronixes).  As a temporary fix I suggest you manually
224 adjust the WINDOW and XMAX etc. to give yourself the scaling
225 you want.  The best place to make a more permanent fix would
226 be in the Gould spooler (which is the program that produces
227 the  scan files for the XGP).  There is already a provision
228 in the spooler for blowing up a plot by a constant scale
229 factor (PLOTSCALE, I believe it's called).  So it shouldn't
230 be too difficult to make the scales different in the two
231 directions.
232 \x1f
233 CFFK@MIT-MC (Sent by CFFK0@MIT-MC) 08/14/80 23:32:35
234 To: ADK at MIT-MC, PLOT2 at MIT-MC
235 I have changed PLOT2 to send out 1 secs worth of
236 padding characters after a screen clear on a tektronix.
237 You should now have no problems with part of your
238 plot disappearing.  (You must ensure that ITS knows
239 your speed.  Check it by doing :TCTYP DES
240 and change it by doing e.g. :TCTYP SPE 1200
242 \x1f
243 Date: 24 JUN 1980 1614-EDT
244 From: GJC at MIT-MC (George J. Carrette)
245 To: INFO-PLOT2 at MIT-MC
246 CC: JPG at MIT-MC, GJC at MIT-MC
248 In the interests of helping people to get their
249 work done faster a time monitoring feature has
250 been added to PLOT2. The variables
251 TICK_TIME_UNIT_IN_SECONDS and
252 TICKS_PER_WARNING control how often an efficiency
253 checking function is run during the evaluation of the
254 functions given to PLOT2. This function checks to see
255 if code can be translated, checks translated code for
256 efficiency (proper MODEDECLAREs), and checks compiled
257 code for the amount of flonum and other consing it is doing.
258 It prints out helpful information. If you are doing
259 things optimaly you will never notice it of course.
261 N.B.=> this uses the TIME alarmclock. Presently only one
262 time alarmclock can be running at the same time, this will
263 be fixed in the future though.
265 -gjc
266 \x1f
267 CFFK@MIT-MC 04/19/80 13:34:05 Re: CONTOURPLOT2
268 To: RHB at MIT-MC
269 CC: PLOT2 at MIT-MC
270 1) If CONTOURPLOT2 sees a constant level, C, and it
271 tries to plot a contour at height, C, then you
272 can think of CONTOURPLOT2 as changing the contour
273 height to C+eps, where eps is a small positive (or is
274 it negative?) number.  THereafter no special actions are
275 taken to handle constant areas.
276 The contours are determined by linear interpolation between
277 neighboring points.  In order to resolve the difficulty
278 caused by saddle points an additional point is computed
279 at the center of each rectangle (this is just taken as
280 the mean of the values at the corners of the square).  Then
281 additional points on the contours are obtained along the
282 diagonals of each rectangle.  In this way the plane is tiled
283 by triangles, and there are no problems with saddle points.
284 2) With the checkerboard pattern of points, you get either
285 smoothed squares or diamonds depending on whether the contour
286 level is higher or lower than the new point introduced
287 in the center of each rectangle.
288 3) You can't really govern where the contour labels go.
289 If you want you can use the corsshairs on the tektronix
290 of position your labels where you want them.  Or else you
291 can try to compute where the contours are yourself.
292 If you want something ready for publication, then set
293 LABELCONTOURS:FALSE$ and then get the draftmen to label your
294 contours for you.  (They can then take care of labelling only
295 certain of the contours, blanking out the contours where the
296 labels are, writing the labels parallel to the contours, and
297 other fancinesses.)
298 4) The precision of the contour labels is governed by
299 PLOTNUMPREC.  Try PLOTNUMPREC:2$ (This governs the prec of
300 all numbers written by PLOT2.)  You might also try
301 CONTOURS:'INTEGER$ or CONTOURS:[0,4,6]$ to stop rounding errors
302 from causing the levels to be odd numbers like 3.999.
303 5) I believe something like:
304 (ZMAX:10.5,ZMIN:-.5,CONTOURPLOT2(....,FIRST),
305 ZMAX:20.5,ZMIN:10.5,REPLOT(TRUE,[1],SAME,LAST));
306 will do what you want.  You may have to fiddle with
307 the ZMAXs and ZMINs a bit.  You might be safer doing
308 CONTOURS:[0,1,2,3...,10] etc.
309 [CONTOURPLOT2([one thing, other thing],....[0,1])$
310 plots the contours for one-thing solid, and for
311 other-thing dashed.  That's not what you want however.]
312 (Addendum to (3):  See documention on EDIT in PLOT2 USAGE
313 for how to use the cross-hairs on the Tektronix.)
314 \x1f
315 Date: 31 MAR 1980 0943-EST
316 From: CFFK at MIT-MC (Charles F. F. Karney)
317 Subject: How to COMPILE functions which call PLOT2 etc.
318 To: INFO-PLOT2 at MIT-MC
320 GJC has asked me to explain the how's and why's of compiling
321 functions which call PLOT2 and friends.
323 It is possible to correctly compile such functions.  However it
324 requires some extra work on the part of the user.  (TRANSLATing, on
325 the other hand, shouldn't cause any problems.)
327 The problem with COMPILing functions that reference PLOT2 is that
328 PLOT2 evaluates its arguments in a special way.  In order for PLOT2
329 to be able to do this the compiler must be told that the variables
330 PLOT2 references are SPECIAL.  (Otherwise the compiler is liable to
331 put the variables in some odd place like a push-down list, which
332 PLOT2 knows nothing about.)  Thus to compile the function
333 P(A,B):=PLOT2(F(X),X,A,B)$ insert the following declarations
334 P(A,B):=(DECLARE([X,A,B],SPECIAL),PLOT2(F(X),X,A,B))$ Then do
335 COMPILE(P)$
337 Notes:
339 That's DECLARE and not MODEDECLARE.  This is a misfeature which will
340 hopefully be fixed shortly by the maintainers of TRANSLATE/COMPILE.
342 It isn't really necessary to declare the X to be SPECIAL.  That
343 happens anyway, since as far as P is concerned X is a global
344 variable.
346 It's always OK to declare a variable SPECIAL.  However compiled code
347 involving lots of SPECIAL variables is orders-of-magnitude slower
348 than the same code without any SPECIAL variable.  This means that
349 that you should try and split up your program so that the lengthy
350 calculations are done in a function which doesn't call PLOT2 and so
351 which doesn't need to reference special variables.  The function
352 which calls PLOT2 should be very simple so that you don't care
353 whether the compiled version is very efficient or not.  (Indeed, you
354 perhaps should not bother compiling such a function at all.  E.g.
355 there is negligible speed-up gained in running the function P above
356 when compiled.)  
358 It should be possible for the COMPILE command to insert nearly all
359 the SPECIAL declarations itself (leaving only some unusual cases
360 which need individual attention).  Maybe this will happen some day.
361 But don't hold your breath.
362 \x1f
363 CFFK@MIT-MC 03/28/80 19:31:05
364 To: PLOT2 at MIT-MC, HEDI at MIT-MC
365 CC: RYD at MIT-MC
366 PLOT2 supports output to the Versatec (for users at PPL).
367 The allowable PLOTMODEs for specifying this are V, VERSY,
368 and VERSATEC.  As far as PLOT2 goes this is exactly the
369 same as PLOTMODE:XGP$ except that when a HARDCOPY is requested
370 the GLP spooling program is told to do an OUTPUT:VERSATEC
371 (instead of OUTPUT:XGP).  Ask me for details of how to
372 move the files created by GLP over to PPL and how to get
373 them plotted.
375 [RYD: If you have 100 dot/inch Versatecs at LASL it would
376 be fairly easy to get the plots out on them.]
377 \x1f
379 GJC@MIT-MC 03/24/80 04:24:02
380 To: CFFK at MIT-MC, CL at MIT-MC, JPG at MIT-MC, JLK at MIT-MC
381 I changed NAMEPLOT and PLOT2P and others in the file CFFK;APLOT2 
382 so the NAMEPLOT(<FOO>) would not use the value cell to store
383 the plot, if <FOO> is an atom. If <FOO> is an array, then
384 it still works the same as always. If you are curious as to
385 where I put the plot, I did ($PUT <FOO> '$PLOT) which is as
386 good a place as any. By the way, NAMPLOT(FOO) didn't used to
387 work with *RSET T. because quote-subs used to do
388 (MEMQ 'ARRAY (CDAR FOO)). This can cause real trouble, because
389 the CDAR of a symbol is a list whos CDR is the VALUE of the
390 symbol, which might be a list containing the atom ARRAY.
392 I checked out TEKPLT and PLOT3D, and did not find any other
393 places in the code that depended on the fact that the plot
394 was stored in the value cell of the symbol, so I installed it
395 on SHARE.
397 -gjc
398 \x1f  CFFK@MIT-MC 03/12/80 15:44:33
399 DEH wants to be able to plot characters instead of symbols.
400 Maybe there should be a switch saying to use the character
401 which is normally substituted for the symbol in PLOTMODE(P)$
402 In the meantime, this is what I told him:
403 CFFK@MIT-MC 03/12/80 14:06:21 Re: Labelling with letters.
404 Here's how to do it.  (Not very beautifully I'm afraid.)
405 Supposing you have a curve F(X) you want plotted between
406 X0 and X1, and you want it marked at either end with an "A",
407 then you would do:
408 (PLOT2(F(X),X,X0,X1,FIRST),
409  ENTERGRAPH(),
410  FOR X IN [X0,X1] DO 
411   GHPRINT("A",?TEK\-X(X),?TEK\-Y(F(X)),1),
412  CLEAR:WAIT:TRUE,
413  EXITGRAPH())$
414 The extension to many curves should be obvious.  The functions
415 GHPRINT, ?TEK\-X, etc. are documented in SHARE;PLOT2 USAGE
416 if you need to know more about what's going on.
417 Let me know whether this works (it should, but I haven't
418 tried it).  I've put you request to allow alphabetic symbols
419 on my list of things to do.  However since it may not get
420 done for a month or two, the above should serve.
421 \x1f
422 Date:  1 MAR 1980 1205-EST
423 From: CFFK at MIT-MC (Charles F. F. Karney)
424 Subject: LABEL vs. CONCAT
425 To: INFO-PLOT2 at MIT-MC
427 I notice a lot of people using CONCAT for a plot label, when LABEL would
428 do the job easier.  Instead of doing:
429 PLOT2(...., FALSE,FALSE,CONCAT("A=",A," B=",B,...))$
431 PLOT2(...., FALSE,FALSE,LABEL(A,B,...))$
432 This will make a title "A=5 B=3.14 ..." (or whatever).
433 Full description of LABEL can be found in SHARE;PLOT2 RECENT  message of
434 12/29/77.
435 \x1f
436 Date:  1 MAR 1980 1126-EST
437 From: CFFK at MIT-MC (Charles F. F. Karney)
438 Subject: NAMEPLOT(PLT[J])
439 To: INFO-PLOT2 at MIT-MC
440 CC: GJC at MIT-MC
442 GJC has pointed out that some people do things like:
443 APPLY('NAMEPLOT,[CONCAT("PLT-",J)]), and that such
444 constructions will no longer work once double-quoted
445 strings evaluate to themselves (and thus become unassignable).
446 The way to get around this problem is to say:
447 NAMEPLOT(PLT[J]) (as in the previous case J is evaluated).
448 (In any case the latter form is preferable, since it is shorter
449 and clearer.)
450 \x1f
451 BROWN@MIT-MC 01/22/80 12:20:32
452 To: PLOT2 at MIT-MC
453 DO YOU SUPPORT THE HP 2647A INTELLIGENT GRAPHICS TERMINAL? ALSO
454 HOW ABOUT THE TEKTRONIX 4051?-I AM GOING TO BUY ONE OR THE OTHER BUT LIKE THE
455 HP BETTER IF IT IS SUPPORTABLE
456 \x1f
457 Date: 12 DEC 1979 1904-EST
458 From: CFFK at MIT-MC (Charles F. F. Karney)
459 To: INFO-PLOT2 at MIT-MC
461 PLOT2 now works for Tektronix 4025 terminals.  The
462 way to do this is to set PLOTMODE:'TEK$ TEK4025:TRUE$
463 and then PLOT2( ...  ) or whatever.  The Tektronix 4025
464 is supported by :CRTSTY TK4025.  The terminal has
465 to be told to expect the regular Tektronix graphics
466 that is used by the Tektronix 4010 terminal.
467 How this is done is described below by KAT.
470 In the 4025 the screen is split into two
471 regions, the work space and the monitor.
472 The monitor is the space that communicates with the host
473 unless the host is transmitting graphics, in which case
474 the graphics goes to the work space. The user has to
475 specify the size of the work space (which specifies the
476 size of the monitor by giving it whats left) and
477 defining the a graphics region in the work space.
478 To have the 4025 accept 4010 graphic an additional
479 commmand is needed, the shrink command.
481 So to get the 4025 to do 4010 graphics the following
482 TEK comands are needed (` is the command character 
483 that crtsty uses to communicate with the terminal): 
484         `wor n <cr> (where n is the size of the workspace
485                 I use n=20 which leaves 13 lines for
486                 the mon.
487         `graphic 1,35 <cr> (this makes the graphic region
488                        occupy the first 35 lines of the
489                        workspace, the args to graphic
490                        can  define the grahics to be
491                         anywhere in the workspace as
492                        long as it defines 35 lines cause that
493                        is the size of the 4010 graphics region-
494                        ie graphic 35,69 would be fine. 
495                          this does not bother
496                         the fact that the workspace is 20
497                         since the picture can be scrolled into veiw,
498                         the wor command just defines the size of the
499                         visible portion of the workspace
500         `shrink <cr>  (this tells the 4025 to behave like the 4010)
502 I think that the above three commands are best done by the
503 users because
504 1) the `wor command also has the effect of erasing the workspace
505   and the monitor which might not be desired.
506 2) the size of the monitor depends on whether the user needs to see
507   a lot of the host interaction or is just executing plots.
508 \x1f
509 Date: 15 NOV 1979 1727-EST
510 From: CFFK at MIT-MC (Charles F. F. Karney)
511 To: INFO-PLOT2 at MIT-MC
513 The way SAVEPLOTS chooses its defaults has changed.  If the
514 first arg. to SAVEPLOTS is a list, then it is merged in with
515 the current file defaults to obtain the full filespec. (This
516 is th same as before.)  However if the first arg. is not a
517 list then the filespec. used is [PLOTS,>,''DEVICE,''UNAME].
518 (This will normally be [PLOTS,>,DSK,uname].  DEVICE and UNAME
519 are also used by SAVE in a similar manner.)  SAVEPLOTS always
520 sets the file defaults.
521 \x1f
522 CFFK@MIT-MC 09/26/79 21:59:39
523 To: KMP at MIT-MC
524 CC: PLOT2 at MIT-MC
525 I am using PLOTMODE(P)$  |But that shouldn't make any difference.
526 \x1f
527 Date: 7 AUG 1979 1544-EDT
528 From: CFFK at MIT-MC (Charles F. F. Karney)
529 Subject: CALCOMPNUM changed to PLOTNUM
530 To: INFO-PLOT2 at MIT-MC
532 The variables CALCOMPNUM, CALCOMPNUM0, and CALCOMPNUM1 have been renamed
533 PLOTNUM, PLOTNUM0, and PLOTNUM1.  (Supposedly more sensible names.)
534 In order to assist in the changeover, an attempt to set one of the old
535 variables will print a warning message, and then set the new variable.
536 (Thus CALCOMPNUM:100$ PLOTNUM; ==> 100 .  But note that PLOTNUM:20$
537 CALCOMPNUM; ==> 100 still.)  Both PLOT2 USAGE and PLOT2 DEMO have been
538 changed appropriately.
539 \x1f
540 Date: 28 JUL 1979 1752-EDT
541 From: CFFK at MIT-MC (Charles F. F. Karney)
542 Subject: WORLDPLOT
543 To: INFO-PLOT2 at MIT-MC
545 The data files for WORLDPLOT have been restored from the Datacomputer,
546 so WORLDPLOT should work once more.
547 \x1f
548 Date: 4 MAY 1979 1236-EDT
549 From: CFFK at MIT-MC (Charles F. F. Karney)
550 Subject: Using PLOT2 through CRTSTY
551 To: INFO-PLOT2 at MIT-MC, INFO-CRTSTY at MIT-MC
553 PLOT2 (Macsyma's plotting package) should now work
554 through CRTSTY when PLOTMODE:'DISPLAY$  Please let
555 me know if there are any problems.
556 \x1f
557 Date: 29 MAR 1979 0459-EST
558 From: JONL at MIT-MC (Jon L White)
559 Subject: Yet another COMPLR bug bites the dust!
560 To: JLK at MIT-MC, SK at MIT-MC, CFFK at MIT-MC
561 CC: JONL at MIT-MC, INFO-PLOT2 at MIT-MC, (BUG COMPLR) at MIT-MC
563 Well, there was this obscure compiler bug evident only in the
564 case of LESSP with more than 2 args and with verrry  special conditions.
565 That's why poooor FFORMA hasn't been compiled for more than three years.
566 But all is well now.  Hopefully!  Just in case there are other cases
567 of FFORMA that lose under the current compiler, the age-old
568 version is on AI:LIBLSP;FFORMA OFASL
569 \x1f
570 Date: 28 MAR 1979 1538-EST
571 From: JONL at MIT-MC (Jon L White)
572 Subject: FFORMA
573 To: JLK at MIT-MC
574 CC: CFFK at MIT-MC, SK at MIT-MC, INFO-PLOT2 at MIT-MC, JONL at MIT-MC
576 I have retrieved the FASL from a few days ago - for whatever
577 reason, the FASL coming from the current compiler for this
578 file (LIBDOC;FFORMA >) has some terrible bug in it.  As of yet,
579 I'm not sure why, whether it is because there is some change
580 in the source language over the pas five years (FFORMA was written
581 in 1974), or whether there is an insidious bug in the compiler.
582 My apologies for the inconvience this has caused.
583 \x1f
584 Date: 27 MAR 1979 1611-EST
585 From: JLK at MIT-MC (John L. Kulp)
586 To: JONL at MIT-MC
587 CC: CFFK at MIT-MC, INFO-PLOT2 at MIT-MC
589 LIBLSP;FFORMA is broken. It seems to multiply things randomly by 6.
590 The PLOT2 package in MACSYMA depends on this for doing labeling of
591 plots.  Please fix asap.  Thanks.
592 \x1f
593 Date: 25 FEB 1979 1419-EST
594 From: JLK at MIT-MC (John L. Kulp)
595 To: R11-USERS at MIT-MC
596 CC: INFO-PLOT2 at MIT-MC
598 The default for PLOTSCALE in MACSYMA and for ARDS plots printed using :GLP
599 is now 1.0 rather than 1.75 or something random.
601 Also, there is more documentation under :INFO GLP about using the Gould
602 with the new spooler.
603 \x1f
604 CFFK@MIT-MC 12/15/78 09:09:48 Re: XGPSAVE
605 To: KMP at MIT-MC
606 CC: JPG at MIT-MC, (FILE [SHARE;PLOT2 RECENT]) at MIT-MC
607 This has been flushed, as noted in SHARE;PLOT2 RECENT.  It has been
608 superceded by PLOTMODE(XGP)$ PLOT2(...)$ HARDCOPY()$ (or linefeed if
609 you are also plotting on the terminal).    (This queues the file for you.)
610 Alternatively you can do NAMEFILE(filename)$ and at a later time do
611 HARDCOPY([filename],XGP)$  Let me know if you have problems.
612 \x1f
613 CFFK@MIT-MC 08/26/78 22:43:58
614 To: INFO-PLOT2 at MIT-MC
615 You have been selected for inclusion in the INFO-PLOT2 mailing
616 list.  Here is the most recent message.  If you do not wish to
617 be on this mailing list, remove your name from the file,
618 CFFK;PLOT2 LIST, or send a not via :BUG PLOT2
620 CFFK@MIT-MC 08/26/78 22:08:23 Re: CONTOURPLOT2
621 To: INFO-PLOT2 at MIT-MC
622 [1] The way the contour levels are chosen when CONTOURS is an
623 integer has been changed.
625 [a] If CONTOURS is a positive integer (the default value is
626 20), then approximately CONTOURS contours will been drawn
627 and the levels will be "nice" values.  ("Nice" means in multiples
628 of a*10^n, where "a" is 1, 2, or 5.  The levels are computed by
629 the same function that determines where to put the tick marks on
630 the axes.)
632 [b] If CONTOURS is a negative integer then ABS(CONTOURS) evenly
633 spaced contours will be drawn.  In this case the levels will be
634 at "nasty" values, and you may want to set LABELCONTOURS to
635 FALSE, to suppress the printing of long numbers on the contours.
636 (This is what used to happen with postive CONTOURS.)
638 [2] An additional small change is that PLOT2 knocks a trailing
639 ".0" off the numbers it prints.  Thus you get e.g.
640 "Xmin = 2 ..." instead of "Xmin = 2.0 ...".  Is this the right
641 thing to do?
642 \x1f
643 CFFK@MIT-MC 08/26/78 22:08:23 Re: CONTOURPLOT2
644 To: INFO-PLOT2 at MIT-MC
645 [1] The way the contour levels are chosen when CONTOURS is an
646 integer has been changed.
648 [a] If CONTOURS is a positive integer (the default value is
649 20), then approximately CONTOURS contours will been drawn
650 and the levels will be "nice" values.  ("Nice" means in multiples
651 of a*10^n, where "a" is 1, 2, or 5.  The levels are computed by
652 the same function that determines where to put the tick marks on
653 the axes.)
655 [b] If CONTOURS is a negative integer then ABS(CONTOURS) evenly
656 spaced contours will be drawn.  In this case the levels will be
657 at "nasty" values, and you may want to set LABELCONTOURS to
658 FALSE, to suppress the printing of long numbers on the contours.
659 (This is what used to happen with postive CONTOURS.)
661 [2] An additional small change is that PLOT2 knocks a trailing
662 ".0" off the numbers it prints.  Thus you get e.g.
663 "Xmin = 2 ..." instead of "Xmin = 2.0 ...".  Is this the right
664 thing to do?
665 \x1f
666 CFFK@MIT-MC 05/12/78 17:44:09
667 This feature was put in long ago, but never got documented somehow.
668 There is a flag PLOT2ERROR, which governs what happens when PLOT2 hits
669 an error in trying to evaluate a point.  If PLOT2ERROR is TRUE (the 
670 default) an error occurs and PLOT2 exits.  However if DEBUGMODE is TRUE
671 you can ask for the value of PLOT2ERROR which is temporally bound to
672 the form being evaluated when the error occurs.
673 If PLOT2ERROR is a floating point number then that number will be used
674 as the value of the erroneous form.
675 Proposed extension:
676 If PLOT2ERROR is FALSE then the value of PLOT2UNDEFINED is used as
677 the value of the erroneous point.  (An error if PLOT2UNDEFINED isn't
678 a number.)
679 \x1f
680 BEE@MIT-MC 05/12/78 07:45:11
681 To: INFO-PLOT2 at MIT-MC
682 There is a new feature for two-dimensional graphs in PLOT2. These are plots produced
683 by PLOT2, PARAMPLOT2, and GRAPH2. If the function that is being plotted returns
684 the value PLOTUNDEFINED, then that point will not be plotted at all, and the line
685 will be discontinuous. This is to implement inhibition of plotting in areas
686 of discontinuities, or where the function is undefined. This will be extended
687 to plot3D and contourplot2 as soon as I can figure how to do it.
688 \x1f
689 CFFK@MIT-MC 03/05/78 12:58:20 Re: For interest only! May be ignored.
690 To: INFO-PLOT2 at MIT-MC
691 The temporary .PLOT. files that are needed when pltting on the
692 Gould or XGP, are now put on the .TEMP. directory (instead of
693 the user's own directory or USERS;).  This change made so that 
694 old files do not stay around longer than necessary (.TEMP.; gets
695 reaped whenver the system comes up).  This change should not affect
696 anyone's use of PLOT2.
697 \x1f
698 CFFK@MIT-MC 01/30/78 23:39:44
699 To: PLOT2 at MIT-MC, (BUG PLOT2) at MIT-MC, GRS at MIT-MC
700 To: PEREIR at MIT-MC, MEISS at MIT-MC
701 There is a flag called CRCLEAR whose default value is TRUE, meaning
702 PLOT2 should clear the screen on receipt of a carriage return.
703 If you need to disable this do CRCLEAR:FALSE$  (LBL guys must do this
704 when going through their machine since all their lines are terminated
705 by returns.)
706 \x1f
707 CFFK@MIT-MC 01/06/78 12:19:42 Re: LOGLOG, TOP, BOTTOM, LEFT, RIGHT
708 To: INFO-PLOT2 at MIT-MC
709 There are 5 new keywords that can appear in the optional args to PLOT2,
710 GRAPH2, REPLOT etc.
711 1) LOGLOG.  This is the same as the keyword LOG (and gives you a LOG-LOG
712 plot.)
713 2) TOP, BOTTOM, LEFT and RIGHT.  These govern where in your plotting
714 window the plot will actually appear.  E.g. TOP and LEFT mean put the
715 plot in the top left corner, BOTTOM means in the bottom half of the
716 window, RIGHT in the right half, etc.  These flags are non-sticky,
717 meaning that REPLOT doesn't remember them, although it recognizes them.
718 The gap left between the plots you get using these flags is
719 PLOTGAP, which has a default value of 20.
721 Example:
722 (PLOT2(X,X,0,1,TOP,FIRST),PLOT2(1-X,0,1,BOTTOM,LAST))$
723 PLOT2(SIN(X),X,-%PI,%PI,DONT)$
724 REPLOT(TRUE,TOP,LEFT)$ /* replots in top left corner */
725 REPLOT()$ /* replots in the whole window */
727 REPLOT4 could be defined by:
728 REPLOT4(PL1,PL2,PL3,PL4):=BLOCK([DATEPLOT:FALSE,DP:DATEPLOT,PLOTGAP:20],
729                                 REPLOT(PL1,TOP,LEFT,FIRST),
730                                 BLOCK([DATEPLOT:DP],
731                                       REPLOT(PL2,TOP,RIGHT)),
732                                 REPLOT(PL3,BOTTOM,LEFT),
733                                 REPLOT(PL4,BOTTOM,RIGHT,LAST))$
735 Note the flag SAME means to keep the same window as well as the same
736 scale.  Thus SAME overrides these flags.  If you want to preverse the
737 scale, the thing to do is to do all the plots but the first inside a
738 BLOCK([YMAX:YMAX1,YMIN:YMIN1,XMAX:XMAX1,XMIN:XMIN1], .... )
739 \x1f
740 CFFK@MIT-MC 12/29/77 21:42:44 Re: Improved (I hope) handling of labels.
741 To: INFO-PLOT2 at MIT-MC
742 The action PLOT2 takes when it comes across something which could
743 be a label in the optional arguments list of a plotting function
744 is as follows:
745 If it is (a) an atom, (b) of the form 'FOO or '(...),
746 (c) of the form EV(...) or CONCAT(...) or LABEL(...),
747 then the label gets evaluated, else it is used literally.
748 (Previous it only got evaluated in case (a).)
749 Notes:
750 (1) The evaluation of 'FOO is FOO for all FOO, so if you
751 want to get a label of FOO and FOO has a value use 'FOO.  ("FOO"
752 also works in most instances.)
753 (2) There is a new function LABEL which is a hairy label maker
754 for PLOT2.  It takes any number of arguments and returns an atom
755 containing the arguments concatenated together.  It differs from
756 CONCAT in the following respects:
757         (i) It sticks spaces between the items.
758         (ii) The arguments needn't be atoms.
759         (iii) if an argument is of the form 'FOO, then FOO appears
760         in the result.
761         (iv) Otherwise it evaluates the arguments. Then if the
762         evaluation is different from the argument <arg>=<evaluation>
763         appears in the result, else just <evaluation>.
764         (v) In (iv) if <evaluation> is a floating point number then
765         only PLOTNUMPREC sig. figs. of it appear in the answer.
766 (3) LABEL is spelt "LABEL" not "LABLE".
767 (4) The label is evaluated inside an ERRCATCH, so if you have an
768 error in the evaluation of your label, you will see an error message,
769 but the plot will still come out (with no label where you goofed).
771 Example:
772 PHASE:EV(%PI,NUMER)$
773 AMPLITUDE:2$
774 PLOTNUMPREC:5$
775 PLOT2(SIN(X)+A,X,0,2*%PI,LABEL(AMPLITUDE,PHASE))$
776 produces a plot with an XLABEL of "AMPLITUDE=2 PHASE=3.1416"
778 If LABEL doesn't do the right thing in your opinion, now is the
779 time to complain.  For instance there is no way to get just
780 <evaluation> in the result of LABEL.  If you can think of a way
781 to do this, let me know. What about commas in place of spaces?
782 \x1f
783 BEE@MIT-MC 12/29/77 17:22:17
784 To: INFO-PLOT2 at MIT-MC
785 The bug causing betas to appear on plots should be fixed.
786 \x1f
787 JLK@MIT-MC 12/20/77 16:55:05
788 To: INFO-PLOT2 at MIT-MC
789 The FASL files for the PLOT2 package have been renamed.
790 Basically the NFASL files are now FASL, and the FASL files are OFASL.
791 For the moment, links exist from the NFASL files to FASL but these
792 will be flushed eventually.  Please update your init files, etc.
793 \x1f
794 CFFK@MIT-MC 12/17/77 21:38:54 Re: Minor improvements
795 To: INFO-PLOT2 at MIT-MC
796 [1] LOADPLOTS prints "FOO PLOTS being loaded" only if LOADPRINT is TRUE
797 or LOADFILE.
798 [2] REPLOT if it has to load the plot from a file will only say so if
799 LOADPRINT is TRUE or AUTOLOAD.
800 [3] The Macsyma simplifier leaves PLOTS alone.  Thus it is possible to
801 rename plots by FOO:BAR$ (assuming BAR is a PLOT).  This is not a
802 recommended practise however, since FOO will not be on the PLOTS list,
803 and KILLPLOTS(BAR) will also kill FOO (since they share the same
804 storage).
805 \x1f
806 BEE@MIT-MC 12/03/77 11:35:48
807 To: INFO-PLOT2 at MIT-MC
808 It is now impossible to have both plotmode as XGP and GOULD at the same time. Before
809 this used to be necessary to get plots for the XGP. Now plotmode(XGP) is exactly like
810 plotmode(GOULD) except that the output goes to the XGP instead. This might cause
811 some errors in batch files of people who used to say plotmode(X,G) or something
812 like that.
813 \x1f
814 BEE@MIT-MC 12/01/77 14:12:34
815 To: INFO-PLOT2 at MIT-MC
816 A new tekplt package has been installed. The new package has some variables renamed for
817 consistency. This is a listing of the variables that have changed.
819 Old variable    New variable    What it does
820 --------------------------------------------
821 GOULDTHICK      PLOTTHICK       controls how thick the lines are on XGP or GOULD plots
822 GOULDSCALE      PLOTSCALE       controls the scaling of a plot on XGP or GOULD
823 XGPLFTMAR       PLOTLFTMAR      controls the lftmar on plots
824 XGPBOTMAR       PLOTBOTMAR      controls the bottom margin on plots
826 These should be the only changes visible.
827 \x1f
828 JLK@MIT-MC 11/21/77 17:05:07
829 To: INFO-PLOT2 at MIT-MC
830 Does anyone use the XGPSAVE command?  If so, you most likely want to be
831 using PLOTMODE(XGP,...) instead.  In any case, I am considering changing
832 it to use the same format used by GOULD plots (i.e. it will no longer use
833 the XP program).  If there is a demand for it, the old style XGPSAVE
834 command may be kept around as OLDXGPSAVE.  It might be more useful to
835 have a command called XGPFILE which takes a file saved by NAMEFILE and
836 prints it on the XGP.  GOULDFILE would be good too.  Then there would be
837 no need for XGPSAVE.
838 Comments?
839 \x1f
840 BEE@MIT-MC 11/05/77 15:09:05
841 To: INFO-PLOT2 at MIT-MC
842 PLOT2 now outputs plots directly to the XGP, as mentioned in a previous message.
843 There are two new variables XGPLFTMAR and XGPBOTMAR. These adjust the bottom margin
844 and leftmargin for the XGP plots. These default to a value such that the
845 plots will fit comfortably on an 8 1/2 x 11 page.
846 \x1f
847 JLK@MIT-MC 11/04/77 17:38:07
848 To: INFO-PLOT2 at MIT-MC
849 There is now a simpler way to get plots out on the XGP (and they look
850 better).  Simply do PLOTMODE(XGP, ...) where ... is the correct plot
851 mode for your terminal (i.e. GR for Grinnell TV's, T for Tektronix, or
852 D for character display terminals like VT52's).  Then you can use
853 linefeed at the end of the display of a plot, or HARDCOPY(); to cause
854 a hardcopy to be submitted  to the XGP (it is processed by the Gould
855 spooler first).  If AI is up and the queuing for the XGP is successful,
856 you will receive a message from the XGP spooler when your plot is
857 printed.  If AI is down, your plot will be processed into an XGP scan
858 file,  .GLPT.; > SCN, and the Gould spooler will send you a warning
859 message telling you that AI is down.  You must copy the SCN file to AI
860 yourself when AI comes up and queue it by doing
861         :XGP ;SCAN AI:dir;* SCN
862 where dir is the directory on AI to which you copied the files (use
863 MACSYM;  if you don't know of any other directory to use).
865 If you use the NAMEFILE command instead of HARDCOPY or linefeed,
866 you can print the plot file later by doing
867         :GTPL dir;fn1 fn2/a/o[x]
868 when dir, fn1, fn2 are the directory, first file name, and second file
869 name of the plot file stored with NAMEFILE.
871 XGPSAVE may be flushed in the future if there is no further demand for
873 \x1f
874 CFFK@MIT-MC 10/18/77 23:10:32 Re: MINOR CHANGE TO REPLOT4
875 To: INFO-PLOT2 at MIT-MC
876 REPLOT4 ONLY PUTS THE DATE ON THE TOP RIGHT PLOT (ASSUMING DATEPLOT:
877 TRUE$)  THE EXCEPTION IS IF YOU ONLY ASK REPLOT4 TO PLOT 1 PLOT (BY GIVING
878 IT ONLY 1 ARGUMENT) IN WHICH CASE THE DATE GOES ON THAT PLOT.
879 \x1f
881 JLK@MIT-MC 10/12/77 12:45:42
882 Re single date for REPLOT4, it would also be nice to have a single title
883 as well (of course it doesn't make much sense to allow single x and y
884 labels, but allowing both individual and overall titles would be nice).
885 \x1f 
886 JLK@MIT-MC 10/11/77 23:00:55
887 To: (BUG PLOT2) at MIT-MC
888 It would be nice if there were a way to get a single DATE printed out
889 on REPLOT4 plots, rather than having it redundantly printed 4 times, once
890 on each plot.  A single date in the upper right would suffice.
891 \x1fCFFK@MIT-MC 10/05/77 21:49:10
892 To: EAK at MIT-MC
893 CC: PLOT2 at MIT-MC, CBF at MIT-MC
894 THE SLEEP PRIOR TO THE OUTPUT OF THE ENTER GRAPHICS COMMAND
895 HAS BEEN CHANGED TO AN OUTPUT OF 2 SPACES.
896 \x1f
897 CFFK@MIT-MC 09/22/77 20:57:21
898 To: EAK at MIT-MC
899 CC: PLOT2 at MIT-MC, JLK at MIT-MC
900 Well I've implemented the stop and start sequences
901 for your tektronix.  You should do PLOTMODE(TEK) (assuming that isn't 
902 already the default) and TEK4662:TRUE$ (this can be doen at any time).
903 Could you give it a try?  I have no way of checking it where I am.
904 \x1f
905 JLK@MIT-MC 08/31/77 23:53:16
906 To: INFO-PLOT2 at MIT-MC
907 The bug were echoing of type-in gets permanently turned off, has
908 hopefully been fixed.  This happened only when your MACSYMA was
909 continued while the plot was being computed (I.e. the TTY returned
910 to DDT).  If further occurrances are observed, please send bug mail.
911 \x1f
912 CFFK@MIT-MC 07/14/77 11:32:54 Re: PLOT2 in NEWIO MACSYMA
913 To: INFO-PLOT2 at MIT-MC
914 I've encountered a couple of bugs with the NEWIO version of
915 PLOT2.  Both are fixed now.  Be on the lookout for others and
916 let me know of them as soon as possible.
917 \x1f
918 CFFK@MIT-MC 06/18/77 21:38:24 Re: Pattern generation using Fast Fourier Transforms
919 To: INFO-PLOT2 at MIT-MC
920 The following little program might amuse you.  It plots pretty patterns.
921 (LOADFILE(FFT,FASL,DSK,SHARE),LOADFILE(ARRAY,FASL,DSK,SHARE));
922 (ARRAY(FR,FLOAT,255),ARRAY(FI,FLOAT,255));
923 PP():=(FILLARRAY(FR,[0.0]),FILLARRAY(FI,[0.0]),
924        THRU 2 DO FR[RANDOM(256)]:1.0,
925        FFT(FR,FI),
926        GRAPH2([FR,[FR[0],FR[255]]],[FI,[FI[0],FI[255]]]));
927 DO PP();
928 \x1f
929 CFFK@MIT-MC 06/13/77 15:35:31
930 To: INFO-PLOT2 at MIT-MC
931 [1] PLOTRESET should no longer give Illegal REMVALUE attempt if e.g.
932 YMAX has a value but is not on the VALUES list.
933 [2] If CALCOMPNUM0 has a numeric value, then the 3D plotting functions
934 (PLOT3D, CONTOURPLOT2) will use that value instead of CALCOMPNUM.  The
935 default is for CALCOMPNUM0 to be unbound;  thus it is compatible with
936 the old scheme.
937 [3] Quitting in the middle of a plot resets CLEAR and WAIT to TRUE;
938 thus when quitting from inside a multiple plot [PLOT2(..., FIRST),
939 ... , PLOT2(..., LAST)], you will not be left in an abnormal state.
940 \x1f
941 CFFK@MIT-MC 06/13/77 11:52:43
942 To: INFO-PLOT2 at MIT-MC
943 PLOT2 tries not to change the DDT defaults for ^F and ^R (:PRINT ).
944 Changed functions are HARDCOPY, XGPSAVE, NAMEFILE etc.
945 \x1f
946 CFFK@MIT-MC 06/08/77 22:26:00
947 To: INFO-PLOT2 at MIT-MC
948 APD wants to include some of the PLOT2 documentation in the new MACSYMA
949 manual.  PLOT2 USAGE is probably to long as it stands, so I would
950 welcome suggestions as to what to include and leave out.  Suggestions
951 for examples also welcome.
952 \x1f
953 JLK@MIT-MC 05/31/77 15:20:38
954 To: PLOT2 at MIT-MC
955 DON'T USE REMVALUE IN PLOTRESET.
956 \x1f
957 CFFK@MIT-MC 05/29/77 12:17:19
958 To: PLOT2 at MIT-MC
959 Distinguish AI-TVs and Grinnells.
960 \x1f
962 JLK@MIT-MC 05/18/77 16:51:18
963 It would be nice if at the end of a plot, typing ? gave you a little menu
964 of options (in case you forgot).  Looking breifly at PLOT2 USAGE I can see
965 I better read over it, since there are many things there I was not aware of!
966 (or I have forgotten about...)
967 \x1f    cffk@MIT-MC (Sent by JLK@MIT-MC) 05/20/77 13:29:39
968 To: FCR at MIT-MC
969 CC: PLOT2 at MIT-MC
970 You could store the numbers in the lists in arrays (Use FILLARRAY
971 in ARRAY FASL DSK SHARE).  Of course it might take as long to
972 store the numbers in the arrays, as it takes for GRAPH2 to deal
973 with the lists.  You could win better, if you stuck your data
974 in arrays rather than lists in the first place.
975 \x1f
976 cffk@MIT-MC (Sent by JLK@MIT-MC) 05/20/77 13:18:08
977 To: FCR at MIT-MC
978 CC: PLOT2 at MIT-MC
979 You mean GRAPH2([1.0,2.0 .. ], .. );  as compared with GRAPH2(<array>, ..);
980 Second one is a lot more effecient (of <array> must be declared floating).
981 If mean PLOT2(list[I],I, .. ); as compared with PLOT2(arr[I],I, .. );
982 then they are equally ineffecient.
983 \x1f
984 CFFK@MIT-MC 05/18/77 17:00:33
985 To: PLOT2 at MIT-MC
986 Can't do shading or nice numbers or writing on plot.
987 \x1f
988 CFFK@MIT-MC 05/17/77 00:52:43
989 To: PLOT2 at MIT-MC
990 Implement CALCOMPNUM0 for 3D plots
991 \x1f
992 CFFK@MIT-MC 05/15/77 23:06:12
993 To: INFO-PLOT2 at MIT-MC
994 I've rearranged the files that PLOT2 lives in.  Please let me
995 know of any problems.  Those with autoload properties in their
996 MACSYM (INIT) files:  Please note that the files now live on
997 SHARE;.  Change your (INIT) files to reflect SHARE;PLOT2 LISP.
998 There will be links on my directory to the relevent files on
999 SHARE; for a while.
1000 \x1f
1001 CFFK@MIT-MC 05/15/77 21:55:27
1002 To: PLOT2 at MIT-MC
1003 fix contours to work like ticks
1004 \x1f
1005 CFFK@MIT-MC 05/11/77 21:38:30
1006 To: FFM at MIT-MC
1007 CC: PLOT2 at MIT-MC
1008 You can partially win on AI-TV's by doing PLOTMODE(DISPLAY,XGP); or PLOTMODE
1009 (XGP,DISPLAY);  (These have slightly different meanings -- look in the document-
1010 ation, or experiment.)  Then the plots will come out as crumby character
1011 plots on the TV's but internally a full resolution plot is remembered about.
1012 The beautiful full resolution plot can then be printed on the XGP by doing
1013 XGPSAVE(">",SCN,DSK,FFM); (or some other file-spec,  this is recommended
1014 though) and in DDT :XGP ;SCAN MC:FFM;*
1015 (The * means all files >,SCN).  (You might want to copy the files over
1016 to AI first as if MC/AI is sluggish you might get a gap in your plot.)
1017 WORLDPLOT hasn't been hacked for a long time.
1018 \x1f
1020 CFFK@MIT-MC 03/15/77 16:36:07
1021 What PLOT2 doen't do
1022 \x1f 
1023 BROM@MIT-MC 03/15/77 16:33:56
1024 FIX UP THE DOCUMENTATION ABOUT ENTERGRAPH.
1025 ALSO INCLUDE SOMETHONG ABOUT SETTING THE SWITCHES CLEAR AND
1026 WAIT.
1027 \x1f 
1028 CFFK@MIT-MC 03/15/77 14:27:15
1029 ^^ in Plot2 should reset CLEAR and WAIT.
1030 \x1f 
1031 JLK@MIT-MC 03/08/77 15:12:37 Re: PLOT2 DOCUMENTATION
1032 I have had several requests for help in generating figure quality
1033 plots for view graphs etc.  If you hack PLOT2 doc for INFO you
1034 should somewhere have a section on generating specially configured
1035 plots with examples (I doubt if all this winning documentation of
1036 yours will stop people from asking questions though...)
1037 \x1fCFFK@MIT-MC 03/21/77 21:34:41
1038 To: INFO-PLOT2 at MIT-MC
1039 The Grinnell TV's in Building 38 are now up and supported by PLOT2.  The
1040 new PLOTMODE is one of GRINNELL, or GR.  (E.g. PLOTMODE(G,GR); plots
1041 for the Gould and the Grinnells.)  Although they only have a resolution
1042 of 512*512, all coordinates are divided by 2 before being plotted, so
1043 WINDOW etc. should be chosen as though the screen coordinates ran from
1044 0 to 1023 each way.  The default WINDOW for Grinnells is thus
1045 [0,1023,0,1023] (the entire screen).
1046 PLOT2 decides you're on a Grinnell if using the procedure described in
1047 Sec 15.3 of PLOT2 USAGE, it thinks you're an Imlac, but your page height
1048 is 46 or less.
1049 (Imlac users elsewhere: let me know if this screws you up.)
1050 \x1f
1051 CFFK@MIT-MC 03/17/77 22:28:48
1052 To: INFO-PLOT2 at MIT-MC
1053 A very pernicious bug has cropped up recently.  Its symptoms are that
1054 after a plot, you cannot type anything to your MACSYMA, you cannot quit
1055 or anything useful like that.  I am trying to find a fix for this bug,
1056 but in the meanwhile the corrective action you should take, if it
1057 strikes you is:
1058 ^Z :XFILE CFFK;PLOT2 FIX
1060 \x1f
1061 CFFK@MIT-MC 03/01/77 19:04:50 Re: Major revision of the documentation
1062 To: INFO-PLOT2 at MIT-MC
1063 Do  :PRINT SHARE;PLOT2 USAGE
1064 Please let me know of any inaccuracies, obscurities etc.
1065 SHARE;PLOT2 RECENT has been renamed PLOT2 ARCHIV, and a new
1066 PLOT2 RECENT started.  PLOT2 DEMO has been rewritten.  Old
1067 demo is still to be found (for now) in PLOT2 ODEMO.
1068 \x1f
1069 CFK@MIT-MC 01/31/77 12:44:35
1070 To: INFO-PLOT2 at MIT-MC
1071 CC: JPG at MIT-MC
1073         PLOT2 in OLDIO Macsyma loses because a character outputting
1074         function (TYO8) has been removed, and use of PLOT2 thoroughly
1075         screws up the Macsyma.  
1077 This problem has been fixed.  Ignore the message it came in.
1078 \x1f
1079 CFK@MIT-MC 01/30/77 19:23:42
1080 To: INFO-PLOT2 at MIT-MC
1081 CC: JPG at MIT-MC
1082 Bah!  PLOT2 currently only works in NEWIO Macsyma (gotten via QA^K
1083 at present).  PLOT2 in OLDIO Macsyma loses because a character
1084 outputting function (TYO8) has been removed, and use of PLOT2 thoroughly
1085 screws up the Macsyma.  This bug may be fixed by the time you read this;
1086 but Beware!
1087 \x1f
1088 CFK@MIT-MC 01/09/77 12:54:29 Re: PLOT2 in Newio
1089 To: INFO-PLOT2 at MIT-MC
1090         PLOT2 has been modified to run in Newio Macsyma (QA).  The modified
1091 files are APLOT2 NFASL, TEKPLT NFASL and WORLD NFASL.  SHARE;PLOT2 LISP has
1092 been altered to load these files if you're in Newio.  Let me know of any
1093 problems.
1094 \x1f
1095 CFK@MIT-MC 11/06/76 13:22:36
1096 To: INFO-PLOT2 at MIT-MC
1097 /*      MHR@MIT-AI 11/02/76 16:03:20
1098         1) Is there a way to have the numbers which label the axes
1099            appear outside of the plotting window?  Now they are
1100            intersected by the axes, and sometimes by the curves.
1102 Suppose you want do PLOT2(X,X,1,2); then you could do  */
1103 BLOCK([YMAX,YMIN,XMAX,XMIN,DATEPLOT,NOPRINT,XAXIS,YAXIS,WINDOW,OWINDOW],
1104       WINDOW:OWINDOW:[100,1023,100,790], 
1105                  /* allow 100 raster units for writing in later*/
1106       DATEPLOT:XAXIS:YAXIS:FALSE, /* turn off things that print*/
1107       NOPRINT:TRUE,
1108       PLOT2(X,X,1,2,FIRST),  /* plot*/
1109       YMAX:YMAX1,YMIN:YMIN1,XMAX:XMAX1,XMIN:XMIN1, /* save XMAX etc*/
1110       BLOCK([XMIN,XMAX,YAXIS], /* push XMIN etc.*/
1111             XMIN:-1,XMAX:1,
1112             WINDOW:OWINDOW+[0,0,0,0],WINDOW[1]:0,WINDOW[2]:200,
1113             YAXIS:ALL,
1114             GRAPH2([],[])), /* plot Y axis */
1115       BLOCK([YMAX,YMIN,XAXIS],  /* do same for X axis*/
1116             YMAX:1,YMIN:-1,
1117             WINDOW:OWINDOW+[0,0,0,0],WINDOW[3]:0,WINDOW[4]:200,
1118             XAXIS:ALL,
1119             GRAPH2([],[],LAST)));
1121 /*      2) When I use dashed lines of type [7,3], the resulting dashes
1122            seem to be less straight than a corresponding solid line.
1123            Is this an artifact of the particular line type I'm using,
1124            is this an illusion, or is it because the plotting algorithm
1125            different when the lines are not solid?
1127 This is because dashed lines are implemented by drawing a sequence of
1128 small undashed lines.  Since these lines are about 4 - 10 raster units
1129 long, there are only a small number of directions in which they can
1130 point, and the chances are that none of these directions coincide with
1131 the direction of the dashed line as a whole.  Hence dashed lines often
1132 appear to weave about.
1134 Tektronix Users.
1135 I have recently wirtten a function that allows you to use the cross-
1136 hairs on a Tektronix.  It is still in rather an embryonic stage, but
1137 you may want to try it out.  To load it do:
1138 LOADFILE(EDIT,">",DSK,CFK);
1139 The main function in it is called EDIT, and its intention is to allow
1140 you to enter labels and various odd lines onto an existing plot.  To
1141 use it you must have a function of no arguments, whose body is a BLOCK
1142 and the last statement in the BLOCK must be EXITGRAPH().  If the
1143 function is P(), say then P(); should plot as much of your picture as
1144 can be conveniently specified by PLOT2, GRAPH2 etc.
1146 EDIT(P);  will execute P(), but will stop before the final EXITGRAPH(),
1147 and display the cross-hairs.  By typing various letters EDIT will enter
1148 commands into the function P directly before the EXITGRAPH(),
1150 Allowed letters are:
1151         Rubout, exit from EDIT
1152         Space, save the location of the crosshairs
1153         S or s, enters a SETPOINT command into your function
1154         V or v, enters a VECTOR command (should be preceded by a
1155                 SETPOINT or another VECTOR command)
1156         L or l, draws a line between the saved location and the
1157                 crosshairs and enters it in the function.
1158         P or p, reads text from the keyboard and prints it left
1159                 justified at the cursor.  Echoing is suppressed while
1160                 it is reading the text.  Reading continues until a
1161                 Carriage-Return is encountered.
1162         C or c, same as P, except the text is centered.
1163         R or r, same as P, except the text is right justified
1164                         
1165 Remember that after exiting EDIT your function will have been changed,
1166 so that P(); should give you the updated PLOT.  Items maybe be removed
1167 using the MACSYMA editor, or TECO.  To draw a picture from scratch you
1168 could do:
1170 HOUSE():=BLOCK([],ENTERGRAPH(),EXITGRAPH());
1171 EDIT(HOUSE);  now with a sequence of S's and V's you can draw a house
1172         terminating it with a Rubout.
1173 HOUSE();  draws your house.
1175 As an example consider the following program, that plots a labeled
1176 figure.  All the printing commands (GHPRINT( ... )) were entered using
1177 EDIT.  (Batch this in and do P(), to see how it looks.) */
1179 (  R : 47.5,
1180    AAA : 1.13128698,
1181    BB : 1.29027253  );
1182 ATHRESH(NU) := BB/AAA*SQRT(ABS((NU-NU1)*SIN(%PI*NU))*R^3/NU^2);
1183 PL(NU1) := (  PLOT2(ATHRESH(NU), NU, (NU1+30)/2, NU1, SAME),
1184    PLOT2(ATHRESH(NU), NU, NU1, NU1+IF NU1 > 30 THEN 0.2 ELSE -0.2,
1185    SAME)  );
1186 NUL :[29.62,29.97,30,30.11,30.23,30.28,30.42];
1187 ISLANDL: [1.85,.45,0,1.67,1.45,1.78,2.03];
1188 STOCHL :[4,3.7,4,3.5,3.9,3.6,3];
1189 PLOTMODE(G, T);
1190 BOTHCASES:TRUE;
1191 P():=
1192   BLOCK(
1193   [CALCOMPNUM, WINDOW, CLEAR, WAIT, NOPRINT, DATEPLOT, XAXIS, YAXIS,
1194    YMIN, YMAX, XMIN, XMAX],
1195   AA:7,
1196   DEFINESYMBOL(1,SQRT(2.)*[[0,AA],[0,-AA],[AA,0],[-AA,0],[0,0]]+.5),
1197   DEFINESYMBOL(2,[[AA,AA],[-AA,-AA],[AA,-AA],[-AA,AA],[0,0]]),
1198   OWINDOW:[0,1023,5,790],
1199   WINDOW:OWINDOW+[100,-20,200,-20],
1200   NOPRINT:TRUE, DATEPLOT:FALSE,
1201   TICKNUM:-[10,5], TICKSIZE:2*AA,
1202   YAXIS:TRUE, XAXIS:TRUE,
1203   YMAX:4.5, YMIN:0,
1204   XMIN:29.5, XMAX:30.5,
1205   GRAPH2([],[],FIRST),  /* Plots the axes with tickmarks, but no
1206                                 labels */
1207   YAXIS:XAXIS:FALSE,
1208   CALCOMPNUM:3,
1209   PLOT2(ABS(NU-30)/30*SQRT(%PI*R^3/2)*BB/AAA,NU,29.5,30.5),
1210   CALCOMPNUM:10,
1211   FOR DE IN [1/6.0,1/5.0,1/4.0,1/3.0,1/2.0,2/5.0]
1212       DO (PL(30.0+DE),PL(30.0-DE)),
1213   GRAPH2(NUL,[ISLANDL,STOCHL],[29,19]),
1214   WINDOW:OWINDOW,
1215   GRAPH2([],[]),  /* This is so that the new WINDOW gets used for
1216                         GHPRINT calls */
1217   ENTERGRAPH(),
1218   CLEAR:WAIT:TRUE,  /* So that the EXITGRAPH() waits and the next
1219                         plot clears the screen */
1220   GHPRINT("0",87,203,2),
1221   GHPRINT("4",87,688,2),
1222   GHPRINT("29.5",99,167,1),
1223   GHPRINT("30",553,167,1),
1224   GHPRINT("30.5",1004,167,1),
1225   GHPRINT("1",587,312,2),
1226   GHPRINT("2",986,287,2),
1227   GHPRINT("5",924,230,0),
1228   GHPRINT("3",862,230,0),
1229   GHPRINT("4",789,230,0),
1230   GHPRINT("5",742,230,0),
1231   GHPRINT("6",686,257,2),
1232   GHPRINT("a",68,447,2),
1233   GHPRINT("v",371,142,1),
1234   EXITGRAPH())$
1235 \x1f
1236 CFK@MIT-MC 08/31/76 00:46:40 Re: Minor Change to PLOTMODE
1237 To: INFO-PLOT2 at MIT-MC
1238 PLOTMODE:[G,I]; and PLOTMODE:T; are now valid ways of doing
1239 PLOTMODE(G,I); and PLOTMODE(T); respectively.  (This change is to make
1240 PLOTMODE compatible with other MACSYMA switch-like functions e.g. FPPREC.)
1241 \x1f
1242 CFK@MIT-MC 07/31/76 15:50:08
1243 To: WHG at MIT-MC, TBW at MIT-MC, RXG at MIT-MC, ROBT at MIT-MC, MHR at MIT-MC
1244 To: ITO at MIT-MC, FCR at MIT-MC, DBA at MIT-MC, CMA at MIT-MC, CAS at MIT-MC
1245 To: ALEPH at MIT-MC, INFO-PLOT2 at MIT-MC, MEZRAH at MIT-ML
1246 PLOT2 can be used to plot on character-only terminals. The intention is
1247 to allow a preview of output on a higher resolution device like the XGP.
1248 The relevant calls to PLOTMODE are:
1250 PLOTMODE(P); or PLOTMODE(PRINTING); for plotting on a printing terminal.
1251 PLOTMODE(D); or PLOTMODE(DISPLAY); for plotting on a terminal that
1252         allows cursor positioning
1254 These calls can, of course, be combined with X (XGP) or G (GOULD).
1255 (E.g. PLOTMODE(X,D);)
1257 Before making a call to PLOTMODE you might want to change the value of
1258 CHARRATIO (default value 1.5).  This should equal the ratio of
1259 line-pitch to the character-pitch for your terminal.  (This enables the
1260 EQUALSCALE:TRUE mode to work, and ensures that what you see on your
1261 screen/paper is the same shape as what will come out on the XGP.)
1263 The default line type (type 0) is drawn with .'s.  The other line
1264 types (1 - 9) are drawn with other symbols (*, #, $ etc.).  The symbols
1265 (specified by the tens digit of the line type) are defined by the
1266 letters (A, B, C etc.).  No attempt is made to actually draw a dotted
1267 line, or a fancy symbol on the terminal (although they will come out on
1268 the XGP).  Unfortunately if you choose a line type that specifies both a
1269 line and a symbol, the line will in most cases overprint and so erase
1270 the symbol.
1272 The line and symbol characters may be changed using the DEFINEDASH and
1273 DEFINESYMBOL functions, by suppliying as their second arguments, an
1274 integer (the ASCII value of the char to be used) or a character (e.g. A,
1275 "1", \$ etc. - the character itself).  In order to specify no line (or
1276 no symbol) give 0 as the second argument (not space or 32, as this will
1277 cause existing lines, axes etc, to get over-written and, maybe erased,
1278 by spaces).
1280 The default line and symbol character are:
1281            0  1  2  3  4  5  6  7  8  9
1282 lines      .  *  #  $  %  &  +  @  - none
1283 symbols  none A  B  C  D  E  F  G  H  I
1285 Unless you set the PLOTMODE before PLOT2 is loaded, PLOTMODE gets
1286 initiallized according to LISP's TTY variable as follows:
1287 TTY     PLOTMODE
1288 0       PRINTING
1289 1       DISPLAY         (datapoint)
1290 2       DISPLAY         (datapoint)
1291 4       TEKTRONIX
1292 5       DISPLAY         (TV. these may soon be supported)
1293 6       PRINTING        (memowreck)
1294 7       IMLAC (if eraseable)    (software tty)
1295         TEKRONIX (otherwise)
1296 8       PRINTING        (terminet)
1297 9       DISPLAY         (other display)
1298 \x1f
1299 CFK@MIT-MC 07/05/76 12:42:03 Re: various changes to PLOT2
1300 To: TBW at MIT-MC, RXG at MIT-MC, ROBT at MIT-MC, OVER at MIT-MC, MHR at MIT-MC
1301 To: MDT at MIT-MC, ITO at MIT-MC, FCR at MIT-MC, FBN at MIT-MC, INFO-PLOT2 at MIT-MC
1302 To: MEZRAH at MIT-ML
1303 summary:
1304  1] more effecient evaluation of the first arg of the plotting functions
1305  2] better scheme for naming and saving plots - NAMEPLOT, SAVEPLOTS etc.
1306  3] REPLOT takes all the optional args PLOT2 takes, plus NONE and LIN
1307  4] REPLOT can replot several plots, REPLOT([FOO,BAR])
1308  5] negative TICKNUM to stop rounding out to nearest tickmark
1309  6] negative ranges for PLOT2 etc allowed.  bigfloats allowed.
1310  7] DONT optional arg to suppress plotting
1311  8] DATEPLOT governs dating of plot
1312  9] hardcopy on gould 5200
1313 10] XGPSAVE has been split in two.
1314 11] arbitary transformations between data points and screen points
1315 12] polar, log-log, lin-log and log-lin plots
1316 13] first arg to 3d plotting functions is a z coordinate
1317 14] crosshatching implemented for 3d plots, CROSSHATCH
1318 15] perspective view for 3d plots more general, defaults better
1319 16] scaling for 3d plots changed
1320 17] GRAPH3D function implemented
1321 18] multiple contour plots are allowed
1322 19] contours chosen differently, INTEGER value for CONTOURS
1323 20] LABELCONTOURS governs contour labeling
1324 21] internal scaling info available, WINDOW1, XMAX1 etc.
1326 details:
1327  1] effecient evaluation of first arg of PLOT2, PLOT3D and of first two 
1328 args of PARAMPLOT2.
1330 if what was normally the second arg to PLOT2 is missing, the first arg
1331 is treated as a function name.  the function must be a function of one
1332 arg (or two args in for PLOT3D) and must be either a translated or
1333 compiled function which returns a floating point number when it is given
1334 floating point arg (or integer arg if the INTEGER arg to PLOT2 is
1335 given).  this is supposed to provide a quicker evaluation of the first
1336 arg and for that reason NO checking is done on the result.  if the wrong
1337 sort arg is returned, you will get garbage plotted.  with PARAMPLOT2
1338 either both the first and second args must be of this form or neither of
1339 them.
1341 examples:
1342 TRANSLATE:TRUE;
1343 F(X):=(MODEDECLARE(X,FLOAT),EXP(-X*X));
1344 PLOT2(F,-2,2); PLOT2(F,[-2,-1,0,1,2]); 
1345 ARRAY(V,FLOAT,10); FOR I FROM 0 THRU 10 DO V[I]:FLOAT(I*I); PLOT2(F,V);
1346 G(X,Y):=(MODECLARE(X,FLOAT),EXP(-X*X-Y*Y));
1347 PLOT3D(G,-2,2,-2,2);
1348 F(X):=(MODEDECLARE(X,FLOAT),COS(X)); 
1349 G(X):=(MODEDECLARE(X,FLOAT),SIN(X));
1350 PARAMPLOT2(F,G,0,2*%PI);
1352  2] better scheme for naming and saving plots
1354 in order the avoid the gobbling of flonum space when plots are saved,
1355 they are now saved in arrays.  unfortunately this means they can no
1356 longer be saved in the normal way.  this following functions 
1357 manipulate saved plots:
1359 NAMEPLOT(<plotname>);  names the last call to one of the plotting
1360 functions <plotname>.  <plotname> must be either an atom (e.g. FOOP) or
1361 an array element (e.g. SNOO[4]).  <plotname> is stuck onto the list 
1362 PLOTS so it becomes for instance [<plotname>].  as before <plotname> 
1363 gets stuck on the VALUES or ARRAYS list as appropriate.  typing rubout
1364 at the end of a plot causes a <plotname> to get read in and NAMEPLOT
1365 applied to it.
1367 SAVEPLOTS([<filespec>],<plotname1>,<plotname2>, ... );
1368 saves the plots <plotname1>, <plotname2> etc in the file <filespec>.
1369 defaulting of <filespec> is traditional (e.g. FOO is the same as
1370 FOO,">").  however caution should be exercised if the second filename
1371 is ">" (see below).  [<filespec>] may be omitted altogether in which 
1372 case the defaults (as used by e.g. LOADFILE) are used.  
1373 SAVEPLOTS([<filespec>],ALL); saves all the plots in PLOTS. 
1374 (or else you can say SAVEPLOT([<filespec>],PLOTS); )
1375 (n.b. SAVEPLOTS may be done within a WRITEFILE, unlike for instance
1376 SAVE.)  another action of SAVEPLOTS is the put the <filespec> into the
1377 value of the saved plots.  thus a subsequent SAVE([<filespec1>],
1378 FUNCTIONS,<plotname>); although it wont correctly save the data in 
1379 <plotname> will remember what file it was saved in using the SAVEPLOTS
1380 command. SAVEPLOTS returns a list of plots it succeeded in saving
1382 KILLPLOTS(<plotname1>,<plotname2>, ... );
1383 frees up the array storage used by <plotname1> etc.  KILLPLOTS(PLOTS),
1384 KILLPLOTS(ALL) and KILLPLOTS() will apply KILLPLOTS to all the members 
1385 of PLOTS.  note the KILLPLOTS does not KILL <plotname1> etc.  and in 
1386 particular it leaves the <filespec> information stuck in by SAVEPLOTS.
1387 (if you never want to reference a plot again it is probably better to do
1388 a KILLPLOTS followed by a KILL, since KILLPLOTS takes care to totally 
1389 exorcise the arrays in the plot from the system, something that KILL 
1390 might not manage to do).  if you doing a lot of plotting then you may 
1391 get a message like NO CORE ARRAY when trying the name a plot (either by
1392 invoking NAMEPLOT explicitly or by typing rubout after a plot.)  if that
1393 happens all you have to do is check that all the plots that are 
1394 important are saved using the SAVEPLOTS command, then do KILLPLOTS(); 
1395 NAMEPLOT(<plotname>); 
1396 LOADPLOTS(<filespec>); 
1397 loads a file of plots created by SAVEPLOTS. <filespec> defaults exactly
1398 as with LOADFILE.  it also sets the file defaults
1400 REPLOT(<plotname>); 
1401 replots <plotname>.  if the arrays of <plotname> were destroyed either
1402 by a KILLPLOTS(<plotname>); or by SAVE'ing <plotname> and LOADFILE'ing
1403 it into another MACSYMA, REPLOT checks to see if <plotname> was ever
1404 saved using the SAVEPLOTS command, if it was it finds the <filespec>
1405 under which it was saved, and then attempts a LOADPLOTS(<filespec>);
1406 (but taking care not to change the current file defaults) and replots
1407 <plotname> if it was found in the file.  REPLOT understands the old
1408 format of saved plots.
1410 OLDNAMEPLOT(<plotname>);  does what SAVEPLOT(<plotname>) used to do,
1411 i.e. name the last plot <plotname> using the old format for naming
1412 plots (which could be safely SAVE'd and LOADFILE'd but which took up
1413 bags of space)
1415 examples: 
1416 PLOT2(SIN(X),X,-%PI,%PI); <rubout> SNOO;
1417 REPLOT(SNOO); replots snoo
1418 PLOTS; [SNOO]
1419 KILLPLOTS(); kills the plots in PLOTS i.e. SNOO
1420 REPLOT(SNOO); SNOO not a plot (and it wasn't saved)
1421 REPLOT(); replots the last plot (which so happens to be the same as
1422 SNOO)
1423 <rubout> ARF;
1424 SAVEPLOTS([CFK,PLOT,DSK,USERS],ALL); saves the plots in PLOTS
1425 KILLPLOTS();
1426 PLOTS; [] there are now no active plots around
1427 VALUES; [SNOO,ARF]  both SNOO and ARF got put on the values list but
1428 only ARF is any good because:
1429 SAVE([CFK],VALUES); [[CFK, >, DSK, USERS], SNOO, ARF]
1430 ^Z MACSYM^K
1431 LOADFILE(CFK,">",DSK,USERS);
1432 VALUES; [SNOO,ARF]
1433 PLOTS; []
1434 REPLOT(SNOO); SNOO not a plot
1435 REPLOT(ARF); CFK PLOT DSK USERS being loaded
1436 loading done (ARF is automatically loaded in and replotted)
1437 PLOTS; [ARF]
1438 KILLPLOTS(); kills the arrays in ARF but saves the fact that it came 
1439 from CFK PLOT
1440 REPLOT(ARF); CFK PLOT DSK USERS being loaded loading done etc.
1442 note that things would be more difficult in the above example if i had
1443 called both files CFK,">", for then SAVEPLOTS would put the plots in e.g
1444 CFK,1 and SAVE would put the VALUES in CFK,2;  however ARF would only 
1445 know that it was saved in CFK,">",DSK,USERS so that the automatic 
1446 LOADPLOTS that REPLOT tries to do would attempt to load from CFK,">"
1447 i.e. CFK,2 caused an error.  i would then have to explicitly load up
1448 ARF by doing LOADPLOTS(CFK,1,DSK,USERS);
1450  3] REPLOT can take all the optional args that PLOT2 etc took. 
1452 they will be merged in with the options in effect for the first arg to
1453 REPLOT there are also provisions for turning of the options.  FALSE is
1454 treated is a spacing keyword for determining whether a subsequent option
1455 is a title, ylabel etc. it does not turn off any of the labels, that is
1456 acheived by the keyword NONE.  similarly the use of the transformation
1457 functions is turned off by the keyword LIN (for LINear).  as before
1458 NOT3D turns off the 3d plotting.
1460 examples:
1461 PLOT2(SIN(X),X,-%PI,%PI,FALSE,FALSE,"THE CAT SAT ON THE MAT");
1462 title is set to "THE CAT .. "
1463 REPLOT(TRUE,"X-AXIS");
1464 replots with title and x label
1465 REPLOT(TRUE,FALSE,"SIN(X)",NONE);
1466 replots with same xlabel a new ylabel and no title
1467 REPLOT(TRUE,FALSE,"Y-AXIS"); replots with new ylabel.
1469  4] REPLOT can take a list for its first argument.
1471 it then replots the elements of the list. i.e. REPLOT([FOO,BAR],
1472 <optional-args>); is identical to (REPLOT(FOO,<optional-args>),
1473 REPLOT(BAR,<optional -args>));  if the first arg to REPLOT is atomic 
1474 then it is evaluated and the evaluated form is used if is a list
1476  5] if TICKNUM is negative then PLOT2 won't round your x and y axes out
1477 to the nearest tick mark.
1479 thus with TICKNUM:10; PLOT2(X,X,5,25); has the x and y scales going from
1480 4 to 26, but with TICKNUM:-10; the scales will go from 5 to 25.
1482  6] negative argument ranges are allowed in the plotting functions,
1484 e.g. PLOT2(1/X,X,-1,-3); works.  the first argument will be calculated
1485 in the order indicated (thus 1/(-1.0) will be calculated before
1486 1/(-3.0)) -- this only makes a difference if the computation of the
1487 first arg changes variables which change the value returned by
1488 subsequent computation.  (however the x and y scales will come out in
1489 the traditional way, this can be overridden using the SPECIAL option
1490 with  REFLECT as XFUN or YFUN. see below)
1492  7] if DONT appears as an optional argument to the plotting functions
1493 then the points will be calculated, but not plotted.
1495 this is primarly of use for creating plots that are to be named and used
1496 later.  DONT is a non-sticky option (like FIRST and LAST), and so
1497 doesn't get saved when the plot is named (so PLOT2(EXP(X),X,-1,1,DONT);
1498 REPLOT(); will plot something).
1500  8] if DATEPLOT is TRUE (the default) the date and time of the plot will
1501 be stuck in the top right corner of the plot.
1503 right now no effort is made to stop this from interferring with the
1504 title (this may be changed in the near future).  if people dont like
1505 this i will consider changing the default to FALSE.
1507  9] the HARDCOPY command knows about the GOULD 5200 in building 38.
1509 if you have done PLOTMODE(G,I); PLOTMODE(G,T); or PLOTMODE(G); will
1510 queue up your last plot for printing.
1512 10] XGPSAVE has been split into two functions, called NAMEFILE and
1513 XGPSAVE1.
1515 NAMEFILE(<filespec>) takes the scratch file that PLOT2 uses in
1516 PLOTMODE(GOULD); or PLOTMODE(XGP); and copies it to <filespec>.
1518 XGPSAVE1(<filespec>) takes the file <filespec> and converts it into XGP
1519 scan form.
1521 XGPSAVE still exists and can be roughly defined as XGPSAVE(<filespec>)
1522 := (NAMEFILE(<filespec>),XGPSAVE1(<filespec>));
1524 the form XGPSAVE(); now uses the traditional default file names.  the
1525 advantage of this change is that the scratch file (which contains ards
1526 graphics commands) is usually much shorter than the corresponding XGP
1527 file, thus if you want to generate several plots for the XGP, but aren't
1528 able to actually get them out on the XGP for a while then use NAMEPLOT
1529 now,  and convert them to XGP format with XGPSAVE1 at the last minute.
1530 incidently since the file produced by NAMEFILE is ards graphics commands
1531 the plot it contains can be viewed by :IMPRNT'ing the file on an imlac
1534 11] arbitrary 2 and 3 dimensional transformations before plotting.
1536 if the optional argument SPECIAL appears in the call to PLOT2 then
1537 immediately before sticking your data up on the screen PLOT2 looks at 
1538 the values of XFUN and YFUN (default values are FALSE).  if they are
1539 FALSE the data gets scaled in the normai way and is plotted without 
1540 further ado.  if either is non-FALSE then it should be the name of a 
1541 function of 1 to 3 arguments which defines a transformation between the
1542 data and the x and y screen coordinates.  (the standard linear scaling
1543 is still applied the result of this transformation.)  the functions must
1544 be translated or compiled and must return a floating point result.  the
1545 way they work is best illustrated by an example.
1547 suppose 
1548         XFUN:POLARX; 
1549 and     YFUN:POLARY;
1550 where POLARX and POLARY are defined by 
1551         TRANSLATE:TRUE;
1552         POLARX(X,Y):=(MODEDECLARE([X,Y],FLOAT),Y*COS(X));
1553         POLARY(X,Y):=(MODEDECLARE([X,Y],FLOAT),Y*SIN(X));
1554 (note that X and Y are the THETA and R coorinates of a polar system)
1555 then    PLOT2(1,X,0,2*%PI,SPECIAL);
1556 produces CALCONMPNUM x data points (ranging from 0 to 2*%PI) and 
1557 CALCOMPNUM corresponding y data points (all 1 in this case).  these x
1558 and y are given to the POLARX and POLARY functions as the first and 
1559 second arguments and the value of these two functions is what is 
1560 supplied to the normal scaling routines.  thus this PLOT2 command will
1561 produce a circle (if EQUALSCALE:TRUE, an ellipse otherwise).
1563 the arguments that XFUN and YFUN take are
1564         1 arg   2 args  3 args
1565 XFUN    x       x,y     x,y,z
1566 YFUN    y       x,y     x,y,z
1568 the first argument to PLOT2 is considered a y variable, and it's second
1569 argument an x variable.  for PARAMPLOT2 and GRAPH2 the first arguments
1570 are x variables and the second arguments are y variables.  for all the
1571 2d plotting functions the z variable is 0.0.  (see below for the
1572 coordinate conventions for the 3d plotting functions).
1574 12] polar, log-log, lin-log and log-lin plots 
1576 certain XFUN's and YFUN's are predefined and may be specified in the
1577 optional args to PLOT2.  if POLAR, LOG, LINLOG or LOLIN appear as an
1578 optional argument then XFUN and YFUN are bound as follows:
1580 optional arg.   XFUN            YFUN
1581 POLAR           POLARX          POLARY
1582 LOG             CLOG            CLOG
1583 LINLOG          FALSE           CLOG
1584 LOGLIN          CLOG            FALSE
1586 where POLARX and POLARY are defined above and CLOG is defined by
1587         CLOG(X):=(MODEDECLARE(X,FLOAT),
1588                   (IF X=0.0 THEN -90.0 ELSE LOG(ABS(X)))/LOG(10.0));
1589 the optional arguments LOG and LOGLIN alse cause PLOT2 to choose 
1590 logarithmic intervals for the x variable.  (something less than optimal
1591 probably happens for PARAMPLOT2 in this case).
1593 other XFUN's and YFUN's that may be of use are (omitting the 
1594 MODECLARE's):
1595         REFLECT(X):=-X$
1596         YTOX(X,Y):=Y$
1597         XTOY(X,Y):=X$
1598         ZTOY(X,Y,Z):=Z$
1599         ZTOX(X,Y,Z):=Z$  (just the same function really)
1600         ROTATEX(X,Y):=X*COSANG-Y*SINANG$
1601         ROTATEY(X,Y):=X*SINANG+Y*COSANG$
1602 (SINANG and COSANG are set up by
1603         INITROTATE(ANG):=(COSANG:COS(ANG),SINANG:SIN(ANG));)
1605 the various 3d perspective functions are documented below.
1607 13] the first argument to the 3d plotting functions is considered
1608 to be a z coordinate.
1610 the optional argument NOT3D now causes YFUN to be bound to ZTOY.
1611 contour plots dont bind XFUN or YFUN, but you can, so  that
1612 CONTOURPLOT2(Y,X,0,2*%PI,Y,0,1,POLAR); "works".
1614 14] crosshatching implemented for 3d plots
1616 as a default PLOT3D will crosshatch, i.e. plot lines of constant x as 
1617 well as constant y.  you can turn this off by doing CROSSHATCH:FALSE;
1619 15] perspective view for 3d plots more general, defaults better.
1621 the line of sight for 3d plots is no longer parallel to one of the axes.
1622 the view is now determined by VIEWPT and CENTERPLOT (defaulted to
1623 be unbound - like XMAX etc.)  VIEWPT may be set to a list of 3 numbers
1624 and gives the point from which the projection should be made.
1625 CENTERPLOT may likewise to set to a list of 3 numbers and gives a point
1626 on the line of sight.  the projection will be made onto a plane
1627 perpendicular to a line joining VIEWPT and CENTERPLOT.
1629 if VIEWPT and CENTERPLOT are unbound (the default) then they will be
1630 chosen as  follows: the extreme values of the coordinated are
1631 determined.  this gives the two points min:[xmin,ymin,zmin],
1632 max:[xmax,ymax,zmax]. CENTERPLOT is chosen as (min+max)/2, and VIEWPT is
1633 chosen as max+3*(max-min).
1635 if CENTERPLOT is FALSE then the old type of  perspective view will be
1636 given (like setting the x and z components of CENTERPLOT to the
1637 correspondeing components of VIEWPT).
1639 PERSPECTIVE operates as before.  REVERSE:TRUE causes a left-handed
1640 coordinate system to be assumed.
1642 the defaults were chosen so that they will serve for  most purposes -
1643 note the the default view has z increasing upwards, and x and y
1644 increasing towards you to the left and right respectively (right and
1645 left if REVERSE:TRUE).
1647 the perspective transformations work by the same XFUN and YFUN mechanism
1648 documented above.  in case to want to try changing the transformation
1649 here are the names of the functions used (although it is probably quite
1650 easy to confuse the function that figures out the hidden lines)
1652 \3DX and \3DY (standard functions)
1653 \3DXR and \3DYR (functions when REVERSE:TRUE;)
1654 NP3DX, NP3DY, NP3DXR and NP3DYR (non-perspective versions of the above)
1655 all the above with OLD concatenated onto the front (e.g. OLD3DX, 
1656 OLDNP3DXR) give the old perspective views. (all these functions take 3
1657 args). the type of view is setup by doing
1658 INITPERSPEC(CX,CY,CZ,VX,VY,VZ);
1659 where [VX,VY,VZ] the VIEWPT and [CX,CY,CZ] is the CENTERPLOT
1661 16] scaling for 3d plots has changed.
1663 the old scheme of setting ZMAX XMIN etc, to effect changes in the
1664 scaling of 3d plots has been flushed. now you may set XMAX, XMIN, YMAX
1665 and YMIN, where these quantities refer to the result of the 3d
1666 perspective transformations described above. reasonable values for these
1667 quantitles may be determined either by applying the transformations to
1668 the untransformed values or by examining the value of XMAX1, YMIN1 etc.
1669 (see below).
1671 17] GRAPH3D function implemented.
1673 right now this is at a fairly rudimentary stage.  it takes 3 arguments
1674 where GRAPH2 took 2 and  interprets them as lists of x, y, and z points
1675 which it uses to draw lines using the 3d transformations.  it can be
1676 used to add lines (e.g.  axes) to your 3d plot.  the hidden line
1677 routines are not used.
1679 there are now 4 optional arguments that describe the flavor of 3d
1680 plotting, they are \3D (which uses the 3d transformations but not the
1681 hidden line  routine) HIDE (which is like \3D before, i.e. it uses the
1682 hidden line  routine) CONTOUR (which produces contour plots) and NOT3D
1683 which plots a projection of the x-z plane.
1685 so at present the implied optional args for the plotting routines are:
1686 function                implied optional arg
1687 GRAPH3D                 \3D
1688 PLOT3D                  HIDE
1689 CONTOURPLOT2            CONTOUR
1691 18] multiple contour plots are allowed.
1693 e.g. CONTOURPLOT2([EXP(-X^2-Y^2),Y^2+SIN(X)],X,-%PI,%PI,Y,-2,2,[0,1]);
1695 19] contours chosen differently.
1697 the guy that figures out the contours to plot no longer uses the routine
1698 that determines tickmarks.  if you want the contours to lie on nice
1699 values chose CONTOURS judiciously. the contours are chosen to lie
1700 between ZMAX and ZMIN (rather than YMAX and YMIN) since the first arg to
1701 CONTOURPLOT2 is considered a z  variable.  if CONTOURS is the atom
1702 INTEGER then the contours will be at lnteger levels.  the meaning of
1703 CONTOURS being as list or an integer is unchanged.
1705 20] as a default CONTOURPLOT2 will label the contours as best it can
1707 this can be turned off by LABELCONTOURS:FALSE.
1709 21] various internal scaling information is now available.
1711 this may be of use for drawing axes on 3d plots etc.  for most of the
1712 options which default to being unbound (e.g. XMAX, WINDOW) the value
1713 that PLOT2 assumed can be found by sticking a "1" on the end.
1715 e.g. 
1716         PLOT2(X,X,0,10.1);  YMAX; ==> YMAX
1717         YMAX1; ==> 11.0 (the max value of y on the y axis)
1719 variables in this class are:
1720 XMAX1, XMIN1, YMAX1, YMIN1. (these refer to the quantities after the 
1721 transformation functions have been applied)
1722 ZMAX1, ZMIN1 (only of use for contour plots)
1723 WINDOW1 (the window in which plotting is done.  does not include the
1724 room used by titles etc.)
1725 XMAX3D, XMIN3D, YMAX3D, YMIN3D, ZMAX3D, ZMIN3D.  (these are the values
1726 of the 3d data before transforming it to 2d.  this will only be up to
1727 date information if PLOT3D needed to calculate it to determined either
1728 the default VIEWPT or the default CENTERPLOT.)
1729 VIEWPT1, CENTERPLOT1 (only of use with 3d plots)
1731 \x1f
1732 CFK@MIT-MC 06/30/76 11:05:16
1733 To: PLASMA-GROUP at MIT-MC
1734 in order to get plots out on the gould printer do: PLOTMODE(G,I);
1735 or PLOTMODE(G,T); depending whether you're on the imlac or tektronix.
1736 then HARDCOPY(); will queue your last plot for printing.  alternatively
1737 you can type <linefeed> after your plot.  the plots will come out
1738 in about 5 mins if the gould is connected.
1739 \x1f
1740 CFK@MIT-MC (CFK0) 05/15/76 21:31:27 Re: contour plots
1741 To: INFO-PLOT2 at MIT-MC
1742 the contour tracking part of CONTOURPLOT2 has been made somewhat
1743 smarter.  contours now always form closed loops or begin and end
1744 on the boundary.  as an exercise try:
1745 CONTOURS:10;
1746 CALCOMPNUM:CALCOMPNUM1:10;
1747 CONTOURPLOT2(RANDOM(100),X,0,1,Y,0,1);
1748 let me know of any problems.
1749 \x1f
1750 CFK@MIT-MC 05/14/76 00:18:22 Re: more on contour plots
1751 To: INFO-PLOT2 at MIT-MC
1752 you should choose CALCOMPNUM and CALCOMPNUM1 large enough so
1753 that saddle points are not in adjacent mesh cells.  the
1754 contours dont necessarily form closed curves if this is not
1755 the case.
1756 \x1f
1757 CFK@MIT-MC 05/14/76 00:07:23
1758 To: INFO-PLOT2 at MIT-MC
1759 example:
1760         CONTOURPLOT2(Z^2/2+COS(X)+X/2,X,-6,6,Z,-3,3);
1761 (or:    PLOT3D(Z^2/2+COS(X)+X/2,X,-6,6,Z,-3,3,CONTOUR);
1762 the two forms are entirely equivalent)
1764 CONTOURPLOT2 works by first creating a 2d array of values of its first
1765 argument (as with PLOT3D, X takes on CALCOMPNUM values and Z takes on
1766 CALCOMPNUM1 values). contours are then drawn using linear interpolation.
1767 what contours are drawn is governed by the option CONTOURS (default 
1768 value 20) which may either be an integer or a list of numbers.  if 
1769 CONTOURS is an integer then approximately CONTOURS equally spaced
1770 contours will be drawn between the min and max values of CONTOURPLOT2's
1771 first argument (this argument is considered to be a Y variable so 
1772 you can restrict the range in which contours are drawn by setting 
1773 YMIN or YMAX).  the decision of what contour levels to use is made by
1774 the same guy that decides the spacing of tickmarks, so the contours will
1775 appear at nice values.  if you want to decide on the contour levels
1776 CONTOURS should be a list of those levels (in any order), e.g. CONTOURS:
1777 [1,0.5,%PI];
1779 Notes:  [1] the vertical axis for CONTOURPLOT2 is reckoned to be a Z
1780         axis so you change its scaling by changing ZMIN and ZMAX (not
1781         YMIN and YMAX, these are used in deciding the contour levels).
1782         this is for compatibity with PLOT3D. (however the drawing of the
1783         vertical axis is still governed by YAXIS.)
1784         [2] internally the data generated by CONTOURPLOT2 is usable by
1785         PLOT3D (and vice-versa).  once one of them has finished plotting
1786         you can do ^A and set \3D to TRUE (to get the old 3d plots) or
1787         to CONTOUR (to get a contour plots) or to FALSE (to get a 2d
1788         projection of the curves).  type EXIT; followed by a tab to
1789         replot the plots the new format.  alternatively you can do one
1790         of the following: REPLOT(TRUE,\3D); REPLOT(TRUE,CONTOUR); or
1791         REPLOT(TRUE,NOT3D);
1792         [3] changing the values of CONTOURS and doing REPLOT(); will
1793         replot your data with the new data. (CONTOURS may also be
1794         changed in a ^A break.)
1795         [4] all the normal optional arguments can be provided.
1797 Defects:[1] you cant superimpose contour plots by supplying a list as
1798         the first argument to CONTOURPLOT2. (however you can superimpose
1799         them with separate calls to CONTOURPLOT2 by supplying the FIRST,
1800         SAME and LAST optional arguments)
1801         [2] some slightly higher order interpolation scheme should
1802         probably be used to make the contours smoother.
1803         [3] the contours are not marked.
1804 these defects may be removed in due course.
1805 \x1f
1806 CFK@MIT-MC 05/07/76 23:18:35
1807 To: INFO-PLOT2 at MIT-MC
1808 PLOT2 USAGE has been updated.  PLOT2 DEMO has been expanded.
1809 \x1f
1810 CFK@MIT-MC 05/07/76 22:26:03
1811 To: PLOT2 at MIT-MC
1812 document myoptions fo rplotting options
1813 \x1f
1814 CFK@MIT-MC 05/04/76 12:21:46
1815 To: PLOT2 at MIT-MC
1816 TELL IMLAC USERS HOW TO RUN DEMO
1817 \x1f
1818 CFK@MIT-MC 05/03/76 11:37:35
1819 To: INFO-PLOT2 at MIT-MC
1820 symbol 9 is now defined by DEFINESYMBOL(9,TRUE); with TRUE
1821 meaning draw a dot. thus to get a point plot do e.g.
1822 PLOT2(X,X,0,1,[99]);
1823 \x1f
1824 CFK@MIT-MC 05/02/76 14:37:25
1825 To: INFO-PLOT2 at MIT-MC
1826 plot2 will pheep at you when it's expecting you to type a space,
1827 rubout, carriage-return etc.  if you find this annoying, you can 
1828 turn it off by doing PLOTBELL:FALSE$
1829 \x1f
1830 CFK@MIT-MC 05/02/76 11:53:51
1831 To: PLOT2 at MIT-MC
1832 document ticknum:0;
1833 \x1f
1834 CFK@MIT-MC 04/13/76 18:30:54 Re: markings on axes
1835 To: INFO-PLOT2 at MIT-MC
1836 XAXIS and YAXIS may be set to FALSE, TRUE or ALL (the default) with
1837 the folowing meanings
1838 FALSE:  dont plot this axis
1839 TRUE:   plot this axis
1840 ALL:    plot this axis and put the values of xmax and xmin at the ends.
1841 thus if you want to do all your own captioning you should do:
1842 NOPRINT:XAXIS:YAXIS:TRUE$
1843 \x1f
1844 CFK@MIT-MC 04/13/76 18:25:28
1845 To: PLOT2 at MIT-MC
1846 cross reference section v and replot4
1847 cross reference same option in section ii
1848 \x1f
1849 CFK@MIT-MC 04/06/76 22:10:54 Re: PLOT2 documentation
1850 To: INFO-PLOT2 at MIT-MC
1851 SHARE;PLOT2 USAGE has been updated,
1852 as has SHARE;PLOT2 DEMO.
1853 \x1f
1855 CFK@MIT-MC 04/01/76 17:41:50 Re: generalization of tick marks
1856 To: INFO-PLOT2 at MIT-MC
1857 both TICKSIZE and TICKNUM may now be lists of two numbers
1858 the first referring to the ticks on the xaxis and the second
1859 to the ticks on the y axis. thus:
1860 TICKSIZE:[6,2000];
1861 TICKNUM:[6,2];
1862 as before if either is just a number it applies to both axes
1863 \x1f
1864 CFK@MIT-MC 04/01/76 11:00:35 Re: incompatible change to the PLOTMODE function
1865 To: INFO-PLOT2 at MIT-MC
1866 PLOTMODE now has more easily remembered arguments.
1868 possible arguments are: 
1869         I or IMLAC (plot on imlac)
1870         T or TEKTRONIX (plot on tektronix)
1871         G or GOULD (set things up for plotting on gould printer
1872                         not fully implemented yet)
1873         X or XGP (set things up for plotting on xgp, using XGPSAVE)
1875 any of these arguments may be given accept that I and T may 
1876 not appear together.
1878 the first argument is used to determine the width and height
1879 of characters being used.
1881 the default settings are PLOTMODE(T); (if PLOT2 thinks you
1882 are a tektronix) or PLOTMODE(I); (if it thinks you are an imlac)
1884 PLOTMODE(); returns a list of the devices PLOT2 is plotting for
1886 correspondence between the old and new PLOTMODE functions is:
1887         PLOTMODE(0) ==> PLOTMODE(T)
1888         PLOTMODE(1) ==> PLOTMODE(X)
1889         PLOTMODE(2) ==> PLOTMODE(X,T)
1890         PLOTMODE(3) ==> PLOTMODE(G,T)
1891         PLOTMODE(4) ==> PLOTMODE(G)
1892 with T being replaced by I if you're on an imlac
1894 N.B. when plotting on imlacs PLOT2 now uses ards graphics conventions
1895 this should enable most imlacs connected to ITS systems to work.
1897 \x1f
1898 CFK@MIT-MC 03/25/76 21:35:32 Re: tty hanging after plot2
1899 To: INFO-PLOT2 at MIT-MC
1900 i fixed something that probably was the cause
1901 of the tty not listening to anything typed at
1902 it after PLOT2 is done.  if this problem
1903 re-occurs please let me know.
1904 \x1f
1905 CFK@MIT-MC 03/08/76 10:23:25 Re: emptying the output buffer
1906 To: INFO-PLOT2 at MIT-MC
1907 the chars to create a plot get put in
1908 a buffer, and normally only get
1909 sent when the buffer is full or when the
1910 plot is complete.  the user can force the
1911 buffer contents to be sent by typing ^\
1912 (control-shift-L on the tektronix, control-\
1913 on the imlac).  (this is probably only
1914 of use to to users of WORLDPLOT, which because
1915 of its ridiculously inefficient implementation
1916 will sometimes wait until it has gone thru the
1917 whole world before sending anything out.)
1918 \x1f
1919 CFK@MIT-MC 02/29/76 18:30:11 Re: how the type-list works
1920 To: INFO-PLOT2 at MIT-MC
1921 the elements of the type-list in the optional args to
1922 plot2 are now evaluated.  this allows the folowing
1923 construction:
1924 for i from 0 thru 10 do (plot2(sin(x)+i,x,0,10,[i]));
1925 (previously you would have had to do:
1926 for i from 0 thru 10 do (typel:[i],plot2(sin(x)+i,x,0,10,typel));
1927 here typel gets evaluated because it is atomic)
1928 \x1f
1929 CFK@MIT-MC 02/29/76 10:33:24 Re: geography
1930 To: INFO-PLOT2 at MIT-MC
1931 to plot your favorite portion of the world do
1932 WORLDPLOT(<min-long>,<max-long>,<min-lat>,<max-lat>);
1933 the arguments are in degrees.  the projection is 
1934 unorthodox.  e.g. WORLDPLOT(-10,10,48,60);
1935 \x1f
1936 CFK@MIT-MC 02/21/76 19:58:43 Re: REPLOT4 for plotting 4 plots on the screen
1937 To: INFO-PLOT2 at MIT-MC
1938 the function REPLOT4 is available for quickly replotting
1939 4 plots in different parts of the screen. it can take up
1940 to 4 arguments which must be saved plots.  it plots the 
1941 first plot in the upper left hand corner of the default
1942 window (or of your own window, if WINDOW has a value), the
1943 second arg in the upper right hand corner etc.  it stops
1944 when it runs out of things to plot.  this function
1945 takes care of the business of specifying the FIRST and LAST
1946 options to REPLOT, so dont give them to REPLOT4.
1947 example:
1948 PLOT2(X,X,0,1); SAVEPLOT(A1);
1949 PLOT2(SIN(X),X,0,2*%PI); SAVEPLOT(B[1]);
1950 PLOT2(X^2,X,0,1); SAVEPLOT(FOO);
1951 REPLOT4(A1,B[1],FOO);
1952 \x1f
1953 CFK@MIT-MC 02/21/76 16:02:37 Re: plotting things on the SAME scale
1954 To: INFO-PLOT2 at MIT-MC
1955 if SAME appears amongst the last args to PLOT2, GRAPH2, PARAMPLOT2
1956 or REPLOT, it means plot this plot to the same scale as the previous
1957 plot.  plotting of axes and the printing of the line giving XMAX etc
1958 is supressed.  specification of a title and labels is allowed, but if
1959 the previous plot which defines the scale of this plot didnt have them
1960 they may appear in the wrong place (having wrapped around the screen).
1961 if you want to specify a title, then you should probably specify a null
1962 title "" in the original plot.  all this allows the superposition of 
1963 plots in a convenient way. e.g.
1964 CALCOMPNUM:40$
1965 PARAMPLOT2(SIN(T),COS(T),T,0,2*%PI,FALSE,FALSE,"");
1966 EQUALSCALE:TRUE$
1967 SAVEPLOT(TEMPLATE)$
1968 FOR CALCOMPNUM FROM 4 THRU 10
1969 DO (REPLOT(TEMPLATE,FIRST),
1970     TITLE:CONCAT("N = ",CALCOMPNUM-1),
1971     PARAMPLOT2(SIN(T),COS(T),T,0,2*%PI,FALSE,FALSE,TITLE,SAME,LAST) );
1972 \x1f
1973 CFK@MIT-MC 02/21/76 13:41:42 Re:  plotting at 9600 baud
1974 To: PLOT2 at MIT-MC
1975 when plotting on the tektronix PLOT2 uses a more long winded
1976 form of vector drawing commands in order for things to work ok
1977 at 9600 baud.  whether the long winded form for vectors is used
1978 is governed by the switch PADDED (defaults to TRUE for the tek-
1979 tronix and FALSE for the imlac).  so if you are using the tek-
1980 tronix at low speed you may want to set PADDED to FALSE, to 
1981 speed things up
1982 \x1f
1983 CFK@MIT-MC 02/21/76 13:38:34 Re:  hardcopies, clearing the screen
1984 To: PLOT2 at MIT-MC
1985 there are two new characters you can type when a plot
1986 is finished.  they are:
1987 <return>  this clears the screen
1988 <line-feed>  this gives you a hardcopy
1989 there are two new functions available.  they are
1990 CLEAR();  clears the screen
1991 HARDCOPY();  makes a hardcopy (if you're on the tektronix)
1992 \x1f