Mercurial > hg > xemacs-beta
annotate src/systty.h @ 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 | aa5ed11f473b |
children | 308d34e9f07d |
rev | line source |
---|---|
428 | 1 /* systty.h - System-dependent definitions for terminals. |
2 Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. | |
3 | |
4 This file is part of XEmacs. | |
5 | |
6 XEmacs is free software; you can redistribute it and/or modify it | |
7 under the terms of the GNU General Public License as published by the | |
8 Free Software Foundation; either version 2, or (at your option) any | |
9 later version. | |
10 | |
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with XEmacs; see the file COPYING. If not, write to | |
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
19 Boston, MA 02111-1307, USA. */ | |
20 | |
21 /* Synched up with: FSF 19.30. */ | |
22 | |
440 | 23 #ifndef INCLUDED_systty_h_ |
24 #define INCLUDED_systty_h_ | |
428 | 25 |
26 #ifdef HAVE_TERMIOS | |
27 # define HAVE_TCATTR | |
28 #endif | |
29 | |
30 | |
31 /* Include the proper files. */ | |
32 | |
33 #ifdef HAVE_UNISTD_H | |
34 #include <unistd.h> | |
35 #endif | |
36 | |
37 /* XEmacs: TERMIOS is mo' better than TERMIO so we use it if it's | |
38 there. Since TERMIO is backward-compatibility stuff if both it | |
39 and TERMIOS exist, it's more likely to be broken. */ | |
40 | |
41 #if defined (HAVE_TERMIOS) | |
42 | |
43 /***** (1) The TERMIOS way (POSIX style) *****/ | |
44 | |
45 # if defined (_AIX) && defined (_I386) | |
46 # include <termios.h> /* termios.h needs to be before termio.h */ | |
47 # include <termio.h> | |
48 # else | |
49 # if !defined (NO_TERMIO) | |
50 # include <termio.h> | |
51 # endif | |
52 # include <termios.h> | |
53 # endif /* _AIX && _I386 */ | |
54 # ifndef INCLUDED_FCNTL | |
55 # define INCLUDED_FCNTL | |
56 # include <fcntl.h> | |
57 # endif | |
58 | |
59 #elif defined (HAVE_TERMIO) | |
60 | |
61 /***** (2) The TERMIO way (system V style) *****/ | |
62 | |
63 # ifndef NO_TERMIO | |
64 # include <termio.h> | |
65 # endif /* not NO_TERMIO */ | |
66 # ifndef INCLUDED_FCNTL | |
67 # define INCLUDED_FCNTL | |
68 # include <fcntl.h> | |
69 # endif | |
70 | |
442 | 71 #elif defined (WIN32_NATIVE) |
428 | 72 |
442 | 73 /***** (3) The WIN32_NATIVE way *****/ |
428 | 74 |
75 /* Nothing doing */ | |
76 | |
77 #else | |
78 | |
79 /***** (4) The BSD way *****/ | |
80 | |
81 # ifdef linux /* XEmacs addition -- necessary? */ | |
82 # include <bsd/sgtty.h> | |
83 # else | |
84 # include <sgtty.h> | |
85 # endif | |
86 | |
87 | |
88 #endif /* HAVE_TERMIOS */ | |
89 | |
90 /* XEmacs: I don't think we need the following crap. */ | |
91 #ifdef __GNU_LIBRARY__ | |
92 #include <termios.h> | |
93 #endif | |
94 | |
95 /* Formerly there was a conditional that included sys/filio.h if | |
96 USG5_4 was defined, but this is already included in s/usg5-4.h */ | |
97 | |
98 /* Generally useful to include this file: */ | |
99 | |
4759
aa5ed11f473b
Remove support for obsolete systems. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents:
771
diff
changeset
|
100 #if !defined (WIN32_NATIVE) |
428 | 101 # include <sys/ioctl.h> |
102 #endif | |
103 | |
104 | |
105 /* ----------------------------------------------------- */ | |
106 /* miscellaneous includes */ | |
107 /* ----------------------------------------------------- */ | |
108 | |
109 /* Include files for PTY's */ | |
110 | |
535 | 111 #if defined (HAVE_SYS_PTYIO_H) /* HP-UX */ |
428 | 112 #include <sys/ptyio.h> |
113 #endif | |
114 | |
535 | 115 #if defined (HAVE_PTY_H) |
116 #include <pty.h> | |
117 #elif defined (HAVE_SYS_PTY_H) | |
428 | 118 #include <sys/pty.h> |
119 #endif | |
120 | |
121 /* XEmacs: removed some random if defined (pfa) crap for FASYNC (SIGIO). | |
122 We've cleaned SIGIO up. */ | |
123 | |
124 | |
125 /* ----------------------------------------------------- */ | |
126 /* inhibiting particular features */ | |
127 /* ----------------------------------------------------- */ | |
128 | |
129 | |
4759
aa5ed11f473b
Remove support for obsolete systems. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents:
771
diff
changeset
|
130 #if defined (BROKEN_TIOCGETC) |
428 | 131 #undef TIOCGETC /* Avoid confusing some conditionals that test this. */ |
132 #endif | |
133 | |
134 /* XEmacs: SIGIO is cleaned up so we remove the crap here that messes | |
135 with it (and FIONREAD and FASYNC, which are related). */ | |
136 | |
137 /* On TERMIOS systems, the tcmumbleattr calls take care of these | |
138 parameters, and it's a bad idea to use them (on AIX, it makes the | |
139 tty hang for a long time). */ | |
140 #if defined (TIOCGLTC) && !defined (HAVE_TERMIOS) | |
141 #define HAVE_LTCHARS | |
142 #endif | |
143 | |
144 #if defined (TIOCGETC) && !defined (HAVE_TERMIOS) | |
145 #define HAVE_TCHARS | |
146 #endif | |
147 | |
148 | |
149 /* ----------------------------------------------------- */ | |
150 /* disabling terminal functions */ | |
151 /* ----------------------------------------------------- */ | |
152 | |
153 /* Try to establish the correct character to disable terminal functions | |
154 in a system-independent manner. | |
155 We use the POSIX standard way to do this, and emulate on other systems. */ | |
156 | |
157 #ifndef _POSIX_VDISABLE | |
158 # if defined CDEL | |
159 # define _POSIX_VDISABLE CDEL | |
160 # else | |
161 # define _POSIX_VDISABLE 255 | |
162 # endif | |
163 #endif /* ! _POSIX_VDISABLE */ | |
164 | |
165 | |
166 /* ----------------------------------------------------- */ | |
167 /* Get the number of characters queued for output */ | |
168 /* ----------------------------------------------------- */ | |
169 | |
170 /* EMACS_OUTQSIZE(FD, int *SIZE) stores the number of characters | |
171 queued for output to the terminal FD in *SIZE, if FD is a tty. | |
172 Returns -1 if there was an error (i.e. FD is not a tty), 0 | |
173 otherwise. */ | |
174 #ifdef TIOCOUTQ | |
175 #define EMACS_OUTQSIZE(fd, size) ioctl (fd, TIOCOUTQ, size) | |
176 #endif | |
177 | |
178 #ifdef HAVE_TERMIO | |
179 #ifdef TCOUTQ | |
180 #undef EMACS_OUTQSIZE | |
181 #define EMACS_OUTQSIZE(fd, size) ioctl (fd, TCOUTQ, size) | |
182 #endif | |
183 #endif | |
184 | |
185 | |
186 /* -------------------------------------------------------------------- */ | |
187 /* Manipulate a terminal's current (foreground) process group */ | |
188 /* -------------------------------------------------------------------- */ | |
189 | |
442 | 190 /* EMACS_GET_TTY_PGRP(int FD, pid_t *PGID) sets *PGID to the terminal |
191 FD's current foreground process group. Return -1 if there is an error. | |
192 | |
193 EMACS_SET_TTY_PGRP(int FD, pid_t *PGID) sets the terminal FD's current | |
194 foreground process group to *PGID. Return -1 if there is an error. | |
428 | 195 |
442 | 196 We prefer using the ioctl (BSD) interface instead of its Posix |
197 replacement tgetpgrp/tcsetpgrp since that is documented as being | |
198 restricted to processes sharing the same controlling tty. */ | |
428 | 199 |
442 | 200 #if defined (TIOCGPGRP) |
428 | 201 |
442 | 202 #define EMACS_GET_TTY_PROCESS_GROUP(fd, pgid) ioctl (fd, TIOCGPGRP, pgid) |
203 #define EMACS_SET_TTY_PROCESS_GROUP(fd, pgid) ioctl (fd, TIOCSPGRP, pgid) | |
204 | |
205 #elif defined (HAVE_TCGETPGRP) | |
428 | 206 |
442 | 207 #define EMACS_GET_TTY_PROCESS_GROUP(fd, pgid) (*(pgid) = tcgetpgrp (fd)) |
208 #define EMACS_SET_TTY_PROCESS_GROUP(fd, pgid) tcsetpgrp (fd, *(pgid)) | |
428 | 209 |
442 | 210 #else |
428 | 211 |
442 | 212 /* Just ignore this for now and hope for the best */ |
213 #define EMACS_GET_TTY_PROCESS_GROUP(fd, pgid) 0 | |
214 #define EMACS_SET_TTY_PROCESS_GROUP(fd, pgif) 0 | |
428 | 215 |
216 #endif | |
217 | |
218 /* EMACS_GETPGRP (arg) returns the process group of the terminal. */ | |
219 | |
220 #ifdef GETPGRP_VOID | |
221 #define EMACS_GETPGRP(x) getpgrp() | |
222 #else | |
223 #define EMACS_GETPGRP(x) getpgrp(x) | |
224 #endif /* GETPGRP_VOID */ | |
225 | |
226 /* XEmacs backward-compatibility. Is 0 always a reasonable argument? */ | |
227 #define EMACS_GET_PROCESS_GROUP() EMACS_GETPGRP (0) | |
228 | |
229 /* XEmacs addition? */ | |
230 | |
231 /* EMACS_SEPARATE_PROCESS_GROUP () creates a separate process group for the | |
232 running process. */ | |
233 | |
234 /* EMACS_SET_PROCESS_GROUP () sets our process group as specified. */ | |
235 | |
236 /* POSIX calls for setpgid(), so we use it if it's available. | |
237 Otherwise use setpgrp(), in USG or BSD flavor. Note that | |
238 on newer systems, setpgrp() has unwanted effects (e.g. | |
239 creating a new session), so we want to avoid its use | |
240 if possible. | |
241 | |
242 NOTE: On some older systems, we should consider using setpgrp2() | |
243 if it exists. This is sufficiently rare, though, that there | |
244 seems no point in autodetecting it. Currently dgux.h is the | |
245 only place where this has to be munged. */ | |
246 | |
247 #if defined (HAVE_SETPGID) | |
248 # define EMACS_SEPARATE_PROCESS_GROUP() setpgid (0, 0) | |
249 # define EMACS_SET_PROCESS_GROUP(pg) setpgid (0, pg) | |
250 #elif defined (USG) | |
251 # define EMACS_SEPARATE_PROCESS_GROUP() setpgrp () | |
252 /* old (pre-SVR4) USG's don't provide any way to do this. | |
253 No big loss -- it just means that ^Z won't work right | |
254 if we're run from sh. */ | |
255 # define EMACS_SET_PROCESS_GROUP(pg) | |
771 | 256 #elif defined (WIN32_NATIVE) |
432 | 257 # define EMACS_SEPARATE_PROCESS_GROUP() |
428 | 258 #else |
259 /* Under NeXTstep, a process group of 0 is not the same as specifying | |
260 your own process ID, so we go ahead and specify it explicitly. */ | |
261 # define EMACS_SEPARATE_PROCESS_GROUP() setpgrp (0, getpid ()) | |
262 # define EMACS_SET_PROCESS_GROUP(pg) setpgrp (0, pg) | |
263 #endif | |
264 | |
265 | |
266 /* --------------------------------------------------------- */ | |
267 /* Manipulate a TTY's input/output processing parameters */ | |
268 /* --------------------------------------------------------- */ | |
269 | |
270 /* struct emacs_tty is a structure used to hold the current tty | |
271 parameters. If the terminal has several structures describing its | |
272 state, for example a struct tchars, a struct sgttyb, a struct | |
273 tchars, a struct ltchars, and a struct pagechars, struct | |
274 emacs_tty should contain an element for each parameter struct | |
275 that Emacs may change. | |
276 | |
430 | 277 emacs_get_tty (int FD, struct emacs_tty *P) stores the parameters |
428 | 278 of the tty on FD in *P. Return zero if all's well, or -1 if we ran |
279 into an error we couldn't deal with. | |
280 | |
430 | 281 emacs_set_tty (int FD, struct emacs_tty *P, int flushp) |
428 | 282 sets the parameters of the tty on FD according to the contents of |
283 *P. If flushp is non-zero, we discard queued input to be | |
284 written before making the change. | |
285 Return 0 if all went well, and -1 if anything failed. | |
286 | |
287 EMACS_TTY_TABS_OK (struct emacs_tty *P) is false iff the kernel | |
288 expands tabs to spaces upon output; in that case, there is no | |
289 advantage to using tabs over spaces. */ | |
290 | |
291 | |
292 /* For each tty parameter structure that Emacs might want to save and restore, | |
293 - include an element for it in this structure, and | |
294 - extend the emacs_{get,set}_tty functions in sysdep.c to deal with the | |
295 new members. */ | |
296 | |
297 struct emacs_tty { | |
298 | |
299 /* There is always one of the following elements, so there is no need | |
300 for dummy get and set definitions. */ | |
301 #ifdef HAVE_TCATTR | |
302 struct termios main; | |
303 #else /* !HAVE_TCATTR */ | |
304 #ifdef HAVE_TERMIO | |
305 struct termio main; | |
306 #else /* !HAVE_TERMIO */ | |
442 | 307 #ifdef WIN32_NATIVE |
428 | 308 int main; |
442 | 309 #else /* not WIN32_NATIVE */ |
428 | 310 struct sgttyb main; |
442 | 311 #endif /* not WIN32_NATIVE */ |
428 | 312 #endif /* !HAVE_TERMIO */ |
313 #endif /* !HAVE_TCATTR */ | |
314 | |
315 /* If we have TERMIOS, we don't need to do this - they're taken care of | |
316 by the tc*attr calls. */ | |
317 #ifndef HAVE_TERMIOS | |
318 #ifdef HAVE_LTCHARS | |
319 struct ltchars ltchars; | |
320 #endif /* HAVE_LTCHARS */ | |
321 | |
322 #ifdef HAVE_TCHARS | |
323 struct tchars tchars; | |
324 int lmode; | |
325 #endif /* HAVE_TCHARS */ | |
326 #endif /* HAVE_TERMIOS */ | |
327 }; | |
328 | |
430 | 329 int emacs_get_tty (int fd, struct emacs_tty *settings); |
330 int emacs_set_tty (int fd, struct emacs_tty *settings, int flushp); | |
428 | 331 |
332 | |
333 /* --------------------------------------------------------- */ | |
334 /* Define EMACS_TTY_TABS_OK */ | |
335 /* --------------------------------------------------------- */ | |
336 | |
513 | 337 #if defined (TABDLY) && defined (TAB3) |
338 # define EMACS_TTY_TABS_OK(p) (((p)->main.c_oflag & TABDLY) != TAB3) | |
339 #elif defined (OXTABS) | |
340 # define EMACS_TTY_TABS_OK(p) (((p)->main.c_oflag & OXTABS) != OXTABS) | |
428 | 341 #else |
513 | 342 # define EMACS_TTY_TABS_OK(p) 1 |
343 #endif | |
428 | 344 |
440 | 345 #endif /* INCLUDED_systty_h_ */ |