Mercurial > hg > xemacs-beta
annotate src/console-stream.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 | ea701c23ed84 |
children | 16112448d484 |
rev | line source |
---|---|
428 | 1 /* Stream device functions. |
2 Copyright (C) 1995 Free Software Foundation, Inc. | |
1279 | 3 Copyright (C) 1996, 2001, 2002, 2003 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 /* This file has been Mule-ized. */ | |
25 | |
26 /* Written by Ben Wing. */ | |
27 | |
28 #include <config.h> | |
29 #include "lisp.h" | |
30 | |
872 | 31 #include "device-impl.h" |
428 | 32 #include "events.h" |
872 | 33 #include "frame-impl.h" |
428 | 34 #include "redisplay.h" |
35 #include "sysdep.h" | |
800 | 36 #include "window.h" |
37 | |
872 | 38 #include "console-stream-impl.h" |
800 | 39 #include "console-tty.h" |
40 | |
428 | 41 #include "sysfile.h" |
42 | |
43 DEFINE_CONSOLE_TYPE (stream); | |
44 | |
45 Lisp_Object Vterminal_console; | |
46 Lisp_Object Vterminal_device; | |
47 Lisp_Object Vterminal_frame; | |
48 | |
49 Lisp_Object Vstdio_str; | |
50 | |
1204 | 51 static const struct memory_description stream_console_data_description_1 [] = { |
52 { XD_LISP_OBJECT, offsetof (struct stream_console, instream) }, | |
53 { XD_END } | |
54 }; | |
55 | |
3092 | 56 #ifdef NEW_GC |
57 DEFINE_LRECORD_IMPLEMENTATION ("stream-console", stream_console, | |
58 1, /*dumpable-flag*/ | |
59 0, 0, 0, 0, 0, | |
60 stream_console_data_description_1, | |
61 Lisp_Stream_Console); | |
62 #else /* not NEW_GC */ | |
1204 | 63 const struct sized_memory_description stream_console_data_description = { |
64 sizeof (struct stream_console), stream_console_data_description_1 | |
65 }; | |
3092 | 66 #endif /* not NEW_GC */ |
1204 | 67 |
428 | 68 static void |
2286 | 69 stream_init_console (struct console *con, Lisp_Object UNUSED (params)) |
428 | 70 { |
71 Lisp_Object tty = CONSOLE_CONNECTION (con); | |
72 struct stream_console *stream_con; | |
73 | |
3092 | 74 #ifdef NEW_GC |
75 if (CONSOLE_STREAM_DATA (con) == NULL) | |
76 CONSOLE_STREAM_DATA (con) = alloc_lrecord_type (struct stream_console, | |
77 &lrecord_stream_console); | |
78 #else /* not NEW_GC */ | |
428 | 79 if (CONSOLE_STREAM_DATA (con) == NULL) |
1204 | 80 CONSOLE_STREAM_DATA (con) = xnew_and_zero (struct stream_console); |
3092 | 81 #endif /* not NEW_GC */ |
428 | 82 |
83 stream_con = CONSOLE_STREAM_DATA (con); | |
84 | |
1204 | 85 stream_con->instream = Qnil; |
428 | 86 |
87 /* Open the specified console */ | |
88 if (NILP (tty) || internal_equal (tty, Vstdio_str, 0)) | |
89 { | |
90 stream_con->in = stdin; | |
91 stream_con->out = stdout; | |
92 stream_con->err = stderr; | |
93 } | |
94 else | |
95 { | |
96 CHECK_STRING (tty); | |
97 stream_con->in = stream_con->out = stream_con->err = | |
442 | 98 /* #### We don't currently do coding-system translation on |
99 this descriptor. */ | |
771 | 100 qxe_fopen (XSTRING_DATA (tty), READ_PLUS_TEXT); |
428 | 101 if (!stream_con->in) |
563 | 102 signal_error (Qio_error, "Unable to open tty", tty); |
428 | 103 } |
104 } | |
105 | |
106 static void | |
2286 | 107 stream_init_device (struct device *d, Lisp_Object UNUSED (params)) |
428 | 108 { |
109 struct console *con = XCONSOLE (DEVICE_CONSOLE (d)); | |
110 | |
111 DEVICE_INFD (d) = fileno (CONSOLE_STREAM_DATA (con)->in); | |
112 DEVICE_OUTFD (d) = fileno (CONSOLE_STREAM_DATA (con)->out); | |
113 init_baud_rate (d); | |
114 init_one_device (d); | |
115 } | |
116 | |
117 static int | |
2286 | 118 stream_initially_selected_for_input (struct console *UNUSED (con)) |
428 | 119 { |
120 return noninteractive && initialized; | |
121 } | |
122 | |
123 extern int stdout_needs_newline; | |
124 | |
125 static void | |
126 stream_delete_console (struct console *con) | |
127 { | |
128 struct stream_console *stream_con = CONSOLE_STREAM_DATA (con); | |
129 if (stream_con) | |
130 { | |
131 if (/* stream_con->needs_newline */ | |
132 stdout_needs_newline) /* #### clean this up */ | |
133 { | |
134 fputc ('\n', stream_con->out); | |
135 fflush (stream_con->out); | |
136 } | |
137 if (stream_con->in != stdin) | |
771 | 138 retry_fclose (stream_con->in); |
428 | 139 |
3263 | 140 #ifndef NEW_GC |
1726 | 141 xfree (stream_con, struct stream_console *); |
3092 | 142 #endif /* not NEW_GC */ |
428 | 143 CONSOLE_STREAM_DATA (con) = NULL; |
144 } | |
145 } | |
146 | |
147 Lisp_Object | |
148 stream_semi_canonicalize_console_connection (Lisp_Object connection, | |
2286 | 149 Error_Behavior UNUSED (errb)) |
428 | 150 { |
151 return NILP (connection) ? Vstdio_str : connection; | |
152 } | |
153 | |
154 Lisp_Object | |
155 stream_canonicalize_console_connection (Lisp_Object connection, | |
578 | 156 Error_Behavior errb) |
428 | 157 { |
158 if (NILP (connection) || internal_equal (connection, Vstdio_str, 0)) | |
159 return Vstdio_str; | |
160 | |
161 if (!ERRB_EQ (errb, ERROR_ME)) | |
162 { | |
163 if (!STRINGP (connection)) | |
164 return Qunbound; | |
165 } | |
166 else | |
167 CHECK_STRING (connection); | |
168 | |
169 return Ffile_truename (connection, Qnil); | |
170 } | |
171 | |
172 Lisp_Object | |
173 stream_semi_canonicalize_device_connection (Lisp_Object connection, | |
578 | 174 Error_Behavior errb) |
428 | 175 { |
176 return stream_semi_canonicalize_console_connection (connection, errb); | |
177 } | |
178 | |
179 Lisp_Object | |
180 stream_canonicalize_device_connection (Lisp_Object connection, | |
578 | 181 Error_Behavior errb) |
428 | 182 { |
183 return stream_canonicalize_console_connection (connection, errb); | |
184 } | |
185 | |
186 | |
187 static void | |
2286 | 188 stream_init_frame_1 (struct frame *f, Lisp_Object UNUSED (props), |
771 | 189 int frame_name_is_defaulted) |
428 | 190 { |
191 #if 0 | |
192 struct device *d = XDEVICE (FRAME_DEVICE (f)); | |
193 if (!NILP (DEVICE_FRAME_LIST (d))) | |
563 | 194 invalid_operation ("Only one frame allowed on stream devices", Qunbound); |
428 | 195 #endif |
771 | 196 if (frame_name_is_defaulted) |
4952
19a72041c5ed
Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents:
4928
diff
changeset
|
197 f->name = build_ascstring ("stream"); |
428 | 198 f->height = 80; |
199 f->width = 24; | |
200 f->visible = 0; /* so redisplay doesn't try to do anything */ | |
201 } | |
202 | |
203 | |
204 static int | |
4928
ea701c23ed84
change text_width method to take a window, in preparation for unicode-internal changes
Ben Wing <ben@xemacs.org>
parents:
3263
diff
changeset
|
205 stream_text_width (struct window *UNUSED (w), |
2286 | 206 struct face_cachel *UNUSED (cachel), |
207 const Ichar *UNUSED (str), Charcount len) | |
428 | 208 { |
209 return len; | |
210 } | |
211 | |
212 static int | |
2286 | 213 stream_left_margin_width (struct window *UNUSED (w)) |
428 | 214 { |
215 return 0; | |
216 } | |
217 | |
218 static int | |
2286 | 219 stream_right_margin_width (struct window *UNUSED (w)) |
428 | 220 { |
221 return 0; | |
222 } | |
223 | |
224 static int | |
225 stream_divider_height (void) | |
226 { | |
227 return 1; | |
228 } | |
229 | |
230 static int | |
231 stream_eol_cursor_width (void) | |
232 { | |
233 return 1; | |
234 } | |
235 | |
1279 | 236 /* We used to try and check for redisplaying on stream devices (e.g. in |
237 redisplay_device(), and beg out if so. However, we didn't always manage | |
238 completely. Now we do manage completely, and to verify this we abort if | |
239 we try to display a stream device. This might fix some crashes I've | |
240 been getting in pdump -- the only difference between crash and non-crash | |
241 is a few changes to the redisplay critical-section handling. */ | |
242 | |
243 static void | |
2286 | 244 stream_window_output_begin (struct window *UNUSED (w)) |
1279 | 245 { |
2500 | 246 ABORT (); |
1279 | 247 } |
248 | |
249 static void | |
2286 | 250 stream_window_output_end (struct window *UNUSED (w)) |
1279 | 251 { |
2500 | 252 ABORT (); |
1279 | 253 } |
254 | |
255 static void | |
2286 | 256 stream_frame_output_begin (struct frame *UNUSED (f)) |
1279 | 257 { |
2500 | 258 ABORT (); |
1279 | 259 } |
260 | |
261 static void | |
2286 | 262 stream_frame_output_end (struct frame *UNUSED (f)) |
1279 | 263 { |
2500 | 264 ABORT (); |
1279 | 265 } |
266 | |
428 | 267 static void |
2286 | 268 stream_output_display_block (struct window *UNUSED (w), |
269 struct display_line *UNUSED (dl), | |
270 int UNUSED (block), int UNUSED (start), | |
271 int UNUSED (end), int UNUSED (start_pixpos), | |
272 int UNUSED (cursor_start), | |
273 int UNUSED (cursor_width), | |
274 int UNUSED (cursor_height)) | |
428 | 275 { |
2500 | 276 ABORT (); |
428 | 277 } |
278 | |
279 static void | |
2286 | 280 stream_clear_region (Lisp_Object UNUSED (window), struct device* UNUSED (d), |
281 struct frame *UNUSED (f), face_index UNUSED (findex), | |
282 int UNUSED (x), int UNUSED (y), int UNUSED (width), | |
283 int UNUSED (height), Lisp_Object UNUSED (fcolor), | |
284 Lisp_Object UNUSED (bcolor), | |
285 Lisp_Object UNUSED (background_pixmap)) | |
428 | 286 { |
2500 | 287 ABORT (); |
428 | 288 } |
289 | |
290 static int | |
2286 | 291 stream_flash (struct device *UNUSED (d)) |
428 | 292 { |
293 return 0; /* sorry can't do it */ | |
294 } | |
295 | |
296 static void | |
2286 | 297 stream_ring_bell (struct device *d, int UNUSED (volume), int UNUSED (pitch), |
298 int UNUSED (duration)) | |
428 | 299 { |
300 struct console *c = XCONSOLE (DEVICE_CONSOLE (d)); | |
826 | 301 /* Don't output ^G when not a TTY -- in particular, under MS Windows, ^G |
302 is interpreted as bell by the console, but not when running under | |
303 VC++. Probably this would be the same under Unix. */ | |
304 if (isatty (fileno (CONSOLE_STREAM_DATA (c)->out))) | |
305 { | |
306 fputc (07, CONSOLE_STREAM_DATA (c)->out); | |
307 fflush (CONSOLE_STREAM_DATA (c)->out); | |
308 } | |
428 | 309 } |
310 | |
311 | |
312 /************************************************************************/ | |
313 /* initialization */ | |
314 /************************************************************************/ | |
315 | |
316 void | |
317 console_type_create_stream (void) | |
318 { | |
319 INITIALIZE_CONSOLE_TYPE (stream, "stream", "console-stream-p"); | |
320 | |
321 /* console methods */ | |
322 CONSOLE_HAS_METHOD (stream, init_console); | |
323 CONSOLE_HAS_METHOD (stream, initially_selected_for_input); | |
324 CONSOLE_HAS_METHOD (stream, delete_console); | |
325 CONSOLE_HAS_METHOD (stream, canonicalize_console_connection); | |
326 CONSOLE_HAS_METHOD (stream, canonicalize_device_connection); | |
327 CONSOLE_HAS_METHOD (stream, semi_canonicalize_console_connection); | |
328 CONSOLE_HAS_METHOD (stream, semi_canonicalize_device_connection); | |
329 | |
330 /* device methods */ | |
331 CONSOLE_HAS_METHOD (stream, init_device); | |
332 | |
333 /* frame methods */ | |
334 CONSOLE_HAS_METHOD (stream, init_frame_1); | |
335 | |
336 /* redisplay methods */ | |
1279 | 337 CONSOLE_HAS_METHOD (stream, text_width); |
428 | 338 CONSOLE_HAS_METHOD (stream, left_margin_width); |
339 CONSOLE_HAS_METHOD (stream, right_margin_width); | |
340 CONSOLE_HAS_METHOD (stream, divider_height); | |
341 CONSOLE_HAS_METHOD (stream, eol_cursor_width); | |
1279 | 342 CONSOLE_HAS_METHOD (stream, window_output_begin); |
343 CONSOLE_HAS_METHOD (stream, window_output_end); | |
344 CONSOLE_HAS_METHOD (stream, frame_output_begin); | |
345 CONSOLE_HAS_METHOD (stream, frame_output_end); | |
346 CONSOLE_HAS_METHOD (stream, output_display_block); | |
428 | 347 CONSOLE_HAS_METHOD (stream, clear_region); |
348 CONSOLE_HAS_METHOD (stream, flash); | |
349 CONSOLE_HAS_METHOD (stream, ring_bell); | |
350 } | |
351 | |
352 void | |
353 reinit_console_type_create_stream (void) | |
354 { | |
355 REINITIALIZE_CONSOLE_TYPE (stream); | |
356 } | |
357 | |
358 void | |
359 vars_of_console_stream (void) | |
360 { | |
361 DEFVAR_LISP ("terminal-console", &Vterminal_console /* | |
444 | 362 The initial console object, which represents XEmacs' stdout. |
428 | 363 */ ); |
364 Vterminal_console = Qnil; | |
365 | |
366 DEFVAR_LISP ("terminal-device", &Vterminal_device /* | |
444 | 367 The initial device object, which represents XEmacs' stdout. |
428 | 368 */ ); |
369 Vterminal_device = Qnil; | |
370 | |
371 DEFVAR_LISP ("terminal-frame", &Vterminal_frame /* | |
444 | 372 The initial frame object, which represents XEmacs' stdout. |
428 | 373 */ ); |
374 Vterminal_frame = Qnil; | |
375 | |
376 /* Moved from console-tty.c */ | |
4952
19a72041c5ed
Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents:
4928
diff
changeset
|
377 Vstdio_str = build_ascstring ("stdio"); |
428 | 378 staticpro (&Vstdio_str); |
379 } | |
380 | |
381 #ifndef PDUMP | |
382 void | |
2342 | 383 init_console_stream (int UNUSED (reinit)) |
428 | 384 { |
385 /* This function can GC */ | |
386 if (!initialized) | |
387 { | |
388 Vterminal_device = Fmake_device (Qstream, Qnil, Qnil); | |
389 Vterminal_console = Fdevice_console (Vterminal_device); | |
390 Vterminal_frame = Fmake_frame (Qnil, Vterminal_device); | |
391 minibuf_window = XFRAME (Vterminal_frame)->minibuffer_window; | |
392 } | |
393 else | |
394 { | |
395 /* Re-initialize the FILE fields of the console. */ | |
396 stream_init_console (XCONSOLE (Vterminal_console), Qnil); | |
397 if (noninteractive) | |
398 event_stream_select_console (XCONSOLE (Vterminal_console)); | |
399 } | |
400 } | |
401 | |
402 #else | |
403 | |
404 void | |
442 | 405 init_console_stream (int reinit) |
428 | 406 { |
407 /* This function can GC */ | |
442 | 408 if (!reinit) |
409 { | |
410 Vterminal_device = Fmake_device (Qstream, Qnil, Qnil); | |
411 Vterminal_console = Fdevice_console (Vterminal_device); | |
412 Vterminal_frame = Fmake_frame (Qnil, Vterminal_device); | |
413 minibuf_window = XFRAME (Vterminal_frame)->minibuffer_window; | |
414 } | |
428 | 415 if (initialized) |
416 { | |
417 stream_init_console (XCONSOLE (Vterminal_console), Qnil); | |
418 if (noninteractive) | |
419 event_stream_select_console (XCONSOLE (Vterminal_console)); | |
420 } | |
421 } | |
422 #endif |