summaryrefslogtreecommitdiff
path: root/listres.c
diff options
context:
space:
mode:
authorKaleb Keithley <kaleb@freedesktop.org>2003-11-14 16:48:57 +0000
committerKaleb Keithley <kaleb@freedesktop.org>2003-11-14 16:48:57 +0000
commit874408d7537bb75aae3716ad7ebafdf155e1ab0f (patch)
tree65698f43d8d9cce6c7dd85f190e61cbdd7422f45 /listres.c
Initial revisionXORG-STABLE
Diffstat (limited to 'listres.c')
-rw-r--r--listres.c306
1 files changed, 306 insertions, 0 deletions
diff --git a/listres.c b/listres.c
new file mode 100644
index 0000000..9d53e71
--- /dev/null
+++ b/listres.c
@@ -0,0 +1,306 @@
+/*
+ * $XConsortium: listres.c,v 1.32 94/04/17 20:43:22 dave Exp $
+ *
+ *
+Copyright (c) 1989 X Consortium
+
+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 THE
+X CONSORTIUM 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 the X Consortium shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the X Consortium.
+ * *
+ * Author: Jim Fulton, MIT X Consortium
+ */
+/* $XFree86: xc/programs/listres/listres.c,v 1.4 2001/04/01 14:00:18 tsi Exp $ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xos.h>
+#include <X11/StringDefs.h>
+#include <X11/IntrinsicP.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Core.h>
+#include <X11/Xmu/CharSet.h>
+#include <X11/Xmu/WidgetNode.h>
+#include <X11/Xaw/AllWidgets.h>
+
+#define widget_list XawWidgetArray /* or motif or ol or ... */
+#define nwidgets XawWidgetCount
+
+
+static XrmOptionDescRec Options[] = {
+ { "-top", "*topObject", XrmoptionSepArg, (caddr_t) NULL },
+ { "-format", "*resourceFormat", XrmoptionSepArg, (caddr_t) NULL },
+ { "-tree", "*showTree", XrmoptionNoArg, (caddr_t) "on" },
+ { "-nosuper", "*showSuper", XrmoptionNoArg, (caddr_t) "off" },
+ { "-variable", "*showVariable", XrmoptionNoArg, (caddr_t) "on" },
+};
+
+typedef struct {
+ Boolean show_tree;
+ Boolean show_all;
+ Boolean show_variable;
+ Boolean show_superclass;
+ char *top_object;
+ char *format;
+ } OptionsRec;
+
+OptionsRec options;
+
+#define Offset(field) XtOffsetOf(OptionsRec, field)
+
+static XtResource Resources[] = {
+ { "showTree", "ShowTree", XtRBoolean, sizeof(Boolean),
+ Offset(show_tree), XtRImmediate, (XtPointer) FALSE },
+ { "showSuper", "ShowSuper", XtRBoolean, sizeof(Boolean),
+ Offset(show_superclass), XtRImmediate, (caddr_t) TRUE },
+ { "showVariable", "ShowVariable", XtRBoolean, sizeof(Boolean),
+ Offset(show_variable), XtRImmediate, (caddr_t) FALSE },
+ { "topObject", "TopObject", XtRString, sizeof(char *),
+ Offset(top_object), XtRString, (caddr_t) "core" },
+ { "resourceFormat", "ResourceFormat", XtRString, sizeof(char *),
+ Offset(format), XtRString, (caddr_t) " %-16s %20s %-20s %s" },
+};
+
+#undef Offset
+
+const char *ProgramName;
+
+void
+usage ()
+{
+ fprintf(stderr, "usage: %s [-options...]\n", ProgramName);
+ fprintf(stderr, "\nwhere options include:\n");
+ fprintf(stderr,
+ " -all list all known widget and object classes\n");
+ fprintf(stderr,
+ " -tree list all widgets and objects in a tree\n");
+ fprintf(stderr,
+ " -nosuper do not print superclass resources\n");
+ fprintf(stderr,
+ " -variable show variable name instead of class name\n");
+ fprintf(stderr,
+ " -top name object to be top of tree\n");
+ fprintf(stderr,
+ " -format string printf format for instance, class, type\n");
+ fprintf(stderr, "\n");
+ exit (1);
+}
+
+static void print_tree_level (wn, level)
+ register XmuWidgetNode *wn;
+ register int level;
+{
+ register int i;
+
+ if (!wn) return;
+
+ for (i = 0; i < level; i++) {
+ putchar (' '); putchar (' ');
+ }
+ printf ("%d: %s/%s\n", level, wn->label, XmuWnClassname(wn));
+ print_tree_level (wn->children, level + 1);
+ print_tree_level (wn->siblings, level);
+}
+
+static void tree_known_widgets ()
+{
+ register int i;
+ register XmuWidgetNode *wn;
+
+ for (i = 0, wn = widget_list; i < nwidgets; i++, wn++) {
+ if (!wn->superclass) { /* list all rooted objects */
+ print_tree_level (wn, 0);
+ }
+ }
+}
+
+
+/*
+ * print_classname - print out the superclass-to-subclass hierchy of names
+ * in the form super\sub\sub....
+ */
+static int print_classname (node, topnode, level, showvar)
+ XmuWidgetNode *node, *topnode;
+ int level;
+ Bool showvar;
+{
+ int retval;
+
+ if (node && node != topnode) {
+ retval = print_classname (node->superclass, topnode, level + 1,
+ showvar);
+ } else {
+ retval = level - 1;
+ }
+ if (node)
+ printf ("%s%s", showvar ? node->label : XmuWnClassname(node),
+ level ? "\\" : "");
+
+ return retval;
+}
+
+static void list_known_widgets ()
+{
+ int i;
+ XmuWidgetNode *wn;
+ int width = 0;
+ char format[20];
+
+ for (i = 0, wn = widget_list; i < nwidgets; i++, wn++) {
+ int l = strlen (wn->label);
+ if (l > width) width = l;
+ }
+ sprintf (format, "%%-%ds ", width);
+ for (i = 0, wn = widget_list; i < nwidgets; i++, wn++) {
+ printf (format, wn->label);
+ print_classname (wn, (XmuWidgetNode *) NULL, 0, False);
+ putchar ('\n');
+ }
+}
+
+/* ARGSUSED */
+static void print_resources (node, format, topnode, showsuper, showvar)
+ XmuWidgetNode *node;
+ const char *format;
+ XmuWidgetNode *topnode;
+ Bool showsuper;
+ Bool showvar;
+{
+ int i;
+ XtResourceList res = node->resources;
+ XmuWidgetNode **wn = node->resourcewn;
+
+ for (i = 0; i < node->nresources; i++, res++, wn++) {
+ if (!showsuper && *wn != node) continue;
+ printf (format, showvar ? (*wn)->label : XmuWnClassname(*wn),
+ res->resource_name, res->resource_class, res->resource_type);
+ putchar ('\n');
+ }
+ if (node->nconstraints > 0) {
+ printf (format, "----", "----", "----", "----");
+ putchar ('\n');
+ }
+ res = node->constraints;
+ wn = node->constraintwn;
+ for (i = 0; i < node->nconstraints; i++, res++, wn++) {
+ if (!showsuper && *wn != node) continue;
+ printf (format, showvar ? (*wn)->label : XmuWnClassname(*wn),
+ res->resource_name, res->resource_class, res->resource_type);
+ putchar ('\n');
+ }
+ return;
+}
+
+
+/*
+ * list_resources - display resources of a widget, identifying class from
+ * which they come
+ */
+static void
+list_resources (node, format, topnode, toplevel, showsuper, showvar)
+ XmuWidgetNode *node;
+ const char *format;
+ XmuWidgetNode *topnode;
+ Widget toplevel;
+ Bool showsuper;
+ Bool showvar;
+{
+ static Bool first = True;
+
+ XmuWnFetchResources (node, toplevel, topnode);
+ if (first) {
+ printf (format, showvar ? "Variable" : "WidgetClass",
+ "Instance", "Class", "Type");
+ putchar ('\n');
+ printf (format, showvar ? "--------" : "-----------",
+ "--------", "-----", "----");
+ putchar ('\n');
+ first = False;
+ }
+ printf ("%s: ", node->label);
+ print_classname (node, topnode, 0, showvar);
+ putchar ('\n');
+ print_resources (node, format, topnode, showsuper, showvar);
+ putchar ('\n');
+}
+
+
+int
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ int i;
+ XtAppContext appcon;
+ XmuWidgetNode *topnode;
+ Widget toplevel, container;
+
+ ProgramName = argv[0];
+
+ XtSetLanguageProc(NULL, (XtLanguageProc) NULL, NULL);
+
+ toplevel = XtAppInitialize (&appcon, "Listres", Options, XtNumber(Options),
+ &argc, argv, NULL, NULL, 0);
+ container = XtCreateWidget ("dummy", widgetClass, toplevel, NULL, ZERO);
+
+ XtGetApplicationResources (toplevel, (caddr_t) &options,
+ Resources, XtNumber(Resources), NULL, ZERO);
+ XmuWnInitializeNodes (widget_list, nwidgets);
+ if (argc == 1) {
+ if (options.show_tree) {
+ tree_known_widgets();
+ } else {
+ list_known_widgets();
+ }
+ exit (0);
+ }
+
+ topnode = XmuWnNameToNode (widget_list, nwidgets, options.top_object);
+ argc--, argv++; /* skip command */
+
+ if (argc > 0 && argv[0][0] == '-') {
+ int len = strlen (argv[0]);
+ if (len >= 2 && strncmp(argv[0], "-all", len) == 0) {
+ XmuWidgetNode *wn;
+ for (i = 0, wn = widget_list; i < nwidgets; i++, wn++) {
+ list_resources (wn, options.format, topnode, container,
+ (Bool) options.show_superclass,
+ (Bool) options.show_variable);
+ }
+ } else
+ usage();
+ } else {
+ for (; argc > 0; argc--, argv++) {
+ XmuWidgetNode *node;
+
+ if (argv[0][0] == '-') usage ();
+ node = XmuWnNameToNode (widget_list, nwidgets, *argv);
+ if (!node) {
+ fprintf (stderr, "%s: unable to find widget \"%s\"\n",
+ ProgramName, *argv);
+ continue;
+ }
+ list_resources (node, options.format, topnode, container,
+ (Bool) options.show_superclass,
+ (Bool) options.show_variable);
+ }
+ }
+ exit (0);
+}