X-Git-Url: https://pd.if.org/git/?p=pd_readline;a=blobdiff_plain;f=mg%2Fspawn.c;fp=mg%2Fspawn.c;h=13fd985303588d71bdb97fff8996bc644c19f09f;hp=0000000000000000000000000000000000000000;hb=a9843085ec916c175bd245a8398f30e6cc03f984;hpb=26fe4e09c6c3c250334fdeed60ce3061febecde2 diff --git a/mg/spawn.c b/mg/spawn.c new file mode 100644 index 0000000..13fd985 --- /dev/null +++ b/mg/spawn.c @@ -0,0 +1,48 @@ +/* $OpenBSD: spawn.c,v 1.11 2006/08/01 22:16:03 jason Exp $ */ + +/* This file is in the public domain. */ + +/* + * Spawn. Actually just suspends Mg. + * Assumes POSIX job control. + */ + +#include "def.h" + +#include +#include + +/* + * This causes mg to send itself a stop signal. It assumes the parent + * shell supports POSIX job control. If the terminal supports an alternate + * screen, we will switch to it. + */ +/* ARGSUSED */ +int +spawncli(int f, int n) +{ + sigset_t oset; + + /* Very similar to what vttidy() does. */ + ttcolor(CTEXT); + ttnowindow(); + ttmove(nrow - 1, 0); + if (epresf != FALSE) { + tteeol(); + epresf = FALSE; + } + if (ttcooked() == FALSE) + return (FALSE); + + /* Exit application mode and tidy. */ + tttidy(); + ttflush(); + (void)sigprocmask(SIG_SETMASK, NULL, &oset); + (void)kill(0, SIGTSTP); + (void)sigprocmask(SIG_SETMASK, &oset, NULL); + ttreinit(); + + /* Force repaint. */ + sgarbf = TRUE; + return (ttraw()); +}