Exemple #1
0
/*
 * Function:
 *	XawAsciiSaveAsFile
 *
 * Arguments:
 *	w    - AsciiSrc widget
 *	name - name of the file to save this file into
 *
 * Description:
 *	Save the current buffer as a file.
 *
 * Returns:
 *	True if the save was sucessful
 */
Bool
XawAsciiSaveAsFile(Widget w, _Xconst char *name)
{
    AsciiSrcObject src = (AsciiSrcObject)w;
    Bool ret;

    /* If the src is really a multi, call the multi save */

    if (XtIsSubclass( w, multiSrcObjectClass))
	return (_XawMultiSaveAsFile(w, name));

    else if (!XtIsSubclass(w, asciiSrcObjectClass))
	XtErrorMsg("bad argument", "asciiSource", "XawError",
		   "XawAsciiSaveAsFile's 1st parameter must be an "
		   "asciiSrc or multiSrc.",
		   NULL, NULL);

    if (src->ascii_src.type == XawAsciiFile)
	ret = WritePiecesToFile(src, (String)name);
    else {
	String string = StorePiecesInString(src); 

	ret = WriteToFile(string, (String)name, src->ascii_src.length);
	XtFree(string);
    }

    return (ret);
}
void _XtAllocError(
    String type)
{
    Cardinal num_params = 1;
    if (type == NULL) type = "local memory allocation";
    XtErrorMsg("allocError", type, XtCXtToolkitError,
	       "Cannot perform %s", &type, &num_params);
}
Exemple #3
0
static void
LoadPieces(AsciiSrcObject src, FILE *file, char *string)
{
    char *ptr;
    Piece *piece = NULL;
    XawTextPosition left;

    if (string == NULL) {
	if (src->ascii_src.type == XawAsciiFile) {
	    if (src->ascii_src.length != 0) {
		int len;

		left = 0;
		fseek(file, 0, 0);
		while (left < src->ascii_src.length) {
		    ptr = XtMalloc((unsigned)src->ascii_src.piece_size);
		    if ((len = fread(ptr, (Size_t)sizeof(unsigned char),
				     (Size_t)src->ascii_src.piece_size, file)) < 0)
			XtErrorMsg("readError", "asciiSourceCreate", "XawError",
				   "fread returned error.", NULL, NULL);
		    piece = AllocNewPiece(src, piece);
		    piece->text = ptr;
		    piece->used = XawMin(len, src->ascii_src.piece_size);
		    left += piece->used;
		}
	    }
	    else {
		piece = AllocNewPiece(src, NULL);
		piece->text = XtMalloc((unsigned)src->ascii_src.piece_size);
		piece->used = 0;
	    }
	    return;
	}
	else
	    string = src->ascii_src.string;
    }

    if (src->ascii_src.use_string_in_place) {
	piece = AllocNewPiece(src, piece);
	piece->used = XawMin(src->ascii_src.length, src->ascii_src.piece_size);
	piece->text = src->ascii_src.string;
	return;
    }

    ptr = string;
    left = src->ascii_src.length;
    do {
	piece = AllocNewPiece(src, piece);

	piece->text = XtMalloc((unsigned)src->ascii_src.piece_size);
	piece->used = XawMin(left, src->ascii_src.piece_size);
	if (piece->used != 0)
	    memcpy(piece->text, ptr, (unsigned)piece->used);

	left -= piece->used;
	ptr += piece->used;
    } while (left > 0);
}
Exemple #4
0
/*
 * Function:
 *	XawAsciiSave
 *
 * Parameters:
 *	w - asciiSrc Widget
 *
 * Description:
 *	Saves all the pieces into a file or string as required.
 *
 * Returns:
 *	True if the save was successful
 */
