annotate src/console-x.c @ 444:576fb035e263 r21-2-37

Import from CVS: tag r21-2-37
author cvs
date Mon, 13 Aug 2007 11:36:19 +0200
parents abe6d1db359e
children 183866b06e0b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Console functions for X windows.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1996 Ben Wing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
23 /* This file Mule-ized by Ben Wing, 7-10-00. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
24
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 /* Authorship:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 Ben Wing: January 1996, for 19.14.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 #include "lisp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 #include "console-x.h"
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
34 #include "buffer.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 #include "process.h" /* canonicalize_host_name */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 #include "redisplay.h" /* for display_arg */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 DEFINE_CONSOLE_TYPE (x);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 x_initially_selected_for_input (struct console *con)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
46 /* Parse a DISPLAY specification like "host:10.0" or ":0" */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 split_up_display_spec (Lisp_Object display, int *hostname_length,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 int *display_length, int *screen_length)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
51 Bufbyte *beg = XSTRING_DATA (display);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
52 Bufbyte *end = beg + XSTRING_LENGTH (display);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
53 Bufbyte *p = end;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
55 while (p > beg)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
57 DEC_CHARPTR (p);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
58 if (charptr_emchar (p) == ':')
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
59 {
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
60 *hostname_length = p - beg;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
62 while (p < end - 1)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
63 {
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
64 INC_CHARPTR (p);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
65 if (charptr_emchar (p) == '.')
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
66 {
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
67 *display_length = p - beg - *hostname_length;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
68 *screen_length = end - p;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
69 return;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
70 }
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
71 }
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
72 /* No '.' found. */
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
73 *display_length = XSTRING_LENGTH (display) - *hostname_length;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
74 *screen_length = 0;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
75 return;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
76 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
79 /* No ':' found. */
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
80 *hostname_length = XSTRING_LENGTH (display);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
81 *display_length = 0;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
82 *screen_length = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 /* Remember, in all of the following functions, we have to verify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 the integrity of our input, because the generic functions don't. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 x_device_to_console_connection (Lisp_Object connection, Error_behavior errb)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 /* Strip the trailing .# off of the connection, if it's there. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 if (NILP (connection))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 int hostname_length, display_length, screen_length;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 if (!ERRB_EQ (errb, ERROR_ME))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 if (!STRINGP (connection))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 return Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 CHECK_STRING (connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 split_up_display_spec (connection, &hostname_length, &display_length,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 &screen_length);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 connection = make_string (XSTRING_DATA (connection),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 hostname_length + display_length);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 return connection;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 get_display_arg_connection (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
119 const Extbyte *disp_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 /* If the user didn't explicitly specify a display to use when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 they called make-x-device, then we first check to see if a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 display was specified on the command line with -display. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 so, we set disp_name to it. Otherwise we use XDisplayName to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 see what DISPLAY is set to. XtOpenDisplay knows how to do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 both of these things, but we need to know the name to use. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 if (display_arg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 int elt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 int argc;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
131 Extbyte **argv;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 Lisp_Object conn;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 make_argc_argv (Vx_initial_argv_list, &argc, &argv);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 disp_name = NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 for (elt = 0; elt < argc; elt++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 if (!strcmp (argv[elt], "-d") || !strcmp (argv[elt], "-display"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 if (elt + 1 == argc)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 suppress_early_error_handler_backtrace = 1;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
144 type_error (Qinvalid_argument,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
145 "-display specified with no arg");
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 disp_name = argv[elt + 1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 /* assert: display_arg is only set if we found the display
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 arg earlier so we can't fail to find it now. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 assert (disp_name != NULL);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
158 conn = build_ext_string (disp_name, Qcommand_argument_encoding);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 free_argc_argv (argv);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 return conn;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 else
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
163 return build_ext_string (XDisplayName (0), Qx_display_name_encoding);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 /* "semi-canonicalize" means convert to a nicer form for printing, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 don't completely canonicalize (into some likely ugly form) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 x_semi_canonicalize_console_connection (Lisp_Object connection,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 Error_behavior errb)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 struct gcpro gcpro1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 GCPRO1 (connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 if (NILP (connection))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 connection = get_display_arg_connection ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 if (!ERRB_EQ (errb, ERROR_ME))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 if (!STRINGP (connection))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 RETURN_UNGCPRO (Qunbound);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 CHECK_STRING (connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 /* Be lenient, allow people to specify a device connection instead of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 a console connection -- e.g. "foo:0.0" instead of "foo:0". This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 only happens in `find-console' and `get-console'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 connection = x_device_to_console_connection (connection, errb);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 /* Check for a couple of standard special cases */
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
197 if (string_char (XSTRING (connection), 0) == ':')
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 connection = concat2 (build_string ("localhost"), connection);
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
199 else
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
200 {
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
201 /* connection =~ s/^unix:/localhost:/; */
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
202 const Bufbyte *p = XSTRING_DATA (connection);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
203 const Bufbyte *end = XSTRING_DATA (connection) + XSTRING_LENGTH (connection);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
204 size_t i;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
205
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
206 for (i = 0; i < sizeof ("unix:") - 1; i++)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
207 {
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
208 if (p == end || charptr_emchar (p) != "unix:"[i])
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
209 goto ok;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
210 INC_CHARPTR (p);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
211 }
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
212
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
213 connection = concat2 (build_string ("localhost:"),
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
214 make_string (p, end - p));
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
215 }
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
216 ok:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 RETURN_UNGCPRO (connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 x_canonicalize_console_connection (Lisp_Object connection, Error_behavior errb)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 Lisp_Object hostname = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 struct gcpro gcpro1, gcpro2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 GCPRO2 (connection, hostname);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 connection = x_semi_canonicalize_console_connection (connection, errb);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 if (UNBOUNDP (connection))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 RETURN_UNGCPRO (Qunbound);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 int hostname_length, display_length, screen_length;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 split_up_display_spec (connection, &hostname_length, &display_length,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 &screen_length);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 hostname = Fsubstring (connection, Qzero, make_int (hostname_length));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 hostname = canonicalize_host_name (hostname);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 connection = concat2 (hostname,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 make_string (XSTRING_DATA (connection)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 + hostname_length, display_length));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 RETURN_UNGCPRO (connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 x_semi_canonicalize_device_connection (Lisp_Object connection,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 Error_behavior errb)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 int hostname_length, display_length, screen_length;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 struct gcpro gcpro1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 GCPRO1 (connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 if (NILP (connection))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 connection = get_display_arg_connection ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 if (!ERRB_EQ (errb, ERROR_ME))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 if (!STRINGP (connection))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 RETURN_UNGCPRO (Qunbound);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 CHECK_STRING (connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 split_up_display_spec (connection, &hostname_length, &display_length,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 &screen_length);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 if (!screen_length)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 connection = concat2 (connection, build_string (".0"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 RETURN_UNGCPRO (connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 x_canonicalize_device_connection (Lisp_Object connection, Error_behavior errb)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 int hostname_length, display_length, screen_length;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 Lisp_Object screen_str = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 struct gcpro gcpro1, gcpro2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 GCPRO2 (screen_str, connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 connection = x_semi_canonicalize_device_connection (connection, errb);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 if (UNBOUNDP (connection))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 RETURN_UNGCPRO (Qunbound);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 split_up_display_spec (connection, &hostname_length, &display_length,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 &screen_length);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
292 screen_str = make_string (XSTRING_DATA (connection)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
293 + hostname_length + display_length, screen_length);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 connection = x_canonicalize_console_connection (connection, errb);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 RETURN_UNGCPRO (concat2 (connection, screen_str));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 console_type_create_x (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 INITIALIZE_CONSOLE_TYPE (x, "x", "console-x-p");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 CONSOLE_HAS_METHOD (x, semi_canonicalize_console_connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 CONSOLE_HAS_METHOD (x, canonicalize_console_connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 CONSOLE_HAS_METHOD (x, semi_canonicalize_device_connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 CONSOLE_HAS_METHOD (x, canonicalize_device_connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 CONSOLE_HAS_METHOD (x, device_to_console_connection);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 CONSOLE_HAS_METHOD (x, initially_selected_for_input);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 reinit_console_type_create_x (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 REINITIALIZE_CONSOLE_TYPE (x);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 }