114689Sedward #ifndef lint 2*14888Sedward static char *sccsid = "@(#)wwenviron.c 3.3 83/08/31"; 314689Sedward #endif 414689Sedward 514689Sedward #include "ww.h" 614689Sedward 714689Sedward extern char **environ; 814689Sedward 9*14888Sedward /* 10*14888Sedward * Set up the environment of this process to run in window 'wp'. 11*14888Sedward * Can't report errors in any intelligent way, so don't. 12*14888Sedward */ 1314689Sedward wwenviron(wp) 1414689Sedward register struct ww *wp; 1514689Sedward { 1614689Sedward register i; 1714689Sedward register char **p, **q; 1814689Sedward char **termcap = 0; 1914689Sedward char **env; 2014689Sedward char *tbuf; 2114689Sedward 2214689Sedward (void) dup2(wp->ww_tty, 0); 2314689Sedward (void) dup2(wp->ww_tty, 1); 2414689Sedward (void) dup2(wp->ww_tty, 2); 2514689Sedward for (i = wwdtablesize - 1; i > 2; i--) 2614689Sedward (void) close(i); 2714689Sedward 28*14888Sedward i = open("/dev/tty", 0); 29*14888Sedward if (i < 0) { 30*14888Sedward perror("/dev/tty"); 31*14888Sedward return; 32*14888Sedward } 33*14888Sedward if (ioctl(i, (int)TIOCNOTTY, (char *)0) < 0) { 34*14888Sedward perror("ioctl(TIOCNOTTY)"); 35*14888Sedward return; 36*14888Sedward } 3714689Sedward (void) close(i); 38*14888Sedward if (open(wp->ww_ttyname, 0) < 0) { 39*14888Sedward perror(wp->ww_ttyname); 40*14888Sedward return; 41*14888Sedward } 4214689Sedward 4314689Sedward for (i = 0, p = environ; *p; p++, i++) 4414689Sedward ; 4514689Sedward if ((env = (char **)malloc((unsigned)(i + 3) * sizeof (char *))) == 0) 46*14888Sedward return; 4714689Sedward if ((tbuf = malloc((unsigned) 1024)) == 0) 48*14888Sedward return; 4914689Sedward for (p = environ, q = env; *p; p++, q++) { 5014689Sedward if (strncmp(*p, "TERM=", 5) == 0) 5114689Sedward *q = WWT_TERM; 5214689Sedward else if (strncmp(*p, "TERMCAP=", 8) == 0) 5314689Sedward termcap = q; 5414689Sedward else 5514689Sedward *q = *p; 5614689Sedward } 5714689Sedward if (termcap == 0) 5814689Sedward termcap = q++; 5914689Sedward *q = 0; 6014710Sedward *termcap = sprintf(tbuf, "TERMCAP=%sco#%d:li#%d:", 6114710Sedward WWT_TERMCAP, wp->ww_w.nc, wp->ww_w.nr); 6214689Sedward if (wwavailmodes & WWM_REV) 6314689Sedward (void) strcat(tbuf, WWT_REV); 6414689Sedward if (wwavailmodes & WWM_UL) 6514689Sedward (void) strcat(tbuf, WWT_UL); 6614689Sedward (void) strcat(tbuf, wwkeys); 6714689Sedward environ = env; 6814689Sedward } 69