Widget XtNameToWidget( Widget root, _Xconst char* name) { XrmName *names; XrmBinding *bindings; int len, depth, found = 10000; Widget result; WIDGET_TO_APPCON(root); len = strlen(name); if (len == 0) return NULL; LOCK_APP(app); names = (XrmName *) ALLOCATE_LOCAL((unsigned) (len+1) * sizeof(XrmName)); bindings = (XrmBinding *) ALLOCATE_LOCAL((unsigned) (len+1) * sizeof(XrmBinding)); if (names == NULL || bindings == NULL) _XtAllocError(NULL); XrmStringToBindingQuarkList(name, bindings, names); if (names[0] == NULLQUARK) { DEALLOCATE_LOCAL((char *) bindings); DEALLOCATE_LOCAL((char *) names); UNLOCK_APP(app); return NULL; } result = NameListToWidget(root, names, bindings, 0, &depth, &found); DEALLOCATE_LOCAL((char *) bindings); DEALLOCATE_LOCAL((char *) names); UNLOCK_APP(app); return result; } /* XtNameToWidget */
XtCacheRef *_XtGetResources( register Widget w, ArgList args, Cardinal num_args, XtTypedArgList typed_args, Cardinal* num_typed_args) { XrmName *names, names_s[50]; XrmClass *classes, classes_s[50]; XrmQuark quark_cache[100]; XrmQuarkList quark_args; WidgetClass wc; ConstraintWidgetClass cwc; XtCacheRef *cache_refs, *cache_refs_core; Cardinal count; wc = XtClass(w); count = CountTreeDepth(w); names = (XrmName*) XtStackAlloc (count * sizeof(XrmName), names_s); classes = (XrmClass*) XtStackAlloc (count * sizeof(XrmClass), classes_s); if (names == NULL || classes == NULL) _XtAllocError(NULL); /* Get names, classes for widget and ancestors */ GetNamesAndClasses(w, names, classes); /* Compile arg list into quarks */ CacheArgs(args, num_args, typed_args, *num_typed_args, quark_cache, XtNumber(quark_cache), &quark_args); /* Get normal resources */ LOCK_PROCESS; cache_refs = GetResources(w, (char*)w, names, classes, (XrmResourceList *) wc->core_class.resources, wc->core_class.num_resources, quark_args, args, num_args, typed_args, num_typed_args, XtIsWidget(w)); if (w->core.constraints != NULL) { cwc = (ConstraintWidgetClass) XtClass(w->core.parent); cache_refs_core = GetResources(w, (char*)w->core.constraints, names, classes, (XrmResourceList *) cwc->constraint_class.resources, cwc->constraint_class.num_resources, quark_args, args, num_args, typed_args, num_typed_args, False); if (cache_refs_core) { XtFree((char *)cache_refs_core); } } FreeCache(quark_cache, quark_args); UNLOCK_PROCESS; XtStackFree((XtPointer)names, names_s); XtStackFree((XtPointer)classes, classes_s); return cache_refs; } /* _XtGetResources */
static void CombineAppUserDefaults( Display *dpy, XrmDatabase *pdb) { char* filename; char* path; Boolean deallocate = False; if (!(path = getenv("XUSERFILESEARCHPATH"))) { char *old_path; char homedir[PATH_MAX]; GetRootDirName(homedir, PATH_MAX); if (!(old_path = getenv("XAPPLRESDIR"))) { char *path_default = "%s/%%L/%%N%%C:%s/%%l/%%N%%C:%s/%%N%%C:%s/%%L/%%N:%s/%%l/%%N:%s/%%N"; if (!(path = ALLOCATE_LOCAL(6*strlen(homedir) + strlen(path_default)))) _XtAllocError(NULL); sprintf( path, path_default, homedir, homedir, homedir, homedir, homedir, homedir ); } else { char *path_default = "%s/%%L/%%N%%C:%s/%%l/%%N%%C:%s/%%N%%C:%s/%%N%%C:%s/%%L/%%N:%s/%%l/%%N:%s/%%N:%s/%%N"; if (!(path = ALLOCATE_LOCAL( 6*strlen(old_path) + 2*strlen(homedir) + strlen(path_default)))) _XtAllocError(NULL); sprintf(path, path_default, old_path, old_path, old_path, homedir, old_path, old_path, old_path, homedir ); } deallocate = True; } filename = XtResolvePathname(dpy, NULL, NULL, NULL, path, NULL, 0, NULL); if (filename) { (void)XrmCombineFileDatabase(filename, pdb, False); XtFree(filename); } if (deallocate) DEALLOCATE_LOCAL(path); }