Mercurial > hg > xemacs-beta
comparison src/objects-tty.c @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | 0293115a14e9 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:376386a54a3c |
---|---|
1 /* TTY-specific Lisp objects. | |
2 Copyright (C) 1995 Board of Trustees, University of Illinois. | |
3 Copyright (C) 1995, 1996 Ben Wing. | |
4 | |
5 This file is part of XEmacs. | |
6 | |
7 XEmacs is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
9 Free Software Foundation; either version 2, or (at your option) any | |
10 later version. | |
11 | |
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with XEmacs; see the file COPYING. If not, write to | |
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
20 Boston, MA 02111-1307, USA. */ | |
21 | |
22 /* Synched up with: Not in FSF. */ | |
23 | |
24 #include <config.h> | |
25 #include "lisp.h" | |
26 | |
27 #include "console-tty.h" | |
28 #include "insdel.h" | |
29 #include "objects-tty.h" | |
30 | |
31 /* An alist mapping from color names to a cons of (FG-STRING, BG-STRING). */ | |
32 Lisp_Object Vtty_color_alist; | |
33 #if 0 /* This stuff doesn't quite work yet */ | |
34 Lisp_Object Vtty_dynamic_color_fg; | |
35 Lisp_Object Vtty_dynamic_color_bg; | |
36 #endif | |
37 | |
38 DEFUN ("register-tty-color", Fregister_tty_color, Sregister_tty_color, 3, 3, | |
39 0 /* | |
40 Register COLOR as a recognized TTY color. | |
41 COLOR should be a string. | |
42 Strings FG-STRING and BG-STRING should specify the escape sequences to | |
43 set the foreground and background to the given color, respectively. | |
44 */ ) | |
45 (color, fg_string, bg_string) | |
46 Lisp_Object color, fg_string, bg_string; | |
47 { | |
48 CHECK_STRING (color); | |
49 CHECK_STRING (fg_string); | |
50 CHECK_STRING (bg_string); | |
51 | |
52 color = Fintern (color, Qnil); | |
53 Vtty_color_alist = Fremassq (color, Vtty_color_alist); | |
54 Vtty_color_alist = Fcons (Fcons (color, Fcons (fg_string, bg_string)), | |
55 Vtty_color_alist); | |
56 | |
57 return Qnil; | |
58 } | |
59 | |
60 DEFUN ("unregister-tty-color", Funregister_tty_color, Sunregister_tty_color, | |
61 1, 1, 0 /* | |
62 Unregister COLOR as a recognized TTY color. | |
63 */ ) | |
64 (color) | |
65 Lisp_Object color; | |
66 { | |
67 CHECK_STRING (color); | |
68 | |
69 color = Fintern (color, Qnil); | |
70 Vtty_color_alist = Fremassq (color, Vtty_color_alist); | |
71 return Qnil; | |
72 } | |
73 | |
74 DEFUN ("find-tty-color", Ffind_tty_color, Sfind_tty_color, 1, 1, 0 /* | |
75 Look up COLOR in the list of registered TTY colors. | |
76 If it is found, return a list (FG-STRING BG-STRING) of the escape | |
77 sequences used to set the foreground and background to the color, respectively. | |
78 If it is not found, return nil. | |
79 */ ) | |
80 (color) | |
81 Lisp_Object color; | |
82 { | |
83 Lisp_Object result; | |
84 | |
85 CHECK_STRING (color); | |
86 | |
87 result = Fassq (Fintern (color, Qnil), Vtty_color_alist); | |
88 if (!NILP (result)) | |
89 return list2 (Fcar (Fcdr (result)), Fcdr (Fcdr (result))); | |
90 else | |
91 return Qnil; | |
92 } | |
93 | |
94 DEFUN ("tty-color-list", Ftty_color_list, Stty_color_list, 0, 0, 0 /* | |
95 Return a list of the registered TTY colors. | |
96 */ ) | |
97 () | |
98 { | |
99 Lisp_Object result = Qnil; | |
100 Lisp_Object rest; | |
101 | |
102 LIST_LOOP (rest, Vtty_color_alist) | |
103 { | |
104 result = Fcons (Fsymbol_name (XCAR (XCAR (rest))), result); | |
105 } | |
106 | |
107 return Fnreverse (result); | |
108 } | |
109 | |
110 #if 0 | |
111 | |
112 /* This approach is too simplistic. The problem is that the | |
113 dynamic color settings apply to *all* text in the default color, | |
114 not just the text output after the escape sequence has been given. */ | |
115 | |
116 DEFUN ("set-tty-dynamic-color-specs", Fset_tty_dynamic_color_specs, | |
117 Sset_tty_dynamic_color_specs, 2, 2, 0 /* | |
118 Set the dynamic color specifications for TTY's. | |
119 FG and BG should be either nil or vaguely printf-like strings, | |
120 where each occurrence of %s is replaced with the color name and each | |
121 occurrence of %% is replaced with a single % character. | |
122 */ ) | |
123 (fg, bg) | |
124 Lisp_Object fg, bg; | |
125 { | |
126 if (!NILP (fg)) | |
127 CHECK_STRING (fg); | |
128 if (!NILP (bg)) | |
129 CHECK_STRING (bg); | |
130 | |
131 Vtty_dynamic_color_fg = fg; | |
132 Vtty_dynamic_color_bg = bg; | |
133 | |
134 return Qnil; | |
135 } | |
136 | |
137 DEFUN ("tty-dynamic-color-specs", Ftty_dynamic_color_specs, | |
138 Stty_dynamic_color_specs, 0, 0, 0 /* | |
139 Return the dynamic color specifications for TTY's as a list of (FG BG). | |
140 See `set-tty-dynamic-color-specs'. | |
141 */ ) | |
142 () | |
143 { | |
144 return list2 (Vtty_dynamic_color_fg, Vtty_dynamic_color_bg); | |
145 } | |
146 | |
147 #endif /* 0 */ | |
148 | |
149 static int | |
150 tty_initialize_color_instance (struct Lisp_Color_Instance *c, Lisp_Object name, | |
151 Lisp_Object device, Error_behavior errb) | |
152 { | |
153 Lisp_Object result; | |
154 | |
155 name = Fintern (name, Qnil); | |
156 result = assq_no_quit (name, Vtty_color_alist); | |
157 | |
158 if (NILP (result)) | |
159 { | |
160 #if 0 | |
161 if (!STRINGP (Vtty_dynamic_color_fg) | |
162 && !STRINGP (Vtty_dynamic_color_bg)) | |
163 #endif | |
164 return 0; | |
165 } | |
166 | |
167 /* Don't allocate the data until we're sure that we will succeed. */ | |
168 c->data = malloc_type (struct tty_color_instance_data); | |
169 COLOR_INSTANCE_TTY_SYMBOL (c) = name; | |
170 | |
171 return 1; | |
172 } | |
173 | |
174 static void | |
175 tty_mark_color_instance (struct Lisp_Color_Instance *c, | |
176 void (*markobj) (Lisp_Object)) | |
177 { | |
178 ((markobj) (COLOR_INSTANCE_TTY_SYMBOL (c))); | |
179 } | |
180 | |
181 static void | |
182 tty_print_color_instance (struct Lisp_Color_Instance *c, | |
183 Lisp_Object printcharfun, | |
184 int escapeflag) | |
185 { | |
186 } | |
187 | |
188 static void | |
189 tty_finalize_color_instance (struct Lisp_Color_Instance *c) | |
190 { | |
191 if (c->data) | |
192 xfree (c->data); | |
193 } | |
194 | |
195 static int | |
196 tty_color_instance_equal (struct Lisp_Color_Instance *c1, | |
197 struct Lisp_Color_Instance *c2, | |
198 int depth) | |
199 { | |
200 return (EQ (COLOR_INSTANCE_TTY_SYMBOL (c1), | |
201 COLOR_INSTANCE_TTY_SYMBOL (c2))); | |
202 } | |
203 | |
204 static unsigned long | |
205 tty_color_instance_hash (struct Lisp_Color_Instance *c, int depth) | |
206 { | |
207 return LISP_HASH (COLOR_INSTANCE_TTY_SYMBOL (c)); | |
208 } | |
209 | |
210 static int | |
211 tty_valid_color_name_p (struct device *d, Lisp_Object color) | |
212 { | |
213 return (!NILP (assoc_no_quit (Fintern (color, Qnil), Vtty_color_alist))); | |
214 #if 0 | |
215 || STRINGP (Vtty_dynamic_color_fg) | |
216 || STRINGP (Vtty_dynamic_color_bg) | |
217 #endif | |
218 } | |
219 | |
220 | |
221 static int | |
222 tty_initialize_font_instance (struct Lisp_Font_Instance *f, Lisp_Object name, | |
223 Lisp_Object device, Error_behavior errb) | |
224 { | |
225 Bufbyte *str = string_data (XSTRING (name)); | |
226 Lisp_Object charset = Qnil; | |
227 | |
228 if (strncmp ((CONST char *) str, "normal", 6)) | |
229 return 0; | |
230 str += 6; | |
231 if (*str) | |
232 { | |
233 return 0; | |
234 } | |
235 | |
236 /* Don't allocate the data until we're sure that we will succeed. */ | |
237 f->data = malloc_type (struct tty_font_instance_data); | |
238 FONT_INSTANCE_TTY_CHARSET (f) = charset; | |
239 f->width = 1; | |
240 | |
241 f->proportional_p = 0; | |
242 f->ascent = f->height = 1; | |
243 f->descent = 0; | |
244 | |
245 return 1; | |
246 } | |
247 | |
248 static void | |
249 tty_mark_font_instance (struct Lisp_Font_Instance *f, | |
250 void (*markobj) (Lisp_Object)) | |
251 { | |
252 ((markobj) (FONT_INSTANCE_TTY_CHARSET (f))); | |
253 } | |
254 | |
255 static void | |
256 tty_print_font_instance (struct Lisp_Font_Instance *f, | |
257 Lisp_Object printcharfun, | |
258 int escapeflag) | |
259 { | |
260 } | |
261 | |
262 static void | |
263 tty_finalize_font_instance (struct Lisp_Font_Instance *f) | |
264 { | |
265 if (f->data) | |
266 xfree (f->data); | |
267 } | |
268 | |
269 static Lisp_Object | |
270 tty_list_fonts (Lisp_Object pattern, Lisp_Object device) | |
271 { | |
272 return list1 (build_string ("normal")); | |
273 } | |
274 | |
275 | |
276 /************************************************************************/ | |
277 /* initialization */ | |
278 /************************************************************************/ | |
279 | |
280 void | |
281 syms_of_objects_tty (void) | |
282 { | |
283 defsubr (&Sregister_tty_color); | |
284 defsubr (&Sunregister_tty_color); | |
285 defsubr (&Sfind_tty_color); | |
286 defsubr (&Stty_color_list); | |
287 #if 0 | |
288 defsubr (&Sset_tty_dynamic_color_specs); | |
289 defsubr (&Stty_dynamic_color_specs); | |
290 #endif | |
291 } | |
292 | |
293 void | |
294 console_type_create_objects_tty (void) | |
295 { | |
296 /* object methods */ | |
297 CONSOLE_HAS_METHOD (tty, initialize_color_instance); | |
298 CONSOLE_HAS_METHOD (tty, mark_color_instance); | |
299 CONSOLE_HAS_METHOD (tty, print_color_instance); | |
300 CONSOLE_HAS_METHOD (tty, finalize_color_instance); | |
301 CONSOLE_HAS_METHOD (tty, color_instance_equal); | |
302 CONSOLE_HAS_METHOD (tty, color_instance_hash); | |
303 CONSOLE_HAS_METHOD (tty, valid_color_name_p); | |
304 | |
305 CONSOLE_HAS_METHOD (tty, initialize_font_instance); | |
306 CONSOLE_HAS_METHOD (tty, mark_font_instance); | |
307 CONSOLE_HAS_METHOD (tty, print_font_instance); | |
308 CONSOLE_HAS_METHOD (tty, finalize_font_instance); | |
309 CONSOLE_HAS_METHOD (tty, list_fonts); | |
310 } | |
311 | |
312 void | |
313 vars_of_objects_tty (void) | |
314 { | |
315 staticpro (&Vtty_color_alist); | |
316 Vtty_color_alist = Qnil; | |
317 | |
318 #if 0 | |
319 staticpro (&Vtty_dynamic_color_fg); | |
320 Vtty_dynamic_color_fg = Qnil; | |
321 | |
322 staticpro (&Vtty_dynamic_color_bg); | |
323 Vtty_dynamic_color_bg = Qnil; | |
324 #endif | |
325 } |