home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / math / plot172l / plot172l.txt < prev   
Text File  |  1993-07-28  |  45KB  |  902 lines

  1.                   PLOT - Version 1.72L            February 26, 1993
  2.                   ====================
  3.  
  4.   By:                 
  5.   John Cordes                               
  6.   Department of Physics
  7.   Dalhousie University
  8.   Halifax, N.S.
  9.   Canada B3H 3J5
  10.   Telephone: (902) 494-2313
  11.   email: cordes@ac.dal.ca
  12.  
  13.  
  14.   Copyright John Cordes 1990 - 93.  PLOT is freely distributable
  15.   provided this document is distributed with the executable file
  16.   PLOT172L.PRG.
  17.  
  18.          Bug reports, comments or suggestions are welcome.
  19.   **********************************************************************
  20.  
  21.                      Brief  Description of PLOT:
  22.                      ---------------------------
  23.  
  24.   PLOT is a two-dimensional plotting program for the Atari ST which runs
  25.   in high or medium (ST) resolution.  Its main features are (1) that it
  26.   can plot a large variety of functions entered at the keyboard, (2) it
  27.   can plot data read from disk files or entered 'by hand' in a built-in
  28.   data editor, and (3) it can produce good quality hardcopy on a variety
  29.   of printers using GDOS printer drivers and fonts.  PLOT was developed
  30.   in GFA Basic, Version 3; it is based on an earlier program I wrote in
  31.   True Basic.  The present version (Plot 1.72L) is compiled in GFA
  32.   v3.5E.
  33.  
  34.   'Any' number (i.e. no specific limit, just memory) of curves, in
  35.   various line and marker styles, may be overlaid on a single plot; any
  36.   combination of individual curves may be saved for printer output.
  37.  
  38.   Brief, context sensitive, on-screen help is available at many stages of
  39.   the program at the touch of the <Help> key.  Some, but not all, of the
  40.   information in the help screens will be repeated below; the user is
  41.   urged to read carefully the information in the help screens themselves.
  42.  
  43.   **********************************************************************
  44.  
  45.    ==============  A More Detailed Description of PLOT  ==============
  46.  
  47.     Please note: Additional information may be obtained by scanning the
  48.                  Revision History notes at the end of this file.
  49.  
  50.   When PLOT first starts up you are prompted to make a choice between
  51.   (k)eyboard or (a)rray input. This essentially means: do you want to plot
  52.   a function which you will type in at the keyboard ( keyboard input mode
  53.   option) or plot a set of data points (array input)? In the latter case
  54.   there will be a further prompt: should the data be read from a file, or
  55.   do you want to go directly to the data editor to enter some points?
  56.  
  57.   Another possibility at startup is to hit the F1 function key, which
  58.   takes you to a GEM screen, with a number of drop down menus.  There you
  59.   can do such things as run an external program, set some of PLOT's
  60.   options, check out which GDOS screen and printer fonts are available, or
  61.   call on a set of numerical utilities.
  62.  
  63.   Returning to the command screen (Return to plots, UNDO or ^P from the
  64.   GEM screen), where all the real work in PLOT is done, let's suppose
  65.   you choose option (k), keyboard function entry.
  66.  
  67.                       1. Editing Keyboard Entry
  68.      
  69.   When you are being prompted for entry of a function or a numeric
  70.   variable, the normal editing features are (usually) available: <Esc> to
  71.   clear the field, Delete, Backspace and Arrow keys all work; in addition
  72.   <Home> takes you to the beginning of the input string and <Control-Home>
  73.   takes you to the end. <Control-Left Arrow> and <Control-Right Arrow>
  74.   also move the cursor to the beginning and end, respectively, of the
  75.   input field.
  76.  
  77.   When done entering a function (press the Help key at any time for
  78.   guidance on the available functions and other matters), just press
  79.   Return to get to the screen where the Plot Box parameters can be
  80.   entered/modified; you can simply accept Plot's defaults with a single
  81.   press of the Return key. See below (in Section 3: Function Plotting) for
  82.   some examples of possible functions for typing in at the keyboard.
  83.  
  84.                         2.  The Plotting Box
  85.  
  86.   This program doesn't go in for automatic scaling!  The user is always
  87.   prompted at the beginning of plot construction for the range of the
  88.   plotting box (i.e.  xlower, xupper, ylower, yupper) and tick/label
  89.   spacings, etc.  The actual *size* and *location* on screen of the
  90.   plotting box can be set from the alternate (GEM) screen (the box
  91.   coordinates are described in the next paragraph); also the
  92.   presence/absence of the outer frame can be toggled from the menu bar.
  93.  
  94.   If you wish to change the default settings of the size and location of
  95.   the plotting box on the screen, you should be aware that the coordinates
  96.   used are pixels, measured relative to the upper left hand corner of the
  97.   screen.  For the high resolution screen the range is 0 to 639 pixels
  98.   horizontally and 0 to 399 pixels vertically.  For the medium resolution
  99.   screen the range is 0 to 639 horizontally and 0 to 199 vertically.
  100.  
  101.   A brief rundown on the variables you will be prompted for in setting up
  102.   the plotting box:
  103.  
  104.   XLOWER: x-coordinate of left edge of plotting box
  105.  
  106.   XUPPER: x-coordinate of right edge of plotting box
  107.  
  108.   XTICK: spacing of the minor tick marks.  If set to zero the x-axis will
  109.    be omitted entirely.  If xtick < 0, there will be no major or minor
  110.    ticks on the x-axis but there will still be ticks on the surrounding
  111.    frame (which I refer to as the plotting box).
  112.  
  113.   XLABEL: spacing of the major tick marks.  The labels will be placed at
  114.    the major ticks if xlabel > 0.  If xlabel = 0 there will be no major
  115.    ticks or labels anywhere.  If xlabel < 0 there will be no labels but
  116.    major ticks will occur at spacing ABS(xlabel).
  117.  
  118.       ***********   Summary of various tick/label settings  ***********
  119.  
  120.    1.  xtick>0,xlabel>0: Standard case.  Minor ticks at xtick; major
  121.        ticks and labels at xlabel.
  122.    2.  xtick=0,xlabel>0: Omit x-axis.  Major ticks and labels on box.
  123.    3.  xtick<0,xlabel>0: Omits x-axis ticks.  Major/minor ticks/labels
  124.        on box.
  125.    4.  xtick>0,xlabel=0: No labels.  Only (minor) ticks at xtick.
  126.    5.  xtick=0,xlabel=0: No x-axis, no ticks, no labels.
  127.    6.  xtick<0,xlabel=0: No x-axis ticks.  Minor ticks on box; no
  128.        labels.
  129.    7.  xtick>0,xlabel<0: Omits labels; still have x-axis
  130.        major/minor ticks.
  131.    8.  xtick=0,xlabel<0: Omit x-axis.  Major ticks on box, no labels.
  132.    9.  xtick<0,xlabel<0: No x-axis ticks.  Major/minor ticks on box; no
  133.        labels.
  134.  
  135.    Of course, if the plot box (i.e.  the outer frame) is not being drawn
  136.   (it can be toggled on/off in the alternate screen) some of the above
  137.   statements must be modified in a reasonably obvious way.
  138.  
  139.   ********************************************************************
  140.   YLOWER/YUPPER: Similar to xlower/xupper (see above).
  141.   YTICK/YLABEL:  Similar to xtick/xlabel (see above).
  142.  
  143.   GRAIN: This parameter determines the number of function evaluations,
  144.    i.e.  the fineness of the 'mesh'.  The recommended range is (4..2000),
  145.    but the actual lower limit is 1, while the upper limit is constrained
  146.    by the available memory in your machine, at least for screen plotting.
  147.    I have tried grain = 10,000 with no problem.  However, saving a curve
  148.    for printer output is another matter.  At the moment there is a hard
  149.    coded constraint of a little less than 10,000 for the total number of
  150.    function values which can be saved for later GDOS printing; if there
  151.    are arrays involved the x-coordinates need to be stored as well.
  152.  
  153.   LINE STYLE/THICKNESS: The best way to find out about the line styles
  154.    available is to run the program and use the Help key to read help
  155.    screen number 3.  The line thickness should be an odd number in the
  156.    range 1..35.  No harm is done by entering an even number but you won't
  157.    get it!  Also, if the line thickness chosen is anything greater than
  158.    one, the style reverts to the simple solid line (style 1).  Therefore,
  159.    to get one of the styles 2..6 you must enter 1 for the line thickness.
  160.  
  161.    The available line styles are:
  162.        1 = Solid
  163.        2 = Long dash
  164.        3 = Dot
  165.        4 = Dash,dot
  166.        5 = Dash
  167.        6 = Dash,dot,dot.
  168.  
  169.   The negative line styles are used to access the individual point
  170.   plotting mode.  E.g.  entering line style -8 (negative 8) results in a
  171.   small solid box being plotted at each of the mesh points; no connecting
  172.   line is drawn in this case.  See help screen 3 for descriptions of the
  173.   other 7 point styles.
  174.  
  175.    Available marker (point) styles are:
  176.        -1 = Dot (.)
  177.        -2 = Plus (+)
  178.        -3 = Asterisk (*)
  179.        -4 = Square ([])
  180.        -5 = Diagonal Cross (X)
  181.        -6 = Diamond (<>)
  182.        -7 = Solid box
  183.        -8 = Small solid box
  184.  
  185.  
  186.   GRID: This parameter controls whether or not a pattern of grid lines
  187.    will appear on the plot. If set to 1, a mesh of horizontal and
  188.    vertical grid lines will appear at the major tick intervals; if grid
  189.    is set to 0 (the default) no grid lines appear. The line style for the
  190.    grid may also be chosen (styles 1-6).
  191.  
  192.                       3.  Function Plotting
  193.  
  194.   In addition to the standard arithmetic operators +, -, *, /, ^, the
  195.   following functions of the single variable x are supported: SIN, COS,
  196.   TAN, ASIN, ACOS, ATN, EXP, LOG, SQR, SINH, COSH, ABS, SGN, GAMMA, and
  197.   HVS (Heaviside step function: HVS(x) is defined to be equal to 1 for x
  198.   >= 0 and to be 0 for x < 0.).  In addition, two kinds of Bessel
  199.   functions are supported at present: BSJ(a,x) - the Bessel function of
  200.   the first kind (usually called BesselJ(a,x), or J(a,x)) and BSI(a,x) -
  201.   the modified Bessel function I(a,x). The Bessel functions accept real
  202.   constants a (>=0) for the order; however, if the order entered is
  203.   non-integer, x will be restricted to values >=0.  The Airy function,
  204.   AI(x) (x positive or negative), is also supported.
  205.  
  206.   The function parser is not case sensitive - the function names are shown
  207.   in upper case in this document simply for easy visibility.  [See also
  208.   below for the INTEGRATE command].
  209.  
  210.   The maximum allowed length for a function is around 380 characters or
  211.   so.  It's not the parser that's limited to any particular length, but
  212.   rather the limitation comes about from what is then done with the
  213.   function - e.g.  plotting of a very long function is more likely to
  214.   cause a problem (such as error messages, followed by an exit from the
  215.   program, quite possibly) than using the expression evaluator. I have
  216.   successfully plotted functions with 387 characters, and have used longer
  217.   functions in the expression evaluator.
  218.  
  219.   Some effort is made to trap singular behaviour so that, for example, the
  220.   function 1/x can be plotted in a solid line style over a region spanning
  221.   the origin.  Some mathematical liberties are taken in the process, so
  222.   that, for example, if a plot of SQR(x) is requested in the range -5 < x
  223.   < 5, the plot is given properly for positive x but nothing is shown in
  224.   the region where x is negative and the square root doesn't exist (in the
  225.   domain of real numbers).  The lesson here is that in certain cases the
  226.   apparent plotting of a zero value should not necessarily be taken to
  227.   mean that the function is actually zero there!  In addition you should
  228.   be warned that if you try taking a *function* of SQR(x) (such as
  229.   SIN(SQR(x)) or BSJ(1,SQR(x)), say ), with negative values of x being
  230.   required in the plotting range, a fatal error may well occur; the
  231.   program will quite likely quit abruptly and ungracefully exit back to
  232.   the desktop (or shell or whatever). Sorry about that.
  233.  
  234.   Some examples of functions which could be entered at the (k)eyboard
  235.   prompt are:
  236.  
  237.   SIN(pi*x/4) - Ordinary trigonometric function
  238.   BSJ(1,x^2)   - Bessel function J(1,x^2)
  239.   BSJ(.5,x)    - Bessel function of order 1/2
  240.  .5*HVS(3+x)*HVS(3-x) - Draws a sort of 'top hat' function in range (-3,3)
  241.  
  242.  
  243.                        4.  Integration
  244.  
  245.   An additional possibility in function plotting mode is to plot the
  246.   integral of a function, from a specified lower limit to the variable
  247.   upper limit x.  The syntax for this is to enter INTEG(f(x),a) where f(x)
  248.   can be composed of the functions listed above and 'a' is the lower limit
  249.   of the integral.  So for example
  250.  
  251.   INTEG(.5*BSJ(1,x),0) - Integrates (1/2) times the Bessel function
  252.                          J(1,x), with lower limit of integration 0.
  253.  
  254.         x 
  255.        / 
  256.   i.e. | dx [0.5*J(1,x)] will be plotted as a function of x.
  257.        / 
  258.        0
  259.  
  260.  
  261.   SIN(pi*x)*INTEG(BSJ(1,x),0)/COS(x) is also allowed. (Try to avoid
  262.   dividing by a zero value though, since an error will likely occur.)
  263.  
  264.   However, the integration cannot occur as the argument of some other
  265.   function, so:
  266.    
  267.        SIN(INTEG(x,0)) is ILLEGAL.
  268.  
  269.   The rule is simply that there must not be parentheses around the INTEG.
  270.  
  271.   HINT: If a syntax error is reported (e.g.  missing parenthesis or Bessel
  272.   function index not a constant) when entering a function, and you have
  273.   trouble getting rid of the error message no matter how you edit your
  274.   function, try exiting function entry mode (use ESC to clear the edit
  275.   line and enter a backslash '\'), then go into (k)eyboard mode and try
  276.   again.
  277.  
  278.                     5.  Coordinate  Mode
  279.  
  280.   When the function has been plotted the console bell will sound and you
  281.   will see a notice on the screen to the effect that pressing <Esc> will
  282.   take you into coordinate mode.  If you accept this invitation the mouse
  283.   cursor will become a crosshair with which you can read off the (x,y)
  284.   coordinates of any point on the screen.  This feature is especially
  285.   handy for finding zeros of functions, or the x-value at which two curves
  286.   cross.
  287.  
  288.                    Saving the Coordinates:
  289.   After clicking the mouse at a point on the plot, if you press the <s>
  290.   key, a little message will flash on the screen saying 'saved'.  This
  291.   means that the coordinates of that point have been recorded for possible
  292.   later saving in a disk file.  When you exit coordinate mode with another
  293.   <Esc>, if any 'saves' have been made you will be asked if you really
  294.   want to save a file and then be prompted for a disk file name (in an
  295.   item selector box - the default extension .COO doesn't have to be used);
  296.   the file is a simple ascii file with a list of the coordinate pairs
  297.   selected.
  298.  
  299.   If you do not want to enter coordinate mode, just touch another key,
  300.   such as the space bar.  If you exit (or bypass) coordinate mode without
  301.   meaning to you can still press <Esc> later to re-enter coordinate mode.
  302.  
  303.                        6. After Coordinate Mode
  304.  
  305.  (a).  Pressing <Help> gives access to the 9 built-in help screens, as
  306.   usual.
  307.  
  308.  (b).  Pressing <F1> takes you directly to the 'alternate screen'.  This
  309.   is a screen with a standard drop-down menu bar, from which various
  310.   parameters may be set or utilities accessed.  Access to desk accessories
  311.   is also available here.  Under File there are options to save a plot as
  312.   an uncompressed Degas file (.PI3 or .PI2, depending on the resolution),
  313.   or to run an external program.  The printer device number can also be
  314.   altered from the default value (21) in this screen.
  315.  
  316.  (c).  Pressing <L> enters legend mode. Assuming you are running with GDOS
  317.   active, you will be prompted first for the Font ID number to be used.
  318.   This will be, for example, 2 for a Swiss font, 14 for a Dutch font, etc.
  319.   If you don't know the ID numbers for the fonts you have available, don't
  320.   despair! By going to the GEM screen (with the F1 key) and selecting
  321.   Fonts... under the Printer menu heading, PLOT will load the disk-based
  322.   screen and printer fonts available and present a table of those found.
  323.   The screen fonts will have the appropriate Font ID's listed for each
  324.   face; make a note of the ID numbers for future reference. The tables
  325.   will show the point sizes available for each typeface. After specifying
  326.   the typeface to be used by entering a Font ID, next enter the point
  327.   size.  For comparison, the axis labels in PLOT are in Swiss 18 point.
  328.   For best results, try to use a point size for which you have both screen
  329.   and printer fonts available.
  330.  
  331.   You will be prompted to enter some text.  When done press <Return> and
  332.   you will be asked whether the legend, or floating label, should be
  333.   horizontal or vertical.  After answering that query, you can move the
  334.   legend around the screen with the mouse - click with the left button to
  335.   'deposit' the text on the screen at the desired places.  When you have
  336.   finished clicking press <Esc> to 'paste' down your choices, or <Undo> to
  337.   remove all the legends just deposited. Sorry, but there is at the
  338.   present no way to move (or remove) floating labels once they have been
  339.   pasted in place. You may notice that the labels are not always
  340.   immediately re-drawn on the screen after some activity; they will
  341.   (usually!) appear 'soon' and in any case will almost certainly be
  342.   printed. You can press <L> again to add further legends or proceed to
  343.   step (d).
  344.  
  345.   (d).  Pressing <S> is essentially a 'continue' command: you will be
  346.   asked whether you want to save this curve for printing (this assumes
  347.   GDOS is present in the system; if it isn't this prompt will be
  348.   bypassed); assume for now that you answer no.  You will then be asked if
  349.   you want to change the plot parameters (if this is the first curve in
  350.   the plot) or if you want to plot any more curves (if this is not the
  351.   first curve or if you have finished trying new settings for the plot
  352.   parameters (such things as xlower, grain, style, etc.).
  353.  
  354.                           7.  Array  Plotting
  355.  
  356.   Choosing, at startup, option (a) for array plotting presents the user
  357.   with a further choice: reading a data file off disk (f) or using the
  358.   simple built-in data editor (e). Then, either (option (f)) a file
  359.   selector box will appear (default extender ".ASC") for choosing a data
  360.   file, or option (e) lands you in the data editor.
  361.  
  362.   If a data file is read in you will be told the number of points read
  363.   (the maximum number allowed is 2048) and then given the option of
  364.   looking at or modifying the data in the editor, transforming the data in
  365.   various ways, or plotting the data either 'as is' or with fitted curves
  366.   (a linear fit, a polynomial fit (more about this later), a fast cubic
  367.   spline which passes through all the data points, or a smoother (but MUCH
  368.   slower) spline fit which doesn't necessarily pass through the data
  369.   points.  For this latter option (ArrayOp 4) the spline order may be
  370.   input - the allowed values are 1, 2, or 3 (e.g.  this last would mean
  371.   the spline is with cubic curves).  More details on these options may be
  372.   found below.
  373.  
  374.            =============  Data  Files  ====================
  375.  
  376.   The format of the data files is illustrated in the following examples
  377.   (see also the file SAMPLE1.ASC, which should be included in this
  378.   distribution):
  379.  
  380.   ; comment1: this data file might be output from a Fortran program, say.
  381.   ; comment2
  382.   .
  383.   .
  384.   .
  385.   ; commentN
  386.   .27 3.4
  387.   1e-11 4e12
  388.   0 0
  389.   11 -.1
  390.  
  391.   Any number of comment lines may occur at the BEGINNING of the file. The
  392.   *first* character on a comment line must be a semi-colon <;> . After
  393.   this come the x-y coordinate pairs.  The separators may be spaces (any
  394.   number) or a comma; the separator type should not be mixed in a single
  395.   file, however; i.e.  don't use commas for some coordinate pairs and
  396.   spaces only for other pairs.  The following is ok, though:
  397.  
  398.   .27, 3.4
  399.    1,2
  400.     -2.5, 7 
  401.  
  402.    i.e.  when a comma is (consistently) used as the separator there may
  403.    also be leading/trailing spaces on the x and y values.
  404.  
  405.                      Summary of Array Options:
  406.                      =========================
  407.  
  408.  ArrayOp 0: Just pressing <Return> at the Array Ops menu gives this by
  409.   default.  Plots the data points 'as is'.  This allows for using
  410.   individual markers for the data points (use a negative line style) or
  411.   drawing a continuous curve through the points (as in function plotting).
  412.  
  413.  ArrayOp 1: Linear fit - a simple least squares straight line fit.  The
  414.   slope(m) and intercept(b) are shown on the screen with the fitted line.
  415.   There is no way to recover these values once this screen has been left.
  416.   At the moment this option is somewhat superfluous since option 2 (see
  417.   below) can be used with degree set to 1.
  418.  
  419.  ArrayOp 2: Polynomial fit - the user is prompted for the degree of the
  420.   polynomial to be used (this is the exponent of the highest power of x in
  421.   the polynomial).  E.g.  a(1)+a(2)*x+a(3)*x^2 has degree 2, and 3
  422.   coefficients to be determined, so at least 3 data points are required.
  423.   If you enter a degree which is greater than one less than the number of
  424.   data points the program sets degree=Ndatapoints -1.  The fitting is done
  425.   by a singular value decomposition of the 'design' matrix, rather than
  426.   directly solving the so-called normal equations.  This SVD technique is
  427.   slower (and takes a lot more code) than using the normal equations but
  428.   is much more informative and reliable (see, e.g.  Numerical Recipes, by
  429.   Press, Flannery, Teukolsky and Vetterling, p.518 in the Fortran volume).
  430.   After entering the desired degree for the fitting polynomial you will be
  431.   asked for the range of x - values over which the polynomial should be
  432.   drawn (you may only want the fitted curve to be shown in the
  433.   neighbourhood of the data points rather than over the whole range of the
  434.   plotting box).  Then the curve will be plotted.
  435.  
  436.               Viewing the Fitting Parameters and Singular Values
  437.               --------------------------------------------------
  438.  
  439.    After finishing with the coordinate display mode and pressing <S> to
  440.   move on, you will be asked if you want to see the results of the fitting
  441.   routine.  Here you see not only the polynomial coefficients but also the
  442.   singular values of the design matrix.  Some of these may have been set
  443.   to zero by the program because they fall below the limit set by the
  444.   relative error tolerance.  PLOT uses a default tolerance of 1.0E-06;
  445.   this may be modified while you are on the fitting parameters screen by
  446.   pressing <Control-T>.  (The new value will stay in effect until the
  447.   present series of plots is completed unless of course the value is
  448.   edited again.) When you leave the parameters screen the fitting
  449.   parameters and the coefficients are lost, so write them down if you need
  450.   them!  However, the polynomial coefficients can optionally be saved into
  451.   a file before leaving this screen.
  452.  
  453.    The next query is whether anything more is to be done with the data?
  454.   Answer yes if you want to plot the individual points (Option 0), try a
  455.   different fitting routine, use the data editor, etc.
  456.  
  457.   ArrayOp 3: This is a fast cubic spline interpolation through all the
  458.   data points.  PLOT will prompt for xmin and xmax values for drawing the
  459.   resulting curve.
  460.  
  461.   ArrayOp 4: This is a slow spline fit (not just interpolation) to the
  462.   data.  It is so slow that it is probably impractical for data sets with
  463.   more than about 15 - 20 points, say (unless you are very patient!).  The
  464.   order of the spline is input by the user; 3 is a cubic spline (but *not*
  465.   the same as option 3 - try it out and see).
  466.  
  467.             *********************************************************
  468.  
  469.                             8.  Printing
  470.  
  471.   Good quality hard copy is possible if GDOS is present in the machine and
  472.   a suitable printer driver plus font files are available on disk.  The
  473.   default device number for the printer driver (the number used in your
  474.   ASSIGN.SYS file) is 21 - this can be altered with a drop down menu
  475.   selection in the alternate screen; if you *are* going to alter the
  476.   device number I strongly recommend that you do it when starting up PLOT,
  477.   before you forget (the voice of experience speaking...). The program has
  478.   been tested with the 9-pin driver FX80.SYS (on a Citizen 120D), the
  479.   24-pin driver LQ800.SYS (on a Star NX-2400 and an Epson LQ500) and the
  480.   Atari laser printer driver SLM804.SYS (on an SLM804; I haven't tried it
  481.   on an SLM605 but assume it will work).
  482.  
  483.   If GDOS is present, (it, or a replacement, such as G+Plus must have been
  484.   loaded at boot time by being in the AUTO folder), you will be prompted
  485.   at a suitable stage to see if a given curve should be saved for
  486.   printing.  I will elaborate a little on this: You can overlay as many
  487.   curves as you please in a single plot, and any or all curves can be
  488.   tagged for plotting.  This means that the selected curves, together with
  489.   any floating labels/legends which you may have added to the plot via the
  490.   <L> key, will be printed on a single plot, after you have declared that
  491.   no more curves are to be added to the plot.
  492.  
  493.     Warning: saving array plots can be deceptive. The way things are set
  494.     up at the moment, only one curve is saved (the most recent) for each
  495.     data array that is read in. This means that if you want to plot both
  496.     the 'raw' data points and a cubic spline fit, and have both curves
  497.     printed, you must load the data file twice: the first time plot the
  498.     points only (ArrayOp 0) and save the curve for printing, the second
  499.     time plot the cubic spline (ArrayOp 3) and save that curve for
  500.     printing.
  501.  
  502.   You can also save the plot to a file GEMFILE.GEM by 'printing' with
  503.   device number set to 31 (metafile) - the ASSIGN.SYS file must contain
  504.   the metafile driver META.SYS for this to work.  This file can then be
  505.   printed with Migraph's OUTPRINT.PRG; I don't particularly recommend
  506.   trying to do much with the file in EASYDRAW itself, you'll find it's
  507.   pretty 'messy'. 
  508.  
  509.   [If GDOS is NOT present the only reasonable prospects for hardcopy are
  510.   either saving as a Degas picture or doing a screendump with Alt-Help;
  511.   SNAPSHOT.ACC doesn't get along well with PLOT at all.]
  512.  
  513.   At the time when a curve is first selected for printing, PLOT will go to
  514.   disk and look for the printer driver according to the device number
  515.   chosen (default: 21).  This number should match the number given to the
  516.   printer driver in the ASSIGN.SYS file.  If the driver is found PLOT will
  517.   offer some default scaling factors for both the horizontal and vertical
  518.   directions, appropriate to the resolution of the device to which you are
  519.   planning to send the output.  These typically result in a printed plot
  520.   of about 5.5" (horizontal) by 4.5" (vertical) on a 24-pin printer and
  521.   about 4.25" by 3.25" on a 9-pin printer; this assumes that you have not
  522.   altered the default plotting box size for the on-screen display.  Your
  523.   results may vary, however; do some experimenting with the scale factors!
  524.   The printouts look much better on the 24-pin printers (using Migraph's
  525.   printer drivers) than on the 9-pin -- at least, that's been my
  526.   experience.
  527.  
  528.            =============  ASSIGN.SYS files ================
  529.  
  530.   I usually use the same ASSIGN.SYS file used by EASYDRAW.  The actual
  531.   printer driver and font files must be available on disk in the location
  532.   shown in the PATH variable (in the ASSIGN.SYS example file below the
  533.   fonts and driver would be in folder GEMSYS on drive A:).
  534.  
  535.   PATH = A:\GEMSYS\
  536.   ; Change A: to drive with \GEMSYS\ folder
  537.   00p screen.sys
  538.   ; --START OF SCREEN FONTS--
  539.   01p screen.sys
  540.   02p screen.sys
  541.   03p screen.sys
  542.   ; list your medium res screen fonts here.
  543.   04p screen.sys
  544.   ; list your screen fonts for the ST mono screen here.
  545.   ; -- START OF PRINTER FONTS --
  546.   ;21 FX80.SYS     ; Epson 9-pin and compatibles printer driver
  547.   ; SWISS (Sans Serif) 9-pin printer fonts
  548.   ;EPSHSS07.FNT
  549.   ;ATSS10EP.FNT
  550.   ;ATSS12EP.FNT
  551.   ;EPSHSS14.FNT
  552.   ;ATSS18EP.FNT 
  553.   ;ATSS24EP.FNT
  554.   ;EPSHSS28.FNT
  555.   ;EPSHSS36.FNT
  556.   21 LQ800.SYS   ; Epson 24-pin and compatibles printer driver
  557.   ; SWISS  24-pin printer fonts
  558.   P24MSS07.FNT
  559.   ATSS10SP.FNT
  560.   ATSS12SP.FNT
  561.   ATSS18SP.FNT
  562.   ATSS24SP.FNT
  563.   P24MSS36.FNT
  564.   ; METAFILE
  565.   31r META.SYS
  566.  
  567.                              Memory
  568.                              ------
  569.  
  570.   Memory can be a problem in using GDOS and its associated drivers and
  571.   fonts.  When PLOT is first run it displays the free memory remaining -
  572.   this figure must be at least around 330K for the 9-pin or 24-pin drivers
  573.   to work.  If you're close to the limit you may only get a few fonts
  574.   loaded; also I'm not sure what happens if the memory is very tight and
  575.   you try to save several curves for printing on the same plot - one or
  576.   two curves should be alright. I have tried to put in a fair amount of
  577.   intelligent error trapping in case insufficient memory is found, but
  578.   it's always possible you could have a crash.
  579.  
  580.   In some tests with the SLM804 I used a Mega-4 and allocated over 3
  581.   Megabytes for the GDOS stuff (combination of the large printer
  582.   resolution and many fonts in the ASSIGN.SYS file).  1.4 Megabytes or so
  583.   will allow several SLM804 printer fonts (and the SLM driver). The
  584.   minimum memory required to allocate to the laser printer driver itself
  585.   (no fonts) seems to be about 980,000 bytes, though in some tests I've
  586.   seen this go as low as 940,000 bytes.  The additional memory required by
  587.   each font to be loaded corresponds quite well to the size of the font
  588.   file itself.  The order of fonts in your ASSIGN.SYS file is the order in
  589.   which fonts will be loaded (this is true on my system anyway, using
  590.   G+Plus; I don't know if it's universally true), so if there are 2 or 3
  591.   printer fonts you want to be available, list them first. You can use the
  592.   Font display feature of PLOT (function key F8 in the GEM screen) to
  593.   experiment a little with some of this; the information may also be
  594.   useful for operating other GDOS based programs. Be warned that if you
  595.   set the memory to be reserved for the program too low a crash will
  596.   result, requiring a re-set.
  597.   
  598.  **********************************************************************
  599.  
  600.                       Revision History
  601.                       ================
  602.  
  603. 1.72L:
  604.   1. Fixed a couple of places where the path information introduced in
  605.      v1.72H was getting lost.
  606.  
  607. 1.72J:
  608.   1. Speeded up data window scrolling with the arrow keys.
  609.  
  610. 1.72I:
  611.   1. Changed screen input routine for the range limits in cubic spline
  612.      fit plotting, to allow for arrays which might have x-coords such as
  613.      2E13; previously such a large number would not have been displayed
  614.      correctly.
  615.  
  616. 1.72H:
  617.   1. In array plotting mode, it's now allowed to go in and out of
  618.      cross-hair mode (with the ESC key) repeatedly.
  619.  
  620.   2. Introduced new path saving features for data files and running
  621.      external programs. The program is now much more convenient to use
  622.      when several data files are to be read from some folder.
  623.  
  624. 1.72E: 
  625.   1. Changed the GDOS printer device detection routine to recognize more
  626.      printers, including the DeskJet 500.
  627.  
  628.   2. Minor improvements to the data editor window handling, especially
  629.      for cases where the number of data points is 17 (the maximum which
  630.      can be displayed in the window at a time) or a little over.
  631.  
  632.   3. Fixed a recently appearing bug which messed up the invocation of the
  633.      data editor without a data file having being read in.
  634.  
  635. 1.72A:
  636.   1. Corrected a bug in the data file reading routine whereby the last 
  637.      line of data was missed if there was no blank line at the end of
  638.      the file.
  639.  
  640. 1.72:
  641.   1. Grid lines may now be put on the plot.
  642.  
  643.   2. Automatic sorting of data arrays is no longer done. Sorting was added
  644.      in v1.52, but was concealed from the user. As of version 1.72,
  645.      sorting is an option available in the data editor screen by pressing
  646.      the <s> key. This should speed up operations on large arrays which
  647.      don't need sorting. Note that if you insert points (in the data
  648.      editor) out of order, it will be advisable to do a sort before
  649.      leaving the editor if you plan to plot in a continuous line style; if
  650.      you're just going to plot individual points then there's no need to
  651.      do a sort.
  652.  
  653.   3. Keyboard controls have been introduced for scrolling the data editor
  654.      window, to complement the usual mouse operated scroll bar. Up/down
  655.      arrows scroll one line at a time, shift up/down scroll by a
  656.      screenful, and Home/Shift-Home move to the beginning/end of the
  657.      array.
  658.  
  659. 1.71:
  660.   1. Many of the information boxes resulting from menu selections in the
  661.      GEM screen have been re-written as conventional GEM dialog boxes
  662.      (with embedded code, so there's still no .RSC file with PLOT).
  663.  
  664.   2. Legends, or floating labels as they are sometimes called, now make
  665.      use of GDOS screen fonts, if GDOS is active. Any of the typefaces
  666.      and point sizes available may be used. Lists of the (GDOS) screen
  667.      and printer fonts and point sizes available may be viewed under the
  668.      Printer menu heading in the GEM screen (or function key F8).
  669.  
  670. 1.68:
  671.     1. The modified Bessel functions BSI(order,x) now allow a real, not
  672.        just integer, constant for the order.
  673.  
  674.     2. The Airy function, Ai(x), is now built in. It's evaluation is
  675.        expensive, since it is calculated in terms of fractional order
  676.        Bessel functions, which are themselves much more time consuming
  677.        than integer order Bessel functions.
  678.  
  679. 1.66:
  680.     1. Changed GDOS printer driver detection routine to allow a range of
  681.        resolutions for each class of printer; these had previously been
  682.        hardcoded to specific values (e.g. INTOUT(0) = 2399 for the
  683.        SLM804).
  684.  
  685. 1.65:
  686.     1. Fixed bug which caused program to quit if the (d)efault option
  687.        was used at the plot parameters screen.
  688.  
  689.     2. A few changes were made concerning the entry of very long
  690.        functions in keyboard mode. There should now be less chance
  691.        of overflow onto a second line.
  692.  
  693.     3. A problem which sometimes arose in calculating Bessel functions
  694.        of order 2.5 and greater, for x > 25, has been fixed.
  695.  
  696. 1.64a:
  697.     1. The configuration file has been extended to include the functions
  698.        in the history buffer, as well as the GDOS device number. Config
  699.        files can be saved (^G) and loaded (Alt-G) at the alternate GEM
  700.        screen. As before, if a config file is called PLOT.CFG and is 
  701.        located in the directory from which PLOT is run, it will be 
  702.        automatically read in at startup.
  703.  
  704. 1.60:
  705.     1. The INTEGration feature has been enhanced by allowing for
  706.       additional functions to appear before and after the integral,
  707.       e.g. it is now permissible to do
  708.  
  709.          sin(x)*integ(x,0)/pi
  710.  
  711.        The integral cannot, however, appear as the argument of a
  712.        function, so there should never be parentheses around
  713.        integ(x,a).
  714.  
  715.     2. The Bessel functions BSJ (Bessel functions of the first kind)
  716.        now accept real constants (not just integer) for their order.
  717.        This enables one to use the root-finding capability in PLOT
  718.        (Alt-Z at the GEM menu bar screen) to find the zeros of
  719.        spherical Bessel functions, since they are the same as the
  720.        zeros of half-integer order J's. The real constant for the
  721.        order must be non-negative, and if the order is indeed
  722.        non-integer, the function BSJ will only return sensible values
  723.        for non-negative x. It should be noted that the Bessel function
  724.        calculation with fractional order is much slower than in the
  725.        case of integer order; I will be attempting to optimize this
  726.        somewhat but am not expecting very significant improvements.
  727.        Technical note:  the integer order Bessel function calculations
  728.        are done using polynomial approximations, but for fractional
  729.        order a backwards recursion calculation is carried out.
  730.  
  731.     3. The saving of functions into the function history buffer can be
  732.        toggled with Alt-F. If one of the previously saved functions is
  733.        called up, using the up- and/or down-arrow keys, any edits to
  734.        that function are automatically saved. This means that even
  735.        when function saving is OFF, the previously saved functions
  736.        always contain the most recently used set of parameters.
  737.      
  738.     4. In the Calculator, or expression evaluating, mode (Alt-C in
  739.        the alternate screen), a feature has been added to make it
  740.        simpler to repeatedly evaluate a function at different values
  741.        of x. Just type a vertical bar (Shift-backslash) right after
  742.        the function and then type the numerical value of x at which
  743.        you want the function evaluated.  For example
  744.             sin(x)|22
  745.        will return the value of sin(22), and the cursor will
  746.        automatically be positioned after the bar, ready for input of
  747.        another value.
  748.      
  749.     5. The small solid box style (style number = -8) has been made
  750.        twice as big, so that printouts on a laser printer would turn
  751.        out better. The problem is that on the SLM804 the default line
  752.        thickness for curves is one, but that is too fine (in most
  753.        cases) on the laser, so I find it better to go to line
  754.        thickness 3. But then the small solid box didn't show up very
  755.        well over the thicker solid line, consequently I've rather
  756.        arbitrarily doubled the size of the small box. The effects of
  757.        this have not been tested on a dot-matrix printer; hope it
  758.        doesn't cause anybody a problem.
  759.  
  760.     6. It was sometimes a nuisance not being able to get back into
  761.        coordinate reading mode, once it had been exited or by-passed.
  762.        It is now possible to just hit <Esc> anytime after coordinate
  763.        mode has been left, or by-passed, until the <S> key has been
  764.        pressed. It's in fact easy now to go repeatedly into and out of
  765.        coordinate mode, whenever you're at the 'bare' plot, i.e. no
  766.        other prompt is requesting input at the time.
  767.  
  768.     7. The GAMMA function (syntax: gamma(x)) has been added. This
  769.        enables the factorials to be accessed, through the relation
  770.        Gamma(n+1)=n!
  771.  
  772.     8. I have begun to explore the possibilities of a config file, to
  773.        at least partially customize the setup of PLOT for a
  774.        particular user. So far all that is possible is to have a one
  775.        line ascii file, PLOT.CFG, containing a single number which is
  776.        the printer device number, for GDOS printing. Since PLOT comes
  777.        with a default device number of 21, some users might wish to
  778.        create a file containing the number 23, for instance, if their
  779.        ASSIGN.SYS file assigns 23 to their printer driver (otherwise
  780.        you have to remember to change the device number in the
  781.        drop-down menu screen). The presence of the file PLOT.CFG will
  782.        be checked for when PLOT is first run (in the directory from
  783.        which PLOT is run) and, if present, will be read.
  784.  
  785. 1.50:
  786.               1. pi (=3.14159...) can be used in function entry,
  787.           though not when you're being prompted for a *constant*.
  788.           Thus, for example, pi/2*cos(pi*x/2) is a legal function
  789.           entry, but xupper=pi/2 is not allowed.
  790.  
  791.               2. A function history buffer is now built in, so that
  792.           (up to 20) previously entered functions can be scrolled
  793.           through with the up/down arrow keys when you're being
  794.           prompted for function entry. (Function saving can be
  795.           toggled in v1.60).
  796.  
  797.               3. A new menu item, Numeric, appears on the alternate
  798.           (GEM) screen. Here you'll find several useful utilities:
  799.  
  800.                  Calculator: An expression evaluator.  Just type in any
  801.             (numerical) expression, such as sin(22), 2.5*bsj(0,pi/2),
  802.             etc.  and the result will be displayed.  If an 'x' appears
  803.             anywhere it will be taken to be 0. (See new stuff for
  804.             v1.60 for an improvement).
  805.  
  806.                  Zeros: Computes zeros for functions entered at the
  807.             keyboard.  e.g.  you could enter the function (at the y:
  808.             prompt) 'x^2-9', or something much more complicated.  You
  809.             will also have to enter the beginning and end of the
  810.             x-interval (x1 and x2) which will be searched, and specify
  811.             if one (option 0) or 'all' (option 1) roots are wanted.
  812.             What does this mean?  Well, if all roots are requested
  813.             (the default case), the grain setting (defaults to 100) is
  814.             used to divide the interval (x1,x2) into sub-intervals and
  815.             any sub-intervals for which the function has opposite sign
  816.             at the two ends will result in a zero being found.  If
  817.             only one zero is requested, the first zero will be located
  818.             (assuming f(x1)*f(x2) < 0).
  819.  
  820.                  Integration: A numerical integration routine, using 20
  821.             point Gaussian quadrature in each panel.  The number of
  822.             panels into which the interval is divided has a default
  823.             value of 1, but can be altered easily.  If more than 10
  824.             panels are set, intermediate (cumulative) results are
  825.             shown after each 10 panel set is completed.  In most
  826.             cases, you'll soon find that accuracy is rarely increased
  827.             by setting more than 1 or at most a few panels.
  828.  
  829.                  Polynomial Roots: Here a polynomial (of degree up to
  830.             size 20) can be entered.  Only univariate (single variable) 
  831.             polynomials are allowed, but the coefficients may be
  832.             complex.  The (possibly complex) roots are then computed
  833.             and displayed.
  834.  
  835.               While in any of these numerical utilities, screen output
  836.           may be paused (usually) by pressing any key (other than
  837.           Escape - see next sentence) (any key resumes).  Pressing
  838.           <Esc> aborts the current operation.  For example, if you
  839.           want to cut short the computation of zeros of some function,
  840.           pressing <Esc> aborts and returns you to the function entry
  841.           line.
  842.  
  843.          Also: Fixed a bug whereby a (c)ontinue after printing
  844.           hardcopy (with GDOS) messed up screen output (some plot size
  845.           parameters needed resetting after the workstation output).
  846.  
  847. 1.42:
  848.           Fixed a small problem where sometimes the user would be
  849.           prompted for curve printing even when no curves had been
  850.           saved for printing.  This only happened after a (c)ontinue
  851.           sequence.
  852.  
  853. 1.41:
  854.           The Help screens (accessible by pressing the <Help> key)
  855.           are now available at the ArrayOps screen.
  856.  
  857.               Changed the default printer device number (for GDOS) to
  858.           21 for the high resolution screen (it used to be set to 23).
  859.           Now 21 is used for both cases: monochrome and colour
  860.           monitors.
  861.  
  862. 1.34:
  863.           Corrected a problem where there was some confusion as to
  864.           whether the data editor should show the transformed or
  865.           untransformed data.  Found that the GFA Interpreter has a
  866.           bug to do with arrays, but things are OK in the compiled
  867.           version.  Same problem occurs with the 3.5E interpreter.
  868.  
  869. 1.33:     Fixed some problems with line thicknesses for the curves
  870.           occasionally interfering with box frame thickness.
  871.  
  872. 1.30:     Changed method of inputting plotting box parameters
  873.           (xlower..yupper, line style, etc.) from the 'line at a time'
  874.           approach to a full screen editing approach.  Now a single
  875.           <Return> accepts all the defaults and gets on with the job.
  876.  
  877. 1.26:     Added save to disk feature for coordinate pairs read off
  878.           the plot.
  879.  
  880. 1.25:     Added save to disk feature for the polynomial fit
  881.           parameters.
  882.  
  883. 1.23:     <t>rim feature added to editor.  This enables a data array
  884.           to be reduced (trimmed) in size.  In the data editor,
  885.           pressing the <t> key puts up a small box in which four
  886.           parameters are set.  These are:
  887.    (1) nstart - the number of the first data point to be retained.
  888.    (2) nstop - the number of the last data point to be retained (with a
  889.        possible exception if lastpoint is set).
  890.    (3) ntrim - the trim spacing.  E.g.  if nstart=2 and ntrim=3, then
  891.        every third point will be retained, starting with the second.
  892.        Thus the points retained in this example are 2,5,8,...  .
  893.    (4) lastpoint - Setting this to 1 forces the last (of the original
  894.        data set) point to be retained; leaving it at the default of 0
  895.        means that the trimmed array will terminate at whatever data pair
  896.        occurs at a value of nstart+(integer)*ntrim which is less than or
  897.        equal to nstop.
  898.      Note that this trimming procedure can be used to delete any
  899.    contiguous blocks of data, by using ntrim=1 and suitable values for
  900.    nstart and nstop.  The deletions occur only in memory, not on disk.
  901.    They cannot be undone, except by reading in the disk file again.
  902.