home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol194 / plot33.dqc / PLOT33.DOC
Text File  |  1985-02-09  |  75KB  |  1,613 lines

  1.  
  2.  
  3. PLOT33.DOC                                                         July 31, 1984
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.                     PLOT Version 3.3 (PLOT33) DOCUMENTATION
  18.  
  19.  
  20.         PART 1. PLOT USER'S GUIDE
  21.  
  22.              General Information
  23.              Running PLOT
  24.              Application Programming
  25.              PLOT Commands
  26.              Pitfalls and Limitations
  27.              Error Messages
  28.  
  29.  
  30.         PART 2. APPLICATION PROGRAMS
  31.  
  32.              BASIC Programs
  33.              TURBO PASCAL Library
  34.              FORTRAN Library
  35.  
  36.  
  37.         PART 3. INSTALLATION INSTRUCTIONS
  38.  
  39.              Sizing the Memory Map
  40.              Printer Settings
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                        1
  64.  
  65. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  66.  
  67.  
  68.  
  69.         PART 1 USER'S GUIDE
  70.  
  71.  
  72.         GENERAL INFORMATION
  73.  
  74.              This  collection  of  programs  contains  a graphics system
  75.         that  can  produce  high  resolution  graphics  on  dot   matrix
  76.         printers and  other  graphic  devices.   This system consists of
  77.         three parts:
  78.  
  79.              - high level language subprograms that you include in  your
  80.              application programs,
  81.  
  82.              -  a  disk file created by the application program which is
  83.              used to describe the pictures to be printed,
  84.  
  85.              - and low level device  drivers  that  read  the  file  and
  86.              produce  the  pictures on whatever sort of hardware you are
  87.              using.
  88.  
  89.         The application program "plots" by writing simple plot  commands
  90.         to  a  disk  file,  which  is  later read and printed by the low
  91.         level driver.  This  file  is  the  key  to  the  whole  system,
  92.         because  it  makes  the  application  program independent of the
  93.         plotting device and vice versa.  It also makes  it  possible  to
  94.         plot  pictures  that  were  created on different computers or to
  95.         plot the same picture on different types of  hardware,  such  as
  96.         CRT's and printers.
  97.  
  98.              The  system  contained  in  this  collection has high level
  99.         subprogram  libraries  written  in  BASIC   (GRAPH.BAS),   Turbo
  100.         Pascal(GRAF1.PAS and  GRAF2.PAS),  and  FORTRAN (GRAF.FOR).  A C
  101.         library is being debugged.  It contains  one  assembly  language
  102.         device  driver,  PLOT33.ASM, which will plot on a variety of dot
  103.         matrix printers.  These printers include the Epson  MX-80  etc.,
  104.         CItoh  Prowriter,  Okidata 92, NEC, Gemini-10, Apple Dot Matrix,
  105.         and IDS printers.  PLOT33 lets you treat your printer as  if  it
  106.         were  a  plotter  capable  of  true  vector graphics. All future
  107.         versions of PLOT (3.x) will support the same basic  file  format
  108.         and will be compatible with each other.
  109.  
  110.              This  documentation  describes how to get PLOT33 installed,
  111.         specifies the format for  the  disk  file  of  plotting  vectors
  112.         (".VEC"  files),  and  gives  an  overview  of  the  high  level
  113.         language packages. You will probably want to briefly  skim  over
  114.         the   descriptions  below  and  go  right  to  the  Installation
  115.         section.   If  you  intend  to  mainly  use  the  programs   and
  116.         subprogram  libraries  provided, the exact details of the format
  117.         of the commands in the file are not important.
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.                                        2
  126.  
  127. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  128.  
  129.  
  130.  
  131.         Capabilities
  132.  
  133.              PLOT's  command  set  includes  instructions   for   device
  134.         independent  graphics  and  commands  that provide access to the
  135.         unique capabilities of specific devices. The device  independent
  136.         commands  are  patterned  after a pen plotter's characteristics,
  137.         with a rudimentary capability for filling areas on  raster  scan
  138.         devices.    These   device   independent  commands  include  the
  139.         capability to move to a point without plotting, to  plot  points
  140.         and  straight  line  segments,  to change the current color, and
  141.         fill in  a  trapezoidal  area.    More  complex  areas  can   be
  142.         decomposed into simpler regions for filling.
  143.  
  144.              The  device  dependent  commands  include  the  ability  to
  145.         plot/print a string using hardware character capabilities.   The
  146.         Upload  command  can be used to upload the red-green-blue values
  147.         used for  the  color  table  on  color  graphics  terminals  (or
  148.         stipple  patterns  to be used for "colors" on monochrome devices
  149.         as in PLOT33).    The  Erase  command  will  clear  the  screen,
  150.         establish   the  background  color,  or  advance  the  page,  as
  151.         appropriate for the type of  plotter  or  display.    An  Output
  152.         command  is  used to produce hardcopy output or print the memory
  153.         map.  A general instruction that  can  be  used  to  extend  the
  154.         command  set  for any other non-standard command required rounds
  155.         out the device dependent commands.
  156.  
  157.         Bug Fixes and Future Versions
  158.  
  159.              The assembly language and BASIC  programs  in  this  system
  160.         have  been  tested  so  far  on four different computers and six
  161.         different types of printers.  I would appreciate  hearing  about
  162.         any  problems  you have or changes that you make to the program.
  163.         I am particularly interested in versions for different  printers
  164.         or  drivers for other plotting devices such as graphic terminals
  165.         and plotters.  Please send your comments and  questions  to  the
  166.         author at:
  167.  
  168.              Tom Speer
  169.              887 Briddlewood Ln.
  170.              Dayton, Ohio  45430
  171.              (513)429-2781
  172.  
  173.         It  is  important  that  a  common  version  be  maintained that
  174.         incorporates fixes  to  all  of  the  bugs  and  implements  the
  175.         improvements that are of general interest.
  176.  
  177.              As  mentioned  above, all future updates to this version of
  178.         PLOT will be compatible with the existing plot  files  and  high
  179.         level software.    Future  drivers are also planned for creating
  180.         and interpreting the vector command file on mainframe  computers
  181.         using CALCOMP  or Tektronics plotters and terminals.  As much as
  182.         possible, the eXtend command should be used for adding neat  new
  183.         features   for   your   printer   or  taking  advantage  of  the
  184.         capabilities of more  advanced  devices.    This  will  make  it
  185.  
  186.  
  187.                                        3
  188.  
  189. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  190.  
  191.  
  192.  
  193.         possible  to  maintain  the file format as a means of exchanging
  194.         information  without  a   fatal   proliferation   of   exclusive
  195.         versions.
  196.  
  197.         Acknowledgments
  198.  
  199.              I  owe a special debt of thanks to all the people that have
  200.         been my guinea pigs  in  adding  new  printers  and  discovering
  201.         bugs.   Especially  Hal  Carter  for his help and encouragement,
  202.         Kirk Horton for really wringing  out  the  system  in  his  VLSI
  203.         applications,  and Mike Gingrich for his critiques of the system
  204.         and documentation.
  205.  
  206.  
  207.         RUNNING PLOT
  208.  
  209.              To use PLOT, first create a sequential disk  file  of  plot
  210.         commands.  These  are described fully in the next section.  Then
  211.         execute PLOT by typing:
  212.  
  213.                                PLOT33 ifn [ofn]
  214.  
  215.              ifn is the input file  name.    A  file  type  of  .VEC  is
  216.         assumed if no file type is given.
  217.  
  218.              [ofn] is  an  optional output file name.  If no output file
  219.         is given, the output from PLOT will go directly to  the  printer
  220.         (CP/M LST:   device).    If  an output file is specified, all of
  221.         the information normally sent to the printer will be  stored  in
  222.         the disk  file instead.  In this case, no printed output will be
  223.         produced.  PIP or some other utility may be used  to  print  the
  224.         picture.   This  option  is useful for making multiple copies or
  225.         for including graphics  in  the  middle  of  text  files.    The
  226.         default output file type is .PLT .
  227.  
  228.              Note:  Output  files  are  large-  typically 40 to 60k.  Be
  229.         sure to leave enough space on the disk for the entire file.
  230.  
  231.  
  232.         APPLICATION PROGRAMMING
  233.  
  234.              Application programs  "plot"  by  writing  the  appropriate
  235.         plot command  to  a  disk  file.  This file later becomes PLOT's
  236.         input file.    The  plotting  area  is  a   square,   with   the
  237.         coordinates  (0.0  , 0.0) located at the bottom left corner, and
  238.         the coordinates (1.0 , 1.0) located at the upper  right  corner.
  239.         These  coordinate  values  are  independent of the resolution or
  240.         aspect ratio of  the  plotting  device.    PLOT  converts  these
  241.         values  to  the  actual  number  of  rasters  (dots) used by the
  242.         printer to produce a square plot approximately eight  inches  on
  243.         a side.
  244.  
  245.  
  246.  
  247.  
  248.  
  249.                                        4
  250.  
  251. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  252.  
  253.  
  254.  
  255.              All  plot commands are written to disk one after the other,
  256.         with no spaces or delimiting  characters  between  them.    Each
  257.         command  consists  of  an ASCII character followed by the binary
  258.         data which it requires. Many languages, such  as  BASIC,  insert
  259.         extraneous  characters,  such as carriage returns or line feeds,
  260.         at the end of each block written.   Because  of  this,  plotting
  261.         commands  should  not  be  split  between blocks, as these extra
  262.         characters will be interpreted as data in a  command.    If  the
  263.         extraneous   character   occupies  the  position  of  a  command
  264.         character, however,  it  can  be  detected  and  ignored.    The
  265.         current  application  programs  output plot commands in 128 byte
  266.         blocks.  If a command will not fit in a given block,  the  block
  267.         is  written  to  disk,  and  the  next  command written in a new
  268.         block.  This ensures that the extraneous  characters  will  fall
  269.         between commands  where  PLOT  can  deal  with them.  When using
  270.         fixed length blocks or records, each can be  padded  with  "N"'s
  271.         to preserve its length before it is written.
  272.  
  273.              The recommended command sequence to produce a picture is:
  274.  
  275.              1.   Set  the  color to black or white (color values 127 or
  276.              0) for a background.  Usually white is used.
  277.  
  278.              2.  Erase the picture to initialize  the  memory  map  area
  279.              and establish the background.
  280.  
  281.              3. Set  the  color value for plotting.  Usually black (127)
  282.              is used.
  283.  
  284.              4.  Establish a starting point by using the  Move  command,
  285.              plotting  a  single point, or plotting a line segment using
  286.              the Draw command.
  287.  
  288.              5. Proceed to create  the  remainder  of  the  plot.    The
  289.              Increment  command  is recommended when one line segment is
  290.              connected to the previous one, as in a curve.
  291.  
  292.              6.  Be sure to include  an  Output  command  to  print  the
  293.              final plot.
  294.  
  295.              7. Use  the  Quit  command  to  stop  plotting.   PLOT will
  296.              terminate automatically at  an  end-of-file,  but  with  an
  297.              error message, and without printing the picture.
  298.  
  299.  
  300.         PLOT COMMANDS
  301.  
  302.              Each command is of the form:
  303.  
  304.                                      Adata
  305.  
  306.         "A"  represents  the  single ASCII character as explained below.
  307.         "data" represents 0  to  86  bytes  of  data  required  for  the
  308.         particular command.    Usually  this  consists  of  fixed  point
  309.  
  310.  
  311.                                        5
  312.  
  313. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  314.  
  315.  
  316.  
  317.         numbers giving  the  coordinates  of  points  or  ends  of  line
  318.         segments.    No  spaces  or  delimitating  characters  are  used
  319.         between fields within  a  command  or  between  commands.    The
  320.         individual commands are described in Table 1.
  321.  
  322.              The  data  values  required  for  the plot commands are not
  323.         ASCII character strings.    Thus,  they  cannot  be  made  using
  324.         normal  formatted  output  of  the  coordinate  variables in the
  325.         application program.  The coordinate values  are  16  bit  fixed
  326.         point numbers.    These  are  created in a high level program by
  327.         multiplying the floating point value (between 0.0  and  1.0)  by
  328.         32767 and  truncating  the  result to an integer.  In BASIC, the
  329.         MKI$ function can  be  used  to  store  the  data  in  a  string
  330.         variable, which  is  then  written  to  the  disk file.  FORTRAN
  331.         programmers  can  simply  use  unformatted  files   or   convert
  332.         everything to  characters  and use A formats.  Under PASCAL, the
  333.         file can be declared to be a FILE OF CHAR and the binary  values
  334.         converted the  characters using the CHR function.  This does not
  335.         work well for Turbo Pascal,  however,  since  Turbo  places  the
  336.         file  size  and  record  length  at  the head of a FILE OF CHAR.
  337.         Turbo Pascal  users  should  use  TEXT  files  instead.      The
  338.         different  word  lengths,  internal  storage  formats,  and file
  339.         structures have to be considered when constructing  the  command
  340.         file  on  mainframes  and  microcomputers  other than CP/M based
  341.         machines.  The ablility to structure a file as a byte stream  is
  342.         the  basic  requirement.  The  CP/M  Dump utility can be used to
  343.         ensure that the contents of the file are what you expected.
  344.  
  345.              The 16 bit data values are stored with the low  order  byte
  346.         first (swapped  format).    This  is the standard way of storing
  347.         words for the 8080 and Z80 processors.  In the case of  the  one
  348.         byte  integer  required  by the Color command, the first element
  349.         of  the  string  created  by  MKI$  should  be  used,  as   MKI$
  350.         automatically places the bytes in swapped format.
  351.  
  352.              Note  that  because  the data values are not ASCII strings,
  353.         the CP/M TYPE command will not properly display the file at  the
  354.         console.   In  addition,  the  [O] option must be specified when
  355.         using PIP to transfer either the vector command file  (.VEC)  or
  356.         the printer (.PLT) file.
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.                                        6
  374.  
  375. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  376.  
  377.  
  378.  
  379.                                     TABLE 1
  380.  
  381.                                  PLOT COMMANDS
  382.  
  383.  
  384.                 Command    Length
  385.       Name  Character Data (bytes)      Command Data Description
  386.       ----------------------------------------------------------------------
  387.       Color    C      b      2   8 bit integer specifying one of a range of
  388.                                  colors.  0 indicates white,
  389.                                  127 indicates black.
  390.  
  391.       Draw     D     X1,Y1,  9   Coordinate pairs for ends of line segments.
  392.                      X2,Y2
  393.  
  394.       Erase    E             1   Sets the entire ploting area to the
  395.                                  currently selected Color value.
  396.  
  397.       Fill     F     X1,Y1, 11   Coordinate pairs for ends of line segment
  398.                    X2,Y2,Yf      and horizontal level (Yf) defines area to
  399.                                  be filled in with currently selected color.
  400.  
  401.       Incre-   I     X,Y     5   Coordinate pair for end of line segment.
  402.       ment                       Starting coordinate is last point plotted.
  403.  
  404.       Move     M     X,Y     5   Coordinate pair for new "pen" position.
  405.  
  406.       No-op    N             1   Ignored. Used as space filler in sequence
  407.                                  of commands to exactly fill a disk record.
  408.  
  409.       Output   O             1   Causes current picture to be printed.
  410.  
  411.       Point    P     X,Y     5   Coordinate pair for point to be plotted.
  412.  
  413.       Quit     Q             1   Commands normal termination of program.
  414.  
  415.       String   S     X,Y,    6   Coordinate pair for start of character
  416.                    string   to   string to be printed. String
  417.                             86   MUST end with a Carriage Return.
  418.  
  419.       Text     T   string   2+   String of arbitrary length. String MUST
  420.                                  end with a <NULL> (00H) character.
  421.  
  422.       Upload   U     N,      3   N is a 16 bit unsigned integer giving the
  423.                    values   to   number of values to follow.  Values
  424.                            N+3   specify basis for creating new "colors".
  425.  
  426.       eXtend   X     N,      3   N is a 16 bit unsigned integer giving the
  427.                    values   to   number of values to follow.  Values are N
  428.                            N+3   bytes of whatever data is necessary.
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.                                        7
  436.  
  437. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  438.  
  439.  
  440.  
  441.              The  following  sections  describe  the  way  in  which the
  442.         commands have been implemented in  PLOT  Version  3.3  (PLOT33).
  443.         Other  drivers  may  not implement them in exactly the same way,
  444.         but the general sense should be preserved.
  445.  
  446.              Colors are simulated in PLOT33 by using  stipple  patterns.
  447.         These  patterns  apply  to  all points, lines, and filled areas.
  448.         These patterns are based on 8 dot by 8 dot cells that  tile  the
  449.         entire picture  area.    Imagine  cutting  each  figure out of a
  450.         sheet  entirely  covered  with  the  desired  pattern  and  then
  451.         pasting it  on  the plot in progress.  This gives a general idea
  452.         of the way in which the patterns work.  Three different  methods
  453.         of generating  the  patterns  are  used.  Each method trades off
  454.         the memory  required  to  store  the  basic  patterns  with  the
  455.         ability to specify exactly what the pattern will look like.
  456.  
  457.              When  a  Color  command  is  given, all subsequent plotting
  458.         will be done with that "color", or pattern, until it is  changed
  459.         with another  Color command.  The Color command simply acts as a
  460.         selector to pick one of a number of colors or patterns that  are
  461.         currently available.    A  color code of 0 corresponds to white.
  462.         Lines and filled areas plotted with this color  will  absolutely
  463.         erase any  dots  that were previously plotted.  Color codes from
  464.         1 through 48 will produce cross hatched patterns  that  generate
  465.         checkered areas  and  other  distictive patterns.  Codes from 49
  466.         to 63 correspond to 15 special patterns that can  be  programmed
  467.         to  exactly  match  any  desired  pattern based on the 8 x 8 dot
  468.         cells.  Codes  from  64  through  127  are  generated  using  an
  469.         ordered  dither  matrix,  in  which  each succeeding code is the
  470.         same as the previous one, except  for  one  more  dot  per  cell
  471.         being plotted.    These are currently set to generate a range of
  472.         shades of gray.  All of these patterns can be changed under  the
  473.         control   of   the  application  program  by  using  the  Upload
  474.         command.
  475.  
  476.              Each dot is added to the memory map by OR'ing it  with  the
  477.         dots previously  plotted.    Each  subsequent  figure  does  not
  478.         totally obscure the existing  picture.    For  example,  suppose
  479.         that  a  gray  shade  is being used that consists of every other
  480.         dot being plotted.  The dots  that  are  not  plotted  will  not
  481.         cause  the  existing  dots  to  be  set  to  white  if they were
  482.         previously plotted.  Negative color values  (-1  to  -127)  will
  483.         use  the same pattern as their positive counterpart, but will be
  484.         XOR'ed with the existing picture.  This means  that  the  figure
  485.         will  be  plotted black on white or white on black, depending on
  486.         what the existing background  is.    Plotting  the  same  figure
  487.         twice  with  a  negative  color value will have no net effect on
  488.         the picture.  Filling the  whole  picture  with  -127  (negative
  489.         black)   will   have   an  effect  like  making  a  photographic
  490.         negative.
  491.  
  492.              The String command is used to mix  printed  characters  and
  493.         graphics.   The characters are printed using the printers normal
  494.         character set.  No facility is provided in PLOT33 to send  <ESC>
  495.  
  496.  
  497.                                        9
  498.  
  499. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  500.  
  501.  
  502.  
  503.         codes  or  control characters to the printer to change character
  504.         sizes or font styles.  The string is printed starting  near  the
  505.         coordinates given  in  the  command.    The  exact position will
  506.         vary,  but  the  first  character  will  cover  the   coordinate
  507.         location.   The ambiguity comes from the fact that most printers
  508.         can only print characters at their normal location on the  page,
  509.         and  can't  use  graphics commands to position the characters at
  510.         any arbitrary place  on  the  line.    In  addition,  a  printed
  511.         character  can't  be  part  on  one  line  of  print and part on
  512.         another.   Therefore,  PLOT33  computes  the  closest  character
  513.         location  to  the  desired  coordinates  and  begins  the string
  514.         there.
  515.  
  516.              The Text command will immediately send  a  text  string  to
  517.         the printer  when  the  command  is  encountered.  This is quite
  518.         different from the String command, because the text is  not  put
  519.         in the  memory map and is not part of the picture.  This command
  520.         is useful for positioning the plot on  the  page,  for  printing
  521.         titles  and  headers,  and  for advancing to the next page after
  522.         the plot is printed.  Any ASCII characters may  be  included  in
  523.         the  string, including control codes, escape sequences, carriage
  524.         returns, and  linefeeds.    The  only  exception  is  the   null
  525.         character,  00H,  which is used to signal the end of the string.
  526.         The string may be of any length.  This  makes  it  a  convenient
  527.         way  of  imbedding  a  figure in the middle of a document, since
  528.         all of the text above the figure can be  included  in  one  Text
  529.         command, as  can all of the text after the plot.  Any text to be
  530.         included in the plotting area itself must be  entered  one  line
  531.         at a time with the String command.
  532.  
  533.         Upload Command
  534.  
  535.              The   Upload   command  deserves  some  special  attention,
  536.         because it  is  the  least  standard  of  all  of  the  commands
  537.         currently implemented.     Most  dot  matrix  printers  can,  of
  538.         course, only print in black.  To give these printers  a  "color"
  539.         capability,  different  patterns have been programmed to produce
  540.         shades of gray and distinctive  cross  hatched  patterns.    The
  541.         cross  hatched  patterns are intended to be used for bar charts,
  542.         dotted and dashed lines, etc.  The shades are the  closest  that
  543.         PLOT33 can  come  to true colors.  The special patterns are very
  544.         useful for matching patterns produced by other systems, and  for
  545.         anything  that  just  can't  be done with the other two methods.
  546.         The Color command acts as  a  selector  to  choose  between  the
  547.         pre-defined patterns.   The Upload command is only needed if the
  548.         default patterns  are  not  capable  of  producing  the  desired
  549.         effect.   It  will  redefine  the  patterns from which the Color
  550.         command can select.
  551.  
  552.              The cross hatched patterns are based on  seven  bytes  that
  553.         provide  the  basic patterns in both the vertical and horizontal
  554.         directions for each cell.  One byte from the seven  is  selected
  555.         as  the X pattern and one byte from the seven is selected as the
  556.         Y pattern.  The X pattern is extended vertically throughout  the
  557.  
  558.  
  559.                                        10
  560.  
  561. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  562.  
  563.  
  564.  
  565.         cell,  and the Y pattern is extended horizontally throughout the
  566.         cell.   The  two  patterns  are  reversed  (XOR'ed)  where  they
  567.         cross.  The  effect  is much like weaving a plaid material.  The
  568.         selection of the bytes for the X and Y patterns is made  by  the
  569.         Color code.    The  lower  three bytes of the Color value select
  570.         the X byte and the next three bytes select  the  Y  byte.    The
  571.         best  way to determine the exact apperance of each pattern is to
  572.         experiment by filling blocks with different patterns.
  573.  
  574.              If the existing patterns are not acceptable, new  ones  can
  575.         be Uploaded.   Set  the number field, N, to 07H.  The next seven
  576.         bytes will be the bytes that form the basis  for  the  patterns.
  577.         Each bit  corresponds  to  a  dot in the pattern.  A byte of 07H
  578.         for the X pattern would produce the pattern .....*** .    If  an
  579.         F0H is used for the Y pattern, the final cell will look like:
  580.  
  581.                                     *****...
  582.                                     *****...
  583.                                     *****...
  584.                                     *****...
  585.                                     .....***
  586.                                     .....***
  587.                                     .....***
  588.                                     .....***
  589.  
  590.              The  second  type  of  pattern,  used  for  the  15 special
  591.         patterns, is specified by giving the 8 bytes  that  produce  the
  592.         pattern.   Thus,  the  sequence  00H 00H 99H 00H 00H 99H 00H 00H
  593.         will produce the pattern:
  594.  
  595.                                     ..*..*..
  596.                                     ........
  597.                                     ........
  598.                                     ..*..*..
  599.                                     ..*..*..
  600.                                     ........
  601.                                     ........
  602.                                     ..*..*..
  603.  
  604.         These patterns are uploaded by specifying 120 for N followed  by
  605.         the 120  bytes  that  define all 15 of the special patterns.  No
  606.         facility is provided for just uploading one set of 8 bytes.
  607.  
  608.              The other method for producing patterns for "colors" is  an
  609.         eight by  eight  byte  dither matrix.  In this method, each byte
  610.         in the matrix corresponds to one dot in the eight by  eight  dot
  611.         cell.  These  cells  tile  the  picture plane, as before.  Color
  612.         code values from 64 to 127 are used to select  the  64  patterns
  613.         created by  the  dither  matrix.   Each element of the matrix is
  614.         assigned a value from 63 to 126.  If the Color value is  greater
  615.         than  the value in the matrix corresponding to a given dot, that
  616.         dot is plotted.  Thus, 127 is greater than all of the  elements,
  617.         and  all  dots  in  the matrix will be plotted, producing black.
  618.         If each element of the matrix is  assigned  a  different  value,
  619.  
  620.  
  621.                                        11
  622.  
  623. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  624.  
  625.  
  626.  
  627.         then  a  unique  pattern  will  be  associated  with  each Color
  628.         value.  For example, if the Color code is 64, only  the  element
  629.         with a  value  of  63 will produce a dot.  If the Color value is
  630.         65, those elements with 63 and 64 will produce  dots.    As  the
  631.         Color  code  is  increased, and figures are plotted, another dot
  632.         in the "tile" has the potential for being plotted.
  633.  
  634.              The existing arrangement of values in the dither matrix  is
  635.         designed  to produce shades of gray with a minimum appearance of
  636.         organized patterns.  This matrix came from Foley and  Van  Dam's
  637.         "Fundamentals of  Interactive  Computer Graphics".  A common use
  638.         of the Upload  command  is  to  change  the  matrix  to  provide
  639.         diagonal patterns  for  shading  areas.    This  would produce a
  640.         pattern that looks like (for four cells):
  641.  
  642.                                      ////
  643.                                      ////
  644.                                      ////
  645.                                      ////
  646.  
  647.              To design an Upload sequence for a given pattern,  lay  out
  648.         a matrix  representing  a  single cell.  Start with 63 and place
  649.         the numbers in the matrix in the pattern desired.  For  example,
  650.         a  cell  from  the  diagonal pattern above could be created from
  651.         the matrix:
  652.  
  653.                    63 111  85 103  75 115  93  95
  654.                   112  64 104  86 116  76  96  94
  655.                    79 105  65 117  87  97  77 121
  656.                   106  80 118  66  98  88 122  78
  657.                    71 119  81  99  67 123  89 107
  658.                   120  72 100  82 124  68 108  90
  659.                    91 101  73 125  83 109  69 113
  660.                   102  92 126  74 110  84 114  70
  661.  
  662.         To see the pattern, look at the  matrix  part  way  through  its
  663.         construction:
  664.  
  665.                     63              75
  666.                        64              76
  667.                            65              77
  668.                                66              78
  669.                    71              67
  670.                        72              68
  671.                            73              69
  672.                                74              70
  673.  
  674.         For  this  matrix,  the  Color code 79 will result in all of the
  675.         above points being plotted  in  any  filled  in  area,  and  the
  676.         diagonal pattern will emerge.
  677.  
  678.              Once  the matrix is constructed, the Upload command to load
  679.         it is formed by an ASCII "U" followed by 40H,  00H  to  indicate
  680.         64  bytes  to come, and finally 03H, 6FH, etc., the bytes of the
  681.  
  682.  
  683.                                        12
  684.  
  685. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  686.  
  687.  
  688.  
  689.         matrix.  The matrix is read in  one  row  after  another  (  the
  690.         [1,1]  element  followed by the [1,2] element, ..., to the [1,8]
  691.         element, then the [2,1]  element,  ...).    All  of  the  matrix
  692.         values are  binary  8  bit  values.    In  BASIC,  use  the MKI$
  693.         function to convert the integers to strings, then use the  first
  694.         character.
  695.  
  696.              To summarize  the  Upload  command:  The Color codes from 1
  697.         to 48 are produced by  cross-hatched  patterns  based  on  eight
  698.         pattern bytes.   These can by Uploaded by a "U" 08H 00H followed
  699.         by eight new pattern bytes.  The Color codes from 49 throuth  63
  700.         are  Uploaded by a "U" 78H 00H and the 120 bytes that define the
  701.         15 cell patterns.  The Color  codes  from  64  through  127  are
  702.         produced by  a  dither  matrix.    This  is created by assigning
  703.         elements of an eight by  eight  matrix  the  values  63  through
  704.         126.   The  matrix  is Uploaded by a "U" 40H 00H followed by the
  705.         64 elements in row major order.
  706.  
  707.  
  708.         PITFALLS AND LIMITATIONS
  709.  
  710.              This  section  amplifies  the  more   subtle   points   and
  711.         limitaions of PLOT33's commands.
  712.  
  713.              The valid  range  for  coordinate  values  is 0 to 1.  This
  714.         corresponds to binary integer values from 0 to 32767.   As  each
  715.         point  is plotted, a check is made to insure that the coordinate
  716.         is within the memory map.  If  it  is  not,  the  point  is  not
  717.         plotted.   This  is mainly to keep the program from running amok
  718.         and writing over parts of  memory  that  are  not  part  of  the
  719.         memory map  of  the  picture.  This is not intended to be a form
  720.         of windowing.  If you want to zoom in on  a  part  of  a  larger
  721.         picture,  the  picture  should  be  clipped  by  the application
  722.         program.  Note also, that most high  level  languages  will  not
  723.         deal  with  positive  integers  that  are  larger than 32767, as
  724.         these larger numbers represent negative integers.
  725.  
  726.              In contrast to the coordinate values used for  all  of  the
  727.         graphic  commands, any coordinate value outside the picture used
  728.         to indicate the start of  printing  a  string  will  be  set  to
  729.         zero.   This  is intended to make the String command act as much
  730.         as possible like a normal printer.  When the string goes off  of
  731.         the  right  hand side of the plot, the X coordinate for the next
  732.         character will be set to zero and the string will  wrap  around-
  733.         just like  a carriage return without a linefeed.  All characters
  734.         that attempt to be printed above  or  below  the  plot  will  be
  735.         printed on the bottom line.
  736.  
  737.              String has  a few other points of interest.  Only printable
  738.         characters should be used.  Control characters and escape  codes
  739.         will  occupy  their  respective  positions in the memory map but
  740.         will not be printed.  This will cause the rest of  the  line  to
  741.         be  shifted  to the left and destroy its alignment with the rest
  742.         of the page.  Also, the character  pitch  must  agree  with  the
  743.  
  744.  
  745.                                        13
  746.  
  747. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  748.  
  749.  
  750.  
  751.         character  width  set at assembly time, or the alignment will be
  752.         affected.
  753.  
  754.              The coordinates for the start of the string  are  truncated
  755.         to the  nearest multiple of the size of the character.  Thus the
  756.         specified point will be within  the  first  character,  but  the
  757.         character  will  not  be  centered  or  aligned  with  the given
  758.         coordinate position.    This  was  done  because  most  printers
  759.         insist  that  the printed characters occupy these locations, and
  760.         PLOT33 has to respect this or the aligment of the  rest  of  the
  761.         line will again be affected.
  762.  
  763.              PLOT33  prints  the  strings, it does not plot them as line
  764.         segments.  Because of this, a printed character will  absolutely
  765.         occupy  its  location  on the plot, and any overlapping lines or
  766.         points will not  appear.    If  a  character  is  printed  on  a
  767.         patterned  background,  it  will appear as if it were in a white
  768.         box the size of the character.  If true graphic  characters  are
  769.         desired,  they  must be drawn by the application program as line
  770.         segments.  An additional implication of the  printed  characters
  771.         is  is  their  size  relative to the graphic bit images that are
  772.         sent to the printer.  The  graphics  are  printed  in  "strokes"
  773.         that are  one  dot  wide  and  seven  dots  high.   Many printed
  774.         characters are higher than  seven  dots  especially  those  that
  775.         have descenders.    A printed character occupies a space that is
  776.         seven dots high in the memory  map.    Thus,  the  top  line  of
  777.         capital  letters  and  the lower case descenders can overlap the
  778.         graphics area above and below the  nominal  area  of  a  printed
  779.         character.   The  distance  that  the  paper is advanced between
  780.         lines is dictated by the height of a graphic  "stroke",  and  is
  781.         nearly  always  smaller  than the normal single spaced distance.
  782.         Printed lines must therefore be "double  spaced"  by  specifying
  783.         starting coordinates  that  are well separated vertically.  This
  784.         is a device dependent aspect, and a  litle  experimentation  may
  785.         be needed to achieve a good appearance.
  786.  
  787.              The  last  caution about the String command is that it MUST
  788.         end with a carriage return character.  This signals the  end  of
  789.         the  string,  and  without it, the program will continue to read
  790.         the rest of the input file  as  part  of  the  string  until  it
  791.         either  encounters  a  carriage  return  or the end of the file.
  792.         The String and Text commands are the  only  commands  with  this
  793.         potential,  as all of the others have a definite number of bytes
  794.         of data.  All these caveats regarding  the  String  command  may
  795.         sound  a  little  gruesome,  but it is really not much different
  796.         from normal printing.  If its limitations  are  too  inhibiting,
  797.         you must draw the characters instead of printing them.
  798.  
  799.              The  Text  command  is output to the printer at a different
  800.         time than any of the other commands.    Its  contents  are  sent
  801.         immediately  when  it  is read, whereas all other commands cause
  802.         their actions to be stored in the memory map  and  only  printed
  803.         when an  Output command is received.  Thus, it cannot be used to
  804.         send escape sequences to  the  printer  in  the  middle  of  the
  805.  
  806.  
  807.                                        14
  808.  
  809. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  810.  
  811.  
  812.  
  813.         plot.   Whether  graphics  commands  (such  as Draw, Fill, etc.)
  814.         preceed or follow a Text  command  is  immaterial,  since  these
  815.         commands  affect  the  memory map at the time that they are read
  816.         and not the printer.  What really matters is the position  of  a
  817.         Text command relative to the Output commands in the file.
  818.  
  819.              Like  the carriage return at the end of the String command,
  820.         omitting the 0 byte at the end of  the  Text  command  can  have
  821.         disasterous consequences.
  822.  
  823.              The  line  spacing  used  in  the Text command is different
  824.         from the line spacing in the plot itself.   The  Output  command
  825.         sets  the  line spacing to be appropriate for graphics, and then
  826.         resets it to the normal text single spacing when  done.    If  a
  827.         uniform  appearance  is  required  throughout, each Text command
  828.         should  contain  the  control  characters  or  escape  sequences
  829.         required  to set the line spacing to match that used in the plot
  830.         itself.
  831.  
  832.              The final consequence of the line spacing is that the  form
  833.         length  and  the top of form position set in the printer will be
  834.         wrong.  The Output command will  result  in  the  printer  being
  835.         positioned at  the bottom of the plot.  This is to allow several
  836.         plots to be  printed  sequentially  as  one  continuous  picture
  837.         without any  gaps  between them.  In order to advance to the top
  838.         of the next page, the Text command must be  used  to  issue  the
  839.         correct  number of line feeds and then tell the printer to reset
  840.         the top of form.
  841.  
  842.              The Output command does not  erase  the  existing  picture.
  843.         Thus  several  copies  of  the  same  plot  can  be  produced by
  844.         repeating the command.  In addition, this allows building  up  a
  845.         picture in  stages  and printing it at each stage.  To print one
  846.         plot and start anew, you must Output the first,  set  the  Color
  847.         to  white,  Erase  the  page, and then set the Color back to the
  848.         plotting color or pattern.  The program does  not  automatically
  849.         execute  an  Output command at the end-of-file or when Quitting.
  850.         You must include an Output command to get  any  output  at  all.
  851.         This  philosophy  is  to  accomodate those devices, like graphic
  852.         terminals, that display the plot as it is being made,  and  only
  853.         need an Output command for hardcopy.
  854.  
  855.  
  856.         ERROR MESSAGES
  857.  
  858.  
  859.         Disk is Full.
  860.  
  861.              Fatal error.    No  more room exists on the designated disk
  862.         for writing the  output  file.    Ensure  that  enough  room  is
  863.         available and  run PLOT again.  Note that a different disk drive
  864.         may be specified for the output file than the one used  for  the
  865.         input file.    If  disk  space is not available, run PLOT in the
  866.         direct printing mode.
  867.  
  868.  
  869.                                        15
  870.  
  871. PLOT33.DOC                    PLOT User's Guide                    July 31, 1984
  872.  
  873.  
  874.  
  875.              Any remnant of the output file  may  be  printed,  but  the
  876.         last  record  will probably contain an incomplete graphic output
  877.         sequence.  The printer will expect to receive  additional  bytes
  878.         of graphics.    This  will produce a swath of dots with a random
  879.         apperance, unless nulls are sent.    In  addition,  the  printer
  880.         line  spacing  will  remain  set  for  the  size  of the graphic
  881.         output.
  882.  
  883.         End of File.
  884.  
  885.              Fatal error.  The end of the  input  file  was  encountered
  886.         when PLOT  attempted  to  read  the  next  record.    Add a Quit
  887.         command for the normal termination of the program.
  888.  
  889.         File not Found.
  890.  
  891.              Fatal error.  The file name given for the input file  could
  892.         not be  found  on  the  disk.    Make sure that the spelling was
  893.         correct, that the proper drive is specified in  the  file  name,
  894.         or the right drive is logged in as the default drive.
  895.  
  896.         No Directory Space Available.
  897.  
  898.              Fatal error.    When  PLOT tried to make a new output file,
  899.         there was no more room in the disk directory.    Erase  a  file,
  900.         use  a  different  diskette,  or run PLOT in the direct printing
  901.         mode, without making an output file.
  902.  
  903.         No File Specified.
  904.  
  905.              Fatal error.  No input file name was given.  PLOT will  not
  906.         prompt  you  for  a  file name, and there is no interactive mode
  907.         for entering commands.  Create an input file and try again.
  908.  
  909.         Undefined Command Character Encountered.
  910.  
  911.              Warning error.  When PLOT attempted to interpret the  ASCII
  912.         letter  portion  of  a  command, a character was found which did
  913.         not correspond  to  one  of  the  established  commands.    PLOT
  914.         ignores  these  characters  and  attempts  to interpret the next
  915.         character as a command.  If a command does not have  the  proper
  916.         number  of data bytes, or if an extraneous character is inserted
  917.         in the middle of the data portion of a command, the rest of  the
  918.         file will  be out of sequence.  Eventually, PLOT should get back
  919.         in step with the command stream, but  the  overall  effects  are
  920.         unpredictable.
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.                                        16
  932.  
  933. PLOT33.DOC                  Application Programs                   July 31, 1984
  934.  
  935.  
  936.  
  937.         PART 2.  APPLICATION PROGRAMS
  938.  
  939.  
  940.         BASIC PROGRAMS
  941.  
  942.              Several  sample  BASIC application programs are included as
  943.         examples of  possible  implementations.    BASIC  was   selected
  944.         because  it  is almost universally available on CP/M systems and
  945.         is a good language for quick one-of-a-kind  plots.    The  first
  946.         file  is  GRAPH.BAS.  This file contains a plotting "library" of
  947.         routines that give direct access to the low level commands  used
  948.         by PLOT.    It  also  includes  routines  for  scaling,  and for
  949.         drawing a complete graph with labeled axes.  This file  is  used
  950.         by the  other programs.  For each command that can be written to
  951.         the  .VEC  file,  there  is  a   corresponding   subroutine   in
  952.         GRAPH.BAS.
  953.  
  954.              To  use  these  subroutines,  first  load  the  appropriate
  955.         variables with the necessary data.  For example, to draw a  line
  956.         segment,  set  X1 and Y1 to the starting coordinates, and set X2
  957.         and Y2 to the ending coordinates (remember that  all  coordinate
  958.         values are  between  0.0 and 1.0).  Then GOSUB to the subroutine
  959.         for that function, in this case the DRAW LINE  SEGMENT  routine,
  960.         which is  currently  line  177.    That's  all that is required.
  961.         Drawing axes or graphs is done the same way.  Set  the  required
  962.         values and  GOSUB  to  the  appropriate  routine.    All  of the
  963.         variables are documented in the REM statements  at  the  top  of
  964.         the  file,  and  a  sample  plot  is  depicted,  followed by the
  965.         settings that   would   produce   it.      The   BASIC   package
  966.         automatically  issues  the  commands  to initialize the plotting
  967.         area, so  you  can  start  plotting  immediately  when  the  the
  968.         application part  of the program starts executing.  End the plot
  969.         by calling the QUIT PLOTTING routine, at line 200.    This  will
  970.         automatically  add  the  commands to print the picture and close
  971.         the file.
  972.  
  973.              Four statement functions are provided to make  it  easy  to
  974.         scale your  data and compute plotting coordinates.  Functions RX
  975.         and RY will  convert  your  "real  world"  values  to  X  and  Y
  976.         coordinates for  plotting.    Functions  UX  and  UY do just the
  977.         opposite, converting coordinates on the page to  the  equivalent
  978.         coordinates in  the user defined plane.  These functions require
  979.         that you have established the  margins,  etc.  as  if  you  were
  980.         plotting a  graph.    The default values for these settings will
  981.         result in the conversion functions  simply  returning  the  same
  982.         value as  their  input.    Note  that  although  the margins are
  983.         useful for confining the plotting to one section  of  the  page,
  984.         no  clipping  is  done  to insure that all of the points plotted
  985.         are indeed confined to that area.
  986.  
  987.              The next file is called TEST.BAS.  It is a  sample  program
  988.         that illustrates  how  to use the routines in GRAPH.BAS.  To use
  989.         TEST, enter BASIC-80, then LOAD "GRAPH.BAS".  MERGE  "TEST.BAS",
  990.         and RUN  it.   The program can produce one or both of two plots.
  991.  
  992.  
  993.                                        17
  994.  
  995. PLOT33.DOC                  Application Programs                   July 31, 1984
  996.  
  997.  
  998.  
  999.         The first is a polygon with all of  the  vertices  connected  to
  1000.         each other.    This  provides  a  good  test of the line drawing
  1001.         capabilities of PLOT.  The second plot is a graph  of  a  damped
  1002.         sine wave.    It illustrates nearly the complete range of PLOT's
  1003.         capabilities.
  1004.  
  1005.              Two  programs,  FILLS   and   UPLOAD,   are   an   aid   to
  1006.         experimenting  with  the  patterns  used  to represent colors by
  1007.         PLOT33.  Both are to be used with GRAPH.BAS in the same  way  as
  1008.         TEST.BAS.   FILLS.BAS  will  produce  an array of blocks showing
  1009.         the stipple patterns used  to  represent  each  "color".    This
  1010.         makes an  easy  reference  for  future  plotting.  UPLOAD.BAS is
  1011.         similar to FILLS.BAS, except that before  plotting  the  blocks,
  1012.         it Uploads  new definitions for the patterns.  The dither matrix
  1013.         used is like the example used in the previous section. The  DATA
  1014.         statements  of  this  program  can be changed to experiment with
  1015.         different  definitions   and   then   incorporated   into   your
  1016.         applications.
  1017.  
  1018.              The final  program  is  HANDPLOT.BAS.    This  is a general
  1019.         purpose program for manual plotting of data.  The  program  uses
  1020.         a  menu  to  display  the  BASIC plot package settings and allow
  1021.         them to be changed.  Data can be typed  in  from  the  keyboard,
  1022.         saved in  a disk file, and plotted.  A limited number of symbols
  1023.         are avalilable for identifying data points and  the  points  may
  1024.         optionally be  connected by straight lines.  Plotting scales and
  1025.         axes may be  specified  manually,  or  determined  automatically
  1026.         from the  range of values in the data.  To make it easy to enter
  1027.         this program directly from the operating system  command  level,
  1028.         the  routines  in  GRAPH.BAS  have  already been included and no
  1029.         MERGE operation is required.
  1030.  
  1031.              When HANDPLOT is first entered, it  prompts  the  user  for
  1032.         the  name  of  the .VEC file, and for the dimensions of the data
  1033.         arrays.  It then displays the menu.  The menu  is  divided  into
  1034.         three  parts  which  are  concerned with the data, the format of
  1035.         the graph, and the activities  that  can  be  performed  by  the
  1036.         program.  It will look like this:
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.                                        18
  1056.  
  1057. PLOT33.DOC                  Application Programs                   July 31, 1984
  1058.  
  1059.  
  1060.  
  1061.         DATA SETTINGS
  1062.         No. of Variables  0               No. of Points  0
  1063.         1> Data Entry KEYBOARD            2> Input File
  1064.                                           3> Output File
  1065.         4> X Variable                     5> Y Variable
  1066.         6> Symbol NONE                    7> Connect points FALSE
  1067.  
  1068.         GRAPHIC SETTINGS
  1069.         X Axis    8> Min  0                9> Max  1          10> DeltaX  1
  1070.                  11> Label Chars 0        12> Divisions  0
  1071.         Y Axis   13> Min  0               14> Max  1          15> DeltaY  1
  1072.                  16> Label Chars  0       17> Divisions  0
  1073.         Margins  18> Left  0              19> Right  0
  1074.                  20> Bottom  0            21> Top  0
  1075.         22> Color Value  127              23> Auto-Scale  TRUE
  1076.         24> Clear Plot Area First FALSE
  1077.         25> Plot Output File Name JUNK.VEC
  1078.  
  1079.         ACTIONS
  1080.         26> Read New Data       27> Edit data            28> Write Data
  1081.         29> Plot Graph Axes     30> Plot Data            31> Title Plot
  1082.         32> Advance Page        33> End Program
  1083.  
  1084.         Enter Number of SETTING or ACTION?
  1085.  
  1086.         From  here,  the  program  is  operated  by  giving  all  of the
  1087.         required settings their correct value, and  then  selecting  the
  1088.         desired action.    This  is  done by entering the number printed
  1089.         next to the entry on the menu.  Each setting  will  then  prompt
  1090.         you for  the data that it needs, if any.  Several settings, such
  1091.         as Data Entry, only toggle between two values;   in  this  case,
  1092.         KEYBOARD or DISK.  The settings may be entered in any order.
  1093.  
  1094.              The  first  thing  you will probably want to do is to enter
  1095.         some data to be plotted.  If the data is to be read from a  disk
  1096.         file instead,  then  enter  1  to toggle to DISK.  You will then
  1097.         have to enter 2 to have the program prompt  you  for  the  input
  1098.         file's name.   If the data is to be typed in, you are already to
  1099.         go.  Now enter 26, and the program will start to read  the  disk
  1100.         file, or  prompt  you for the data.  Once the data has been read
  1101.         in, it can be changed using option 27, Edit Data.  The data  can
  1102.         also be  stored  on  disk using option 28.  The output file name
  1103.         is handled in the same way as the input file name.
  1104.  
  1105.              Next you will want to indicate, using  settings  4  and  5,
  1106.         which  variables are to be used for the X and Y axes and whether
  1107.         the points should be plotted with one of the  available  symbols
  1108.         and/or connected with straight lines.
  1109.  
  1110.              If  you are simply plotting a figure, you are ready to plot
  1111.         it using option 30, Plot Data.  If you  are  plotting  a  graph,
  1112.         then  all  of  the  settings in the next section should be given
  1113.         their correct value before plotting the  axes  with  option  29.
  1114.         Several  sets  of  data can be plotted on the same graph, simply
  1115.  
  1116.  
  1117.                                        19
  1118.  
  1119. PLOT33.DOC                  Application Programs                   July 31, 1984
  1120.  
  1121.  
  1122.  
  1123.         by changing the X and Y variables and symbol  and  plotting  the
  1124.         data again.   Strings can be printed anywhere on the graph using
  1125.         Option 31.
  1126.  
  1127.              The DeltaX  and  Divisions  settings  are  linked  to  each
  1128.         other,  as  are the DeltaY and Divisions setting for the Y axis.
  1129.         When the DeltaX or DeltaY  setting  is  changed,  the  Divisions
  1130.         settings  will  be  reset  to  indicate  the number of divisions
  1131.         between the Min and Max values.  If  the  Divisions  setting  is
  1132.         changed,  the  DeltaX  or  DeltaY  setting will be calculated to
  1133.         give a good engineering value (multiples of 1,  2,  5,  or  10),
  1134.         and  the  Divisions  setting  will reflect the revised number of
  1135.         divisions.  Thus the value you enter into the Divisions  setting
  1136.         will  only  be  approximately  the  value  that  will ultimately
  1137.         result.   If  your  engineering  esthetics   differ   from   the
  1138.         program's, you will have use the DeltaX and DeltaY settings.
  1139.  
  1140.              In  a similar fashion, the Auto-Scale option will reset the
  1141.         Max and Min values to include the actual range of the data,  and
  1142.         will  use  the  Divsions  settings  to  indicate the approximate
  1143.         number of labels to use for each axis.
  1144.  
  1145.              Advance Page  will  issue  an  Output  command,  clear  the
  1146.         frame, and  set  the  color  to black for further plotting.  The
  1147.         frames will be plotted one after the  other  with  no  space  in
  1148.         between them.    End Program will issue an Output command, close
  1149.         out all files and, return to the BASIC command level.
  1150.  
  1151.              Several plots can be put on one page, simply  by  adjusting
  1152.         the margin  values  between  plotting each graph.  If Clear Plot
  1153.         Area First, setting 24, is TRUE, the  area  inside  the  margins
  1154.         will  be  erased to white using the Fill command before the axes
  1155.         are plotted.  This is useful for plotting one graph as an  inset
  1156.         within a larger figure.
  1157.  
  1158.              The  data  file  has a simple format, and can be made using
  1159.         your  editor  or  another  program,  rather   than   laboriously
  1160.         entering all  the data with HANDPLOT.  The first record contains
  1161.         the number of variables, or  fields,  in  the  data  records  to
  1162.         follow.   The  next entries are names, up to 20 characters long,
  1163.         for each of the variables.  These  can  be  on  the  same  line,
  1164.         separated by  commas, or each may be on a record by itself.  The
  1165.         data values are next.  One value for each variable  is  read  in
  1166.         turn, until  the  end of the file is encountered.  The values on
  1167.         any given line are separated by commas, and each logical  record
  1168.         (one  value  for each variable) may be spread over several lines
  1169.         of data.  A sample data file is shown below:
  1170.  
  1171.         3                   <--- Three Variables
  1172.         X, Y, Z             <--- Names for each variable
  1173.         123, 4.56, 78.9     <--- First record: X=123, Y=4.56, Z=78.9
  1174.         10.11,1213,1516.17
  1175.         18.0, 19.0, 20      <--- Last record
  1176.  
  1177.  
  1178.  
  1179.                                        20
  1180.  
  1181. PLOT33.DOC                  Application Programs                   July 31, 1984
  1182.  
  1183.  
  1184.  
  1185.         TURBO PASCAL LIBRARY
  1186.  
  1187.              Turbo Pascal  support  is  provided  in  the  form  of  two
  1188.         "include" files  and  one  test program.  GRAF1.PAS contains the
  1189.         global declarations and lowest level routines.    These  provide
  1190.         direct access  to  the  commands  in  the  .VEC  file.   It also
  1191.         provides functions to do  scale  conversions.    GRAF2.PAS  uses
  1192.         these  routines  to  provide  the  additional capability to plot
  1193.         graphic characters, plot axes, and  do  whole  Cartesian  grids.
  1194.         Each  routine and its calling arguements are summarized in Table
  1195.         2.
  1196.  
  1197.              Plotting is initiated with  the  procedure  GRINIT.    This
  1198.         procedure  opens  the  disk  file  and  initializes the plot, as
  1199.         discussed previously.     It   also   initializes   all   global
  1200.         variables.   The  GRFINI  routine  writes  the  Output  and Quit
  1201.         commands and closes the plot file.
  1202.  
  1203.              The following routines correspond directly to  commands  in
  1204.         the plot  file:    COLOR,  ERASE,  FILL,  GPRINT, GSTRNG, GMOVE,
  1205.         POINT, SEGMNT, and VECTOR.
  1206.  
  1207.              Scaling is accomplished by using RWINDO  to  set  the  real
  1208.         world  limits  and  SWINDO  to  map  the  real world limits to a
  1209.         specific area on the page.  In the interest of execution  speed,
  1210.         no  clipping  is done to ensure that the plotting is confined to
  1211.         either window.  The functions SX and  SY  are  used  to  convert
  1212.         from  the  real  world  coordinates to the normalized device, or
  1213.         "screen" coordinates.  The reverse conversion  is  performed  by
  1214.         RX and RY.
  1215.  
  1216.              GRAPH  plots  a  complete  grid given the range of data and
  1217.         area on the page.  AXIS can be used to make special  graphs  and
  1218.         DXDY will  calculate  good  engineering  values  for  AXIS.  The
  1219.         graphic characters and strings are plotted by GCHAR and  GWRITE,
  1220.         respectively.
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.                                        21
  1242.  
  1243. PLOT33.DOC                  Application Programs                   July 31, 1984
  1244.  
  1245.  
  1246.  
  1247.                                     TABLE 2
  1248.  
  1249.                              TURBO PASCAL ROUTINES
  1250.  
  1251.  
  1252.         Name   Inputs Outputs   Function
  1253.         -----------------------------------------------------------------
  1254.         color                   Sets color/pattern- sends Color command.
  1255.                 code            integer which selects color or pattern
  1256.  
  1257.         erase                   Clears page- sends Erase command.
  1258.  
  1259.         fill                    Fills trapezoidal area- sends Fill command.
  1260.                 x1              normalized X coordinate for start of segment
  1261.                 y1              normalized Y coordinate for start of segment
  1262.                 x2              normalized X coordinate for end   of segment
  1263.                 y2              normalized Y coordinate for end   of segment
  1264.                 yf              normalized Y coordinate for fill level
  1265.  
  1266.         gmove                   "Pen up" move to point- sends Move command.
  1267.                 x               normalized X coordinate
  1268.                 y               normalized Y coordinate
  1269.  
  1270.         gprint                  Prints picture- sends Output command.
  1271.  
  1272.         grinit                  Initializes .VEC file
  1273.                 name            string specifying name of .VEC file
  1274.  
  1275.         grfini                  Quits plotting, closes .VEC file
  1276.  
  1277.         gstrng                  Prints string- sends String command.
  1278.                 x               normalized X coordinate for first character
  1279.                 y               normalized Y coordinate for first character
  1280.                 strng           string to be plotted (no <CR> at end)
  1281.  
  1282.         point                   Plots point- sends Point command.
  1283.                 x               normalized X coordinate
  1284.                 y               normalized Y coordinate
  1285.  
  1286.         segmnt                  Plots line segment- sends Draw command.
  1287.                 x1              normalized X coordinate for start of segment
  1288.                 y1              normalized Y coordinate for start of segment
  1289.                 x2              normalized X coordiante for end   of segment
  1290.                 y2              normalized Y coordinate for end   of segment
  1291.  
  1292.         vector                  "Pen down" move- sends Increment command.
  1293.                 x               normalized X coordinate
  1294.                 y               normalized Y coordinate
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.                                        22
  1304.  
  1305. PLOT33.DOC                  Application Programs                   July 31, 1984
  1306.  
  1307.  
  1308.  
  1309.                          TURBO PASCAL ROUTINES (CONT)
  1310.  
  1311.         Name   Inputs Outputs   Function
  1312.         --------------------------------------------------------------------
  1313.         rwindo                  Establishes real window for scaling.
  1314.                 xmini           real world value at left   side of window
  1315.                 xmaxi           real world value at right  side of window
  1316.                 ymini           real world value at bottom side of window
  1317.                 ymaxi           real world value at top    side of window
  1318.  
  1319.         swindo                  Establishes window on page for scaling.
  1320.                 sxlti           normalized X coordinate for left   side
  1321.                 sxrti           normalized X coordinate for right  side
  1322.                 syboti          normalized Y coordinate for bottom side
  1323.                 sytopi          normalized Y coordinate for top    side
  1324.  
  1325.         sx                      Converts from real world to normalized coord
  1326.                 rxi             real world X coordinate
  1327.                        sx       normalized X coordinate
  1328.  
  1329.         sy                      Converts from real world to normalized coord
  1330.                 ryi             real world Y coordinate
  1331.                        sy       normalized Y coordinate
  1332.  
  1333.         rx                      Converts from normalized to real world coord
  1334.                 sxi             normalized X coordinate
  1335.                        rx       real world X coordinate
  1336.  
  1337.         ry                      Converts from normalized to real world coord
  1338.                 syi             normalized Y coordinate
  1339.                        ry       real world Y coordinate
  1340.  
  1341.         axis                    Plots axis at arbitrary orientation.
  1342.                 r1              real world value at start of axis
  1343.                 r2              real world value at end   of axis
  1344.                 dri             real world increment for tic mark intervals
  1345.                 sx1             normalized X coordinate for start of axis
  1346.                 sy1             normalized Y coordinate for start of axis
  1347.                 sx2             normalized X coordinate for end   of axis
  1348.                 sy2             normalized Y coordinate for end   of axis
  1349.                 ticlen          normalized length of tic mark
  1350.                 ticang          CCW angle, in deg, from horiz. to tic mark
  1351.                 lblnum          integer number of char's in tic mark label
  1352.                 lbldec          integer number of char's after decimal pt.
  1353.                 lblang          CCW angle, in deg, from hor. to lbl X axis
  1354.  
  1355.  
  1356.  
  1357.  
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.                                        23
  1366.  
  1367. PLOT33.DOC                  Application Programs                   July 31, 1984
  1368.  
  1369.  
  1370.  
  1371.                          TURBO PASCAL ROUTINES (CONT)
  1372.  
  1373.  
  1374.         Name   Inputs Outputs   Function
  1375.         --------------------------------------------------------------------
  1376.         graph                   Plots complete Cartesian grid.
  1377.                 xmini           real world value at left   side of graph
  1378.                 xmaxi           real world value at right  side of graph
  1379.                 nx              integer- approximate number of X intervals
  1380.                 ymini           real world value at bottom side of graph
  1381.                 ymaxi           real world value at top    side of graph
  1382.                 ny              integer- approximate number of Y intervals
  1383.                 sxl             normalized X coordinate for left   side
  1384.                 syb             normalized Y coordinate for bottom side
  1385.                 sxr             normalized X coordinate for right  side
  1386.  
  1387.         chset                   Sets size and orientation of graphic char's
  1388.                 xsize           normalized width of character
  1389.                 ysize           normalized width of character
  1390.                 theta           CCW angle, in deg, to char X axis from hor.
  1391.  
  1392.         gchar                   Plots graphic character.
  1393.                 cx              normalized X coord of bottom left corner
  1394.                 cy              normalized Y coord of bottom left corner
  1395.                 charin          ASCII character to be plotted
  1396.  
  1397.         gwrite                  Plots string of graphic characters.
  1398.                 x               normalized X coord of bottom left corner
  1399.                 y               normalized Y coord of bottom left corner
  1400.                 chars           string to be plotted
  1401.                 nchar           integer number of characters to be plot
  1402.  
  1403.         dxdy                    Calculates arguements for axis.
  1404.                 x1              real world value at start of axis
  1405.                 x2              real world value at end   of axis
  1406.                 nx              integer- approximate number of intervals
  1407.                        lblnum   integer number of char's in tic mark label
  1408.                        lbldec   integer number of char's rt. of decimal
  1409.  
  1410.         posang                  Converts angle to range in 0 to 360 deg
  1411.                 angle           angle to be converted
  1412.                        posang   converted angle
  1413.  
  1414.         ticend                  Calculates values for ends of axis
  1415.                 rmin            raw real world value for start of axis
  1416.                 rmax            raw real world value for end   of axis
  1417.                 dr              real world increment between intervals
  1418.                        pr1      converted real world value at start of axis
  1419.                        pr2      converted real world value at end   of axis
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.                                        24
  1428.  
  1429. PLOT33.DOC                  Application Programs                   July 31, 1984
  1430.  
  1431.  
  1432.  
  1433.                          TURBO PASCAL ROUTINES (CONT)
  1434.  
  1435.         Name   Inputs Outputs   Function
  1436.         ------------------------------------------------------------------
  1437.         writecmd                Buffered output of command string to file.
  1438.                 cmd             output string
  1439.                 cmdlen          integer number of characters to be output
  1440.  
  1441.         ne 4
  1442.         buffout                 Flushes buffer.
  1443.                 outunit         file variable specifying output file
  1444.                 outbuf          string of characters forming buffer
  1445.                 size            number of characters to be sent out
  1446.  
  1447.         concat2                 Concatenates portions of strings.
  1448.                 strng1          first string to be concatenated
  1449.                 nchar1          number of characters from strng1
  1450.                 strng2          second string to be concatenated
  1451.                 nchar2          number of characters from strng2
  1452.                        strng3   string containing strng1 and strng2
  1453.  
  1454.  
  1455.         FORTRAN LIBRARY
  1456.  
  1457.              A  collection  of  FORTRAN  routines  is  also  included in
  1458.         GRAF.FOR.  This file is the  FORTRAN  complement  of  the  Turbo
  1459.         Pascal library.    The  input  and  output  requirements for the
  1460.         FORTRAN routines are similar to those of  the  Pascal  routines,
  1461.         and are  fully  documented  in  the  comments within them.  They
  1462.         communicate with each other  through  a  labeled  COMMON  block.
  1463.         These  routines  have  been  run under Microsoft FORTRAN-80, but
  1464.         may require some modification for other compilers.
  1465.  
  1466.  
  1467.  
  1468.  
  1469.  
  1470.  
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.                                        25
  1490.  
  1491. PLOT33.DOC                Installation Instructions                July 31, 1984
  1492.  
  1493.  
  1494.  
  1495.         PART 3.  INSTALLATION INSTRUCTIONS
  1496.  
  1497.  
  1498.         SIZING THE MEMORY MAP
  1499.  
  1500.              PLOT33  has  been  designed  to  keep  the  printer  driver
  1501.         program  small  while  providing the necessary primitive graphic
  1502.         operations for producing most pictures and plots.    The  reason
  1503.         for  the simplicity of the of the command set is because the bit
  1504.         map for the picture is LARGE.  It can  use  as  much  memory  as
  1505.         your computer  can  give  it.   The size of the memory available
  1506.         for the bit-map, in conjunction  with  the  resoultion  of  your
  1507.         printer, sets  the size of the plot that can be made.  The first
  1508.         step in installing the  program  is  to  decide  how  large  the
  1509.         memory area  for  the  bit  map  can  be.    The  program itself
  1510.         occupies about 4K.  Subtract this from the size of the TPA,  and
  1511.         reduce  the  result  by  a little more to provide a conservative
  1512.         pad.  The end result is the target size  for  the  size  of  the
  1513.         memory map.
  1514.  
  1515.              Divide  the target size by the printer resolution (dots per
  1516.         inch) in the horizontal  direction,  and  divide  again  by  the
  1517.         printer's vertical  resolution.    Multiply  this result by 7 (7
  1518.         dots are stored in each byte).   You  now  have  the  number  of
  1519.         square inches  that  can  be plotted.  Take the square root, and
  1520.         round down to a convenient size for each side of the plot.
  1521.  
  1522.              Now multiply the  height  of  the  plot  by  the  printer's
  1523.         vertical  resolution  and  round down to the nearest multiple of
  1524.         7.  The number of dots in the vertical  direction  should  be  a
  1525.         multiple  of 7 because seven dots are stored in each byte of the
  1526.         memory map.  PLOT33 has no provisions for handling a byte  which
  1527.         is contains  bits that are part in and part out of the map.  You
  1528.         now have the total number of dots  in  the  vertical  direction,
  1529.         and  dividing  by  7  gives  the  number  of  lines that will be
  1530.         printed when the plot is made.  Finally, divide  the  number  of
  1531.         dots  in  the  vertical  direction by the vertical resolution to
  1532.         get the final size, in inches, of the plot.
  1533.  
  1534.              Multiply the final size  of  the  plot  by  the  horizontal
  1535.         resolution  to  get  the  final number of dots accross the page.
  1536.         The final map  size  is  the  product  of  the  number  of  dots
  1537.         horizontally  multiplied  by  the  number  of  dots  vertically,
  1538.         divided by 7.
  1539.  
  1540.              As an example, consider a 56K CP/M system.  Subtracting  4K
  1541.         for the PLOT program and 100H for the start of the TPA:
  1542.  
  1543.              Target Size = 57344 - 4096 - 256 = 52992 bytes
  1544.  
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551.                                        26
  1552.  
  1553. PLOT33.DOC                Installation Instructions                July 31, 1984
  1554.  
  1555.  
  1556.  
  1557.         The  Epson MX-80 has 60 dots per inch horizontal and 72 dots per
  1558.         inch vertical resolution.
  1559.  
  1560.              Target Size/ Hor. Res./ Vert. Res. * 7 =
  1561.                52992    /   60     /    72      * 7 = 85.9 sq.in
  1562.                                                     ==> 9.2 in. per side
  1563.  
  1564.         Since the MX-80 can only plot 8 inches  horizontally,  the  plot
  1565.         is  limited  by  the  physical limits of the printer, not by the
  1566.         memory avalilable.  Calculating the vertical number of dots  for
  1567.         an 8 inch plot:
  1568.  
  1569.              8 * 72 = 576 dots ==> 82 lines @ 7 dots/line
  1570.                                ==> 574 dots vertically
  1571.  
  1572.         Since  only  2  dots  were lost due to truncating to the nearest
  1573.         number of whole bytes,  there  is  little  point  in  trying  to
  1574.         adjust the  horizontal  size  to  keep  the  plot  square.   The
  1575.         horizontal size is therefore:
  1576.  
  1577.              8 * 60 = 480 dots
  1578.  
  1579.         The final map size is calculated as:
  1580.  
  1581.              480 * 574 / 7 = 39360
  1582.  
  1583.         PRINTER SETTINGS
  1584.  
  1585.              Once the plot has been sized, you are ready to  modify  the
  1586.         settings  in  the  assembly  language  source file (PLOT33.ASM).
  1587.         This file is large, over 70K, so watch the disk space.  If  your
  1588.         editor  cannot  handle  a  file  this  large,  the CP/M standard
  1589.         editor, ED, can.  ED can also read from one disk  and  write  to
  1590.         another, if  necessary.    For  each type of printer there is an
  1591.         associated flag that controls the conditional assembly for  that
  1592.         printer.   Set  the  flag  for  your printer to TRUE and set the
  1593.         others to FALSE.  If your printer  is  not  listed,  it  may  be
  1594.         similar to  one  that  is.   For example, the Gemini-10 operates
  1595.         identically (for the purposes of this program)  with  the  Epson
  1596.         printers.   The  IDS printers use the same method as the Okidata
  1597.         printers for their graphics, and the NEC printers act  the  same
  1598.         as the C.Itoh printers.
  1599.  
  1600.              Next,  the  settings  for  your  printer must be changed or
  1601.         verified.   MAPSIZE  should  be  set  to  the  value  calculated
  1602.         above.   MAXX  and MAXY must be set to 1 less than the number of
  1603.         dots in  the  horizontal  and  vertical  directions.    For  the
  1604.         example  above,  MAPSIZE  becomes 39360, MAXX is set to 479, and
  1605.         MAXY to 573.
  1606.  
  1607.              Once the settings are  made  for  your  printer,  exit  the
  1608.         editor  and  assemble  the  program  using  ASM  or another 8080
  1609.         assembler.  Use LOAD to create  the  .COM  file  from  the  .HEX
  1610.         file, and the installation is finished.
  1611.  
  1612.  
  1613.                                        27