## NAME

           pslib v3.2 - 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 pro-
           gram with pslib.a. pslib is the core of the GMT SYSTEM and XY  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  ini-
           tialized.  This  is  done by calling ps_plotinit, 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, inch, or 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  opti-
           mized  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, includ-
           ing  laserwriters  (color  or  monochrome)  and  workstations   running
           PostScript  based  window systems like SUNs 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.

## 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 inte-
           gers 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, anotpointsize, side)
                  double xpos, ypos, length, startval, stopval, tickval;
                  int anotpointsize, side;
                  char *label;
                     Plots  an  axis  with tickmarks, annotation, and label. xpos,
                     ypos, and length are in inches (or cm or meters),  anotpoint-
                     size  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 *  anotpointsize.   A  negative  tickval
                     will  reverse  the sense of positive direction, e.g., to have
                     the y-axis be positive down.

                  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 out-
                     line  == 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
                     clipon.

                  void ps_clipon (xarray, yarray, npoints, rgb, flag)
                  double xarray[], yarray[];
                  int npoints, 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  sev-
                     eral  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)
                  double xpos, ypos, xlength, ylength;
                  unsigned char buffer[];
                  int nx, ny;
                     Plots  a 24-bit true color image using rgb colors. Similar to
                     ps_image except bits is fixed to be 8. The rgb  triplets  are
                     stored  in  buffer  as rgbrgbrgb...  This functions sets up a
                     call to the  PostScript  colorimage  operator  which  is  not
                     implemented in all drivers.

                  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 at the specified point using current pen-width
                     and -pattern that fits inside a circle of given diameter.

                  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  semiaxis  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_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;
                     Plots  a  bit-mapped image using grayshades. Specify position
                     of lower left corner and size (in inches) of image. buffer is
                     an  unsigned character array with gray shade values (0 - 255)
                     where 0 is black, 255 is white. bits is  number  of  bits  pr
                     pixel  (8,  4, or 1). nx,ny refers to the number of pixels in
                     image. The rowlength of buffer must be an integral number  of
                     8/bits.  buffer[0]  is  upper  left corner. E.g. if bits = 4,
                     then   buffer[j]/16   gives   shade   for   pixel[2j-1]   and
                     buffer[j]%16 (mod 16) gives shade for pixel[2j].  buffer val-
                     ues are stored as columns, starting at the lower left  corner
                     and  ending  at the upper right corner. See the Adobe Systems
                     PostScript Reference Manual for more details.

                  void ps_imagefill (x, y, n, image, imagefile, invert,  imagedpi,
                  outline, template, r_rgb, b_rgb)
                  double x[], y[], x0, y0;
                  int  n,  image,  invert,  imagedpi, outline, template, f_rgb[3],
                  b_rgb[3];
                  char imagefile;
                     Similar to ps_polygon, but fills the area with an image  pat-
                     tern  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) If invert is TRUE (1), the black  and  white
                     pixels  are interchanged before plotting. (ii) If template is
                     TRUE (1), the set pixels are colored using the  RGB  combina-
                     tion  in  f_rgb,  while the unset are painted with b_rgb. The
                     unit size of the image is controlled by imagedpi. If  set  to
                     zero,  the image is plotted at the device resolution. If out-
                     line is TRUE, the current penwidth is used to draw the  poly-
                     gon outline.

                  void ps_imagemask (xpos, ypos, xlength, ylength, buffer, nx, ny,
                  polarity, rgb)
                  double xpos, ypos, xlength, ylength;
                  unsigned char buffer[];
                  int nx, ny, polarity, rgb[3];
                     Plots a transparent 1-bit image  mask  using  the  given  rgb
                     color.  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 polarity is 0 then the bits that
                     are 0 are painted with the rgb color, else the bits that  are
                     1  are  colored.   See the Adobe Systems PostScript Reference
                     Manual for more details.

                  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.

                  void ps_line (xarray, yarray, npoints, type, close, split)
                  double xarray[], yarray[];
                  int npoints, type, close, split;
                     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 seg-
                     ment in a multi-segment path, set type == 1. To end the  seg-
                     ments  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.  Only if split is TRUE may ps_line use mul-
                     tiple strokes to draw lines longer that MAX_PATH.  ps_polygon
                     will  call  ps_line with split = FALSE since the path must be
                     continuous.  If split is FALSE  and  the  pathlength  exceeds
                     MAX_PATH a warning will be issued.

                  unsigned  char  *ps_loadraster  (fp, header, invert, monochrome,
                  template, f_rgb, b_rgb)
                  FILE *fp;
                  struct rasterfile *header;
                  BOOLEAN invert, monochrome, template;
                  int f_rgb[], b_rgb[];
                     Reads the image contents of the Sun rasterfile pointed to  by
                     the  open  filepointer fp.  The header must first be obtained
                     with ps_read_rasheader. If invert is TRUE then  1-bit  images
                     will be bit-reversed. If monochrome is TRUE then color images
                     are converted to grayimages using the TV YIQ translation.  If
                     template  is  TRUE  then 1-bit images will be colorized using
                     the for- and background colors provided in f_rgb  and  b_rgb.
                     The  routine  can handle 1-, 8-, 24-, or 32-bit files in old,
                     standard, run-length encoded, or RGB-style Sun format.

                  void ps_patch (xarray, yarray, npoints, rgb, outline)
                  double xarray[], yarray[];
                  int npoints, 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 dis-
                     carding unnecessary intermediate points along  straight  seg-
                     ments.  Primarily  used  when  painting large number of small
                     polygons and not waste output space.

                  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.

                  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 pro-
                     cess on hardcopy devices.

                  void  ps_plotinit  (plotfile,  overlay,  mode, xoff, yoff, xscl,
                  yscl, ncopies, dpi, unit, pagesize, rgb, eps)
                  char *plotfile;
                  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  orienta-
                     tion  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.  The third bit controls the format used
                     to write PostScript images: 0 means binary, 1 means hexadeci-
                     mal.  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 posi-
                     tion 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 EPS structure is
                     defined in the pslib.h include file and contains  information
                     that will make up the comments header of a EPS file. Program-
                     mers 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_plotr (xrel, yrel, kpen)
                  double xrel, yrel;
                  int kpen;
                     Move (kpen = 3) or draw (kpen = 2) relative to current  point
                     (see ps_plot).

                  void ps_polygon (xarray, yarray, npoints, rgb, outline)
                  double xarray[], yarray[];
                  int npoints, 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.

                  int ps_read_rasheader (fp, header)
                  FILE *fp;
                  struct rasterfile *header;
                     Using the pointer fp to the  open  file,  return  the  header
                     structure  of the Sun rasterfile. This call is portable as it
                     operates on the byte level. Once the header is  returned  you
                     may obtain the raster image with ps_loadraster.

                  void ps_rect (x1, y1, x2, y2, rgb, outline)
                  double x1, y1, x2, y2;
                  int red, green, blue, 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_rotatetrans (x, y, angle)
                  double x, y, angle;
                     Rotates  the  coordinate system by angle degrees, then trans-
                     lates origin to (x,y).

                  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 off-
                     set = 0. Units are in dpi units.

                  void ps_setfont (fontnr)
                  int fontnr;
                     Changes the current font number to fontnr. The  fonts  avail-
                     able  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 = Book-
                     man-Demi, 18 = B.-DemiItalic, 19 = B.-Light, 20 =  B.-LightI-
                     talic,  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. 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_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 out-
                     line  == 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 out-
                     line == 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, angle;
                  char *text;
                  int pointsize, 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  jus-
                     tify. 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.  Give fontsize in points (72  points
                     =  1  inch).  Normally, the text is typed using solid charac-
                     ters.  To draw outline characters, set form == 1.

                  void ps_textbox (x, y, pointsize, text, angle, justify, outline,
                  dx, dy, rgb)
                  double x, y, angle, dx, dy;
                  char *text;
                  int pointsize, 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 combi-
                     nation. If outline == 1, the outline will be drawn using cur-
                     rent  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, head-
                  width, 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 cur-
                     rent penwidth.

                  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_off-
                  set,  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;
                  int  n_words,  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  here,  as  well as two additional commands:
                     @;r/g/b; changes the font color (@;; resets it), and  @:size:
                     changes the font size (@:: resets it).

## AUTHOR

           Paul  Wessel,  School  of  Ocean and Earth Science and Technology, 1680
           East-West  Road,  Honolulu,  Hawaii  96822,  (808)  956-4778,  Internet
           address: wessel@soest.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.

## RESTRICTIONS

           Due to the finite memory of some output devices like Laserwriters, cer-
           tain  restrictions  due  to  limitations  of the PostScript interpreter
           apply: For now, the arrays passed to ps_clipon and ps_polygon must con-
           tain  less  than  about  1350  points. Also, the buffer array passed to
           ps_image must be able to fit in the available memory. Check the  speci-
           fications  of the hardcopy device you are using.  Note that some Raster
           Image Processors (RIPs) do not support direct color so that the  colors
           you get may not be exactly the ones you wanted. This is a limitation of
           the RIP, not the underlying PostScript code generated by pslib.

## REFERENCES

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

    GMT3.4.6                          1 Jan 2005                          pslib(l)