Diff for /gforth/Attic/io.c between versions 1.1 and 1.8

version 1.1, 1994/02/11 16:30:46 version 1.8, 1995/03/13 09:17:29
Line 3 Line 3
         The following is stolen from the readline library for bash          The following is stolen from the readline library for bash
 */  */
   
   /*
      Use -D_POSIX_VERSION for POSIX systems.
   */
   
   #include <unistd.h>
   
   #ifdef apollo
   #define _POSIX_VERSION
   #endif
   
 #include <stdio.h>  #include <stdio.h>
 #include <signal.h>  #include <signal.h>
 #include <sys/types.h>  #include <sys/types.h>
   #ifndef apollo
 #include <sys/ioctl.h>  #include <sys/ioctl.h>
   #endif
 #include <fcntl.h>  #include <fcntl.h>
 #include <sys/file.h>  #include <sys/file.h>
   #include <setjmp.h>
   #include "forth.h"
   #include "io.h"
   
 #if defined (__GNUC__)  #if defined (__GNUC__)
 #  define alloca __builtin_alloca  #  define alloca __builtin_alloca
Line 18 Line 33
 #  endif  #  endif
 #endif  #endif
   
 #if defined (HAVE_UNISTD_H)  
 #  include <unistd.h>  
 #endif  
   
 #define NEW_TTY_DRIVER  #define NEW_TTY_DRIVER
 #define HAVE_BSD_SIGNALS  #define HAVE_BSD_SIGNALS
   /*
   #ifndef apollo
 #define USE_XON_XOFF  #define USE_XON_XOFF
   #endif
   */
   
   #define HANDLE_SIGNALS
   
 /* Some USG machines have BSD signal handling (sigblock, sigsetmask, etc.) */  /* Some USG machines have BSD signal handling (sigblock, sigsetmask, etc.) */
 #if defined (USG) && !defined (hpux)  #if defined (USG) && !defined (hpux)
Line 33 Line 50
   
 /* System V machines use termio. */  /* System V machines use termio. */
 #if !defined (_POSIX_VERSION)  #if !defined (_POSIX_VERSION)
 #  if defined (USG) || defined (hpux) || defined (Xenix) || defined (sgi) || defined (DGUX) || defined (ultrix)  #  if defined (USG) || defined (hpux) || defined (Xenix) || defined (sgi) || defined (DGUX) || defined (ultrix) || defined (Solaris)
 #    undef NEW_TTY_DRIVER  #    undef NEW_TTY_DRIVER
 #    define TERMIO_TTY_DRIVER  #    define TERMIO_TTY_DRIVER
 #    include <termio.h>  #    include <termio.h>
Line 89  extern int errno; Line 106  extern int errno;
 #  endif /* USGr3 */  #  endif /* USGr3 */
 #endif /* USG && hpux */  #endif /* USG && hpux */
   
 #if defined (_POSIX_VERSION) || defined (USGr3)  #if (defined (_POSIX_VERSION) || defined (USGr3)) && !defined(apollo)
 #  include <dirent.h>  #  include <dirent.h>
 #  define direct dirent  #  define direct dirent
 #  if defined (_POSIX_VERSION)  #  if defined (_POSIX_VERSION)
Line 694  graceful_exit (int sig) Line 711  graceful_exit (int sig)
     fprintf (stderr, "\n\n%s.\n", sigmsg (sig));      fprintf (stderr, "\n\n%s.\n", sigmsg (sig));
   else    else
     fprintf (stderr, "\n\nSignal %d received, terminated.\n", sig);      fprintf (stderr, "\n\nSignal %d received, terminated.\n", sig);
   exit (sig);    exit (0x80|sig);
   }
   
   jmp_buf throw_jmp_buf;
   
   static void 
   signal_throw(int sig)
   {
     static int throw_codes[] = {
       -256,
       -28,
       -257,
       -258,
       -259,
       -260,
       -261,
       -55,
       -262,
       -23,
       -9,
       -263,
       -264,
       -265,
       -266,
       -267,
       -268,
     };
     signal(sig,signal_throw);
     longjmp(throw_jmp_buf,throw_codes[sig-1]); /* or use siglongjmp ? */
   }
   
   static void
   termprep (int sig)
   {
     terminal_prepped=0; prep_terminal();
     signal(sig,termprep);
 }  }
   
 void  void
Line 705  install_signal_handlers (void) Line 757  install_signal_handlers (void)
    but I would like something more automatic - anton */     but I would like something more automatic - anton */
 #define SIGS_TO_IGNORE  SIGCHLD  #define SIGS_TO_IGNORE  SIGCHLD
 #define SIGS_TO_ABORT   SIGINT, SIGILL, SIGFPE, SIGUSR1, SIGSEGV, SIGUSR2, \  #define SIGS_TO_ABORT   SIGINT, SIGILL, SIGFPE, SIGUSR1, SIGSEGV, SIGUSR2, \
                         SIGALRM, SIGEMT, SIGBUS, SIGSYS                          SIGALRM,  SIGBUS
 #define SIGS_TO_QUIT    SIGHUP, SIGQUIT, SIGABRT, SIGPIPE, \  #define SIGS_TO_QUIT    SIGHUP, SIGQUIT, SIGABRT, SIGPIPE, \
                         SIGTERM                           SIGTERM 
   #define SIGS_TO_TERMPREP    SIGCONT
   
   static short sigs_to_ignore [] = { SIGS_TO_IGNORE };    static short sigs_to_ignore [] = { SIGS_TO_IGNORE };
   static short sigs_to_abort [] = { SIGS_TO_ABORT };    static short sigs_to_abort [] = { SIGS_TO_ABORT };
   static short sigs_to_quit [] = { SIGS_TO_QUIT };    static short sigs_to_quit [] = { SIGS_TO_QUIT };
     static short sigs_to_termprep [] = { SIGS_TO_TERMPREP };
   int i;    int i;
   
 #define DIM(X)          (sizeof (X) / sizeof *(X))  #define DIM(X)          (sizeof (X) / sizeof *(X))
Line 719  install_signal_handlers (void) Line 773  install_signal_handlers (void)
     if (sigs_to_ignore [i])      if (sigs_to_ignore [i])
       signal (sigs_to_ignore [i], SIG_IGN);        signal (sigs_to_ignore [i], SIG_IGN);
   for (i = 0; i < DIM (sigs_to_abort); i++)    for (i = 0; i < DIM (sigs_to_abort); i++)
     signal (sigs_to_abort [i], graceful_exit); /* !! change to throw */      signal (sigs_to_abort [i], signal_throw); /* !! change to throw */
   for (i = 0; i < DIM (sigs_to_quit); i++)    for (i = 0; i < DIM (sigs_to_quit); i++)
     signal (sigs_to_quit [i], graceful_exit);      signal (sigs_to_quit [i], graceful_exit);
     for (i = 0; i < DIM (sigs_to_termprep); i++)
       signal (sigs_to_termprep [i], termprep);
 }  }
 /* end signal handling */  /* end signal handling */

Removed from v.1.1  
changed lines
  Added in v.1.8


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>