Provided by: gmt_4.5.11-1build1_amd64 bug

NAME

       pslib 4.3 - A PostScript based plotting library

DESCRIPTION

       pslib  was  created to make the generation of PostScript page description code easier.  It
       is a library that contains a series of tools that  can  be  used  to  create  plots.   The
       resulting PostScript code is ASCII text and can be edited using any text editor.  Thus, it
       is fairly easy to modify a plot file even after it has been created, e.g., to change  text
       strings, set new gray shades or colors, experiment with various pen widths, etc.  pslib is
       written in C but now includes FORTRAN  bindings  (thanks  to  John  Goff,  WHOI)  and  can
       therefore  be called from both C and FORTRAN programs.  To use this library, you must link
       your plotting program with pslib.a.  pslib is the  core  of  the  GMT  graphics  programs.
       pslib  output conforms to the Adobe Encapsulated PostScript File Specification Version 3.0
       (EPSL), and may be used as EPS files and inserted into, say, a Word  document  on  a  Mac.
       See Appendix F in the Technical Reference for detailed instructions.

       Before  any  pslib  calls can be issued, the plotting system must be initialized.  This is
       done by calling ps_plotinit (or ps_plotinit_hires), which  defines  macros,  sets  up  the
       plot-coordinate  system,  scales,  and  [optionally] opens a file where all the PostScript
       code will be written.  Normally, the plot code is written to stdout.  The measure unit for
       sizes  and  positions  can  be set to be centimeter (c), inch (i), or meter (m).  When all
       plotting is done, you must terminate the plotting system by calling ps_plotend.

       pslib uses the direct color model where red, green, and blue are  given  separately,  each
       must  be  in  the  range from 0-255.  If red < 0 then no fill operation takes place.  Most
       plot-items can be plotted with or without outlines.  If outline is desired (i.e.,  set  to
       1),  it will be drawn using the current linewidth and pattern. pslib uses highly optimized
       macro substitutions and scales the coordinates depending on the resolution of the hardcopy
       device so that the output file is kept as compact as possible.

       A  wide  variety  of  output devices that support PostScript exist, including laserwriters
       (color or monochrome) and workstations running PostScript based window systems like  Sun's
       OpenWindows.   xnews  (part  of OpenWindows) or ghostscript (public domain) can be used to
       create rasterfiles at a user-defined  resolution  (DPI),  making  it  possible  to  render
       PostScript on a Versatec and other non-PostScript raster devices.  Regular Sun rasterfiles
       created under NeWS from PostScript files can be sent to a variety of color hardcopy units.
       Check the devices available on your network.

       The  pslib  is  now  fully  64-bit compliant.  However, only a few function parameters are
       affected by this (such as the number of point in an  array  which  can  now  be  a  64-bit
       integer).  These few parameters are here given the type long to distinguish them from int.
       Note that under standard 32-bit compilation they are equivalent.  Users  of  this  library
       under  64-bit  mode must make sure they pass proper long variables (under Unix flavors) or
       __int64 under Windows 64.