Bool
XawAsciiSave(Widget w)
{
    AsciiSrcObject src = (AsciiSrcObject)w;

    /* If the src is really a multi, call the multi save */
    if (XtIsSubclass(w, multiSrcObjectClass ))
	return (_XawMultiSave(w));

    else if (!XtIsSubclass(w, asciiSrcObjectClass))
	XtErrorMsg("bad argument", "asciiSource", "XawError",
		   "XawAsciiSave's parameter must be an asciiSrc or multiSrc.",
		   NULL, NULL);

    /*
     * If using the string in place then there is no need to play games
     * to get the internal info into a readable string.
     */
    if (src->ascii_src.use_string_in_place) 
	return (True);

    if (src->ascii_src.type == XawAsciiFile) {
#ifdef OLDXAW
	if (!src->ascii_src.changes)
#else
	if (!src->text_src.changed) 		/* No changes to save */
#endif
	    return (True);

	if (WritePiecesToFile(src, src->ascii_src.string) == False)
	    return (False);
    }
    else  {
	if (src->ascii_src.allocated_string == True)
	    XtFree(src->ascii_src.string);
	else
	    src->ascii_src.allocated_string = True;

	src->ascii_src.string = StorePiecesInString(src);
    }
#ifdef OLDXAW
    src->ascii_src.changes = False;
#else
    src->text_src.changed = False;
#endif

    return (True);
}
Exemple #5
0
/*
 * Internal routine; must be called only after XtIsWidget returns false
 */
Widget _XtWindowedAncestor(
    register Widget object)
{
    Widget obj = object;
    for (object = XtParent(object); object && !XtIsWidget(object);)
        object = XtParent(object);

    if (object == NULL) {
        String params = XtName(obj);
        Cardinal num_params = 1;
        XtErrorMsg("noWidgetAncestor", "windowedAncestor", XtCXtToolkitError,
                   "Object \"%s\" does not have windowed ancestor",
                   &params, &num_params);
    }

    return object;
}
Exemple #6
0
void _XtCopyToArg(
    char* src,
    XtArgVal *dst,
    register unsigned int size)
{
    if (!*dst) {
#ifdef GETVALUES_BUG
	/* old GetValues semantics (storing directly into arglists) are bad,
	 * but preserve for compatibility as long as arglist contains NULL.
	 */
	union {
	    long	longval;
#ifdef LONG64
	    int		intval;
#endif
	    short	shortval;
	    char	charval;
	    char*	charptr;
	    XtPointer	ptr;
	} u;
	if (size <= sizeof(XtArgVal)) {
	    (void) memmove((char*)&u, (char*)src, (int)size );
	    if	    (size == sizeof(long)) 	*dst = (XtArgVal)u.longval;
#ifdef LONG64
	    else if (size == sizeof(int))	*dst = (XtArgVal)u.intval;
#endif
	    else if (size == sizeof(short))	*dst = (XtArgVal)u.shortval;
	    else if (size == sizeof(char))	*dst = (XtArgVal)u.charval;
	    else if (size == sizeof(char*))	*dst = (XtArgVal)u.charptr;
	    else if (size == sizeof(XtPointer))	*dst = (XtArgVal)u.ptr;
	    else (void) memmove((char*)dst, (char*)src, (int)size );
	}
	else
	    (void) memmove((char*)dst, (char*)src, (int)size );
#else
	XtErrorMsg("invalidGetValues", "xtGetValues", XtCXtToolkitError,
	    "NULL ArgVal in XtGetValues", (String*) NULL, (Cardinal*) NULL);
#endif
    }
    else {
	/* proper GetValues semantics: argval is pointer to destination */
	(void) memmove((char*)*dst, (char*)src, (int)size );
    }
} /* _XtCopyToArg */
Exemple #7
0
void help_win(Widget widget, XtPointer client_data, XtPointer call_data)
{
    Widget tL1, vpane, buttonbox;
    Widget close, txt;
    int one = 1;
    char *argv[2];
    Display * dpy;

    if (help_context != NULL) return;
    argv[0] = "xsuprem";
    argv[1] = NULL;

    help_context = XtCreateApplicationContext();

    dpy = XtOpenDisplay(help_context, (String) NULL, NULL, "XSuprem",
			NULL, 0, &one, argv);

    if (dpy == NULL)
	XtErrorMsg("invalidDisplay","xtInitialize","XtToolkitError",
                   "Can't Open display", (String *) NULL, (Cardinal *)NULL);

    tL1 = XtVaAppCreateShell( "XSupHelp", "XSuprem",
			    applicationShellWidgetClass, dpy,
			    XtNscreen, (XtArgVal)DefaultScreenOfDisplay(dpy),
			    NULL );


    vpane = XtVaCreateManagedWidget("vpane", panedWidgetClass, tL1, NULL);
    buttonbox = XtVaCreateManagedWidget("buttonbox", boxWidgetClass, vpane, NULL);

    /*Make the Help Button*/
    close = XtVaCreateManagedWidget("Cancel", commandWidgetClass,
					      buttonbox, NULL);
    XtAddCallback(close, XtNcallback, destroy_help, NULL);

    txt = XtVaCreateManagedWidget("help", asciiTextWidgetClass, vpane,
				  XtNscrollVertical, XawtextScrollAlways,
				  XtNtype, XawAsciiFile,
				  /*XtNstring, "/home/helios0/law/src/xgraph/help",*/
				  NULL);

    XtRealizeWidget(tL1);
}
Exemple #8
0
/*
 * Function:
 *	XawAsciiSourceChanged
 *
 * Parameters:
 *	w - ascii source widget
 *
 * Description:
 *	Returns true if the source has changed since last saved.
 *
 * Returns:
 *	A Boolean (see description).
 */
