diff options
author | marha <marha@users.sourceforge.net> | 2009-07-25 20:12:58 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2009-07-25 20:12:58 +0000 |
commit | 2553bdd7c359cd87525d367761c86932cec5adff (patch) | |
tree | ae71245933c98474a699d3e392de5820879b2018 /xorg-server/hw/xfree86/utils/xorgcfg/options.c | |
parent | e2c51f2ee7b0a3ea1a052fc49324057b4a4bbc78 (diff) | |
parent | 4a3dbb926ae3f5410198d7cc4f4ebe4f62eebf05 (diff) | |
download | vcxsrv-2553bdd7c359cd87525d367761c86932cec5adff.tar.gz vcxsrv-2553bdd7c359cd87525d367761c86932cec5adff.tar.bz2 vcxsrv-2553bdd7c359cd87525d367761c86932cec5adff.zip |
svn merge file:///D:/svnrepos/vcxsrv/branches/released .
Diffstat (limited to 'xorg-server/hw/xfree86/utils/xorgcfg/options.c')
-rw-r--r-- | xorg-server/hw/xfree86/utils/xorgcfg/options.c | 787 |
1 files changed, 0 insertions, 787 deletions
diff --git a/xorg-server/hw/xfree86/utils/xorgcfg/options.c b/xorg-server/hw/xfree86/utils/xorgcfg/options.c deleted file mode 100644 index d229bb17f..000000000 --- a/xorg-server/hw/xfree86/utils/xorgcfg/options.c +++ /dev/null @@ -1,787 +0,0 @@ -/* - * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com) - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * CONECTIVA LINUX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF - * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Except as contained in this notice, the name of Conectiva Linux shall - * not be used in advertising or otherwise to promote the sale, use or other - * dealings in this Software without prior written authorization from - * Conectiva Linux. - * - * Author: Paulo César Pereira de Andrade <pcpa@conectiva.com.br> - * - */ - -#include "options.h" -#include "xf86config.h" -#include <X11/Xresource.h> -#include <X11/Shell.h> -#include <X11/Xaw/AsciiText.h> -#include <X11/Xaw/List.h> -#include <X11/Xaw/Command.h> -#include <X11/Xaw/MenuButton.h> -#include <X11/Xaw/Paned.h> -#include <X11/Xaw/SimpleMenP.h> -#include <X11/Xaw/SmeBSB.h> -#include <X11/Xaw/Viewport.h> -#include <ctype.h> - -/* - * Prototypes - */ -static void PopdownCallback(Widget, XtPointer, XtPointer); -static void SelectOptionCallback(Widget, XtPointer, XtPointer); -static void AddOption(Widget, XtPointer, XtPointer); -static void RemoveOption(Widget, XtPointer, XtPointer); -static void UpdateOption(Widget, XtPointer, XtPointer); -static void UpdateOptionList(void); -#ifdef USE_MODULES -static void AddDriverOption(Widget, XtPointer, XtPointer); -static void SelectModuleCallback(Widget, XtPointer, XtPointer); -static void SelectModuleOptionCallback(Widget, XtPointer, XtPointer); -static void ModuleOptionsPopdown(Widget, XtPointer, XtPointer); -#endif -static Bool EnumDatabase(XrmDatabase*, XrmBindingList, XrmQuarkList, - XrmRepresentation*, XrmValue*, XPointer); - -/* - * Initialization - */ -Widget optionsShell; -static XF86OptionPtr *options; -static Widget add, remov, update, list, name, value; -static char *option_str; -static int option_index, popped = False; -static char *Options = "lib/X11/Options"; -XrmDatabase options_xrm; -struct { - char *string; - int offset; -} rebuild_xrm; -#ifdef USE_MODULES -static Widget modList, optList, desc, modOptionsShell, labelType; -static char *module_sel; -static char *types[] = { - "none", "integer", "(non null) string", "string", "real", - "boolean", "frequency", -}; -#endif - -/* - * Implementation - */ -#ifdef USE_MODULES -static int -qcmp_str(_Xconst void *a, _Xconst void *b) -{ - return (strcmp(*(char**)a, *(char**)b)); -} - -void -ModuleOptionsPopup(Widget w, XtPointer user_data, XtPointer call_data) -{ - xf86cfgModuleOptions *info = module_options; - - if (modOptionsShell == NULL) { - char **ops; - int nops; - Widget pane, form, viewport, bottom, popdown; - - modOptionsShell = XtCreatePopupShell("moduleOptions", - transientShellWidgetClass, - optionsShell, NULL, 0); - - pane = XtCreateManagedWidget("pane", panedWidgetClass, - modOptionsShell, NULL, 0); - - form = XtCreateManagedWidget("descriptions", formWidgetClass, - pane, NULL, 0); - labelType = XtCreateManagedWidget("labelType", labelWidgetClass, - form, NULL, 0); - XtCreateManagedWidget("module", labelWidgetClass, form, NULL, 0); - viewport = XtCreateManagedWidget("viewM", viewportWidgetClass, - form, NULL, 0); - ops = NULL; - nops = 0; - while (info) { - ++nops; - ops = (char**)XtRealloc((XtPointer)ops, sizeof(char*) * nops); - ops[nops - 1] = XtNewString(info->name); - info = info->next; - } - if (nops == 0) { - ops = (char**)XtMalloc(sizeof(char*)); - ops[0] = XtNewString(""); - nops = 1; - } - else - qsort(ops, nops, sizeof(char*), qcmp_str); - modList = XtVaCreateManagedWidget("modL", listWidgetClass, - viewport, XtNlist, ops, - XtNnumberStrings, nops, - NULL); - XtAddCallback(modList, XtNcallback, SelectModuleCallback, NULL); - XtCreateManagedWidget("option", labelWidgetClass, form, NULL, 0); - viewport = XtCreateManagedWidget("viewO", viewportWidgetClass, - form, NULL, 0); - ops = (char**)XtMalloc(sizeof(char*)); - ops[0] = XtNewString(""); - optList = XtVaCreateManagedWidget("optL", listWidgetClass, - viewport, XtNlist, ops, - XtNnumberStrings, 1, NULL); - XtAddCallback(optList, XtNcallback, SelectModuleOptionCallback, NULL); - desc = XtVaCreateManagedWidget("desc", asciiTextWidgetClass, - form, XtNeditType, XawtextRead, - NULL); - - bottom = XtCreateManagedWidget("bottom", formWidgetClass, - pane, NULL, 0); - popdown = XtVaCreateManagedWidget("popdown", commandWidgetClass, - bottom, NULL); - XtAddCallback(popdown, XtNcallback, ModuleOptionsPopdown, NULL); - XtRealizeWidget(modOptionsShell); - XSetWMProtocols(DPY, XtWindow(modOptionsShell), &wm_delete_window, 1); - - info = module_options; - } - - if (module_sel && *module_sel) { - XawListReturnStruct list; /* hack to call ballbacks */ - char **strs; - int nstrs, idx = 0; - - XtVaGetValues(modList, XtNlist, &strs, XtNnumberStrings, &nstrs, NULL); - for (idx = nstrs - 1; idx > 0; idx--) - if (strcmp(module_sel, strs[idx]) == 0) - break; - while (info) { - if (strcmp(module_sel, info->name) == 0) - break; - info = info->next; - } - if (info) { - list.string = info->name; - list.list_index = idx; - XawListHighlight(modList, idx); - SelectModuleCallback(modList, NULL, (XtPointer)&list); - } - if (option_str && *option_str) { - OptionInfoPtr opts = info->option; - - idx = 0; - while (opts && opts->name) { - if (strcmp(opts->name, option_str) == 0) - break; - ++idx; - ++opts; - } - - if (opts && opts->name) { - list.string = (char *)opts->name; - list.list_index = idx; - XawListHighlight(optList, idx); - SelectModuleOptionCallback(optList, NULL, (XtPointer)&list); - } - } - } - XtPopup(modOptionsShell, XtGrabNone); -} - -/*ARGSUSED*/ -static void -ModuleOptionsPopdown(Widget w, XtPointer user_data, XtPointer call_data) -{ - XtPopdown(modOptionsShell); -} - -/*ARGSUSED*/ -void -ModuleOptionsCancelAction(Widget w, XEvent *event, - String *params, Cardinal *num_params) -{ - ModuleOptionsPopdown(w, NULL, NULL); -} -#endif - -void -CreateOptionsShell(void) -{ - optionsShell = XtCreatePopupShell("options", transientShellWidgetClass, - toplevel, NULL, 0); -} - -#ifdef USE_MODULES -void -OptionsPopup(XF86OptionPtr *opts, char *driver, OptionInfoPtr drv_opts) -#else -void -OptionsPopup(XF86OptionPtr *opts) -#endif -{ - static int first = 1; -#ifdef USE_MODULES - static Widget button, menu; - static char label[256], menuName[16]; - Widget sme; - char buf[256]; - int i = 0; - Arg args[1]; - static int menuN; -#endif - - option_str = NULL; - options = opts; - if (first) { - Widget pane, form, viewport, bottom, popdown; - - first = 0; - - if (optionsShell == NULL) - CreateOptionsShell(); - pane = XtCreateManagedWidget("pane", panedWidgetClass, - optionsShell, NULL, 0); - - form = XtCreateManagedWidget("commands", formWidgetClass, - pane, NULL, 0); - add = XtCreateManagedWidget("add", commandWidgetClass, - form, NULL, 0); - XtAddCallback(add, XtNcallback, AddOption, NULL); - remov = XtCreateManagedWidget("remove", commandWidgetClass, - form, NULL, 0); - XtAddCallback(remov, XtNcallback, RemoveOption, NULL); - update = XtCreateManagedWidget("update", commandWidgetClass, - form, NULL, 0); - XtAddCallback(update, XtNcallback, UpdateOption, NULL); -#ifdef USE_MODULES - if (!nomodules) { - Widget command; - - command = XtCreateManagedWidget("help", commandWidgetClass, - form, NULL, 0); - XtAddCallback(command, XtNcallback, ModuleOptionsPopup, NULL); - } -#endif - form = XtCreateManagedWidget("form", formWidgetClass, - pane, NULL, 0); - XtVaCreateManagedWidget("label1", labelWidgetClass, form, - XtNlabel, " Option \"", - NULL); - name = XtVaCreateManagedWidget("name", asciiTextWidgetClass, form, - XtNeditType, XawtextEdit, - NULL); - XtVaCreateManagedWidget("label2", labelWidgetClass, - form, - XtNlabel, "\" \"", - NULL); - value = XtVaCreateManagedWidget("value", asciiTextWidgetClass, form, - XtNeditType, XawtextEdit, - NULL); - XtVaCreateManagedWidget("label3", labelWidgetClass, form, - XtNlabel, "\" ", - NULL); - viewport = XtCreateManagedWidget("viewport", viewportWidgetClass, - form, NULL, 0); - list = XtCreateManagedWidget("list", listWidgetClass, - viewport, NULL, 0); - XtAddCallback(list, XtNcallback, SelectOptionCallback, NULL); - bottom = XtCreateManagedWidget("bottom", formWidgetClass, - pane, NULL, 0); -#ifdef USE_MODULES - if (!nomodules) - button = XtCreateManagedWidget("driverOpts", menuButtonWidgetClass, - bottom, NULL, 0); -#endif - popdown = XtVaCreateManagedWidget("popdown", commandWidgetClass, - bottom, NULL); -#ifdef USE_MODULES - if (!nomodules) - XtVaSetValues(popdown, XtNfromHoriz, button, NULL); -#endif - - XtAddCallback(popdown, XtNcallback, PopdownCallback, NULL); - XtRealizeWidget(optionsShell); - XSetWMProtocols(DPY, XtWindow(optionsShell), &wm_delete_window, 1); - -#ifdef USE_MODULES - if (!nomodules) { - char *str; - - XtSetArg(args[0], XtNlabel, &str); - XtGetValues(button, args, 1); - XmuSnprintf(label, sizeof(label), "%s", str); - } -#endif - } - -#ifdef USE_MODULES - if (!nomodules) { - if (menu) - XtDestroyWidget(menu); - XmuSnprintf(menuName, sizeof(menuName), "optionM%d", menuN); - menuN = !menuN; - menu = XtCreatePopupShell(menuName, simpleMenuWidgetClass, button, - NULL, 0); - XtVaSetValues(button, XtNmenuName, menuName, NULL); - if (drv_opts) { - int len, longest = 0; - char fmt[32]; - - for (i = 0; drv_opts[i].name != NULL; i++) { - len = strlen(drv_opts[i].name); - if (len > longest) - longest = len; - } - XmuSnprintf(fmt, sizeof(fmt), "%c-%ds %%s", '%', longest); - for (; drv_opts->name != NULL; drv_opts++) { - char *type; - - if (drv_opts->type >= OPTV_NONE && drv_opts->type <= OPTV_FREQ) - type = types[drv_opts->type]; - else - type = "UNKNOWN"; - - XmuSnprintf(buf, sizeof(buf), fmt, drv_opts->name, type); - sme = XtVaCreateManagedWidget(drv_opts->name, smeBSBObjectClass, - menu, XtNlabel, buf, NULL); - XtAddCallback(sme, XtNcallback, AddDriverOption, (XtPointer)drv_opts); - } - } - if (i) { - xf86cfgModuleOptions *mod = module_options; - - while (mod) { - if (strcmp(mod->name, driver) == 0) { - /* don't assign to driver, as it may be a temp string */ - module_sel = mod->name; - break; - } - mod = mod->next; - } - XmuSnprintf(buf, sizeof(buf), "%s%s", label, driver); - XtSetArg(args[0], XtNlabel, buf); - XtSetValues(button, args, 1); - XtMapWidget(button); - } - else - XtUnmapWidget(button); - } -#endif - - UpdateOptionList(); - popped = True; - XtPopup(optionsShell, XtGrabExclusive); - - while (popped) - XtAppProcessEvent(XtWidgetToApplicationContext(optionsShell), XtIMAll); -} - -static void -UpdateOptionList(void) -{ - Arg args[2]; - char **ops, **oldops; - int nops, oldnops; - XF86OptionPtr opt; - - ops = NULL; - nops = 0; - XawListUnhighlight(list); - XtSetArg(args[0], XtNlist, &oldops); - XtSetArg(args[1], XtNnumberStrings, &oldnops); - XtGetValues(list, args, 2); - opt = *options; - while (opt != NULL) { - if (nops % 16 == 0) - ops = (char**)XtRealloc((XtPointer)ops, (nops + 16) * - sizeof(char*)); - ops[nops++] = XtNewString(opt->opt_name); - opt = (XF86OptionPtr)(opt->list.next); - } - if (nops == 0) { - ops = (char**)XtMalloc(sizeof(char*)); - ops[0] = XtNewString(""); - nops = 1; - } - XtSetArg(args[0], XtNlist, ops); - XtSetArg(args[1], XtNnumberStrings, nops); - XtSetValues(list, args, 2); - if (oldnops > 0 && - (oldnops != 1 || XtName(list) != oldops[0])) { - while (--oldnops >= 0) - XtFree(oldops[oldnops]); - XtFree((XtPointer)oldops); - } - - XtSetArg(args[0], XtNstring, ""); - XtSetValues(name, args, 1); - XtSetValues(value, args, 1); - - /* force relayout */ - XtUnmanageChild(list); - XtManageChild(list); - - XtSetSensitive(remov, False); - XtSetSensitive(update, False); -} - -/*ARGSUSED*/ -static void -PopdownCallback(Widget w, XtPointer user_data, XtPointer call_data) -{ - XtPopdown(optionsShell); - popped = False; -} - -/*ARGSUSED*/ -void -OptionsCancelAction(Widget w, XEvent *event, - String *params, Cardinal *num_params) -{ - PopdownCallback(w, NULL, NULL); -} - -/*ARGSUSED*/ -static void -SelectOptionCallback(Widget w, XtPointer user_data, XtPointer call_data) -{ - Arg args[1]; - XF86OptionPtr option; - XawListReturnStruct *info = (XawListReturnStruct *)call_data; - - option_str = info->string; - option_index = info->list_index; - if ((option = xf86findOption(*options, info->string)) != NULL) { - XtSetArg(args[0], XtNstring, option->opt_name); - XtSetValues(name, args, 1); - XtSetArg(args[0], XtNstring, - option->opt_val != NULL ? option->opt_val : ""); - XtSetValues(value, args, 1); - } - XtSetSensitive(remov, True); - XtSetSensitive(update, True); -} - -/*ARGSUSED*/ -static void -AddOption(Widget w, XtPointer user_data, XtPointer call_data) -{ - Arg args[1]; - char *nam, *val; - - XtSetArg(args[0], XtNstring, &nam); - XtGetValues(name, args, 1); - XtSetArg(args[0], XtNstring, &val); - XtGetValues(value, args, 1); - if (xf86findOption(*options, nam) != NULL || strlen(nam) == 0) - /* XXX xf86addNewOption will trash the option linked list if - * the options being added already exists. - */ - return; - *options = xf86addNewOption(*options, XtNewString(nam), - val && strlen(val) ? XtNewString(val) : NULL); - UpdateOptionList(); -} - -#ifdef USE_MODULES -/*ARGSUSED*/ -static void -AddDriverOption(Widget w, XtPointer user_data, XtPointer call_data) -{ - Arg args[1]; - OptionInfoPtr opt = (OptionInfoPtr)user_data; - XF86OptionPtr option; - - option_str = (char *)opt->name; - XtSetArg(args[0], XtNstring, opt->name); - XtSetValues(name, args, 1); - if ((option = xf86findOption(*options, opt->name)) == NULL) - XtSetArg(args[0], XtNstring, ""); - else - XtSetArg(args[0], XtNstring, option->opt_val); - XtSetValues(value, args, 1); -} - -/*ARGSUSED*/ -static void -SelectModuleCallback(Widget w, XtPointer user_data, XtPointer call_data) -{ - xf86cfgModuleOptions *mod = module_options; - XawListReturnStruct *info = (XawListReturnStruct *)call_data; - - while (mod) { - if (strcmp(mod->name, info->string) == 0) - break; - mod = mod->next; - } - - if (mod) { - Arg args[2]; - char **list = NULL, **old; - OptionInfoPtr opts = mod->option; - int num = 0, oldnum; - - module_sel = mod->name; - XtSetArg(args[0], XtNlist, &old); - XtSetArg(args[1], XtNnumberStrings, &oldnum); - XtGetValues(optList, args, 2); - while (opts && opts->name) { - ++num; - list = (char**)XtRealloc((XtPointer)list, sizeof(char*) * num); - list[num - 1] = XtNewString(opts->name); - ++opts; - } - if (num == 0) { - list = (char**)XtMalloc(sizeof(char*)); - list[0] = XtNewString(""); - num = 1; - } - XtSetArg(args[0], XtNlist, list); - XtSetArg(args[1], XtNnumberStrings, num); - XtSetValues(optList, args, 2); - while (--oldnum >= 0) - XtFree(old[oldnum]); - XtFree((XtPointer)old); - - XtVaSetValues(desc, XtNstring, "", NULL); - XawListUnhighlight(optList); - - /* force relayout */ - XtUnmanageChild(optList); - XtManageChild(optList); - } -} - -static void -SelectModuleOptionCallback(Widget w, XtPointer user_data, XtPointer call_data) -{ - xf86cfgModuleOptions *mod = module_options; - XawListReturnStruct *info = (XawListReturnStruct *)call_data; - char *description = NULL, *type = "undefined"; - char label[256]; - - if (module_sel && info->string) - description = GetOptionDescription(module_sel, info->string); - if (description == NULL) - description = "** NO DESCRIPTION AVAILABLE **"; - - XtVaSetValues(desc, XtNstring, description, NULL); - - while (mod) { - if (strcmp(module_sel, mod->name) == 0) - break; - mod = mod->next; - } - if (mod) { - OptionInfoPtr opts = mod->option; - - while (opts && opts->name) { - if (strcasecmp(opts->name, info->string) == 0) - break; - ++opts; - } - if (opts && opts->name && opts->type >= OPTV_NONE && - opts->type <= OPTV_FREQ) - type = types[opts->type]; - } - - XmuSnprintf(label, sizeof(label), "%s.%s (%s)", module_sel, info->string, - type); - XtVaSetValues(labelType, XtNlabel, label, NULL); -} -#endif - -/*ARGSUSED*/ -static void -RemoveOption(Widget w, XtPointer user_data, XtPointer call_data) -{ - Arg args[1]; - char *str; - - XtSetArg(args[0], XtNstring, &str); - XtGetValues(name, args, 1); - xf86removeOption(options, str); - UpdateOptionList(); -} - -/*ARGSUSED*/ -static void -UpdateOption(Widget w, XtPointer user_data, XtPointer call_data) -{ -/* xf86removeOption(options, option_str); - AddOption(w, user_data, call_data); - UpdateOptionList();*/ - - Arg args[1]; - char *nam, *val; - XF86OptionPtr option; - - XtSetArg(args[0], XtNstring, &nam); - XtGetValues(name, args, 1); - XtSetArg(args[0], XtNstring, &val); - XtGetValues(value, args, 1); - if ((option = xf86findOption(*options, option_str)) == NULL) - return; - XtFree(option->opt_name); - option->opt_name = option_str = XtNewString(nam); - XtFree(option->opt_val); - if (val && strlen(val)) - option->opt_val = XtNewString(val); - else - option->opt_val = NULL; - - UpdateOptionList(); - XawListHighlight(list, option_index); - XtSetArg(args[0], XtNstring, option->opt_name); - XtSetValues(name, args, 1); - XtSetArg(args[0], XtNstring, option->opt_val); - XtSetValues(value, args, 1); - - XtSetSensitive(remov, True); - XtSetSensitive(update, True); -} - -/*ARGUSED*/ -static Bool -EnumDatabase(XrmDatabase *db, XrmBindingList bindings, XrmQuarkList quarks, - XrmRepresentation *type, XrmValue *value, XPointer closure) -{ - char *module = XrmQuarkToString(quarks[0]), - *option = XrmQuarkToString(quarks[1]); - - /* handle *.Option: value */ - if (module && option == NULL) { - option = module; - module = "*"; - } - - /* - * NOTE: If the Options file is changed to support any other format than - * - * Module.Option: description text - * - * this code will also need to be updated. - */ - - if (module) { - XrmValue xrm; - char *type, *value, query[256]; - - XmuSnprintf(query, sizeof(query), "%s.%s", module, option); - if (XrmGetResource(options_xrm, query, "Module.Option", &type, &xrm)) - value = (char*)xrm.addr; - else - value = NULL; - - if (value) { - char *norm; - unsigned char *ptr; - int position; - int length = strlen(module) + strlen(option) + strlen(value) + 4; - - rebuild_xrm.string = XtRealloc(rebuild_xrm.string, - rebuild_xrm.offset + length); - position = rebuild_xrm.offset + - sprintf(rebuild_xrm.string + rebuild_xrm.offset, "%s.%s:", - module, option); - - /* removes underlines and spaces */ - norm = strchr(rebuild_xrm.string + rebuild_xrm.offset, '.') + 1; - for (; *norm; norm++) { - if (*norm == '_' || *norm == ' ' || *norm == '\t') { - memmove(norm, norm + 1, strlen(norm) + 1); - --position; - --length; - } - } - - for (ptr = (unsigned char*)rebuild_xrm.string + rebuild_xrm.offset; - *ptr; ptr++) - *ptr = tolower(*ptr); - sprintf(rebuild_xrm.string + position, "%s\n", value); - rebuild_xrm.offset += length - 1; - } - } - - return (False); -} - -Bool -InitializeOptionsDatabase(void) -{ - static int first = 1; - static Bool result = True; - - if (first) { - XrmQuark names[2]; - XrmQuark classes[2]; - - first = 0; - XrmInitialize(); - if ((options_xrm = XrmGetFileDatabase(Options)) == (XrmDatabase)0) { - fprintf(stderr, "Cannot open '%s' database.\n", Options); - return (False); - } - - /* rebuild database, using only lowercase characters */ - names[0] = classes[0] = names[1] = classes[1] = NULLQUARK; - (void)XrmEnumerateDatabase(options_xrm, (XrmNameList)&names, - (XrmClassList)&classes, XrmEnumAllLevels, - EnumDatabase, NULL); - - /* free previous database, as it is not guaranteed to be - * "case insensitive" */ - XrmDestroyDatabase(options_xrm); - - /* create case insensitive database by making everything lowercase */ - if (rebuild_xrm.string == NULL || - (options_xrm = XrmGetStringDatabase(rebuild_xrm.string)) == - (XrmDatabase)0) { - fprintf(stderr, "Cannot rebuild '%s' database.\n", Options); - XtFree(rebuild_xrm.string); - return (False); - } - XtFree(rebuild_xrm.string); - } - - return (result); -} - -char * -GetOptionDescription(char *module, char *option) -{ - char *type; - XrmValue value; - char query[256]; - unsigned char *ptr; - - InitializeOptionsDatabase(); - - XmuSnprintf(query, sizeof(query), "%s.%s", module, option); - ptr = (unsigned char*)strchr(query, '.') + 1; - for (; *ptr; ptr++) { - if (*ptr == '_' || *ptr == ' ' || *ptr == '\t') - memmove(ptr, ptr + 1, strlen((char*)ptr) + 1); - } - for (ptr = (unsigned char*)query; *ptr; ptr++) - *ptr = tolower(*ptr); - if (XrmGetResource(options_xrm, query, "Module.Option", &type, &value)) - return ((char*)value.addr); - - return (NULL); -} |