Commit | Line | Data |
---|---|---|
09954f3b | 1 | /* Allocate X colors. Used for testing with dense colormaps. |
b9b14d13 | 2 | Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 |
4e6835db | 3 | Free Software Foundation, Inc. |
09954f3b GM |
4 | |
5 | This file is part of GNU Emacs. | |
6 | ||
9ad5de0c | 7 | GNU Emacs is free software: you can redistribute it and/or modify |
09954f3b | 8 | it under the terms of the GNU General Public License as published by |
9ad5de0c GM |
9 | the Free Software Foundation, either version 3 of the License, or |
10 | (at your option) any later version. | |
09954f3b GM |
11 | |
12 | GNU Emacs is distributed in the hope that it will be useful, | |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
9ad5de0c GM |
18 | along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
19 | ||
09954f3b GM |
20 | |
21 | #include <X11/Xlib.h> | |
22 | #include <stdio.h> | |
23 | #include <stdlib.h> | |
24 | #include <stdarg.h> | |
25 | #include <unistd.h> | |
26 | ||
27 | void | |
28 | fatal (const char *fmt, ...) | |
29 | { | |
30 | va_list ap; | |
31 | ||
32 | va_start (ap, fmt); | |
33 | vfprintf (stderr, fmt, ap); | |
34 | fputc ('\n', stderr); | |
35 | va_end (ap); | |
36 | exit (1); | |
37 | } | |
38 | ||
39 | void | |
40 | usage (const char *progname) | |
41 | { | |
42 | fprintf (stderr, "Usage %s options\n", progname); | |
43 | fprintf (stderr, "-n NCOLORS allcoate NCOLORS colors\n"); | |
44 | exit (1); | |
45 | } | |
46 | ||
47 | int | |
48 | main (int argc, char **argv) | |
49 | { | |
50 | Display *dpy; | |
51 | int opt, ncolors = 0, i; | |
52 | XColor *allocated; | |
53 | int nallocated; | |
54 | XColor color; | |
55 | Colormap cmap; | |
56 | ||
57 | while ((opt = getopt (argc, argv, "n:")) != EOF) | |
58 | switch (opt) | |
59 | { | |
60 | case 'n': | |
61 | ncolors = atoi (optarg); | |
62 | break; | |
177c0ea7 | 63 | |
09954f3b GM |
64 | case '?': |
65 | usage (argv[0]); | |
66 | } | |
67 | ||
68 | if (ncolors == 0) | |
69 | usage (argv[0]); | |
70 | ||
71 | dpy = XOpenDisplay (""); | |
72 | if (dpy == NULL) | |
73 | fatal ("Cannot open display"); | |
74 | cmap = DefaultColormap (dpy, 0); | |
75 | ||
76 | allocated = malloc (ncolors * sizeof *allocated); | |
77 | nallocated = 0; | |
78 | memset (&color, 0, sizeof color); | |
79 | ||
80 | while (nallocated < ncolors | |
81 | && color.red < 65536) | |
82 | { | |
83 | allocated[nallocated] = color; | |
84 | if (XAllocColor (dpy, cmap, &allocated[nallocated])) | |
85 | { | |
86 | for (i = 0; i < nallocated; ++i) | |
87 | if (allocated[i].red == allocated[nallocated].red | |
88 | && allocated[i].green == allocated[nallocated].green | |
89 | && allocated[i].blue == allocated[nallocated].blue) | |
90 | break; | |
91 | ||
92 | if (i == nallocated) | |
93 | { | |
94 | printf ("allocated %d/%d/%d\n", | |
95 | allocated[nallocated].red, | |
96 | allocated[nallocated].green, | |
97 | allocated[nallocated].blue); | |
98 | ++nallocated; | |
99 | } | |
100 | } | |
177c0ea7 | 101 | |
09954f3b GM |
102 | ++color.red; |
103 | ++color.green; | |
104 | ++color.blue; | |
105 | } | |
106 | ||
107 | fprintf (stderr, "Waiting. Press ^C to stop.\n"); | |
108 | while (1) | |
109 | sleep (10); | |
110 | ||
111 | XCloseDisplay (dpy); | |
112 | return 0; | |
113 | } | |
ab5796a9 MB |
114 | |
115 | /* arch-tag: f1be90ac-5b70-43c2-835e-5a6432a25145 | |
116 | (do not change this comment) */ |