xref: /csrg-svn/usr.bin/window/wwenviron.c (revision 14689)
1*14689Sedward #ifndef lint
2*14689Sedward static	char *sccsid = "@(#)wwenviron.c	3.1 83/08/17";
3*14689Sedward #endif
4*14689Sedward 
5*14689Sedward #include "ww.h"
6*14689Sedward 
7*14689Sedward extern char **environ;
8*14689Sedward 
9*14689Sedward wwenviron(wp)
10*14689Sedward register struct ww *wp;
11*14689Sedward {
12*14689Sedward 	register i;
13*14689Sedward 	register char **p, **q;
14*14689Sedward 	char **termcap = 0;
15*14689Sedward 	char **env;
16*14689Sedward 	char *tbuf;
17*14689Sedward 
18*14689Sedward 	(void) dup2(wp->ww_tty, 0);
19*14689Sedward 	(void) dup2(wp->ww_tty, 1);
20*14689Sedward 	(void) dup2(wp->ww_tty, 2);
21*14689Sedward 	for (i = wwdtablesize - 1; i > 2; i--)
22*14689Sedward 		(void) close(i);
23*14689Sedward 
24*14689Sedward 	i = open("/dev/tty");
25*14689Sedward 	(void) ioctl(i, (int)TIOCNOTTY, (char *)0);
26*14689Sedward 	(void) close(i);
27*14689Sedward 	(void) open(wp->ww_ttyname, 0);
28*14689Sedward 
29*14689Sedward 	for (i = 0, p = environ; *p; p++, i++)
30*14689Sedward 		;
31*14689Sedward 	if ((env = (char **)malloc((unsigned)(i + 3) * sizeof (char *))) == 0)
32*14689Sedward 		return;			/* can't report error */
33*14689Sedward 	if ((tbuf = malloc((unsigned) 1024)) == 0)
34*14689Sedward 		return;			/* can't report error */
35*14689Sedward 	for (p = environ, q = env; *p; p++, q++) {
36*14689Sedward 		if (strncmp(*p, "TERM=", 5) == 0)
37*14689Sedward 			*q = WWT_TERM;
38*14689Sedward 		else if (strncmp(*p, "TERMCAP=", 8) == 0)
39*14689Sedward 			termcap = q;
40*14689Sedward 		else
41*14689Sedward 			*q = *p;
42*14689Sedward 	}
43*14689Sedward 	if (termcap == 0)
44*14689Sedward 		termcap = q++;
45*14689Sedward 	*q = 0;
46*14689Sedward 	*termcap = sprintf(tbuf, WWT_TERMCAP, wp->ww_w.nc, wp->ww_w.nr);
47*14689Sedward 	if (wwavailmodes & WWM_REV)
48*14689Sedward 		(void) strcat(tbuf, WWT_REV);
49*14689Sedward 	if (wwavailmodes & WWM_UL)
50*14689Sedward 		(void) strcat(tbuf, WWT_UL);
51*14689Sedward 	(void) strcat(tbuf, wwkeys);
52*14689Sedward 	environ = env;
53*14689Sedward }
54