Bool
XawAsciiSourceChanged(Widget w)
{
#ifdef OLDXAW
    if (XtIsSubclass(w, multiSrcObjectClass))
	return (((MultiSrcObject)w)->multi_src.changes);

    if (XtIsSubclass(w, asciiSrcObjectClass))
	return (((AsciiSrcObject)w)->ascii_src.changes);
#else
    if (XtIsSubclass(w, textSrcObjectClass))
	return (((TextSrcObject)w)->textSrc.changed);
#endif
    XtErrorMsg("bad argument", "asciiSource", "XawError",
	       "XawAsciiSourceChanged parameter must be an "
	       "asciiSrc or multiSrc.",
	       NULL, NULL);

    return (True);
}
Exemple #9
0
/*
 * Function:
 *	XawAsciiSourceFreeString
 *
 * Parameters:
 *	w - AsciiSrc widget
 *
 * Description:
 *	  Frees the string returned by a get values call
 *		     on the string when the source is of type string.
 */
void
XawAsciiSourceFreeString(Widget w)
{
    AsciiSrcObject src = (AsciiSrcObject)w;

    /* If the src is really a multi, call the multi routine */
    if (XtIsSubclass(w, multiSrcObjectClass)) {
	_XawMultiSourceFreeString(w);
	return;
    }
    else if (!XtIsSubclass(w, asciiSrcObjectClass)) {
	XtErrorMsg("bad argument", "asciiSource", "XawError",
		   "XawAsciiSourceFreeString's parameter must be "
		   "an asciiSrc or multiSrc.",
		   NULL, NULL);
    }

    if (src->ascii_src.allocated_string && src->ascii_src.type != XawAsciiFile) {
	src->ascii_src.allocated_string = False;
	XtFree(src->ascii_src.string);
	src->ascii_src.string = NULL;
    }
}
Exemple #10
0
/*
 * Function:
 *	InsertFileNamed
 *
 * Parameters:
 *	tw  - text widget to insert this file into
 *	str - name of the file to insert
 *
 * Description:
 *	Inserts a file into the text widget.
 *
 * Returns:
 *	True if the insert was sucessful, False otherwise.
 */
