Commit | Line | Data |
---|---|---|
aa149fde | 1 | #ifndef lint |
a598c465 | 2 | static char *sccsid = "@(#)wwenviron.c 3.2 83/08/18"; |
aa149fde EW |
3 | #endif |
4 | ||
5 | #include "ww.h" | |
6 | ||
7 | extern char **environ; | |
8 | ||
9 | wwenviron(wp) | |
10 | register 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 | } |