date and time created 83/07/18 21:05:16 by edward
[unix-history] / usr / src / usr.bin / window / wwspawn.c
CommitLineData
2dd7d7a6 1#ifndef lint
2b44d852 2static char *sccsid = "@(#)wwspawn.c 1.3 83/07/18";
2dd7d7a6
EW
3#endif
4
5#include "ww.h"
6
7wwfork(wp)
8register struct ww *wp;
9{
10 switch (wp->ww_pid = fork()) {
11 case -1:
12 return -1;
13 case 0:
14 wp->ww_state = WW_INCHILD;
4711df8b 15 wwenviron(wp);
2dd7d7a6
EW
16 return 0;
17 default:
18 wp->ww_state = WW_HASPROC;
2b44d852
EW
19 close(wp->ww_tty);
20 wp->ww_tty = -1;
2dd7d7a6
EW
21 return wp->ww_pid;
22 }
23}
4711df8b 24
2b44d852
EW
25#define TERM "TERM=window"
26#define TERMCAP "TERMCAP=WW|window|window package:\
4711df8b
EW
27 :cr=^M:nl=^J:bl=^G:\
28 :al=\\EL:am:le=^H:bs:cd=\\EJ:ce=\\EK:cl=\\EE:cm=\\EY%%+ %%+ :\
2b44d852 29 :co#%d:dc=\\EN:dl=\\EM:do=\\EB:ei=\\EO:ho=\\EH:li#%d:im=\\E@:mi:\
4711df8b
EW
30 :nd=\\EC:ta=^I:pt:up=\\EA:"
31static char *env[100];
32static char buf[sizeof TERMCAP + 10];
33extern char **environ;
34
35wwenviron(wp)
36register struct ww *wp;
37{
38 register i;
39 register char **p, **q;
40 char **termcap = 0;
41
42 dup2(wp->ww_tty, 0);
43 dup2(wp->ww_tty, 1);
44 dup2(wp->ww_tty, 2);
45 for (i = getdtablesize() - 1; i > 2; i--)
46 close(i);
2b44d852
EW
47 /*
48 i = open("/dev/tty");
49 ioctl(i, TIOCNOTTY, 0);
50 close(i);
51 */
4711df8b
EW
52
53 for (p = environ, q = env; *p; p++, q++) {
54 if (strncmp(*p, "TERM=", 5) == 0)
55 *q = TERM;
56 else if (strncmp(*p, "TERMCAP=", 8) == 0)
57 termcap = q;
58 else
59 *q = *p;
60 }
61 if (termcap == 0)
62 termcap = q++;
63 *q = 0;
2b44d852 64 *termcap = sprintf(buf, TERMCAP, wp->ww_incol, wp->ww_inrow);
4711df8b
EW
65 environ = env;
66}