static Bool
InsertFileNamed(Widget tw, char *str)
{
    FILE *file;
    XawTextBlock text;
    XawTextPosition pos;

    if (str == NULL || strlen(str) == 0 || (file = fopen(str, "r")) == NULL)
	return (False);

    pos = XawTextGetInsertionPoint(tw);

    fseek(file, 0L, 2);

    text.firstPos = 0;
    text.length = ftell(file);
    text.ptr = XtMalloc(text.length + 1);
    text.format = XawFmt8Bit;

    fseek(file, 0L, 0);
    if (fread(text.ptr, 1, text.length, file) != text.length)
	XtErrorMsg("readError", "insertFileNamed", "XawError",
		   "fread returned error", NULL, NULL);

    if (XawTextReplace(tw, pos, pos, &text) != XawEditDone) {
	XtFree(text.ptr);
	fclose(file);
	return (False);
    }
    pos += text.length;
    XtFree(text.ptr);
    fclose(file);
    XawTextSetInsertionPoint(tw, pos);
    _XawTextShowPosition((TextWidget)tw);

    return (True);
}
Exemple #11
0
/*ARGSUSED*/
void
XmuCvtStringToCursor(XrmValuePtr args, Cardinal *num_args,
		     XrmValuePtr fromVal, XrmValuePtr toVal)
{
    static Cursor cursor;		/* static for cvt magic */
    char *name = (char *)fromVal->addr;
    Screen *screen;
    register int i;
    char maskname[PATH_MAX];
    Pixmap source, mask = 0;
    /* XXX - make fg/bg resources */
    static XColor bgColor = {0, 0xffff, 0xffff, 0xffff};
    static XColor fgColor = {0, 0, 0, 0};
    int xhot, yhot;
    int len;


    if (*num_args != 1)
     XtErrorMsg("wrongParameters","cvtStringToCursor","XtToolkitError",
             "String to cursor conversion needs screen argument",
              (String *)NULL, (Cardinal *)NULL);

    if (XmuCompareISOLatin1(name, "None") == 0)
      {
	cursor = None;
	done(&cursor, Cursor);
	return;
      }

    screen = *((Screen **) args[0].addr);

    if (0 == strncmp(FONTSPECIFIER, name, strlen(FONTSPECIFIER))) {
	char source_name[PATH_MAX], mask_name[PATH_MAX];
	int source_char, mask_char, fields = 0;
	Font source_font, mask_font;
	XrmValue fromString, toFont;
	XrmValue cvtArg;
	Boolean success;
	Display *dpy = DisplayOfScreen(screen);
	char *strspec = NULL;
	int strspeclen;
#ifdef XMU_KLUDGE
	Cardinal num;
#endif

	strspeclen = strlen("FONT %s %d %s %d") + 21;
	strspec = XtMalloc(strspeclen);
	if (strspec != NULL) {
	    snprintf(strspec, strspeclen, "FONT %%%lds %%d %%%lds %%d",
		     (unsigned long)sizeof(source_name) - 1,
		     (unsigned long)sizeof(mask_name) - 1);
	    fields = sscanf(name, strspec,
			    source_name, &source_char,
			    mask_name, &mask_char);
	    XtFree(strspec);
	}
	if (fields < 2) {
	    XtStringConversionWarning(name, XtRCursor);
	    return;
	}

	fromString.addr = source_name;
	fromString.size = strlen(source_name) + 1;
	toFont.addr = (XPointer) &source_font;
	toFont.size = sizeof(Font);
	cvtArg.addr = (XPointer) &dpy;
	cvtArg.size = sizeof(Display *);
	/* XXX using display of screen argument as message display */
#ifdef XMU_KLUDGE
	/* XXX Sacrifice caching */
	num = 1;
	success = XtCvtStringToFont(dpy, &cvtArg, &num, &fromString, &toFont,
				    NULL);
#else
	success = XtCallConverter(dpy, XtCvtStringToFont, &cvtArg,
				  (Cardinal)1, &fromString, &toFont, NULL);
#endif
	if (!success) {
	    XtStringConversionWarning(name, XtRCursor);
	    return;
	}

	switch (fields) {
	  case 2:		/* defaulted mask font & char */
	    mask_font = source_font;
	    mask_char = source_char;
	    break;

	  case 3:		/* defaulted mask font */
	    mask_font = source_font;
	    mask_char = atoi(mask_name);
	    break;

	  case 4:		/* specified mask font & char */
	    fromString.addr = mask_name;
	    fromString.size = strlen(mask_name) + 1;
	    toFont.addr = (XPointer) &mask_font;
	    toFont.size = sizeof(Font);
	    /* XXX using display of screen argument as message display */
#ifdef XMU_KLUDGE
	    /* XXX Sacrifice caching */
	    num = 1;
	    success = XtCvtStringToFont(dpy, &cvtArg, &num, &fromString,
					&toFont, NULL);
#else
	    success = XtCallConverter(dpy, XtCvtStringToFont, &cvtArg,
				      (Cardinal)1, &fromString, &toFont, NULL);
#endif
	    if (!success) {
		XtStringConversionWarning(name, XtRCursor);
		return;
	    }
	}

	cursor = XCreateGlyphCursor( DisplayOfScreen(screen), source_font,
				     mask_font, source_char, mask_char,
				     &fgColor, &bgColor );
	done(&cursor, Cursor);
	return;
    }

    i = XmuCursorNameToIndex (name);
    if (i != -1) {
	cursor = XCreateFontCursor (DisplayOfScreen(screen), i);
	done(&cursor, Cursor);
	return;
    }

    if ((source = XmuLocateBitmapFile (screen, name,
				       maskname, (sizeof maskname) - 4,
				       NULL, NULL, &xhot, &yhot)) == None) {
	XtStringConversionWarning (name, XtRCursor);
	cursor = None;
	done(&cursor, Cursor);
	return;
    }
    len = strlen (maskname);
    for (i = 0; i < 2; i++) {
	strcpy (maskname + len, i == 0 ? "Mask" : "msk");
	if ((mask = XmuLocateBitmapFile (screen, maskname, NULL, 0,
					 NULL, NULL, NULL, NULL)) != None)
	  break;
    }

    cursor = XCreatePixmapCursor( DisplayOfScreen(screen), source, mask,
				  &fgColor, &bgColor, xhot, yhot );
    XFreePixmap( DisplayOfScreen(screen), source );
    if (mask != None) XFreePixmap( DisplayOfScreen(screen), mask );

    done(&cursor, Cursor);
}
Exemple #12
0
/*
 * Function:
 *	InitStringOrFile
 *
 * Parameters:
 *	src - AsciiSource
 *
 * Description:
 *	Initializes the string or file.
 */
