5 Bool kdEmulateMiddleButton
;
6 Bool kdRawPointerCoordinates
;
9 int kdScreenPrivateIndex
;
12 KdParseFindNext (char *cur
, char *delim
, char *save
, char *last
)
14 while (*cur
&& !strchr (delim
, *cur
))
26 * Mouse argument syntax:
28 * device,protocol,options...
32 * 2button emulate middle button
33 * {NMO} Reorder buttons
36 KdSaveString (char *str
)
38 char *n
= (char *) xalloc (strlen (str
) + 1);
47 * Parse mouse information. Syntax:
49 * <device>,<nbutton>,<protocol>{,<option>}...
51 * options: {nmo} pointer mapping (e.g. {321})
52 * 2button emulate middle button
53 * 3button dont emulate middle button
56 KdParseMouse (char *arg
)
63 mi
= KdMouseInfoAdd ();
68 mi
->emulateMiddleButton
= kdEmulateMiddleButton
;
69 mi
->transformCoordinates
= !kdRawPointerCoordinates
;
71 for (i
= 0; i
< KD_MAX_BUTTON
; i
++)
76 if (strlen (arg
) >= sizeof (save
))
78 arg
= KdParseFindNext (arg
, ",", save
, &delim
);
81 mi
->name
= KdSaveString (save
);
85 arg
= KdParseFindNext (arg
, ",", save
, &delim
);
89 if ('1' <= save
[0] && save
[0] <= '0' + KD_MAX_BUTTON
&& save
[1] == '\0')
91 mi
->nbutton
= save
[0] - '0';
92 if (mi
->nbutton
> KD_MAX_BUTTON
)
102 arg
= KdParseFindNext (arg
, ",", save
, &delim
);
105 mi
->prot
= KdSaveString (save
);
109 arg
= KdParseFindNext (arg
, ",", save
, &delim
);
114 while (*s
&& *s
!= '}')
116 if ('1' <= *s
&& *s
<= '0' + mi
->nbutton
)
117 mi
->map
[i
] = *s
- '0';
123 else if (!strcmp (save
, "2button"))
124 mi
->emulateMiddleButton
= TRUE
;
125 else if (!strcmp (save
, "3button"))
126 mi
->emulateMiddleButton
= FALSE
;
127 else if (!strcmp (save
, "rawcoord"))
128 mi
->transformCoordinates
= FALSE
;
129 else if (!strcmp (save
, "transform"))
130 mi
->transformCoordinates
= TRUE
;
136 KdMouseInfo
*kdMouseInfo
;
139 KdMouseInfoAdd (void)
141 KdMouseInfo
*mi
, **prev
;
143 mi
= (KdMouseInfo
*) xalloc (sizeof (KdMouseInfo
));
146 bzero (mi
, sizeof (KdMouseInfo
));
147 for (prev
= &kdMouseInfo
; *prev
; prev
= &(*prev
)->next
);
153 KdMouseInfoDispose (KdMouseInfo
*mi
)
157 for (prev
= &kdMouseInfo
; *prev
; prev
= &(*prev
)->next
)