Up: Current Support [Contents][Index]

#### 34.1.1 Resources Example

Let us assume that you have an application named `myapp` and it accepts the options `-foo` level and `-bar` plus a filename. The proper way to initialize the Forms Library is as follows

    FL_CMD_OPT cmdopt[] = {
      {"-foo", "*.foo", XrmoptionSepArg, 0     },
      {"-bar", ".bar",  XrmoptionNoArg,  "True"}
    };

    int foolevel, ifbar;
    int deftrue;      /* can only be set thru resources */

    FL_resource res[] = {
      {"foo",     "FooCLASS", FL_INT,  &foolevel, "0"},
      {"bar",     "BarCLASS", FL_BOOL, &ifbar,    "0"},
      {"deftrue", "Whatever", FL_BOOL, &deftrue,  "1"}
    };

    int main(int argc, char *argv[]) {
        fl_initialize(&argc, argv ,"MyappClass", cmdopt, 2);
        fl_get_app_resources(res, 3);
        if (argc == 1)   /* missing filename */
            fprintf(stderr, "Usage %s: [-foo level][-bar] "
                    "filename\n","myapp");
        /* rest of the program */
    }

After this both variables `foolevel` and `ifbar` are set either through resource files or command line options, with the command line options overriding those set in the resource files. In case neither the command line nor the resource files specified the options, the default value string is converted.

There is another routine, a resource routine of the lowest level in XForms, which might be useful if a quick-and-dirty option needs to be read:

    const char *fl_get_resource(const char *res_name,
                                const char *res_class,
                                FL_RTYPE type, char *defval,
                                void *val, int nbytes);

`res_name` and `res_class` must be complete resource specifications (minus the application name) and should not contain wildcards of any kind. The resource will be converted according to the type and result stored in `type`, which is an integer of type `FL_RTYPE`. `nbytes` is used only if the resource type is `FL_STRING`. The function returns the string representation of the resource value. If a value of `FL_NONE` is passed for `type` the resource is not converted and the pointer `val` is not dereferenced.

There is also a routine that allows the application program to set resources programmatically:

    void fl_set_resource(const char *string, const char *value);

where `string` and `value` are a resource-value pair. The string can be a fully qualified resource name (minus the application name) or a resource class.

Routines `fl_set_resource()` and `fl_get_resource()` can be used to store and retrieve arbitrary strings and values and may be useful to pass data around.

Up: Current Support [Contents][Index]