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