Path: utzoo!utgpu!attcan!uunet!lll-winken!ames!pasteur!ucbvax!decwrl!asente From: asente@decwrl.dec.com (Paul Asente) Newsgroups: comp.windows.x Subject: Re: XtGetConstraintResourceList() Message-ID: <1013@bacchus.dec.com> Date: 7 Jan 89 00:17:22 GMT References: <8901061631.AA14339@tub.UUCP> Organization: DEC Western Software Lab Lines: 86 In article <8901061631.AA14339@tub.UUCP> net@TUB.BITNET (Oliver Laumann) writes: >Has somebody already implemented an XtGetConstraintResourceList() >function that works like XtGetResourceList() but returns the constraint >resource list? Yes, here's one. I'm writing up a proposal at this very minute to add this as a standard part of the intrinsics, but since even if it's accepted it'll probably be months before it makes it out of MIT, and you need it now... Note that by using this you risk having the consortium decide on a different interface. -paul asente asente@decwrl.dec.com decwrl!asente void XtGetResourceList(widget_class, resources, num_resources) WidgetClass widget_class; XtResourceList *resources; Cardinal *num_resources; { GetResourceList(widget_class, resources, num_resources, widget_class->core_class.num_resources, widget_class->core_class.resources); } void XtGetConstraintResourceList(widget_class, resources, num_resources) WidgetClass widget_class; XtResourceList *resources; Cardinal *num_resources; { if (_XtClassIsSubclass(widget_class, constraintWidgetClass)) { ConstraintWidgetClass cwc = (ConstraintWidgetClass) widget_class; GetResourceList(widget_class, resources, num_resources, cwc->constraint_class.num_resources, cwc->constraint_class.resources); } else { *resources = NULL; *num_resources = 0; } } static GetResourceList(widget_class, resources, num_resources, count, r_source) WidgetClass widget_class; XtResourceList *resources; Cardinal *num_resources; Cardinal count; XtResourceList r_source; { int size = count * sizeof(XtResource); register int i, dest = 0; register XtResourceList dlist; register XtResourceList *source; *resources = (XtResourceList) XtMalloc((unsigned) size); if (!widget_class->core_class.class_inited) { /* Easy case */ bcopy((char *) r_source, (char *) *resources, size); *num_resources = count; return; } /* Nope, it's the hard case */ dlist = *resources; source = (XtResourceList *) r_source; for (i = 0; i < count; i++) { if (source[i] != NULL) { dlist[dest].resource_name = (String) XrmQuarkToString((XrmQuark) source[i]->resource_name); dlist[dest].resource_class = (String) XrmQuarkToString((XrmQuark) source[i]->resource_class); dlist[dest].resource_type = (String) XrmQuarkToString((XrmQuark) source[i]->resource_type); dlist[dest].resource_size = source[i]->resource_size; dlist[dest].resource_offset = -(source[i]->resource_offset + 1); dlist[dest].default_type = (String) XrmQuarkToString((XrmQuark) source[i]->default_type); dlist[dest].default_addr = source[i]->default_addr; dest++; } } *num_resources = dest; }