Mercurial > emacs
changeset 18097:ce2004da4ccd
Initial revision
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 01 Jun 1997 23:49:06 +0000 |
parents | 25c6c100c16b |
children | 10b2526db6f0 |
files | src/s/dgux4.h |
diffstat | 1 files changed, 134 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/s/dgux4.h Sun Jun 01 23:49:06 1997 +0000 @@ -0,0 +1,134 @@ +/* Definitions file for GNU Emacs running on Data General's DG/UX + Release 4.10 and above. + Copyright (C) 1996 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 2, 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; see the file COPYING. If not, write to +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* This file was written by Roderick Schertler <roderick@ibcinc.com>, + contact me if you have problems with or comments about running Emacs + on dgux. + + A number of things in the older dgux*.h files don't make sense to me, + but since I'm relying on memory and I don't have any older dgux + systems installed on which to test changes I'm undoing or fixing them + here rather than fixing them at the source. */ + +/* In dgux.h it says "Can't use sys_signal because then etc/server.c + would need sysdep.o." and then it #defines signal() to be + berk_signal(), but emacsserver.c does `#undef signal' anyway, so that + doesn't make sense. + + Further, sys_signal() in sysdep.c already had a special case for + #ifdef DGUX, it called berk_signal() explicitly. I've removed that + special case because it also didn't make sense: All versions of dgux + which the dgux*.h headers take into account have POSIX signals + (POSIX_SIGNALS is #defined in dgux.h). The comments in sys_signal() + even acknowledged this (saying that the special berk_signal() case + wasn't really necessary), they said that sys_signal() was using + berk_signal() instead of sigaction() for efficiency. Since both give + reliable signals neither has to be invoked within the handler. If + the efficiency that the comments were talking about is the overhead + of setting up the sigaction struct rather than just passing the + function pointer in (which is the only efficiency I can think of) + then that's a needless optimization, the Emacs sources do better + without the special case. + + The following definition will prevent dgux.h from re-defining + signal(). I can't just say `#undef signal' after including dgux.h + because signal() is already a macro, defined in <sys/signal.h>, and + the original definition would be lost. */ +#define NO_DGUX_SIGNAL_REDEF + +#include "dgux5-4r3.h" + +#define LIBS_DEBUG /* nothing, -lg doesn't exist */ + +#ifndef NOT_C_CODE + +/* dgux.h defines _setjmp() to be sigsetjmp(), but it defines _longjmp + to be longjmp() rather than siglongjmp(). Further, it doesn't define + jmp_buf, so sigsetjmp() is being called with a jmp_buf rather than a + sigjmp_buf, and the buffer is then passed to vanilla longjmp(). This + provides a more complete emulation of the Berkeley semantics. */ + +#include <setjmp.h> +#undef jmp_buf +#undef _setjmp +#undef setjmp +#undef _longjmp +#undef longjmp +#define jmp_buf sigjmp_buf +#define _setjmp(env) sigsetjmp(env, 0) +#define setjmp(env) sigsetjmp(env, 1) +#define _longjmp siglongjmp +#define longjmp siglongjmp + +/* The BAUD_CONVERT definition in dgux.h is wrong with this version + of dgux, but I'm not sure when it changed. + + With the current system Emacs' standard handling of ospeed and + baud_rate don't work. The baud values (B9600 and so on) returned by + cfgetospeed() aren't compatible with those used by ospeed. speed_t, + the type returned by cfgetospeed(), is unsigned long and speed_t + values are large. Further, it isn't possible to get at both the + SysV3 (ospeed) and POSIX (cfgetospeed()) values through symbolic + constants simultaneously because they both use the same names + (B9600). To get both baud_rate and ospeed right at the same time + it's necessary to hardcode the values for one set of values, here I'm + hardcoding ospeed. */ +#undef BAUD_CONVERT +#define INIT_BAUD_RATE() \ + struct termios sg; \ + \ + tcgetattr (input_fd, &sg); \ + switch (cfgetospeed (&sg)) { \ + case B50: baud_rate = 50; ospeed = 0x1; break; \ + case B75: baud_rate = 75; ospeed = 0x2; break; \ + case B110: baud_rate = 110; ospeed = 0x3; break; \ + case B134: baud_rate = 134; ospeed = 0x4; break; \ + case B150: baud_rate = 150; ospeed = 0x5; break; \ + case B200: baud_rate = 200; ospeed = 0x6; break; \ + case B300: baud_rate = 300; ospeed = 0x7; break; \ + case B600: baud_rate = 600; ospeed = 0x8; break; \ + default: \ + case B1200: baud_rate = 1200; ospeed = 0x9; break; \ + case B1800: baud_rate = 1800; ospeed = 0xa; break; \ + case B2400: baud_rate = 2400; ospeed = 0xb; break; \ + case B4800: baud_rate = 4800; ospeed = 0xc; break; \ + case B9600: baud_rate = 9600; ospeed = 0xd; break; \ + case B19200: baud_rate = 19200; ospeed = 0xe; break; \ + case B38400: baud_rate = 38400; ospeed = 0xf; break; \ + } \ + return; + +/* The `stop on tty output' problem which occurs when using + INTERRUPT_INPUT and when Emacs is invoked under X11 using a job + control shell (csh, ksh, etc.) in the background doesn't look to be + present in R4.11. (At least, I can't reproduce it using jsh, csh, + ksh or zsh.) */ +#undef BROKEN_FIONREAD +#define INTERRUPT_INPUT + +/* In R4.11 (or maybe R4.10, I don't have a system with that version + loaded) some of the internal stdio semantics were changed. One I + found while working on MH is that _cnt has to be 0 before _filbuf() + is called. Another is that (_ptr - _base) doesn't indicate how many + characters are waiting to be sent. I can't spot a good way to get + that info from the FILE internals. */ +#define PENDING_OUTPUT_COUNT(FILE) (1) + +#endif /* NOT_C_CODE */