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