- if (termcap == 0) {
- extern char **environ;
- static char **env;
- register char **p, **q;
-
- for (i = 0, p = environ; *p; p++, i++)
- ;
- env = (char **)malloc((unsigned)(i + 3) * sizeof (char *));
- if (env == 0)
- return;
- if ((tbuf = malloc((unsigned) 1024)) == 0)
- return;
- for (p = environ, q = env; *p; p++, q++) {
- if (strncmp(*p, "TERM=", 5) == 0)
- *q = WWT_TERM;
- else if (strncmp(*p, "TERMCAP=", 8) == 0)
- termcap = q;
- else
- *q = *p;
- }
- if (termcap == 0)
- termcap = q++;
- *q = 0;
- environ = env;
- }
- *termcap = sprintf(tbuf, "TERMCAP=%sco#%d:li#%d:%s%s%s%s",
- WWT_TERMCAP, wp->ww_w.nc, wp->ww_w.nr,
- wwavailmodes & WWM_REV ? WWT_REV : "",
- wwavailmodes & WWM_UL ? WWT_UL : "",
- wwavailmodes & WWM_GRP ? WWT_GRP : "",
- wwkeys);
+ (void) sprintf(buf, "%sco#%d:li#%d:%s",
+ WWT_TERMCAP, wp->ww_w.nc, wp->ww_w.nr, wwwintermcap);
+ (void) setenv("TERMCAP", buf, 1);
+ (void) sprintf(buf, "%d", wp->ww_id + 1);
+ (void) setenv("WINDOW_ID", buf, 1);
+ return 0;
+bad:
+ wwerrno = WWE_SYS;
+ return -1;