list.c revision b1297603
1b1297603Smrg/*
2b1297603Smrg * Copyright 1996 by Frederic Lepied, France. <Frederic.Lepied@sugix.frmug.org>
3b1297603Smrg *
4b1297603Smrg * Permission to use, copy, modify, distribute, and sell this software and its
5b1297603Smrg * documentation for any purpose is  hereby granted without fee, provided that
6b1297603Smrg * the  above copyright   notice appear  in   all  copies and  that both  that
7b1297603Smrg * copyright  notice   and   this  permission   notice  appear  in  supporting
8b1297603Smrg * documentation, and that   the  name of  Frederic   Lepied not  be  used  in
9b1297603Smrg * advertising or publicity pertaining to distribution of the software without
10b1297603Smrg * specific,  written      prior  permission.     Frederic  Lepied   makes  no
11b1297603Smrg * representations about the suitability of this software for any purpose.  It
12b1297603Smrg * is provided "as is" without express or implied warranty.
13b1297603Smrg *
14b1297603Smrg * FREDERIC  LEPIED DISCLAIMS ALL   WARRANTIES WITH REGARD  TO  THIS SOFTWARE,
15b1297603Smrg * INCLUDING ALL IMPLIED   WARRANTIES OF MERCHANTABILITY  AND   FITNESS, IN NO
16b1297603Smrg * EVENT  SHALL FREDERIC  LEPIED BE   LIABLE   FOR ANY  SPECIAL, INDIRECT   OR
17b1297603Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18b1297603Smrg * DATA  OR PROFITS, WHETHER  IN  AN ACTION OF  CONTRACT,  NEGLIGENCE OR OTHER
19b1297603Smrg * TORTIOUS  ACTION, ARISING    OUT OF OR   IN  CONNECTION  WITH THE USE    OR
20b1297603Smrg * PERFORMANCE OF THIS SOFTWARE.
21b1297603Smrg *
22b1297603Smrg */
23b1297603Smrg
24b1297603Smrg#include "xinput.h"
25b1297603Smrg#include <string.h>
26b1297603Smrg
27b1297603Smrgstatic void
28b1297603Smrgprint_info(XDeviceInfo	*info, Bool shortformat)
29b1297603Smrg{
30b1297603Smrg    int			i,j;
31b1297603Smrg    XAnyClassPtr	any;
32b1297603Smrg    XKeyInfoPtr		k;
33b1297603Smrg    XButtonInfoPtr	b;
34b1297603Smrg    XValuatorInfoPtr	v;
35b1297603Smrg    XAxisInfoPtr	a;
36b1297603Smrg
37b1297603Smrg    printf("\"%s\"\tid=%ld\t[", info->name, info->id);
38b1297603Smrg
39b1297603Smrg    switch (info->use) {
40b1297603Smrg    case IsXPointer:
41b1297603Smrg       printf("XPointer");
42b1297603Smrg       break;
43b1297603Smrg    case IsXKeyboard:
44b1297603Smrg       printf("XKeyboard");
45b1297603Smrg       break;
46b1297603Smrg    case IsXExtensionDevice:
47b1297603Smrg       printf("XExtensionDevice");
48b1297603Smrg       break;
49b1297603Smrg    case IsXExtensionKeyboard:
50b1297603Smrg       printf("XExtensionKeyboard");
51b1297603Smrg       break;
52b1297603Smrg    case IsXExtensionPointer:
53b1297603Smrg       printf("XExtensionPointer");
54b1297603Smrg       break;
55b1297603Smrg    default:
56b1297603Smrg       printf("Unknown class");
57b1297603Smrg       break;
58b1297603Smrg    }
59b1297603Smrg    printf("]\n");
60b1297603Smrg
61b1297603Smrg    if (shortformat)
62b1297603Smrg        return;
63b1297603Smrg
64b1297603Smrg    if (info->num_classes > 0) {
65b1297603Smrg	any = (XAnyClassPtr) (info->inputclassinfo);
66b1297603Smrg	for (i=0; i<info->num_classes; i++) {
67b1297603Smrg	    switch (any->class) {
68b1297603Smrg	    case KeyClass:
69b1297603Smrg		k = (XKeyInfoPtr) any;
70b1297603Smrg		printf("\tNum_keys is %d\n", k->num_keys);
71b1297603Smrg		printf("\tMin_keycode is %d\n", k->min_keycode);
72b1297603Smrg		printf("\tMax_keycode is %d\n", k->max_keycode);
73b1297603Smrg		break;
74b1297603Smrg
75b1297603Smrg	    case ButtonClass:
76b1297603Smrg		b = (XButtonInfoPtr) any;
77b1297603Smrg		printf("\tNum_buttons is %d\n", b->num_buttons);
78b1297603Smrg		break;
79b1297603Smrg
80b1297603Smrg	    case ValuatorClass:
81b1297603Smrg		v = (XValuatorInfoPtr) any;
82b1297603Smrg		a = (XAxisInfoPtr) ((char *) v +
83b1297603Smrg				    sizeof (XValuatorInfo));
84b1297603Smrg		printf("\tNum_axes is %d\n", v->num_axes);
85b1297603Smrg		printf("\tMode is %s\n", (v->mode == Absolute) ? "Absolute" : "Relative");
86b1297603Smrg		printf("\tMotion_buffer is %ld\n", v->motion_buffer);
87b1297603Smrg		for (j=0; j<v->num_axes; j++, a++) {
88b1297603Smrg		    printf("\tAxis %d :\n", j);
89b1297603Smrg		    printf("\t\tMin_value is %d\n", a->min_value);
90b1297603Smrg		    printf("\t\tMax_value is %d\n", a->max_value);
91b1297603Smrg		    printf ("\t\tResolution is %d\n", a->resolution);
92b1297603Smrg		}
93b1297603Smrg		break;
94b1297603Smrg
95b1297603Smrg	    default:
96b1297603Smrg		printf ("unknown class\n");
97b1297603Smrg	    }
98b1297603Smrg	    any = (XAnyClassPtr) ((char *) any + any->length);
99b1297603Smrg	}
100b1297603Smrg    }
101b1297603Smrg}
102b1297603Smrg
103b1297603Smrgint
104b1297603Smrglist(Display	*display,
105b1297603Smrg     int	argc,
106b1297603Smrg     char	*argv[],
107b1297603Smrg     char	*name,
108b1297603Smrg     char	*desc)
109b1297603Smrg{
110b1297603Smrg    XDeviceInfo		*info;
111b1297603Smrg    int			loop;
112b1297603Smrg    int                 shortformat = False;
113b1297603Smrg
114b1297603Smrg    shortformat = (argc == 1 && strcmp(argv[0], "--short") == 0);
115b1297603Smrg
116b1297603Smrg    if (argc == 0 || shortformat) {
117b1297603Smrg	int		num_devices;
118b1297603Smrg
119b1297603Smrg	info = XListInputDevices(display, &num_devices);
120b1297603Smrg
121b1297603Smrg	for(loop=0; loop<num_devices; loop++) {
122b1297603Smrg	    print_info(info+loop, shortformat);
123b1297603Smrg	}
124b1297603Smrg    } else {
125b1297603Smrg	int	ret = EXIT_SUCCESS;
126b1297603Smrg
127b1297603Smrg	for(loop=0; loop<argc; loop++) {
128b1297603Smrg	    info = find_device_info(display, argv[0], False);
129b1297603Smrg
130b1297603Smrg	    if (!info) {
131b1297603Smrg		fprintf(stderr, "unable to find device %s\n", argv[0]);
132b1297603Smrg		ret = EXIT_FAILURE;
133b1297603Smrg	    } else {
134b1297603Smrg		print_info(info, shortformat);
135b1297603Smrg	    }
136b1297603Smrg	}
137b1297603Smrg	return ret;
138b1297603Smrg    }
139b1297603Smrg    return EXIT_SUCCESS;
140b1297603Smrg}
141b1297603Smrg
142b1297603Smrg/* end of list.c */
143