+ goto bad;
+
+ if ((wwterm = getenv("TERM")) == 0) {
+ wwerrno = WWE_BADTERM;
+ goto bad;
+ }
+ if (tgetent(wwtermcap, wwterm) != 1) {
+ wwerrno = WWE_BADTERM;
+ goto bad;
+ }
+ wwbaud = wwbaudmap[wwoldtty.ww_sgttyb.sg_ospeed];
+
+ if (ttinit() < 0)
+ goto bad;
+ wwnrow = tt.tt_nrow;
+ wwncol = tt.tt_ncol;
+ wwavailmodes = tt.tt_availmodes;
+ wwwrap = tt.tt_wrap;
+ (*tt.tt_init)();
+
+ if (wwavailmodes & WWM_REV)
+ wwcursormodes = WWM_REV | wwavailmodes & WWM_BLK;
+ else if (wwavailmodes & WWM_UL)
+ wwcursormodes = WWM_UL;
+
+ if ((wwib = malloc((unsigned) 512)) == 0)
+ goto bad;
+ wwibe = wwib + 512;
+ wwibq = wwibp = wwib;
+
+ if ((wwsmap = wwalloc(0, 0, wwnrow, wwncol, sizeof (char))) == 0)
+ goto bad;
+ for (i = 0; i < wwnrow; i++)
+ for (j = 0; j < wwncol; j++)
+ wwsmap[i][j] = WWX_NOBODY;
+
+ wwos = (union ww_char **)
+ wwalloc(0, 0, wwnrow, wwncol, sizeof (union ww_char));
+ if (wwos == 0)
+ goto bad;
+ for (i = 0; i < wwnrow; i++)
+ for (j = 0; j < wwncol; j++)
+ wwos[i][j].c_w = ' ';
+ wwns = (union ww_char **)
+ wwalloc(0, 0, wwnrow, wwncol, sizeof (union ww_char));
+ if (wwns == 0)
+ goto bad;
+ for (i = 0; i < wwnrow; i++)
+ for (j = 0; j < wwncol; j++)
+ wwns[i][j].c_w = ' ';
+
+ wwtouched = malloc((unsigned) wwnrow);
+ if (wwtouched == 0) {
+ wwerrno = WWE_NOMEM;
+ goto bad;
+ }
+ for (i = 0; i < wwnrow; i++)
+ wwtouched[i] = 0;
+
+ wwindex[WWX_NOBODY] = &wwnobody;
+ wwnobody.ww_order = NWW;
+
+ kp = wwkeys;
+ addcap("kb", &kp);
+ addcap("ku", &kp);
+ addcap("kd", &kp);
+ addcap("kl", &kp);
+ addcap("kr", &kp);
+ addcap("kh", &kp);
+ if ((j = tgetnum("kn")) >= 0) {
+ char cap[32];
+ int i;
+
+ (void) sprintf(kp, "kn#%d:", j);
+ for (; *kp; kp++)
+ ;
+ for (i = 1; i <= j; i++) {
+ (void) sprintf(cap, "k%d", i);
+ addcap(cap, &kp);
+ cap[0] = 'l';
+ addcap(cap, &kp);
+ }
+ }
+ for (i = 0, p = environ; *p++; i++)
+ ;
+ if ((env = (char **)malloc((unsigned)(i + 3) * sizeof (char *))) == 0)
+ goto bad;
+ 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;
+ }
+ *(termcap ? termcap : q++) = wwwintermcap;
+ *q = 0;
+ environ = env;
+
+ (void) sigrelse(SIGIO);