Mercurial > hg > xemacs-beta
annotate src/objects-tty.c @ 4952:19a72041c5ed
Mule-izing, various fixes related to char * arguments
-------------------- ChangeLog entries follow: --------------------
modules/ChangeLog addition:
2010-01-26 Ben Wing <ben@xemacs.org>
* postgresql/postgresql.c:
* postgresql/postgresql.c (CHECK_LIVE_CONNECTION):
* postgresql/postgresql.c (print_pgresult):
* postgresql/postgresql.c (Fpq_conn_defaults):
* postgresql/postgresql.c (Fpq_connectdb):
* postgresql/postgresql.c (Fpq_connect_start):
* postgresql/postgresql.c (Fpq_result_status):
* postgresql/postgresql.c (Fpq_res_status):
Mule-ize large parts of it.
2010-01-26 Ben Wing <ben@xemacs.org>
* ldap/eldap.c (print_ldap):
* ldap/eldap.c (allocate_ldap):
Use write_ascstring().
src/ChangeLog addition:
2010-01-26 Ben Wing <ben@xemacs.org>
* alloc.c:
* alloc.c (build_ascstring):
* alloc.c (build_msg_cistring):
* alloc.c (staticpro_1):
* alloc.c (staticpro_name):
* alloc.c (staticpro_nodump_1):
* alloc.c (staticpro_nodump_name):
* alloc.c (unstaticpro_nodump_1):
* alloc.c (mcpro_1):
* alloc.c (mcpro_name):
* alloc.c (object_memory_usage_stats):
* alloc.c (common_init_alloc_early):
* alloc.c (init_alloc_once_early):
* buffer.c (print_buffer):
* buffer.c (vars_of_buffer):
* buffer.c (common_init_complex_vars_of_buffer):
* buffer.c (init_initial_directory):
* bytecode.c (invalid_byte_code):
* bytecode.c (print_compiled_function):
* bytecode.c (mark_compiled_function):
* chartab.c (print_table_entry):
* chartab.c (print_char_table):
* config.h.in:
* console-gtk.c:
* console-gtk.c (gtk_device_to_console_connection):
* console-gtk.c (gtk_semi_canonicalize_console_connection):
* console-gtk.c (gtk_canonicalize_console_connection):
* console-gtk.c (gtk_semi_canonicalize_device_connection):
* console-gtk.c (gtk_canonicalize_device_connection):
* console-stream.c (stream_init_frame_1):
* console-stream.c (vars_of_console_stream):
* console-stream.c (init_console_stream):
* console-x.c (x_semi_canonicalize_console_connection):
* console-x.c (x_semi_canonicalize_device_connection):
* console-x.c (x_canonicalize_device_connection):
* console-x.h:
* data.c (eq_with_ebola_notice):
* data.c (Fsubr_interactive):
* data.c (Fnumber_to_string):
* data.c (digit_to_number):
* device-gtk.c (gtk_init_device):
* device-msw.c (print_devmode):
* device-x.c (x_event_name):
* dialog-msw.c (handle_directory_dialog_box):
* dialog-msw.c (handle_file_dialog_box):
* dialog-msw.c (vars_of_dialog_mswindows):
* doc.c (weird_doc):
* doc.c (Fsnarf_documentation):
* doc.c (vars_of_doc):
* dumper.c (pdump):
* dynarr.c:
* dynarr.c (Dynarr_realloc):
* editfns.c (Fuser_real_login_name):
* editfns.c (get_home_directory):
* elhash.c (print_hash_table_data):
* elhash.c (print_hash_table):
* emacs.c (main_1):
* emacs.c (vars_of_emacs):
* emodules.c:
* emodules.c (_emodules_list):
* emodules.c (Fload_module):
* emodules.c (Funload_module):
* emodules.c (Flist_modules):
* emodules.c (find_make_module):
* emodules.c (attempt_module_delete):
* emodules.c (emodules_load):
* emodules.c (emodules_doc_subr):
* emodules.c (emodules_doc_sym):
* emodules.c (syms_of_module):
* emodules.c (vars_of_module):
* emodules.h:
* eval.c (print_subr):
* eval.c (signal_call_debugger):
* eval.c (build_error_data):
* eval.c (signal_error):
* eval.c (maybe_signal_error):
* eval.c (signal_continuable_error):
* eval.c (maybe_signal_continuable_error):
* eval.c (signal_error_2):
* eval.c (maybe_signal_error_2):
* eval.c (signal_continuable_error_2):
* eval.c (maybe_signal_continuable_error_2):
* eval.c (signal_ferror):
* eval.c (maybe_signal_ferror):
* eval.c (signal_continuable_ferror):
* eval.c (maybe_signal_continuable_ferror):
* eval.c (signal_ferror_with_frob):
* eval.c (maybe_signal_ferror_with_frob):
* eval.c (signal_continuable_ferror_with_frob):
* eval.c (maybe_signal_continuable_ferror_with_frob):
* eval.c (syntax_error):
* eval.c (syntax_error_2):
* eval.c (maybe_syntax_error):
* eval.c (sferror):
* eval.c (sferror_2):
* eval.c (maybe_sferror):
* eval.c (invalid_argument):
* eval.c (invalid_argument_2):
* eval.c (maybe_invalid_argument):
* eval.c (invalid_constant):
* eval.c (invalid_constant_2):
* eval.c (maybe_invalid_constant):
* eval.c (invalid_operation):
* eval.c (invalid_operation_2):
* eval.c (maybe_invalid_operation):
* eval.c (invalid_change):
* eval.c (invalid_change_2):
* eval.c (maybe_invalid_change):
* eval.c (invalid_state):
* eval.c (invalid_state_2):
* eval.c (maybe_invalid_state):
* eval.c (wtaerror):
* eval.c (stack_overflow):
* eval.c (out_of_memory):
* eval.c (print_multiple_value):
* eval.c (issue_call_trapping_problems_warning):
* eval.c (backtrace_specials):
* eval.c (backtrace_unevalled_args):
* eval.c (Fbacktrace):
* eval.c (warn_when_safe):
* event-Xt.c (modwarn):
* event-Xt.c (modbarf):
* event-Xt.c (check_modifier):
* event-Xt.c (store_modifier):
* event-Xt.c (emacs_Xt_format_magic_event):
* event-Xt.c (describe_event):
* event-gtk.c (dragndrop_data_received):
* event-gtk.c (store_modifier):
* event-gtk.c (gtk_reset_modifier_mapping):
* event-msw.c (dde_eval_string):
* event-msw.c (Fdde_alloc_advise_item):
* event-msw.c (mswindows_dde_callback):
* event-msw.c (FROB):
* event-msw.c (emacs_mswindows_format_magic_event):
* event-stream.c (external_debugging_print_event):
* event-stream.c (execute_help_form):
* event-stream.c (vars_of_event_stream):
* events.c (print_event_1):
* events.c (print_event):
* events.c (event_equal):
* extents.c (print_extent_1):
* extents.c (print_extent):
* extents.c (vars_of_extents):
* faces.c (print_face):
* faces.c (complex_vars_of_faces):
* file-coding.c:
* file-coding.c (print_coding_system):
* file-coding.c (print_coding_system_in_print_method):
* file-coding.c (default_query_method):
* file-coding.c (find_coding_system):
* file-coding.c (make_coding_system_1):
* file-coding.c (chain_print):
* file-coding.c (undecided_print):
* file-coding.c (gzip_print):
* file-coding.c (vars_of_file_coding):
* file-coding.c (complex_vars_of_file_coding):
* fileio.c:
* fileio.c (report_file_type_error):
* fileio.c (report_error_with_errno):
* fileio.c (report_file_error):
* fileio.c (barf_or_query_if_file_exists):
* fileio.c (vars_of_fileio):
* floatfns.c (matherr):
* fns.c (print_bit_vector):
* fns.c (Fmapconcat):
* fns.c (add_suffix_to_symbol):
* fns.c (add_prefix_to_symbol):
* frame-gtk.c:
* frame-gtk.c (Fgtk_window_id):
* frame-x.c (def):
* frame-x.c (x_cde_transfer_callback):
* frame.c:
* frame.c (Fmake_frame):
* gc.c (show_gc_cursor_and_message):
* gc.c (vars_of_gc):
* glyphs-eimage.c (png_instantiate):
* glyphs-eimage.c (tiff_instantiate):
* glyphs-gtk.c (gtk_print_image_instance):
* glyphs-msw.c (mswindows_print_image_instance):
* glyphs-x.c (x_print_image_instance):
* glyphs-x.c (update_widget_face):
* glyphs.c (make_string_from_file):
* glyphs.c (print_image_instance):
* glyphs.c (signal_image_error):
* glyphs.c (signal_image_error_2):
* glyphs.c (signal_double_image_error):
* glyphs.c (signal_double_image_error_2):
* glyphs.c (xbm_mask_file_munging):
* glyphs.c (pixmap_to_lisp_data):
* glyphs.h:
* gui.c (gui_item_display_flush_left):
* hpplay.c (player_error_internal):
* hpplay.c (myHandler):
* intl-win32.c:
* intl-win32.c (langcode_to_lang):
* intl-win32.c (sublangcode_to_lang):
* intl-win32.c (Fmswindows_get_locale_info):
* intl-win32.c (lcid_to_locale_mule_or_no):
* intl-win32.c (mswindows_multibyte_to_unicode_print):
* intl-win32.c (complex_vars_of_intl_win32):
* keymap.c:
* keymap.c (print_keymap):
* keymap.c (ensure_meta_prefix_char_keymapp):
* keymap.c (Fkey_description):
* keymap.c (Ftext_char_description):
* lisp.h:
* lisp.h (struct):
* lisp.h (DECLARE_INLINE_HEADER):
* lread.c (Fload_internal):
* lread.c (locate_file):
* lread.c (read_escape):
* lread.c (read_raw_string):
* lread.c (read1):
* lread.c (read_list):
* lread.c (read_compiled_function):
* lread.c (init_lread):
* lrecord.h:
* marker.c (print_marker):
* marker.c (marker_equal):
* menubar-msw.c (displayable_menu_item):
* menubar-x.c (command_builder_operate_menu_accelerator):
* menubar.c (vars_of_menubar):
* minibuf.c (reinit_complex_vars_of_minibuf):
* minibuf.c (complex_vars_of_minibuf):
* mule-charset.c (Fmake_charset):
* mule-charset.c (complex_vars_of_mule_charset):
* mule-coding.c (iso2022_print):
* mule-coding.c (fixed_width_query):
* number.c (bignum_print):
* number.c (ratio_print):
* number.c (bigfloat_print):
* number.c (bigfloat_finalize):
* objects-msw.c:
* objects-msw.c (mswindows_color_to_string):
* objects-msw.c (mswindows_color_list):
* objects-tty.c:
* objects-tty.c (tty_font_list):
* objects-tty.c (tty_find_charset_font):
* objects-xlike-inc.c (xft_find_charset_font):
* objects-xlike-inc.c (endif):
* print.c:
* print.c (write_istring):
* print.c (write_ascstring):
* print.c (Fterpri):
* print.c (Fprint):
* print.c (print_error_message):
* print.c (print_vector_internal):
* print.c (print_cons):
* print.c (print_string):
* print.c (printing_unreadable_object):
* print.c (print_internal):
* print.c (print_float):
* print.c (print_symbol):
* process-nt.c (mswindows_report_winsock_error):
* process-nt.c (nt_canonicalize_host_name):
* process-unix.c (unix_canonicalize_host_name):
* process.c (print_process):
* process.c (report_process_error):
* process.c (report_network_error):
* process.c (make_process_internal):
* process.c (Fstart_process_internal):
* process.c (status_message):
* process.c (putenv_internal):
* process.c (vars_of_process):
* process.h:
* profile.c (vars_of_profile):
* rangetab.c (print_range_table):
* realpath.c (vars_of_realpath):
* redisplay.c (vars_of_redisplay):
* search.c (wordify):
* search.c (Freplace_match):
* sheap.c (sheap_adjust_h):
* sound.c (report_sound_error):
* sound.c (Fplay_sound_file):
* specifier.c (print_specifier):
* symbols.c (Fsubr_name):
* symbols.c (do_symval_forwarding):
* symbols.c (set_default_buffer_slot_variable):
* symbols.c (set_default_console_slot_variable):
* symbols.c (store_symval_forwarding):
* symbols.c (default_value):
* symbols.c (defsymbol_massage_name_1):
* symbols.c (defsymbol_massage_name_nodump):
* symbols.c (defsymbol_massage_name):
* symbols.c (defsymbol_massage_multiword_predicate_nodump):
* symbols.c (defsymbol_massage_multiword_predicate):
* symbols.c (defsymbol_nodump):
* symbols.c (defsymbol):
* symbols.c (defkeyword):
* symbols.c (defkeyword_massage_name):
* symbols.c (check_module_subr):
* symbols.c (deferror_1):
* symbols.c (deferror):
* symbols.c (deferror_massage_name):
* symbols.c (deferror_massage_name_and_message):
* symbols.c (defvar_magic):
* symeval.h:
* symeval.h (DEFVAR_SYMVAL_FWD):
* sysdep.c:
* sysdep.c (init_system_name):
* sysdll.c:
* sysdll.c (MAYBE_PREPEND_UNDERSCORE):
* sysdll.c (dll_function):
* sysdll.c (dll_variable):
* sysdll.c (dll_error):
* sysdll.c (dll_open):
* sysdll.c (dll_close):
* sysdll.c (image_for_address):
* sysdll.c (my_find_image):
* sysdll.c (search_linked_libs):
* sysdll.h:
* sysfile.h:
* sysfile.h (DEFAULT_DIRECTORY_FALLBACK):
* syswindows.h:
* tests.c (DFC_CHECK_LENGTH):
* tests.c (DFC_CHECK_CONTENT):
* tests.c (Ftest_hash_tables):
* text.c (vars_of_text):
* text.h:
* tooltalk.c (tt_opnum_string):
* tooltalk.c (tt_message_arg_ival_string):
* tooltalk.c (Ftooltalk_default_procid):
* tooltalk.c (Ftooltalk_default_session):
* tooltalk.c (init_tooltalk):
* tooltalk.c (vars_of_tooltalk):
* ui-gtk.c (Fdll_load):
* ui-gtk.c (type_to_marshaller_type):
* ui-gtk.c (Fgtk_import_function_internal):
* ui-gtk.c (emacs_gtk_object_printer):
* ui-gtk.c (emacs_gtk_boxed_printer):
* unicode.c (unicode_to_ichar):
* unicode.c (unicode_print):
* unicode.c (unicode_query):
* unicode.c (vars_of_unicode):
* unicode.c (complex_vars_of_unicode):
* win32.c:
* win32.c (mswindows_report_process_error):
* window.c (print_window):
* xemacs.def.in.in:
BASIC IDEA: Further fixing up uses of char * and CIbyte *
to reflect their actual semantics; Mule-izing some code;
redoing of the not-yet-working code to handle message translation.
Clean up code to handle message-translation (not yet working).
Create separate versions of build_msg_string() for working with
Ibyte *, CIbyte *, and Ascbyte * arguments. Assert that Ascbyte *
arguments are pure-ASCII. Make build_msg_string() be the same
as build_msg_ascstring(). Create same three versions of GETTEXT()
and DEFER_GETTEXT(). Also create build_defer_string() and
variants for the equivalent of DEFER_GETTEXT() when building a
string. Remove old CGETTEXT(). Clean up code where GETTEXT(),
DEFER_GETTEXT(), build_msg_string(), etc. was being called and
introduce some new calls to build_msg_string(), etc. Remove
GETTEXT() from calls to weird_doc() -- we assume that the
message snarfer knows about weird_doc(). Remove uses of
DEFER_GETTEXT() from error messages in sysdep.c and instead use
special comments /* @@@begin-snarf@@@ */ and /* @@@end-snarf@@@ */
that the message snarfer presumably knows about.
Create build_ascstring() and use it in many instances in place
of build_string(). The purpose of having Ascbyte * variants is
to make the code more self-documenting in terms of what sort of
semantics is expected for char * strings. In fact in the process
of looking for uses of build_string(), much improperly Mule-ized
was discovered.
Mule-ize a lot of code as described in previous paragraph,
e.g. in sysdep.c.
Make the error functions take Ascbyte * strings and fix up a
couple of places where non-pure-ASCII strings were being passed in
(file-coding.c, mule-coding.c, unicode.c). (It's debatable whether
we really need to make the error functions work this way. It
helps catch places where code is written in a way that message
translation won't work, but we may well never implement message
translation.)
Make staticpro() and friends take Ascbyte * strings instead of
raw char * strings. Create a const_Ascbyte_ptr dynarr type
to describe what's held by staticpro_names[] and friends,
create pdump descriptions for const_Ascbyte_ptr dynarrs, and
use them in place of specially-crafted staticpro descriptions.
Mule-ize certain other functions (e.g. x_event_name) by correcting
raw use of char * to Ascbyte *, Rawbyte * or another such type,
and raw use of char[] buffers to another type (usually Ascbyte[]).
Change many uses of write_c_string() to write_msg_string(),
write_ascstring(), etc.
Mule-ize emodules.c, emodules.h, sysdll.h.
Fix some un-Mule-ized code in intl-win32.c.
A comment in event-Xt.c and the limitations of the message
snarfer (make-msgfile or whatever) is presumably incorrect --
it should be smart enough to handle function calls spread over
more than one line. Clean up code in event-Xt.c that was
written awkwardly for this reason.
In config.h.in, instead of NEED_ERROR_CHECK_TYPES_INLINES,
create a more general XEMACS_DEFS_NEEDS_INLINE_DECLS to
indicate when inlined functions need to be declared in
xemacs.defs.in.in, and make use of it in xemacs.defs.in.in.
We need to do this because postgresql.c now calls qxestrdup(),
which is an inline function.
Make nconc2() and other such functions MODULE_API and put
them in xemacs.defs.in.in since postgresql.c now uses them.
Clean up indentation in lread.c and a few other places.
In text.h, document ASSERT_ASCTEXT_ASCII() and
ASSERT_ASCTEXT_ASCII_LEN(), group together the stand-in
encodings and add some more for DLL symbols, function and
variable names, etc.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Tue, 26 Jan 2010 23:22:30 -0600 |
parents | 3a87551bfeb5 |
children | 304aebb79cd3 |
rev | line source |
---|---|
428 | 1 /* TTY-specific Lisp objects. |
2 Copyright (C) 1995 Board of Trustees, University of Illinois. | |
793 | 3 Copyright (C) 1995, 1996, 2001, 2002 Ben Wing. |
428 | 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 | |
872 | 27 #include "console-tty-impl.h" |
428 | 28 #include "insdel.h" |
872 | 29 #include "objects-tty-impl.h" |
428 | 30 #include "device.h" |
771 | 31 #include "charset.h" |
428 | 32 |
4710
3a87551bfeb5
Fixes for a number of minor warnings issued by gcc. See xemacs-patches message
Jerry James <james@xemacs.org>
parents:
4353
diff
changeset
|
33 #ifdef NEW_GC |
3a87551bfeb5
Fixes for a number of minor warnings issued by gcc. See xemacs-patches message
Jerry James <james@xemacs.org>
parents:
4353
diff
changeset
|
34 # define UNUSED_IF_NEW_GC(decl) UNUSED (decl) |
3a87551bfeb5
Fixes for a number of minor warnings issued by gcc. See xemacs-patches message
Jerry James <james@xemacs.org>
parents:
4353
diff
changeset
|
35 #else |
3a87551bfeb5
Fixes for a number of minor warnings issued by gcc. See xemacs-patches message
Jerry James <james@xemacs.org>
parents:
4353
diff
changeset
|
36 # define UNUSED_IF_NEW_GC(decl) decl |
3a87551bfeb5
Fixes for a number of minor warnings issued by gcc. See xemacs-patches message
Jerry James <james@xemacs.org>
parents:
4353
diff
changeset
|
37 #endif |
3a87551bfeb5
Fixes for a number of minor warnings issued by gcc. See xemacs-patches message
Jerry James <james@xemacs.org>
parents:
4353
diff
changeset
|
38 |
428 | 39 /* An alist mapping from color names to a cons of (FG-STRING, BG-STRING). */ |
40 Lisp_Object Vtty_color_alist; | |
41 #if 0 /* This stuff doesn't quite work yet */ | |
42 Lisp_Object Vtty_dynamic_color_fg; | |
43 Lisp_Object Vtty_dynamic_color_bg; | |
44 #endif | |
45 | |
1204 | 46 static const struct memory_description tty_color_instance_data_description_1 [] = { |
47 { XD_LISP_OBJECT, offsetof (struct tty_color_instance_data, symbol) }, | |
48 { XD_END } | |
49 }; | |
50 | |
3092 | 51 #ifdef NEW_GC |
52 DEFINE_LRECORD_IMPLEMENTATION ("tty-color-instance-data", | |
53 tty_color_instance_data, | |
54 0, /*dumpable-flag*/ | |
55 0, 0, 0, 0, 0, | |
56 tty_color_instance_data_description_1, | |
57 struct tty_color_instance_data); | |
58 #else /* not NEW_GC */ | |
1204 | 59 const struct sized_memory_description tty_color_instance_data_description = { |
60 sizeof (struct tty_color_instance_data), tty_color_instance_data_description_1 | |
61 }; | |
3092 | 62 #endif /* not NEW_GC */ |
1204 | 63 |
64 static const struct memory_description tty_font_instance_data_description_1 [] = { | |
65 { XD_LISP_OBJECT, offsetof (struct tty_font_instance_data, charset) }, | |
66 { XD_END } | |
67 }; | |
68 | |
3092 | 69 #ifdef NEW_GC |
70 DEFINE_LRECORD_IMPLEMENTATION ("tty-font-instance-data", | |
71 tty_font_instance_data, | |
72 0, /*dumpable-flag*/ | |
73 0, 0, 0, 0, 0, | |
74 tty_font_instance_data_description_1, | |
75 struct tty_font_instance_data); | |
76 #else /* not NEW_GC */ | |
1204 | 77 const struct sized_memory_description tty_font_instance_data_description = { |
78 sizeof (struct tty_font_instance_data), tty_font_instance_data_description_1 | |
79 }; | |
3092 | 80 #endif /* not NEW_GC */ |
1204 | 81 |
428 | 82 DEFUN ("register-tty-color", Fregister_tty_color, 3, 3, 0, /* |
83 Register COLOR as a recognized TTY color. | |
84 COLOR should be a string. | |
85 Strings FG-STRING and BG-STRING should specify the escape sequences to | |
86 set the foreground and background to the given color, respectively. | |
87 */ | |
88 (color, fg_string, bg_string)) | |
89 { | |
90 CHECK_STRING (color); | |
91 CHECK_STRING (fg_string); | |
92 CHECK_STRING (bg_string); | |
93 | |
94 color = Fintern (color, Qnil); | |
95 Vtty_color_alist = Fremassq (color, Vtty_color_alist); | |
96 Vtty_color_alist = Fcons (Fcons (color, Fcons (fg_string, bg_string)), | |
97 Vtty_color_alist); | |
98 | |
99 return Qnil; | |
100 } | |
101 | |
102 DEFUN ("unregister-tty-color", Funregister_tty_color, 1, 1, 0, /* | |
103 Unregister COLOR as a recognized TTY color. | |
104 */ | |
105 (color)) | |
106 { | |
107 CHECK_STRING (color); | |
108 | |
109 color = Fintern (color, Qnil); | |
110 Vtty_color_alist = Fremassq (color, Vtty_color_alist); | |
111 return Qnil; | |
112 } | |
113 | |
114 DEFUN ("find-tty-color", Ffind_tty_color, 1, 1, 0, /* | |
115 Look up COLOR in the list of registered TTY colors. | |
116 If it is found, return a list (FG-STRING BG-STRING) of the escape | |
117 sequences used to set the foreground and background to the color, respectively. | |
118 If it is not found, return nil. | |
119 */ | |
120 (color)) | |
121 { | |
122 Lisp_Object result; | |
123 | |
124 CHECK_STRING (color); | |
125 | |
126 result = Fassq (Fintern (color, Qnil), Vtty_color_alist); | |
127 if (!NILP (result)) | |
128 return list2 (Fcar (Fcdr (result)), Fcdr (Fcdr (result))); | |
129 else | |
130 return Qnil; | |
131 } | |
132 | |
2527 | 133 static Lisp_Object |
134 tty_color_list (void) | |
428 | 135 { |
136 Lisp_Object result = Qnil; | |
137 Lisp_Object rest; | |
138 | |
139 LIST_LOOP (rest, Vtty_color_alist) | |
140 { | |
141 result = Fcons (Fsymbol_name (XCAR (XCAR (rest))), result); | |
142 } | |
143 | |
144 return Fnreverse (result); | |
145 } | |
146 | |
147 #if 0 | |
148 | |
149 /* This approach is too simplistic. The problem is that the | |
150 dynamic color settings apply to *all* text in the default color, | |
151 not just the text output after the escape sequence has been given. */ | |
152 | |
153 DEFUN ("set-tty-dynamic-color-specs", Fset_tty_dynamic_color_specs, 2, 2, 0, /* | |
154 Set the dynamic color specifications for TTY's. | |
155 FG and BG should be either nil or vaguely printf-like strings, | |
156 where each occurrence of %s is replaced with the color name and each | |
157 occurrence of %% is replaced with a single % character. | |
158 */ | |
159 (fg, bg)) | |
160 { | |
161 if (!NILP (fg)) | |
162 CHECK_STRING (fg); | |
163 if (!NILP (bg)) | |
164 CHECK_STRING (bg); | |
165 | |
166 Vtty_dynamic_color_fg = fg; | |
167 Vtty_dynamic_color_bg = bg; | |
168 | |
169 return Qnil; | |
170 } | |
171 | |
172 DEFUN ("tty-dynamic-color-specs", Ftty_dynamic_color_specs, 0, 0, 0, /* | |
173 Return the dynamic color specifications for TTY's as a list of (FG BG). | |
174 See `set-tty-dynamic-color-specs'. | |
175 */ | |
176 ()) | |
177 { | |
178 return list2 (Vtty_dynamic_color_fg, Vtty_dynamic_color_bg); | |
179 } | |
180 | |
181 #endif /* 0 */ | |
182 | |
183 static int | |
440 | 184 tty_initialize_color_instance (Lisp_Color_Instance *c, Lisp_Object name, |
2286 | 185 Lisp_Object UNUSED (device), |
186 Error_Behavior UNUSED (errb)) | |
428 | 187 { |
188 Lisp_Object result; | |
189 | |
190 name = Fintern (name, Qnil); | |
191 result = assq_no_quit (name, Vtty_color_alist); | |
192 | |
193 if (NILP (result)) | |
194 { | |
195 #if 0 | |
196 if (!STRINGP (Vtty_dynamic_color_fg) | |
197 && !STRINGP (Vtty_dynamic_color_bg)) | |
198 #endif | |
199 return 0; | |
200 } | |
201 | |
202 /* Don't allocate the data until we're sure that we will succeed. */ | |
3092 | 203 #ifdef NEW_GC |
204 c->data = alloc_lrecord_type (struct tty_color_instance_data, | |
205 &lrecord_tty_color_instance_data); | |
206 #else /* not NEW_GC */ | |
428 | 207 c->data = xnew (struct tty_color_instance_data); |
3092 | 208 #endif /* not NEW_GC */ |
428 | 209 COLOR_INSTANCE_TTY_SYMBOL (c) = name; |
210 | |
211 return 1; | |
212 } | |
213 | |
214 static void | |
440 | 215 tty_mark_color_instance (Lisp_Color_Instance *c) |
428 | 216 { |
217 mark_object (COLOR_INSTANCE_TTY_SYMBOL (c)); | |
218 } | |
219 | |
220 static void | |
2286 | 221 tty_print_color_instance (Lisp_Color_Instance *UNUSED (c), |
222 Lisp_Object UNUSED (printcharfun), | |
223 int UNUSED (escapeflag)) | |
428 | 224 { |
225 } | |
226 | |
227 static void | |
4710
3a87551bfeb5
Fixes for a number of minor warnings issued by gcc. See xemacs-patches message
Jerry James <james@xemacs.org>
parents:
4353
diff
changeset
|
228 tty_finalize_color_instance (Lisp_Color_Instance *UNUSED_IF_NEW_GC (c)) |
428 | 229 { |
4141 | 230 #ifndef NEW_GC |
428 | 231 if (c->data) |
1726 | 232 xfree (c->data, void *); |
4141 | 233 #endif /* not NEW_GC */ |
4117 | 234 } |
428 | 235 |
236 static int | |
440 | 237 tty_color_instance_equal (Lisp_Color_Instance *c1, |
238 Lisp_Color_Instance *c2, | |
2286 | 239 int UNUSED (depth)) |
428 | 240 { |
241 return (EQ (COLOR_INSTANCE_TTY_SYMBOL (c1), | |
242 COLOR_INSTANCE_TTY_SYMBOL (c2))); | |
243 } | |
244 | |
2515 | 245 static Hashcode |
2286 | 246 tty_color_instance_hash (Lisp_Color_Instance *c, int UNUSED (depth)) |
428 | 247 { |
248 return LISP_HASH (COLOR_INSTANCE_TTY_SYMBOL (c)); | |
249 } | |
250 | |
251 static int | |
2286 | 252 tty_valid_color_name_p (struct device *UNUSED (d), Lisp_Object color) |
428 | 253 { |
254 return (!NILP (assoc_no_quit (Fintern (color, Qnil), Vtty_color_alist))); | |
255 #if 0 | |
256 || STRINGP (Vtty_dynamic_color_fg) | |
257 || STRINGP (Vtty_dynamic_color_bg) | |
258 #endif | |
259 } | |
260 | |
261 | |
262 static int | |
440 | 263 tty_initialize_font_instance (Lisp_Font_Instance *f, Lisp_Object name, |
2286 | 264 Lisp_Object UNUSED (device), |
265 Error_Behavior UNUSED (errb)) | |
428 | 266 { |
867 | 267 Ibyte *str = XSTRING_DATA (name); |
428 | 268 Lisp_Object charset = Qnil; |
269 | |
2367 | 270 if (qxestrncmp_ascii (str, "normal", 6)) |
428 | 271 return 0; |
272 str += 6; | |
273 if (*str) | |
274 { | |
275 #ifdef MULE | |
276 if (*str != '/') | |
277 return 0; | |
278 str++; | |
771 | 279 charset = Ffind_charset (intern_int (str)); |
428 | 280 if (NILP (charset)) |
281 return 0; | |
282 #else | |
283 return 0; | |
284 #endif | |
285 } | |
286 | |
287 /* Don't allocate the data until we're sure that we will succeed. */ | |
3092 | 288 #ifdef NEW_GC |
289 f->data = alloc_lrecord_type (struct tty_font_instance_data, | |
290 &lrecord_tty_font_instance_data); | |
291 #else /* not NEW_GC */ | |
428 | 292 f->data = xnew (struct tty_font_instance_data); |
3092 | 293 #endif /* not NEW_GC */ |
428 | 294 FONT_INSTANCE_TTY_CHARSET (f) = charset; |
295 #ifdef MULE | |
296 if (CHARSETP (charset)) | |
297 f->width = XCHARSET_COLUMNS (charset); | |
298 else | |
299 #endif | |
300 f->width = 1; | |
301 | |
302 f->proportional_p = 0; | |
303 f->ascent = f->height = 1; | |
304 f->descent = 0; | |
305 | |
306 return 1; | |
307 } | |
308 | |
309 static void | |
440 | 310 tty_mark_font_instance (Lisp_Font_Instance *f) |
428 | 311 { |
312 mark_object (FONT_INSTANCE_TTY_CHARSET (f)); | |
313 } | |
314 | |
315 static void | |
2286 | 316 tty_print_font_instance (Lisp_Font_Instance *UNUSED (f), |
317 Lisp_Object UNUSED (printcharfun), | |
318 int UNUSED (escapeflag)) | |
428 | 319 { |
320 } | |
321 | |
322 static void | |
4710
3a87551bfeb5
Fixes for a number of minor warnings issued by gcc. See xemacs-patches message
Jerry James <james@xemacs.org>
parents:
4353
diff
changeset
|
323 tty_finalize_font_instance (Lisp_Font_Instance *UNUSED_IF_NEW_GC (f)) |
428 | 324 { |
4141 | 325 #ifndef NEW_GC |
428 | 326 if (f->data) |
1726 | 327 xfree (f->data, void *); |
4141 | 328 #endif /* not NEW_GC */ |
4117 | 329 } |
428 | 330 |
331 static Lisp_Object | |
2527 | 332 tty_font_list (Lisp_Object UNUSED (pattern), Lisp_Object UNUSED (device), |
2286 | 333 Lisp_Object UNUSED (maxnumber)) |
428 | 334 { |
4952
19a72041c5ed
Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents:
4710
diff
changeset
|
335 return list1 (build_ascstring ("normal")); |
428 | 336 } |
337 | |
338 #ifdef MULE | |
339 | |
340 static int | |
2286 | 341 tty_font_spec_matches_charset (struct device *UNUSED (d), Lisp_Object charset, |
867 | 342 const Ibyte *nonreloc, Lisp_Object reloc, |
872 | 343 Bytecount offset, Bytecount length, |
3841 | 344 enum font_specifier_matchspec_stages stage) |
428 | 345 { |
867 | 346 const Ibyte *the_nonreloc = nonreloc; |
428 | 347 |
872 | 348 if (stage) |
349 return 0; | |
350 | |
428 | 351 if (!the_nonreloc) |
352 the_nonreloc = XSTRING_DATA (reloc); | |
353 fixup_internal_substring (nonreloc, reloc, offset, &length); | |
354 the_nonreloc += offset; | |
355 | |
4353
4143b78d0df0
Merge an old patch of Ben's, involving font instantiation and charsets.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4141
diff
changeset
|
356 if (NILP (charset)) |
428 | 357 return !memchr (the_nonreloc, '/', length); |
867 | 358 the_nonreloc = (const Ibyte *) memchr (the_nonreloc, '/', length); |
428 | 359 if (!the_nonreloc) |
360 return 0; | |
361 the_nonreloc++; | |
362 { | |
793 | 363 Lisp_Object s = symbol_name (XSYMBOL (XCHARSET_NAME (charset))); |
364 return !qxestrcmp (the_nonreloc, XSTRING_DATA (s)); | |
428 | 365 } |
366 } | |
367 | |
368 /* find a font spec that matches font spec FONT and also matches | |
369 (the registry of) CHARSET. */ | |
370 static Lisp_Object | |
371 tty_find_charset_font (Lisp_Object device, Lisp_Object font, | |
3659 | 372 Lisp_Object charset, |
373 enum font_specifier_matchspec_stages stage) | |
428 | 374 { |
867 | 375 Ibyte *fontname = XSTRING_DATA (font); |
428 | 376 |
872 | 377 if (stage) |
378 return Qnil; | |
379 | |
442 | 380 if (strchr ((const char *) fontname, '/')) |
428 | 381 { |
382 if (tty_font_spec_matches_charset (XDEVICE (device), charset, 0, | |
4124 | 383 font, 0, -1, initial)) |
428 | 384 return font; |
385 return Qnil; | |
386 } | |
387 | |
4353
4143b78d0df0
Merge an old patch of Ben's, involving font instantiation and charsets.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4141
diff
changeset
|
388 if (NILP (charset)) |
428 | 389 return font; |
390 | |
4952
19a72041c5ed
Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents:
4710
diff
changeset
|
391 return concat3 (font, build_ascstring ("/"), |
428 | 392 Fsymbol_name (XCHARSET_NAME (charset))); |
393 } | |
394 | |
395 #endif /* MULE */ | |
396 | |
397 | |
398 /************************************************************************/ | |
399 /* initialization */ | |
400 /************************************************************************/ | |
401 | |
402 void | |
403 syms_of_objects_tty (void) | |
404 { | |
3092 | 405 #ifdef NEW_GC |
406 INIT_LRECORD_IMPLEMENTATION (tty_color_instance_data); | |
407 INIT_LRECORD_IMPLEMENTATION (tty_font_instance_data); | |
408 #endif /* NEW_GC */ | |
409 | |
428 | 410 DEFSUBR (Fregister_tty_color); |
411 DEFSUBR (Funregister_tty_color); | |
412 DEFSUBR (Ffind_tty_color); | |
413 #if 0 | |
414 DEFSUBR (Fset_tty_dynamic_color_specs); | |
415 DEFSUBR (Ftty_dynamic_color_specs); | |
416 #endif | |
417 } | |
418 | |
419 void | |
420 console_type_create_objects_tty (void) | |
421 { | |
422 /* object methods */ | |
423 CONSOLE_HAS_METHOD (tty, initialize_color_instance); | |
424 CONSOLE_HAS_METHOD (tty, mark_color_instance); | |
425 CONSOLE_HAS_METHOD (tty, print_color_instance); | |
426 CONSOLE_HAS_METHOD (tty, finalize_color_instance); | |
427 CONSOLE_HAS_METHOD (tty, color_instance_equal); | |
428 CONSOLE_HAS_METHOD (tty, color_instance_hash); | |
429 CONSOLE_HAS_METHOD (tty, valid_color_name_p); | |
2527 | 430 CONSOLE_HAS_METHOD (tty, color_list); |
428 | 431 |
432 CONSOLE_HAS_METHOD (tty, initialize_font_instance); | |
433 CONSOLE_HAS_METHOD (tty, mark_font_instance); | |
434 CONSOLE_HAS_METHOD (tty, print_font_instance); | |
435 CONSOLE_HAS_METHOD (tty, finalize_font_instance); | |
2527 | 436 CONSOLE_HAS_METHOD (tty, font_list); |
428 | 437 #ifdef MULE |
438 CONSOLE_HAS_METHOD (tty, font_spec_matches_charset); | |
439 CONSOLE_HAS_METHOD (tty, find_charset_font); | |
440 #endif | |
441 } | |
442 | |
443 void | |
444 vars_of_objects_tty (void) | |
445 { | |
446 staticpro (&Vtty_color_alist); | |
447 Vtty_color_alist = Qnil; | |
448 | |
449 #if 0 | |
450 staticpro (&Vtty_dynamic_color_fg); | |
451 Vtty_dynamic_color_fg = Qnil; | |
452 | |
453 staticpro (&Vtty_dynamic_color_bg); | |
454 Vtty_dynamic_color_bg = Qnil; | |
455 #endif | |
456 } |