The code that dealt with SIGIO was crufty and confusing, e.g., it played tricks like "#undef SIGIO" but these tricks were not used consistently. Simplify mostly by not #undeffing standard symbols, e.g., use "defined USABLE_SIGIO" (our symbol, which we can define or not as we please) rather than "defined SIGIO" (standard symbol that we probably shouldn't #undef). * configure.ac (NO_TERMIO, BROKEN_FIONREAD, BROKEN_SIGAIO) (BROKEN_SIGPOLL, BROKEN_SIGPTY): Remove. (USABLE_FIONREAD, USABLE_SIGIO): New symbols. All uses of 'defined SIGIO' replaced with 'defined USABLE_SIGIO', with no need to #undef SIGIO now (which was error-prone). Likewise, all uses of 'defined FIONREAD' replaced with 'defined USABLE_FIONREAD'. * src/admin/CPP_DEFINES (BROKEN_SIGAIO, BROKEN_SIGIO, BROKEN_SIGPOLL) (BROKEN_SIGPTY, NO_TERMIO): Remove. * src/conf_post.h [USG5_4]: Do not include <sys/wait.h> here. Modules that need it can include it. [USG5_4 && emacs]: Likewise, do not include the streams stuff here. * src/dispextern.h (ignore_sigio): New decl. * src/emacs.c (shut_down_emacs): Invoke unrequest_sigio unconditionally, since it's now a no-op if !USABLE_SIGIO. * src/emacs.c (shut_down_emacs): * src/keyboard.c (kbd_buffer_store_event_hold): Use ignore_sigio rather than invoking 'signal' directly. * src/keyboard.c (USABLE_FIONREAD && USG5_4): Include <sys/filio.h>, for FIONREAD. (FIONREAD, SIGIO): Do not #undef. (tty_read_avail_input): Use #error rather than a syntax error. * src/process.c [USG5_4]: Include <sys/stream.h> and <sys/stropts.h>, for I_PIPE, used by SETUP_SLAVE_PTY. (DATAGRAM_SOCKETS): Simplify defn, based on USABLE_FIONREAD. * src/sysdep.c (croak): Remove; no longer needed. This bit of temporary code, with Fred N. Fish's comment that it's temporary, has been in Emacs since at least 1992! (init_sigio, reset_sigio, request_sigio, unrequest_sigio): Arrange for them to be no-ops in all cases when ! USABLE_SIGIO. * src/syssignal.h (croak): Remove decl. (SIGIO, SIGPOO, SIGAIO, SIGPTY): Do not #undef; that's too fragile. * src/systty.h [!NO_TERMIO]: Do not include <termio.h>; no longer needed now that we're termios-only. (FIONREAD, ASYNC) [BROKEN_FIONREAD]: Do not #undef. * src/term.c (dissociate_if_controlling_tty): Use #error rather than a run-time error. Fixes: debbugs:12408
105 lines
3.0 KiB
C
105 lines
3.0 KiB
C
/* systty.h - System-dependent definitions for terminals.
|
||
Copyright (C) 1993-1994, 2001-2012 Free Software Foundation, Inc.
|
||
|
||
This file is part of GNU Emacs.
|
||
|
||
GNU Emacs is free software: you can redistribute it and/or modify
|
||
it under the terms of the GNU General Public License as published by
|
||
the Free Software Foundation, either version 3 of the License, or
|
||
(at your option) any later version.
|
||
|
||
GNU Emacs is distributed in the hope that it will be useful,
|
||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU General Public License for more details.
|
||
|
||
You should have received a copy of the GNU General Public License
|
||
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||
|
||
/* Include the proper files. */
|
||
|
||
#ifndef DOS_NT
|
||
#include <termios.h>
|
||
#include <fcntl.h>
|
||
#endif /* not DOS_NT */
|
||
|
||
#include <sys/ioctl.h>
|
||
|
||
#ifdef HPUX
|
||
#include <sys/bsdtty.h>
|
||
#include <sys/ptyio.h>
|
||
#endif
|
||
|
||
#ifdef AIX
|
||
#include <sys/pty.h>
|
||
#endif /* AIX */
|
||
|
||
#include <unistd.h>
|
||
|
||
|
||
/* Try to establish the correct character to disable terminal functions
|
||
in a system-independent manner. Note that USG (at least) define
|
||
_POSIX_VDISABLE as 0! */
|
||
|
||
#ifdef _POSIX_VDISABLE
|
||
#define CDISABLE _POSIX_VDISABLE
|
||
#else /* not _POSIX_VDISABLE */
|
||
#ifdef CDEL
|
||
#undef CDISABLE
|
||
#define CDISABLE CDEL
|
||
#else /* not CDEL */
|
||
#define CDISABLE 255
|
||
#endif /* not CDEL */
|
||
#endif /* not _POSIX_VDISABLE */
|
||
|
||
/* Get the number of characters queued for output. */
|
||
|
||
/* EMACS_OUTQSIZE(FD, int *SIZE) stores the number of characters
|
||
queued for output to the terminal FD in *SIZE, if FD is a tty.
|
||
Returns -1 if there was an error (i.e. FD is not a tty), 0
|
||
otherwise. */
|
||
#ifdef TIOCOUTQ
|
||
#define EMACS_OUTQSIZE(fd, size) (ioctl ((fd), TIOCOUTQ, (size)))
|
||
#endif
|
||
|
||
|
||
/* Manipulate a terminal's current process group. */
|
||
|
||
/* EMACS_GETPGRP (arg) returns the process group of the process. */
|
||
|
||
#if defined (GETPGRP_VOID)
|
||
# define EMACS_GETPGRP(x) getpgrp()
|
||
#else /* !GETPGRP_VOID */
|
||
# define EMACS_GETPGRP(x) getpgrp(x)
|
||
#endif /* !GETPGRP_VOID */
|
||
|
||
/* Manipulate a TTY's input/output processing parameters. */
|
||
|
||
/* struct emacs_tty is a structure used to hold the current tty
|
||
parameters. If the terminal has several structures describing its
|
||
state, for example a struct tchars, a struct sgttyb, a struct
|
||
tchars, a struct ltchars, and a struct pagechars, struct
|
||
emacs_tty should contain an element for each parameter struct
|
||
that Emacs may change. */
|
||
|
||
|
||
/* For each tty parameter structure that Emacs might want to save and restore,
|
||
- include an element for it in this structure, and
|
||
- extend the emacs_{get,set}_tty functions in sysdep.c to deal with the
|
||
new members. */
|
||
|
||
struct emacs_tty {
|
||
|
||
/* There is always one of the following elements, so there is no need
|
||
for dummy get and set definitions. */
|
||
#ifndef DOS_NT
|
||
struct termios main;
|
||
#else /* DOS_NT */
|
||
int main;
|
||
#endif /* DOS_NT */
|
||
};
|
||
|
||
/* From sysdep.c or w32.c */
|
||
extern int serial_open (char *);
|
||
extern void serial_configure (struct Lisp_Process *, Lisp_Object);
|