⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test13.c

📁 安装DDD之前
💻 C
字号:
/* * wctest.c -- Tests various aspects of the BaseClass stuff. * * Written 97/01/03 by Harald Albrecht, albrecht@igpm.rwth-aachen.de */#include <Xm/Xm.h>#include <Xm/XmP.h>#include <X11/ShellP.h>#include <Xm/ArrowBGP.h>#include <Xm/ArrowBP.h>#include <Xm/BaseClassP.h>#include <Xm/BulletinBP.h>#include <Xm/CacheP.h>#include <Xm/CascadeBGP.h>#include <Xm/CascadeBP.h>#include <Xm/CommandP.h>#if XmVERSION<2#include <Xm/CutPasteP.h>#endif#include <Xm/DesktopP.h>#include <Xm/DialogSEP.h>#include <Xm/DialogSP.h>#include <Xm/DisplayP.h>#include <Xm/DragCP.h>#include <Xm/DragIconP.h>#include <Xm/DragOverSP.h>#include <Xm/DrawP.h>#include <Xm/DrawingAP.h>#include <Xm/DrawnBP.h>#include <Xm/DropSMgrP.h>#include <Xm/DropTransP.h>#include <Xm/ExtObjectP.h>#include <Xm/FileSBP.h>#include <Xm/FormP.h>#include <Xm/FrameP.h>#include <Xm/GadgetP.h>#include <Xm/LabelGP.h>#include <Xm/LabelP.h>#include <Xm/ListP.h>#include <Xm/MainWP.h>#include <Xm/ManagerP.h>#include <Xm/MenuShellP.h>#include <Xm/MenuUtilP.h>#include <Xm/MessageBP.h>#include <Xm/PanedWP.h>#include <Xm/PrimitiveP.h>#include <Xm/ProtocolsP.h>#include <Xm/PushBGP.h>#include <Xm/PushBP.h>#if XmVERSION<2#include <Xm/RCUtilsP.h>#endif#include <Xm/RowColumnP.h>#include <Xm/SashP.h>#include <Xm/ScaleP.h>#include <Xm/ScreenP.h>#include <Xm/ScrollBarP.h>#include <Xm/ScrolledWP.h>#include <Xm/SelectioBP.h>#include <Xm/SeparatoGP.h>#include <Xm/SeparatorP.h>#include <Xm/ShellEP.h>#include <Xm/TearOffBP.h>#include <Xm/TearOffP.h>#include <Xm/TextFP.h>#include <Xm/TextFSelP.h>#include <Xm/TextInP.h>#include <Xm/TextOutP.h>#include <Xm/TextP.h>#include <Xm/TextSelP.h>#include <Xm/TextStrSoP.h>#include <Xm/ToggleBGP.h>#include <Xm/ToggleBP.h>#include <Xm/TransltnsP.h>#include <Xm/VaSimpleP.h>#include <Xm/VendorSEP.h>#include <Xm/VendorSP.h>#include <Xm/VirtKeysP.h>#if XmVERSION<2#include <Xm/WorldP.h>#endif#include <Xm/XmosP.h>#include <stdio.h>#include <string.h>Display      *AppDsp;XContext      VisitorCTX = (XContext) 0;/* * Checks whether a widget class has already been visited. */Boolean ClassHasBeenVisited(WidgetClass wc){    void *Dummy;    if ( VisitorCTX == (XContext) 0 ) {        VisitorCTX = XUniqueContext();    }    if ( XFindContext(AppDsp, (XID) wc, VisitorCTX,		      (XPointer*) &Dummy) == 0 ) {        return True;    }    XSaveContext(AppDsp, (XID) wc, VisitorCTX,		 (XPointer) NULL);    return False;} /* ClassHasBeenVisited */void HasMethod(void *MethodPointer, String HookName, 	       Boolean InheritedOverwrite){    if ( MethodPointer ) {        printf("        %s%s\n",	       MethodPointer == (void *) _XtInherit ? "INHERIT " :	         (InheritedOverwrite ? "***INHERITED*** " : ""),	       HookName);    }} /* HasMethod */XmBaseClassExt GetExt(WidgetClass wc, Boolean Inherited){    XmBaseClassExt ext;    ext = (XmBaseClassExt) wc->core_class.extension;    while ( ext && (ext->record_type == Inherited ? XmQmotif : NULLQUARK) &&	    (ext->record_size != sizeof(XmBaseClassExtRec)) ) {        ext = ext->next_extension;    }    return ext;} /* GetExt */Boolean IsSubclass(WidgetClass wc, WidgetClass superwc){    while ( wc && (wc != superwc) ) {        wc = wc->core_class.superclass;    }    return wc == superwc ? True : False;} /* IsSubclass */Boolean CanBeInited(WidgetClass wc){    while ( wc ) {        if (	    (wc == (WidgetClass) &xmLabelGCacheObjClassRec) ||	    (wc == (WidgetClass) &xmVendorShellExtClassRec)	    ) return False;	wc = wc->core_class.superclass;    }    return True;} /* CanBeInited */void DumpBCERecord(WidgetClass wc, Boolean Inherited){    XmBaseClassExt  ext;    char            buff[512];    char           *p;    int             i;    ext = GetExt(wc, Inherited);    if ( ext == NULL ) return;    if ( Inherited ) {      printf("    has a ***INHERITED*** BCE record.\n");    }    printf("    hooks:\n");    HasMethod(ext->initializePrehook, "initializePrehook", Inherited);    HasMethod(ext->initializePosthook, "initializePosthook", Inherited);    HasMethod(ext->classPartInitPrehook, "classPartInitPrehook", Inherited);    HasMethod(ext->classPartInitPosthook, "classPartInitPosthook", Inherited);    HasMethod(ext->getValuesPrehook, "getValuesPrehook", Inherited);    HasMethod(ext->getValuesPosthook, "getValuesPosthook", Inherited);    HasMethod(ext->setValuesPrehook, "setValuesPrehook", Inherited);    HasMethod(ext->setValuesPosthook, "setValuesPosthook", Inherited);    printf("    methods:\n");    HasMethod(ext->getSecResData, "getSecResData", Inherited);    HasMethod(ext->widgetNavigable, "widgetNavigable", Inherited);    HasMethod(ext->focusChange, "focusChange", Inherited);        if ( CanBeInited(wc) ) {        XtInitializeWidgetClass(wc);    }        for (p = buff, i = 0; i <= 63; i++ ) {        *p++ = _XmGetFlagsBit(ext->flags, i) ? '1' : '0';    }    *p = 0;    printf("    fast subclass bits 0-63:\n        %s\n", buff);    if ( ext->ext_resources || ext->num_ext_resources) {        printf("    has %i external resources\n", 	       ext->num_ext_resources);    }    if ( ext->compiled_ext_resources ) {        printf("    has compiled external resources\n");    }    if ( ext->use_sub_resources ) {        printf("    uses subresources\n");    }} /* DumpBCERecord */void TraverseDownTo(WidgetClass wc){    XmBaseClassExt ext;    if ( !ClassHasBeenVisited(wc) ) {        if ( wc->core_class.superclass ) {	    TraverseDownTo(wc->core_class.superclass);	}	printf("-------------------------------------------------------------------------------\n");	printf("%s %s:", 	       IsSubclass(wc, (WidgetClass) &rectObjClassRec) ? 	         "widgetclass" : "objectclass",	       wc->core_class.class_name);	if ( wc->core_class.superclass ) {	    printf(" (superclass %s)", wc->core_class.superclass->core_class.class_name);	}	printf("\n");	/*	 * The widget class hasn't been initialized yet, thus the extension	 * is identified by NULLQUARK and not by XmQmotif. We assume here	 * that there is no other extension present...	 */	ext = GetExt(wc, False);	if ( ext != NULL ) {	    DumpBCERecord(wc, False);	} else if ( CanBeInited(wc) ) {	    XtInitializeWidgetClass(wc);	    ext = GetExt(wc, True);	    if ( ext != NULL ) {	        DumpBCERecord(wc, True);	    }	}    }} /* TraverseDownTo */int main(int argc, char **argv){    XtAppContext AppCtx;    /*     * We must open the display the old way. When using XtAppInitialize()     * a VendorShell derived widget is created as the toplevel widget. And     * this will initialise some widget classes -- what we don't want at all.     * At least not yet.     */    XtToolkitInitialize();    AppCtx = XtCreateApplicationContext();    AppDsp = XtOpenDisplay(AppCtx, NULL, "wctest", "Wctest",			   NULL, 0, &argc, argv);    printf("== BEFORE CREATING FIRST VENDORSHELL ==========================================\n");    TraverseDownTo(coreWidgetClass);    TraverseDownTo(vendorShellWidgetClass);    /*     * Now we can create a shell or we'll crash lateron when the XmMessageBox     * calls _XmGetDefaultDisplay(). Also we can compare what happens to some     * widget classes from the Xt Intrinsics -- especially Core.     */    XtAppCreateShell("wctest", "WcTest", 		     applicationShellWidgetClass, 		     AppDsp, 		     NULL, 0);    VisitorCTX = XUniqueContext();    printf("== AFTER CREATING FIRST VENDORSHELL ===========================================\n");    TraverseDownTo((WidgetClass) &xmCascadeButtonGCacheObjClassRec);    TraverseDownTo((WidgetClass) &xmLabelGCacheObjClassRec);    TraverseDownTo((WidgetClass) &xmPushButtonGCacheObjClassRec);    TraverseDownTo((WidgetClass) &xmToggleButtonGCacheObjClassRec);    TraverseDownTo((WidgetClass) &xmSeparatorGCacheObjClassRec);    TraverseDownTo((WidgetClass) &xmDragContextClassRec);    TraverseDownTo((WidgetClass) &xmDragIconClassRec);    TraverseDownTo((WidgetClass) &xmDragOverShellClassRec);    TraverseDownTo((WidgetClass) &xmDropSiteManagerClassRec);    TraverseDownTo((WidgetClass) &xmDropTransferClassRec);    TraverseDownTo((WidgetClass) &xmProtocolClassRec);    TraverseDownTo((WidgetClass) &xmShellExtClassRec);    TraverseDownTo((WidgetClass) &xmVendorShellExtClassRec);#if XmVERSION<2    TraverseDownTo((WidgetClass) &xmWorldClassRec);#endif    TraverseDownTo(xmArrowButtonGadgetClass);    TraverseDownTo(xmCascadeButtonGadgetClass);    TraverseDownTo(xmPushButtonGadgetClass);    TraverseDownTo(xmToggleButtonGadgetClass);    TraverseDownTo((WidgetClass) &xmScreenClassRec);    TraverseDownTo(xmArrowButtonWidgetClass);    TraverseDownTo(xmCascadeButtonWidgetClass);    TraverseDownTo(xmDrawnButtonWidgetClass);    TraverseDownTo(xmPushButtonWidgetClass);    TraverseDownTo(xmToggleButtonWidgetClass);    TraverseDownTo(xmListWidgetClass);    TraverseDownTo(xmSashWidgetClass);    TraverseDownTo(xmScrollBarWidgetClass);    TraverseDownTo(xmSeparatorWidgetClass);    TraverseDownTo(xmTextWidgetClass);    TraverseDownTo(xmTextFieldWidgetClass);    TraverseDownTo((WidgetClass) &xmTearOffButtonClassRec);    TraverseDownTo(xmFormWidgetClass);    TraverseDownTo(xmMessageBoxWidgetClass);    TraverseDownTo(xmCommandWidgetClass);    TraverseDownTo(xmFileSelectionBoxWidgetClass);    TraverseDownTo(xmDrawingAreaWidgetClass);    TraverseDownTo(xmFrameWidgetClass);    TraverseDownTo(xmPanedWindowWidgetClass);    TraverseDownTo(xmRowColumnWidgetClass);    TraverseDownTo(xmScaleWidgetClass);    TraverseDownTo(xmMainWindowWidgetClass);    TraverseDownTo(xmMenuShellWidgetClass);    TraverseDownTo((WidgetClass) &xmDisplayClassRec);    /*    TraverseDownTo(applicationShellWidgetClass);*/    TraverseDownTo(xmDialogShellWidgetClass);    XtCloseDisplay(AppDsp);    return 0;} /* main *//* End of wctest.c */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -