annotate admin/alloc-colors.c @ 43968:7ec801358b7e

(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily) (QClocal, QCremote, QCserver, QCdatagram, QCnowait, QCnoquery,QCstop) (QCcoding, QCoptions, QCfilter, QCsentinel, QClog, QCfeature): New variables. (NETCONN1_P): New macro. (DATAGRAM_SOCKETS): New conditional symbol. (datagram_address): New array. (DATAGRAM_CONN_P, DATAGRAM_CHAN_P): New macros. (status_message): Use concat3. (Fprocess_status): Add `listen' status to doc string. Return `stop' for a stopped network process. (Fset_process_buffer): Update contact plist for network process. (Fset_process_filter): Ditto. Don't enable input for stopped network processes. Server must listen, even if filter is t. (Fset_process_query_on_exit_flag, Fprocess_query_on_exit_flag): New functions. (Fprocess_kill_without_query): Removed. Now defined in simple.el. (Fprocess_contact): Added KEY argument. Handle datagrams. (list_processes_1): Optionally show only processes with the query on exit flag set. Dynamically adjust column widths. Omit tty column if not needed. Report stopped network processes. Identify server and datagram network processes. (Flist_processes): New optional arg `query-only'. (conv_sockaddr_to_lisp, get_lisp_to_sockaddr_size) (conv_lisp_to_sockaddr, set_socket_options) (network_process_featurep, unwind_request_sigio): New helper functions. (Fprocess_datagram_address, Fset_process_datagram_address): (Fset_network_process_options): New lisp functions. (Fopen_network_stream): Removed. Now defined in simple.el. (Fmake_network_process): New lisp function. Code is based on previous Fopen_network_stream, but heavily reworked with new property list based argument list, support for datagrams, server processes, and local sockets in addition to old client-only functionality. (server_accept_connection): New function. (wait_reading_process_input): Use it to handle incoming connects. Do not enable input on a new connection if process is stopped. (read_process_output): Handle datagram sockets. Use 2k buffer for them. (send_process): Handle datagram sockets. (Fstop_process, Fcontinue_process): Apply to network processes. A stopped network process is indicated by setting command field to t . (Fprocess_send_eof): No-op if datagram connection. (Fstatus_notify): Don't read input for a stream server socket or a stopped network process. (init_process): Initialize datagram_address array. (syms_of_process): Intern and staticpro new variables, defsubr new functions.
author Kim F. Storm <storm@cua.dk>
date Sun, 17 Mar 2002 20:20:33 +0000
parents 3dc22c67fd71
children 23a1cea22d13
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
39991
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1 /* Allocate X colors. Used for testing with dense colormaps.
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2 Copyright (C) 2001 Free Software Foundation, Inc.
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
4 This file is part of GNU Emacs.
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9 any later version.
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21 #include <X11/Xlib.h>
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22 #include <stdio.h>
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 #include <stdlib.h>
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 #include <stdarg.h>
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25 #include <unistd.h>
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27 void
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28 fatal (const char *fmt, ...)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29 {
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 va_list ap;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32 va_start (ap, fmt);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33 vfprintf (stderr, fmt, ap);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34 fputc ('\n', stderr);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
35 va_end (ap);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
36 exit (1);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37 }
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
39 void
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40 usage (const char *progname)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
41 {
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
42 fprintf (stderr, "Usage %s options\n", progname);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43 fprintf (stderr, "-n NCOLORS allcoate NCOLORS colors\n");
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
44 exit (1);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
45 }
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47 int
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 main (int argc, char **argv)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49 {
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50 Display *dpy;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51 int opt, ncolors = 0, i;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52 XColor *allocated;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53 int nallocated;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54 XColor color;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55 Colormap cmap;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57 while ((opt = getopt (argc, argv, "n:")) != EOF)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58 switch (opt)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59 {
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 case 'n':
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
61 ncolors = atoi (optarg);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62 break;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
63
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
64 case '?':
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
65 usage (argv[0]);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66 }
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68 if (ncolors == 0)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69 usage (argv[0]);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71 dpy = XOpenDisplay ("");
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
72 if (dpy == NULL)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 fatal ("Cannot open display");
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 cmap = DefaultColormap (dpy, 0);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 allocated = malloc (ncolors * sizeof *allocated);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77 nallocated = 0;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 memset (&color, 0, sizeof color);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80 while (nallocated < ncolors
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81 && color.red < 65536)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82 {
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83 allocated[nallocated] = color;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84 if (XAllocColor (dpy, cmap, &allocated[nallocated]))
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85 {
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 for (i = 0; i < nallocated; ++i)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 if (allocated[i].red == allocated[nallocated].red
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 && allocated[i].green == allocated[nallocated].green
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89 && allocated[i].blue == allocated[nallocated].blue)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90 break;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
92 if (i == nallocated)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 {
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94 printf ("allocated %d/%d/%d\n",
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 allocated[nallocated].red,
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96 allocated[nallocated].green,
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97 allocated[nallocated].blue);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
98 ++nallocated;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
99 }
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
100 }
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
101
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102 ++color.red;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103 ++color.green;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
104 ++color.blue;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
105 }
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
106
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
107 fprintf (stderr, "Waiting. Press ^C to stop.\n");
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
108 while (1)
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
109 sleep (10);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
110
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
111 XCloseDisplay (dpy);
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 return 0;
3dc22c67fd71 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
113 }