113925Sedward #ifndef lint 2*14135Sedward static char *sccsid = "@(#)wwinit.c 1.6 83/07/26"; 313925Sedward #endif 413925Sedward 513925Sedward #include "ww.h" 613925Sedward 713962Sedward struct ww_tty wwoldtty; 813962Sedward struct ww_tty wwnewtty = { 913962Sedward { 0, 0, -1, -1, 0 }, 1013962Sedward { -1, -1, -1, -1, -1, -1 }, 1113962Sedward { -1, -1, -1, -1, -1, -1 }, 1213962Sedward 0, 0, 0 1313962Sedward }; 1413994Sedward int _wwdtablesize; 15*14135Sedward char _wwtermcap[1024]; 16*14135Sedward char _wwkeys[512]; 17*14135Sedward static char *kp = _wwkeys; 1814069Sedward int wwncol, wwnrow; 1913925Sedward 2013925Sedward wwinit() 2113925Sedward { 2213962Sedward static char done = 0; 23*14135Sedward int kn; 2413962Sedward 2513962Sedward if (done) 2613962Sedward return 0; 2713962Sedward done++; 2813994Sedward _wwdtablesize = getdtablesize(); 2913962Sedward if (wwgettty(0, &wwoldtty) < 0) 3013962Sedward return -1; 3113962Sedward wwnewtty.ww_sgttyb.sg_flags = wwoldtty.ww_sgttyb.sg_flags; 3213962Sedward wwnewtty.ww_sgttyb.sg_ispeed = wwoldtty.ww_sgttyb.sg_ispeed; 3313962Sedward wwnewtty.ww_sgttyb.sg_ospeed = wwoldtty.ww_sgttyb.sg_ospeed; 3413962Sedward wwnewtty.ww_lmode = wwoldtty.ww_lmode; 3513962Sedward wwnewtty.ww_pgrp = wwoldtty.ww_pgrp; 3613962Sedward wwnewtty.ww_ldisc = wwoldtty.ww_ldisc; 3713962Sedward wwnewtty.ww_sgttyb.sg_flags |= CBREAK; 3813972Sedward wwnewtty.ww_sgttyb.sg_flags &= ~(ECHO|CRMOD); 3913962Sedward wwnewtty.ww_lmode |= LLITOUT; 4013962Sedward wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc; 4113962Sedward if (wwsettty(0, &wwnewtty) < 0) 4213962Sedward return -1; 4313972Sedward if (Winit(2, 1) != 0) 4413962Sedward return -1; 4513962Sedward WSetRealCursor = 1; 4614069Sedward Wscreensize(&wwnrow, &wwncol); 47*14135Sedward 48*14135Sedward if (tgetent(_wwtermcap, getenv("TERM")) != 1) 49*14135Sedward return -1; 50*14135Sedward addcap("kb"); 51*14135Sedward addcap("ku"); 52*14135Sedward addcap("kd"); 53*14135Sedward addcap("kl"); 54*14135Sedward addcap("kr"); 55*14135Sedward addcap("kh"); 56*14135Sedward if ((kn = tgetnum("kn")) >= 0) { 57*14135Sedward char cap[5]; 58*14135Sedward int i; 59*14135Sedward 60*14135Sedward sprintf(kp, "kn#%d:", kn); 61*14135Sedward for (; *kp; kp++) 62*14135Sedward ; 63*14135Sedward for (i = 1; i <= kn; i++) { 64*14135Sedward sprintf(cap, "k%d", i); 65*14135Sedward addcap(cap); 66*14135Sedward cap[0] = 'l'; 67*14135Sedward addcap(cap); 68*14135Sedward } 69*14135Sedward } 7013962Sedward return 0; 7113925Sedward } 72*14135Sedward 73*14135Sedward addcap(cap) 74*14135Sedward register char *cap; 75*14135Sedward { 76*14135Sedward static char tbuf[512]; 77*14135Sedward static char *tp = tbuf; 78*14135Sedward register char *str; 79*14135Sedward char *tgetstr(); 80*14135Sedward 81*14135Sedward if ((str = tgetstr(cap, &tp)) != 0) { 82*14135Sedward while (*kp++ = *cap++) 83*14135Sedward ; 84*14135Sedward kp[-1] = '='; 85*14135Sedward while (*kp++ = *str++) 86*14135Sedward ; 87*14135Sedward kp[-1] = ':'; 88*14135Sedward *kp = 0; 89*14135Sedward } 90*14135Sedward } 91