Mercurial > hg > xemacs-beta
annotate src/systty.h @ 5086:47bcef7b0b44
Print multiple values with #<INTERNAL OBJECT (XEmacs bug?) ...>, too
2010-03-02 Aidan Kehoe <kehoea@parhasard.net>
* eval.c (print_multiple_value):
Say #<INTERNAL OBJECT (XEmacs bug?) ...> when printing these, for
consistency with the rest of the print code.
| author | Aidan Kehoe <kehoea@parhasard.net> |
|---|---|
| date | Tue, 02 Mar 2010 13:20:51 +0000 |
| 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_ */ |
