/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/osterm.h,v 1.2 1990/10/16 20:53:21 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/osterm.h,v 1.3 1990/11/01 04:33:05 cph Exp $
Copyright (c) 1990 Massachusetts Institute of Technology
extern unsigned int EXFUN (arg_baud_index, (unsigned int argument));
extern unsigned int EXFUN (OS_baud_index_to_rate, (unsigned int index));
extern int EXFUN (OS_baud_rate_to_index, (unsigned int rate));
+extern unsigned int EXFUN (OS_terminal_state_size, (void));
+extern void EXFUN (OS_terminal_get_state, (Tchannel channel, PTR statep));
+extern void EXFUN (OS_terminal_set_state, (Tchannel channel, PTR statep));
extern int EXFUN (OS_terminal_cooked_output_p, (Tchannel channel));
extern void EXFUN (OS_terminal_raw_output, (Tchannel channel));
extern void EXFUN (OS_terminal_cooked_output, (Tchannel channel));
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/prosterm.c,v 1.2 1990/10/16 20:53:32 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/prosterm.c,v 1.3 1990/11/01 04:33:11 cph Exp $
Copyright (c) 1990 Massachusetts Institute of Technology
}
}
\f
+DEFINE_PRIMITIVE ("TERMINAL-GET-STATE", Prim_terminal_get_state, 1, 1, 0)
+{
+ PRIMITIVE_HEADER (1);
+ {
+ SCHEME_OBJECT result = (allocate_string (OS_terminal_state_size ()));
+ OS_terminal_get_state ((arg_terminal (1)), (STRING_LOC (result, 0)));
+ PRIMITIVE_RETURN (result);
+ }
+}
+
+DEFINE_PRIMITIVE ("TERMINAL-SET-STATE", Prim_terminal_set_state, 2, 2, 0)
+{
+ PRIMITIVE_HEADER (2);
+ CHECK_ARG (2, STRING_P);
+ {
+ SCHEME_OBJECT state = (ARG_REF (2));
+ if ((STRING_LENGTH (state)) != (OS_terminal_state_size ()))
+ error_bad_range_arg (2);
+ OS_terminal_get_state ((arg_terminal (1)), (STRING_LOC (state, 0)));
+ }
+ PRIMITIVE_RETURN (UNSPECIFIC);
+}
+
DEFINE_PRIMITIVE ("TERMINAL-COOKED-OUTPUT?", Prim_terminal_cooked_output_p, 1, 1,
"Return #F iff TERMINAL is not in cooked output mode.")
{
OS_terminal_cooked_output (arg_terminal (1));
PRIMITIVE_RETURN (UNSPECIFIC);
}
-
+\f
DEFINE_PRIMITIVE ("TERMINAL-BUFFERED?", Prim_terminal_buffered_p, 1, 1,
"Return #F iff TERMINAL is not in buffered mode.")
{
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/term.c,v 1.2 1990/09/08 00:10:44 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/term.c,v 1.3 1990/11/01 04:33:17 cph Exp $
Copyright (c) 1990 Massachusetts Institute of Technology
MIT in each case. */
#include "scheme.h"
+#include "ostop.h"
extern long death_blow;
extern char * Term_Messages [];
DEFUN (termination_prefix, (code), int code)
{
attempt_termination_backout (code);
+ OS_restore_external_state ();
putc ('\n', stdout);
if ((code < 0) || (code > MAX_TERMINATION))
fprintf (stdout, "Unknown termination code 0x%x", code);
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/ux.c,v 1.3 1990/10/16 20:53:43 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/ux.c,v 1.4 1990/11/01 04:33:22 cph Exp $
Copyright (c) 1990 Massachusetts Institute of Technology
deliver_pending_interrupts ();
}
-#ifndef HAVE_TERMIOS
-#ifdef HAVE_TERMIO
-
-int
-DEFUN (UX_tcdrain, (fd), int fd)
-{
- return (UX_ioctl (fd, TCSBRK, 1));
-}
-int
-DEFUN (UX_tcflush, (fd, queue_selector), int fd AND int queue_selector)
-{
- return (UX_ioctl (fd, TCFLSH, queue_selector));
-}
-
-#else /* not HAVE_TERMIO */
-#ifdef HAVE_BSD_TTY_DRIVER
-
-int
-DEFUN (UX_tcdrain, (fd), int fd)
-{
- /* BSD provides no such feature -- pretend it worked. */
- return (0);
-}
-
-int
-DEFUN (UX_tcflush, (fd, queue_selector), int fd AND int queue_selector)
-{
- /* Losing BSD always flushes input and output together. */
- int zero = 0;
- return (UX_ioctl (fd, TIOCFLUSH, (&zero)));
-}
-
-#endif /* HAVE_BSD_TTY_DRIVER */
-#endif /* HAVE_TERMIO */
-#endif /* HAVE_TERMIOS */
-\f
#ifdef HAVE_TERMIOS
int
DEFUN (UX_terminal_get_state, (fd, s), int fd AND Ttty_state * s)
{
- return (tcgetattr (fd, s));
+ return
+ ((((tcgetattr (fd, (& (s -> tio)))) < 0)
+#ifdef HAVE_BSD_JOB_CONTROL
+ || ((UX_ioctl (fd, TIOCGLTC, (& (s -> ltc)))) < 0)
+#endif
+ ) ? (-1) : 0);
}
int
DEFUN (UX_terminal_set_state, (fd, s), int fd AND Ttty_state * s)
{
- return (tcsetattr (fd, TCSANOW, s));
+ return
+ ((((tcsetattr (fd, TCSANOW, (& (s -> tio)))) < 0)
+#ifdef HAVE_BSD_JOB_CONTROL
+ || ((UX_ioctl (fd, TIOCSLTC, (& (s -> ltc)))) < 0)
+#endif
+ ) ? (-1) : 0);
}
#else /* not HAVE_TERMIOS */
) ? (-1) : 0);
}
+int
+DEFUN (UX_tcdrain, (fd), int fd)
+{
+ return (UX_ioctl (fd, TCSBRK, 1));
+}
+
+int
+DEFUN (UX_tcflush, (fd, queue_selector), int fd AND int queue_selector)
+{
+ return (UX_ioctl (fd, TCFLSH, queue_selector));
+}
+
#else /* not HAVE_TERMIO */
+\f
#ifdef HAVE_BSD_TTY_DRIVER
int
? (-1) : 0);
}
+int
+DEFUN (UX_tcdrain, (fd), int fd)
+{
+ /* BSD provides no such feature -- pretend it worked. */
+ return (0);
+}
+
+int
+DEFUN (UX_tcflush, (fd, queue_selector), int fd AND int queue_selector)
+{
+ /* Losing BSD always flushes input and output together. */
+ int zero = 0;
+ return (UX_ioctl (fd, TIOCFLUSH, (&zero)));
+}
+
#endif /* HAVE_BSD_TTY_DRIVER */
#endif /* HAVE_TERMIO */
#endif /* HAVE_TERMIOS */
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/ux.h,v 1.11 1990/10/16 20:53:48 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/ux.h,v 1.12 1990/11/01 04:33:27 cph Exp $
Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
#include <sys/wait.h>
#define HAVE_APPEND
-#define HAVE_BSD_JOB_CONTROL
#define HAVE_BSD_SIGNALS
#define HAVE_BSD_TTY_DRIVER
#define HAVE_DIR
#endif /* _HPUX_VERSION */
-#if (_HPUX_VERSION >= 65) || defined(hp9000s800)
-#include <bsdtty.h>
-#define HAVE_BSD_JOB_CONTROL
-#endif
-
#endif /* _HPUX */
#endif /* _SYSV3 */
#else /* not _SYSV */
#ifdef _BSD
+#define HAVE_BSD_JOB_CONTROL
#define HAVE_FIONREAD
#define HAVE_GETTIMEOFDAY
#define HAVE_ITIMER
#define HAVE_UNIX_SOCKETS
#endif
+#if (_HPUX_VERSION >= 65) || defined(hp9000s800)
+#include <bsdtty.h>
+#define HAVE_BSD_JOB_CONTROL
+#endif
+
#if (_HPUX_VERSION >= 70) || defined(hp9000s800)
#define HAVE_FIONREAD
#endif
\f
#ifdef HAVE_TERMIOS
-typedef struct termios Ttty_state;
+typedef struct
+{
+ struct termios tio;
+#ifdef HAVE_BSD_JOB_CONTROL
+ struct ltchars ltc;
+#endif
+} Ttty_state;
+
#define UX_tcflush tcflush
#define UX_tcdrain tcdrain
#define UX_tcgetattr tcgetattr
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxctty.c,v 1.1 1990/06/20 19:37:03 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxctty.c,v 1.2 1990/11/01 04:33:33 cph Exp $
Copyright (c) 1990 Massachusetts Institute of Technology
cc_t quit;
cc_t intrpt;
cc_t tstp;
+ cc_t dtstp;
} Tinterrupt_chars;
static Tinterrupt_enables current_interrupt_enables;
if ((UX_terminal_get_state (ctty_fildes, (&s))) == 0)
{
#ifdef HAVE_TERMIOS
- (ic -> quit) = ((s . c_cc) [VQUIT]);
- (ic -> intrpt) = ((s . c_cc) [VINTR]);
- (ic -> tstp) = ((s . c_cc) [VSUSP]);
+ (ic -> quit) = ((s . tio . c_cc) [VQUIT]);
+ (ic -> intrpt) = ((s . tio . c_cc) [VINTR]);
+ (ic -> tstp) = ((s . tio . c_cc) [VSUSP]);
+#ifdef HAVE_BSD_JOB_CONTROL
+ (ic -> dtstp) = (s . ltc . t_dsuspc);
+#else
+ (ic -> dtstp) = (UX_PC_VDISABLE (ctty_fildes));
+#endif
#else /* not HAVE_TERMIOS */
#ifdef HAVE_TERMIO
(ic -> quit) = ((s . tio . c_cc) [VQUIT]);
(ic -> intrpt) = ((s . tio . c_cc) [VINTR]);
#ifdef HAVE_BSD_JOB_CONTROL
- (ic -> tstp) = ((s . ltc . c_cc) [VSUSP]);
+ (ic -> tstp) = (s . ltc . t_suspc);
+ (ic -> dtstp) = (s . ltc . t_dsuspc);
#else
- (ic -> tstp) = (UX_PC_VDISABLE (ctty_fildes));
+ {
+ cc_t disabled_char = (UX_PC_VDISABLE (ctty_fildes));
+ (ic -> tstp) = disabled_char;
+ (ic -> dtstp) = disabled_char;
+ }
#endif
#else /* not HAVE_TERMIO */
#ifdef HAVE_BSD_TTY_DRIVER
(ic -> intrpt) = (s . tc . t_intrc);
#ifdef HAVE_BSD_JOB_CONTROL
(ic -> tstp) = (s . ltc . t_suspc);
+ (ic -> dtstp) = (s . ltc . t_dsuspc);
#else
- (ic -> tstp) = (UX_PC_VDISABLE (ctty_fildes));
+ {
+ cc_t disabled_char = (UX_PC_VDISABLE (ctty_fildes));
+ (ic -> tstp) = disabled_char;
+ (ic -> dtstp) = disabled_char;
+ }
#endif
#endif /* HAVE_BSD_TTY_DRIVER */
#endif /* HAVE_TERMIO */
(ic -> quit) = disabled_char;
(ic -> intrpt) = disabled_char;
(ic -> tstp) = disabled_char;
+ (ic -> dtstp) = disabled_char;
}
}
#endif /* 0 */
-
+\f
static void
DEFUN (ctty_set_interrupt_chars, (ic), Tinterrupt_chars * ic)
{
if ((UX_terminal_get_state (ctty_fildes, (&s))) == 0)
{
#ifdef HAVE_TERMIOS
- ((s . c_cc) [VQUIT]) = (ic -> quit);
- ((s . c_cc) [VINTR]) = (ic -> intrpt);
- ((s . c_cc) [VSUSP]) = (ic -> tstp);
+ ((s . tio . c_cc) [VQUIT]) = (ic -> quit);
+ ((s . tio . c_cc) [VINTR]) = (ic -> intrpt);
+ ((s . tio . c_cc) [VSUSP]) = (ic -> tstp);
+#ifdef HAVE_BSD_JOB_CONTROL
+ (s . ltc . t_dsuspc) = (ic -> dtstp);
+#endif
#else /* not HAVE_TERMIOS */
#ifdef HAVE_TERMIO
((s . tio . c_cc) [VQUIT]) = (ic -> quit);
((s . tio . c_cc) [VINTR]) = (ic -> intrpt);
#ifdef HAVE_BSD_JOB_CONTROL
(s . ltc . t_suspc) = (ic -> tstp);
+ (s . ltc . t_dsuspc) = (ic -> dtstp);
#endif
#else /* not HAVE_TERMIO */
#ifdef HAVE_BSD_TTY_DRIVER
(s . tc . t_intrc) = (ic -> intrpt);
#ifdef HAVE_BSD_JOB_CONTROL
(s . ltc . t_suspc) = (ic -> tstp);
+ (s . ltc . t_dsuspc) = (ic -> dtstp);
#endif
#endif /* HAVE_BSD_TTY_DRIVER */
#endif /* HAVE_TERMIO */
UX_terminal_set_state (ctty_fildes, (&s));
}
}
-\f
+
static void
DEFUN_VOID (ctty_update_interrupt_chars)
{
(active_interrupt_chars . intrpt) = disabled_char;
if ((current_interrupt_enables & KEYBOARD_TSTP_INTERRUPT) == 0)
(active_interrupt_chars . tstp) = disabled_char;
+ (active_interrupt_chars . dtstp) = disabled_char;
ctty_set_interrupt_chars (&active_interrupt_chars);
}
}
-
+\f
void
DEFUN (OS_ctty_get_interrupt_enables, (mask), Tinterrupt_enables * mask)
{
(current_interrupt_chars . tstp) = tstp_char;
ctty_update_interrupt_chars ();
}
-\f
+
void
DEFUN (UX_initialize_ctty, (interactive), int interactive)
{
(current_interrupt_chars . quit) = DEFAULT_SIGQUIT_CHAR;
(current_interrupt_chars . intrpt) = DEFAULT_SIGINT_CHAR;
(current_interrupt_chars . tstp) = DEFAULT_SIGTSTP_CHAR;
+ (current_interrupt_chars . dtstp) = (UX_PC_VDISABLE (ctty_fildes));
current_interrupt_enables = KEYBOARD_ALL_INTERRUPTS;
if (outside_ctty_state_recorded)
ctty_set_interrupt_chars (¤t_interrupt_chars);
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxterm.c,v 1.4 1990/10/16 20:53:55 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxterm.c,v 1.5 1990/11/01 04:33:40 cph Exp $
Copyright (c) 1990 Massachusetts Institute of Technology
#define TERMINAL_BUFFER(channel) ((terminal_table[(channel)]) . buffer)
#define TERMINAL_ORIGINAL_STATE(channel) ((terminal_table[(channel)]) . state)
-#ifdef HAVE_TERMIOS
-#define TIO(s) (s)
-#else
-#ifdef HAVE_TERMIO
+#if defined(HAVE_TERMIOS) || defined(HAVE_TERMIO)
#define TIO(s) (& ((s) -> tio))
#endif
-#endif
void
DEFUN_VOID (UX_initialize_terminals)
DEFUN (terminal_state_get_ospeed, (s), Ttty_state * s)
{
#ifdef HAVE_TERMIOS
- return (cfgetospeed (s));
+ return (cfgetospeed (TIO (s)));
#else
#ifdef HAVE_TERMIO
return (((TIO (s)) -> c_cflag) & CBAUD);
DEFUN (terminal_state_get_ispeed, (s), Ttty_state * s)
{
#ifdef HAVE_TERMIOS
- return (cfgetispeed (s));
+ return (cfgetispeed (TIO (s)));
#else
#ifdef HAVE_TERMIO
return (((TIO (s)) -> c_cflag) & CBAUD);
DEFUN (terminal_state_cooked_output, (s, channel),
Ttty_state * s AND Tchannel channel)
{
- Ttty_state * os = (& (TERMINAL_ORIGINAL_STATE (channel)));
#if defined(HAVE_TERMIOS) || defined(HAVE_TERMIO)
- ((TIO (s)) -> c_oflag) = ((TIO (os)) -> c_oflag);
+ ((TIO (s)) -> c_oflag) |= OPOST;
#else /* not HAVE_TERMIOS nor HAVE_TERMIO */
#ifdef HAVE_BSD_TTY_DRIVER
+ Ttty_state * os = (& (TERMINAL_ORIGINAL_STATE (channel)));
(s -> sg . sg_flags) =
(((s -> sg . sg_flags) &~ ALLDELAY) | ((os -> sg . sg_flags) & ALLDELAY));
- (s -> lmode) = (((s -> lmode) &~ LLITOUT) | ((os -> lmode) & LLITOUT));
+ (s -> lmode) &=~ LLITOUT;
#endif /* HAVE_BSD_TTY_DRIVER */
#endif /* HAVE_TERMIOS or HAVE_TERMIO */
}
((TIO (s)) -> c_lflag) &=~ (ICANON | ECHO | ISIG);
((TIO (s)) -> c_iflag) |= IGNBRK;
((TIO (s)) -> c_iflag) &=~ (ICRNL | IXON | ISTRIP);
+ ((TIO (s)) -> c_cflag) |= CS8;
+ ((TIO (s)) -> c_cflag) &=~ PARENB;
(((TIO (s)) -> c_cc) [VMIN]) = 1;
(((TIO (s)) -> c_cc) [VTIME]) = 0;
#else /* not HAVE_TERMIOS nor HAVE_TERMIO */
Ttty_state * s AND
Tchannel channel)
{
- Ttty_state * os = (& (TERMINAL_ORIGINAL_STATE (channel)));
#if defined(HAVE_TERMIOS) || defined(HAVE_TERMIO)
- ((TIO (s)) -> c_lflag) = ((TIO (os)) -> c_lflag);
+ Ttty_state * os = (& (TERMINAL_ORIGINAL_STATE (channel)));
+ ((TIO (s)) -> c_lflag) |= (ICANON | ECHO | ISIG);
((TIO (s)) -> c_iflag) = ((TIO (os)) -> c_iflag);
- ((TIO (s)) -> c_cflag) = ((TIO (os)) -> c_cflag);
+ ((TIO (s)) -> c_cflag) |= CS8;
+ ((TIO (s)) -> c_cflag) &=~ PARENB;
(((TIO (s)) -> c_cc) [VMIN]) = (((TIO (os)) -> c_cc) [VMIN]);
(((TIO (s)) -> c_cc) [VTIME]) = (((TIO (os)) -> c_cc) [VTIME]);
#else /* not HAVE_TERMIOS nor HAVE_TERMIO */
#ifdef HAVE_BSD_TTY_DRIVER
- (s -> sg . sg_flags) =
- (((s -> sg . sg_flags) &~ (ECHO | CRMOD | ANYP | CBREAK | RAW))
- | ((os -> sg . sg_flags) & (ECHO | CRMOD | ANYP | CBREAK | RAW)));
- (s -> lmode) =
- (((s -> lmode) &~ (LPASS8 | LNOFLSH))
- | ((os -> lmode) & (LPASS8 | LNOFLSH)));
+ (s -> sg . sg_flags) &=~ (CBREAK | RAW);
+ (s -> sg . sg_flags) |= (ECHO | CRMOD | ANYP);
+ (s -> lmode) &=~ LNOFLSH;
+ (s -> lmode) |= LPASS8;
#endif /* HAVE_BSD_TTY_DRIVER */
#endif /* HAVE_TERMIOS or HAVE_TERMIO */
}
return ((scan - 1) - baud_convert);
return (-1);
}
+
+unsigned int
+DEFUN_VOID (OS_terminal_state_size)
+{
+ return (sizeof (Ttty_state));
+}
+
+void
+DEFUN (OS_terminal_get_state, (channel, statep),
+ Tchannel channel AND
+ PTR statep)
+{
+ get_terminal_state (channel, statep);
+}
+
+void
+DEFUN (OS_terminal_set_state, (channel, statep),
+ Tchannel channel AND
+ PTR statep)
+{
+ set_terminal_state (channel, statep);
+}
\f
int
DEFUN (OS_terminal_cooked_output_p, (channel), Tchannel channel)
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 11.49 1990/10/16 20:54:01 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 11.50 1990/11/01 04:33:46 cph Exp $
Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
#define VERSION 11
#endif
#ifndef SUBVERSION
-#define SUBVERSION 49
+#define SUBVERSION 50
#endif
#ifndef UCODE_TABLES_FILENAME
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 11.49 1990/10/16 20:54:01 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 11.50 1990/11/01 04:33:46 cph Exp $
Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
#define VERSION 11
#endif
#ifndef SUBVERSION
-#define SUBVERSION 49
+#define SUBVERSION 50
#endif
#ifndef UCODE_TABLES_FILENAME