xref: /csrg-svn/usr.bin/window/wwinit.c (revision 14287)
113925Sedward #ifndef lint
2*14287Sedward static	char *sccsid = "@(#)wwinit.c	1.7 83/07/29";
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;
1514135Sedward char _wwtermcap[1024];
1614135Sedward char _wwkeys[512];
1714135Sedward static char *kp = _wwkeys;
1814069Sedward int wwncol, wwnrow;
1913925Sedward 
2013925Sedward wwinit()
2113925Sedward {
2213962Sedward 	static char done = 0;
2314135Sedward 	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 	if (wwsettty(0, &wwnewtty) < 0)
4113962Sedward 		return -1;
4213972Sedward 	if (Winit(2, 1) != 0)
4313962Sedward 		return -1;
4413962Sedward 	WSetRealCursor = 1;
4514069Sedward 	Wscreensize(&wwnrow, &wwncol);
4614135Sedward 
4714135Sedward 	if (tgetent(_wwtermcap, getenv("TERM")) != 1)
4814135Sedward 		return -1;
4914135Sedward 	addcap("kb");
5014135Sedward 	addcap("ku");
5114135Sedward 	addcap("kd");
5214135Sedward 	addcap("kl");
5314135Sedward 	addcap("kr");
5414135Sedward 	addcap("kh");
5514135Sedward 	if ((kn = tgetnum("kn")) >= 0) {
5614135Sedward 		char cap[5];
5714135Sedward 		int i;
5814135Sedward 
5914135Sedward 		sprintf(kp, "kn#%d:", kn);
6014135Sedward 		for (; *kp; kp++)
6114135Sedward 			;
6214135Sedward 		for (i = 1; i <= kn; i++) {
6314135Sedward 			sprintf(cap, "k%d", i);
6414135Sedward 			addcap(cap);
6514135Sedward 			cap[0] = 'l';
6614135Sedward 			addcap(cap);
6714135Sedward 		}
6814135Sedward 	}
6913962Sedward 	return 0;
7013925Sedward }
7114135Sedward 
7214135Sedward addcap(cap)
7314135Sedward register char *cap;
7414135Sedward {
7514135Sedward 	static char tbuf[512];
7614135Sedward 	static char *tp = tbuf;
77*14287Sedward 	register char *str, *p;
7814135Sedward 	char *tgetstr();
7914135Sedward 
8014135Sedward 	if ((str = tgetstr(cap, &tp)) != 0) {
8114135Sedward 		while (*kp++ = *cap++)
8214135Sedward 			;
8314135Sedward 		kp[-1] = '=';
84*14287Sedward 		while (*str) {
85*14287Sedward 			for (p = unctrl(*str++); *kp++ = *p++;)
86*14287Sedward 				;
87*14287Sedward 			kp--;
88*14287Sedward 		}
89*14287Sedward 		*kp++ = ':';
9014135Sedward 		*kp = 0;
9114135Sedward 	}
9214135Sedward }
93