113925Sedward #ifndef lint 2*14407Sedward static char *sccsid = "@(#)wwinit.c 2.1.1.1 83/08/09"; 313925Sedward #endif 413925Sedward 513925Sedward #include "ww.h" 613925Sedward 7*14407Sedward static char *kp = wwkeys; 813925Sedward 913925Sedward wwinit() 1013925Sedward { 11*14407Sedward register i, j; 1214135Sedward int kn; 1313962Sedward 14*14407Sedward wwdtablesize = getdtablesize(); 1513962Sedward if (wwgettty(0, &wwoldtty) < 0) 1613962Sedward return -1; 1714295Sedward wwwintty = wwoldtty; 1814295Sedward wwwintty.ww_sgttyb.sg_flags &= ~XTABS; 1913962Sedward wwnewtty.ww_sgttyb.sg_flags = wwoldtty.ww_sgttyb.sg_flags; 2013962Sedward wwnewtty.ww_sgttyb.sg_ispeed = wwoldtty.ww_sgttyb.sg_ispeed; 2113962Sedward wwnewtty.ww_sgttyb.sg_ospeed = wwoldtty.ww_sgttyb.sg_ospeed; 2213962Sedward wwnewtty.ww_lmode = wwoldtty.ww_lmode; 2313962Sedward wwnewtty.ww_pgrp = wwoldtty.ww_pgrp; 2413962Sedward wwnewtty.ww_ldisc = wwoldtty.ww_ldisc; 2513962Sedward wwnewtty.ww_sgttyb.sg_flags |= CBREAK; 2613972Sedward wwnewtty.ww_sgttyb.sg_flags &= ~(ECHO|CRMOD); 2713962Sedward wwnewtty.ww_lmode |= LLITOUT; 2813962Sedward if (wwsettty(0, &wwnewtty) < 0) 29*14407Sedward goto bad; 3014135Sedward 31*14407Sedward if ((wwterm = getenv("TERM")) == 0) 32*14407Sedward goto bad; 33*14407Sedward if (tgetent(wwtermcap, wwterm) != 1) 34*14407Sedward goto bad; 35*14407Sedward wwbaud = wwbaudmap[wwoldtty.ww_sgttyb.sg_ospeed]; 36*14407Sedward 37*14407Sedward if (ttinit() < 0) 38*14407Sedward goto bad; 39*14407Sedward wwnrow = tt.tt_nrow; 40*14407Sedward wwncol = tt.tt_ncol; 41*14407Sedward (*tt.tt_reset)(); 42*14407Sedward (*tt.tt_clreos)(); 43*14407Sedward 44*14407Sedward if ((wwsmap = wwalloc(wwnrow, wwncol, sizeof (char))) == 0) 45*14407Sedward goto bad; 46*14407Sedward for (i = 0; i < wwnrow; i++) 47*14407Sedward for (j = 0; j < wwncol; j++) 48*14407Sedward wwsmap[i][j] = WWX_NOBODY; 49*14407Sedward wwos = (union ww_char **) 50*14407Sedward wwalloc(wwnrow, wwncol, sizeof (union ww_char)); 51*14407Sedward if (wwos == 0) 52*14407Sedward goto bad; 53*14407Sedward for (i = 0; i < wwnrow; i++) 54*14407Sedward for (j = 0; j < wwncol; j++) 55*14407Sedward wwos[i][j].c_w = ' '; 56*14407Sedward wwns = (union ww_char **) 57*14407Sedward wwalloc(wwnrow, wwncol, sizeof (union ww_char)); 58*14407Sedward if (wwns == 0) 59*14407Sedward goto bad; 60*14407Sedward for (i = 0; i < wwnrow; i++) 61*14407Sedward for (j = 0; j < wwncol; j++) 62*14407Sedward wwns[i][j].c_w = ' '; 63*14407Sedward 64*14407Sedward wwindex[WWX_NOBODY] = &wwnobody; 65*14407Sedward wwnobody.ww_order = NWW; 66*14407Sedward 6714135Sedward addcap("kb"); 6814135Sedward addcap("ku"); 6914135Sedward addcap("kd"); 7014135Sedward addcap("kl"); 7114135Sedward addcap("kr"); 7214135Sedward addcap("kh"); 7314135Sedward if ((kn = tgetnum("kn")) >= 0) { 7414135Sedward char cap[5]; 7514135Sedward int i; 7614135Sedward 77*14407Sedward (void) sprintf(kp, "kn#%d:", kn); 7814135Sedward for (; *kp; kp++) 7914135Sedward ; 8014135Sedward for (i = 1; i <= kn; i++) { 81*14407Sedward (void) sprintf(cap, "k%d", i); 8214135Sedward addcap(cap); 8314135Sedward cap[0] = 'l'; 8414135Sedward addcap(cap); 8514135Sedward } 8614135Sedward } 8713962Sedward return 0; 88*14407Sedward bad: 89*14407Sedward (void) wwsettty(0, &wwoldtty); 90*14407Sedward return -1; 9113925Sedward } 9214135Sedward 93*14407Sedward static 9414135Sedward addcap(cap) 9514135Sedward register char *cap; 9614135Sedward { 97*14407Sedward char tbuf[512]; 98*14407Sedward char *tp = tbuf; 9914287Sedward register char *str, *p; 10014135Sedward 10114135Sedward if ((str = tgetstr(cap, &tp)) != 0) { 10214135Sedward while (*kp++ = *cap++) 10314135Sedward ; 10414135Sedward kp[-1] = '='; 10514287Sedward while (*str) { 10614287Sedward for (p = unctrl(*str++); *kp++ = *p++;) 10714287Sedward ; 10814287Sedward kp--; 10914287Sedward } 11014287Sedward *kp++ = ':'; 11114135Sedward *kp = 0; 11214135Sedward } 11314135Sedward } 114