static FILE *
InitStringOrFile(AsciiSrcObject src, Bool newString)
{
    mode_t open_mode = 0;
    const char *fdopen_mode = NULL;
    int fd;
    FILE *file;

    if (src->ascii_src.type == XawAsciiString) {
	if (src->ascii_src.string == NULL)
	    src->ascii_src.length = 0;

	else if (!src->ascii_src.use_string_in_place) {
	    src->ascii_src.string = XtNewString(src->ascii_src.string);
	    src->ascii_src.allocated_string = True;
	    src->ascii_src.length = strlen(src->ascii_src.string);
	}

	if (src->ascii_src.use_string_in_place) {
	    if (src->ascii_src.string != NULL)
	    src->ascii_src.length = strlen(src->ascii_src.string);
	    /* In case the length resource is incorrectly set */
	    if (src->ascii_src.length > src->ascii_src.ascii_length)
		src->ascii_src.ascii_length = src->ascii_src.length;

	    if (src->ascii_src.ascii_length == MAGIC_VALUE)
		src->ascii_src.piece_size = src->ascii_src.length;
	    else
		src->ascii_src.piece_size = src->ascii_src.ascii_length + 1;
	}

	return (NULL);
    }

    /*
     * type is XawAsciiFile
     */
    src->ascii_src.is_tempfile = False;

    switch (src->text_src.edit_mode) {
	case XawtextRead:
	    if (src->ascii_src.string == NULL)
		XtErrorMsg("NoFile", "asciiSourceCreate", "XawError",
			   "Creating a read only disk widget and no file specified.",
			   NULL, 0);
	    open_mode = O_RDONLY;
	    fdopen_mode = "r";
	    break;
	case XawtextAppend:
	case XawtextEdit:
	    if (src->ascii_src.string == NULL) {
		src->ascii_src.string = "*ascii-src*";
		src->ascii_src.is_tempfile = True;
	    }
	    else {
/* O_NOFOLLOW is a FreeBSD & Linux extension */
#ifdef O_NOFOLLOW
		open_mode = O_RDWR | O_NOFOLLOW;
#else
		open_mode = O_RDWR; /* unsafe; subject to race conditions */
#endif /* O_NOFOLLOW */
		fdopen_mode = "r+";
	    }
	    break;
	default:
	    XtErrorMsg("badMode", "asciiSourceCreate", "XawError",
		       "Bad editMode for ascii source; must be Read, "
		       "Append or Edit.",
		       NULL, NULL);
    }

    /* If is_tempfile, allocate a private copy of the text
     * Unlikely to be changed, just to set allocated_string */
    if (newString || src->ascii_src.is_tempfile) {
	src->ascii_src.string = XtNewString(src->ascii_src.string);
	src->ascii_src.allocated_string = True;
    }

    if (!src->ascii_src.is_tempfile) {
	if ((fd = open(src->ascii_src.string, open_mode, 0666)) != -1) {
	    if ((file = fdopen(fd, fdopen_mode))) {
		(void)fseek(file, 0, SEEK_END);
		src->ascii_src.length = (XawTextPosition)ftell(file);
		return (file);
	    }
	}
	{
	    String params[2];
	    Cardinal num_params = 2;

	    params[0] = src->ascii_src.string;
	    params[1] = strerror(errno);
	    XtAppWarningMsg(XtWidgetToApplicationContext((Widget)src),
			    "openError", "asciiSourceCreate", "XawWarning",
			    "Cannot open file %s; %s", params, &num_params);
	}
    }
    src->ascii_src.length = 0;
    return (NULL);
}
void
XtInitializeWidgetClass(WidgetClass wc)
{
    XtEnum inited;
    LOCK_PROCESS;
    if (wc->core_class.class_inited) {
	UNLOCK_PROCESS;
	return;
    }
    inited = 0x01;
    {
	WidgetClass pc;
#define LeaveIfClass(c, d) if (pc == c) { inited = d; break; }
	for (pc = wc; pc; pc = pc->core_class.superclass) {
	    LeaveIfClass(rectObjClass, 0x01 |
			 RectObjClassFlag);
	    LeaveIfClass(coreWidgetClass, 0x01 |
			 RectObjClassFlag |
			 WidgetClassFlag);
	    LeaveIfClass(compositeWidgetClass, 0x01 |
			 RectObjClassFlag |
			 WidgetClassFlag |
			 CompositeClassFlag);
	    LeaveIfClass(constraintWidgetClass, 0x01 |
			 RectObjClassFlag |
			 WidgetClassFlag |
			 CompositeClassFlag |
			 ConstraintClassFlag);
	    LeaveIfClass(shellWidgetClass, 0x01 |
			 RectObjClassFlag |
			 WidgetClassFlag |
			 CompositeClassFlag |
			 ShellClassFlag);
	    LeaveIfClass(wmShellWidgetClass, 0x01 |
			 RectObjClassFlag |
			 WidgetClassFlag |
			 CompositeClassFlag |
			 ShellClassFlag |
			 WMShellClassFlag);
	    LeaveIfClass(topLevelShellWidgetClass, 0x01 |
			 RectObjClassFlag |
			 WidgetClassFlag |
			 CompositeClassFlag |
			 ShellClassFlag |
			 WMShellClassFlag |
			 TopLevelClassFlag);
	}
#undef LeaveIfClass
    }
    if (wc->core_class.version != XtVersion &&
	wc->core_class.version != XtVersionDontCheck) {
	String param[3];
	String mismatch = "Widget class %s version mismatch (recompilation needed):\n  widget %d vs. intrinsics %d.";
	String recompile = "Widget class %s must be re-compiled.";
	Cardinal num_params;

	param[0] = wc->core_class.class_name;
	param[1] = (String) wc->core_class.version;
	param[2] = (String) XtVersion;

	if (wc->core_class.version == (11 * 1000 + 5) || /* MIT X11R5 */
	    wc->core_class.version == (11 * 1000 + 4)) { /* MIT X11R4 */
	    if ((inited & WMShellClassFlag) &&
		(sizeof(Boolean) != sizeof(char) ||
		 sizeof(Atom) != sizeof(Widget) ||
		 sizeof(Atom) != sizeof(String))) {
		num_params=3;
		XtWarningMsg("versionMismatch","widget",XtCXtToolkitError,
			     mismatch, param, &num_params);
		num_params=1;
		XtErrorMsg("R4orR5versionMismatch","widget",XtCXtToolkitError,
			   recompile, param, &num_params);

	    }
	}
	else if (wc->core_class.version == (11 * 1000 + 3)) { /* MIT X11R3 */
	    if (inited & ShellClassFlag) {
		num_params=1;
		XtWarningMsg("r3versionMismatch","widget",XtCXtToolkitError,
			     "Shell Widget class %s binary compiled for R3",
			     param,&num_params);
		XtErrorMsg("R3versionMismatch","widget",XtCXtToolkitError,
			   recompile, param, &num_params);
	    }
	}
	else {
	    num_params=3;
	    XtWarningMsg("versionMismatch","widget",XtCXtToolkitError,
			 mismatch, param, &num_params);
	    if (wc->core_class.version == (2 * 1000 + 2)) /* MIT X11R2 */ {
		num_params=1;
		XtErrorMsg("r2versionMismatch","widget",XtCXtToolkitError,
			   recompile, param, &num_params);
	    }
	}
    }

    if ((wc->core_class.superclass != NULL)
	    && (!(wc->core_class.superclass->core_class.class_inited)))
 	XtInitializeWidgetClass(wc->core_class.superclass);

    if (wc->core_class.class_initialize != NULL)
	(*(wc->core_class.class_initialize))();
    CallClassPartInit(wc, wc);
    wc->core_class.class_inited = inited;
    UNLOCK_PROCESS;
}