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