Need some more UNLIMITEDSTACKS to avoid crashes on Solaris 8 & 9
authorStefan Vogel <sv@exept.de>
Fri, 07 Feb 2003 13:09:30 +0100
changeset 3787 58b1a317d361
parent 3786 8e238ec303d8
child 3788 765f9c81f481
Need some more UNLIMITEDSTACKS to avoid crashes on Solaris 8 & 9
XWorkstation.st
--- a/XWorkstation.st	Fri Jan 24 17:33:12 2003 +0100
+++ b/XWorkstation.st	Fri Feb 07 13:09:30 2003 +0100
@@ -4729,13 +4729,13 @@
 decomposeEventBuffer:aByteArray into:eventArr
     "extracet event fields and place them into an array:
      the fields are:
-	1:      windowID
-	2:      eventType-ID
-	3:      eventTypeSymbol
-
-	4..     args
-    "
-%{ 
+        1:      windowID
+        2:      eventType-ID
+        3:      eventTypeSymbol
+
+        4..     args
+    "
+%{ /* UNLIMITEDSTACK */
 #   define ANYBUTTON   (Button1MotionMask | Button2MotionMask | Button3MotionMask)
 
     OBJ eB;
@@ -4773,392 +4773,392 @@
     eB = aByteArray;
 
     if (__isByteArray(eB)) {
-	ev = (XEvent *)(__ByteArrayInstPtr(eB)->ba_element);
+        ev = (XEvent *)(__ByteArrayInstPtr(eB)->ba_element);
     } else {
-	fprintf(stderr, "XWorkstation: no/bad eventBuffer [%d]\n", __LINE__);
-	RETURN (false);
+        fprintf(stderr, "XWorkstation: no/bad eventBuffer [%d]\n", __LINE__);
+        RETURN (false);
     }
     if (!__isArray(eventArr)) {
-	fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
-	RETURN (false);
+        fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
+        RETURN (false);
     }
     if (__arraySize(eventArr) < 11) {
-	fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
-	RETURN (false);
+        fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
+        RETURN (false);
     }
 
     if (((t = __INST(lastId)) != nil)
-	 && __isExternalAddress(t)
-	 && (__WindowVal(t) == ae->window)) {
-	windowID = t;
+         && __isExternalAddress(t)
+         && (__WindowVal(t) == ae->window)) {
+        windowID = t;
     } else {
-	windowID = __MKEXTERNALADDRESS(ae->window);
+        windowID = __MKEXTERNALADDRESS(ae->window);
     }
 
     __ArrayInstPtr(eventArr)->a_element[0] = windowID; __STORE(eventArr, windowID);
     __ArrayInstPtr(eventArr)->a_element[1] = __MKSMALLINT(ev->type);
 
     switch (ev->type) {
-	case KeyRelease:
-	    sym = @symbol(keyRelease:key:code:state:x:y:rootX:rootY:time:);
-	    goto keyPressAndRelease;
-
-	case KeyPress:
-	    sym = @symbol(keyPress:key:code:state:x:y:rootX:rootY:time:);
-	    /* FALL INTO */
-
-	keyPressAndRelease:
-	    arg = nil;
-	    nchars = XLookupString(ke, (char *)buffer, sizeof(buffer), &keySym, NULL);
-	    if (nchars 
-	     && (((buffer[0] >= ' ') && (buffer[0] <= '~'))
-		 || (buffer[0] >= 0x80))) {
-		arg = _MKCHARACTER(buffer[0])/* *_CharacterTable[buffer[0]] */;
-		keySymString = NULL;
-	    } else {
-		keySymString = XKeysymToString(keySym);
-		if (keySymString) {
-		    arg = __MKSTRING(keySymString);
-		} else {
-		    arg = nil;
-		}
-	    }
+        case KeyRelease:
+            sym = @symbol(keyRelease:key:code:state:x:y:rootX:rootY:time:);
+            goto keyPressAndRelease;
+
+        case KeyPress:
+            sym = @symbol(keyPress:key:code:state:x:y:rootX:rootY:time:);
+            /* FALL INTO */
+
+        keyPressAndRelease:
+            arg = nil;
+            nchars = XLookupString(ke, (char *)buffer, sizeof(buffer), &keySym, NULL);
+            if (nchars 
+             && (((buffer[0] >= ' ') && (buffer[0] <= '~'))
+                 || (buffer[0] >= 0x80))) {
+                arg = _MKCHARACTER(buffer[0])/* *_CharacterTable[buffer[0]] */;
+                keySymString = NULL;
+            } else {
+                keySymString = XKeysymToString(keySym);
+                if (keySymString) {
+                    arg = __MKSTRING(keySymString);
+                } else {
+                    arg = nil;
+                }
+            }
 
 #ifdef IGNORE_UNKNOWN_KEYCODES
-	    if (arg == nil) {
-		/* happens sometimes (alt-graph on sun has no keysym) */
-		RETURN (false);
-	    }
-#endif
-	    __ArrayInstPtr(eventArr)->a_element[2] = sym;
-
-	    __ArrayInstPtr(eventArr)->a_element[3] = arg; __STORE(eventArr, arg);
-	    __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(ke->keycode); __STORE(eventArr, t);
-	    __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ke->state);
-	    __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ke->x);
-	    __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ke->y);
-	    __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(ke->x_root);
-	    __ArrayInstPtr(eventArr)->a_element[9] = __mkSmallInteger(ke->y_root);
-	    __ArrayInstPtr(eventArr)->a_element[10] = t = __MKUINT(ke->time); __STORE(eventArr, t);
-	    RETURN (true);
-
-	case ButtonPress:
-	    sym = @symbol(buttonPress:button:state:x:y:rootX:rootY:time:);
-	    goto buttonPressAndRelease;
-
-	case ButtonRelease:
-	    sym = @symbol(buttonRelease:button:state:x:y:rootX:rootY:time:);
-	    /* fall into */
-
-	buttonPressAndRelease:
-	    __ArrayInstPtr(eventArr)->a_element[2] = sym;
-	    __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(be->button);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ke->state);
-	    __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(be->x);
-	    __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(be->y);
-	    __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(be->x_root);
-	    __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(be->y_root);
-	    __ArrayInstPtr(eventArr)->a_element[9] = t = __MKUINT(be->time); __STORE(eventArr, t);
-	    RETURN (true);
-
-	case MotionNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(buttonMotion:state:x:y:rootX:rootY:time:);
-
-	    __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(me->state);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(me->x);
-	    __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(me->y);
-	    __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(me->x_root);
-	    __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(me->y_root);
-	    __ArrayInstPtr(eventArr)->a_element[8] = t = __MKUINT(me->time); __STORE(eventArr, t);
-	    RETURN (true);
-
-	case FocusIn:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(focusIn:mode:detail:);
-	    goto focusInOut;
-
-	case FocusOut:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(focusOut:mode:detail:);
-	    /* fall into */
-
-	focusInOut:
-	    __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(fe->mode);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(fe->detail);
-	    RETURN (true);
-
-
-	case EnterNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(pointerEnter:x:y:rootX:rootY:state:mode:detail:time:);
-	    goto enterLeave;
-
-	case LeaveNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(pointerLeave:x:y:rootX:rootY:state:mode:detail:time:);
-	    /* fall into */
-
-	enterLeave:
-	    __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ele->x);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ele->y);
-	    __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ele->x_root);
-	    __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ele->y_root);
-	    __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ele->state);
-	    __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(ele->mode);
-	    __ArrayInstPtr(eventArr)->a_element[9] = __mkSmallInteger(ele->detail);
-	    __ArrayInstPtr(eventArr)->a_element[10] = t = __MKUINT(ele->time); __STORE(eventArr, t);
-	    RETURN (true);
-
-	case Expose:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(expose:x:y:width:height:count:);
-	    goto expose;
-
-	case GraphicsExpose:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(graphicsExpose:x:y:width:height:count:);
-	    /* fall into */
-
-	expose:
-	    __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ee->x);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ee->y);
-	    __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ee->width);
-	    __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ee->height);
-	    __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ee->count);
-	    RETURN (true);
-
-	case NoExpose:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(noExposeView:);
-	    RETURN (true);
-
-	case VisibilityNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(visibilityNotify:state:);
-	    switch (ve->state) {
-		case VisibilityUnobscured:
-		    __ArrayInstPtr(eventArr)->a_element[3] = @symbol(unobscured);
-		    break;
-		case VisibilityPartiallyObscured:
-		    __ArrayInstPtr(eventArr)->a_element[3] = @symbol(partiallyObscured);
-		    break;
-		case VisibilityFullyObscured:
-		    __ArrayInstPtr(eventArr)->a_element[3] = @symbol(fullyObscured);
-		    break;
-		default:
-		    __ArrayInstPtr(eventArr)->a_element[3] = __MKSMALLINT(ve->state);
-		    break;
-	    }
-	    RETURN (true);
-
-	case CreateNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(createWindow:x:y:width:height:);
-	    __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(cre->x);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(cre->y);
-	    __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(cre->width);
-	    __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(cre->height);
-	    RETURN (true);
-
-	case DestroyNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(destroyedView:);
-	    RETURN (true);
-
-	case UnmapNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(unmappedView:);
-	    RETURN (true);
-
-	case MapNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappedView:);
-	    RETURN (true);
-
-	case ConfigureNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(configure:x:y:width:height:above:);
-	    __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ce->x);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ce->y);
-	    __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ce->width);
-	    __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ce->height);
-	    __ArrayInstPtr(eventArr)->a_element[7] = nil;
-	    if (ce->above != None) {
-		__ArrayInstPtr(eventArr)->a_element[7] = t = __MKEXTERNALADDRESS(ce->above); __STORE(eventArr, t);
-	    }
-	    RETURN (true);
-
-	case GravityNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(gravityNotify:x:y:);
-	    __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(gre->x);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(gre->y);
-	    RETURN (true);
-	    break;
-
-	case ResizeRequest:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(resizeRequest:width:height:);
-	    __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(rr->width);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(rr->height);
-	    RETURN (true);
-	    break;
-
-	case ConfigureRequest:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(configureRequest:x:y:width:height:above:detail:);
-	    __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(cr->x);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(cr->y);
-	    __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(cr->width);
-	    __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(cr->height);
-	    __ArrayInstPtr(eventArr)->a_element[7] = nil;
-	    if (cr->above != None) {
-		__ArrayInstPtr(eventArr)->a_element[7] = t = __MKEXTERNALADDRESS(cr->above); __STORE(eventArr, t);
-	    }
-	    switch (cr->detail) {
-		case Above:
-		    __ArrayInstPtr(eventArr)->a_element[8] = @symbol(above);
-		    break;
-		case Below:
-		    __ArrayInstPtr(eventArr)->a_element[8] = @symbol(below);
-		    break;
-		case TopIf:
-		    __ArrayInstPtr(eventArr)->a_element[8] = @symbol(topIf);
-		    break;
-		case BottomIf:
-		    __ArrayInstPtr(eventArr)->a_element[8] = @symbol(bottomIf);
-		    break;
-		case Opposite:
-		    __ArrayInstPtr(eventArr)->a_element[8] = @symbol(opposite);
-		    break;
-		default:
-		    __ArrayInstPtr(eventArr)->a_element[8] = __MKSMALLINT(cr->detail);
-		    break;
-	    }
-	    RETURN (true);
-	    break;
-
-	case CirculateNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(circulateNotify:place:);
-	    goto circulate;
-
-	case CirculateRequest:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(circulateRequest:place:);
-	    /* fall into */
-	circulate:
-	    switch (cie->place) {
-		case PlaceOnTop:
-		    __ArrayInstPtr(eventArr)->a_element[3] = @symbol(placeOnTop);
-		    break;
-		case PlaceOnBottom:
-		    __ArrayInstPtr(eventArr)->a_element[3] = @symbol(placeOnBottom);
-		    break;
-		default:
-		    __ArrayInstPtr(eventArr)->a_element[3] = __MKSMALLINT(cie->place);
-		    break;
-	    }
-	    RETURN (true);
-	    break;
-
-	case PropertyNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(propertyChange:atom:state:time:);
-	    __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(pe->atom);
-	    switch (pe->state) {
-		case PropertyNewValue:
-		    __ArrayInstPtr(eventArr)->a_element[4] = @symbol(newValue);
-		    break;
-		case PropertyDelete:
-		    __ArrayInstPtr(eventArr)->a_element[4] = @symbol(deleted);
-		    break;
-		default:
-		    __ArrayInstPtr(eventArr)->a_element[4] = __MKSMALLINT(pe->state);
-		    break;
-	    }
-	    __ArrayInstPtr(eventArr)->a_element[5] = t = __MKUINT(pe->time); __STORE(eventArr, t);
-	    RETURN (true);
-	    break;
-
-	case SelectionClear:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionClear:atom:time:);
-	    __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(sce->selection); 
-	    __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(sce->time);         __STORE(eventArr, t);
-	    RETURN (true);
-	    break;
-
-	case SelectionRequest:
-	    /*
-	     * someone wants the selection
-	     */
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionRequest:requestor:selection:target:property:time:);
-	    __ArrayInstPtr(eventArr)->a_element[3] = t = __MKEXTERNALADDRESS(ev->xselectionrequest.requestor); __STORE(eventArr, t);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __MKATOMOBJ(ev->xselectionrequest.selection); 
-	    __ArrayInstPtr(eventArr)->a_element[5] = __MKATOMOBJ(ev->xselectionrequest.target);    
-	    __ArrayInstPtr(eventArr)->a_element[6] = __MKATOMOBJ(ev->xselectionrequest.property);  
-	    __ArrayInstPtr(eventArr)->a_element[7] = t = __MKUINT(ev->xselectionrequest.time);         __STORE(eventArr, t);
-	    RETURN (true);
-
-	case SelectionNotify:
-	    /*
-	     * returned selection value (answer from SelectionRequest)
-	     */
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionNotify:selection:target:property:requestor:time:);
-	    __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(ev->xselection.selection); 
-	    __ArrayInstPtr(eventArr)->a_element[4] = __MKATOMOBJ(ev->xselection.target);    
-	    __ArrayInstPtr(eventArr)->a_element[5] = __MKATOMOBJ(ev->xselection.property);  
-	    __ArrayInstPtr(eventArr)->a_element[6] = t = __MKEXTERNALADDRESS(ev->xselection.requestor); __STORE(eventArr, t);
-	    __ArrayInstPtr(eventArr)->a_element[7] = t = __MKUINT(ev->xselection.time); __STORE(eventArr, t);
-
-	    RETURN (true);
-
-	case ColormapNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(colormapNotify:state:);
-	    __ArrayInstPtr(eventArr)->a_element[3] = cme->state == ColormapInstalled ? true : false;
-	    RETURN (true);
-	    break;
-
-	case ClientMessage:
-	    if (ev->xclient.message_type == (int) __AtomVal(__INST(protocolsAtom))) {
-		if ((ev->xclient.data.l[0] == (int) __AtomVal(__INST(quitAppAtom)))
-		 || (ev->xclient.data.l[0] == (int) __AtomVal(__INST(deleteWindowAtom)))) {
-		    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(terminateView:);
-		    RETURN (true);
-		}
-		if (ev->xclient.data.l[0] == (int) __AtomVal(__INST(saveYourselfAtom))) {
-		    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(saveAndTerminateView:);
-		    RETURN (true);
-		}
-	    }
-	    /*
-	     * any other client message
-	     */
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(clientMessage:type:format:data:);
-	    __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(ev->xclient.message_type);
-	    __ArrayInstPtr(eventArr)->a_element[4] = __MKSMALLINT(ev->xclient.format);
-	    __ArrayInstPtr(eventArr)->a_element[5] = t = __MKBYTEARRAY(ev->xclient.data, sizeof(ev->xclient.data)); __STORE(eventArr, t);
-	    RETURN (true);
-	    break;
-
-	case MappingNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappingNotify:request:event:);
-	    switch(mape->request) {
-		case MappingModifier:
-		    arg = @symbol(mappingModifier);
-		    break;
-		case MappingKeyboard:
-		    arg = @symbol(mappingKeyboard);
-		    break;
-		case MappingPointer:
-		    arg = @symbol(mappingPointer);
-		    break;
-		default:
-		    arg = __MKSMALLINT(mape->request);
-		    break;
-	    }
-	    __ArrayInstPtr(eventArr)->a_element[3] = arg;
-	    __ArrayInstPtr(eventArr)->a_element[4] = t = __MKBYTEARRAY(ev, sizeof(*mape));
-	    __STORE(eventArr, t);
-	    RETURN (true);
-
-	case KeymapNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(keymapNotify:);
-	    RETURN (true);
-	    break;
-
-	case MapRequest:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mapRequest:);
-	    RETURN (true);
-
-	case ReparentNotify:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(reparentedView:);
-	    break;
-
-	default:
-	    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(unknownX11Event);
-	    break;
+            if (arg == nil) {
+                /* happens sometimes (alt-graph on sun has no keysym) */
+                RETURN (false);
+            }
+#endif
+            __ArrayInstPtr(eventArr)->a_element[2] = sym;
+
+            __ArrayInstPtr(eventArr)->a_element[3] = arg; __STORE(eventArr, arg);
+            __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(ke->keycode); __STORE(eventArr, t);
+            __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ke->state);
+            __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ke->x);
+            __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ke->y);
+            __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(ke->x_root);
+            __ArrayInstPtr(eventArr)->a_element[9] = __mkSmallInteger(ke->y_root);
+            __ArrayInstPtr(eventArr)->a_element[10] = t = __MKUINT(ke->time); __STORE(eventArr, t);
+            RETURN (true);
+
+        case ButtonPress:
+            sym = @symbol(buttonPress:button:state:x:y:rootX:rootY:time:);
+            goto buttonPressAndRelease;
+
+        case ButtonRelease:
+            sym = @symbol(buttonRelease:button:state:x:y:rootX:rootY:time:);
+            /* fall into */
+
+        buttonPressAndRelease:
+            __ArrayInstPtr(eventArr)->a_element[2] = sym;
+            __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(be->button);
+            __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ke->state);
+            __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(be->x);
+            __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(be->y);
+            __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(be->x_root);
+            __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(be->y_root);
+            __ArrayInstPtr(eventArr)->a_element[9] = t = __MKUINT(be->time); __STORE(eventArr, t);
+            RETURN (true);
+
+        case MotionNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(buttonMotion:state:x:y:rootX:rootY:time:);
+
+            __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(me->state);
+            __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(me->x);
+            __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(me->y);
+            __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(me->x_root);
+            __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(me->y_root);
+            __ArrayInstPtr(eventArr)->a_element[8] = t = __MKUINT(me->time); __STORE(eventArr, t);
+            RETURN (true);
+
+        case FocusIn:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(focusIn:mode:detail:);
+            goto focusInOut;
+
+        case FocusOut:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(focusOut:mode:detail:);
+            /* fall into */
+
+        focusInOut:
+            __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(fe->mode);
+            __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(fe->detail);
+            RETURN (true);
+
+
+        case EnterNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(pointerEnter:x:y:rootX:rootY:state:mode:detail:time:);
+            goto enterLeave;
+
+        case LeaveNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(pointerLeave:x:y:rootX:rootY:state:mode:detail:time:);
+            /* fall into */
+
+        enterLeave:
+            __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ele->x);
+            __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ele->y);
+            __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ele->x_root);
+            __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ele->y_root);
+            __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ele->state);
+            __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(ele->mode);
+            __ArrayInstPtr(eventArr)->a_element[9] = __mkSmallInteger(ele->detail);
+            __ArrayInstPtr(eventArr)->a_element[10] = t = __MKUINT(ele->time); __STORE(eventArr, t);
+            RETURN (true);
+
+        case Expose:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(expose:x:y:width:height:count:);
+            goto expose;
+
+        case GraphicsExpose:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(graphicsExpose:x:y:width:height:count:);
+            /* fall into */
+
+        expose:
+            __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ee->x);
+            __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ee->y);
+            __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ee->width);
+            __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ee->height);
+            __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ee->count);
+            RETURN (true);
+
+        case NoExpose:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(noExposeView:);
+            RETURN (true);
+
+        case VisibilityNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(visibilityNotify:state:);
+            switch (ve->state) {
+                case VisibilityUnobscured:
+                    __ArrayInstPtr(eventArr)->a_element[3] = @symbol(unobscured);
+                    break;
+                case VisibilityPartiallyObscured:
+                    __ArrayInstPtr(eventArr)->a_element[3] = @symbol(partiallyObscured);
+                    break;
+                case VisibilityFullyObscured:
+                    __ArrayInstPtr(eventArr)->a_element[3] = @symbol(fullyObscured);
+                    break;
+                default:
+                    __ArrayInstPtr(eventArr)->a_element[3] = __MKSMALLINT(ve->state);
+                    break;
+            }
+            RETURN (true);
+
+        case CreateNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(createWindow:x:y:width:height:);
+            __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(cre->x);
+            __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(cre->y);
+            __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(cre->width);
+            __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(cre->height);
+            RETURN (true);
+
+        case DestroyNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(destroyedView:);
+            RETURN (true);
+
+        case UnmapNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(unmappedView:);
+            RETURN (true);
+
+        case MapNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappedView:);
+            RETURN (true);
+
+        case ConfigureNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(configure:x:y:width:height:above:);
+            __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ce->x);
+            __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ce->y);
+            __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ce->width);
+            __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ce->height);
+            __ArrayInstPtr(eventArr)->a_element[7] = nil;
+            if (ce->above != None) {
+                __ArrayInstPtr(eventArr)->a_element[7] = t = __MKEXTERNALADDRESS(ce->above); __STORE(eventArr, t);
+            }
+            RETURN (true);
+
+        case GravityNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(gravityNotify:x:y:);
+            __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(gre->x);
+            __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(gre->y);
+            RETURN (true);
+            break;
+
+        case ResizeRequest:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(resizeRequest:width:height:);
+            __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(rr->width);
+            __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(rr->height);
+            RETURN (true);
+            break;
+
+        case ConfigureRequest:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(configureRequest:x:y:width:height:above:detail:);
+            __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(cr->x);
+            __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(cr->y);
+            __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(cr->width);
+            __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(cr->height);
+            __ArrayInstPtr(eventArr)->a_element[7] = nil;
+            if (cr->above != None) {
+                __ArrayInstPtr(eventArr)->a_element[7] = t = __MKEXTERNALADDRESS(cr->above); __STORE(eventArr, t);
+            }
+            switch (cr->detail) {
+                case Above:
+                    __ArrayInstPtr(eventArr)->a_element[8] = @symbol(above);
+                    break;
+                case Below:
+                    __ArrayInstPtr(eventArr)->a_element[8] = @symbol(below);
+                    break;
+                case TopIf:
+                    __ArrayInstPtr(eventArr)->a_element[8] = @symbol(topIf);
+                    break;
+                case BottomIf:
+                    __ArrayInstPtr(eventArr)->a_element[8] = @symbol(bottomIf);
+                    break;
+                case Opposite:
+                    __ArrayInstPtr(eventArr)->a_element[8] = @symbol(opposite);
+                    break;
+                default:
+                    __ArrayInstPtr(eventArr)->a_element[8] = __MKSMALLINT(cr->detail);
+                    break;
+            }
+            RETURN (true);
+            break;
+
+        case CirculateNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(circulateNotify:place:);
+            goto circulate;
+
+        case CirculateRequest:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(circulateRequest:place:);
+            /* fall into */
+        circulate:
+            switch (cie->place) {
+                case PlaceOnTop:
+                    __ArrayInstPtr(eventArr)->a_element[3] = @symbol(placeOnTop);
+                    break;
+                case PlaceOnBottom:
+                    __ArrayInstPtr(eventArr)->a_element[3] = @symbol(placeOnBottom);
+                    break;
+                default:
+                    __ArrayInstPtr(eventArr)->a_element[3] = __MKSMALLINT(cie->place);
+                    break;
+            }
+            RETURN (true);
+            break;
+
+        case PropertyNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(propertyChange:atom:state:time:);
+            __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(pe->atom);
+            switch (pe->state) {
+                case PropertyNewValue:
+                    __ArrayInstPtr(eventArr)->a_element[4] = @symbol(newValue);
+                    break;
+                case PropertyDelete:
+                    __ArrayInstPtr(eventArr)->a_element[4] = @symbol(deleted);
+                    break;
+                default:
+                    __ArrayInstPtr(eventArr)->a_element[4] = __MKSMALLINT(pe->state);
+                    break;
+            }
+            __ArrayInstPtr(eventArr)->a_element[5] = t = __MKUINT(pe->time); __STORE(eventArr, t);
+            RETURN (true);
+            break;
+
+        case SelectionClear:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionClear:atom:time:);
+            __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(sce->selection); 
+            __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(sce->time);         __STORE(eventArr, t);
+            RETURN (true);
+            break;
+
+        case SelectionRequest:
+            /*
+             * someone wants the selection
+             */
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionRequest:requestor:selection:target:property:time:);
+            __ArrayInstPtr(eventArr)->a_element[3] = t = __MKEXTERNALADDRESS(ev->xselectionrequest.requestor); __STORE(eventArr, t);
+            __ArrayInstPtr(eventArr)->a_element[4] = __MKATOMOBJ(ev->xselectionrequest.selection); 
+            __ArrayInstPtr(eventArr)->a_element[5] = __MKATOMOBJ(ev->xselectionrequest.target);    
+            __ArrayInstPtr(eventArr)->a_element[6] = __MKATOMOBJ(ev->xselectionrequest.property);  
+            __ArrayInstPtr(eventArr)->a_element[7] = t = __MKUINT(ev->xselectionrequest.time);         __STORE(eventArr, t);
+            RETURN (true);
+
+        case SelectionNotify:
+            /*
+             * returned selection value (answer from SelectionRequest)
+             */
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionNotify:selection:target:property:requestor:time:);
+            __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(ev->xselection.selection); 
+            __ArrayInstPtr(eventArr)->a_element[4] = __MKATOMOBJ(ev->xselection.target);    
+            __ArrayInstPtr(eventArr)->a_element[5] = __MKATOMOBJ(ev->xselection.property);  
+            __ArrayInstPtr(eventArr)->a_element[6] = t = __MKEXTERNALADDRESS(ev->xselection.requestor); __STORE(eventArr, t);
+            __ArrayInstPtr(eventArr)->a_element[7] = t = __MKUINT(ev->xselection.time); __STORE(eventArr, t);
+
+            RETURN (true);
+
+        case ColormapNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(colormapNotify:state:);
+            __ArrayInstPtr(eventArr)->a_element[3] = cme->state == ColormapInstalled ? true : false;
+            RETURN (true);
+            break;
+
+        case ClientMessage:
+            if (ev->xclient.message_type == (int) __AtomVal(__INST(protocolsAtom))) {
+                if ((ev->xclient.data.l[0] == (int) __AtomVal(__INST(quitAppAtom)))
+                 || (ev->xclient.data.l[0] == (int) __AtomVal(__INST(deleteWindowAtom)))) {
+                    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(terminateView:);
+                    RETURN (true);
+                }
+                if (ev->xclient.data.l[0] == (int) __AtomVal(__INST(saveYourselfAtom))) {
+                    __ArrayInstPtr(eventArr)->a_element[2] = @symbol(saveAndTerminateView:);
+                    RETURN (true);
+                }
+            }
+            /*
+             * any other client message
+             */
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(clientMessage:type:format:data:);
+            __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(ev->xclient.message_type);
+            __ArrayInstPtr(eventArr)->a_element[4] = __MKSMALLINT(ev->xclient.format);
+            __ArrayInstPtr(eventArr)->a_element[5] = t = __MKBYTEARRAY(ev->xclient.data, sizeof(ev->xclient.data)); __STORE(eventArr, t);
+            RETURN (true);
+            break;
+
+        case MappingNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappingNotify:request:event:);
+            switch(mape->request) {
+                case MappingModifier:
+                    arg = @symbol(mappingModifier);
+                    break;
+                case MappingKeyboard:
+                    arg = @symbol(mappingKeyboard);
+                    break;
+                case MappingPointer:
+                    arg = @symbol(mappingPointer);
+                    break;
+                default:
+                    arg = __MKSMALLINT(mape->request);
+                    break;
+            }
+            __ArrayInstPtr(eventArr)->a_element[3] = arg;
+            __ArrayInstPtr(eventArr)->a_element[4] = t = __MKBYTEARRAY(ev, sizeof(*mape));
+            __STORE(eventArr, t);
+            RETURN (true);
+
+        case KeymapNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(keymapNotify:);
+            RETURN (true);
+            break;
+
+        case MapRequest:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mapRequest:);
+            RETURN (true);
+
+        case ReparentNotify:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(reparentedView:);
+            break;
+
+        default:
+            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(unknownX11Event);
+            break;
     }
 #undef ae
 #undef ee
