-void
-reset_terminating_signals ()
-{
- register int i;
-
-#if defined (_POSIX_VERSION)
- struct sigaction act;
-
- act.sa_flags = 0;
- sigemptyset (&act.sa_mask);
- for (i = 0; i < TERMSIGS_LENGTH; i++)
- {
- /* Skip a signal if it's trapped or handled specially, because the
- trap code will restore the correct value. */
- if (signal_is_trapped (XSIG (i)) || signal_is_special (XSIG (i)))
- continue;
-
- act.sa_handler = XHANDLER (i);
- sigaction (XSIG (i), &act, (struct sigaction *) NULL);
- }
-#else
- for (i = 0; i < TERMSIGS_LENGTH; i++)
- {
- if (signal_is_trapped (XSIG (i)) || signal_is_special (XSIG (i)))
- continue;
-
- set_signal_handler (XSIG (i), XHANDLER (i));
- }
-#endif
-}
-#undef XSIG
-#undef XHANDLER
-
-/* What to do when we've been interrupted, and it is safe to handle it. */
-void
-throw_to_top_level ()
-{
- int print_newline = 0;
-
- if (interrupt_state)
- {
- print_newline = 1;
- interrupt_state--;
- }
-
- if (interrupt_state)
- return;
-
- last_command_exit_value |= 128;
-
- /* Run any traps set on SIGINT. */
- run_interrupt_trap ();
-
- /* Cleanup string parser environment. */
- while (parse_and_execute_level)
- parse_and_execute_cleanup ();
-
-#if defined (JOB_CONTROL)
- give_terminal_to (shell_pgrp);
-#endif /* JOB_CONTROL */
-
-#if defined (JOB_CONTROL) || defined (_POSIX_VERSION)
- sigprocmask (SIG_SETMASK, &top_level_mask, (sigset_t *)NULL);
-#endif
-
- reset_parser ();
-
-#if defined (READLINE)
- if (interactive)
- bashline_reinitialize ();
-#endif /* READLINE */
-
-#if defined (PROCESS_SUBSTITUTION)
- unlink_fifo_list ();
-#endif /* PROCESS_SUBSTITUTION */
-
- run_unwind_protects ();
- loop_level = continuing = breaking = 0;
- return_catch_flag = 0;
-
- if (interactive && print_newline)
- {
- fflush (stdout);
- fprintf (stderr, "\n");
- fflush (stderr);
- }
-
- /* An interrupted `wait' command in a script does not exit the script. */
- if (interactive || (interactive_shell && !shell_initialized) ||
- (print_newline && signal_is_trapped (SIGINT)))
- longjmp (top_level, DISCARD);
- else
- longjmp (top_level, EXITPROG);
-}
-
-/* When non-zero, we throw_to_top_level (). */
-int interrupt_immediately = 0;
-
-/* What we really do when SIGINT occurs. */
-sighandler
-sigint_sighandler (sig)
- int sig;
-{
-#if defined (USG) && !defined (_POSIX_VERSION)
- set_signal_handler (sig, sigint_sighandler);
-#endif
-
- /* interrupt_state needs to be set for the stack of interrupts to work
- right. Should it be set unconditionally? */
- if (!interrupt_state)
- interrupt_state++;
-
- if (interrupt_immediately)
- {
- interrupt_immediately = 0;
- throw_to_top_level ();
- }
-#if !defined (VOID_SIGHANDLER)
- return (0);
-#endif /* VOID_SIGHANDLER */
-}
-
-/* Give version information about this shell. */
-char *
-shell_version_string ()
-{
- static char tt[16] = { '\0' };
-
- if (!tt[0])
- sprintf (tt, "%s.%d(%d)", dist_version, patch_level, build_version);
- return tt;
-}
-
-void
-show_shell_version ()
-{
- printf ("GNU %s, version %s\n", base_pathname (shell_name),
- shell_version_string ());
-}
-
-#if !defined (USG) && defined (ENOTSOCK)
-# if !defined (HAVE_SOCKETS)
-# define HAVE_SOCKETS
-# endif
-#endif
-
-#if defined (HAVE_SOCKETS)
-#include <sys/socket.h>