FUNCTION CALLS

       The following is a list of available functions and a short description of what they do and
       what  parameters  they  expect.   All  floating  point variables are expected to be double
       (i.e., 8 bytes), whereas all integers are assumed  to  be  4  bytes  long.   All  plotting
       functions  are  declared  as  functions  returning an int.  Currently, the return value is
       undefined.

              void ps_arc (x, y, radius, angle1, angle2, status)
              double x, y, radius, angle1, angle2;
              int status;
                 Draws a circular arc centered on (x,y) from angle angle1 to angle2.  Angles must
                 be  given  in  decimal  degrees.   If  angle1 > angle2, a negative arc is drawn.
                 status is a value from 0 through 3.  1 means  set  new  anchor  point,  2  means
                 stroke the circle, 3 means both, 0 means none of the above.

              void   ps_axis   (xpos,   ypos,   length,   startval,   stopval,   tickval,  label,
              annotpointsize, side)
              double xpos, ypos, length, startval, stopval, tickval;
              double annotpointsize, side;
              char *label;
                 Plots an axis with tickmarks, annotation, and label.  xpos, ypos, and length are
                 in inches (or cm or meters), annotpointsize in points (72 points = 1 inch), else
                 data units are used.  side can be 0, 1, 2, or 3,  which  selects  lower  x-axis,
                 right  y-axis, upper x-axis, or left y-axis, respectively.  labelpointsize = 1.5
                 * annotpointsize.  A  negative  tickval  will  reverse  the  sense  of  positive
                 direction, e.g., to have the y-axis be positive down.

              void  ps_bitimage  (xpos,  ypos,  xlength,  ylength, buffer, nx, ny, invert, f_rgb,
              b_rgb)
              double xpos, ypos, xlength, ylength;
              unsigned char buffer[];
              int nx, ny, invert, f_rgb[3], b_rgb[3];
                 Plots a 1-bit image using the given foreground color f_rgb and background  color
                 b_rgb.   Specify  position  of  lower left corner and size (in inches) of image.
                 buffer is an unsigned character array with 8 pixels per byte.  nx,ny  refers  to
                 the  number  of  pixels  in  image.  The rowlength of buffer must be an integral
                 number of 8.  buffer[0] is upper left  corner.   buffer  values  are  stored  as
                 columns, starting at the lower left corner and ending at the upper right corner.
                 If invert is 0 then the bits that are 1 are painted with the  foreground  color,
                 while  bits  that  are  0 are painted with the backgound color.  If invert is 1,
                 foreground and background are switched.  To get a partly transparent image,  set
                 the  first  index of the foreground or background color to -1, i.e., f_rgb[0]=-1
                 or b_rgb[0]=1.  See the Adobe  Systems  PostScript  Reference  Manual  for  more
                 details.

              void ps_circle (xcenter, ycenter, diameter, rgb, outline)
              double xcenter, ycenter, diameter;
              int rgb[3], outline;
                 Plots  a  circle  and  fills  it with the specified color.  If outline == 1, the
                 outline will be drawn using current pen-width and -pattern.

              void ps_clipoff ()
                 Resets the clip path to what it was before the last call to ps_clipon.

              void ps_clipon (xarray, yarray, npoints, rgb, flag)
              double xarray[], yarray[];
              long npoints;
              int rgb[3], flag;
                 Sets up a user-definable clip path.   Plotting  outside  this  polygon  will  be
                 clipped  until  ps_clipoff  is  called.   If  red >= 0 the inside of the path is
                 filled with the specified color.  flag is used  to  create  complex  clip  paths
                 consisting  of  several  disconnected regions, and takes on values 0-3. flag = 1
                 means this is the first path in a multi-segment clip path.  flag = 2 means  this
                 is the last segment.  Thus, for a single path, flag = 3.

              void ps_colorimage (xpos, ypos, xlength, ylength, buffer, nx, ny, depth)
              double xpos, ypos, xlength, ylength;
              unsigned char buffer[];
              int nx, ny, depth;
                 Plots  a 1-, 2-, 4-, 8-, or 24-bit deep image.  This functions sets up a call to
                 the PostScript colorimage or image  operators.   xpos,  ypos,  xlength,  ylength
                 specify  the  position  of lower left corner and size (in inches) of image.  The
                 pixel values are stored in buffer,  an  unsigned  character  array  in  scanline
                 orientation  with  gray shade or r/g/b values (0 - 255) where 0 is black, 255 is
                 white.  buffer[0] is upper left corner.  depth is number of bits per pixel  (24,
                 8,  4,  2, or 1).  nx,ny refers to the number of pixels in image.  The rowlength
                 of buffer must be an integral number of  8/depth.   E.g.  if  depth  =  4,  then
                 buffer[j]/16  gives  shade for pixel[2j-1] and buffer[j]%16 (mod 16) gives shade
                 for pixel[2j].  When -depth is passed instead then "hardware"  interpolation  of
                 the  image  is  requested.   If  -nx is passed with 8- or 24-bit images then the
                 first one or three bytes of buffer holds the gray or r/g/b color for pixels that
                 are  to  be  masked out using the PostScript Level 3 Color Mask method.  See the
                 Adobe Systems PostScript Reference Manual for more details.

              void ps_colortiles (x0, y0, xlength, ylength, buffer, nx, ny)
              double x0, y0, xlength, ylength;
              int nx, ny;
              unsigned char buffer[];
                 Plots a true color image based on individual color tiles. x0, y0 is the location
                 of  the lower left corner of the image in inches.  xlength, ylength is the image
                 size in inches.  buffer contains rgb triplets stored as rgbrgbrgb... nx,  ny  is
                 the image size in pixels.

              void ps_command (text)
              char *text;
                 Writes  a  raw  PostScript  command  to  the  PostScript  output  file, e.g., "1
                 setlinejoin".

              void ps_comment (text)
              char *text;
                 Writes a comment (text) to the PostScript output file, e.g., "Start of graph 2".

              void ps_cross (xcenter, ycenter, diameter)
              double xcenter, ycenter, diameter;
                 Plots a cross (x) at the specified point using current  pen-width  and  -pattern
                 that fits inside a circle of given diameter. No fill possible.

              void ps_diamond (xcenter, ycenter, diameter, rgb, outline)
              double xcenter, ycenter, diameter;
              int rgb[3], outline;
                 Plots  a  diamond  and  fills it with the specified color.  If outline == 1, the
                 outline will be drawn using current pen-width and -pattern.  The symbol will fit
                 inside a circle of given diameter.

              void ps_ellipse (xcenter, ycenter, angle, major, minor, rgb, outline)
              double xcenter, ycenter, angle, major, minor;
              int rgb[3], outline;
                 Plots  a  ellipse with its major axis rotated by angle degrees and fills it with
                 the specified color.  If outline == 1, the outline will be drawn  using  current
                 pen-width and -pattern.

              void ps_encode_font (font_no)
              int font_no;
                 Will  reencode  this  font  using  the  current  encoding  vector  if  it is not
                 StandardEncoding.

              void ps_epsimage (xpos, ypos, xlength, ylength, buffer, size, nx, ny, ox, oy)
              double xpos, ypos, xlength, ylength;
              unsigned char buffer[];
              int size, nx, ny, ox, oy;
                 Plots an Encapsulated PostScript (EPS) image. The EPS file is stored  in  buffer
                 and  has size bytes.  This functions simply includes the image in the PostScript
                 output stream within an appropriate wrapper.  Specify  position  of  lower  left
                 corner  and  size (in inches) of image.  nx,ny,ox,oy refers to the width, height
                 and origin (lower left corner) of the BoundingBox.

              void ps_flush ()
                 Flushes the output buffer.

              void ps_hexagon (xcenter, ycenter, diameter, rgb, outline)
              double xcenter, ycenter, diameter;
              int rgb[3], outline;
                 Plots a hexagon and fills it with the specified color.  If  outline  ==  1,  the
                 outline will be drawn using current pen-width and -pattern.  The symbol will fit
                 inside a circle of given diameter.

              void ps_image (xpos, ypos, xlength, ylength, buffer, nx, ny, bits)
              double xpos, ypos, xlength, ylength;
              unsigned char buffer[];
              int nx, ny, bits;
                 Obsolete, simply passes arguments to ps_colorimage.

              void ps_imagefill (x, y, n, image, imagefile, invert, dpi, outline, f_rgb, b_rgb)
              double x[], y[], x0, y0;
              int n, image, invert, dpi, outline, f_rgb[3], b_rgb[3];
              char imagefile;
                 Similar to ps_polygon, but fills the area with an image pattern  rather  than  a
                 color  or  grayshade.   x  and  y  hold  the  arrays of n points.  90 predefined
                 patterns are available  (See GMT Appendix E).   image  gives  the  image  number
                 (1-90).  If set to 0, imagefile must be the name to the user's image, which must
                 be stored as a Sun 1-, 8-, or 24-bit rasterfile.
                 1-bit images only: (i) The set pixels (1) are colored using the RGB  combination
                 in  f_rgb,  while the unset pixels (0) are painted with b_rgb.  Set the f_rgb[0]
                 to -1 to make set pixels transparent.  Set b_rgb[0] to  -1  to  make  the  unset
                 pixels  transparent.   (ii)  If invert is TRUE (1), the set and unset pixels are
                 interchanged before plotting.
                 The unit size of the image is controlled by dpi (in dots-per-inch).  If  set  to
                 zero,  the  image  is plotted at the device resolution.  If outline is TRUE, the
                 current penwidth is used to draw the polygon outline.

              void ps_itriangle (xcenter, ycenter, diameter, rgb, outline)
              double xcenter, ycenter, diameter;
              int rgb[3], outline;
                 Plots an inverted and fills it with the specified color.  If outline ==  1,  the
                 outline will be drawn using current pen-width and -pattern.  The symbol will fit
                 inside a circle of given diameter.

              long ps_line (xarray, yarray, npoints, type, close, dummy)
              double xarray[], yarray[];
              long npoints;
              int type, close, dummy;
                 Draw a continuous line from the positions in the x-y arrays.  If close == 1, the
                 first  and last point will automatically be closed by the PostScript driver.  If
                 this is the first segment in a multi-segment path, set type == 1.   To  end  the
                 segments  and  have  the  line(s)  drawn,   set  type  == 2.  Thus, for a single
                 segment, type must be 3.  The line is drawn using  the  current  penwidth.   The
                 dummy is an obsolete parameter no longer used internally.

              unsigned char *ps_load_image (fp, header)
              FILE *fp;
              struct imageinfo *header;
                 Reads  the  image  contents  of the EPS file or Sun rasterfile pointed to by the
                 open filepointer fp.  The routine can handle Encapsulated  PostScript  files  or
                 1-, 8-, 24-, or 32-bit rasterfiles in old, standard, run-length encoded, or RGB-
                 style Sun format.

              void ps_octagon (xcenter, ycenter, diameter, rgb, outline)
              double xcenter, ycenter, diameter;
              int rgb[3], outline;
                 Plots a octagon and fills it with the specified color.  If  outline  ==  1,  the
                 outline will be drawn using current pen-width and -pattern.  The symbol will fit
                 inside a circle of given diameter.

              void ps_patch (xarray, yarray, npoints, rgb, outline)
              double xarray[], yarray[];
              long npoints;
              int rgb[3], outline;
                 Identical to ps_polygon except polygon must be < 20 points long and  there  will
                 be  no attempt to shorten the path by discarding unnecessary intermediate points
                 along straight segments.  Primarily used when painting  large  number  of  small
                 polygons  and  not waste output space.  If more than 20 points are given we pass
                 the buck to ps_polygon.

              void ps_pentagon (xcenter, ycenter, diameter, rgb, outline)
              double xcenter, ycenter, diameter;
              int rgb[3], outline;
                 Plots a pentagon and fills it with the specified color.  If outline  ==  1,  the
                 outline will be drawn using current pen-width and -pattern.  The symbol will fit
                 inside a circle of given diameter.

              void ps_pie (xcenter, ycenter, radius, azimuth1, azimuth2, rgb, outline)
              double xcenter, ycenter, radius, azimuth1, azimuth2;
              int rgb[3], outline;
                 Plots a sector of a circle and paints it with the specified RGB combination.  If
                 outline == 1, the outline will be drawn using current pen-width and -pattern.

              void ps_plot (xabs, yabs, kpen)
              double xabs, yabs;
              int kpen;
                 Absolute move (kpen=3) or draw (kpen=2), using current linewidth.  Use (kpen=-2)
                 to make sure the line is stroked.

              void ps_plotend (last_page)
              int last_page;
                 Terminates the plotting sequence and closes plot file (if other than stdout). If
                 last_page  ==  1,  then a PostScript showpage command is issued, which initiates
                 the printing process on hardcopy devices.

              void ps_plotinit (plotfile, overlay, mode, xoff, yoff, xscl,  yscl,  ncopies,  dpi,
              unit, pagesize, rgb, encoding, eps)
              char *plotfile, *encoding;
              int overlay, mode, ncopies, dpi, unit;
              double xoff, yoff, xscl, yscl;
              int pagesize[2], rgb[3]; struct EPS * eps;
                 Initializes  the  plotting.  If plotfile == NULL (or ""), then output is sent to
                 stdout, else output is sent to plotfile.  overlay should be 1 only if  you  plan
                 to append it to some existing PostScript file.  mode contains three flags in the
                 three lowest bits.  The lowest bit controls the plot orientation and  can  be  0
                 (Landscape)  or  1  (Portrait).   The  next bit, if set to 1, will re-encode the
                 fonts to include European accented characters using  the  now-obsolete  GMT  3.4
                 encoding.   To  use  the ISOLatin1 encoding set the 5th bit to 1.  The third bit
                 controls the format used to write PostScript images: 0  means  binary,  1  means
                 hexadecimal.   Most printers needs the latter while some can handle binary which
                 are 50% smaller and therefore execute faster.  xoff,yoff are used  to  move  the
                 origin  from  the default position in the lower left corner.  xscl,yscl are used
                 to scale the entire plot (Usually set to 1.0, 1.0).  Set  ncopies  to  get  more
                 than  1  copy.   dpi sets the hardcopy resolution in dots pr units.  For optimum
                 plot quality and processing speed, choose dpi  to  match  the  intended  plotter
                 resolution.   Examples are 300 for most laserwriters, 2540 for Linotype-300, and
                 ~85 for Sun screens.  When in doubt, use 300.  unit can be  any  of  0  (cm),  1
                 (inch),  or  2 (m), telling the plot system what units are used for distance and
                 sizes.  Note that, regardless of choice of unit, dpi is still  in  dots-pr-inch.
                 pagesize  means  the  physical width and height of the plotting media in points,
                 (typically 612 by 792 for Letter or 595 by 842 for A4 laserwriter plotters.  The
                 rgb  array  holds  the  color  of  the  page (usually white = 255,255,255).  The
                 encoding is the name of a character encoding scheme to be used, e.g.,  Standard,
                 ISOLatin1, ISO-8859-2, etc.  The EPS structure is defined in the pslib.h include
                 file and contains information that will make up the comments  header  of  a  EPS
                 file.   Programmers  who plan to call pslib routines should read the comments in
                 pslib.h first.  Note  that  the  FORTRAN  binding  does  not  expect  this  last
                 argument.

              void  ps_plotinit_hires  (plotfile, overlay, mode, xoff, yoff, xscl, yscl, ncopies,
              dpi, unit, pagesize, rgb, encoding, eps)
              char *plotfile, *encoding;
              int overlay, mode, ncopies, dpi, unit, rgb[3];
              double xoff, yoff, xscl, yscl;
              double pagesize[2]; struct EPS * eps;
                 Same as ps_plotinit but expects the page size to be given  in  double  precision
                 points.

              void ps_plotr (xrel, yrel, kpen)
              double xrel, yrel;
              int kpen;
                 Move (kpen = 3) or draw (kpen = 2) relative to current point (see ps_plot).  Use
                 (kpen=-2) to make sure the line is stroked.

              void ps_plus (xcenter, ycenter, diameter)
              double xcenter, ycenter, diameter;
                 Plots a plus (+) at the specified point using  current  pen-width  and  -pattern
                 that fits inside a circle of given diameter. No fill possible.

              void ps_point (xcenter, ycenter, diameter)
              double xcenter, ycenter, diameter;
                 Plots  a  point  (dot)  using current pen with given diameter.  Note the linecap
                 setting must first be set to 1 for this function to work.

              void ps_polygon (xarray, yarray, npoints, rgb, outline)
              double xarray[], yarray[];
              long npoints;
              int rgb[3], outline;
                 Creates a colored polygon from the positions in the x-y  arrays.   Polygon  will
                 automatically  be  closed by the PostScript driver.  If outline == 0, no outline
                 is drawn.  If outline == 1, the outline is drawn using current penwidth.

              void ps_rect (x1, y1, x2, y2, rgb, outline)
              double x1, y1, x2, y2;
              int rgb[3], outline;
                 Plots a colored rectangle.  (x1,y1)  and  (x2,y2)  are  any  two  corners  on  a
                 diagonal.   If  outline  == 1, the outline will be drawn using current pen-width
                 and -pattern.

              void ps_rotaterect (x, y, angle, xsize, ysize, rgb, outline)
              double x, y, angle, xsize, ysize;
              int rgb[3], outline;
                 Plots a colored rectangle rotated angle degrees  from  baseline.  (x,y)  is  the
                 center  and (xsize,ysize) are the dimensions.  If outline == 1, the outline will
                 be drawn using current pen-width and -pattern.

              void ps_rotatetrans (x, y, angle)
              double x, y, angle;
                 Rotates the coordinate system by angle degrees, then translates origin to (x,y).

              void ps_segment (x0, y0, x1, y1)
              double x0, y0, x1, y1;
                 Draws a line segment between the two points using current pen attributes.

              void ps_setdash (pattern, offset)
              char *pattern;
              int offset;
                 Changes the current dashpattern.  The character string pattern  is  set  to  the
                 desired pattern.  E.g., "4 2" and offset = 1 will plot like:
                      x ----  ----  ----
                 etc,  where  x  is  starting point (The x is not plotted).  That is, the line is
                 made up of a repeating pattern of a 4 units long line and a  2  unit  long  gap,
                 starting  1  unit  after  the x.  To reset to solid line, specify pattern = NULL
                 ("") and offset = 0.  Units are in dpi units.

              void ps_setfill (rgb, outline)
              int rgb[3], outline;
                 Sets the current fill color and whether or not outline is needed for symbols.

              void ps_setfont (fontnr)
              int fontnr;
                 Changes the current font number to  fontnr.   The  fonts  available  are:   0  =
                 Helvetica,  1  = H. Bold, 2 = H. Oblique, 3 = H. Bold-Oblique, 4 = Times, 5 = T.
                 Bold, 6 = T. Italic, 7 = T. Bold Italic, 8 = Courier,  9  =  C.  Bold,  10  =  C
                 Oblique,  11  =  C  Bold  Oblique,  12  =  Symbol,  13  =  AvantGarde-Book, 14 =
                 A.-BookOblique, 15 = A.-Demi, 16 =  A.-DemiOblique,  17  =  Bookman-Demi,  18  =
                 B.-DemiItalic,  19  = B.-Light, 20 = B.-LightItalic, 21 = Helvetica-Narrow, 22 =
                 H-N-Bold, 23 = H-N-Oblique, 24 = H-N-BoldOblique, 25  =  NewCenturySchlbk-Roman,
                 26  =  N.-Italic,  27  =  N.-Bold, 28 = N.-BoldItalic, 29 = Palatino-Roman, 30 =
                 P.-Italic, 31 = P.-Bold, 32 = P.-BoldItalic, 33 = ZapfChancery-MediumItalic,  34
                 =   ZapfDingbats,  35  =  Ryumin-Light-EUC-H,  36  =  Ryumin-Light-EUC-V,  37  =
                 GothicBBB-Medium-EUC-H, and 38 = GothicBBB-Medium-EUC-V.  If fontnr  is  outside
                 this range, it is set to 0.

              void ps_setformat (n_decimals)
              int n_decimals;
                 Sets  number  of  decimals  to  be  used when writing color or gray values.  The
                 default setting of 3 gives 1000 choices per red, green, and blue value, which is
                 more  than  the  255 choices offered by most 24-bit platforms.  Choosing a lower
                 value will make the output file smaller at the expense of less color resolution.
                 Still,  a  value  of  2 gives 100 x 100 x 100 = 1 million colors, more than most
                 eyes can distinguish.  For a setting of 1, you will have 10 nuances per  primary
                 color and a total of 1000 unique combinations.

              void ps_setline (linewidth)
              int linewidth;
                 Changes  the current linewidth in DPI units.  0 gives thinnest line, but the use
                 of 0 is implementation-dependent (Works fine on most laserwriters).

              void ps_setlinecap (cap)
              int cap;
                 Changes the current linecap.  0 gives butt cap [Default], 1 gives round,  and  2
                 gives square.

              void ps_setlinejoin (join)
              int join;
                 Changes  the  current linejoin.  0 gives mitered [Default], 1 gives round, and 2
                 gives bevel joins.

              void ps_setmiterlimit (limit)
              int limit;
                 Changes the current miter limit.  0 gives default miter, other  values  are  the
                 cutoff-, acute- angle when mitering takes place.

              void ps_setpaint (rgb)
              int rgb[3];
                 Changes the current RGB setting for pens and text.

              void ps_square (xcenter, ycenter, diameter, rgb, outline)
              double xcenter, ycenter, diameter;
              int rgb[3], outline;
                 Plots  a  square  and  fills  it with the specified color.  If outline == 1, the
                 outline will be drawn using current pen-width and -pattern.  The symbol will fit
                 inside a circle of given diameter.

              void ps_star (xcenter, ycenter, diameter, rgb, outline)
              double xcenter, ycenter, diameter;
              int rgb[3], outline;
                 Plots  a  star  and  fills  it  with  the specified color.  If outline == 1, the
                 outline will be drawn using current pen-width and -pattern.  The symbol will fit
                 inside a circle of given diameter.

              void ps_text (x, y, pointsize, text, angle, justify, form)
              double x, y, pointsize, angle;
              char *text;
              int justify, form;
                 The  text  is  plotted  starting  at  (x,y),  and  will  make  an angle with the
                 horizontal.  The point (x,y) maps onto different points  of  the  textstring  by
                 giving various values for justify.  It is used as follows:

                           9------------10----------- 11
                           |                           |
                           5             6             7
                           |                           |
                           1------------ 2------------ 3
                 The  box  represents the textstring.  E.g., to plot a textstring with its center
                 of gravity at (x,y), you must use justify == 6.  If justify  is  negative,  then
                 all leading and trailing blanks are stripped before plotting.  Certain character
                 sequences (flags) have special meaning to ps_text. @~  toggles  between  current
                 font  and  the  Mathematical Symbols font.  @%no% sets font to no; @%% resets to
                 starting font.  @- turns subscript on/off, @+ turns superscript on/off, @# turns
                 small  caps  on/off, and @\ will make a composite character of the following two
                 character.  @;r/g/b; changes the font color (@;; resets it), @:size: changes the
                 font  size  (@::  resets it), and @_ toggles underline on/off.  Give fontsize in
                 points (72  points  =  1  inch).   Normally,  the  text  is  typed  using  solid
                 characters.   To  draw  outline  characters,  set  form  ==  1.  If pointsize is
                 negative it means that the current point has already been set before ps_text was
                 called and that (x,y) should be ignored.

              void ps_textbox (x, y, pointsize, text, angle, justify, outline, dx, dy, rgb)
              double x, y, angle, pointsize, dx, dy;
              char *text;
              int justify, outline, rgb[3];
                 This  function  is  used  in conjugation with ps_text when a box surrounding the
                 text string is desired.  Taking most of the arguments of ps_text, the user  must
                 also  specify  the  color  of  the  resulting rectangle, and whether its outline
                 should be drawn.  More room between  text  and  rectangle  can  be  obtained  by
                 setting dx and dy accordingly.

              void ps_transrotate (x, y, angle)
              double x, y, angle;
                 Translates  the  origin  to  (x,y),  then rotates the coordinate system by angle
                 degrees.

              void ps_triangle (xcenter, ycenter, diameter, rgb, outline)
              double xcenter, ycenter, diameter;
              int rgb[3], outline;
                 Plots a triangle and paints it with the specified RGB combination.   If  outline
                 ==  1,  the  outline  will  be  drawn using current pen-width and -pattern.  The
                 symbol will fit inside a circle of given diameter.

              void  ps_vector  (xtail,  ytail,  xtip,  ytip,  tailwidth,  headlength,  headwidth,
              headshape, rgb, outline)
              double xtail, ytail, xtip, ytip, tailwidth, headlength, headwidth, headshape;
              int rgb[3], outline;
                 Draws  a  vector  of size and appearance as specified by the various parameters.
                 headshape can take on values from 0-1 and specifies  how  far  the  intersection
                 point  between  the  base of a straight vector head and the vector line is moved
                 toward the tip.  0 gives a triangular head, 1.0 gives an arrow shaped  head.  If
                 outline  ==  1,  the  outline  will  be  drawn using current penwidth.  Add 8 to
                 outline for a double-headed vector.

              void  ps_words  (x,  y,  text,  n_words,  line_space,  par_width,  par_just,  font,
              font_size, angle, rgb, justify, draw_box, x_off, y_off, x_gap, y_gap, boxpen_width,
              boxpen_texture,   boxpen_offset,    boxpen_rgb,    vecpen_width,    vecpen_texture,
              vecpen_offset, vecpen_rgb, boxfill_rgb)
              double x, y, line_space, par_width, angle, x_off, y_off, x_gap, y_gap;
              long n_words;
              int font, font_size, justify, draw_box, boxpen_width, boxpen_offset;
              int boxpen_rgb[3], vecpen_width, vecpen_offset, vecpen_rgb[3], boxfill_rgb[3];
              char **text, *boxpen_texture, *vecpen_texture;
                 Typesets  paragraphs  of  text.  text is an array of the words to typeset, using
                 the given line-spacing and paragraph width.  The whole text block is  positioned
                 at  x,  y  which  is  the  anchor  point on the box as indicated by justify (see
                 ps_text). The whole block is then shifted by x_off, y_off. Inside the box,  text
                 is justified left, centered, right, or justified as governed by par_just (lcrj).
                 draw_box contains 4 bit flags pertaining to the surrounding outline box.  If on,
                 the  first  (lowest)  bit  draws  the box outline.  The second bit fills the box
                 interior.  The third bit makes the outline  box  have  rounded  corners  (unless
                 x_gap,  y_gap,  which  specifies  the  padding between the text and the box, are
                 zero), while the forth bit draws a line from the original  x,  y  point  to  the
                 shifted position.  The escape sequences described for ps_text applies as well.

AUTHOR

       Paul  Wessel,  School  of  Ocean  and  Earth  Science and Technology, 1680 East-West Road,
       Honolulu, Hawaii 96822, (808) 956-4778, Internet address: pwessel@hawaii.edu.

BUGS

       Caveat Emptor:  The author is not responsible for  any  disasters,  suicide  attempts,  or
       ulcers  caused by correct or incorrect use of pslib.  If you find bugs, please report them
       to the author by electronic mail.  Be sure to provide enough detail so that I can recreate
       the problem.

REFERENCES

       Adobe  Systems  Inc.,  1990,  PostScript  language reference manual, 2nd edition, Addison-
       Wesley, (ISBN 0-201-18127-4).