Query: xtgetapplib
OS: hpux
Section: 3
Format: Original Unix Latex Style Formatted with HTML and a Horizontal Scroll Bar
XtGetApplicationResources() XtGetApplicationResources() Name XtGetApplicationResources - set application variables from the resource database. Synopsis void XtGetApplicationResources(object, base, resources, num_resources, args, num_args) Widget object; XtPointer base; XtResourceList resources; Cardinal num_resources; ArgList args; Cardinal num_args; Inputs object Specifies the object that identifies the resource database to search; may be of class Object or any subclass. base Specifies the base address of the structure into which the resource values will be written. resources Specifies the application's resource list. num_resources Specifies the number of resources in the resource list. args Specifies the argument list to override other resource specifications, or NULL. num_args Specifies the number of arguments in the argument list. Outputs base Returns the resource values from the argument list, the resource database, or the resource list defaults. Description XtGetApplicationResources() retrieves resource settings that apply to an overall application, rather than to a particular widget. For each resource in resources, XtGetApplicationResource() sets a value in the structure pointed to by base. This value comes from the argument list args, or if no value for the resource is found in the argument list, from the resource database associated with object, or if no value is found in the database, from the default_addr field of the resource itself. Once the value is determined, it is copied into the struc- ture at base using the resource_offset and resource_size fields of the resource. The search of the database is done using the resource_name and resource_class fields of the resource. Resources are searched for at the level in the resource name hierarchy at which object's resources are found, i.e., application resources are set in a resource database in the same way as the specified object's resources are set. XtGetApplicationResources() may overwrite the specified resource list with an equivalent representation in an internal format that opti- mizes access time if the list is used repeatedly. The resource list must be allocated in writable storage and the caller must not modify the list contents after the call if the same list is to be used again. Any per-display resources fetched by XtGetApplicationResources() will not be freed from the resource cache until the display is closed. The use of each of the fields in the XtResource structure is explained in detail in the "Background" section below. Usage Any application that has any configurability should define application resources as an alternative to command line options and configura- tion files. To do this, you declare a structure that contains a field for each of the resource values you want to look up in the database. Then you statically initialize an array of XtResource structures which describe the name, class, type and default of each resource, and also specify the size of the resource value and the location within your structure at which it should be stored. Next you call XtGetAppli- cationResources() with the address of your structure and your application resource list, and possibly an argument list of values to over- ride the database. When XtGetApplicationResources() returns, your structure will be initialized with values from the argument list, the resource database, or from the resource list defaults. The "Example" section below shows an example of this process, and the "Background" section explains each of the fields of an XtResource structure in more detail. Usually, you will pass a the shell widget returned by XtAppInitialize() as object. This will make XtGetApplicationResources() look up resources of the form application_name.resource_name. You may use any other widget or object, but this will make XtGetApplicationRe- sources() look up resources that are deeper in the hierarchy, resources that appear to be resources of the specified widget. Example Here is a short program that declares and initializes an application resource list and uses it to get the value of some application resources. #include <X11/StringDefs.h> #include <X11/Intrinsic.h> /* * fields to be filled in from resources */ typedef struct { Pixel highlight_color; XFontStruct *bold_font; Boolean palette_on_left; } application_variable_rec; static XtResource resources[] = { {"highlightColor", XtCForeground, XtRPixel, sizeof(Pixel), XtOffsetOf(application_variable_rec, highlight_color), XtRString, XtDefaultForeground }, {"boldFont", XtCFont, XtRFontStruct, sizeof(XFontStruct *), XtOffsetOf(application_variable_rec, bold_font), XtRString, XtDefaultFont }, {"paletteOnLeft", "PaletteOnLeft", XtRBoolean, sizeof(Boolean), XtOffsetOf(application_variable_rec, palette_on_left), XtRImmediate, True } }; main(argc, argv) int argc; char **argv; { XtAppContext app_context; Widget toplevel; application_variable_rec app_vars; toplevel = XtAppInitialize(&app_context, "XDraw", NULL, 0, &argc, argv, NULL, NULL, 0); XtGetApplicationResources(toplevel, /* widget */ &app_vars, /* base address */ resources, /* resource list */ XtNumber(resources), /* how many */ NULL, 0); /* ArgList */ . . . } If the application name is "xdraw", then the application resources can be set with lines like the following in a resource file: xdraw.highlightColor: blue xdraw.boldFont: *-helvetica-bold-r-*-*-*-180-* xdraw.paletteOnLeft: False Background To use XtGetApplicationResources(), you must initialize an array of XtResource structures which describe the resources you want to obtain. The XtResource structure is shown in the "Structures" section below. The fields of this structure are used as follows: resource_name This field specifies the name of the resource, i.e., the name that must appear in a resource file to set this resource. By convention, the first letter of a resource name is lowercase, and any subsequent words are capitalized and concatenated without a hyphen or under- score-"background" and "backgroundPixmap", for example. If you define a symbolic constant for the resource name, it should be the same as the resource name, with a prefix, which should end with an `N'-XtNbackground or XmNbackgroundPixmap, for example. It is also conven- tion that the field in which this resource's value will be stored has the same name as the resource, using all lowercase letters, and underscores to separate words--background and background_pixmap, for example. Resource names beginning with "xt" are reserved by the Intrinsics. resource_class This field specifies the class name of the resource. If a number of resources have the same class, you can specify a value for all those resources with a single line in a resource file. The "normalFont" and "boldFont" resources might both be of class "Font", for example. Class names conventionally begin with capital letters, and, as with resource names, subsequent words are capitalized and underscores are not used. Symbolic names for class names are conventionally spelled the same way as the class name with a prefix which ends with `C'--XtCFont, for example. If there is no general category to use for a resource's class, the class should be the same as the resource name, but capitalized. Class names beginning with "Xt" are reserved by the Intrinsics. resource_type This field is a string that identifies the type of the resource. By convention, it is spelled the same way as the type of the field that this resource will set, but begins with a capital letter. Symbolic names for resource types are spelled the same as the type name, but begin with a prefix which end with `R'--XtRInt and XmRFontList, for example. The Intrinsics predefine a number of types which are shown in the table below. Type names are used to identify which resource converter should be used to convert a string value from the resource database into the appropriate type. If one of your fields is not of one of the standard types listed below, use a type of your own, but be aware that you will have to write and register a converter procedure if you want to get values for that field from the resource data- base. resource_size This field specifies the size in bytes of the field in your structure that this resource will set. Use the sizeof() operator to compute this value. resource_offset This field specifies the offset of this resource's field from the beginning of the structure. This value is added to the base argument passed to XtGetApplicationResources() in order to determine where the resource value is to be stored. This field plus the resource_size field provide enough information to correctly store the resource value. Use the XtOffsetOf() macro to determine the offset of a field in a structure. default_type This is a string which specifies the type of the default value in the default_addr field. It is the same sort of type as the resource_type field explained above. The type of the default does not have to be the same as the type of resource. If they do not match, an appropriate resource converter will be invoked to convert the default value when it is required. In addition to the types listed in the table below, and any types of your own definition, there are two special values that can be set in this field. If default_type is XtRImmediate, then default_addr is interpreted as the resource value itself, rather than a pointer to the value. This is useful for resources that are integers, Booleans, or other scalar types. If default_type is XtRCallProc, then default_addr is pointer to a proce- dure of type XtResourceDefaultProc which is responsible for storing the default value in the correct location. See XtResourceDefault- Proc(2) for details on the responsibilities of such a procedure. default_addr This field specifies a pointer to the default value of the resource, which must be of the type identified by default_type. This field is interpreted differently for types XtRImmediate and XtRCallProc, as explained above. Also, if default_type is XtRString, then default_addr is the string itself, not the address of the string (i.e., it is a char *, not a char **). The Intrinsics define symbolic names for a number of strings which represent commonly used types. These symbolic names and the types they represent are shown in the table below. Resource Type C Type Resource Type C Type XtRAcceleratorTable XtAccelerators XtRInitialState int XtRAtom Atom XtRInt int XtRBitmap Pixmap, depth=1 XtRLongBoolean long XtRBoolean Boolean XtRObject Object XtRBool Bool XtRPixel Pixel XtRCallback XtCallbackList XtRPixmap Pixmap XtRCardinal Cardinal XtRPointer XtPointer XtRColor XColor XtRPosition Position XtRColormap Colormap XtRScreen Screen* XtRCursor Cursor XtRShort short XtRDimension Dimension XtRString String XtRDisplay Display* XtRStringArray String* XtREnum XtEnum XtRStringTable String* XtRFile FILE* XtRTranslationTable XtTranslations XtRFloat float XtRUnsignedChar unsigned char XtRFont Font XtRVisual Visual* XtRFontSet XFontSet XtRWidget Widget XtRFontStruct XFontStruct* XtRWidgetClass WidgetClass XtRFunction (*)() XtRWidgetList WidgetList XtRGeometry char* XtRWindow Window Structures XtResource is defined as follows: typedef struct _XtResource { String resource_name; /* Resource name */ String resource_class; /* Resource class */ String resource_type; /* Representation type desired */ Cardinal resource_size; /* Size in bytes of representation */ Cardinal resource_offset;/* Offset from base to put resource value */ String default_type; /* Representation type of specified default */ XtPointer default_addr; /* Address of resource default value */ } XtResource, *XtResourceList; The ArgList type is defined as follows: typedef struct { String name; XtArgVal value; } Arg, *ArgList; See Also XtGetSubresources(1), XtOffsetOf(1). Xt - Resource Management XtGetApplicationResources()