Provided by: libxgks-dev_2.6.1+dfsg.2-3ubuntu1_amd64 bug

NAME

       XGKS - A GKS library for the X Window System

SYNOPSIS

       #include <xgks.h>

       Gint gopenws (Gint wsid, Gchar *connection, Gchar *ws_type);

       Gint gclosews (Gint wsid);

       Gint gclearws (Gint wsid, Gclrflag control_flag);

       Gint gopengks (Gfile *err_file, Glong memory);

       Gint gclosegks (void);

       Gint gsetasf (Gasfs *asf);

       Gint gsetcolorrep (Gint wsid, Gint idx, Gcobundl *rep);

       Gint ginqcolorrep (Gint wsid, Gint idx, Gqtype type, Gcobundl *rep);

       Gint ginqcolorindices (Gint wsid, Gintlist *indices);

       Gint ginqcolorfacil (Gchar *ws_type, Gcofac *fac);

       Gint ginqpredcolorrep (Gchar *ws_type, Gint index, Gcobundl *rep);

       Gint gactivatews (Gint wsid);

       Gint gdeactivatews (Gint wsid);

       Gint gsetwindow (Gint trans, Glimit *window);

       Gint gsetviewport (Gint trans, Glimit *viewport);

       Gint gsetviewportinputpri (Gint trans, Gint ref_trans, Gvpri priority);

       Gint gselntran (Gint trans);

       Gint gsetclip (Gclip ind);

       Gint gsetwswindow (Gint wsid, Glimit *window);

       Gint gsetwsviewport (Gint wsid, Glimit *viewport);

       Gint  gevaltran (Gpoint *ppoint, Gpoint *pshift, Gfloat angle, Gpoint *pscale, Gcsw coord,
           Gfloat result[2][3]);

       Gint gaccumtran (Gfloat segtran[2][3],  Gpoint  *ppoint,  Gpoint  *pshift,  Gfloat  angle,
           Gpoint *pscale, Gcsw coord, Gfloat result[2][3]);

       Gint gemergencyclosegks (void);

       Gint gerrorhand (Gint errnum, Gchar *funcname, Gfile *perrfile);

       Gint gerrorlog (Gint errnum, Gchar *funcname, Gfile *perrfile);

       Gint gpolyline (Gint num_pts, Gpoint *pts);

       Gint gsetlineind (Gint idx);

       Gint gsetlinetype (Gint type);

       Gint gsetlinewidth (Gfloat width);

       Gint gsetlinecolorind (Gint idx);

       Gint gsetlinerep (Gint wsid, Gint idx, Glnbundl *rep);

       Gint gcreateseg (Gint name);

       Gint gcloseseg (void);

       Gint grenameseg (Gint old, Gint new);

       Gint gdelseg (Gint name);

       Gint gdelsegws (Gint wsid, Gint name);

       Gint gsetsegattr (Gint name, Gsegattr *segattr);

       Gint gsetpickid (Gint pick_id);

       Gint gassocsegws (Gint wsid, Gint seg_id);

       Gint gcopysegws (Gint wsid, Gint seg_id);

       Gint ginsertseg (Gint seg_id, Gfloat segtran[2][3]);

       Gint gredrawsegws (Gint wsid);

       Gint ginqmodsegattr (Gchar *ws_type, Gmodseg *dyn);

       Gint ginqnameopenseg (Gint *seg);

       Gint ginqsegattr (Gsegattr *segattr);

       Gint ginqassocws (Gint seg, Gintlist *asswk);

       Gint ginqsegnames (Gintlist *segs);

       Gint ginqsegnamesws (Gint wsid, Gintlist *segs);

       Gint ginqnumsegpri (Gchar *ws_type, Gint *numpri);

       Gint ginqcurpickid (Gint *pickid);

       Gint gpolymarker (Gint num_pts, Gpoint *pts);

       Gint gsetmarkersize (Gfloat size);

       Gint gsetmarkertype (Gint type);

       Gint gsetmarkercolorind (Gint color);

       Gint gsetmarkerind (Gint idx);

       Gint gsetmarkerrep (Gint wsid, Gint idx, Gmkbundl *rep);

       Gint gfillarea (Gint num_pts, Gpoint *pts);

       Gint gsetfillcolorind (Gint color);

       Gint gsetfillind (Gint idx);

       Gint gsetfillintstyle (Gflinter style);

       Gint gsetfillrep (Gint wsid, Gint idx, Gflbundl *rep);

       Gint gsetfillstyleind (Gint idx);

       Gint gsetpatrep (Gint wsid, Gint idx, Gptbundl *rep);

       Gint gcellarray (Grect *rect, Gipoint *dim, Gint row, Gint *color);

       Gint ginitloc (Gint wsid, Gint dev, Gloc *init, Gint pet, Glimit *area, Glocrec *record);

       Gint gsetlocmode (Gint wsid, Gint dev, Gimode mode, Gesw echo);

       Gint greqloc (Gint wsid, Gint dev, Gqloc *response);

       Gint gsampleloc (Gint wsid, Gint dev, Gloc *response);

       Gint ginqlocst (Gint wsid, Gint dev, Gqtype type, Glocst *state);

       Gint ginqdefloc (Gchar *type, Gint dev, Gdefloc *data);

       Gint gawaitevent (Gfloat timeout, Gevent *event);

       Gint gflushevents (Gint wsid, Giclass class, Gint dev);

       Gint ginqinputoverflow (Gqueue *overflow);

       Gint ginqmoreevents (Gsimultev *events);

       Gint ggetloc (Gloc *response);

       Gint ggetstroke (Gstroke *response);

       Gint ggetchoice (Gchoice *response);

       Gint ggetpick (Gpick *response);

       Gint ggetval (Gfloat *response);

       Gint ggetstring (Gchar *response);

       Gint gupdatews (Gint wsid, Gregen regenflag);

       Gint gsetcharexpan (Gfloat expansion);

       Gint gsetcharheight (Gfloat height);

       Gint gsetcharspace (Gfloat spacing);

       Gint gsetcharup (Gpoint *up_vector);

       Gint gsettextalign (Gtxalign *txalign);

       Gint gsettextcolorind (Gint color);

       Gint gsettextfontprec (Gtxfp *txfp);

       Gint gsettextind (Gint idx);

       Gint gsettextpath (Gtxpath path);

       Gint gsettextrep (Gint wsid, Gint idx, Gtxbundl *bundle);

       Gint gtext (Gpoint *at, Gchar *string);

       Gint ginqtextextent (Gint wsid, Gpoint position, Gchar *string, Gextent *extent);

       Gint gsetdeferst (Gint wsid, Gdefmode deferral_mode, Girgmode regen_mode);

       Gint  ginitchoice  (Gint wsid, Gint dev, Gchoice *init, Gint pet, Glimit *area, Gchoicerec
           *record);

       Gint gsetchoicemode (Gint wsid, Gint dev, Gimode mode, Gesw echo);

       Gint greqchoice (Gint wsid, Gint dev, Gchoice *response);

       Gint gsamplechoice (Gint wsid, Gint dev, Gchoice *response);

       Gint ginqchoicest (Gint wsid, Gint dev, Gchoicest *state);

       Gint ginqdefchoice (Gchar *type, Gint dev, Gdefchoice *data);

       Gint ginitpick (Gint wsid, Gint  dev,  Gpick  *init,  Gint  pet,  Glimit  *area,  Gpickrec
           *record);

       Gint gsetpickmode (Gint wsid, Gint dev, Gimode mode, Gesw echo);

       Gint greqpick (Gint wsid, Gint dev, Gpick *response);

       Gint gsamplepick (Gint wsid, Gint dev, Gpick *response);

       Gint ginqpickst (Gint wsid, Gint dev, Gqtype type, Gpickst *state);

       Gint ginqdefpick (Gchar *type, Gint dev, Gdefpick *data);

       Gint ginitval (Gint wsid, Gint dev, Gfloat init, Gint pet, Glimit *area, Gvalrec *record);

       Gint gsetvalmode (Gint wsid, Gint dev, Gimode mode, Gesw echo);

       Gint greqval (Gint wsid, Gint dev, Gqval *response);

       Gint gsampleval (Gint wsid, Gint dev, Gfloat *response);

       Gint ginqvalst (Gint wsid, Gint dev, Gvalst *state);

       Gint ginqdefval (Gchar *type, Gint dev, Gdefval *data);

       Gint  ginitstring  (Gint  wsid,  Gint dev, Gchar *init, Gint pet, Glimit *area, Gstringrec
           *record);

       Gint gsetstringmode (Gint wsid, Gint dev, Gimode mode, Gesw echo);

       Gint greqstring (Gint wsid, Gint dev, Gqstring *response);

       Gint gsamplestring (Gint wsid, Gint dev, Gchar *response);

       Gint ginqstringst (Gint wsid, Gint dev, Gstringst *state);

       Gint ginqdefstring (Gchar *type, Gint dev, Gdefstring *data);

       Gint ginitstroke (Gint wsid, Gint dev, Gstroke *init, Gint pet, Glimit  *area,  Gstrokerec
           *record);

       Gint gsetstrokemode (Gint wsid, Gint dev, Gimode mode, Gesw echo);

       Gint greqstroke (Gint wsid, Gint dev, Gqstroke *response);

       Gint gsamplestroke (Gint wsid, Gint dev, Gstroke *response);

       Gint ginqstrokest (Gint wsid, Gint dev, Gqtype type, Gstrokest *state);

       Gint ginqdefstroke (Gchar *type, Gint dev, Gdefstroke *data);

       Gint ginqlinefacil (Gchar *ws_type, Glnfac *fac);

       Gint ginqpredlinerep (Gchar *ws_type, Gint idx, Glnbundl *rep);

       Gint ginqlineindices (Gint wsid, Gintlist *idxlist);

       Gint ginqlinerep (Gint wsid, Gint idx, Gqtype type, Glnbundl *rep);

       Gint ginqmarkerfacil (Gchar *ws_type, Gmkfac *fac);

       Gint ginqpredmarkerrep (Gchar *ws_type, Gint idx, Gmkbundl *rep);

       Gint ginqmarkerindices (Gint wsid, Gintlist *idxlist);

       Gint ginqmarkerrep (Gint wsid, Gint idx, Gqtype type, Gmkbundl *rep);

       Gint ginqfillfacil (Gchar *ws_type, Gflfac *fac);

       Gint ginqpredfillrep (Gchar *ws_type, Gint idx, Gflbundl *rep);

       Gint ginqfillindices (Gint wsid, Gintlist *idxlist);

       Gint ginqfillrep (Gint wsid, Gint idx, Gqtype type, Gflbundl *rep);

       Gint ginqpatfacil (Gchar *ws_type, Gint *fac);

       Gint ginqpredpatrep (Gchar *ws_type, Gint idx, Gptbundl *rep);

       Gint ginqpatindices (Gint wsid, Gintlist *idxlist);

       Gint ginqpatrep (Gint wsid, Gint idx, Gqtype type, Gptbundl *rep);

       Gint gmessage (Gint wsid, Gchar *string);

       Gint gescinqxattr (Gint wsid, Display **dpy, Window *win, GC *gc);

       void gescsetbackingstore (Gint wsid, Gint i);

       void gescsetprogname (char *name);

       Gint gescsetcolormask (Gint wsid, unsigned long mask);

       Gint gescsetdcsize (Gint wsid, Gpoint size);

       Gint gescstoreprimi (Gint wsid, Gstore store);

       Gint gescredrawnotify (Gint wsid, Gint (*funcp)(Gint wsid, typedef enum Gredraw who));

       Gint ginqtextfacil (Gchar *ws_type, Gtxfac *fac);

       Gint ginqpredtextrep (Gchar *ws_type, Gint idx, Gtxbundl *rep);

       Gint ginqtextindices (Gint wsid, Gintlist *idxlist);

       Gint ginqtextrep (Gint wsid, Gint idx, Gqtype type, Gtxbundl *rep);

       Gint ginqavailwstypes (Gstrlist *wstypes);

       Gint ginqdisplayspacesize (Gchar *ws_type, Gdspsize *dspsz);

       Gint ginqwscategory (Gchar *ws_type, Gwscat *cat);

       Gint ginqwsclass (Gchar *ws_type, Gwsclass *class);

       Gint ginqmodwsattr (Gchar *ws_type, Gmodws *dyn);

       Gint ginqdefdeferst (Gchar *ws_type, Gdefer *def);

       Gint ginqmaxwssttables (Gchar *ws_type, Gwstables *tables);

       Gint ginqnumavailinput (Gchar *ws_type, Gnumdev *num);

       Gint ginqwsconntype (Gint wsid, Gwsct *ct);

       Gint ginqwsst (Gint wsid, Gwsstate *state);

       Gint ginqwsdeferupdatest (Gint wsid, Gwsdus *du);

       Gint ginqopst (Gos *state);

       Gint ginqlevelgks (Glevel *lev);

       Gint ginqwsmaxnum (Gwsmax *maxws);

       Gint ginqopenws (Gintlist *wsids);

       Gint ginqactivews (Gintlist *wsids);

       Gint ginqprimattr (Gpriattr *primattr);

       Gint ginqindivattr (Gindattr *indivattr);

       Gint ginqcurntrannum (Gint *tran);

       Gint ginqntrannum (Gintlist *tranlist);

       Gint ginqntran (Gint num, Gwstran *tran);

       Gint ginqclip (Gcliprec *clipping);

       Gint ginqmaxntrannum (Gint *maxtran);

       Gint ginqwstran (Gint wsid, Gwsti *wstran);

       Gint ginqpixelarraydim (Gint wsid, Grect *rect, Gipoint *dim);

       Gint ginqpixelarray (Gint wsid, Gpoint *point, Gipoint *dimen, Gpxarray *pxarr);

       Gint ginqpixel (Gint wsid, Gpoint *ppoint, Gint *pix);

       Gint gwritegksm (Gint wsid, Gint type, Gint length, Gchar *data);

       Gint ggetgksm (Gint wsid, Ggksmit *result);

       Gint greadgksm (Gint wsid, Gint length, Gchar *record);

       Gint ginterpret (Ggksmit *recInfo, Gchar *data);

