xref: /csrg-svn/usr.bin/window/wwinit.c (revision 14135)
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