File: | xset.c |
Location: | line 517, column 8 |
Description: | Value stored to 'arg' is never read |
1 | /* |
2 | |
3 | Copyright 1985, 1998 The Open Group |
4 | |
5 | Permission to use, copy, modify, distribute, and sell this software and its |
6 | documentation for any purpose is hereby granted without fee, provided that |
7 | the above copyright notice appear in all copies and that both that |
8 | copyright notice and this permission notice appear in supporting |
9 | documentation. |
10 | |
11 | The above copyright notice and this permission notice shall be included in |
12 | all copies or substantial portions of the Software. |
13 | |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
17 | OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN |
18 | AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
19 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
20 | |
21 | Except as contained in this notice, the name of The Open Group shall not be |
22 | used in advertising or otherwise to promote the sale, use or other dealings |
23 | in this Software without prior written authorization from The Open Group. |
24 | |
25 | */ |
26 | /* Modified by Stephen so keyboard rate is set using XKB extensions */ |
27 | |
28 | #ifdef HAVE_CONFIG_H1 |
29 | # include <config.h> |
30 | #endif |
31 | |
32 | #ifdef HAVE_X11_EXTENSIONS_DPMS_H1 |
33 | # define DPMSExtension |
34 | #endif |
35 | |
36 | #ifdef HAVE_X11_EXTENSIONS_MITMISC_H1 |
37 | # define MITMISC |
38 | #endif |
39 | |
40 | #ifdef HAVE_X11_XKBLIB_H1 |
41 | # define XKB |
42 | #endif |
43 | |
44 | #if defined(HAVE_X11_EXTENSIONS_XF86MISC_H) && defined(HAVE_X11_EXTENSIONS_XF86MSCSTR_H) |
45 | # define XF86MISC |
46 | #endif |
47 | |
48 | #if defined(HAVE_X11_EXTENSIONS_FONTCACHE_H) && defined(HAVE_X11_EXTENSIONS_FONTCACHEP_H) |
49 | # define FONTCACHE |
50 | #endif |
51 | |
52 | #include <stdio.h> |
53 | #include <ctype.h> |
54 | #include <stdarg.h> |
55 | #include <stdlib.h> |
56 | #ifdef HAVE_USLEEP1 |
57 | #include <unistd.h> |
58 | #endif |
59 | #include <X11/Xos.h> |
60 | #include <X11/Xfuncs.h> |
61 | #include <X11/Xlib.h> |
62 | #include <X11/keysym.h> |
63 | #include <X11/Xproto.h> |
64 | #include <X11/Xutil.h> |
65 | #include <X11/Xmu/Error.h> |
66 | #ifdef MITMISC |
67 | # include <X11/extensions/MITMisc.h> |
68 | #endif |
69 | #ifdef DPMSExtension |
70 | # include <X11/extensions/dpms.h> |
71 | #endif /* DPMSExtension */ |
72 | |
73 | #ifdef XF86MISC |
74 | # include <X11/extensions/xf86misc.h> |
75 | # include <X11/extensions/xf86mscstr.h> |
76 | #endif |
77 | #ifdef XKB |
78 | # include <X11/XKBlib.h> |
79 | #endif |
80 | #ifdef FONTCACHE |
81 | # include <X11/extensions/fontcache.h> |
82 | # include <X11/extensions/fontcacheP.h> |
83 | |
84 | static Statusint set_font_cache(Display *, long, long, long); |
85 | static void query_cache_status(Display *dpy); |
86 | #endif |
87 | |
88 | #define ON1 1 |
89 | #define OFF0 0 |
90 | |
91 | #define SERVER_DEFAULT(-1) (-1) |
92 | #define DONT_CHANGE-2 -2 |
93 | |
94 | #define DEFAULT_ON(-50) (-50) |
95 | #define DEFAULT_TIMEOUT(-600) (-600) |
96 | |
97 | #define ALL-1 -1 |
98 | #define TIMEOUT1 1 |
99 | #define INTERVAL2 2 |
100 | #define PREFER_BLANK3 3 |
101 | #define ALLOW_EXP4 4 |
102 | |
103 | #ifdef XF86MISC |
104 | # define KBDDELAY_DEFAULT 500 |
105 | # define KBDRATE_DEFAULT 30 |
106 | #endif |
107 | #ifdef XKB |
108 | # define XKBDDELAY_DEFAULT660 660 |
109 | # define XKBDRATE_DEFAULT(1000/40) (1000/40) |
110 | #endif |
111 | |
112 | #define nextarg(i, argv)argv[i]; if (i >= argc) break; \ |
113 | argv[i]; \ |
114 | if (i >= argc) \ |
115 | break; \ |
116 | |
117 | static char *progName; |
118 | |
119 | static int error_status = 0; |
120 | |
121 | static int is_number(const char *arg, int maximum); |
122 | static void set_click(Display *dpy, int percent); |
123 | static void set_bell_vol(Display *dpy, int percent); |
124 | static void set_bell_pitch(Display *dpy, int pitch); |
125 | static void set_bell_dur(Display *dpy, int duration); |
126 | static void set_font_path(Display *dpy, const char *path, int special, |
127 | int before, int after); |
128 | static void set_led(Display *dpy, int led, int led_mode); |
129 | static void xkbset_led(Display *dpy, const char *led, int led_mode); |
130 | static void set_mouse(Display *dpy, int acc_num, int acc_denom, int threshold); |
131 | static void set_saver(Display *dpy, int mask, int value); |
132 | static void set_repeat(Display *dpy, int key, int auto_repeat_mode); |
133 | static void set_pixels(Display *dpy, unsigned long *pixels, caddr_t *colors, |
134 | int numpixels); |
135 | static void set_lock(Display *dpy, Boolint onoff); |
136 | static const char *on_or_off(int val, int onval, const char *onstr, |
137 | int offval, const char *offstr, |
138 | char buf[], size_t bufsize); |
139 | static void query(Display *dpy); |
140 | static void usage(const char *fmt, ...) _X_NORETURN__attribute((noreturn)) _X_ATTRIBUTE_PRINTF(1,2)__attribute__((__format__(__printf__,1,2))); |
141 | static void error(const char *message) _X_NORETURN__attribute((noreturn)); |
142 | static int local_xerror(Display *dpy, XErrorEvent *rep); |
143 | |
144 | #ifdef XF86MISC |
145 | static void set_repeatrate(Display *dpy, int delay, int rate); |
146 | #endif |
147 | #ifdef XKB |
148 | static void xkbset_repeatrate(Display *dpy, int delay, int rate); |
149 | #endif |
150 | |
151 | int |
152 | main(int argc, char *argv[]) |
153 | { |
154 | const char *arg; |
155 | register int i; |
156 | int percent; |
157 | int acc_num, acc_denom, threshold; |
158 | |
159 | #ifdef DPMSExtension |
160 | CARD16 standby_timeout, suspend_timeout, off_timeout; |
161 | #endif |
162 | int key, auto_repeat_mode; |
163 | XKeyboardControl values; |
164 | |
165 | #define MAX_PIXEL_COUNT512 512 |
166 | unsigned long pixels[MAX_PIXEL_COUNT512]; |
167 | caddr_t colors[MAX_PIXEL_COUNT512]; |
168 | int numpixels = 0; |
169 | char *disp = NULL((void*)0); |
170 | Display *dpy; |
171 | Boolint hasargs = False0; |
172 | |
173 | int miscpresent = 0; |
174 | int xkbpresent = 0; |
175 | |
176 | #ifdef XKB |
177 | int xkbmajor = XkbMajorVersion1, xkbminor = XkbMinorVersion0; |
178 | int xkbopcode, xkbevent, xkberror; |
179 | #else |
180 | #endif |
181 | #ifdef FONTCACHE |
182 | long himark, lowmark, balance; |
183 | #endif |
184 | |
185 | progName = argv[0]; |
186 | for (i = 1; i < argc; i++) { |
187 | arg = argv[i]; |
188 | if (strcmp(arg, "-display") == 0 || strcmp(arg, "-d") == 0) { |
189 | if (++i >= argc) |
190 | usage("missing argument to -display"); |
191 | disp = argv[i]; |
192 | } else if (strcmp(arg, "-version") == 0) { |
193 | puts(PACKAGE_STRING"xset 1.2.3"); |
194 | exit(EXIT_SUCCESS0); |
195 | } else { |
196 | hasargs = True1; |
197 | } |
198 | } |
199 | if (!hasargs) { |
200 | usage(NULL((void*)0)); /* replace with window interface */ |
201 | } |
202 | |
203 | dpy = XOpenDisplay(disp); /* Open display and check for success */ |
204 | if (dpy == NULL((void*)0)) { |
205 | fprintf(stderr__stderrp, "%s: unable to open display \"%s\"\n", |
206 | argv[0], XDisplayName(disp)); |
207 | exit(EXIT_FAILURE1); |
208 | } |
209 | XSetErrorHandler(local_xerror); |
210 | for (i = 1; i < argc;) { |
211 | arg = argv[i++]; |
212 | if (strcmp(arg, "-display") == 0 || strcmp(arg, "-d") == 0) { |
213 | ++i; /* already dealt with */ |
214 | continue; |
215 | } else if (*arg == '-' && *(arg + 1) == 'c') { /* Does arg start |
216 | with "-c"? */ |
217 | set_click(dpy, 0); /* If so, turn click off */ |
218 | } else if (*arg == 'c') { /* Well, does it start |
219 | with "c", then? */ |
220 | percent = SERVER_DEFAULT(-1); /* Default click volume. */ |
221 | if (i >= argc) { |
222 | set_click(dpy, percent); /* set click to default */ |
223 | break; |
224 | } |
225 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
226 | if (strcmp(arg, "on") == 0) { /* Let click be default. */ |
227 | percent = DEFAULT_ON(-50); |
228 | i++; |
229 | } else if (strcmp(arg, "off") == 0) { |
230 | percent = 0; /* Turn it off. */ |
231 | i++; |
232 | } else if (is_number(arg, 100)) { |
233 | percent = atoi(arg); /* Set to spec. volume */ |
234 | i++; |
235 | } |
236 | set_click(dpy, percent); |
237 | } else if (strcmp(arg, "-b") == 0) { |
238 | set_bell_vol(dpy, 0); /* Then turn off bell. */ |
239 | } else if (strcmp(arg, "b") == 0) { |
240 | percent = SERVER_DEFAULT(-1); /* Set bell to default. */ |
241 | if (i >= argc) { |
242 | set_bell_vol(dpy, percent); /* set bell to default */ |
243 | set_bell_pitch(dpy, percent); /* set pitch to default */ |
244 | set_bell_dur(dpy, percent); /* set duration to default */ |
245 | break; |
246 | } |
247 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
248 | if (strcmp(arg, "on") == 0) { /* Let it stay that way. */ |
249 | set_bell_vol(dpy, DEFAULT_ON(-50)); /* set bell on */ |
250 | set_bell_pitch(dpy, percent); /* set pitch to default */ |
251 | set_bell_dur(dpy, percent); /* set duration to default */ |
252 | i++; |
253 | } else if (strcmp(arg, "off") == 0) { |
254 | percent = 0; /* Turn the bell off. */ |
255 | set_bell_vol(dpy, percent); |
256 | i++; |
257 | } else if (is_number(arg, 100)) { /* If volume is given: */ |
258 | percent = atoi(arg); /* set bell appropriately. */ |
259 | set_bell_vol(dpy, percent); |
260 | i++; |
261 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
262 | |
263 | if (is_number(arg, 32767)) { /* If pitch is given: */ |
264 | set_bell_pitch(dpy, atoi(arg)); /* set the bell. */ |
265 | i++; |
266 | |
267 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
268 | if (is_number(arg, 32767)) { /* If duration is given: */ |
269 | set_bell_dur(dpy, atoi(arg)); /* set the bell. */ |
270 | i++; |
271 | } |
272 | } |
273 | } else |
274 | set_bell_vol(dpy, percent); /* set bell to default */ |
275 | } |
276 | #ifdef MITMISC |
277 | else if (strcmp(arg, "bc") == 0) { |
278 | int dummy; |
279 | |
280 | if (XMITMiscQueryExtension(dpy, &dummy, &dummy)) |
281 | XMITMiscSetBugMode(dpy, True1); |
282 | else |
283 | fprintf(stderr__stderrp, |
284 | "server does not have extension for bc option\n"); |
285 | } else if (strcmp(arg, "-bc") == 0) { |
286 | int dummy; |
287 | |
288 | if (XMITMiscQueryExtension(dpy, &dummy, &dummy)) |
289 | XMITMiscSetBugMode(dpy, False0); |
290 | else |
291 | fprintf(stderr__stderrp, |
292 | "server does not have extension for -bc option\n"); |
293 | } |
294 | #endif |
295 | #ifdef FONTCACHE |
296 | else if (strcmp(arg, "fc") == 0) { |
297 | int dummy; |
298 | FontCacheSettings cs; |
299 | |
300 | if (FontCacheQueryExtension(dpy, &dummy, &dummy)) { |
301 | FontCacheGetCacheSettings(dpy, &cs); |
302 | himark = cs.himark / 1024; |
303 | lowmark = cs.lowmark / 1024; |
304 | balance = cs.balance; |
305 | if (i >= argc) { |
306 | /* Set to server's values, and clear all cache |
307 | in side effect */ |
308 | set_font_cache(dpy, himark, lowmark, balance); |
309 | break; |
310 | } |
311 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
312 | if (is_number(arg, 32767)) { /* If hi-mark is given: */ |
313 | himark = atoi(arg); |
314 | i++; |
315 | if (himark <= 0) { |
316 | usage("hi-mark must be greater than 0"); |
317 | } |
318 | if (i >= argc) { |
319 | lowmark = (himark * 70) / 100; |
320 | set_font_cache(dpy, himark, lowmark, balance); |
321 | break; |
322 | } |
323 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
324 | if (is_number(arg, 32767)) { /* If low-mark is given: */ |
325 | lowmark = atoi(arg); |
326 | i++; |
327 | if (lowmark <= 0) { |
328 | usage("low-mark must be greater than 0"); |
329 | } |
330 | if (himark <= lowmark) { |
331 | usage("hi-mark must be greater than low-mark"); |
332 | } |
333 | if (i >= argc) { |
334 | set_font_cache(dpy, himark, lowmark, balance); |
335 | break; |
336 | } |
337 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
338 | if (is_number(arg, 90)) { |
339 | balance = atoi(arg); |
340 | i++; |
341 | if (!(10 <= balance && balance <= 90)) { |
342 | usage("balance must be 10 to 90\n"); |
343 | } |
344 | set_font_cache(dpy, himark, lowmark, balance); |
345 | } |
346 | } |
347 | } else if (strcmp(arg, "s") == 0 |
348 | || strcmp(arg, "status") == 0) { |
349 | /* display cache status */ |
350 | query_cache_status(dpy); |
351 | } |
352 | } else { |
353 | fprintf(stderr__stderrp, |
354 | "server does not have extension for fc option\n"); |
355 | } |
356 | } |
357 | #endif |
358 | else if (strcmp(arg, "fp") == 0) { /* set font path */ |
359 | if (i >= argc) { |
360 | arg = "default"; |
361 | } else { |
362 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
363 | } |
364 | set_font_path(dpy, arg, 1, 0, 0); /* special argument */ |
365 | i++; |
366 | } else if (strcmp(arg, "fp=") == 0) { /* unconditionally set */ |
367 | if (i >= argc) { |
368 | usage("missing fp= argument"); |
369 | } else { |
370 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
371 | } |
372 | set_font_path(dpy, arg, 0, 0, 0); /* not special, set */ |
373 | i++; |
374 | } else if (strcmp(arg, "+fp") == 0) { /* set font path */ |
375 | if (i >= argc) |
376 | usage("missing +fp argument"); |
377 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
378 | set_font_path(dpy, arg, 0, 1, 0); /* not special, prepend */ |
379 | i++; |
380 | } else if (strcmp(arg, "fp+") == 0) { /* set font path */ |
381 | if (i >= argc) |
382 | usage("missing fp+ argument"); |
383 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
384 | set_font_path(dpy, arg, 0, 0, 1); /* not special, append */ |
385 | i++; |
386 | } else if (strcmp(arg, "-fp") == 0) { /* set font path */ |
387 | if (i >= argc) |
388 | usage("missing -fp argument"); |
389 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
390 | set_font_path(dpy, arg, 0, -1, 0); /* not special, preremove */ |
391 | i++; |
392 | } else if (strcmp(arg, "fp-") == 0) { /* set font path */ |
393 | if (i >= argc) |
394 | usage("missing fp- argument"); |
395 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
396 | set_font_path(dpy, arg, 0, 0, -1); /* not special, postremove */ |
397 | i++; |
398 | } else if (strcmp(arg, "-led") == 0) { /* Turn off one or all LEDs */ |
399 | values.led_mode = OFF0; |
400 | values.led = ALL-1; /* None specified */ |
401 | if (i >= argc) { |
402 | set_led(dpy, values.led, values.led_mode); |
403 | break; |
404 | } |
405 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
406 | if (strcmp(arg, "named") == 0) { |
407 | if (++i >= argc) { |
408 | usage("missing argument to led named"); |
409 | } else { |
410 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
411 | xkbset_led(dpy, arg, values.led_mode); |
412 | } |
413 | break; |
414 | } |
415 | if (is_number(arg, 32) && atoi(arg) > 0) { |
416 | values.led = atoi(arg); |
417 | i++; |
418 | } |
419 | set_led(dpy, values.led, values.led_mode); |
420 | } else if (strcmp(arg, "led") == 0) { /* Turn on one or all LEDs */ |
421 | values.led_mode = ON1; |
422 | values.led = ALL-1; |
423 | if (i >= argc) { |
424 | set_led(dpy, values.led, |
425 | values.led_mode); /* set led to def */ |
426 | break; |
427 | } |
428 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
429 | if (strcmp(arg, "named") == 0) { |
430 | if (++i >= argc) { |
431 | usage("missing argument to -led named"); |
432 | } else { |
433 | arg = nextarg(i, argv)argv[i]; if (i >= argc) break;; |
434 | xkbset_led(dpy, arg, values.led_mode); |
435 | } |
436 | break; |
437 | } |
438 | if (strcmp(arg, "on") == 0) { |
439 | i++; |
440 | } else if (strcmp(arg, "off") == 0) { /* ...except in this case. */ |
441 | values.led_mode = OFF0; |
442 | i++; |
443 | } else if (is_number(arg, 32) && atoi(arg) > 0) { |
444 | values.led = atoi(arg); |
445 | i++; |
446 | } |
447 | set_led(dpy, values.led, values.led_mode); |
448 | } |
449 | /* Set pointer (mouse) settings: Acceleration and Threshold. */ |
450 | else if (strcmp(arg, "m") == 0 || strcmp(arg, "mouse") == 0) { |
451 | acc_num = SERVER_DEFAULT(-1); /* restore server defaults */ |
452 | acc_denom = SERVER_DEFAULT(-1); |
453 | threshold = SERVER_DEFAULT(-1); |
454 | if (i >= argc) { |
455 | set_mouse(dpy, acc_num, acc_denom, threshold); |
456 | break; |
457 | } |
458 | arg = argv[i]; |
459 | if (strcmp(arg, "default") == 0) { |
460 | i++; |
461 | } else if (*arg >= '0' && *arg <= '9') { |
462 | acc_denom = 1; |
463 | sscanf(arg, "%d/%d", &acc_num, &acc_denom); |
464 | i++; |
465 | if (i >= argc) { |
466 | set_mouse(dpy, acc_num, acc_denom, threshold); |
467 | break; |
468 | } |
469 | arg = argv[i]; |
470 | if (*arg >= '0' && *arg <= '9') { |
471 | threshold = atoi(arg); /* Set threshold as user specified. */ |
472 | i++; |
473 | } |
474 | } |
475 | set_mouse(dpy, acc_num, acc_denom, threshold); |
476 | } |
477 | #ifdef DPMSExtension |
478 | else if (strcmp(arg, "+dpms") == 0) { /* turn on DPMS */ |
479 | int dummy; |
480 | |
481 | if (DPMSQueryExtension(dpy, &dummy, &dummy)) |
482 | DPMSEnable(dpy); |
483 | else |
484 | fprintf(stderr__stderrp, |
485 | "server does not have extension for +dpms option\n"); |
486 | } else if (strcmp(arg, "-dpms") == 0) { /* shut off DPMS */ |
487 | int dummy; |
488 | |
489 | if (DPMSQueryExtension(dpy, &dummy, &dummy)) |
490 | DPMSDisable(dpy); |
491 | else |
492 | fprintf(stderr__stderrp, |
493 | "server does not have extension for -dpms option\n"); |
494 | |
495 | } else if (strcmp(arg, "dpms") == 0) { /* tune DPMS */ |
496 | int dummy; |
497 | |
498 | if (DPMSQueryExtension(dpy, &dummy, &dummy)) { |
499 | DPMSGetTimeouts(dpy, &standby_timeout, &suspend_timeout, |
500 | &off_timeout); |
501 | if (i >= argc) { |
502 | DPMSEnable(dpy); |
503 | break; |
504 | } |
505 | arg = argv[i]; |
506 | if (*arg >= '0' && *arg <= '9') { |
507 | sscanf(arg, "%hu", &standby_timeout); |
508 | i++; |
509 | arg = argv[i]; |
510 | if ((arg) && (*arg >= '0' && *arg <= '9')) { |
511 | sscanf(arg, "%hu", &suspend_timeout); |
512 | i++; |
513 | arg = argv[i]; |
514 | if ((arg) && (*arg >= '0' && *arg <= '9')) { |
515 | sscanf(arg, "%hu", &off_timeout); |
516 | i++; |
517 | arg = argv[i]; |
Value stored to 'arg' is never read | |
518 | } |
519 | } |
520 | if ((suspend_timeout != 0) |
521 | && (standby_timeout > suspend_timeout)) { |
522 | fprintf(stderr__stderrp, "illegal combination of values\n"); |
523 | fprintf(stderr__stderrp, |
524 | " standby time of %d is greater than suspend time of %d\n", |
525 | standby_timeout, suspend_timeout); |
526 | exit(EXIT_FAILURE1); |
527 | } |
528 | if ((off_timeout != 0) && (suspend_timeout > off_timeout)) { |
529 | fprintf(stderr__stderrp, "illegal combination of values\n"); |
530 | fprintf(stderr__stderrp, |
531 | " suspend time of %d is greater than off time of %d\n", |
532 | suspend_timeout, off_timeout); |
533 | exit(EXIT_FAILURE1); |
534 | } |
535 | if ((suspend_timeout == 0) && (off_timeout != 0) && |
536 | (standby_timeout > off_timeout)) { |
537 | fprintf(stderr__stderrp, "illegal combination of values\n"); |
538 | fprintf(stderr__stderrp, |
539 | " standby time of %d is greater than off time of %d\n", |
540 | standby_timeout, off_timeout); |
541 | exit(EXIT_FAILURE1); |
542 | } |
543 | DPMSEnable(dpy); |
544 | DPMSSetTimeouts(dpy, standby_timeout, suspend_timeout, |
545 | off_timeout); |
546 | } else if (strcmp(arg, "force") == 0) { |
547 | if (++i >= argc) |
548 | usage("missing argument to dpms force"); |
549 | arg = argv[i]; |
550 | /* |
551 | * The calls to usleep below are necessary to |
552 | * delay the actual DPMS mode setting briefly. |
553 | * Without them, it's likely that the mode will be |
554 | * set between the Down and Up key transitions, in |
555 | * which case the Up transition may immediately |
556 | * turn the display back on. |
557 | * |
558 | */ |
559 | |
560 | #ifdef HAVE_USLEEP1 |
561 | # define Usleep(us)usleep((us)) usleep((us)) |
562 | #elif defined(WIN32) |
563 | # define Usleep(us)usleep((us)) Sleep(us) |
564 | #else |
565 | # define Usleep(us)usleep((us)) sleep((us / 1000000 > 0) ? us / 1000000 : 1) |
566 | #endif /* HAVE_USLEEP */ |
567 | |
568 | if (strcmp(arg, "on") == 0) { |
569 | DPMSEnable(dpy); |
570 | DPMSForceLevel(dpy, DPMSModeOn0); |
571 | i++; |
572 | } else if (strcmp(arg, "standby") == 0) { |
573 | DPMSEnable(dpy); |
574 | Usleep(100000)usleep((100000)); |
575 | DPMSForceLevel(dpy, DPMSModeStandby1); |
576 | i++; |
577 | } else if (strcmp(arg, "suspend") == 0) { |
578 | DPMSEnable(dpy); |
579 | Usleep(100000)usleep((100000)); |
580 | DPMSForceLevel(dpy, DPMSModeSuspend2); |
581 | i++; |
582 | } else if (strcmp(arg, "off") == 0) { |
583 | DPMSEnable(dpy); |
584 | Usleep(100000)usleep((100000)); |
585 | DPMSForceLevel(dpy, DPMSModeOff3); |
586 | i++; |
587 | } else { |
588 | fprintf(stderr__stderrp, "bad parameter %s\n", arg); |
589 | i++; |
590 | } |
591 | } |
592 | } else { |
593 | fprintf(stderr__stderrp, |
594 | "server does not have extension for dpms option\n"); |
595 | } |
596 | } |
597 | #endif /* DPMSExtension */ |
598 | else if (strcmp(arg, "s") == 0) { |
599 | if (i >= argc) { |
600 | set_saver(dpy, ALL-1, 0); /* Set everything to default */ |
601 | break; |
602 | } |
603 | arg = argv[i]; |
604 | if (strcmp(arg, "blank") == 0) { /* Alter blanking preference. */ |
605 | set_saver(dpy, PREFER_BLANK3, PreferBlanking1); |
606 | i++; |
607 | } else if (strcmp(arg, "noblank") == 0) { /* Ditto. */ |
608 | set_saver(dpy, PREFER_BLANK3, DontPreferBlanking0); |
609 | i++; |
610 | } else if (strcmp(arg, "expose") == 0) { /* Alter exposure preference. */ |
611 | set_saver(dpy, ALLOW_EXP4, AllowExposures1); |
612 | i++; |
613 | } else if (strcmp(arg, "noexpose") == 0) { /* Ditto. */ |
614 | set_saver(dpy, ALLOW_EXP4, DontAllowExposures0); |
615 | i++; |
616 | } else if (strcmp(arg, "off") == 0) { |
617 | set_saver(dpy, TIMEOUT1, 0); /* Turn off screen saver. */ |
618 | i++; |
619 | if (i >= argc) |
620 | break; |
621 | arg = argv[i]; |
622 | if (strcmp(arg, "off") == 0) { |
623 | set_saver(dpy, INTERVAL2, 0); |
624 | i++; |
625 | } |
626 | } else if (strcmp(arg, "default") == 0) { /* Leave as default. */ |
627 | set_saver(dpy, ALL-1, SERVER_DEFAULT(-1)); |
628 | i++; |
629 | } else if (strcmp(arg, "on") == 0) { /* Turn on. */ |
630 | set_saver(dpy, ALL-1, DEFAULT_TIMEOUT(-600)); |
631 | i++; |
632 | } else if (strcmp(arg, "activate") == 0) { /* force it active */ |
633 | XActivateScreenSaver(dpy); |
634 | i++; |
635 | } else if (strcmp(arg, "reset") == 0) { /* force it inactive */ |
636 | XResetScreenSaver(dpy); |
637 | i++; |
638 | } else if (*arg >= '0' && *arg <= '9') { /* Set as user wishes. */ |
639 | set_saver(dpy, TIMEOUT1, atoi(arg)); |
640 | i++; |
641 | if (i >= argc) |
642 | break; |
643 | arg = argv[i]; |
644 | if (*arg >= '0' && *arg <= '9') { |
645 | set_saver(dpy, INTERVAL2, atoi(arg)); |
646 | i++; |
647 | } |
648 | } |
649 | } else if (strcmp(arg, "-r") == 0) { /* Turn off one or |
650 | all autorepeats */ |
651 | auto_repeat_mode = OFF0; |
652 | key = ALL-1; /* None specified */ |
653 | arg = argv[i]; |
654 | if (i < argc) |
655 | if (is_number(arg, 255)) { |
656 | key = atoi(arg); |
657 | i++; |
658 | } |
659 | set_repeat(dpy, key, auto_repeat_mode); |
660 | } else if (strcmp(arg, "r") == 0) { /* Turn on one or |
661 | all autorepeats */ |
662 | auto_repeat_mode = ON1; |
663 | key = ALL-1; /* None specified */ |
664 | arg = argv[i]; |
665 | if (i < argc) { |
666 | if (strcmp(arg, "on") == 0) { |
667 | i++; |
668 | } else if (strcmp(arg, "off") == 0) { /* ...except in |
669 | this case */ |
670 | auto_repeat_mode = OFF0; |
671 | i++; |
672 | } |
673 | #if defined(XF86MISC) || defined(XKB) |
674 | else if (strcmp(arg, "rate") == 0) { /* ...or this one. */ |
675 | int delay = 0, rate = 0; |
676 | |
677 | #ifdef XF86MISC |
678 | int rate_set = 0; |
679 | #endif |
680 | |
681 | #ifdef XKB |
682 | if (XkbQueryExtension(dpy, &xkbopcode, &xkbevent, |
683 | &xkberror, &xkbmajor, &xkbminor)) { |
684 | delay = XKBDDELAY_DEFAULT660; |
685 | rate = XKBDRATE_DEFAULT(1000/40); |
686 | xkbpresent = 1; |
687 | } |
688 | #endif |
689 | #ifdef XF86MISC |
690 | if (!xkbpresent) { |
691 | int dummy; |
692 | |
693 | if (XF86MiscQueryExtension(dpy, &dummy, &dummy)) { |
694 | delay = KBDDELAY_DEFAULT; |
695 | rate = KBDRATE_DEFAULT; |
696 | miscpresent = 1; |
697 | } |
698 | } |
699 | #endif |
700 | if (!xkbpresent && !miscpresent) |
701 | fprintf(stderr__stderrp, |
702 | "server does not have extension for \"r rate\" option\n"); |
703 | i++; |
704 | arg = argv[i]; |
705 | if (i < argc) { |
706 | if (is_number(arg, 10000) && atoi(arg) > 0) { |
707 | delay = atoi(arg); |
708 | i++; |
709 | arg = argv[i]; |
710 | if (i < argc) { |
711 | if (is_number(arg, 255) && atoi(arg) > 0) { |
712 | rate = atoi(arg); |
713 | i++; |
714 | } |
715 | } |
716 | } |
717 | } |
718 | #ifdef XKB |
719 | if (xkbpresent) { |
720 | xkbset_repeatrate(dpy, delay, 1000 / rate); |
721 | #ifdef XF86MISC |
722 | rate_set = 1; |
723 | #endif |
724 | } |
725 | #endif |
726 | #ifdef XF86MISC |
727 | if (miscpresent && !rate_set) { |
728 | set_repeatrate(dpy, delay, rate); |
729 | } |
730 | #endif |
731 | } |
732 | #endif |
733 | else if (is_number(arg, 255)) { |
734 | key = atoi(arg); |
735 | i++; |
736 | } |
737 | } |
738 | set_repeat(dpy, key, auto_repeat_mode); |
739 | } else if (strcmp(arg, "p") == 0) { |
740 | if (i + 1 >= argc) |
741 | usage("missing argument to p"); |
742 | arg = argv[i]; |
743 | if (numpixels >= MAX_PIXEL_COUNT512) |
744 | usage("more than %d pixels specified", MAX_PIXEL_COUNT512); |
745 | if (*arg >= '0' && *arg <= '9') |
746 | pixels[numpixels] = strtoul(arg, NULL((void*)0), 10); |
747 | else |
748 | usage("invalid pixel number %s", arg); |
749 | i++; |
750 | colors[numpixels] = argv[i]; |
751 | i++; |
752 | numpixels++; |
753 | } else if (strcmp(arg, "-k") == 0) { |
754 | set_lock(dpy, OFF0); |
755 | } else if (strcmp(arg, "k") == 0) { |
756 | set_lock(dpy, ON1); |
757 | } else if (strcmp(arg, "q") == 0 || strcmp(arg, "-q") == 0) { |
758 | query(dpy); |
759 | } else |
760 | usage("unknown option %s", arg); |
761 | } |
762 | |
763 | if (numpixels) |
764 | set_pixels(dpy, pixels, colors, numpixels); |
765 | |
766 | XCloseDisplay(dpy); |
767 | |
768 | exit(error_status); /* Done. We can go home now. */ |
769 | } |
770 | |
771 | static int |
772 | is_number(const char *arg, int maximum) |
773 | { |
774 | const char *p; |
775 | |
776 | if (arg[0] == '-' && arg[1] == '1' && arg[2] == '\0') |
777 | return (1); |
778 | for (p = arg; isdigit(*p); p++) ; |
779 | if (*p || atoi(arg) > maximum) |
780 | return (0); |
781 | return (1); |
782 | } |
783 | |
784 | /* These next few functions do the real work (xsetting things). |
785 | */ |
786 | static void |
787 | set_click(Display *dpy, int percent) |
788 | { |
789 | XKeyboardControl values; |
790 | XKeyboardState kbstate; |
791 | |
792 | values.key_click_percent = percent; |
793 | if (percent == DEFAULT_ON(-50)) |
794 | values.key_click_percent = SERVER_DEFAULT(-1); |
795 | XChangeKeyboardControl(dpy, KBKeyClickPercent(1L<<0), &values); |
796 | if (percent == DEFAULT_ON(-50)) { |
797 | XGetKeyboardControl(dpy, &kbstate); |
798 | if (!kbstate.key_click_percent) { |
799 | values.key_click_percent = -percent; |
800 | XChangeKeyboardControl(dpy, KBKeyClickPercent(1L<<0), &values); |
801 | } |
802 | } |
803 | return; |
804 | } |
805 | |
806 | static void |
807 | set_bell_vol(Display *dpy, int percent) |
808 | { |
809 | XKeyboardControl values; |
810 | XKeyboardState kbstate; |
811 | |
812 | values.bell_percent = percent; |
813 | if (percent == DEFAULT_ON(-50)) |
814 | values.bell_percent = SERVER_DEFAULT(-1); |
815 | XChangeKeyboardControl(dpy, KBBellPercent(1L<<1), &values); |
816 | if (percent == DEFAULT_ON(-50)) { |
817 | XGetKeyboardControl(dpy, &kbstate); |
818 | if (!kbstate.bell_percent) { |
819 | values.bell_percent = -percent; |
820 | XChangeKeyboardControl(dpy, KBBellPercent(1L<<1), &values); |
821 | } |
822 | } |
823 | return; |
824 | } |
825 | |
826 | static void |
827 | set_bell_pitch(Display *dpy, int pitch) |
828 | { |
829 | XKeyboardControl values; |
830 | |
831 | values.bell_pitch = pitch; |
832 | XChangeKeyboardControl(dpy, KBBellPitch(1L<<2), &values); |
833 | return; |
834 | } |
835 | |
836 | static void |
837 | set_bell_dur(Display *dpy, int duration) |
838 | { |
839 | XKeyboardControl values; |
840 | |
841 | values.bell_duration = duration; |
842 | XChangeKeyboardControl(dpy, KBBellDuration(1L<<3), &values); |
843 | return; |
844 | } |
845 | |
846 | /* |
847 | * Set, add, or subtract the path according to before and after flags: |
848 | * |
849 | * before after action |
850 | * |
851 | * 0 0 FontPath := path |
852 | * -1 0 FontPath := current - path |
853 | * 0 -1 FontPath := current - path |
854 | * 1 0 FontPath := path + current |
855 | * 0 1 FontPath := current + path |
856 | */ |
857 | static void |
858 | set_font_path(Display *dpy, const char *path, int special, int before, int after) |
859 | { |
860 | char *directories = NULL((void*)0); |
861 | char **directoryList = NULL((void*)0); |
862 | unsigned int ndirs = 0; |
863 | char **currentList = NULL((void*)0); |
864 | unsigned int ncurrent = 0; |
865 | |
866 | if (special) { |
867 | if (strcmp(path, "default") == 0) { |
868 | XSetFontPath(dpy, NULL((void*)0), 0); |
869 | return; |
870 | } |
871 | if (strcmp(path, "rehash") == 0) { |
872 | currentList = XGetFontPath(dpy, (int *) &ncurrent); |
873 | if (!currentList) { |
874 | fprintf(stderr__stderrp, "%s: unable to get current font path.\n", |
875 | progName); |
876 | return; |
877 | } |
878 | XSetFontPath(dpy, currentList, (int) ncurrent); |
879 | XFreeFontPath(currentList); |
880 | return; |
881 | } |
882 | /* |
883 | * for now, fall though and process keyword and directory list for |
884 | * compatibility with previous versions. |
885 | */ |
886 | } |
887 | |
888 | /* |
889 | * parse the path list. If before or after is non-zero, we'll need |
890 | * the current value. |
891 | */ |
892 | |
893 | if (before != 0 || after != 0) { |
894 | currentList = XGetFontPath(dpy, (int *) &ncurrent); |
895 | if (!currentList) { |
896 | fprintf(stderr__stderrp, "%s: unable to get old font path.\n", progName); |
897 | before = after = 0; |
898 | } |
899 | } |
900 | |
901 | { |
902 | /* count the number of directories in path */ |
903 | const char *cp = path; |
904 | |
905 | ndirs = 1; |
906 | while ((cp = strchr(cp, ',')) != NULL((void*)0)) { |
907 | ndirs++; |
908 | cp++; |
909 | } |
910 | } |
911 | |
912 | directoryList = (char **)malloc(ndirs * sizeof(char *)); |
913 | if (!directoryList) |
914 | error("out of memory for font path directory list"); |
915 | |
916 | directories = strdup(path); |
917 | if (!directories) |
918 | error("out of memory for font path directory string"); |
919 | else |
920 | { |
921 | /* mung the path and set directoryList pointers */ |
922 | unsigned int i = 0; |
923 | char *cp = directories; |
924 | |
925 | directoryList[i++] = cp; |
926 | while ((cp = strchr(cp, ',')) != NULL((void*)0)) { |
927 | directoryList[i++] = cp + 1; |
928 | *cp++ = '\0'; |
929 | } |
930 | if (i != ndirs) { |
931 | fprintf(stderr__stderrp, |
932 | "%s: internal error, only parsed %d of %d directories.\n", |
933 | progName, i, ndirs); |
934 | exit(EXIT_FAILURE1); |
935 | } |
936 | } |
937 | |
938 | /* |
939 | * now we have have parsed the input path, so we can set it |
940 | */ |
941 | |
942 | if (before == 0 && after == 0) { |
943 | XSetFontPath(dpy, directoryList, (int) ndirs); |
944 | } |
945 | |
946 | /* if adding to list, build a superset */ |
947 | if (before > 0 || after > 0) { |
948 | unsigned int nnew = ndirs + ncurrent; |
949 | char **newList = (char **)malloc(nnew * sizeof(char *)); |
950 | |
951 | if (!newList) |
952 | error("out of memory"); |
953 | if (before > 0) { /* new + current */ |
954 | memmove((char *)newList, (char *)directoryList,__builtin___memmove_chk ((char *)newList, (char *)directoryList , (ndirs * sizeof(char *)), __builtin_object_size ((char *)newList , 0)) |
955 | (ndirs * sizeof(char *)))__builtin___memmove_chk ((char *)newList, (char *)directoryList , (ndirs * sizeof(char *)), __builtin_object_size ((char *)newList , 0)); |
956 | memmove((char *)(newList + ndirs), (char *)currentList,__builtin___memmove_chk ((char *)(newList + ndirs), (char *)currentList , (ncurrent * sizeof(char *)), __builtin_object_size ((char * )(newList + ndirs), 0)) |
957 | (ncurrent * sizeof(char *)))__builtin___memmove_chk ((char *)(newList + ndirs), (char *)currentList , (ncurrent * sizeof(char *)), __builtin_object_size ((char * )(newList + ndirs), 0)); |
958 | XSetFontPath(dpy, newList, (int) nnew); |
959 | } else if (after > 0) { |
960 | memmove((char *)newList, (char *)currentList,__builtin___memmove_chk ((char *)newList, (char *)currentList , (ncurrent * sizeof(char *)), __builtin_object_size ((char * )newList, 0)) |
961 | (ncurrent * sizeof(char *)))__builtin___memmove_chk ((char *)newList, (char *)currentList , (ncurrent * sizeof(char *)), __builtin_object_size ((char * )newList, 0)); |
962 | memmove((char *)(newList + ncurrent), (char *)directoryList,__builtin___memmove_chk ((char *)(newList + ncurrent), (char * )directoryList, (ndirs * sizeof(char *)), __builtin_object_size ((char *)(newList + ncurrent), 0)) |
963 | (ndirs * sizeof(char *)))__builtin___memmove_chk ((char *)(newList + ncurrent), (char * )directoryList, (ndirs * sizeof(char *)), __builtin_object_size ((char *)(newList + ncurrent), 0)); |
964 | XSetFontPath(dpy, newList,(int) nnew); |
965 | } |
966 | free((char *)newList); |
967 | } |
968 | |
969 | /* if deleting from list, build one the same size */ |
970 | if (before < 0 || after < 0) { |
971 | unsigned int i, j; |
972 | unsigned int nnew = 0; |
973 | char **newList = (char **)malloc(ncurrent * sizeof(char *)); |
974 | |
975 | if (!newList) |
976 | error("out of memory"); |
977 | for (i = 0; i < ncurrent; i++) { |
978 | for (j = 0; j < ndirs; j++) { |
979 | if (strcmp(currentList[i], directoryList[j]) == 0) |
980 | break; |
981 | } |
982 | /* if we ran out, then insert into new list */ |
983 | if (j == ndirs) |
984 | newList[nnew++] = currentList[i]; |
985 | } |
986 | if (nnew == ncurrent) { |
987 | fprintf(stderr__stderrp, |
988 | "%s: warning, no entries deleted from font path.\n", |
989 | progName); |
990 | } |
991 | XSetFontPath(dpy, newList, (int) nnew); |
992 | free((char *)newList); |
993 | } |
994 | |
995 | free(directories); |
996 | if (directoryList) |
997 | free((char *)directoryList); |
998 | if (currentList) |
999 | XFreeFontPath(currentList); |
1000 | |
1001 | return; |
1002 | } |
1003 | |
1004 | static void |
1005 | set_led(Display *dpy, int led, int led_mode) |
1006 | { |
1007 | XKeyboardControl values; |
1008 | |
1009 | values.led_mode = led_mode; |
1010 | if (led != ALL-1) { |
1011 | values.led = led; |
1012 | XChangeKeyboardControl(dpy, KBLed(1L<<4) | KBLedMode(1L<<5), &values); |
1013 | } else { |
1014 | XChangeKeyboardControl(dpy, KBLedMode(1L<<5), &values); |
1015 | } |
1016 | return; |
1017 | } |
1018 | |
1019 | static void |
1020 | xkbset_led(Display *dpy, const char *led, int led_mode) |
1021 | { |
1022 | #ifndef XKB |
1023 | error(" xset was not built with XKB Extension support\n"); |
1024 | #else |
1025 | int xkbmajor = XkbMajorVersion1, xkbminor = XkbMinorVersion0; |
1026 | int xkbopcode, xkbevent, xkberror; |
1027 | Atom ledatom; |
1028 | |
1029 | if (XkbQueryExtension(dpy, &xkbopcode, &xkbevent, &xkberror, |
1030 | &xkbmajor, &xkbminor)) { |
1031 | ledatom = XInternAtom(dpy, led, True1); |
1032 | if ((ledatom != None0L) && |
1033 | XkbGetNamedIndicator(dpy, ledatom, NULL((void*)0), NULL((void*)0), NULL((void*)0), NULL((void*)0))) { |
1034 | if (XkbSetNamedIndicator(dpy, ledatom, True1, |
1035 | led_mode, False0, NULL((void*)0)) == False0) { |
1036 | printf("Failed to set led named %s %s\n", |
1037 | led, led_mode ? "on" : "off"); |
1038 | } |
1039 | } else { |
1040 | fprintf(stderr__stderrp,"%s: Invalid led name: %s\n", progName, led); |
1041 | } |
1042 | } else { |
1043 | printf(" Server does not have the XKB Extension\n"); |
1044 | } |
1045 | #endif |
1046 | return; |
1047 | } |
1048 | |
1049 | static void |
1050 | set_mouse(Display *dpy, int acc_num, int acc_denom, int threshold) |
1051 | { |
1052 | int do_accel = True1, do_threshold = True1; |
1053 | |
1054 | if (acc_num == DONT_CHANGE-2) /* what an incredible crock... */ |
1055 | do_accel = False0; |
1056 | if (threshold == DONT_CHANGE-2) |
1057 | do_threshold = False0; |
1058 | if (acc_num < 0) /* shouldn't happen */ |
1059 | acc_num = SERVER_DEFAULT(-1); |
1060 | if (acc_denom <= 0) /* prevent divide by zero */ |
1061 | acc_denom = SERVER_DEFAULT(-1); |
1062 | if (threshold < 0) |
1063 | threshold = SERVER_DEFAULT(-1); |
1064 | XChangePointerControl(dpy, do_accel, do_threshold, acc_num, |
1065 | acc_denom, threshold); |
1066 | return; |
1067 | } |
1068 | |
1069 | static void |
1070 | set_saver(Display *dpy, int mask, int value) |
1071 | { |
1072 | int timeout, interval, prefer_blank, allow_exp; |
1073 | |
1074 | XGetScreenSaver(dpy, &timeout, &interval, &prefer_blank, &allow_exp); |
1075 | if (mask == TIMEOUT1) |
1076 | timeout = value; |
1077 | if (mask == INTERVAL2) |
1078 | interval = value; |
1079 | if (mask == PREFER_BLANK3) |
1080 | prefer_blank = value; |
1081 | if (mask == ALLOW_EXP4) |
1082 | allow_exp = value; |
1083 | if (mask == ALL-1) { |
1084 | timeout = SERVER_DEFAULT(-1); |
1085 | interval = SERVER_DEFAULT(-1); |
1086 | prefer_blank = DefaultBlanking2; |
1087 | allow_exp = DefaultExposures2; |
1088 | } |
1089 | XSetScreenSaver(dpy, timeout, interval, prefer_blank, allow_exp); |
1090 | if (mask == ALL-1 && value == DEFAULT_TIMEOUT(-600)) { |
1091 | XGetScreenSaver(dpy, &timeout, &interval, &prefer_blank, &allow_exp); |
1092 | if (!timeout) |
1093 | XSetScreenSaver(dpy, -DEFAULT_TIMEOUT(-600), interval, prefer_blank, |
1094 | allow_exp); |
1095 | } |
1096 | return; |
1097 | } |
1098 | |
1099 | static void |
1100 | set_repeat(Display *dpy, int key, int auto_repeat_mode) |
1101 | { |
1102 | XKeyboardControl values; |
1103 | |
1104 | values.auto_repeat_mode = auto_repeat_mode; |
1105 | if (key != ALL-1) { |
1106 | values.key = key; |
1107 | XChangeKeyboardControl(dpy, KBKey(1L<<6) | KBAutoRepeatMode(1L<<7), &values); |
1108 | } else { |
1109 | XChangeKeyboardControl(dpy, KBAutoRepeatMode(1L<<7), &values); |
1110 | } |
1111 | return; |
1112 | } |
1113 | |
1114 | #ifdef XF86MISC |
1115 | static void |
1116 | set_repeatrate(Display *dpy, int delay, int rate) |
1117 | { |
1118 | XF86MiscKbdSettings values; |
1119 | |
1120 | XF86MiscGetKbdSettings(dpy, &values); |
1121 | values.delay = delay; |
1122 | values.rate = rate; |
1123 | XF86MiscSetKbdSettings(dpy, &values); |
1124 | return; |
1125 | } |
1126 | #endif |
1127 | |
1128 | #ifdef XKB |
1129 | static void |
1130 | xkbset_repeatrate(Display *dpy, int delay, int interval) |
1131 | { |
1132 | XkbDescPtr xkb = XkbAllocKeyboard(); |
1133 | |
1134 | if (!xkb) |
1135 | return; |
1136 | XkbGetControls(dpy, XkbRepeatKeysMask(1L << 0), xkb); |
1137 | xkb->ctrls->repeat_delay = delay; |
1138 | xkb->ctrls->repeat_interval = interval; |
1139 | XkbSetControls(dpy, XkbRepeatKeysMask(1L << 0), xkb); |
1140 | XkbFreeKeyboard(xkb, 0, True1); |
1141 | } |
1142 | #endif |
1143 | |
1144 | static void |
1145 | set_pixels(Display *dpy, unsigned long *pixels, caddr_t * colors, |
1146 | int numpixels) |
1147 | { |
1148 | XColor def; |
1149 | int scr = DefaultScreen(dpy)(((_XPrivDisplay)(dpy))->default_screen); |
1150 | Visual *visual = DefaultVisual(dpy, scr)((&((_XPrivDisplay)(dpy))->screens[scr])->root_visual ); |
1151 | Colormap cmap = DefaultColormap(dpy, scr)((&((_XPrivDisplay)(dpy))->screens[scr])->cmap); |
1152 | unsigned long max_cells = (unsigned long) DisplayCells(dpy, scr)(((&((_XPrivDisplay)(dpy))->screens[scr])->root_visual )->map_entries); |
1153 | XVisualInfo viproto, *vip; |
1154 | int nvisuals = 0; |
1155 | const char *visual_type = NULL((void*)0); |
1156 | int i; |
1157 | |
1158 | viproto.visualid = XVisualIDFromVisual(visual); |
1159 | vip = XGetVisualInfo(dpy, VisualIDMask0x1, &viproto, &nvisuals); |
1160 | if (!vip) { |
1161 | fprintf(stderr__stderrp, "%s: Can't get visual for visualID 0x%x\n", |
1162 | progName, (unsigned int)viproto.visualid); |
1163 | return; |
1164 | } |
1165 | |
1166 | switch (vip->class) { |
1167 | case GrayScale1: |
1168 | case PseudoColor3: |
1169 | break; |
1170 | case TrueColor4: |
1171 | visual_type = "TrueColor"; |
1172 | /* fall through */ |
1173 | case DirectColor5: |
1174 | max_cells *= max_cells * max_cells; |
1175 | break; |
1176 | case StaticGray0: |
1177 | visual_type = "StaticGray"; |
1178 | break; |
1179 | case StaticColor2: |
1180 | visual_type = "StaticColor"; |
1181 | break; |
1182 | default: |
1183 | fprintf(stderr__stderrp, "%s: unknown visual class type %d\n", |
1184 | progName, vip->class); |
1185 | numpixels = 0; |
1186 | } |
1187 | |
1188 | if (visual_type) { |
1189 | fprintf(stderr__stderrp, |
1190 | "%s: cannot set pixel values in read-only %s visuals\n", |
1191 | progName, visual_type); |
1192 | } else { |
1193 | for (i = 0; i < numpixels; i++) { |
1194 | def.pixel = pixels[i]; |
1195 | if (def.pixel >= max_cells) |
1196 | fprintf(stderr__stderrp, |
1197 | "%s: pixel value %ld out of colormap range 0 through %ld\n", |
1198 | progName, def.pixel, max_cells - 1); |
1199 | else { |
1200 | if (XParseColor(dpy, cmap, colors[i], &def)) |
1201 | XStoreColor(dpy, cmap, &def); |
1202 | else |
1203 | fprintf(stderr__stderrp, "%s: invalid color \"%s\"\n", progName, |
1204 | colors[i]); |
1205 | } |
1206 | } |
1207 | } |
1208 | |
1209 | XFree((char *)vip); |
1210 | |
1211 | return; |
1212 | } |
1213 | |
1214 | static void |
1215 | set_lock(Display *dpy, Boolint onoff) |
1216 | { |
1217 | XModifierKeymap *mods; |
1218 | |
1219 | mods = XGetModifierMapping(dpy); |
1220 | |
1221 | if (onoff) |
1222 | mods = |
1223 | XInsertModifiermapEntry(mods, (KeyCode) XK_Caps_Lock0xffe5, |
1224 | LockMapIndex1); |
1225 | else |
1226 | mods = |
1227 | XDeleteModifiermapEntry(mods, (KeyCode) XK_Caps_Lock0xffe5, |
1228 | LockMapIndex1); |
1229 | XSetModifierMapping(dpy, mods); |
1230 | XFreeModifiermap(mods); |
1231 | return; |
1232 | } |
1233 | |
1234 | #ifdef FONTCACHE |
1235 | static Statusint |
1236 | set_font_cache(Display *dpy, long himark, long lowmark, long balance) |
1237 | { |
1238 | FontCacheSettings cs; |
1239 | Statusint status; |
1240 | |
1241 | cs.himark = himark * 1024; |
1242 | cs.lowmark = lowmark * 1024; |
1243 | cs.balance = balance; |
1244 | status = FontCacheChangeCacheSettings(dpy, &cs); |
1245 | |
1246 | return status; |
1247 | } |
1248 | #endif |
1249 | |
1250 | static const char * |
1251 | on_or_off(int val, int onval, const char *onstr, |
1252 | int offval, const char *offstr, char buf[], size_t bufsize) |
1253 | { |
1254 | if (val == onval) |
1255 | return onstr; |
1256 | else if (val == offval) |
1257 | return offstr; |
1258 | |
1259 | buf[0] = '\0'; |
1260 | snprintf(buf, bufsize, "<%d>", val)__builtin___snprintf_chk (buf, bufsize, 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "<%d>", val); |
1261 | return buf; |
1262 | } |
1263 | |
1264 | /* This is the information-getting function for telling the user what the |
1265 | * current "xsettings" are. |
1266 | */ |
1267 | static void |
1268 | query(Display *dpy) |
1269 | { |
1270 | int scr = DefaultScreen(dpy)(((_XPrivDisplay)(dpy))->default_screen); |
1271 | XKeyboardState values; |
1272 | int acc_num, acc_denom, threshold; |
1273 | int timeout, interval, prefer_blank, allow_exp; |
1274 | |
1275 | #ifdef XF86MISC |
1276 | XF86MiscKbdSettings kbdinfo; |
1277 | #endif |
1278 | #ifdef XKB |
1279 | XkbDescPtr xkb; |
1280 | int xkbmajor = XkbMajorVersion1, xkbminor = XkbMinorVersion0; |
1281 | int xkbopcode, xkbevent, xkberror; |
1282 | #endif |
1283 | char **font_path; |
1284 | int npaths; |
1285 | int i, j; |
1286 | char buf[20]; /* big enough for 16 bit number */ |
1287 | |
1288 | XGetKeyboardControl(dpy, &values); |
1289 | XGetPointerControl(dpy, &acc_num, &acc_denom, &threshold); |
1290 | XGetScreenSaver(dpy, &timeout, &interval, &prefer_blank, &allow_exp); |
1291 | font_path = XGetFontPath(dpy, &npaths); |
1292 | |
1293 | printf("Keyboard Control:\n"); |
1294 | printf |
1295 | (" auto repeat: %s key click percent: %d LED mask: %08lx\n", |
1296 | on_or_off(values.global_auto_repeat, AutoRepeatModeOn1, "on", |
1297 | AutoRepeatModeOff0, "off", buf, sizeof(buf)), |
1298 | values.key_click_percent, values.led_mask); |
1299 | #ifdef XKB |
1300 | if (XkbQueryExtension(dpy, &xkbopcode, &xkbevent, &xkberror, &xkbmajor, |
1301 | &xkbminor) |
1302 | && (xkb = XkbAllocKeyboard()) != NULL((void*)0)) { |
1303 | if (XkbGetNames(dpy, XkbIndicatorNamesMask(1<<8), xkb) == Success0) { |
1304 | Atom iatoms[XkbNumIndicators32]; |
1305 | char *iatomnames[XkbNumIndicators32]; |
1306 | Boolint istates[XkbNumIndicators32]; |
1307 | int inds[XkbNumIndicators32]; |
1308 | int activecount = 0; |
1309 | int maxnamelen = 0; |
1310 | int columnwidth; |
1311 | int linewidth; |
1312 | |
1313 | printf(" XKB indicators:\n"); |
1314 | |
1315 | for (i = 0, j = 0; i < XkbNumIndicators32; i++) { |
1316 | if (xkb->names->indicators[i] != None0L) { |
1317 | iatoms[j++] = xkb->names->indicators[i]; |
1318 | } |
1319 | } |
1320 | |
1321 | if (XGetAtomNames(dpy, iatoms, j, iatomnames)) { |
1322 | for (i = 0; i < j; i++) { |
1323 | if (XkbGetNamedIndicator(dpy, iatoms[i], &inds[i], |
1324 | &istates[i], NULL((void*)0), NULL((void*)0))) { |
1325 | int namelen = (int) strlen(iatomnames[i]); |
1326 | if (namelen > maxnamelen) { |
1327 | maxnamelen = namelen; |
1328 | } |
1329 | activecount++; |
1330 | } else { |
1331 | inds[i] = -1; |
1332 | } |
1333 | } |
1334 | } |
1335 | |
1336 | if (activecount == 0) { |
1337 | printf(" None\n"); |
1338 | } else { |
1339 | |
1340 | #define XKB_IND_FORMAT_CHARS13 13 /* size of other chars in ' DD: X: off' */ |
1341 | #define MAX_LINE_WIDTH76 76 |
1342 | |
1343 | columnwidth = maxnamelen + XKB_IND_FORMAT_CHARS13; |
1344 | if (columnwidth > MAX_LINE_WIDTH76) { |
1345 | columnwidth = MAX_LINE_WIDTH76; |
1346 | } |
1347 | |
1348 | for (i = 0, linewidth = 0; i < activecount ; i++) { |
1349 | if (inds[i] != -1) { |
1350 | int spaces = columnwidth - XKB_IND_FORMAT_CHARS13 |
1351 | - (int) strlen(iatomnames[i]); |
1352 | |
1353 | if (spaces < 0) |
1354 | spaces = 0; |
1355 | |
1356 | linewidth += printf(" %02d: %s: %*s", |
1357 | inds[i], iatomnames[i], |
1358 | spaces + 3, |
1359 | on_or_off(istates[i], |
1360 | True1, "on ", |
1361 | False0, "off", |
1362 | buf, sizeof(buf))); |
1363 | } |
1364 | if (linewidth > (MAX_LINE_WIDTH76 - columnwidth)) { |
1365 | printf("\n"); |
1366 | linewidth = 0; |
1367 | } |
1368 | } |
1369 | if (linewidth > 0) { |
1370 | printf("\n"); |
1371 | } |
1372 | } |
1373 | } |
1374 | if (XkbGetControls(dpy, XkbRepeatKeysMask(1L << 0), xkb) == Success0) { |
1375 | printf(" auto repeat delay: %d repeat rate: %d\n", |
1376 | xkb->ctrls->repeat_delay, |
1377 | 1000 / xkb->ctrls->repeat_interval); |
1378 | } |
1379 | } |
1380 | #ifdef XF86MISC |
1381 | else |
1382 | #endif |
1383 | #endif |
1384 | #ifdef XF86MISC |
1385 | { |
1386 | int dummy; |
1387 | |
1388 | if (XF86MiscQueryExtension(dpy, &dummy, &dummy) && |
1389 | XF86MiscGetKbdSettings(dpy, &kbdinfo)) |
1390 | printf(" auto repeat delay: %d repeat rate: %d\n", |
1391 | kbdinfo.delay, kbdinfo.rate); |
1392 | } |
1393 | #endif |
1394 | printf(" auto repeating keys: "); |
1395 | for (i = 0; i < 4; i++) { |
1396 | if (i) |
1397 | printf(" "); |
1398 | for (j = 0; j < 8; j++) { |
1399 | printf("%02x", (unsigned char)values.auto_repeats[i * 8 + j]); |
1400 | } |
1401 | printf("\n"); |
1402 | } |
1403 | printf(" bell percent: %d bell pitch: %d bell duration: %d\n", |
1404 | values.bell_percent, values.bell_pitch, values.bell_duration); |
1405 | |
1406 | printf("Pointer Control:\n"); |
1407 | printf(" acceleration: %d/%d threshold: %d\n", |
1408 | acc_num, acc_denom, threshold); |
1409 | |
1410 | printf("Screen Saver:\n"); |
1411 | printf(" prefer blanking: %s ", |
1412 | on_or_off(prefer_blank, PreferBlanking1, "yes", |
1413 | DontPreferBlanking0, "no", buf, sizeof(buf))); |
1414 | printf("allow exposures: %s\n", |
1415 | on_or_off(allow_exp, AllowExposures1, "yes", |
1416 | DontAllowExposures0, "no", buf, sizeof(buf))); |
1417 | printf(" timeout: %d cycle: %d\n", timeout, interval); |
1418 | |
1419 | printf("Colors:\n"); |
1420 | printf(" default colormap: 0x%lx BlackPixel: 0x%lx WhitePixel: 0x%lx\n", |
1421 | DefaultColormap(dpy, scr)((&((_XPrivDisplay)(dpy))->screens[scr])->cmap), BlackPixel(dpy, scr)((&((_XPrivDisplay)(dpy))->screens[scr])->black_pixel ), WhitePixel(dpy,((&((_XPrivDisplay)(dpy))->screens[scr])->white_pixel ) |
1422 | scr)((&((_XPrivDisplay)(dpy))->screens[scr])->white_pixel )); |
1423 | |
1424 | printf("Font Path:\n"); |
1425 | if (npaths) { |
1426 | printf(" %s", *font_path++); |
1427 | for (--npaths; npaths; npaths--) |
1428 | printf(",%s", *font_path++); |
1429 | printf("\n"); |
1430 | } else { |
1431 | printf(" (empty)\n"); |
1432 | } |
1433 | |
1434 | #ifdef MITMISC |
1435 | { |
1436 | int dummy; |
1437 | |
1438 | if (XMITMiscQueryExtension(dpy, &dummy, &dummy)) { |
1439 | if (XMITMiscGetBugMode(dpy)) |
1440 | printf("Bug Mode: compatibility mode is enabled\n"); |
1441 | else |
1442 | printf("Bug Mode: compatibility mode is disabled\n"); |
1443 | } |
1444 | } |
1445 | #endif |
1446 | #ifdef DPMSExtension |
1447 | { |
1448 | |
1449 | int dummy; |
1450 | CARD16 standby, suspend, off; |
1451 | BOOL onoff; |
1452 | CARD16 state; |
1453 | |
1454 | printf("DPMS (Energy Star):\n"); |
1455 | if (DPMSQueryExtension(dpy, &dummy, &dummy)) { |
1456 | if (DPMSCapable(dpy)) { |
1457 | DPMSGetTimeouts(dpy, &standby, &suspend, &off); |
1458 | printf(" Standby: %d Suspend: %d Off: %d\n", |
1459 | standby, suspend, off); |
1460 | DPMSInfo(dpy, &state, &onoff); |
1461 | if (onoff) { |
1462 | printf(" DPMS is Enabled\n"); |
1463 | switch (state) { |
1464 | case DPMSModeOn0: |
1465 | printf(" Monitor is On\n"); |
1466 | break; |
1467 | case DPMSModeStandby1: |
1468 | printf(" Monitor is in Standby\n"); |
1469 | break; |
1470 | case DPMSModeSuspend2: |
1471 | printf(" Monitor is in Suspend\n"); |
1472 | break; |
1473 | case DPMSModeOff3: |
1474 | printf(" Monitor is Off\n"); |
1475 | break; |
1476 | default: |
1477 | printf(" Unrecognized response from server\n"); |
1478 | } |
1479 | } else |
1480 | printf(" DPMS is Disabled\n"); |
1481 | } else |
1482 | printf(" Display is not capable of DPMS\n"); |
1483 | } else { |
1484 | printf(" Server does not have the DPMS Extension\n"); |
1485 | } |
1486 | } |
1487 | #endif |
1488 | #ifdef FONTCACHE |
1489 | { |
1490 | int dummy; |
1491 | FontCacheSettings cs; |
1492 | int himark, lowmark, balance; |
1493 | |
1494 | printf("Font cache:\n"); |
1495 | if (FontCacheQueryExtension(dpy, &dummy, &dummy)) { |
1496 | if (FontCacheGetCacheSettings(dpy, &cs)) { |
1497 | himark = cs.himark / 1024; |
1498 | lowmark = cs.lowmark / 1024; |
1499 | balance = cs.balance; |
1500 | printf(" hi-mark (KB): %d low-mark (KB): %d balance (%%): %d\n", |
1501 | himark, lowmark, balance); |
1502 | } |
1503 | } else { |
1504 | printf(" Server does not have the FontCache Extension\n"); |
1505 | } |
1506 | } |
1507 | #endif |
1508 | #ifdef XF86MISC |
1509 | { |
1510 | int dummy; |
1511 | int maj, min; |
1512 | XF86MiscFilePaths paths; |
1513 | |
1514 | if (XF86MiscQueryExtension(dpy, &dummy, &dummy) && |
1515 | XF86MiscQueryVersion(dpy, &maj, &min) && |
1516 | ((maj > 0) || (maj == 0 && min >= 7)) && |
1517 | XF86MiscGetFilePaths(dpy, &paths)) { |
1518 | printf("File paths:\n"); |
1519 | printf(" Config file: %s\n", paths.configfile); |
1520 | printf(" Modules path: %s\n", paths.modulepath); |
1521 | printf(" Log file: %s\n", paths.logfile); |
1522 | } |
1523 | } |
1524 | #endif |
1525 | |
1526 | return; |
1527 | } |
1528 | |
1529 | #ifdef FONTCACHE |
1530 | /* |
1531 | * query_cache_status() |
1532 | * |
1533 | * This is the information-getting function for telling the user what the |
1534 | * current settings and statistics are. |
1535 | */ |
1536 | static void |
1537 | query_cache_status(Display *dpy) |
1538 | { |
1539 | int dummy; |
1540 | FontCacheSettings cs; |
1541 | FontCacheStatistics cstats; |
1542 | int himark, lowmark, balance; |
1543 | |
1544 | if (FontCacheQueryExtension(dpy, &dummy, &dummy)) { |
1545 | if (FontCacheGetCacheSettings(dpy, &cs)) { |
1546 | printf("font cache settings:\n"); |
1547 | himark = cs.himark / 1024; |
1548 | lowmark = cs.lowmark / 1024; |
1549 | balance = cs.balance; |
1550 | printf(" hi-mark (KB): %d low-mark (KB): %d balance (%%): %d\n", |
1551 | himark, lowmark, balance); |
1552 | } |
1553 | if (FontCacheGetCacheStatistics(dpy, &cstats)) { |
1554 | printf("font cache statistics:\n"); |
1555 | printf(" cache purged: %ld\n", cstats.purge_runs); |
1556 | printf(" cache status: %ld\n", cstats.purge_stat); |
1557 | printf(" cache balance: %ld\n", cstats.balance); |
1558 | printf("font cache entry statistics:\n"); |
1559 | printf(" hits: %ld\n", cstats.f.hits); |
1560 | printf(" misshits: %ld\n", cstats.f.misshits); |
1561 | printf(" purged: %ld\n", cstats.f.purged); |
1562 | printf(" usage: %ld\n", cstats.f.usage); |
1563 | printf("large bitmap cache entry statistics:\n"); |
1564 | printf(" hits: %ld\n", cstats.v.hits); |
1565 | printf(" misshits: %ld\n", cstats.v.misshits); |
1566 | printf(" purged: %ld\n", cstats.v.purged); |
1567 | printf(" usage: %ld\n", cstats.v.usage); |
1568 | } |
1569 | } else { |
1570 | printf("Server does not have the FontCache Extension\n"); |
1571 | } |
1572 | } |
1573 | #endif |
1574 | |
1575 | /* This is the usage function */ |
1576 | |
1577 | static void |
1578 | usage(const char *fmt, ...) |
1579 | { |
1580 | va_list ap; |
1581 | |
1582 | if (fmt) { |
1583 | fprintf(stderr__stderrp, "%s: ", progName); |
1584 | va_start(ap, fmt)__builtin_va_start(ap, fmt); |
1585 | vfprintf(stderr__stderrp, fmt, ap); |
1586 | va_end(ap)__builtin_va_end(ap); |
1587 | fprintf(stderr__stderrp, "\n\n"); |
1588 | |
1589 | } |
1590 | |
1591 | fprintf(stderr__stderrp, "usage: %s [-display host:dpy] option ...\n%s", progName, |
1592 | " To turn bell off:\n" |
1593 | "\t-b b off b 0\n" |
1594 | " To set bell volume, pitch and duration:\n" |
1595 | "\t b [vol [pitch [dur]]] b on\n" |
1596 | #ifdef MITMISC |
1597 | " To disable bug compatibility mode:\n" |
1598 | "\t-bc\n" |
1599 | " To enable bug compatibility mode:\n" |
1600 | "\tbc\n" |
1601 | #endif |
1602 | " To turn keyclick off:\n" |
1603 | "\t-c c off c 0\n" |
1604 | " To set keyclick volume:\n" |
1605 | "\t c [0-100] c on\n" |
1606 | #ifdef DPMSExtension |
1607 | " To control Energy Star (DPMS) features:\n" |
1608 | "\t-dpms Energy Star features off\n" |
1609 | "\t+dpms Energy Star features on\n" |
1610 | "\t dpms [standby [suspend [off]]] \n" |
1611 | "\t force standby \n" |
1612 | "\t force suspend \n" |
1613 | "\t force off \n" |
1614 | "\t force on \n" |
1615 | "\t (also implicitly enables DPMS features) \n" |
1616 | "\t a timeout value of zero disables the mode \n" |
1617 | #endif |
1618 | #ifdef FONTCACHE |
1619 | " To control font cache:\n" |
1620 | "\t fc [hi-mark [low-mark [balance]]]\n" |
1621 | "\t both mark values specified in KB\n" |
1622 | "\t balance value specified in percent (10 - 90)\n" |
1623 | " Show font cache statistics:\n" |
1624 | "\t fc s\n" |
1625 | #endif |
1626 | " To set the font path:\n" |
1627 | "\t fp= path[,path...]\n" |
1628 | " To restore the default font path:\n" |
1629 | "\t fp default\n" |
1630 | " To have the server reread font databases:\n" |
1631 | "\t fp rehash\n" |
1632 | " To remove elements from font path:\n" |
1633 | "\t-fp path[,path...] fp- path[,path...]\n" |
1634 | " To prepend or append elements to font path:\n" |
1635 | "\t+fp path[,path...] fp+ path[,path...]\n" |
1636 | " To set LED states off or on:\n" |
1637 | "\t-led [1-32] led off\n" |
1638 | "\t led [1-32] led on\n" |
1639 | #ifdef XKB |
1640 | "\t-led named 'name' led off\n" |
1641 | "\t led named 'name' led on\n" |
1642 | #endif |
1643 | " To set mouse acceleration and threshold:\n" |
1644 | "\t m [acc_mult[/acc_div] [thr]] m default\n" |
1645 | " To set pixel colors:\n" |
1646 | "\t p pixel_value color_name\n" |
1647 | " To turn auto-repeat off or on:\n" |
1648 | "\t-r [keycode] r off\n" |
1649 | "\t r [keycode] r on\n" |
1650 | #if defined(XF86MISC) || defined(XKB) |
1651 | "\t r rate [delay [rate]]\n" |
1652 | #endif |
1653 | " For screen-saver control:\n" |
1654 | "\t s [timeout [cycle]] s default s on\n" |
1655 | "\t s blank s noblank s off\n" |
1656 | "\t s expose s noexpose\n" |
1657 | "\t s activate s reset\n" |
1658 | " For status information: q\n" |
1659 | " To print version: -version\n" |
1660 | ); |
1661 | exit(EXIT_SUCCESS0); |
1662 | } |
1663 | |
1664 | static void |
1665 | error(const char *message) |
1666 | { |
1667 | fprintf(stderr__stderrp, "%s: %s\n", progName, message); |
1668 | exit(EXIT_FAILURE1); |
1669 | } |
1670 | |
1671 | static int |
1672 | local_xerror(Display *dpy, XErrorEvent *rep) |
1673 | { |
1674 | if (rep->request_code == X_SetFontPath51 && rep->error_code == BadValue2) { |
1675 | fprintf(stderr__stderrp, |
1676 | "%s: bad font path element (#%ld), possible causes are:\n", |
1677 | progName, rep->resourceid); |
1678 | fprintf(stderr__stderrp, |
1679 | " Directory does not exist or has wrong permissions\n" |
1680 | " Directory missing fonts.dir\n" |
1681 | " Incorrect font server address or syntax\n"); |
1682 | } else if (rep->request_code == X_StoreColors89) { |
1683 | switch (rep->error_code) { |
1684 | case BadAccess10: |
1685 | fprintf(stderr__stderrp, |
1686 | "%s: pixel not allocated read/write\n", progName); |
1687 | break; |
1688 | case BadValue2: |
1689 | fprintf(stderr__stderrp, |
1690 | "%s: cannot store in pixel 0x%lx, invalid pixel number\n", |
1691 | progName, rep->resourceid); |
1692 | break; |
1693 | default: |
1694 | XmuPrintDefaultErrorMessage(dpy, rep, stderr__stderrp); |
1695 | } |
1696 | } else |
1697 | XmuPrintDefaultErrorMessage(dpy, rep, stderr__stderrp); |
1698 | |
1699 | error_status = -1; |
1700 | |
1701 | return (0); |
1702 | } |