| version 1.2, 2002/09/09 12:11:51 |
version 1.5, 2005/01/18 14:20:19 |
| Line 10 static char rcsid[]= |
|
| Line 10 static char rcsid[]= |
|
| #include <sys/types.h> |
#include <sys/types.h> |
| #include <sys/stat.h> |
#include <sys/stat.h> |
| #include <sys/ioctl.h> |
#include <sys/ioctl.h> |
| |
#if defined(sun) |
| |
#include <sys/fcntl.h> |
| |
#include <sys/ttold.h> |
| |
#endif |
| #ifdef TERMIOS |
#ifdef TERMIOS |
| #include <termios.h> |
#include <termios.h> |
| #if defined(__linux__) || defined(__CYGWIN__) |
#if defined(__linux__) || defined(__CYGWIN__) |
| Line 57 int histlen = -1; /* history length */ |
|
| Line 61 int histlen = -1; /* history length */ |
|
| int debug = OFF; /* debug switch */ |
int debug = OFF; /* debug switch */ |
| int auto_tty_fix = ON; /* fix tty mode automaticaly */ |
int auto_tty_fix = ON; /* fix tty mode automaticaly */ |
| FILE *script_fp = NULL; /* script file pointer */ |
FILE *script_fp = NULL; /* script file pointer */ |
| |
#if defined(sun) |
| |
void catchsig (int); /* function take care SIGCHILD */ |
| |
#else |
| void catchsig __P((int)); /* function take care SIGCHILD */ |
void catchsig __P((int)); /* function take care SIGCHILD */ |
| |
#endif |
| |
|
| #ifdef TERMIOS |
#ifdef TERMIOS |
| #define ttystruct termios |
#define ttystruct termios |
| Line 72 int lines; /* terminal line size */ |
|
| Line 80 int lines; /* terminal line size */ |
|
| int columns; /* terminal coulumn size */ |
int columns; /* terminal coulumn size */ |
| char *term_clear; /* terminal clear code */ |
char *term_clear; /* terminal clear code */ |
| |
|
| |
#if defined(sun) |
| |
void (*sighup)(int), (*sigchld)(int), (*sigtstp)(int); |
| |
#else |
| void (*sighup) __P((int)), (*sigchld) __P((int)), (*sigtstp) __P((int)); |
void (*sighup) __P((int)), (*sigchld) __P((int)), (*sigtstp) __P((int)); |
| |
#endif |
| /* function buffer for signal */ |
/* function buffer for signal */ |
| |
|
| #ifdef TIOCSETN |
#ifdef TIOCSETN |
|
|
| commandv = &argv[1]; |
commandv = &argv[1]; |
| |
|
| if (! isatty (0)) { |
if (! isatty (0)) { |
| |
#if defined(__INTERIX) |
| |
execvp (*commandv, commandv); |
| |
#else |
| execvp (*commandv, commandv, 0); |
execvp (*commandv, commandv, 0); |
| |
#endif |
| perror (*commandv); |
perror (*commandv); |
| exit (1); |
exit (1); |
| } |
} |
|
|
| fix_signal () |
fix_signal () |
| { |
{ |
| #ifdef SIGWINCH |
#ifdef SIGWINCH |
| |
#if defined(sun) |
| |
void sigwinch (int); |
| |
#else |
| void sigwinch __P((int)); |
void sigwinch __P((int)); |
| #endif |
#endif |
| |
#endif |
| |
|
| sighup = signal (SIGHUP, terminate); |
sighup = signal (SIGHUP, terminate); |
| sigchld = signal (SIGCHLD, catchsig); |
sigchld = signal (SIGCHLD, catchsig); |
| Line 657 swallow_output() |
|
| Line 677 swallow_output() |
|
| #include <sys/m_wait.h> |
#include <sys/m_wait.h> |
| #endif |
#endif |
| |
|
| |
#if defined(__INTERIX) |
| |
#define wait3(s,opt,rp) (waitpid((-1),(s),(opt))) |
| |
#endif |
| |
|
| void |
void |
| catchsig(n) |
catchsig(n) |
| int n; |
int n; |
| Line 686 exec_to_command(argv) |
|
| Line 710 exec_to_command(argv) |
|
| */ |
*/ |
| t = open ("/dev/tty", 2); |
t = open ("/dev/tty", 2); |
| if (t >= 0) { |
if (t >= 0) { |
| #ifndef __CYGWIN32__ |
#if !defined(__CYGWIN32__) && !defined(__INTERIX) |
| ioctl (t, TIOCNOTTY, (char *) 0); |
ioctl (t, TIOCNOTTY, (char *) 0); |
| #endif |
#endif |
| (void) close (t); |
(void) close (t); |
| Line 705 exec_to_command(argv) |
|
| Line 729 exec_to_command(argv) |
|
| #elif defined(TIOCSETN) |
#elif defined(TIOCSETN) |
| ioctl (0, TIOCSETN, (char *) & slave_ttymode); |
ioctl (0, TIOCSETN, (char *) & slave_ttymode); |
| #endif |
#endif |
| |
#if defined(__INTERIX) |
| |
execvp (*argv, argv); |
| |
#else |
| execvp (*argv, argv, 0); |
execvp (*argv, argv, 0); |
| |
#endif |
| perror (*argv); |
perror (*argv); |
| exit (1); |
exit (1); |
| } |
} |
|
|
| suspend() |
suspend() |
| { |
{ |
| long pid; |
long pid; |
| |
#if defined(sun) |
| |
void (*func) (int); |
| |
#else |
| void (*func) __P((int)); |
void (*func) __P((int)); |
| |
#endif |
| #ifndef __CYGWIN32__ |
#ifndef __CYGWIN32__ |
| int omask; |
int omask; |
| #endif |
#endif |
|
|
| signal (SIGTSTP, SIG_DFL); |
signal (SIGTSTP, SIG_DFL); |
| recover_tty(); |
recover_tty(); |
| #define mask(s) (1 << ((s)-1)) |
#define mask(s) (1 << ((s)-1)) |
| #ifndef __CYGWIN32__ |
#if !defined(__CYGWIN32__) && !defined(sun) |
| omask = sigsetmask (sigblock (0) & ~mask (SIGTSTP)); |
omask = sigsetmask (sigblock (0) & ~mask (SIGTSTP)); |
| #endif |
#endif |
| kill (0, SIGTSTP); |
kill (0, SIGTSTP); |
|
|
| kill (0, SIGCONT); |
kill (0, SIGCONT); |
| signal (SIGCHLD, func); |
signal (SIGCHLD, func); |
| signal (SIGTSTP, SIG_IGN); |
signal (SIGTSTP, SIG_IGN); |
| #ifndef __CYGWIN32__ |
#if !defined(__CYGWIN32__) && !defined(sun) |
| sigblock (mask (SIGTSTP)); |
sigblock (mask (SIGTSTP)); |
| #endif |
#endif |
| fix_tty (); |
fix_tty (); |
|
|
| /* |
/* |
| * Propagate window size changes to the slave tty. |
* Propagate window size changes to the slave tty. |
| */ |
*/ |
| sigwinch() |
void sigwinch(int dummy) |
| { |
{ |
| #ifdef TIOCGWINSZ /* 4.3BSD */ |
#ifdef TIOCGWINSZ /* 4.3BSD */ |
| struct winsize win; |
struct winsize win; |