XtStackFree (keySymName, keySymNamebuf);
static String ParseKeySym(str, closure, event,error)    register String str;    Opaque closure;    EventPtr event;    Boolean* error;{    char *start;    char keySymName[100];    ScanWhitespace(str);    if (*str == '\\') {	str++;	keySymName[0] = *str;	if (*str != '\0' && !IsNewline(*str)) str++;	keySymName[1] = '\0';	event->event.eventCode = StringToKeySym(keySymName, error);	event->event.eventCodeMask = ~0L;    } else if (*str == ',' || *str == ':' ||             /* allow leftparen to be single char symbol,              * for backwards compatibility              */             (*str == '(' && *(str+1) >= '0' && *(str+1) <= '9')) {	/* no detail */	event->event.eventCode = 0L;        event->event.eventCodeMask = 0L;    } else {	start = str;	while (		*str != ','		&& *str != ':'		&& *str != ' '		&& *str != '\t'                && !IsNewline(*str)                && (*str != '(' || *(str+1) <= '0' || *(str+1) >= '9')		&& *str != '\0') str++;	(void) memmove(keySymName, start, str-start);	keySymName[str-start] = '\0';	event->event.eventCode = StringToKeySym(keySymName, error);	event->event.eventCodeMask = ~0L;    }    if (*error) {	if (keySymName[0] == '<') {	    /* special case for common error */	    XtWarningMsg(XtNtranslationParseError, "missingComma",			 XtCXtToolkitError,		     "... possibly due to missing ',' in event sequence.",		     (String*)NULL, (Cardinal*)NULL);	}	return PanicModeRecovery(str);    }    if (event->event.standard)	event->event.matchEvent = _XtMatchUsingStandardMods;    else 	event->event.matchEvent = _XtMatchUsingDontCareMods;    return str;}