DESCRIPTION

       XGKS  is  an  implementation of the ANSI Graphical Kernel System for use with the X Window
       System.  XGKS was developed at the University of Illinois, Urbana, Illinois, and supported
       by  IBM  ACIS.   After  being  made  freely  available in the X11R4 distribution, XGKS was
       adopted by the Unidata Program Center (UPC) of the University Corporation for  Atmospheric
       Research (UCAR) in Boulder, Colorado.

STANDARDS

       XGKS  is an  implementation  of  the  ANSI  Graphical  Kernel System  as  defined  by  the
       functional description and the  draft  1988  C  language  binding.   Thus,  the   ultimate
       reference  for  any  programmer  is  the C binding manual which details the data types and
       functions available.   XGKS  is  a  level  2C implementation  of  the  GKS  specification.
       It   supports REQUEST, SAMPLE, and EVENT input modes for all  six  logical input  devices,
       workstation independent segment storage, and metafiles.

CAPABILITIES

       The XGKS library supports all  functions   specified   by   the  ANSI  standard  with  the
       exception of :

            ESCAPE (in its most general form)
            GENERALIZED DRAWING PRIMITIVE (in its most general form)
            INQUIRE GENERALIZED DRAWING PRIMITIVE
            INQUIRE LIST OF AVAILABLE GENERALIZED DRAWING PRIMITIVES
            SET PATTERN REFERENCE POINT
            SET PATTERN SIZE

       The  escape  and  gdp functions are implemented  as  a  set  of functions which follow the
       naming convention outlined in the C  binding.    That    is,    escape    functions    are
       named  gescfunction   and   gdp  functions  are  named  ggdpfunction,  where function is a
       descriptive  name  for  the  function performed.

