kinfo.c (3671B)
1 /* 2 * Copyright © 1999 Keith Packard 3 * 4 * Permission to use, copy, modify, distribute, and sell this software and its 5 * documentation for any purpose is hereby granted without fee, provided that 6 * the above copyright notice appear in all copies and that both that 7 * copyright notice and this permission notice appear in supporting 8 * documentation, and that the name of Keith Packard not be used in 9 * advertising or publicity pertaining to distribution of the software without 10 * specific, written prior permission. Keith Packard makes no 11 * representations about the suitability of this software for any purpose. It 12 * is provided "as is" without express or implied warranty. 13 * 14 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 16 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR 17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 20 * PERFORMANCE OF THIS SOFTWARE. 21 */ 22 23 #ifdef HAVE_DIX_CONFIG_H 24 #include <dix-config.h> 25 #endif 26 #include "kdrive.h" 27 28 KdCardInfo *kdCardInfo; 29 30 KdCardInfo * 31 KdCardInfoAdd(KdCardFuncs * funcs, void *closure) 32 { 33 KdCardInfo *ci, **prev; 34 35 ci = calloc(1, sizeof(KdCardInfo)); 36 if (!ci) 37 return 0; 38 for (prev = &kdCardInfo; *prev; prev = &(*prev)->next); 39 *prev = ci; 40 ci->cfuncs = funcs; 41 ci->closure = closure; 42 ci->screenList = 0; 43 ci->selected = 0; 44 ci->next = 0; 45 return ci; 46 } 47 48 KdCardInfo * 49 KdCardInfoLast(void) 50 { 51 KdCardInfo *ci; 52 53 if (!kdCardInfo) 54 return 0; 55 for (ci = kdCardInfo; ci->next; ci = ci->next); 56 return ci; 57 } 58 59 void 60 KdCardInfoDispose(KdCardInfo * ci) 61 { 62 KdCardInfo **prev; 63 64 for (prev = &kdCardInfo; *prev; prev = &(*prev)->next) 65 if (*prev == ci) { 66 *prev = ci->next; 67 free(ci); 68 break; 69 } 70 } 71 72 KdScreenInfo * 73 KdScreenInfoAdd(KdCardInfo * ci) 74 { 75 KdScreenInfo *si, **prev; 76 int n; 77 78 si = calloc(1, sizeof(KdScreenInfo)); 79 if (!si) 80 return 0; 81 for (prev = &ci->screenList, n = 0; *prev; prev = &(*prev)->next, n++); 82 *prev = si; 83 si->next = 0; 84 si->card = ci; 85 si->mynum = n; 86 return si; 87 } 88 89 void 90 KdScreenInfoDispose(KdScreenInfo * si) 91 { 92 KdCardInfo *ci = si->card; 93 KdScreenInfo **prev; 94 95 for (prev = &ci->screenList; *prev; prev = &(*prev)->next) { 96 if (*prev == si) { 97 *prev = si->next; 98 free(si); 99 if (!ci->screenList) 100 KdCardInfoDispose(ci); 101 break; 102 } 103 } 104 } 105 106 KdPointerInfo * 107 KdNewPointer(void) 108 { 109 KdPointerInfo *pi; 110 int i; 111 112 pi = (KdPointerInfo *) calloc(1, sizeof(KdPointerInfo)); 113 if (!pi) 114 return NULL; 115 116 pi->name = strdup("Generic Pointer"); 117 pi->path = NULL; 118 pi->inputClass = KD_MOUSE; 119 pi->driver = NULL; 120 pi->driverPrivate = NULL; 121 pi->next = NULL; 122 pi->options = NULL; 123 pi->nAxes = 3; 124 pi->nButtons = KD_MAX_BUTTON; 125 for (i = 1; i < KD_MAX_BUTTON; i++) 126 pi->map[i] = i; 127 128 return pi; 129 } 130 131 void 132 KdFreePointer(KdPointerInfo * pi) 133 { 134 free(pi->name); 135 free(pi->path); 136 input_option_free_list(&pi->options); 137 pi->next = NULL; 138 free(pi); 139 } 140 141 void 142 KdFreeKeyboard(KdKeyboardInfo * ki) 143 { 144 free(ki->name); 145 free(ki->path); 146 free(ki->xkbRules); 147 free(ki->xkbModel); 148 free(ki->xkbLayout); 149 free(ki->xkbVariant); 150 free(ki->xkbOptions); 151 input_option_free_list(&ki->options); 152 ki->next = NULL; 153 free(ki); 154 }