category renames
authorClaus Gittinger <cg@exept.de>
Tue, 19 Mar 1996 19:00:46 +0100
changeset 528 22f4f7388a42
parent 527 743c5f8b932e
child 529 0f59bf869e8f
category renames
GLXWorkstat.st
GLXWorkstation.st
--- a/GLXWorkstat.st	Mon Mar 18 12:57:47 1996 +0100
+++ b/GLXWorkstat.st	Tue Mar 19 19:00:46 1996 +0100
@@ -11,14 +11,13 @@
 "
 
 XWorkstation subclass:#GLXWorkstation
-	 instanceVariableNames:'activeWindow hasStereoExtension glOK'
-	 classVariableNames:'ForceGL'
-	 poolDictionaries:''
-	 category:'Interface-Graphics'
+	instanceVariableNames:'activeWindow hasStereoExtension glOK'
+	classVariableNames:'ForceGL'
+	poolDictionaries:''
+	category:'Interface-Graphics'
 !
 
 !GLXWorkstation primitiveDefinitions!
-
 %{
 /*
  * on SGI, this class is compiled with -DGLX, while
@@ -1056,6 +1055,13 @@
 %}
 !
 
+forceGL:aBoolean
+    ForceGL := aBoolean.
+    AllScreens notNil ifTrue:[
+        AllScreens do:[:screen | screen initializeScreenProperties]
+    ].
+!
+
 minorCodeOfLastError
 %{  /* NOCONTEXT */
 
@@ -1075,19 +1081,12 @@
 
     RETURN ( __MKSMALLINT(lastResource) );
 %}
-!
-
-forceGL:aBoolean
-    ForceGL := aBoolean.
-    AllScreens notNil ifTrue:[
-        AllScreens do:[:screen | screen initializeScreenProperties]
-    ].
 ! !
 
 !GLXWorkstation methodsFor:'arcs and circles'!
 
 glxArcX: x y: y radius: radius startang: startang endang: endang in: aGLXWindowId
-    "draw an arc"
+    "draw an arc at a given location."
 
 %{  /* NOCONTEXT */
     Coord c_x, c_y, c_radius;
@@ -1102,6 +1101,8 @@
     arc(c_x, c_y, c_radius, a_startang, a_endang);
     RETURN (true);
 %}
+
+    "Modified: 19.3.1996 / 18:43:52 / cg"
 !
 
 glxArcfX: x y: y radius: radius startang: startang endang: endang in: aGLXWindowId
@@ -1284,6 +1285,32 @@
 %}
 ! !
 
+!GLXWorkstation methodsFor:'attribute stack'!
+
+glxPopattributesIn: aGLXWindowId
+    "pop the top entry on the attribute stack"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    popattributes();
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:42:53 / cg"
+!
+
+glxPushattributesIn: aGLXWindowId
+    "save the current attributes on the matrix stack"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    pushattributes();
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:43:04 / cg"
+! !
+
 !GLXWorkstation methodsFor:'clearing'!
 
 glxClearIn:aGLXWindowId
@@ -1388,6 +1415,31 @@
     ^ false
 !
 
+glxLrgbrangeRmin: rmin gmin: gmin bmin: bmin rmax: rmax gmax: gmax bmax: bmax
+    znear: znear zfar: zfar in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    SETWIN(aGLXWindowId)
+    lRGBrange(_shortVal(rmin), _shortVal(gmin), _shortVal(bmin), 
+	_shortVal(rmax), _shortVal(gmax), _shortVal(bmax), 
+	_longVal(znear), _longVal(zfar));
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxMapcolorI: i red: red green: green blue: blue in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    mapcolor(_colorindexVal(i), _shortVal(red), _shortVal(green), _shortVal(blue));
+    RETURN (true);
+%}
+!
+
 glxTextcolor: tcolor in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -1401,6 +1453,45 @@
     ^ false
 ! !
 
+!GLXWorkstation methodsFor:'curves'!
+
+glxCurvebasis: basid in: aGLXWindowId
+    "sets the basis type of curves"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    curvebasis(_shortVal(basid));
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:47:09 / cg"
+!
+
+glxCurveit: iterationcount in: aGLXWindowId
+    "Iterates the top matrix on the stack as a forward difference
+     matrix, drawing as it goes along."
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    curveit(_shortVal(iterationcount));
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:48:57 / cg"
+!
+
+glxCurveprecision: nsegments in: aGLXWindowId
+    "sets the number of line segments that make up a curve segment"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    curveprecision(_shortVal(nsegments));
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:47:43 / cg"
+! !
+
 !GLXWorkstation methodsFor:'double buffering'!
 
 glxBackBufferIn:aGLXWindowId
@@ -1417,12 +1508,15 @@
 !
 
 glxBackbuffer: b in: aGLXWindowId
+    "switch to front/back buffer"
 
 %{  /* NOCONTEXT */
     SETWIN(aGLXWindowId)
     backbuffer(_booleanVal(b));
     RETURN (true);
 %}
+
+    "Modified: 19.3.1996 / 18:45:05 / cg"
 !
 
 glxDoubleBufferIn:aGLXWindowId
@@ -1449,12 +1543,15 @@
 !
 
 glxFrontbuffer: b in: aGLXWindowId
+    "switch to front buffer - turning backbuffer off"
 
 %{  /* NOCONTEXT */
     SETWIN(aGLXWindowId)
     frontbuffer(_booleanVal(b));
     RETURN (true);
 %}
+
+    "Modified: 19.3.1996 / 18:45:31 / cg"
 !
 
 glxSingleBufferIn: aGLXWindowId
@@ -1468,13 +1565,15 @@
 !
 
 glxSwapBuffersIn:aGLXWindowId
-    "swap double buffers"
+    "swap the back and front buffers"
 
 %{  /* NOCONTEXT */
     SETWIN(aGLXWindowId)
     swapbuffers();
     RETURN (true);
 %}
+
+    "Modified: 19.3.1996 / 18:45:47 / cg"
 ! !
 
 !GLXWorkstation methodsFor:'flat drawing'!
@@ -1648,6 +1747,524 @@
 %}
 ! !
 
