BSD 4_2 release
[unix-history] / usr / src / usr.lib / libcurses / tstp.c
index 8a2fca6..269ed43 100644 (file)
@@ -1,17 +1,18 @@
 # include      <signal.h>
 
 # include      <signal.h>
 
-# ifdef SIGTSTP
-
 # include      "curses.ext"
 
 /*
  * handle stop and start signals
  *
 # include      "curses.ext"
 
 /*
  * handle stop and start signals
  *
- * 3/5/81 (Berkeley) @(#)tstp.c        1.1
+ * 6/25/83 (Berkeley) @(#)tstp.c       1.3
  */
 tstp() {
 
  */
 tstp() {
 
+# ifdef SIGTSTP
+
        SGTTY   tty;
        SGTTY   tty;
+       int     omask;
 # ifdef DEBUG
        if (outf)
                fflush(outf);
 # ifdef DEBUG
        if (outf)
                fflush(outf);
@@ -20,10 +21,15 @@ tstp() {
        mvcur(0, COLS - 1, LINES - 1, 0);
        endwin();
        fflush(stdout);
        mvcur(0, COLS - 1, LINES - 1, 0);
        endwin();
        fflush(stdout);
+       /* reset signal handler so kill below stops us */
+       signal(SIGTSTP, SIG_DFL);
+#define        mask(s) (1 << ((s)-1))
+       omask = sigsetmask(sigblock(0) &~ mask(SIGTSTP));
        kill(0, SIGTSTP);
        kill(0, SIGTSTP);
+       sigblock(mask(SIGTSTP));
        signal(SIGTSTP, tstp);
        _tty = tty;
        stty(_tty_ch, &_tty);
        wrefresh(curscr);
        signal(SIGTSTP, tstp);
        _tty = tty;
        stty(_tty_ch, &_tty);
        wrefresh(curscr);
+# endif        SIGTSTP
 }
 }
-# endif