ESCAPE FUNCTIONS

       gescinqxattr() returns the attributes of the opened X window for workstation wsid.

       gescsetbackingstore() enables (disables) backingstore for workstation wsid if  i  is  non-
       zero (zero).  Backingstore is enabled by default if it is available on the workstation and
       the backingstore X resource (see X-RESOURCES) doesn't indicate otherwise.

       gescsetprogname() sets the program name by which the application will be  known  to  X  to
       name.   This  name  will  be  used to access X resouces by prepending it to resource names
       (along with a separating period `.').  The X window will also be named name.  By  default,
       the name XGKS is used.

       gescsetcolormask  ()  changes  the  color-plane mask on workstation wsid to mask via the X
       function XSetPlaneMask().

       gescsetdcsize() changes the device coordinate space on workstation wsid to size.

       gescstoreprimi() enables (disables)  the  storing  of  non-segment  output  primitives  on
       workstation  wsid  if  store  is  non-zero  (zero).   Storing is enabled by default and is
       necessary for an X refresh (after an expose or resize event) to include  primitives  which
       are not stored in any segment.

       gescredrawnotify() registers the user-defined redraw function funcp with workstation wsid.
       When a redraw action is initiated, the final action will be to call funcp with  the  first
       argument  set  to  the  workstation  number and the second argument set to GRD_GKS (if the
       redraw was initiated by GKS) or to GRD_X  (if  the  redraw  was  initiated  by  X).   Both
       symbolic constants are defined in the header-file xgks.h.

OUTPUT PRIMITIVES

       Polylines  of  any  width  and   color   can   be   displayed  while seven line styles are
       supported they are:

            GLN_DASH       long dash
            GLN_DDOTDASH   double dot dash
            GLN_SDASH      short dash
            GLN_SOLID      solid
            GLN_DASH       medium dash
            GLN_DOT        dotted
            GLN_DOTDASH    dot dash

       Polymarkers of any size and color  can  be  displayed,  five marker styles are provided:

            GMK_POINT      filled circle
            GMK_PLUS       +
            GMK_STAR       *
            GMK_O          unfilled circle
            GMK_X          X

       All text within XGKS is implemented  through  stroke  fonts, thus  text   primitives   are
       fully transformable.  Nine font styles are supported:

            1    SanSerif Roman
            2    Serif Roman
            3    SansSerif Bold Roman
            4    Serif Bold Roman
            5    Sanserif Italic Roman
            6    Serif Italic Roman
            7    SanSerif Script
            8    Serif Script
            9    Gothic

       Fill  Area  output  primitives   can   be   displayed   as   hollow,  solid,  hatched  and
       patterned.   Twenty (numbered one to twenty)  hatch and  pattern  styles  are  predefined.
       The  application  program  can  redefine these patterns; however, the programmer should be
       aware that the gsetpatrep() function expects patterns to be stored in column  major  order
       from   bottom   to   top.    This   means  that  cell[0][0]  is  the  bottom-left  corner,
       cell[dx-1][dy-1] is the top-right corner, and cell[0][1] is directly above cell[0][0].

       GKS  Cell  Arrays  are  supported  in  their  most   general, transformable form.

LOGIAL INPUT DEVICES

       XGKS supports the full GKS input model.  Thus,  all  logical input   devices   operate  in
       request,  sample, and event modes.  Any number of logical input devices can be created for
       each of the six input classes.  All logical devices are triggered through the use of   the
       mouse   and   its   buttons   with  the exception of the choice device where one prompting
       technique uses the  keyboard's  function  buttons.   A   logical   input  device  is  only
       active  when  the  mouse  is within the echo area of the device and one  or  more  of  the
       mouse  buttons  is pressed.   When  the  mouse button is  released,  the  physical  device
       triggers all logical  input  devices  in  request  or event mode whose echo area surrounds
       the cursor.  Devices in sample mode are triggered whenever the  mouse  moves   within  the
       echo   area   while   the   mouse   is   pressed.    Any input operation can be aborted by
       pressing the Break  key  on  the keyboard.

       Five prompting types are defined for the locator:

            1    tracking cross
            2    crosshair spanning X window
            3    tracking cross
            4    rubberband line
            5    rubberband rectangle

       The only restriction placed on these prompts is that  prompt and  echo  type  5  does  not
       allow  the  rectangle to be a fill area  style  other  than  hollow.   The  fixed  end  of
       the rubberband  line  and  rubber  rectangle  is  at the initial  locator  position  while
       the  floating  end  is  the  current value.

       The  stroke  input device differs from the locator by allowing more  than  one  coordinate
       point to be entered.  There are three stroke prompts supported:

            1    tracking cross
            3    polymarker at each point
            4    polyline joining points

       The closeness  of  selected  points  can  be  controlled  by  specifying   a   minimum   X
       and  minimum  Y  displacement  in  the  stroke  data record during stroke  initialization.
       Although specified  as  a  distance  in   World   Coordinate  space,  the  restriction  is
       enforced in Normalized Device space.

       The  valuator  input  device  allows the user to select  a  real numbered value within the
       application specified range.  Only one  visual  representation  is  currently   supported:
       the  valuator  appears as a bar with a sliding knob whose relative position determines the
       current value.  A horizontal bar  is displayed  if  the  echo  area  is  wider   than   it
       is tall, otherwise a vertical bar is used.  This prompt technique  is selected by valuator
       prompt and echo types one and two.

       Two types of choice devices are provided.    Choice   prompts  one   and   two   use   the
       keyboard  function keys as a choice device, thus function key  F1  returns  choice  number
       one.  Prompt  and  echo  type  one enables all function keys while prompt type two enables
       only those  keys  specified  in  the data  record  when the device is initialized.  Choice
       prompt type three presents the user with  a  menu  from  which  the  current   choice   is
       selected.  These  menus  appear and act similar to most X11 window  manager  menus.   That
       is,  the current  selection  is  highlighted and selection is made by releasing the  mouse
       button  when  the desired choice  is  lit.  A  word  of warning, these menus are displayed
       in the choice echo  area  and  DO  NOT  attempt  to  restore  any   output primitives that
       they cover.

       Currently  only  two pick prompt types are supported: one  and three.   Both  prompt types
       highlight the currently selected  segment  by  flashing  a   bounding   box   around   the
       segment's  extent.  Also, picking is only implemented at the segment extent level.   Thus,
       if two segments overlap and the user points at the area of intersection, then the  segment
       of  highest  priority  will  be  picked  even  if  the cursor is directly over a primitive
       contained in the other segment.

       The string device has only one prompt and echo  type:   number  1.    This   prompt   type
       gives  the  user  one  line  on  which to type.  This line is positioned in the upper-left
       corner  of the  string echo area and is displayed as a hollow fill area within  which   an
       insertion   point   cursor   and   typed   text appear.   As  the  user  types,  the  only
       special keys are Backspace, Delete,  and  Enter  which  perform  the   obvious  functions.
       The   length  of the line is limited by the width of the echo area and  the  size  of  the
       string   buffer   as  specified    by    the    application    program    during    string
       initialization.

LIMITS

       Four  workstation  types  are  defined by XGKS:  MI,  MO,  WISS, and  X11.   When  calling
       the open workstation function the application  must  specify  three   parameters:   1)   a
       workstation  identifier,   which  is  an   integer   used   to  identify  this workstation
       throughout the application; 2) a workstation  connection, which is either a file name  for
       the metafile workstations (MI and MO) or an  X11  DISPLAY  specification string (see the X
       man page), or a null character  pointer  for  the  X11  workstation  (if  null,  then  the
       environment  variable  DISPLAY  is  consulted);  and 3) the  workstation  type,  which  is
       either one of the strings "MI",  "MO", or "WISS" (in  which  case  a  workstation  of  the
       appropriate  type will be opened) or a null character pointer (in which case an X11 window
       will be created); The workstation connection parameter  is  ignored  for  the  workstation
       independent  segment   store  (WISS) workstation.  Ten   workstations    can    be    open
       simultaneously;  however,  only  one WISS workstation can be open.

       There are thirty-one normalization transformations, numbered 0  to   30.    Transformation
       number  zero  is  the  identity transformation and cannot be changed.

       Every  X11  window  workstation has a fixed  device  coordinate space that is 0 to 1279 on
       the X axis and 0 to 1023 on the Y axis.  This is not to say that the X window is that big,
       the  GKS   workstation   will   be  scaled to fit the X window; this scaling preserves the
       aspect ratio.

       There are twenty bundle  table  entries  for  each  type  of bundle table.

       The size of the color table is determined by the X11  window server   and   the   hardware
       being   used.    The   IBM   apa16  monochrome  display   provides   two  colors  and  the
       Megapel display supports 255 out of 4096 possible colors.  Each  XGKS  workstation  shares
       the  default color map of the display.  The GKS SET COLOR REPRESENTATION function uses the
       X11 XAllocColor() function to obtain the pixel value of the  colorcell  having  the  color
       closest  to  the  requested  one.   The  association  between  GKS  colour indices and X11
       colorcells is maintained in a lookup table.  This mechanism decouples GKS  colour  indices
       from  X11  pixel  values  and  makes  the  XGKS client "friendly" in relation to other X11
       clients in the handling of the X11 colormap.

       GKS color index zero always refers to the X window background color while GKS color  index
       one refers to the X window foreground color.

METAFILES

       Two  Metafile  formats are supported: GKSM and CGM.  The GKSM format is a formatted audit-
       trail of the GKS session: there is an almost isomorphic mapping between GKS calls and GKSM
       records.   Because  GKSM  is  a  formatted  encoding,  however,  this  format can impose a
       considerable storage requirement.  Also, the GKSM format is not widely used.

       The CGM format used by XGKS is a subset of the  binary  encoding  specified  in  the  ANSI
       X3.122-1986  standard.   Because  it  is  a  binary  encoding,  this  format is more space
       efficient than the GKSM format.  It is not quite as powerful,  however,  as  it  does  not
       record  an  audit-trail  of  the  GKSM session; rather, it describes a set of independent,
       static pictures.  The CGM format is a widely used graphics standard.

       The standard allows several alternative encodings for primitives  such  as  floating-point
       and integer values.  XGKS uses the default encodings only.  These are

           REAL PRECISION           Fixed point; whole part 16 bits;
                                    fractional part 16 bits.
           INTEGER PRECISION        16 bits
           COLOUR PRECISION         1 octet (per colour component)
           COLOUR INDEX PRECISION   1 octet
           INDEX PRECISION          16 bits
           VDC TYPE                 INTEGER
           VDC INTEGER PRECISION    16 bits
           VDC EXTENT               (0,0) to (32767,32767)
           COLOUR VALUE EXTENT      minimum is (0,0,0) and maximum
                                    is (255,255,255).

       This CGM form is compatible with the NCAR Graphics package.

       The  type  of  Metafile  is selected by the Metafile's filename.  Filenames containing the
       string ".cgm" (or ".CGM") are assumed to be in CGM format; all other files are assumed  to
       be in GKSM format.

X-RESOURCES

       The following X-resources and their parameters are searched for by the XGKS library:

       program.backingstore: on|off
           Whether  or  not the server should use the X backing-store feature for windows created
           by this application.  Whether the backingstore feature is enabled by  default  depends
           on  the  capability  of  the  X  server: if the server can use backingstore, then it's
           enabled by default; otherwise it's disabled by default.

       Xgks.Backingstore: on|off
           Whether or not the server should use the X backing-store feature for the entire  class
           of XGKS applications.

       program.background: color
           Color  for  the  background  of the XGKS window for program program.  The string color
           must be understood by the X-server (.e.g "MidnightBlue").

       Xgks.Background: color
           Background color for the entire class of XGKS applications.

       program.foreground: color
           Color for the foreground of the XGKS window for program program.   The  string  colorP
           must be understood by the X-server (.e.g "white").

       Xgks.Foreground: color
           Foreground color for the entire class of XGKS applications.

       program.geometry:  XSIZExYSIZE[+-]xoff[+-]yoff
           Geometry in pixels for the XGKS window of program program.

       Xgks.Geometry:  XSIZExYSIZE[+-]xoff[+-]yoff
           Geometry in pixels for the entire class of XGKS applications.

       program.iconic: on|off
           Initially, map the XGKS window as an icon rather than as a normal window.

       Xgks.Iconic: on|off
           Initially,  map  the  entire  class  of  XGKS  windows  as icons rather than as normal
           windows.

       program.beep: on|off
           Controls whether or not the bell sounds during interactive input in the XGKS window of
           program program.  The default is off.

       Xgks.Beep: on|off
           Controls  whether or not the bell sounds during interactive input for the entire class
           of XGKS applications.  The default is off.

       program.softclipping: on|off
           Enable or disable the  soft-clipping  of  polylines.   By  default,  XGKS  defers  the
           clipping of output primitives to the X Window System.  This works reliably only if the
           normalized device co-ordinates (NDC) of the output primitives are relatively close  to
           the   NDC   [0,1]  unit-square.   Due  to  wrap-around  in  the  NDC-to-X  co-ordinate
           transformation, very large NDC values might cause extraneous lines to  appear  in  the
           display  window.   Though  this behavior is server-dependent, it typically occurs when
           displaying a small portion of a large graphic.   Soft-clipping  causes  XGKS  to  clip
           polyline output against the current NDC clip-window before calling X; thus eliminating
           extraneous lines but incurring some additional computational overhead.   Because  this
           behavior  is  server-dependent, we suggest you use the default (i.e. no soft-clipping)
           until the problem manifests itself.

       Xgks.Softclipping: on|off
           Enable or disable soft-clipping for the entire class of Unidata XGKS applications.

USING X-RESOURCES

       The following pseudo-code details the sequence of steps taken to initialize  the  program-
       specific,  internal,  X-resource  database.   Definitions  encountered  during later steps
       override earlier ones.

           Clear internal X-resource database;

           if (file /usr/lib/X11/app-defaults/program exists)
                  Merge its definitions into the database;

           if (environment variable XAPPLRESDIR exists)
                  Merge the definitions in file $XAPPLRESDIR/program into the database;

           if (X-server has an X-resource database) {
                  Merge its definitions into the database;
           } else if (file ~/.Xdefaults exists) {
                  Merge its definitions into the database;
           }

           if (environment variable XENVIRONMENT exists) {
                  Merge the definitions in file $XENVIRONMENT into the database;
           } else if (file ~/.Xdefaults-X-server_hostname exists) {
                  Merge its definitions into the database;
           }

       Notes:

       1)  The X-server may have its X-resource database updated via the xrdb(1) utility.

       2)  Program is the name of the program as  set  by  the  gescsetprogname()  function  (see
           ESCAPE FUNCTIONS).

       3)  X-server_hostname  is the name of the first host to which XGKS connects as returned by
           the X function DisplayString().  (e.g. "groucho").

PROGRAMMING

       Here is a simple XGKS program that  displays  "Hello  World"  in  the    center   of   the
       default   workstation   window.    After  displaying  the  greeting,  the program  uses  a
       choice  input device to wait for the user to press the break key.  This  is  done  because
       the  X window that represents  this  workstation is  removed  from  the  screen as soon as
       the workstation is closed.  The for loop in the main program  is  a  convenient  way   for
       the   application   to  allow the user to specify the workstation  connection  id  on  the
       command  line  via   a hostname:serverNumber   pair.    If   the   connection  id  is  not
       specified  XGKS  will  use  the  value  of  the  environment variable DISPLAY in the users
       environment.

       #include <stdio.h>
       #include <string.h>
       #include <xgks.h>

       /*
        * This function is called when the program is finished
        * and we just want to wait until the user is done looking
        * at the output.  Here we set up a choice device to use
        * the function keys. However, we ignore all choices and
        * wait for the user to press the Break key.
        */
           static void
       WaitForBreak(wsid)
           Gint wsid;
       {
           Gchoice init;
           Gchoicerec record;
           Glimit earea = { 0.0, 1279.0, 0.0, 1023.0 };

           gmessage(wsid, "Done, press Break to quit ...");

           init.status = GC_NOCHOICE;
           init.choice = 0;
           record.pet1.data = NULL;
           ginitchoice(wsid, 1, &init, 1, &earea, &record);
           gsetchoicemode(wsid, 1, GREQUEST, GECHO);
           while (init.status != GC_NONE)
               greqchoice(wsid, 1, &init);
       }

       /*
        * set up various text parameters and print "Hello World"
        */
       PrintHello()
       {
           Gpoint tpt;
           Gpoint up;
           Gtxfp txfp;
           Gtxalign align;

           txfp.font = 4;           /* use Serif Bold Roman font */
           txfp.prec = GSTROKE;
           gsettextfontprec(&txfp);

           gsetcharexpan(0.5);
           gsetcharspace(0.2);
           gsettextcolorind(1);   /* should be white */

           gsetcharheight(0.05);

           up.x = 0.0; up.y = 1.0;  /* characters are straight up */
           gsetcharup(&up);

           align.hor = GTH_CENTER;
           align.ver = GTV_HALF;
           gsettextalign(&align);

           gsettextpath(GTP_RIGHT); /* print from left to right */

           tpt.x = 0.5; tpt.y = 0.5;/* center of the window */
           gtext(&tpt,"Hello World!");
       }

       main(argc,argv)
           int argc;
           char *argv[];
       {
           int i, wsid=1;
           char *conn = (char*)NULL;

           for (i=1; i<argc; i++) {
               if (strchr(argv[i], ':'))
                   conn = argv[i];
               /* Application dependent options here */
           }

           gopengks(stdout,0);

           if (gopenws(wsid, conn, conn) != 0)
               exit(1);
           gactivatews(wsid);

           PrintHello();
           WaitForBreak(wsid);

           gdeactivatews(wsid);
           gclosews(wsid);

           gclosegks();
           exit(0);
       }

       To compile the program, we use the following command line (NB: ${prefix}
       is the root of the installation-tree):

           cc hello.c -o hello -I${prefix}/include -L${prefix}/lib -lxgks -lX11 -lm

       Or, if on an Apollo workstation:

           cc hello.c -o hello -I${prefix}/include -L${prefix}/lib -lxgks -L/usr/lib/X11 -lX11 -lm

       To execute, just type:

           ./hello

       (NB: you must be running an X server when you run  any  XGKS application.)

       Similarly, to compile a Fortran-based XGKS program (e.g. hello.f), we use:

           f77 -O -o hello hello.f -L${prefix}/lib -lxgks -lX11 -lm

       or, if using an Apollo workstation:

           f77 -O -o hello hello.f -L${prefix}/lib -lxgks -L/usr/lib/X11 -lX11 -lm

       or, if using an HP 9000/720 workstation:

           f77 -O -o hello hello.f -Wl,-L,${prefix}/lib -lxgks -Wl,-L,/usr/lib/X11R4 -lX11 -lm

       When the program opens the GKS workstation  the  X11  window  system   will   prompt   the
       user   to  open a new window.  The program will display "Hello World!" and then  wait  for
       the user  to  press  the  Break  key.  While the GKS workstation window is on  the  screen
       the  user  can   resize,  move,  cover, and   uncover   the  window  and  XGKS  will  take
       care  of redisplaying the greeting.

FILES

       In the following, ${prefix} is the root of the installation directory-tree as  defined  by
       the Makefile macro of the same name.

       ${prefix}/lib/libxgks.a     The XGKS library.
       ${prefix}/lib/xgksfonts     Font data-base directory.
       ${prefix}/bin               Directory containing sample programs.
       ${prefix}/include/xgks.h    C header-file.

ENVIRONMENT

       XGKSFontDir, if set, contains the pathname of the directory which contains the XGKS fonts.
       If not set, then the compiled-in pathname is used (see FILES).

SEE ALSO

       X(1), xrdb(1), xterm(1).

       Computer  Graphics  -  Graphical  Kernel  System  (GKS)  Functional  Description.    ANSI,
       X3.124-1985.

       C Language Binding of GKS. ANSI X3H34/83-12R5, March 1986.

       Computer Graphics, Donald Hearn and Pauline Baker, Prentice-Hall, 1986.

       The  X  Window  System,  Robert W. Scheifler and Jim Gettys, ACM Transactions on Graphics,
       volume 5, number 2, April 1986, pp. 79-109.

BUGS

       The only workstations currently supported are X, GKSM, and CGM.

       Support for input Metafiles is primitive, at best.

       The decoupling between GKS colour-indices and X pixel values is primitive at best.   Also,
       an XGKS window always uses the default colormap.

BUG REPORTING

       Bugs reports should be sent to xgks-bugs@unidata.ucar.edu [128.117.140.3].  Please include
       a potential fix, if possible.

MAILING-LIST

       A mutual-aid society, electronic mailing-list exists.  Requests to join should be sent  to
       xgks-request@unidata.ucar.edu [128.117.140.3].

AUTHORS

       Greg Rogers (grogers@a.cs.uiuc.edu)
       Sung Hsien Ching (ksung@a.cs.uiuc.edu)
       Yu Pan
       Steve Emmerson (steve@unidata.ucar.edu)

       This  project was supported by IBM ACIS and was directed by Professors Bill Kubitz and Roy
       Campbell of the Graphics Workstation Research Group, Department of  Computer  Science,  at
       the  University of Illinois in Urbana, Illinois.  Special thanks go to David Berkowitz and
       Terry Rowan, our IBM contacts, who helped us get early versions of the X  server  for  our
       workstations.

       Maintenance  of  XGKS  by  the Unidata Program Center is supported by the National Science
       Foundation.  Special thanks to all those in the  user  community  who  contribute  to  its
       evolution.