2
* $Xorg: xlsatoms.c,v 1.4 2001/02/09 02:05:54 xorgcvs Exp $
4
Copyright 1989, 1998 The Open Group
6
Permission to use, copy, modify, distribute, and sell this software and its
7
documentation for any purpose is hereby granted without fee, provided that
8
the above copyright notice appear in all copies and that both that
9
copyright notice and this permission notice appear in supporting
12
The above copyright notice and this permission notice shall be included in
13
all copies or substantial portions of the Software.
15
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
19
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
Except as contained in this notice, the name of The Open Group shall not be
23
used in advertising or otherwise to promote the sale, use or other dealings
24
in this Software without prior written authorization from The Open Group.
26
* Author: Jim Fulton, MIT X Consortium
28
/* $XFree86: xc/programs/xlsatoms/xlsatoms.c,v 1.6 2001/12/14 20:02:08 dawes Exp $ */
34
#include <X11/Xproto.h>
35
#include <X11/Xmu/Error.h>
39
static void do_name ( Display *dpy, char *format, char *name );
40
static int parse_range ( char *range, long *lowp, long *highp );
41
static void do_range ( Display *dpy, char *format, char *range );
42
static int catcher ( Display *dpy, XErrorEvent *err );
43
static void list_atoms ( Display *dpy, char *format, int mask,
44
long low, long high );
49
fprintf (stderr, "usage: %s [-options...]\n\n", ProgramName);
50
fprintf (stderr, "where options include:\n");
52
" -display dpy X server to which to connect\n");
54
" -format string printf-style format to use\n");
56
" -range [num]-[num] atom values to list\n");
58
" -name string name of single atom to print\n");
64
main(int argc, char *argv[])
66
char *displayname = NULL;
67
char *format = "%lu\t%s";
72
ProgramName = argv[0];
74
for (doit = 0; doit < 2; doit++) { /* pre-parse to get display */
75
for (i = 1; i < argc; i++) {
80
case 'd': /* -display dpy */
81
if (++i >= argc) usage ();
82
if (!doit) displayname = argv[i];
84
case 'f': /* -format string */
85
if (++i >= argc) usage ();
86
if (doit) format = argv[i];
88
case 'r': /* -range num-[num] */
89
if (++i >= argc) usage ();
91
do_range (dpy, format, argv[i]);
95
case 'n': /* -name string */
96
if (++i >= argc) usage ();
98
do_name (dpy, format, argv[i]);
107
dpy = XOpenDisplay (displayname);
109
fprintf (stderr, "%s: unable to open display \"%s\"\n",
110
ProgramName, XDisplayName (displayname));
114
if (!didit) /* no options, default is list all */
115
list_atoms(dpy, format, 0, 0, 0);
123
do_name(Display *dpy, char *format, char *name)
125
Atom a = XInternAtom (dpy, name, True);
128
printf (format, (unsigned long) a, name);
131
fprintf (stderr, "%s: no atom named \"%s\" on server \"%s\"\n",
132
ProgramName, name, DisplayString(dpy));
137
#define RangeLow (1 << 0)
138
#define RangeHigh (1 << 1)
141
parse_range(char *range, long *lowp, long *highp)
146
if (!range) { /* NULL means default */
151
dash = strchr(range, '-');
152
if (!dash) dash = strchr(range, ':');
154
if (dash == range) { /* -high */
156
} else { /* low-[high] */
158
*lowp = atoi (range);
163
if (*dash) { /* [low]-high */
164
*highp = atoi (dash);
167
} else { /* number (low == high) */
168
*lowp = *highp = atoi (range);
169
mask |= (RangeLow | RangeHigh);
176
do_range(Display *dpy, char *format, char *range)
181
mask = parse_range (range, &low, &high);
182
list_atoms (dpy, format, mask, low, high);
187
catcher(Display *dpy, XErrorEvent *err)
189
if (err->request_code != X_GetAtomName) {
190
XmuPrintDefaultErrorMessage (dpy, err, stderr);
196
list_atoms(Display *dpy, char *format, int mask, long low, long high)
198
XErrorHandler oldhandler = XSetErrorHandler (catcher);
204
case (RangeLow | RangeHigh):
205
for (; low <= high; low++) {
206
char *s = XGetAtomName (dpy, (Atom)low);
208
printf (format, low, s);
220
char *s = XGetAtomName (dpy, (Atom)low);
222
printf (format, low, s);
232
XSetErrorHandler (oldhandler);