Mercurial > hg > xemacs-beta
annotate src/console-stream.c @ 5127:a9c41067dd88 ben-lisp-object
more cleanups, terminology clarification, lots of doc work
-------------------- ChangeLog entries follow: --------------------
man/ChangeLog addition:
2010-03-05 Ben Wing <ben@xemacs.org>
* internals/internals.texi (Introduction to Allocation):
* internals/internals.texi (Integers and Characters):
* internals/internals.texi (Allocation from Frob Blocks):
* internals/internals.texi (lrecords):
* internals/internals.texi (Low-level allocation):
Rewrite section on allocation of Lisp objects to reflect the new
reality. Remove references to nonexistent XSETINT and XSETCHAR.
modules/ChangeLog addition:
2010-03-05 Ben Wing <ben@xemacs.org>
* postgresql/postgresql.c (allocate_pgconn):
* postgresql/postgresql.c (allocate_pgresult):
* postgresql/postgresql.h (struct Lisp_PGconn):
* postgresql/postgresql.h (struct Lisp_PGresult):
* ldap/eldap.c (allocate_ldap):
* ldap/eldap.h (struct Lisp_LDAP):
Same changes as in src/ dir. See large log there in ChangeLog,
but basically:
ALLOC_LISP_OBJECT -> ALLOC_NORMAL_LISP_OBJECT
LISP_OBJECT_HEADER -> NORMAL_LISP_OBJECT_HEADER
../hlo/src/ChangeLog addition:
2010-03-05 Ben Wing <ben@xemacs.org>
* alloc.c:
* alloc.c (old_alloc_sized_lcrecord):
* alloc.c (very_old_free_lcrecord):
* alloc.c (copy_lisp_object):
* alloc.c (zero_sized_lisp_object):
* alloc.c (zero_nonsized_lisp_object):
* alloc.c (lisp_object_storage_size):
* alloc.c (free_normal_lisp_object):
* alloc.c (FREE_FIXED_TYPE_WHEN_NOT_IN_GC):
* alloc.c (ALLOC_FROB_BLOCK_LISP_OBJECT):
* alloc.c (Fcons):
* alloc.c (noseeum_cons):
* alloc.c (make_float):
* alloc.c (make_bignum):
* alloc.c (make_bignum_bg):
* alloc.c (make_ratio):
* alloc.c (make_ratio_bg):
* alloc.c (make_ratio_rt):
* alloc.c (make_bigfloat):
* alloc.c (make_bigfloat_bf):
* alloc.c (size_vector):
* alloc.c (make_compiled_function):
* alloc.c (Fmake_symbol):
* alloc.c (allocate_extent):
* alloc.c (allocate_event):
* alloc.c (make_key_data):
* alloc.c (make_button_data):
* alloc.c (make_motion_data):
* alloc.c (make_process_data):
* alloc.c (make_timeout_data):
* alloc.c (make_magic_data):
* alloc.c (make_magic_eval_data):
* alloc.c (make_eval_data):
* alloc.c (make_misc_user_data):
* alloc.c (Fmake_marker):
* alloc.c (noseeum_make_marker):
* alloc.c (size_string_direct_data):
* alloc.c (make_uninit_string):
* alloc.c (make_string_nocopy):
* alloc.c (mark_lcrecord_list):
* alloc.c (alloc_managed_lcrecord):
* alloc.c (free_managed_lcrecord):
* alloc.c (sweep_lcrecords_1):
* alloc.c (malloced_storage_size):
* buffer.c (allocate_buffer):
* buffer.c (compute_buffer_usage):
* buffer.c (DEFVAR_BUFFER_LOCAL_1):
* buffer.c (nuke_all_buffer_slots):
* buffer.c (common_init_complex_vars_of_buffer):
* buffer.h (struct buffer_text):
* buffer.h (struct buffer):
* bytecode.c:
* bytecode.c (make_compiled_function_args):
* bytecode.c (size_compiled_function_args):
* bytecode.h (struct compiled_function_args):
* casetab.c (allocate_case_table):
* casetab.h (struct Lisp_Case_Table):
* charset.h (struct Lisp_Charset):
* chartab.c (fill_char_table):
* chartab.c (Fmake_char_table):
* chartab.c (make_char_table_entry):
* chartab.c (copy_char_table_entry):
* chartab.c (Fcopy_char_table):
* chartab.c (put_char_table):
* chartab.h (struct Lisp_Char_Table_Entry):
* chartab.h (struct Lisp_Char_Table):
* console-gtk-impl.h (struct gtk_device):
* console-gtk-impl.h (struct gtk_frame):
* console-impl.h (struct console):
* console-msw-impl.h (struct Lisp_Devmode):
* console-msw-impl.h (struct mswindows_device):
* console-msw-impl.h (struct msprinter_device):
* console-msw-impl.h (struct mswindows_frame):
* console-msw-impl.h (struct mswindows_dialog_id):
* console-stream-impl.h (struct stream_console):
* console-stream.c (stream_init_console):
* console-tty-impl.h (struct tty_console):
* console-tty-impl.h (struct tty_device):
* console-tty.c (allocate_tty_console_struct):
* console-x-impl.h (struct x_device):
* console-x-impl.h (struct x_frame):
* console.c (allocate_console):
* console.c (nuke_all_console_slots):
* console.c (DEFVAR_CONSOLE_LOCAL_1):
* console.c (common_init_complex_vars_of_console):
* data.c (make_weak_list):
* data.c (make_weak_box):
* data.c (make_ephemeron):
* database.c:
* database.c (struct Lisp_Database):
* database.c (allocate_database):
* database.c (finalize_database):
* device-gtk.c (allocate_gtk_device_struct):
* device-impl.h (struct device):
* device-msw.c:
* device-msw.c (mswindows_init_device):
* device-msw.c (msprinter_init_device):
* device-msw.c (finalize_devmode):
* device-msw.c (allocate_devmode):
* device-tty.c (allocate_tty_device_struct):
* device-x.c (allocate_x_device_struct):
* device.c:
* device.c (nuke_all_device_slots):
* device.c (allocate_device):
* dialog-msw.c (handle_question_dialog_box):
* elhash.c:
* elhash.c (struct Lisp_Hash_Table):
* elhash.c (finalize_hash_table):
* elhash.c (make_general_lisp_hash_table):
* elhash.c (Fcopy_hash_table):
* elhash.h (htentry):
* emacs.c (main_1):
* eval.c:
* eval.c (size_multiple_value):
* event-stream.c (finalize_command_builder):
* event-stream.c (allocate_command_builder):
* event-stream.c (free_command_builder):
* event-stream.c (event_stream_generate_wakeup):
* event-stream.c (event_stream_resignal_wakeup):
* event-stream.c (event_stream_disable_wakeup):
* event-stream.c (event_stream_wakeup_pending_p):
* events.h (struct Lisp_Timeout):
* events.h (struct command_builder):
* extents-impl.h:
* extents-impl.h (struct extent_auxiliary):
* extents-impl.h (struct extent_info):
* extents-impl.h (set_extent_no_chase_aux_field):
* extents-impl.h (set_extent_no_chase_normal_field):
* extents.c:
* extents.c (gap_array_marker):
* extents.c (gap_array):
* extents.c (extent_list_marker):
* extents.c (extent_list):
* extents.c (stack_of_extents):
* extents.c (gap_array_make_marker):
* extents.c (extent_list_make_marker):
* extents.c (allocate_extent_list):
* extents.c (SLOT):
* extents.c (mark_extent_auxiliary):
* extents.c (allocate_extent_auxiliary):
* extents.c (attach_extent_auxiliary):
* extents.c (size_gap_array):
* extents.c (finalize_extent_info):
* extents.c (allocate_extent_info):
* extents.c (uninit_buffer_extents):
* extents.c (allocate_soe):
* extents.c (copy_extent):
* extents.c (vars_of_extents):
* extents.h:
* faces.c (allocate_face):
* faces.h (struct Lisp_Face):
* faces.h (struct face_cachel):
* file-coding.c:
* file-coding.c (finalize_coding_system):
* file-coding.c (sizeof_coding_system):
* file-coding.c (Fcopy_coding_system):
* file-coding.h (struct Lisp_Coding_System):
* file-coding.h (MARKED_SLOT):
* fns.c (size_bit_vector):
* font-mgr.c:
* font-mgr.c (finalize_fc_pattern):
* font-mgr.c (print_fc_pattern):
* font-mgr.c (Ffc_pattern_p):
* font-mgr.c (Ffc_pattern_create):
* font-mgr.c (Ffc_name_parse):
* font-mgr.c (Ffc_name_unparse):
* font-mgr.c (Ffc_pattern_duplicate):
* font-mgr.c (Ffc_pattern_add):
* font-mgr.c (Ffc_pattern_del):
* font-mgr.c (Ffc_pattern_get):
* font-mgr.c (fc_config_create_using):
* font-mgr.c (fc_strlist_to_lisp_using):
* font-mgr.c (fontset_to_list):
* font-mgr.c (Ffc_config_p):
* font-mgr.c (Ffc_config_up_to_date):
* font-mgr.c (Ffc_config_build_fonts):
* font-mgr.c (Ffc_config_get_cache):
* font-mgr.c (Ffc_config_get_fonts):
* font-mgr.c (Ffc_config_set_current):
* font-mgr.c (Ffc_config_get_blanks):
* font-mgr.c (Ffc_config_get_rescan_interval):
* font-mgr.c (Ffc_config_set_rescan_interval):
* font-mgr.c (Ffc_config_app_font_add_file):
* font-mgr.c (Ffc_config_app_font_add_dir):
* font-mgr.c (Ffc_config_app_font_clear):
* font-mgr.c (size):
* font-mgr.c (Ffc_config_substitute):
* font-mgr.c (Ffc_font_render_prepare):
* font-mgr.c (Ffc_font_match):
* font-mgr.c (Ffc_font_sort):
* font-mgr.c (finalize_fc_config):
* font-mgr.c (print_fc_config):
* font-mgr.h:
* font-mgr.h (struct fc_pattern):
* font-mgr.h (XFC_PATTERN):
* font-mgr.h (struct fc_config):
* font-mgr.h (XFC_CONFIG):
* frame-gtk.c (allocate_gtk_frame_struct):
* frame-impl.h (struct frame):
* frame-msw.c (mswindows_init_frame_1):
* frame-x.c (allocate_x_frame_struct):
* frame.c (nuke_all_frame_slots):
* frame.c (allocate_frame_core):
* gc.c:
* gc.c (GC_CHECK_NOT_FREE):
* glyphs.c (finalize_image_instance):
* glyphs.c (allocate_image_instance):
* glyphs.c (Fcolorize_image_instance):
* glyphs.c (allocate_glyph):
* glyphs.c (unmap_subwindow_instance_cache_mapper):
* glyphs.c (register_ignored_expose):
* glyphs.h (struct Lisp_Image_Instance):
* glyphs.h (struct Lisp_Glyph):
* glyphs.h (struct glyph_cachel):
* glyphs.h (struct expose_ignore):
* gui.c (allocate_gui_item):
* gui.h (struct Lisp_Gui_Item):
* keymap.c (struct Lisp_Keymap):
* keymap.c (make_keymap):
* lisp.h:
* lisp.h (struct Lisp_String_Direct_Data):
* lisp.h (struct Lisp_String_Indirect_Data):
* lisp.h (struct Lisp_Vector):
* lisp.h (struct Lisp_Bit_Vector):
* lisp.h (DECLARE_INLINE_LISP_BIT_VECTOR):
* lisp.h (struct weak_box):
* lisp.h (struct ephemeron):
* lisp.h (struct weak_list):
* lrecord.h:
* lrecord.h (struct lrecord_implementation):
* lrecord.h (MC_ALLOC_CALL_FINALIZER):
* lrecord.h (struct lcrecord_list):
* lstream.c (finalize_lstream):
* lstream.c (sizeof_lstream):
* lstream.c (Lstream_new):
* lstream.c (Lstream_delete):
* lstream.h (struct lstream):
* marker.c:
* marker.c (finalize_marker):
* marker.c (compute_buffer_marker_usage):
* mule-charset.c:
* mule-charset.c (make_charset):
* mule-charset.c (compute_charset_usage):
* objects-impl.h (struct Lisp_Color_Instance):
* objects-impl.h (struct Lisp_Font_Instance):
* objects-tty-impl.h (struct tty_color_instance_data):
* objects-tty-impl.h (struct tty_font_instance_data):
* objects-tty.c (tty_initialize_color_instance):
* objects-tty.c (tty_initialize_font_instance):
* objects.c (finalize_color_instance):
* objects.c (Fmake_color_instance):
* objects.c (finalize_font_instance):
* objects.c (Fmake_font_instance):
* objects.c (reinit_vars_of_objects):
* opaque.c:
* opaque.c (sizeof_opaque):
* opaque.c (make_opaque_ptr):
* opaque.c (free_opaque_ptr):
* opaque.h:
* opaque.h (Lisp_Opaque):
* opaque.h (Lisp_Opaque_Ptr):
* print.c (printing_unreadable_lcrecord):
* print.c (external_object_printer):
* print.c (debug_p4):
* process.c (finalize_process):
* process.c (make_process_internal):
* procimpl.h (struct Lisp_Process):
* rangetab.c (Fmake_range_table):
* rangetab.c (Fcopy_range_table):
* rangetab.h (struct Lisp_Range_Table):
* scrollbar.c:
* scrollbar.c (create_scrollbar_instance):
* scrollbar.c (compute_scrollbar_instance_usage):
* scrollbar.h (struct scrollbar_instance):
* specifier.c (finalize_specifier):
* specifier.c (sizeof_specifier):
* specifier.c (set_specifier_caching):
* specifier.h (struct Lisp_Specifier):
* specifier.h (struct specifier_caching):
* symeval.h:
* symeval.h (SYMBOL_VALUE_MAGIC_P):
* symeval.h (DEFVAR_SYMVAL_FWD):
* symsinit.h:
* syntax.c (init_buffer_syntax_cache):
* syntax.h (struct syntax_cache):
* toolbar.c:
* toolbar.c (allocate_toolbar_button):
* toolbar.c (update_toolbar_button):
* toolbar.h (struct toolbar_button):
* tooltalk.c (struct Lisp_Tooltalk_Message):
* tooltalk.c (make_tooltalk_message):
* tooltalk.c (struct Lisp_Tooltalk_Pattern):
* tooltalk.c (make_tooltalk_pattern):
* ui-gtk.c:
* ui-gtk.c (allocate_ffi_data):
* ui-gtk.c (emacs_gtk_object_finalizer):
* ui-gtk.c (allocate_emacs_gtk_object_data):
* ui-gtk.c (allocate_emacs_gtk_boxed_data):
* ui-gtk.h:
* window-impl.h (struct window):
* window-impl.h (struct window_mirror):
* window.c (finalize_window):
* window.c (allocate_window):
* window.c (new_window_mirror):
* window.c (mark_window_as_deleted):
* window.c (make_dummy_parent):
* window.c (compute_window_mirror_usage):
* window.c (compute_window_usage):
Overall point of this change and previous ones in this repository:
(1) Introduce new, clearer terminology: everything other than int
or char is a "record" object, which comes in two types: "normal
objects" and "frob-block objects". Fix up all places that
referred to frob-block objects as "simple", "basic", etc.
(2) Provide an advertised interface for doing operations on Lisp
objects, including creating new types, that is clean and
consistent in its naming, uses the above-referenced terms and
avoids referencing "lrecords", "old lcrecords", etc., which should
hide under the surface.
(3) Make the size_in_bytes and finalizer methods take a
Lisp_Object rather than a void * for consistency with other methods.
(4) Separate finalizer method into finalizer and disksaver, so
that normal finalize methods don't have to worry about disksaving.
Other specifics:
(1) Renaming:
LISP_OBJECT_HEADER -> NORMAL_LISP_OBJECT_HEADER
ALLOC_LISP_OBJECT -> ALLOC_NORMAL_LISP_OBJECT
implementation->basic_p -> implementation->frob_block_p
ALLOCATE_FIXED_TYPE_AND_SET_IMPL -> ALLOC_FROB_BLOCK_LISP_OBJECT
*FCCONFIG*, wrap_fcconfig -> *FC_CONFIG*, wrap_fc_config
*FCPATTERN*, wrap_fcpattern -> *FC_PATTERN*, wrap_fc_pattern
(the last two changes make the naming of these macros consistent
with the naming of all other macros, since the objects are named
fc-config and fc-pattern with a hyphen)
(2) Lots of documentation fixes in lrecord.h.
(3) Eliminate macros for copying, freeing, zeroing objects, getting
their storage size. Instead, new functions:
zero_sized_lisp_object()
zero_nonsized_lisp_object()
lisp_object_storage_size()
free_normal_lisp_object()
(copy_lisp_object() already exists)
LISP_OBJECT_FROB_BLOCK_P() (actually a macro)
Eliminated:
free_lrecord()
zero_lrecord()
copy_lrecord()
copy_sized_lrecord()
old_copy_lcrecord()
old_copy_sized_lcrecord()
old_zero_lcrecord()
old_zero_sized_lcrecord()
LISP_OBJECT_STORAGE_SIZE()
COPY_SIZED_LISP_OBJECT()
COPY_SIZED_LCRECORD()
COPY_LISP_OBJECT()
ZERO_LISP_OBJECT()
FREE_LISP_OBJECT()
(4) Catch the remaining places where lrecord stuff was used directly
and use the advertised interface, e.g. alloc_sized_lrecord() ->
ALLOC_SIZED_LISP_OBJECT().
(5) Make certain statically-declared pseudo-objects
(buffer_local_flags, console_local_flags) have their lheader
initialized correctly, so things like copy_lisp_object() can work
on them. Make extent_auxiliary_defaults a proper heap object
Vextent_auxiliary_defaults, and make extent auxiliaries dumpable
so that this object can be dumped. allocate_extent_auxiliary()
now just creates the object, and attach_extent_auxiliary()
creates an extent auxiliary and attaches to an extent, like the
old allocate_extent_auxiliary().
(6) Create EXTENT_AUXILIARY_SLOTS macro, similar to the foo-slots.h
files but in a macro instead of a file. The purpose is to avoid
duplication when iterating over all the slots in an extent auxiliary.
Use it.
(7) In lstream.c, don't zero out object after allocation because
allocation routines take care of this.
(8) In marker.c, fix a mistake in computing marker overhead.
(9) In print.c, clean up printing_unreadable_lcrecord(),
external_object_printer() to avoid lots of ifdef NEW_GC's.
(10) Separate toolbar-button allocation into a separate
allocate_toolbar_button() function for use in the example code
in lrecord.h.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Fri, 05 Mar 2010 04:08:17 -0600 |
parents | b5df3737028a |
children | 7be849cb8828 |
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 |
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
3263
diff
changeset
|
57 DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT ("stream-console", stream_console, |
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
3263
diff
changeset
|
58 0, stream_console_data_description_1, |
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
3263
diff
changeset
|
59 Lisp_Stream_Console); |
3092 | 60 #else /* not NEW_GC */ |
1204 | 61 const struct sized_memory_description stream_console_data_description = { |
62 sizeof (struct stream_console), stream_console_data_description_1 | |
63 }; | |
3092 | 64 #endif /* not NEW_GC */ |
1204 | 65 |
428 | 66 static void |
2286 | 67 stream_init_console (struct console *con, Lisp_Object UNUSED (params)) |
428 | 68 { |
69 Lisp_Object tty = CONSOLE_CONNECTION (con); | |
70 struct stream_console *stream_con; | |
71 | |
3092 | 72 #ifdef NEW_GC |
73 if (CONSOLE_STREAM_DATA (con) == NULL) | |
5120
d1247f3cc363
latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents:
5118
diff
changeset
|
74 CONSOLE_STREAM_DATA (con) = |
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5125
diff
changeset
|
75 XSTREAM_CONSOLE (ALLOC_NORMAL_LISP_OBJECT (stream_console)); |
3092 | 76 #else /* not NEW_GC */ |
428 | 77 if (CONSOLE_STREAM_DATA (con) == NULL) |
1204 | 78 CONSOLE_STREAM_DATA (con) = xnew_and_zero (struct stream_console); |
3092 | 79 #endif /* not NEW_GC */ |
428 | 80 |
81 stream_con = CONSOLE_STREAM_DATA (con); | |
82 | |
1204 | 83 stream_con->instream = Qnil; |
428 | 84 |
85 /* Open the specified console */ | |
86 if (NILP (tty) || internal_equal (tty, Vstdio_str, 0)) | |
87 { | |
88 stream_con->in = stdin; | |
89 stream_con->out = stdout; | |
90 stream_con->err = stderr; | |
91 } | |
92 else | |
93 { | |
94 CHECK_STRING (tty); | |
95 stream_con->in = stream_con->out = stream_con->err = | |
442 | 96 /* #### We don't currently do coding-system translation on |
97 this descriptor. */ | |
771 | 98 qxe_fopen (XSTRING_DATA (tty), READ_PLUS_TEXT); |
428 | 99 if (!stream_con->in) |
563 | 100 signal_error (Qio_error, "Unable to open tty", tty); |
428 | 101 } |
102 } | |
103 | |
104 static void | |
2286 | 105 stream_init_device (struct device *d, Lisp_Object UNUSED (params)) |
428 | 106 { |
107 struct console *con = XCONSOLE (DEVICE_CONSOLE (d)); | |
108 | |
109 DEVICE_INFD (d) = fileno (CONSOLE_STREAM_DATA (con)->in); | |
110 DEVICE_OUTFD (d) = fileno (CONSOLE_STREAM_DATA (con)->out); | |
111 init_baud_rate (d); | |
112 init_one_device (d); | |
113 } | |
114 | |
115 static int | |
2286 | 116 stream_initially_selected_for_input (struct console *UNUSED (con)) |
428 | 117 { |
118 return noninteractive && initialized; | |
119 } | |
120 | |
121 extern int stdout_needs_newline; | |
122 | |
123 static void | |
124 stream_delete_console (struct console *con) | |
125 { | |
126 struct stream_console *stream_con = CONSOLE_STREAM_DATA (con); | |
127 if (stream_con) | |
128 { | |
129 if (/* stream_con->needs_newline */ | |
130 stdout_needs_newline) /* #### clean this up */ | |
131 { | |
132 fputc ('\n', stream_con->out); | |
133 fflush (stream_con->out); | |
134 } | |
135 if (stream_con->in != stdin) | |
771 | 136 retry_fclose (stream_con->in); |
428 | 137 |
3263 | 138 #ifndef NEW_GC |
4976
16112448d484
Rename xfree(FOO, TYPE) -> xfree(FOO)
Ben Wing <ben@xemacs.org>
parents:
4952
diff
changeset
|
139 xfree (stream_con); |
3092 | 140 #endif /* not NEW_GC */ |
428 | 141 CONSOLE_STREAM_DATA (con) = NULL; |
142 } | |
143 } | |
144 | |
145 Lisp_Object | |
146 stream_semi_canonicalize_console_connection (Lisp_Object connection, | |
2286 | 147 Error_Behavior UNUSED (errb)) |
428 | 148 { |
149 return NILP (connection) ? Vstdio_str : connection; | |
150 } | |
151 | |
152 Lisp_Object | |
153 stream_canonicalize_console_connection (Lisp_Object connection, | |
578 | 154 Error_Behavior errb) |
428 | 155 { |
156 if (NILP (connection) || internal_equal (connection, Vstdio_str, 0)) | |
157 return Vstdio_str; | |
158 | |
159 if (!ERRB_EQ (errb, ERROR_ME)) | |
160 { | |
161 if (!STRINGP (connection)) | |
162 return Qunbound; | |
163 } | |
164 else | |
165 CHECK_STRING (connection); | |
166 | |
167 return Ffile_truename (connection, Qnil); | |
168 } | |
169 | |
170 Lisp_Object | |
171 stream_semi_canonicalize_device_connection (Lisp_Object connection, | |
578 | 172 Error_Behavior errb) |
428 | 173 { |
174 return stream_semi_canonicalize_console_connection (connection, errb); | |
175 } | |
176 | |
177 Lisp_Object | |
178 stream_canonicalize_device_connection (Lisp_Object connection, | |
578 | 179 Error_Behavior errb) |
428 | 180 { |
181 return stream_canonicalize_console_connection (connection, errb); | |
182 } | |
183 | |
184 | |
185 static void | |
2286 | 186 stream_init_frame_1 (struct frame *f, Lisp_Object UNUSED (props), |
771 | 187 int frame_name_is_defaulted) |
428 | 188 { |
189 #if 0 | |
190 struct device *d = XDEVICE (FRAME_DEVICE (f)); | |
191 if (!NILP (DEVICE_FRAME_LIST (d))) | |
563 | 192 invalid_operation ("Only one frame allowed on stream devices", Qunbound); |
428 | 193 #endif |
771 | 194 if (frame_name_is_defaulted) |
4952
19a72041c5ed
Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents:
4928
diff
changeset
|
195 f->name = build_ascstring ("stream"); |
428 | 196 f->height = 80; |
197 f->width = 24; | |
198 f->visible = 0; /* so redisplay doesn't try to do anything */ | |
199 } | |
200 | |
201 | |
202 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
|
203 stream_text_width (struct window *UNUSED (w), |
2286 | 204 struct face_cachel *UNUSED (cachel), |
205 const Ichar *UNUSED (str), Charcount len) | |
428 | 206 { |
207 return len; | |
208 } | |
209 | |
210 static int | |
2286 | 211 stream_left_margin_width (struct window *UNUSED (w)) |
428 | 212 { |
213 return 0; | |
214 } | |
215 | |
216 static int | |
2286 | 217 stream_right_margin_width (struct window *UNUSED (w)) |
428 | 218 { |
219 return 0; | |
220 } | |
221 | |
222 static int | |
223 stream_divider_height (void) | |
224 { | |
225 return 1; | |
226 } | |
227 | |
228 static int | |
229 stream_eol_cursor_width (void) | |
230 { | |
231 return 1; | |
232 } | |
233 | |
1279 | 234 /* We used to try and check for redisplaying on stream devices (e.g. in |
235 redisplay_device(), and beg out if so. However, we didn't always manage | |
236 completely. Now we do manage completely, and to verify this we abort if | |
237 we try to display a stream device. This might fix some crashes I've | |
238 been getting in pdump -- the only difference between crash and non-crash | |
239 is a few changes to the redisplay critical-section handling. */ | |
240 | |
241 static void | |
2286 | 242 stream_window_output_begin (struct window *UNUSED (w)) |
1279 | 243 { |
2500 | 244 ABORT (); |
1279 | 245 } |
246 | |
247 static void | |
2286 | 248 stream_window_output_end (struct window *UNUSED (w)) |
1279 | 249 { |
2500 | 250 ABORT (); |
1279 | 251 } |
252 | |
253 static void | |
2286 | 254 stream_frame_output_begin (struct frame *UNUSED (f)) |
1279 | 255 { |
2500 | 256 ABORT (); |
1279 | 257 } |
258 | |
259 static void | |
2286 | 260 stream_frame_output_end (struct frame *UNUSED (f)) |
1279 | 261 { |
2500 | 262 ABORT (); |
1279 | 263 } |
264 | |
428 | 265 static void |
2286 | 266 stream_output_display_block (struct window *UNUSED (w), |
267 struct display_line *UNUSED (dl), | |
268 int UNUSED (block), int UNUSED (start), | |
269 int UNUSED (end), int UNUSED (start_pixpos), | |
270 int UNUSED (cursor_start), | |
271 int UNUSED (cursor_width), | |
272 int UNUSED (cursor_height)) | |
428 | 273 { |
2500 | 274 ABORT (); |
428 | 275 } |
276 | |
277 static void | |
2286 | 278 stream_clear_region (Lisp_Object UNUSED (window), struct device* UNUSED (d), |
279 struct frame *UNUSED (f), face_index UNUSED (findex), | |
280 int UNUSED (x), int UNUSED (y), int UNUSED (width), | |
281 int UNUSED (height), Lisp_Object UNUSED (fcolor), | |
282 Lisp_Object UNUSED (bcolor), | |
283 Lisp_Object UNUSED (background_pixmap)) | |
428 | 284 { |
2500 | 285 ABORT (); |
428 | 286 } |
287 | |
288 static int | |
2286 | 289 stream_flash (struct device *UNUSED (d)) |
428 | 290 { |
291 return 0; /* sorry can't do it */ | |
292 } | |
293 | |
294 static void | |
2286 | 295 stream_ring_bell (struct device *d, int UNUSED (volume), int UNUSED (pitch), |
296 int UNUSED (duration)) | |
428 | 297 { |
298 struct console *c = XCONSOLE (DEVICE_CONSOLE (d)); | |
826 | 299 /* Don't output ^G when not a TTY -- in particular, under MS Windows, ^G |
300 is interpreted as bell by the console, but not when running under | |
301 VC++. Probably this would be the same under Unix. */ | |
302 if (isatty (fileno (CONSOLE_STREAM_DATA (c)->out))) | |
303 { | |
304 fputc (07, CONSOLE_STREAM_DATA (c)->out); | |
305 fflush (CONSOLE_STREAM_DATA (c)->out); | |
306 } | |
428 | 307 } |
308 | |
309 | |
310 /************************************************************************/ | |
311 /* initialization */ | |
312 /************************************************************************/ | |
313 | |
314 void | |
315 console_type_create_stream (void) | |
316 { | |
317 INITIALIZE_CONSOLE_TYPE (stream, "stream", "console-stream-p"); | |
318 | |
319 /* console methods */ | |
320 CONSOLE_HAS_METHOD (stream, init_console); | |
321 CONSOLE_HAS_METHOD (stream, initially_selected_for_input); | |
322 CONSOLE_HAS_METHOD (stream, delete_console); | |
323 CONSOLE_HAS_METHOD (stream, canonicalize_console_connection); | |
324 CONSOLE_HAS_METHOD (stream, canonicalize_device_connection); | |
325 CONSOLE_HAS_METHOD (stream, semi_canonicalize_console_connection); | |
326 CONSOLE_HAS_METHOD (stream, semi_canonicalize_device_connection); | |
327 | |
328 /* device methods */ | |
329 CONSOLE_HAS_METHOD (stream, init_device); | |
330 | |
331 /* frame methods */ | |
332 CONSOLE_HAS_METHOD (stream, init_frame_1); | |
333 | |
334 /* redisplay methods */ | |
1279 | 335 CONSOLE_HAS_METHOD (stream, text_width); |
428 | 336 CONSOLE_HAS_METHOD (stream, left_margin_width); |
337 CONSOLE_HAS_METHOD (stream, right_margin_width); | |
338 CONSOLE_HAS_METHOD (stream, divider_height); | |
339 CONSOLE_HAS_METHOD (stream, eol_cursor_width); | |
1279 | 340 CONSOLE_HAS_METHOD (stream, window_output_begin); |
341 CONSOLE_HAS_METHOD (stream, window_output_end); | |
342 CONSOLE_HAS_METHOD (stream, frame_output_begin); | |
343 CONSOLE_HAS_METHOD (stream, frame_output_end); | |
344 CONSOLE_HAS_METHOD (stream, output_display_block); | |
428 | 345 CONSOLE_HAS_METHOD (stream, clear_region); |
346 CONSOLE_HAS_METHOD (stream, flash); | |
347 CONSOLE_HAS_METHOD (stream, ring_bell); | |
348 } | |
349 | |
350 void | |
351 reinit_console_type_create_stream (void) | |
352 { | |
353 REINITIALIZE_CONSOLE_TYPE (stream); | |
354 } | |
355 | |
356 void | |
357 vars_of_console_stream (void) | |
358 { | |
359 DEFVAR_LISP ("terminal-console", &Vterminal_console /* | |
444 | 360 The initial console object, which represents XEmacs' stdout. |
428 | 361 */ ); |
362 Vterminal_console = Qnil; | |
363 | |
364 DEFVAR_LISP ("terminal-device", &Vterminal_device /* | |
444 | 365 The initial device object, which represents XEmacs' stdout. |
428 | 366 */ ); |
367 Vterminal_device = Qnil; | |
368 | |
369 DEFVAR_LISP ("terminal-frame", &Vterminal_frame /* | |
444 | 370 The initial frame object, which represents XEmacs' stdout. |
428 | 371 */ ); |
372 Vterminal_frame = Qnil; | |
373 | |
374 /* Moved from console-tty.c */ | |
4952
19a72041c5ed
Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents:
4928
diff
changeset
|
375 Vstdio_str = build_ascstring ("stdio"); |
428 | 376 staticpro (&Vstdio_str); |
377 } | |
378 | |
379 #ifndef PDUMP | |
380 void | |
2342 | 381 init_console_stream (int UNUSED (reinit)) |
428 | 382 { |
383 /* This function can GC */ | |
384 if (!initialized) | |
385 { | |
386 Vterminal_device = Fmake_device (Qstream, Qnil, Qnil); | |
387 Vterminal_console = Fdevice_console (Vterminal_device); | |
388 Vterminal_frame = Fmake_frame (Qnil, Vterminal_device); | |
389 minibuf_window = XFRAME (Vterminal_frame)->minibuffer_window; | |
390 } | |
391 else | |
392 { | |
393 /* Re-initialize the FILE fields of the console. */ | |
394 stream_init_console (XCONSOLE (Vterminal_console), Qnil); | |
395 if (noninteractive) | |
396 event_stream_select_console (XCONSOLE (Vterminal_console)); | |
397 } | |
398 } | |
399 | |
400 #else | |
401 | |
402 void | |
442 | 403 init_console_stream (int reinit) |
428 | 404 { |
405 /* This function can GC */ | |
442 | 406 if (!reinit) |
407 { | |
408 Vterminal_device = Fmake_device (Qstream, Qnil, Qnil); | |
409 Vterminal_console = Fdevice_console (Vterminal_device); | |
410 Vterminal_frame = Fmake_frame (Qnil, Vterminal_device); | |
411 minibuf_window = XFRAME (Vterminal_frame)->minibuffer_window; | |
412 } | |
428 | 413 if (initialized) |
414 { | |
415 stream_init_console (XCONSOLE (Vterminal_console), Qnil); | |
416 if (noninteractive) | |
417 event_stream_select_console (XCONSOLE (Vterminal_console)); | |
418 } | |
419 } | |
420 #endif |