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).

GMT 4.5.11                                         5 Nov 2013                                        PSLIB(3gmt)