1 /* $OpenBSD: spawn.c,v 1.13 2023/03/08 04:43:11 guenther Exp $ */
2
3 /* This file is in the public domain. */
4
5 /*
6 * Spawn. Actually just suspends Mg.
7 * Assumes POSIX job control.
8 */
9
10 #include <sys/queue.h>
11 #include <signal.h>
12 #include <stdio.h>
13 #include <term.h>
14 #include <termios.h>
15
16 #include "def.h"
17
18 /*
19 * This causes mg to send itself a stop signal. It assumes the parent
20 * shell supports POSIX job control. If the terminal supports an alternate
21 * screen, we will switch to it.
22 */
23 int
spawncli(int f,int n)24 spawncli(int f, int n)
25 {
26 sigset_t oset;
27
28 /* Very similar to what vttidy() does. */
29 ttcolor(CTEXT);
30 ttnowindow();
31 ttmove(nrow - 1, 0);
32 if (epresf != FALSE) {
33 tteeol();
34 epresf = FALSE;
35 }
36 if (ttcooked() == FALSE)
37 return (FALSE);
38
39 /* Exit application mode and tidy. */
40 tttidy();
41 ttflush();
42 (void)sigprocmask(SIG_SETMASK, NULL, &oset);
43 (void)kill(0, SIGTSTP);
44 (void)sigprocmask(SIG_SETMASK, &oset, NULL);
45 ttreinit();
46
47 /* Force repaint. */
48 sgarbf = TRUE;
49 return (ttraw());
50 }
51