* src/data.c (sign_extend_temp, sign_extend_lisp_int): Remove, unused.
[bpt/emacs.git] / src / systty.h
CommitLineData
a04c9535 1/* systty.h - System-dependent definitions for terminals.
429ab54e 2 Copyright (C) 1993, 1994, 2001, 2002, 2003, 2004,
114f9c96 3 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
d0d6b7c5
JB
4
5This file is part of GNU Emacs.
6
b9b1cc14 7GNU Emacs is free software: you can redistribute it and/or modify
d0d6b7c5 8it under the terms of the GNU General Public License as published by
b9b1cc14
GM
9the Free Software Foundation, either version 3 of the License, or
10(at your option) any later version.
d0d6b7c5
JB
11
12GNU Emacs is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
b9b1cc14 18along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
d0d6b7c5 19
d0d6b7c5 20/* Include the proper files. */
a7ebc409 21#ifndef DOS_NT
d2d846a3 22#ifndef NO_TERMIO
d0d6b7c5 23#include <termio.h>
d2d846a3 24#endif /* not NO_TERMIO */
d0d6b7c5 25#include <termios.h>
1aaaff21 26#include <fcntl.h>
101adcb5 27#endif /* not DOS_NT */
d0d6b7c5 28
a7ebc409 29#ifdef HAVE_SYS_IOCTL_H
c3ff76c4 30#include <sys/ioctl.h>
c9b67b7b
RM
31#endif
32
28823648 33#ifdef HPUX
4746118a 34#include <sys/bsdtty.h>
4746118a
JB
35#include <sys/ptyio.h>
36#endif
378ac314 37
4746118a
JB
38#ifdef AIX
39#include <sys/pty.h>
4746118a
JB
40#endif /* AIX */
41
28823648 42#ifdef HAVE_UNISTD_H
9825c716 43#include <unistd.h>
5ab57b9f
RS
44#endif
45
d0d6b7c5
JB
46\f
47/* Special cases - inhibiting the use of certain features. */
48
d0d6b7c5
JB
49/* Allow m- file to inhibit use of FIONREAD. */
50#ifdef BROKEN_FIONREAD
51#undef FIONREAD
52#undef ASYNC
53#endif
54
eb8c3be9 55/* Interrupt input is not used if there is no FIONREAD. */
d0d6b7c5
JB
56#ifndef FIONREAD
57#undef SIGIO
58#endif
59
60\f
2102829e
RS
61/* Try to establish the correct character to disable terminal functions
62 in a system-independent manner. Note that USG (at least) define
63 _POSIX_VDISABLE as 0! */
64
65#ifdef _POSIX_VDISABLE
66#define CDISABLE _POSIX_VDISABLE
67#else /* not _POSIX_VDISABLE */
68#ifdef CDEL
d04e8e46 69#undef CDISABLE
2102829e
RS
70#define CDISABLE CDEL
71#else /* not CDEL */
72#define CDISABLE 255
73#endif /* not CDEL */
74#endif /* not _POSIX_VDISABLE */
75\f
d0d6b7c5
JB
76/* Get the number of characters queued for output. */
77
78/* EMACS_OUTQSIZE(FD, int *SIZE) stores the number of characters
79 queued for output to the terminal FD in *SIZE, if FD is a tty.
80 Returns -1 if there was an error (i.e. FD is not a tty), 0
81 otherwise. */
82#ifdef TIOCOUTQ
83#define EMACS_OUTQSIZE(fd, size) (ioctl ((fd), TIOCOUTQ, (size)))
84#endif
85
d0d6b7c5
JB
86\f
87/* Manipulate a terminal's current process group. */
88
a7ebc409 89/* EMACS_GET_TTY_PGRP(int FD, int *PGID) sets *PGID the terminal FD's
d0d6b7c5
JB
90 current process group. Return -1 if there is an error.
91
92 EMACS_SET_TTY_PGRP(int FD, int *PGID) sets the terminal FD's
93 current process group to *PGID. Return -1 if there is an error. */
94
a7ebc409 95#ifndef DOS_NT
27ec92c9
DN
96#define EMACS_GET_TTY_PGRP(fd, pgid) (*(pgid) = tcgetpgrp ((fd)))
97#define EMACS_SET_TTY_PGRP(fd, pgid) (tcsetpgrp ((fd), *(pgid)))
a7ebc409 98#endif /* not DOS_NT */
d0d6b7c5 99
281bbdfb 100/* EMACS_GETPGRP (arg) returns the process group of the process. */
727b007c 101
f7ff70e8 102#if defined (GETPGRP_VOID)
727b007c 103# define EMACS_GETPGRP(x) getpgrp()
27ec92c9 104#else /* !GETPGRP_VOID */
727b007c 105# define EMACS_GETPGRP(x) getpgrp(x)
f7ff70e8 106#endif /* !GETPGRP_VOID */
d0d6b7c5
JB
107\f
108/* Manipulate a TTY's input/output processing parameters. */
109
110/* struct emacs_tty is a structure used to hold the current tty
111 parameters. If the terminal has several structures describing its
112 state, for example a struct tchars, a struct sgttyb, a struct
113 tchars, a struct ltchars, and a struct pagechars, struct
114 emacs_tty should contain an element for each parameter struct
115 that Emacs may change.
116
1334b321
JB
117 EMACS_GET_TTY (int FD, struct emacs_tty *P) stores the parameters
118 of the tty on FD in *P. Return zero if all's well, or -1 if we ran
119 into an error we couldn't deal with.
d0d6b7c5 120
1bf61ff9 121 EMACS_SET_TTY (int FD, struct emacs_tty *P, int flushp)
d0d6b7c5 122 sets the parameters of the tty on FD according to the contents of
1bf61ff9
RS
123 *P. If flushp is non-zero, we discard queued input to be
124 written before making the change.
1334b321 125 Return 0 if all went well, and -1 if anything failed.
d0d6b7c5 126
e0f24100 127 EMACS_TTY_TABS_OK (struct emacs_tty *P) is false if the kernel
d0d6b7c5
JB
128 expands tabs to spaces upon output; in that case, there is no
129 advantage to using tabs over spaces. */
130
131
d0d6b7c5 132/* For each tty parameter structure that Emacs might want to save and restore,
1334b321
JB
133 - include an element for it in this structure, and
134 - extend the emacs_{get,set}_tty functions in sysdep.c to deal with the
135 new members. */
d0d6b7c5
JB
136
137struct emacs_tty {
138
139/* There is always one of the following elements, so there is no need
140 for dummy get and set definitions. */
a7ebc409 141#ifndef DOS_NT
d0d6b7c5 142 struct termios main;
a7ebc409 143#else /* DOS_NT */
8e99c732 144 int main;
a7ebc409 145#endif /* DOS_NT */
2182d459
RS
146};
147\f
148/* Define EMACS_GET_TTY and EMACS_SET_TTY,
c2e4f49a 149 the macros for reading and setting parts of `struct emacs_tty'.
d0d6b7c5 150
c2e4f49a
JB
151 These got pretty unmanageable (huge macros are hard to debug), and
152 finally needed some code which couldn't be done as part of an
153 expression, so we moved them out to their own functions in sysdep.c. */
154#define EMACS_GET_TTY(fd, p) (emacs_get_tty ((fd), (p)))
155#define EMACS_SET_TTY(fd, p, waitp) (emacs_set_tty ((fd), (p), (waitp)))
a99ebb40
DN
156extern int emacs_get_tty (int, struct emacs_tty *);
157extern int emacs_set_tty (int, struct emacs_tty *, int);
d0d6b7c5 158
2182d459
RS
159\f
160/* Define EMACS_TTY_TABS_OK. */
d0d6b7c5 161
a7ebc409 162#ifndef DOS_NT
d0d6b7c5 163
c7040669 164#ifdef TABDLY
d0d6b7c5 165#define EMACS_TTY_TABS_OK(p) (((p)->main.c_oflag & TABDLY) != TAB3)
27ec92c9 166#else /* not TABDLY */
c7040669 167#define EMACS_TTY_TABS_OK(p) 1
27ec92c9 168#endif /* not TABDLY */
d0d6b7c5 169
a7ebc409 170#else /* DOS_NT */
8e99c732 171#define EMACS_TTY_TABS_OK(p) 0
a7ebc409 172#endif /* DOS_NT */
ab5796a9
MB
173
174/* arch-tag: cf4b90bc-be41-401c-be98-40619178a712
175 (do not change this comment) */