@@ -5315,24 +5315,24 @@
      view are flushed."
 
     <context: #return>
-%{
+%{ /* UNLIMITEDSTACK */
 
     XEvent ev;
     Window win;
 
     if (ISCONNECTED
      && __isSmallInteger(aMask)) {
-	Display *dpy = myDpy;
-
-	ENTER_XLIB();
-	if (__isExternalAddress(aWindowIdOrNil)) {
-	    win = __WindowVal(aWindowIdOrNil);
-	    while (XCheckWindowEvent(dpy, win, __intVal(aMask), &ev)) ;;
-	} else {
-	    while (XCheckMaskEvent(dpy, __intVal(aMask), &ev)) ;;
-	}
-	LEAVE_XLIB();
-	RETURN ( self );
+        Display *dpy = myDpy;
+
+        ENTER_XLIB();
+        if (__isExternalAddress(aWindowIdOrNil)) {
+            win = __WindowVal(aWindowIdOrNil);
+            while (XCheckWindowEvent(dpy, win, __intVal(aMask), &ev)) ;;
+        } else {
+            while (XCheckMaskEvent(dpy, __intVal(aMask), &ev)) ;;
+        }
+        LEAVE_XLIB();
+        RETURN ( self );
     }
 %}.
     self primitiveFailedOrClosedConnection
@@ -8476,15 +8476,15 @@
 "/ 'closing' errorPrintCR.
 "/ thisContext fullPrintAll.
 
-%{
+%{ /* UNLIMITEDSTACK */   /* calls XSync()! */
     if (ISCONNECTED) {
-	Display *dpy = myDpy;
-
-
-	__INST(displayId) = nil;
-	ENTER_XLIB();
-	XCloseDisplay(dpy);
-	LEAVE_XLIB();
+        Display *dpy = myDpy;
+
+
+        __INST(displayId) = nil;
+        ENTER_XLIB();
+        XCloseDisplay(dpy);
+        LEAVE_XLIB();
     }
 %}
 !
@@ -11792,7 +11792,7 @@
 !XWorkstation class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.416 2002-12-18 09:22:39 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.417 2003-02-07 12:09:30 stefan Exp $'
 ! !
 
 XWorkstation initialize!