xgks3
A gks library for the x window system
Usage
Gint gclosews
(Gint
wsid);
Gint gopengks
(Gfile
*err_file,
Glong
memory);
Gint gclosegks
(void);
Gint gsetasf
(Gasfs
*asf);
Gint ginqcolorfacil
(Gchar
*ws_type,
Gcofac
*fac);
Gint gactivatews
(Gint
wsid);
Gint gdeactivatews
(Gint
wsid);
Gint gselntran
(Gint
trans);
Gint gsetclip
(Gclip
ind);
Gint gemergencyclosegks
(void);
Gint gpolyline
(Gint
num_pts,
Gpoint
*pts);
Gint gsetlineind
(Gint
idx);
Gint gsetlinetype
(Gint
type);
Gint gsetlinewidth
(Gfloat
width);
Gint gsetlinecolorind
(Gint
idx);
Gint gcreateseg
(Gint
name);
Gint gcloseseg
(void);
Gint gdelseg
(Gint
name);
Gint gsetpickid
(Gint
pick_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 ginqsegnames
(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 gfillarea
(Gint
num_pts,
Gpoint
*pts);
Gint gsetfillcolorind
(Gint
color);
Gint gsetfillind
(Gint
idx);
Gint gsetfillintstyle
(Gflinter
style);
Gint gsetfillstyleind
(Gint
idx);
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 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 gtext
(Gpoint
*at,
Gchar
*string);
Gint ginqlinefacil
(Gchar
*ws_type,
Glnfac
*fac);
Gint ginqmarkerfacil
(Gchar
*ws_type,
Gmkfac
*fac);
Gint ginqfillfacil
(Gchar
*ws_type,
Gflfac
*fac);
Gint ginqpatfacil
(Gchar
*ws_type,
Gint
*fac);
void gescsetprogname
(char
*name);
Gint ginqtextfacil
(Gchar
*ws_type,
Gtxfac
*fac);
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 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 ginqclip
(Gcliprec
*clipping);
Gint ginqmaxntrannum
(Gint
*maxtran);
Gint ginterpret
(Ggksmit
*recInfo,
Gchar
*data);
Overview
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.
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).
Bug reporting
Bugs reports should be sent to [email protected] [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 [email protected] [128.117.140.3].
Releases
7 releases since Debian 6.0 (Squeeze); the text changed 4 times.