|
|
1.1 root 1: # include "curses.ext"
2: # include "cr_ex.h"
3:
4: static bool *sflags[] = {
5: &AM, &BS, &EO, &HZ, &IN, &MI, &NC, &OS, &UL, &XN
6: };
7:
8: static char *xPC,
9: **sstrs[] = {
10: &AL, &BC, &BT, &CD, &CE, &CL, &CM, &DC, &DL, &DM, &DO,
11: &ED, &EI, &HO, &IC, &IM, &IP, &LL, &MA, &ND, &xPC, &SE,
12: &SF, &SO, &SR, &TA, &TE, &TI, &UE, &UP, &US, &VB, &VS,
13: &VE
14: },
15: *longname(), *tgoto();
16:
17: static char tspace[128], /* Space for capability strings */
18: *aoftspace; /* Address of tspace for relocation */
19:
20: static int destcol, destline;
21:
22: /*
23: * This routine does terminal type initialization routines, and
24: * calculation of flags at entry. It is almost entirely stolen from
25: * Bill Joy's ex version 2.6.
26: */
27: short ospeed = -1;
28:
29: gettmode() {
30:
31: if (gtty(_tty_ch, &_tty) < 0)
32: return;
33: savetty();
34: if (stty(_tty_ch, &_tty) < 0)
35: _tty.sg_flags = _res_flg;
36: ospeed = _tty.sg_ospeed;
37: _res_flg = _tty.sg_flags;
38: UPPERCASE = (_tty.sg_flags & LCASE) != 0;
39: GT = ((_tty.sg_flags & XTABS) == 0);
40: NONL = ((_tty.sg_flags & CRMOD) == 0);
41: # ifdef DEBUG
42: fprintf(outf, "GETTMODE: UPPERCASE = %s\n", UPPERCASE ? "TRUE":"FALSE");
43: fprintf(outf, "GETTMODE: GT = %s\n", GT ? "TRUE" : "FALSE");
44: fprintf(outf, "GETTMODE: NONL = %s\n", NONL ? "TRUE" : "FALSE");
45: fprintf(outf, "GETTMODE: ospeed = %d\n", ospeed);
46: # endif
47: }
48:
49: setterm(type)
50: reg char *type; {
51:
52: reg int unknown;
53: char genbuf[1024];
54:
55: # ifdef DEBUG
56: fprintf(outf, "SETTERM(\"%s\")\n", type);
57: fprintf(outf, "SETTERM: LINES = %d, COLS = %d\n", LINES, COLS);
58: # endif
59: if (type[0] == '\0')
60: type = "xx";
61: unknown = FALSE;
62: if (tgetent(genbuf, type) != 1) {
63: unknown++;
64: strcpy(genbuf, "xx|dumb:");
65: }
66: # ifdef DEBUG
67: fprintf(outf, "SETTERM: tty = %s\n", type);
68: # endif
69: if (LINES == 0)
70: LINES = tgetnum("li");
71: if (LINES <= 5)
72: LINES = 24;
73: else if (LINES > 48)
74: LINES = 48;
75:
76: if (COLS == 0)
77: COLS = tgetnum("co");
78: if (COLS <= 4)
79: COLS = 80;
80: else if (COLS > 1000)
81: COLS = 1000;
82: # ifdef DEBUG
83: fprintf(outf, "SETTERM: LINES = %d, COLS = %d\n", LINES, COLS);
84: # endif
85: aoftspace = tspace;
86: zap(); /* get terminal description */
87: if (tgoto(CM, destcol, destline)[0] == 'O')
88: CA = FALSE, CM = 0;
89: else
90: CA = TRUE;
91: PC = xPC ? xPC[0] : FALSE;
92: aoftspace = tspace;
93: strcpy(ttytype, longname(genbuf, type));
94: if (unknown)
95: return ERR;
96: return OK;
97: }
98: /*
99: * This routine gets all the terminal falgs from the termcap database
100: */
101: zap() {
102:
103: reg bool **fp;
104: reg char *namp, ***sp;
105: extern char *tgetstr();
106:
107: /*
108: * get boolean flags
109: */
110: namp = "ambseohzinmincosulxn\0\0";
111: # ifdef FULLDEBUG
112: fprintf(outf, "ZAP: namp = \"%s\"\n", namp);
113: # endif
114: fp = sflags;
115: do {
116: *(*fp++) = tgetflag(namp);
117: # ifdef FULLDEBUG
118: fprintf(outf, "ZAP: %.2s = %d", namp, *(*(fp - 1)));
119: # endif
120: namp += 2;
121: } while (*namp);
122:
123: /*
124: * get string values
125: */
126: namp = "albcbtcdceclcmdcdldmdoedeihoicimipllmandpcsesfsosrtatetiueupusvbvsve";
127: # ifdef FULLDEBUG
128: fprintf(outf, "ZAP: namp = \"%s\"\n", namp);
129: # endif
130: sp = sstrs;
131: do {
132: *(*sp++) = tgetstr(namp, &aoftspace);
133: # ifdef FULLDEBUG
134: fprintf(outf, "ZAP: %.2s = \"%s\"\n", namp, *(*(sp-1)));
135: # endif
136: namp += 2;
137: } while (*namp);
138: if (!SO && US) {
139: SO = US;
140: SE = UE;
141: }
142: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.