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