diff options
-rw-r--r-- | appres.c | 175 | ||||
-rw-r--r-- | appres.man | 89 |
2 files changed, 264 insertions, 0 deletions
diff --git a/appres.c b/appres.c new file mode 100644 index 0000000..b2fc9e3 --- /dev/null +++ b/appres.c @@ -0,0 +1,175 @@ +/* + * $Xorg: appres.c,v 1.4 2001/02/09 02:05:27 xorgcvs Exp $ + * + * +Copyright 1989, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +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 +OPEN GROUP 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 Open Group 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 Open Group. + * * + * Author: Jim Fulton, MIT X Consortium + */ + +#include <X11/Intrinsic.h> +#include <stdio.h> + +#define NONAME "-AppResTest-" + +char *ProgramName; + +XrmQuark XrmQString; + +static void usage () +{ + fprintf (stderr, + "usage: %s [class [instance]] [-1] [toolkitoptions]\n", + ProgramName); + fprintf (stderr, + "-1 list resources only at the specified level\n"); + fprintf (stderr, + "The number of class and instance elements must be equal.\n"); + exit (1); +} + +/* stolen from Xlib Xrm.c */ +static void PrintBindingQuarkList(bindings, quarks, stream) + XrmBindingList bindings; + XrmQuarkList quarks; + FILE *stream; +{ + Bool firstNameSeen; + + for (firstNameSeen = False; *quarks; bindings++, quarks++) { + if (*bindings == XrmBindLoosely) { + (void) fprintf(stream, "*"); + } else if (firstNameSeen) { + (void) fprintf(stream, "."); + } + firstNameSeen = True; + (void) fputs(XrmQuarkToString(*quarks), stream); + } +} + +/* stolen from Xlib Xrm.c */ +/* output out the entry in correct file syntax */ +/*ARGSUSED*/ +static Bool DumpEntry(db, bindings, quarks, type, value, data) + XrmDatabase *db; + XrmBindingList bindings; + XrmQuarkList quarks; + XrmRepresentation *type; + XrmValuePtr value; + XPointer data; +{ + FILE *stream = (FILE *)data; + register unsigned int i; + register char *s; + register char c; + + if (*type != XrmQString) + (void) putc('!', stream); + PrintBindingQuarkList(bindings, quarks, stream); + s = value->addr; + i = value->size; + if (*type == XrmQString) { + (void) fputs(":\t", stream); + if (i) + i--; + } + else + fprintf(stream, "=%s:\t", XrmRepresentationToString(*type)); + if (i && (*s == ' ' || *s == '\t')) + (void) putc('\\', stream); /* preserve leading whitespace */ + while (i--) { + c = *s++; + if (c == '\n') { + if (i) + (void) fputs("\\n\\\n", stream); + else + (void) fputs("\\n", stream); + } else if (c == '\\') + (void) fputs("\\\\", stream); + else if ((c < ' ' && c != '\t') || + ((unsigned char)c >= 0x7f && (unsigned char)c < 0xa0)) + (void) fprintf(stream, "\\%03o", (unsigned char)c); + else + (void) putc(c, stream); + } + (void) putc('\n', stream); + return False; +} + +main (argc, argv) + int argc; + char **argv; +{ + Widget toplevel; + char *iname = NONAME, *cname = NONAME; + XtAppContext xtcontext; + XrmName names[101]; + XrmClass classes[101]; + int i; + int mode = XrmEnumAllLevels; + + ProgramName = argv[0]; + if (argc > 1 && argv[1][0] != '-') { + cname = argv[1]; + if (argc > 2 && argv[2][0] != '-') + iname = argv[2]; + } + + XrmStringToClassList(cname, classes); + XrmStringToNameList(iname, names); + for (i = 0; names[i]; i++) + ; + if (!i || classes[i] || !classes[i-1]) usage (); + argv[0] = XrmNameToString(names[0]); + + toplevel = XtAppInitialize(&xtcontext, XrmClassToString(classes[0]), + NULL, 0, &argc, argv, NULL, NULL, 0); + + iname = NULL; + cname = NULL; + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i], "-1")) + mode = XrmEnumOneLevel; + else if (argv[i][0] == '-') + usage(); + else if (!cname) + cname = argv[i]; + else if (!iname) + iname = argv[i]; + else + usage(); + } + + if (!iname) { + XtGetApplicationNameAndClass(XtDisplay(toplevel), &iname, &cname); + names[0] = XrmStringToName(iname); + } + + XrmQString = XrmPermStringToQuark("String"); + + XrmEnumerateDatabase(XtDatabase(XtDisplay(toplevel)), + names, classes, mode, + DumpEntry, (XPointer)stdout); + + exit (0); +} diff --git a/appres.man b/appres.man new file mode 100644 index 0000000..8a59e78 --- /dev/null +++ b/appres.man @@ -0,0 +1,89 @@ +.\" $Xorg: appres.man,v 1.4 2001/02/09 02:05:27 xorgcvs Exp $ +.\" Copyright 1993, 1994, 1998 The Open Group +.\" +.\" Permission to use, copy, modify, distribute, and sell this software and its +.\" documentation for any purpose is hereby granted without fee, provided that +.\" the above copyright notice appear in all copies and that both that +.\" copyright notice and this permission notice appear in supporting +.\" documentation. +.\" +.\" 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 OPEN GROUP 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 Open Group 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 Open Group. +.TH APPRES 1 "Release 6.4" "X Version 11" +.SH NAME +appres \- list X application resource database +.SH SYNOPSIS +.B "appres" +[[class [instance]] [\-1] [toolkitoptions] +.SH DESCRIPTION +.PP +The \fIappres\fP program prints the resources seen by an application +(or subhierarchy of an application) with the specified \fIclass\fP and +\fIinstance\fP names. It can be used to determine which +resources a particular program will load. For example, +.sp 1 +.in +.5i +.nf +% appres XTerm +.fi +.in -.5i +.sp 1 +will list the resources that any \fIxterm\fP program will load. +If no application class is specified, the class \fI-AppResTest-\fP is used. +.PP +To match a particular instance name, specify an instance name +explicitly after the class name, or use the normal Xt toolkit option. +For example, +.sp 1 +.in +.5i +.nf +% appres XTerm myxterm +.fi +.in -.5i +or +.in +.5i +.nf +% appres XTerm \-name myxterm +.fi +.in -.5i +.PP +To list resources that match a subhierarchy of an application, specify +hierarchical class and instance names. The number of class and instance +components must be equal, and the instance name should not be +specified with a toolkit option. For example, +.sp 1 +.in +.5i +.nf +% appres Xman.TopLevelShell.Form xman.topBox.form +.fi +.in -.5i +.sp 1 +will list the resources of widgets of \fIxman\fP topBox hierarchy. +To list just the resources matching a specific level in the hierarcy, +use the \-1 option. For example, +.sp 1 +.in +.5i +.nf +% appres XTerm.VT100 xterm.vt100 \-1 +.fi +.in -.5i +.sp 1 +will list the resources matching the \fIxterm\fP vt100 widget. +.SH "SEE ALSO" +.PP +X(1), xrdb(1), listres(1) +.SH AUTHOR +Jim Fulton, MIT X Consortium |