+!GLXWorkstation methodsFor:'lines & rectangles'!
+
+glxDeflinestyleN: n ls: ls in: aGLXWindowId
+    "define a line style"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    deflinestyle(_shortVal(n), _linestyleVal(ls));
+    RETURN (true);
+%}
+!
+
+glxDraw2:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[2], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    draw2((Coord)(c_v[0]), (Coord)(c_v[1]));
+    RETURN (true);
+%}
+!
+
+glxDraw2X: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    draw2(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxDraw2iX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    draw2i(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxDraw2sX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    draw2s(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxDraw:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[3], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    draw((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
+    RETURN (true);
+%}
+!
+
+glxDrawX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    draw(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxDrawiX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    drawi(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxDrawsX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    draws(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxLinewidth: n in: aGLXWindowId
+    "set the linewidth"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    linewidth(_shortVal(n));
+    RETURN (true);
+%}
+!
+
+glxLinewidthf: n in: aGLXWindowId
+    "set the linewidth"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    linewidthf(_floatVal(n));
+    RETURN (true);
+%}
+!
+
+glxMove2:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[2], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    move2((Coord)(c_v[0]), (Coord)(c_v[1]));
+    RETURN (true);
+%}
+!
+
+glxMove2X: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    move2(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxMove2iX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    move2i(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxMove2sX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    move2s(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxMove:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[3], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    move((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
+    RETURN (true);
+%}
+!
+
+glxMoveX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    move(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxMoveiX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    movei(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxMovesX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    moves(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRdr2:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[2], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    rdr2((Coord)(c_v[0]), (Coord)(c_v[1]));
+    RETURN (true);
+%}
+!
+
+glxRdr2X: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rdr2(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRdr2iX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rdr2i(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRdr2sX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rdr2s(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRdr:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[3], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    rdr((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
+    RETURN (true);
+%}
+!
+
+glxRdrX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rdr(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRdriX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rdri(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRdrsX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rdrs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRectX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    rect(_coordVal(x1), _coordVal(y1), _coordVal(x2), _coordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRectfX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    rectf(_coordVal(x1), _coordVal(y1), _coordVal(x2), _coordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRectfiX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    rectfi(_icoordVal(x1), _icoordVal(y1), _icoordVal(x2), _icoordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRectfsX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    rectfs(_scoordVal(x1), _scoordVal(y1), _scoordVal(x2), _scoordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRectiX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    recti(_icoordVal(x1), _icoordVal(y1), _icoordVal(x2), _icoordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRectsX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    rects(_scoordVal(x1), _scoordVal(y1), _scoordVal(x2), _scoordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRmv2:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[2], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    rmv2((Coord)(c_v[0]), (Coord)(c_v[1]));
+    RETURN (true);
+%}
+!
+
+glxRmv2X: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rmv2(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRmv2iX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rmv2i(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRmv2sX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rmv2s(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRmv:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[3], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    rmv((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
+    RETURN (true);
+%}
+!
+
+glxRmvX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rmv(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRmviX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rmvi(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRmvsX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rmvs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxSetlinestyle: index in: aGLXWindowId
+    "set the linestyle"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    setlinestyle(_shortVal(index));
+    RETURN (true);
+%}
+.
+    ^ false
+! !
+
 !GLXWorkstation methodsFor:'materials & lights'!
 
 glxLmbind:target index:index in:aGLXWindowId
@@ -2189,7 +2806,7 @@
 !
 
 glxDefBasis:id mat:aMatrix in:aGLXWindowId
-    "define the basis"
+    "define the basis matrix for a patch or curve"
 
 %{  /* NOCONTEXT */
     Matrix matrix;
@@ -2197,13 +2814,15 @@
 
     if (! (m = getFloatsFromMatrixInto(aMatrix, &matrix))) RETURN (false);
     if (__isSmallInteger(id)) {
-	SETWIN(aGLXWindowId)
-	defbasis((short)(__intVal(id)), *m);
-	RETURN (true);
+        SETWIN(aGLXWindowId)
+        defbasis((short)(__intVal(id)), *m);
+        RETURN (true);
     }
 %}
 .
     ^ false
+
+    "Modified: 19.3.1996 / 18:52:56 / cg"
 !
 
 glxEndCurveIn:aGLXWindowId
@@ -2278,31 +2897,35 @@
 !
 
 glxPatchBasisU:u v:v in:aGLXWindowId
-    "set the current basis matrices"
+    "set the two basis matrices for a patch"
 
 %{  /* NOCONTEXT */
     if (__bothSmallInteger(u, v)) {
-	SETWIN(aGLXWindowId)
-	patchbasis((long)__intVal(u), (long)__intVal(v));
-	RETURN (true);
+        SETWIN(aGLXWindowId)
+        patchbasis((long)__intVal(u), (long)__intVal(v));
+        RETURN (true);
     }
 %}
 .
     ^ false
+
+    "Modified: 19.3.1996 / 18:53:18 / cg"
 !
 
 glxPatchCurvesU:u v:v in:aGLXWindowId
-    "set the number of curves in a patch"
+    "set the number of curves to be drawn in each direction on a patch"
 
 %{  /* NOCONTEXT */
     if (__bothSmallInteger(u, v)) {
-	SETWIN(aGLXWindowId)
-	patchcurves((long)__intVal(u), (long)__intVal(v));
-	RETURN (true);
+        SETWIN(aGLXWindowId)
+        patchcurves((long)__intVal(u), (long)__intVal(v));
+        RETURN (true);
     }
 %}
 .
     ^ false
+
+    "Modified: 19.3.1996 / 18:53:34 / cg"
 !
 
 glxPatchPrecisionU:u v:v in:aGLXWindowId
@@ -2320,7 +2943,8 @@
 !
 
 glxPatchX:arrayOf16XFloats y:arrayOf16YFloats z:arrayOf16ZFloats in:aGLXWindowId
-    "arguments must be arrays of 16 floats containing the patch"
+    "Draws a bicubic patch.
+     arguments must be arrays of 16 floats containing the patch"
 
 %{  /* NOCONTEXT */
     Matrix matrixX, matrixY, matrixZ;
@@ -2333,6 +2957,607 @@
     patch(*mX, *mY, *mZ);
     RETURN (true);
 %}
+
+    "Modified: 19.3.1996 / 18:54:02 / cg"
+!
+
+glxRpatchX:arrayOf16XFloats y:arrayOf16YFloats z:arrayOf16ZFloats w:arrayOf16WFloats in:aGLXWindowId
+    "Draws a rational bicubic patch.
+     arguments must be arrays of 16 floats containing the patch"
+
+%{  /* NOCONTEXT */
+    Matrix matrixX, matrixY, matrixZ, matrixM;
+    Matrix *mX, *mY, *mZ, *mM;
+
+    if (! (mX = getFloatsFromMatrixInto(arrayOf16XFloats, &matrixX))) RETURN (false);
+    if (! (mY = getFloatsFromMatrixInto(arrayOf16YFloats, &matrixY))) RETURN (false);
+    if (! (mZ = getFloatsFromMatrixInto(arrayOf16ZFloats, &matrixZ))) RETURN (false);
+    if (! (mM = getFloatsFromMatrixInto(arrayOf16MFloats, &matrixM))) RETURN (false);
+    SETWIN(aGLXWindowId)
+    rpatch(*mX, *mY, *mZ, *mM);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:54:02 / cg"
+    "Created: 19.3.1996 / 18:56:34 / cg"
+! !
+
+!GLXWorkstation methodsFor:'points'!
+
+glxPnt2X: x y: y in: aGLXWindowId
+    "plot a point in x, y, 0."
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pnt2(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:35:55 / cg"
+!
+
+glxPnt2iX: x y: y in: aGLXWindowId
+    "plot a point in x, y, 0."
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pnt2i(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:35:59 / cg"
+!
+
+glxPnt2sX: x y: y in: aGLXWindowId
+    "plot a point in x, y, 0."
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pnt2s(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:36:03 / cg"
+!
+
+glxPntX: x y: y z: z in: aGLXWindowId
+    "plot a point in x, y, z."
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pnt(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:36:08 / cg"
+!
+
+glxPntiX: x y: y z: z in: aGLXWindowId
+    "plot a point in x, y, z."
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pnti(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:36:14 / cg"
+!
+
+glxPntsX: x y: y z: z in: aGLXWindowId
+    "plot a point in x, y, z."
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pnts(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:36:17 / cg"
+!
+
+glxPntsize: n in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    SETWIN(aGLXWindowId)
+    pntsize(_shortVal(n));
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxPntsizef: n in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    SETWIN(aGLXWindowId)
+    pntsizef(_floatVal(n));
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+! !
+
+!GLXWorkstation methodsFor:'polygons'!
+
+glxBackface: b in: aGLXWindowId
+    "enable/disable culling of backfacing polygons (suppress its drawing). 
+     A polygon is backfacing if it's orientation in *screen* coords is clockwise"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    backface(_booleanVal(b));
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:26:50 / cg"
+!
+
+glxConcave: b in: aGLXWindowId
+    "signal wether or not polygons are concave"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    concave(_booleanVal(b));
+    RETURN (true);
+%}
+!
+
+glxFrontface: b in: aGLXWindowId
+    "enable/disable culling of frontfacing polygons (suppress its drawing). 
+     A polygon is frontfacing if it's orientation in *screen* coords is 
+     anti-clockwise"
+
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    frontface(_booleanVal(b));
+    RETURN (true);
+%}
+.
+    ^ false
+
+    "Modified: 19.3.1996 / 18:27:50 / cg"
+!
+
+glxPdr2X: x y: y in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pdr2(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:33:09 / cg"
+!
+
+glxPdr2iX: x y: y in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pdr2i(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:33:28 / cg"
+!
+
+glxPdr2sX: x y: y in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pdr2s(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:03 / cg"
+!
+
+glxPdrX: x y: y z: z in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pdr(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:06 / cg"
+!
+
+glxPdriX: x y: y z: z in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pdri(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:11 / cg"
+!
+
+glxPdrsX: x y: y z: z in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pdrs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:14 / cg"
+!
+
+glxPmv2X: x y: y in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pmv2(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:32:45 / cg"
+!
+
+glxPmv2iX: x y: y in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pmv2i(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:32:42 / cg"
+!
+
+glxPmv2sX: x y: y in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pmv2s(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:32:38 / cg"
+!
+
+glxPmvX: x y: y z: z in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pmv(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:31:52 / cg"
+!
+
+glxPmviX: x y: y z: z in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pmvi(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:31:59 / cg"
+!
+
+glxPmvsX: x y: y z: z in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pmvs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:32:03 / cg"
+!
+
+glxPolymode: mode in: aGLXWindowId
+    "Sets the polygon filling mode - only filled (1) or outlined (0)
+     are supported"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    polymode(_longVal(mode));
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:29:32 / cg"
+!
+
+glxRpdr2X: x y: y in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpdr2(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:31 / cg"
+!
+
+glxRpdr2iX: x y: y in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpdr2i(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:36 / cg"
+!
+
+glxRpdr2sX: x y: y in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpdr2s(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:40 / cg"
+!
+
+glxRpdrX: x y: y z: z in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpdr(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:48 / cg"
+!
+
+glxRpdriX: x y: y z: z in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpdri(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:51 / cg"
+!
+
+glxRpdrsX: x y: y z: z in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpdrs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:55 / cg"
+!
+
+glxRpmv2X: x y: y in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpmv2(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:37:15 / cg"
+!
+
+glxRpmv2iX: x y: y in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpmv2i(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:37:20 / cg"
+!
+
+glxRpmv2sX: x y: y in: aGLXWindowId
+    "set the relative start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpmv2s(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:38:06 / cg"
+!
+
+glxRpmvX: x y: y z: z in: aGLXWindowId
+    "set the relative start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpmv(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:38:03 / cg"
+!
+
+glxRpmviX: x y: y z: z in: aGLXWindowId
+    "set the relative start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpmvi(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:37:53 / cg"
+!
+
+glxRpmvsX: x y: y z: z in: aGLXWindowId
+    "set the relative start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpmvs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:37:58 / cg"
 ! !
 
 !GLXWorkstation methodsFor:'queries'!
@@ -2362,6 +3587,21 @@
     "
 !
 
+glxGetplanesIn: aGLXWindowId
+    "Returns the number if bit planes available on the device."
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    SETWIN(aGLXWindowId)
+    RETURN (__MKSMALLINT(getplanes()));
+#endif
+%}
+.
+    ^ false
+
+    "Modified: 19.3.1996 / 18:50:44 / cg"
+!
+
 hasStereoExtension
     "return true, if this workstation supports stereo GL drawing.
      Both the server must support it, and the feature must have been
@@ -2512,7 +3752,7 @@
     "
 ! !
 
-!GLXWorkstation methodsFor:'sphere drawing'!
+!GLXWorkstation methodsFor:'spheres'!
 
 glxSphDraw:arrayOf4Floats in:aGLXWindowId
     "argument must be an array(a matrix) of 4 floats containing the
@@ -2621,6 +3861,45 @@
 
 !GLXWorkstation methodsFor:'stereo extension'!
 
+glxLeftbuffer: bool in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    SETWIN(aGLXWindowId)
+    leftbuffer(_booleanVal(bool));
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxMonobufferIn: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    SETWIN(aGLXWindowId)
+    monobuffer();
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxRightbuffer: bool in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    SETWIN(aGLXWindowId)
+    rightbuffer(_booleanVal(bool));
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
 stereoExtensionBuffer:aBufferSymbol for:aWindowId
     "set the current stereo buffer; the argument may be one of:
 	#left        -> STEREO_BUFFER_LEFT
@@ -3156,16 +4435,6 @@
     ^ false
 !
 
-glxBackface: b in: aGLXWindowId
-    "enable/disable backface culling"
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    backface(_booleanVal(b));
-    RETURN (true);
-%}
-!
-
 glxBbox2Xmin: xmin ymin: ymin x1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3547,15 +4816,6 @@
     ^self glxColor: index in: aGLXWindowId
 !
 
-glxConcave: b in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    concave(_booleanVal(b));
-    RETURN (true);
-%}
-!
-
 glxCuroriginN: n xorigin: xorigin yorigin: yorigin in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3608,33 +4868,6 @@
     ^ false
 !
 
-glxCurvebasis: basid in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    curvebasis(_shortVal(basid));
-    RETURN (true);
-%}
-!
-
-glxCurveit: iterationcount in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    curveit(_shortVal(iterationcount));
-    RETURN (true);
-%}
-!
-
-glxCurveprecision: nsegments in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    curveprecision(_shortVal(nsegments));
-    RETURN (true);
-%}
-!
-
 glxCyclemapDuration: duration map: map nxtmap: nxtmap in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3648,16 +4881,6 @@
     ^ false
 !
 
-glxDeflinestyleN: n ls: ls in: aGLXWindowId
-    "define a line style"
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    deflinestyle(_shortVal(n), _linestyleVal(ls));
-    RETURN (true);
-%}
-!
-
 glxDefpatternN: n size: size mask: mask in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3723,97 +4946,6 @@
     ^ false
 !
 
-glxDraw2:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[2], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    draw2((Coord)(c_v[0]), (Coord)(c_v[1]));
-    RETURN (true);
-%}
-!
-
-glxDraw2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    draw2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxDraw2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    draw2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxDraw2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    draw2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxDraw:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[3], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    draw((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
-    RETURN (true);
-%}
-!
-
-glxDrawX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    draw(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxDrawiX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    drawi(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxDrawmode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3827,20 +4959,6 @@
     ^ false
 !
 
-glxDrawsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    draws(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxEditobj: obj in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3937,17 +5055,6 @@
     ^ false
 !
 
-glxFrontface: b in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    frontface(_booleanVal(b));
-    RETURN (true);
-%}
-.
-    ^ false
-!
-
 glxFudgeXfudge: xfudge yfudge: yfudge in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4288,18 +5395,6 @@
     ^ false
 !
 
-glxGetplanesIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    SETWIN(aGLXWindowId)
-    RETURN (__MKSMALLINT(getplanes()));
-#endif
-%}
-.
-    ^ false
-!
-
 glxGetresetlsIn: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4548,19 +5643,6 @@
     ^ false
 !
 
-glxLeftbuffer: bool in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    SETWIN(aGLXWindowId)
-    leftbuffer(_booleanVal(bool));
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
 glxLinesmoothMode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4574,26 +5656,6 @@
     ^ false
 !
 
-glxLinewidth: n in: aGLXWindowId
-    "set the linewidth"
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    linewidth(_shortVal(n));
-    RETURN (true);
-%}
-!
-
-glxLinewidthf: n in: aGLXWindowId
-    "set the linewidth"
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    linewidthf(_floatVal(n));
-    RETURN (true);
-%}
-!
-
 glxLmcolorMode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4633,22 +5695,6 @@
     ^ false
 !
 
-glxLrgbrangeRmin: rmin gmin: gmin bmin: bmin rmax: rmax gmax: gmax bmax: bmax
-    znear: znear zfar: zfar in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    SETWIN(aGLXWindowId)
-    lRGBrange(_shortVal(rmin), _shortVal(gmin), _shortVal(bmin), 
-	_shortVal(rmax), _shortVal(gmax), _shortVal(bmax), 
-	_longVal(znear), _longVal(zfar));
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
 glxLsbackup: b in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4715,15 +5761,6 @@
     ^ false
 !
 
-glxMapcolorI: i red: red green: green blue: blue in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    mapcolor(_colorindexVal(i), _shortVal(red), _shortVal(green), _shortVal(blue));
-    RETURN (true);
-%}
-!
-
 glxMaxsizeX: x y: y in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4750,124 +5787,6 @@
     ^ false
 !
 
-glxMonobufferIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    SETWIN(aGLXWindowId)
-    monobuffer();
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxMove2:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[2], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    move2((Coord)(c_v[0]), (Coord)(c_v[1]));
-    RETURN (true);
-%}
-!
-
-glxMove2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    move2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxMove2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    move2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxMove2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    move2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxMove:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[3], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    move((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
-    RETURN (true);
-%}
-!
-
-glxMoveX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    move(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxMoveiX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    movei(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxMovesX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    moves(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxMsalphaMode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5151,87 +6070,6 @@
     ^ false
 !
 
-glxPdr2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pdr2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPdr2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pdr2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPdr2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pdr2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPdrX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pdr(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPdriX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pdri(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPdrsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pdrs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxPicksizeX: x y: y in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5258,194 +6096,6 @@
     ^ false
 !
 
-glxPmv2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pmv2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPmv2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pmv2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPmv2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pmv2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPmvX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pmv(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPmviX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pmvi(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPmvsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pmvs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPnt2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pnt2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPnt2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pnt2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPnt2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pnt2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPntX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pnt(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPntiX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pnti(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPntsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pnts(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPntsize: n in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    SETWIN(aGLXWindowId)
-    pntsize(_shortVal(n));
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxPntsizef: n in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    SETWIN(aGLXWindowId)
-    pntsizef(_floatVal(n));
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
 glxPntsmoothMode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5459,15 +6109,6 @@
     ^ false
 !
 
-glxPolymode: mode in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    polymode(_longVal(mode));
-    RETURN (true);
-%}
-!
-
 glxPolysmoothMode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5481,15 +6122,6 @@
     ^ false
 !
 
-glxPopattributesIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    popattributes();
-    RETURN (true);
-%}
-!
-
 glxPopnameIn: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5503,15 +6135,6 @@
     ^ false
 !
 
-glxPopviewportIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    popviewport();
-    RETURN (true);
-%}
-!
-
 glxPrefpositionX1: x1 x2: x2 y1: y1 y2: y2 in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5543,15 +6166,6 @@
     ^ false
 !
 
-glxPushattributesIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    pushattributes();
-    RETURN (true);
-%}
-!
-
 glxPushname: name In: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5565,15 +6179,6 @@
     ^ false
 !
 
-glxPushviewportIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    pushviewport();
-    RETURN (true);
-%}
-!
-
 glxQdevice: dev in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5664,111 +6269,6 @@
     ^ false
 !
 
-glxRdr2:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[2], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    rdr2((Coord)(c_v[0]), (Coord)(c_v[1]));
-    RETURN (true);
-%}
-!
-
-glxRdr2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rdr2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRdr2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rdr2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRdr2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rdr2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRdr:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[3], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    rdr((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
-    RETURN (true);
-%}
-!
-
-glxRdrX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rdr(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRdriX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rdri(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRdrsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rdrs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxReadsource: src in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5782,15 +6282,6 @@
     ^ false
 !
 
-glxRectX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    rect(_coordVal(x1), _coordVal(y1), _coordVal(x2), _coordVal(y2));
-    RETURN (true);
-%}
-!
-
 glxRectcopyX1: x1 y1: y1 x2: x2 y2: y2 newx: newx newy: newy in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5806,51 +6297,6 @@
     ^ false
 !
 
-glxRectfX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    rectf(_coordVal(x1), _coordVal(y1), _coordVal(x2), _coordVal(y2));
-    RETURN (true);
-%}
-!
-
-glxRectfiX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    rectfi(_icoordVal(x1), _icoordVal(y1), _icoordVal(x2), _icoordVal(y2));
-    RETURN (true);
-%}
-!
-
-glxRectfsX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    rectfs(_scoordVal(x1), _scoordVal(y1), _scoordVal(x2), _scoordVal(y2));
-    RETURN (true);
-%}
-!
-
-glxRectiX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    recti(_icoordVal(x1), _icoordVal(y1), _icoordVal(x2), _icoordVal(y2));
-    RETURN (true);
-%}
-!
-
-glxRectsX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    rects(_scoordVal(x1), _scoordVal(y1), _scoordVal(x2), _scoordVal(y2));
-    RETURN (true);
-%}
-!
-
 glxRectzoomX: xfactor y: yfactor in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5877,19 +6323,6 @@
     ^ false
 !
 
-glxRightbuffer: bool in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    SETWIN(aGLXWindowId)
-    rightbuffer(_booleanVal(bool));
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
 glxRingbellIn: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5903,273 +6336,6 @@
     ^ false
 !
 
-glxRmv2:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[2], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    rmv2((Coord)(c_v[0]), (Coord)(c_v[1]));
-    RETURN (true);
-%}
-!
-
-glxRmv2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rmv2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRmv2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rmv2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRmv2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rmv2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRmv:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[3], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    rmv((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
-    RETURN (true);
-%}
-!
-
-glxRmvX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rmv(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRmviX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rmvi(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRmvsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rmvs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpdr2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpdr2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpdr2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpdr2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpdr2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpdr2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpdrX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpdr(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpdriX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpdri(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpdrsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpdrs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpmv2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpmv2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpmv2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpmv2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpmv2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpmv2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpmvX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpmv(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpmviX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpmvi(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpmvsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpmvs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxSboxX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -6366,18 +6532,6 @@
     ^ false
 !
 
-glxSetlinestyle: index in: aGLXWindowId
-    "set the linestyle"
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    setlinestyle(_shortVal(index));
-    RETURN (true);
-%}
-.
-    ^ false
-!
-
 glxSetmap: mapnum in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -6615,198 +6769,6 @@
     ^ false
 !
 
-glxT2d: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    double vec[2], *c_v;
-
-    if (! (c_v = getDoublesFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t2d(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT2f: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    float vec[2], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t2f(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT2i: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    long vec[2], *c_v;
-
-    if (! (c_v = getLongsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t2i(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT2s: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    short vec[2], *c_v;
-
-    if (! (c_v = getShortsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t2s(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT3d:v in:aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    double vec[3], *c_v;
-
-    if (! (c_v = getDoublesFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t3d(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT3f:v in:aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    float vec[3], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t3f(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT3i:v in:aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    long vec[3], *c_v;
-
-    if (! (c_v = getLongsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t3i(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT3s:v in:aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    short vec[3], *c_v;
-
-    if (! (c_v = getShortsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t3s(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT4d: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    double vec[4], *c_v;
-
-    if (! (c_v = getDoublesFromInto(v, vec, 4))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t4d(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT4f: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    float vec[4], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 4))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t4f(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT4i: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    long vec[4], *c_v;
-
-    if (! (c_v = getLongsFromInto(v, vec, 4))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t4i(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT4s: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    short vec[4], *c_v;
-
-    if (! (c_v = getShortsFromInto(v, vec, 4))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t4s(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
 glxTextinitIn: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -7107,6 +7069,198 @@
     ^ false
 !
 
+glxT2d: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    double vec[2], *c_v;
+
+    if (! (c_v = getDoublesFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t2d(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT2f: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    float vec[2], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t2f(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT2i: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    long vec[2], *c_v;
+
+    if (! (c_v = getLongsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t2i(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT2s: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    short vec[2], *c_v;
+
+    if (! (c_v = getShortsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t2s(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT3d:v in:aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    double vec[3], *c_v;
+
+    if (! (c_v = getDoublesFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t3d(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT3f:v in:aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    float vec[3], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t3f(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT3i:v in:aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    long vec[3], *c_v;
+
+    if (! (c_v = getLongsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t3i(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT3s:v in:aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    short vec[3], *c_v;
+
+    if (! (c_v = getShortsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t3s(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT4d: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    double vec[4], *c_v;
+
+    if (! (c_v = getDoublesFromInto(v, vec, 4))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t4d(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT4f: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    float vec[4], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 4))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t4f(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT4i: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    long vec[4], *c_v;
+
+    if (! (c_v = getLongsFromInto(v, vec, 4))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t4i(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT4s: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    short vec[4], *c_v;
+
+    if (! (c_v = getShortsFromInto(v, vec, 4))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t4s(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
 glxV2d:v in:aGLXWindowId
     "pass a vertex; v must be a vector with 2 doubles; z is taken as 0"
 
@@ -7504,6 +7658,30 @@
 %}
 !
 
+glxPopviewportIn: aGLXWindowId
+    "pops the top viewport off the viewport stack"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    popviewport();
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:58:24 / cg"
+!
+
+glxPushviewportIn: aGLXWindowId
+    "pushes the current viewport on the viewport stack"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    pushviewport();
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:58:02 / cg"
+!
+
 glxReshapeViewPortIn: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -7844,5 +8022,5 @@
 !GLXWorkstation class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview/Attic/GLXWorkstat.st,v 1.46 1996-03-08 17:11:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libview/Attic/GLXWorkstat.st,v 1.47 1996-03-19 18:00:46 cg Exp $'
 ! !
--- a/GLXWorkstation.st	Mon Mar 18 12:57:47 1996 +0100
+++ b/GLXWorkstation.st	Tue Mar 19 19:00:46 1996 +0100
@@ -11,14 +11,13 @@
 "
 
 XWorkstation subclass:#GLXWorkstation
-	 instanceVariableNames:'activeWindow hasStereoExtension glOK'
-	 classVariableNames:'ForceGL'
-	 poolDictionaries:''
-	 category:'Interface-Graphics'
+	instanceVariableNames:'activeWindow hasStereoExtension glOK'
+	classVariableNames:'ForceGL'
+	poolDictionaries:''
+	category:'Interface-Graphics'
 !
 
 !GLXWorkstation primitiveDefinitions!
-
 %{
 /*
  * on SGI, this class is compiled with -DGLX, while
@@ -1056,6 +1055,13 @@
 %}
 !
 
+forceGL:aBoolean
+    ForceGL := aBoolean.
+    AllScreens notNil ifTrue:[
+        AllScreens do:[:screen | screen initializeScreenProperties]
+    ].
+!
+
 minorCodeOfLastError
 %{  /* NOCONTEXT */
 
@@ -1075,19 +1081,12 @@
 
     RETURN ( __MKSMALLINT(lastResource) );
 %}
-!
-
-forceGL:aBoolean
-    ForceGL := aBoolean.
-    AllScreens notNil ifTrue:[
-        AllScreens do:[:screen | screen initializeScreenProperties]
-    ].
 ! !
 
 !GLXWorkstation methodsFor:'arcs and circles'!
 
 glxArcX: x y: y radius: radius startang: startang endang: endang in: aGLXWindowId
-    "draw an arc"
+    "draw an arc at a given location."
 
 %{  /* NOCONTEXT */
     Coord c_x, c_y, c_radius;
@@ -1102,6 +1101,8 @@
     arc(c_x, c_y, c_radius, a_startang, a_endang);
     RETURN (true);
 %}
+
+    "Modified: 19.3.1996 / 18:43:52 / cg"
 !
 
 glxArcfX: x y: y radius: radius startang: startang endang: endang in: aGLXWindowId
@@ -1284,6 +1285,32 @@
 %}
 ! !
 
+!GLXWorkstation methodsFor:'attribute stack'!
+
+glxPopattributesIn: aGLXWindowId
+    "pop the top entry on the attribute stack"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    popattributes();
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:42:53 / cg"
+!
+
+glxPushattributesIn: aGLXWindowId
+    "save the current attributes on the matrix stack"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    pushattributes();
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:43:04 / cg"
+! !
+
 !GLXWorkstation methodsFor:'clearing'!
 
 glxClearIn:aGLXWindowId
@@ -1388,6 +1415,31 @@
     ^ false
 !
 
+glxLrgbrangeRmin: rmin gmin: gmin bmin: bmin rmax: rmax gmax: gmax bmax: bmax
+    znear: znear zfar: zfar in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    SETWIN(aGLXWindowId)
+    lRGBrange(_shortVal(rmin), _shortVal(gmin), _shortVal(bmin), 
+	_shortVal(rmax), _shortVal(gmax), _shortVal(bmax), 
+	_longVal(znear), _longVal(zfar));
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxMapcolorI: i red: red green: green blue: blue in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    mapcolor(_colorindexVal(i), _shortVal(red), _shortVal(green), _shortVal(blue));
+    RETURN (true);
+%}
+!
+
 glxTextcolor: tcolor in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -1401,6 +1453,45 @@
     ^ false
 ! !
 
+!GLXWorkstation methodsFor:'curves'!
+
+glxCurvebasis: basid in: aGLXWindowId
+    "sets the basis type of curves"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    curvebasis(_shortVal(basid));
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:47:09 / cg"
+!
+
+glxCurveit: iterationcount in: aGLXWindowId
+    "Iterates the top matrix on the stack as a forward difference
+     matrix, drawing as it goes along."
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    curveit(_shortVal(iterationcount));
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:48:57 / cg"
+!
+
+glxCurveprecision: nsegments in: aGLXWindowId
+    "sets the number of line segments that make up a curve segment"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    curveprecision(_shortVal(nsegments));
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:47:43 / cg"
+! !
+
 !GLXWorkstation methodsFor:'double buffering'!
 
 glxBackBufferIn:aGLXWindowId
@@ -1417,12 +1508,15 @@
 !
 
 glxBackbuffer: b in: aGLXWindowId
+    "switch to front/back buffer"
 
 %{  /* NOCONTEXT */
     SETWIN(aGLXWindowId)
     backbuffer(_booleanVal(b));
     RETURN (true);
 %}
+
+    "Modified: 19.3.1996 / 18:45:05 / cg"
 !
 
 glxDoubleBufferIn:aGLXWindowId
@@ -1449,12 +1543,15 @@
 !
 
 glxFrontbuffer: b in: aGLXWindowId
+    "switch to front buffer - turning backbuffer off"
 
 %{  /* NOCONTEXT */
     SETWIN(aGLXWindowId)
     frontbuffer(_booleanVal(b));
     RETURN (true);
 %}
+
+    "Modified: 19.3.1996 / 18:45:31 / cg"
 !
 
 glxSingleBufferIn: aGLXWindowId
@@ -1468,13 +1565,15 @@
 !
 
 glxSwapBuffersIn:aGLXWindowId
-    "swap double buffers"
+    "swap the back and front buffers"
 
 %{  /* NOCONTEXT */
     SETWIN(aGLXWindowId)
     swapbuffers();
     RETURN (true);
 %}
+
+    "Modified: 19.3.1996 / 18:45:47 / cg"
 ! !
 
 !GLXWorkstation methodsFor:'flat drawing'!
@@ -1648,6 +1747,524 @@
 %}
 ! !
 
+!GLXWorkstation methodsFor:'lines & rectangles'!
+
+glxDeflinestyleN: n ls: ls in: aGLXWindowId
+    "define a line style"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    deflinestyle(_shortVal(n), _linestyleVal(ls));
+    RETURN (true);
+%}
+!
+
+glxDraw2:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[2], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    draw2((Coord)(c_v[0]), (Coord)(c_v[1]));
+    RETURN (true);
+%}
+!
+
+glxDraw2X: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    draw2(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxDraw2iX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    draw2i(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxDraw2sX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    draw2s(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxDraw:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[3], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    draw((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
+    RETURN (true);
+%}
+!
+
+glxDrawX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    draw(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxDrawiX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    drawi(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxDrawsX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    draws(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxLinewidth: n in: aGLXWindowId
+    "set the linewidth"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    linewidth(_shortVal(n));
+    RETURN (true);
+%}
+!
+
+glxLinewidthf: n in: aGLXWindowId
+    "set the linewidth"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    linewidthf(_floatVal(n));
+    RETURN (true);
+%}
+!
+
+glxMove2:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[2], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    move2((Coord)(c_v[0]), (Coord)(c_v[1]));
+    RETURN (true);
+%}
+!
+
+glxMove2X: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    move2(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxMove2iX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    move2i(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxMove2sX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    move2s(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxMove:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[3], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    move((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
+    RETURN (true);
+%}
+!
+
+glxMoveX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    move(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxMoveiX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    movei(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxMovesX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    moves(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRdr2:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[2], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    rdr2((Coord)(c_v[0]), (Coord)(c_v[1]));
+    RETURN (true);
+%}
+!
+
+glxRdr2X: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rdr2(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRdr2iX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rdr2i(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRdr2sX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rdr2s(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRdr:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[3], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    rdr((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
+    RETURN (true);
+%}
+!
+
+glxRdrX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rdr(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRdriX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rdri(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRdrsX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rdrs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRectX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    rect(_coordVal(x1), _coordVal(y1), _coordVal(x2), _coordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRectfX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    rectf(_coordVal(x1), _coordVal(y1), _coordVal(x2), _coordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRectfiX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    rectfi(_icoordVal(x1), _icoordVal(y1), _icoordVal(x2), _icoordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRectfsX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    rectfs(_scoordVal(x1), _scoordVal(y1), _scoordVal(x2), _scoordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRectiX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    recti(_icoordVal(x1), _icoordVal(y1), _icoordVal(x2), _icoordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRectsX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    rects(_scoordVal(x1), _scoordVal(y1), _scoordVal(x2), _scoordVal(y2));
+    RETURN (true);
+%}
+!
+
+glxRmv2:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[2], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    rmv2((Coord)(c_v[0]), (Coord)(c_v[1]));
+    RETURN (true);
+%}
+!
+
+glxRmv2X: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rmv2(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRmv2iX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rmv2i(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRmv2sX: x y: y in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rmv2s(c_x, c_y);
+    RETURN (true);
+%}
+!
+
+glxRmv:v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    float vec[3], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    rmv((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
+    RETURN (true);
+%}
+!
+
+glxRmvX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rmv(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRmviX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rmvi(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxRmvsX: x y: y z: z in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rmvs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+!
+
+glxSetlinestyle: index in: aGLXWindowId
+    "set the linestyle"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    setlinestyle(_shortVal(index));
+    RETURN (true);
+%}
+.
+    ^ false
+! !
+
 !GLXWorkstation methodsFor:'materials & lights'!
 
 glxLmbind:target index:index in:aGLXWindowId
@@ -2189,7 +2806,7 @@
 !
 
 glxDefBasis:id mat:aMatrix in:aGLXWindowId
-    "define the basis"
+    "define the basis matrix for a patch or curve"
 
 %{  /* NOCONTEXT */
     Matrix matrix;
@@ -2197,13 +2814,15 @@
 
     if (! (m = getFloatsFromMatrixInto(aMatrix, &matrix))) RETURN (false);
     if (__isSmallInteger(id)) {
-	SETWIN(aGLXWindowId)
-	defbasis((short)(__intVal(id)), *m);
-	RETURN (true);
+        SETWIN(aGLXWindowId)
+        defbasis((short)(__intVal(id)), *m);
+        RETURN (true);
     }
 %}
 .
     ^ false
+
+    "Modified: 19.3.1996 / 18:52:56 / cg"
 !
 
 glxEndCurveIn:aGLXWindowId
@@ -2278,31 +2897,35 @@
 !
 
 glxPatchBasisU:u v:v in:aGLXWindowId
-    "set the current basis matrices"
+    "set the two basis matrices for a patch"
 
 %{  /* NOCONTEXT */
     if (__bothSmallInteger(u, v)) {
-	SETWIN(aGLXWindowId)
-	patchbasis((long)__intVal(u), (long)__intVal(v));
-	RETURN (true);
+        SETWIN(aGLXWindowId)
+        patchbasis((long)__intVal(u), (long)__intVal(v));
+        RETURN (true);
     }
 %}
 .
     ^ false
+
+    "Modified: 19.3.1996 / 18:53:18 / cg"
 !
 
 glxPatchCurvesU:u v:v in:aGLXWindowId
-    "set the number of curves in a patch"
+    "set the number of curves to be drawn in each direction on a patch"
 
 %{  /* NOCONTEXT */
     if (__bothSmallInteger(u, v)) {
-	SETWIN(aGLXWindowId)
-	patchcurves((long)__intVal(u), (long)__intVal(v));
-	RETURN (true);
+        SETWIN(aGLXWindowId)
+        patchcurves((long)__intVal(u), (long)__intVal(v));
+        RETURN (true);
     }
 %}
 .
     ^ false
+
+    "Modified: 19.3.1996 / 18:53:34 / cg"
 !
 
 glxPatchPrecisionU:u v:v in:aGLXWindowId
@@ -2320,7 +2943,8 @@
 !
 
 glxPatchX:arrayOf16XFloats y:arrayOf16YFloats z:arrayOf16ZFloats in:aGLXWindowId
-    "arguments must be arrays of 16 floats containing the patch"
+    "Draws a bicubic patch.
+     arguments must be arrays of 16 floats containing the patch"
 
 %{  /* NOCONTEXT */
     Matrix matrixX, matrixY, matrixZ;
@@ -2333,6 +2957,607 @@
     patch(*mX, *mY, *mZ);
     RETURN (true);
 %}
+
+    "Modified: 19.3.1996 / 18:54:02 / cg"
+!
+
+glxRpatchX:arrayOf16XFloats y:arrayOf16YFloats z:arrayOf16ZFloats w:arrayOf16WFloats in:aGLXWindowId
+    "Draws a rational bicubic patch.
+     arguments must be arrays of 16 floats containing the patch"
+
+%{  /* NOCONTEXT */
+    Matrix matrixX, matrixY, matrixZ, matrixM;
+    Matrix *mX, *mY, *mZ, *mM;
+
+    if (! (mX = getFloatsFromMatrixInto(arrayOf16XFloats, &matrixX))) RETURN (false);
+    if (! (mY = getFloatsFromMatrixInto(arrayOf16YFloats, &matrixY))) RETURN (false);
+    if (! (mZ = getFloatsFromMatrixInto(arrayOf16ZFloats, &matrixZ))) RETURN (false);
+    if (! (mM = getFloatsFromMatrixInto(arrayOf16MFloats, &matrixM))) RETURN (false);
+    SETWIN(aGLXWindowId)
+    rpatch(*mX, *mY, *mZ, *mM);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:54:02 / cg"
+    "Created: 19.3.1996 / 18:56:34 / cg"
+! !
+
+!GLXWorkstation methodsFor:'points'!
+
+glxPnt2X: x y: y in: aGLXWindowId
+    "plot a point in x, y, 0."
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pnt2(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:35:55 / cg"
+!
+
+glxPnt2iX: x y: y in: aGLXWindowId
+    "plot a point in x, y, 0."
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pnt2i(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:35:59 / cg"
+!
+
+glxPnt2sX: x y: y in: aGLXWindowId
+    "plot a point in x, y, 0."
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pnt2s(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:36:03 / cg"
+!
+
+glxPntX: x y: y z: z in: aGLXWindowId
+    "plot a point in x, y, z."
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pnt(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:36:08 / cg"
+!
+
+glxPntiX: x y: y z: z in: aGLXWindowId
+    "plot a point in x, y, z."
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pnti(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:36:14 / cg"
+!
+
+glxPntsX: x y: y z: z in: aGLXWindowId
+    "plot a point in x, y, z."
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pnts(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:36:17 / cg"
+!
+
+glxPntsize: n in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    SETWIN(aGLXWindowId)
+    pntsize(_shortVal(n));
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxPntsizef: n in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    SETWIN(aGLXWindowId)
+    pntsizef(_floatVal(n));
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+! !
+
+!GLXWorkstation methodsFor:'polygons'!
+
+glxBackface: b in: aGLXWindowId
+    "enable/disable culling of backfacing polygons (suppress its drawing). 
+     A polygon is backfacing if it's orientation in *screen* coords is clockwise"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    backface(_booleanVal(b));
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:26:50 / cg"
+!
+
+glxConcave: b in: aGLXWindowId
+    "signal wether or not polygons are concave"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    concave(_booleanVal(b));
+    RETURN (true);
+%}
+!
+
+glxFrontface: b in: aGLXWindowId
+    "enable/disable culling of frontfacing polygons (suppress its drawing). 
+     A polygon is frontfacing if it's orientation in *screen* coords is 
+     anti-clockwise"
+
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    frontface(_booleanVal(b));
+    RETURN (true);
+%}
+.
+    ^ false
+
+    "Modified: 19.3.1996 / 18:27:50 / cg"
+!
+
+glxPdr2X: x y: y in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pdr2(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:33:09 / cg"
+!
+
+glxPdr2iX: x y: y in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pdr2i(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:33:28 / cg"
+!
+
+glxPdr2sX: x y: y in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pdr2s(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:03 / cg"
+!
+
+glxPdrX: x y: y z: z in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pdr(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:06 / cg"
+!
+
+glxPdriX: x y: y z: z in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pdri(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:11 / cg"
+!
+
+glxPdrsX: x y: y z: z in: aGLXWindowId
+    "add another vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pdrs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:14 / cg"
+!
+
+glxPmv2X: x y: y in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pmv2(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:32:45 / cg"
+!
+
+glxPmv2iX: x y: y in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pmv2i(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:32:42 / cg"
+!
+
+glxPmv2sX: x y: y in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    pmv2s(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:32:38 / cg"
+!
+
+glxPmvX: x y: y z: z in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pmv(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:31:52 / cg"
+!
+
+glxPmviX: x y: y z: z in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pmvi(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:31:59 / cg"
+!
+
+glxPmvsX: x y: y z: z in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    pmvs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:32:03 / cg"
+!
+
+glxPolymode: mode in: aGLXWindowId
+    "Sets the polygon filling mode - only filled (1) or outlined (0)
+     are supported"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    polymode(_longVal(mode));
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:29:32 / cg"
+!
+
+glxRpdr2X: x y: y in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpdr2(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:31 / cg"
+!
+
+glxRpdr2iX: x y: y in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpdr2i(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:36 / cg"
+!
+
+glxRpdr2sX: x y: y in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpdr2s(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:40 / cg"
+!
+
+glxRpdrX: x y: y z: z in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpdr(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:48 / cg"
+!
+
+glxRpdriX: x y: y z: z in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpdri(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:51 / cg"
+!
+
+glxRpdrsX: x y: y z: z in: aGLXWindowId
+    "add another relative vertex to the polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpdrs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:34:55 / cg"
+!
+
+glxRpmv2X: x y: y in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpmv2(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:37:15 / cg"
+!
+
+glxRpmv2iX: x y: y in: aGLXWindowId
+    "set the start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpmv2i(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:37:20 / cg"
+!
+
+glxRpmv2sX: x y: y in: aGLXWindowId
+    "set the relative start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    SETWIN(aGLXWindowId)
+    rpmv2s(c_x, c_y);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:38:06 / cg"
+!
+
+glxRpmvX: x y: y z: z in: aGLXWindowId
+    "set the relative start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Coord c_x, c_y, c_z;
+
+    _COORD_ (x, c_x)
+    _COORD_ (y, c_y)
+    _COORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpmv(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:38:03 / cg"
+!
+
+glxRpmviX: x y: y z: z in: aGLXWindowId
+    "set the relative start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Icoord c_x, c_y, c_z;
+
+    _ICOORD_ (x, c_x)
+    _ICOORD_ (y, c_y)
+    _ICOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpmvi(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:37:53 / cg"
+!
+
+glxRpmvsX: x y: y z: z in: aGLXWindowId
+    "set the relative start position of a polygon"
+
+%{  /* NOCONTEXT */
+    Scoord c_x, c_y, c_z;
+
+    _SCOORD_ (x, c_x)
+    _SCOORD_ (y, c_y)
+    _SCOORD_ (z, c_z)
+    SETWIN(aGLXWindowId)
+    rpmvs(c_x, c_y, c_z);
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:37:58 / cg"
 ! !
 
 !GLXWorkstation methodsFor:'queries'!
@@ -2362,6 +3587,21 @@
     "
 !
 
+glxGetplanesIn: aGLXWindowId
+    "Returns the number if bit planes available on the device."
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    SETWIN(aGLXWindowId)
+    RETURN (__MKSMALLINT(getplanes()));
+#endif
+%}
+.
+    ^ false
+
+    "Modified: 19.3.1996 / 18:50:44 / cg"
+!
+
 hasStereoExtension
     "return true, if this workstation supports stereo GL drawing.
      Both the server must support it, and the feature must have been
@@ -2512,7 +3752,7 @@
     "
 ! !
 
-!GLXWorkstation methodsFor:'sphere drawing'!
+!GLXWorkstation methodsFor:'spheres'!
 
 glxSphDraw:arrayOf4Floats in:aGLXWindowId
     "argument must be an array(a matrix) of 4 floats containing the
@@ -2621,6 +3861,45 @@
 
 !GLXWorkstation methodsFor:'stereo extension'!
 
+glxLeftbuffer: bool in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    SETWIN(aGLXWindowId)
+    leftbuffer(_booleanVal(bool));
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxMonobufferIn: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    SETWIN(aGLXWindowId)
+    monobuffer();
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxRightbuffer: bool in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    SETWIN(aGLXWindowId)
+    rightbuffer(_booleanVal(bool));
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
 stereoExtensionBuffer:aBufferSymbol for:aWindowId
     "set the current stereo buffer; the argument may be one of:
 	#left        -> STEREO_BUFFER_LEFT
@@ -3156,16 +4435,6 @@
     ^ false
 !
 
-glxBackface: b in: aGLXWindowId
-    "enable/disable backface culling"
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    backface(_booleanVal(b));
-    RETURN (true);
-%}
-!
-
 glxBbox2Xmin: xmin ymin: ymin x1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3547,15 +4816,6 @@
     ^self glxColor: index in: aGLXWindowId
 !
 
-glxConcave: b in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    concave(_booleanVal(b));
-    RETURN (true);
-%}
-!
-
 glxCuroriginN: n xorigin: xorigin yorigin: yorigin in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3608,33 +4868,6 @@
     ^ false
 !
 
-glxCurvebasis: basid in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    curvebasis(_shortVal(basid));
-    RETURN (true);
-%}
-!
-
-glxCurveit: iterationcount in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    curveit(_shortVal(iterationcount));
-    RETURN (true);
-%}
-!
-
-glxCurveprecision: nsegments in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    curveprecision(_shortVal(nsegments));
-    RETURN (true);
-%}
-!
-
 glxCyclemapDuration: duration map: map nxtmap: nxtmap in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3648,16 +4881,6 @@
     ^ false
 !
 
-glxDeflinestyleN: n ls: ls in: aGLXWindowId
-    "define a line style"
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    deflinestyle(_shortVal(n), _linestyleVal(ls));
-    RETURN (true);
-%}
-!
-
 glxDefpatternN: n size: size mask: mask in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3723,97 +4946,6 @@
     ^ false
 !
 
-glxDraw2:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[2], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    draw2((Coord)(c_v[0]), (Coord)(c_v[1]));
-    RETURN (true);
-%}
-!
-
-glxDraw2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    draw2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxDraw2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    draw2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxDraw2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    draw2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxDraw:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[3], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    draw((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
-    RETURN (true);
-%}
-!
-
-glxDrawX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    draw(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxDrawiX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    drawi(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxDrawmode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3827,20 +4959,6 @@
     ^ false
 !
 
-glxDrawsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    draws(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxEditobj: obj in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -3937,17 +5055,6 @@
     ^ false
 !
 
-glxFrontface: b in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    frontface(_booleanVal(b));
-    RETURN (true);
-%}
-.
-    ^ false
-!
-
 glxFudgeXfudge: xfudge yfudge: yfudge in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4288,18 +5395,6 @@
     ^ false
 !
 
-glxGetplanesIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    SETWIN(aGLXWindowId)
-    RETURN (__MKSMALLINT(getplanes()));
-#endif
-%}
-.
-    ^ false
-!
-
 glxGetresetlsIn: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4548,19 +5643,6 @@
     ^ false
 !
 
-glxLeftbuffer: bool in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    SETWIN(aGLXWindowId)
-    leftbuffer(_booleanVal(bool));
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
 glxLinesmoothMode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4574,26 +5656,6 @@
     ^ false
 !
 
-glxLinewidth: n in: aGLXWindowId
-    "set the linewidth"
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    linewidth(_shortVal(n));
-    RETURN (true);
-%}
-!
-
-glxLinewidthf: n in: aGLXWindowId
-    "set the linewidth"
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    linewidthf(_floatVal(n));
-    RETURN (true);
-%}
-!
-
 glxLmcolorMode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4633,22 +5695,6 @@
     ^ false
 !
 
-glxLrgbrangeRmin: rmin gmin: gmin bmin: bmin rmax: rmax gmax: gmax bmax: bmax
-    znear: znear zfar: zfar in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    SETWIN(aGLXWindowId)
-    lRGBrange(_shortVal(rmin), _shortVal(gmin), _shortVal(bmin), 
-	_shortVal(rmax), _shortVal(gmax), _shortVal(bmax), 
-	_longVal(znear), _longVal(zfar));
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
 glxLsbackup: b in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4715,15 +5761,6 @@
     ^ false
 !
 
-glxMapcolorI: i red: red green: green blue: blue in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    mapcolor(_colorindexVal(i), _shortVal(red), _shortVal(green), _shortVal(blue));
-    RETURN (true);
-%}
-!
-
 glxMaxsizeX: x y: y in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -4750,124 +5787,6 @@
     ^ false
 !
 
-glxMonobufferIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    SETWIN(aGLXWindowId)
-    monobuffer();
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxMove2:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[2], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    move2((Coord)(c_v[0]), (Coord)(c_v[1]));
-    RETURN (true);
-%}
-!
-
-glxMove2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    move2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxMove2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    move2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxMove2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    move2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxMove:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[3], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    move((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
-    RETURN (true);
-%}
-!
-
-glxMoveX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    move(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxMoveiX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    movei(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxMovesX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    moves(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxMsalphaMode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5151,87 +6070,6 @@
     ^ false
 !
 
-glxPdr2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pdr2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPdr2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pdr2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPdr2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pdr2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPdrX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pdr(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPdriX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pdri(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPdrsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pdrs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxPicksizeX: x y: y in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5258,194 +6096,6 @@
     ^ false
 !
 
-glxPmv2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pmv2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPmv2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pmv2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPmv2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pmv2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPmvX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pmv(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPmviX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pmvi(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPmvsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pmvs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPnt2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pnt2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPnt2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pnt2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPnt2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    pnt2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxPntX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pnt(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPntiX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pnti(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPntsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    pnts(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxPntsize: n in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    SETWIN(aGLXWindowId)
-    pntsize(_shortVal(n));
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxPntsizef: n in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    SETWIN(aGLXWindowId)
-    pntsizef(_floatVal(n));
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
 glxPntsmoothMode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5459,15 +6109,6 @@
     ^ false
 !
 
-glxPolymode: mode in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    polymode(_longVal(mode));
-    RETURN (true);
-%}
-!
-
 glxPolysmoothMode: mode in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5481,15 +6122,6 @@
     ^ false
 !
 
-glxPopattributesIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    popattributes();
-    RETURN (true);
-%}
-!
-
 glxPopnameIn: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5503,15 +6135,6 @@
     ^ false
 !
 
-glxPopviewportIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    popviewport();
-    RETURN (true);
-%}
-!
-
 glxPrefpositionX1: x1 x2: x2 y1: y1 y2: y2 in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5543,15 +6166,6 @@
     ^ false
 !
 
-glxPushattributesIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    pushattributes();
-    RETURN (true);
-%}
-!
-
 glxPushname: name In: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5565,15 +6179,6 @@
     ^ false
 !
 
-glxPushviewportIn: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    pushviewport();
-    RETURN (true);
-%}
-!
-
 glxQdevice: dev in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5664,111 +6269,6 @@
     ^ false
 !
 
-glxRdr2:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[2], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    rdr2((Coord)(c_v[0]), (Coord)(c_v[1]));
-    RETURN (true);
-%}
-!
-
-glxRdr2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rdr2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRdr2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rdr2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRdr2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rdr2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRdr:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[3], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    rdr((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
-    RETURN (true);
-%}
-!
-
-glxRdrX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rdr(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRdriX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rdri(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRdrsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rdrs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxReadsource: src in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5782,15 +6282,6 @@
     ^ false
 !
 
-glxRectX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    rect(_coordVal(x1), _coordVal(y1), _coordVal(x2), _coordVal(y2));
-    RETURN (true);
-%}
-!
-
 glxRectcopyX1: x1 y1: y1 x2: x2 y2: y2 newx: newx newy: newy in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5806,51 +6297,6 @@
     ^ false
 !
 
-glxRectfX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    rectf(_coordVal(x1), _coordVal(y1), _coordVal(x2), _coordVal(y2));
-    RETURN (true);
-%}
-!
-
-glxRectfiX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    rectfi(_icoordVal(x1), _icoordVal(y1), _icoordVal(x2), _icoordVal(y2));
-    RETURN (true);
-%}
-!
-
-glxRectfsX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    rectfs(_scoordVal(x1), _scoordVal(y1), _scoordVal(x2), _scoordVal(y2));
-    RETURN (true);
-%}
-!
-
-glxRectiX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    recti(_icoordVal(x1), _icoordVal(y1), _icoordVal(x2), _icoordVal(y2));
-    RETURN (true);
-%}
-!
-
-glxRectsX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    rects(_scoordVal(x1), _scoordVal(y1), _scoordVal(x2), _scoordVal(y2));
-    RETURN (true);
-%}
-!
-
 glxRectzoomX: xfactor y: yfactor in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5877,19 +6323,6 @@
     ^ false
 !
 
-glxRightbuffer: bool in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    SETWIN(aGLXWindowId)
-    rightbuffer(_booleanVal(bool));
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
 glxRingbellIn: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -5903,273 +6336,6 @@
     ^ false
 !
 
-glxRmv2:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[2], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    rmv2((Coord)(c_v[0]), (Coord)(c_v[1]));
-    RETURN (true);
-%}
-!
-
-glxRmv2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rmv2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRmv2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rmv2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRmv2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rmv2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRmv:v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    float vec[3], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    rmv((Coord)(c_v[0]), (Coord)(c_v[1]), (Coord)(c_v[2]));
-    RETURN (true);
-%}
-!
-
-glxRmvX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rmv(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRmviX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rmvi(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRmvsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rmvs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpdr2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpdr2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpdr2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpdr2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpdr2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpdr2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpdrX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpdr(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpdriX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpdri(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpdrsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpdrs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpmv2X: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpmv2(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpmv2iX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpmv2i(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpmv2sX: x y: y in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    SETWIN(aGLXWindowId)
-    rpmv2s(c_x, c_y);
-    RETURN (true);
-%}
-!
-
-glxRpmvX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Coord c_x, c_y, c_z;
-
-    _COORD_ (x, c_x)
-    _COORD_ (y, c_y)
-    _COORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpmv(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpmviX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Icoord c_x, c_y, c_z;
-
-    _ICOORD_ (x, c_x)
-    _ICOORD_ (y, c_y)
-    _ICOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpmvi(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
-glxRpmvsX: x y: y z: z in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-    Scoord c_x, c_y, c_z;
-
-    _SCOORD_ (x, c_x)
-    _SCOORD_ (y, c_y)
-    _SCOORD_ (z, c_z)
-    SETWIN(aGLXWindowId)
-    rpmvs(c_x, c_y, c_z);
-    RETURN (true);
-%}
-!
-
 glxSboxX1: x1 y1: y1 x2: x2 y2: y2 in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -6366,18 +6532,6 @@
     ^ false
 !
 
-glxSetlinestyle: index in: aGLXWindowId
-    "set the linestyle"
-
-%{  /* NOCONTEXT */
-    SETWIN(aGLXWindowId)
-    setlinestyle(_shortVal(index));
-    RETURN (true);
-%}
-.
-    ^ false
-!
-
 glxSetmap: mapnum in: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -6615,198 +6769,6 @@
     ^ false
 !
 
-glxT2d: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    double vec[2], *c_v;
-
-    if (! (c_v = getDoublesFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t2d(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT2f: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    float vec[2], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t2f(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT2i: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    long vec[2], *c_v;
-
-    if (! (c_v = getLongsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t2i(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT2s: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef GLX
-    short vec[2], *c_v;
-
-    if (! (c_v = getShortsFromInto(v, vec, 2))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t2s(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT3d:v in:aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    double vec[3], *c_v;
-
-    if (! (c_v = getDoublesFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t3d(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT3f:v in:aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    float vec[3], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t3f(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT3i:v in:aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    long vec[3], *c_v;
-
-    if (! (c_v = getLongsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t3i(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT3s:v in:aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    short vec[3], *c_v;
-
-    if (! (c_v = getShortsFromInto(v, vec, 3))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t3s(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT4d: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    double vec[4], *c_v;
-
-    if (! (c_v = getDoublesFromInto(v, vec, 4))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t4d(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT4f: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    float vec[4], *c_v;
-
-    if (! (c_v = getFloatsFromInto(v, vec, 4))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t4f(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT4i: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    long vec[4], *c_v;
-
-    if (! (c_v = getLongsFromInto(v, vec, 4))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t4i(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
-glxT4s: v in: aGLXWindowId
-
-%{  /* NOCONTEXT */
-#ifdef FULL_GLX
-    short vec[4], *c_v;
-
-    if (! (c_v = getShortsFromInto(v, vec, 4))) RETURN(false);
-    SETWIN(aGLXWindowId)
-    t4s(c_v);
-    RETURN (true);
-#endif
-%}
-.
-    ^ false
-!
-
 glxTextinitIn: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -7107,6 +7069,198 @@
     ^ false
 !
 
+glxT2d: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    double vec[2], *c_v;
+
+    if (! (c_v = getDoublesFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t2d(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT2f: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    float vec[2], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t2f(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT2i: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    long vec[2], *c_v;
+
+    if (! (c_v = getLongsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t2i(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT2s: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef GLX
+    short vec[2], *c_v;
+
+    if (! (c_v = getShortsFromInto(v, vec, 2))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t2s(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT3d:v in:aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    double vec[3], *c_v;
+
+    if (! (c_v = getDoublesFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t3d(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT3f:v in:aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    float vec[3], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t3f(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT3i:v in:aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    long vec[3], *c_v;
+
+    if (! (c_v = getLongsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t3i(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT3s:v in:aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    short vec[3], *c_v;
+
+    if (! (c_v = getShortsFromInto(v, vec, 3))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t3s(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT4d: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    double vec[4], *c_v;
+
+    if (! (c_v = getDoublesFromInto(v, vec, 4))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t4d(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT4f: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    float vec[4], *c_v;
+
+    if (! (c_v = getFloatsFromInto(v, vec, 4))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t4f(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT4i: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    long vec[4], *c_v;
+
+    if (! (c_v = getLongsFromInto(v, vec, 4))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t4i(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
+glxT4s: v in: aGLXWindowId
+
+%{  /* NOCONTEXT */
+#ifdef FULL_GLX
+    short vec[4], *c_v;
+
+    if (! (c_v = getShortsFromInto(v, vec, 4))) RETURN(false);
+    SETWIN(aGLXWindowId)
+    t4s(c_v);
+    RETURN (true);
+#endif
+%}
+.
+    ^ false
+!
+
 glxV2d:v in:aGLXWindowId
     "pass a vertex; v must be a vector with 2 doubles; z is taken as 0"
 
@@ -7504,6 +7658,30 @@
 %}
 !
 
+glxPopviewportIn: aGLXWindowId
+    "pops the top viewport off the viewport stack"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    popviewport();
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:58:24 / cg"
+!
+
+glxPushviewportIn: aGLXWindowId
+    "pushes the current viewport on the viewport stack"
+
+%{  /* NOCONTEXT */
+    SETWIN(aGLXWindowId)
+    pushviewport();
+    RETURN (true);
+%}
+
+    "Modified: 19.3.1996 / 18:58:02 / cg"
+!
+
 glxReshapeViewPortIn: aGLXWindowId
 
 %{  /* NOCONTEXT */
@@ -7844,5 +8022,5 @@
 !GLXWorkstation class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview/GLXWorkstation.st,v 1.46 1996-03-08 17:11:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libview/GLXWorkstation.st,v 1.47 1996-03-19 18:00:46 cg Exp $'
 ! !