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