|
|
1.1 root 1: /* trmsbr.c - minor termcap support (load with -ltermlib) */
2:
3: #include "../h/mh.h"
4: #include <stdio.h>
5: #ifndef SYS5
6: #include <sgtty.h>
7: #else SYS5
8: #include <sys/types.h>
9: #include <termio.h>
10: #include <sys/ioctl.h>
11: #endif SYS5
12:
13:
14: #if BUFSIZ<2048
15: #define TXTSIZ 2048
16: #else
17: #define TXTSIZ BUFSIZ
18: #endif
19:
20: #ifndef SYS5
21: extern char PC;
22: extern short ospeed;
23: #else SYS5
24: char PC;
25: short ospeed;
26: #endif SYS5
27:
28: int tgetent (), tgetnum ();
29: char *tgetstr ();
30:
31: /* */
32:
33: static int initLI = 0;
34: static int LI = 40;
35: static int initCO = 0;
36: static int CO = 80;
37: static char *CL = NULL;
38: static char *SE = NULL;
39: static char *SO = NULL;
40:
41: static char termcap[TXTSIZ];
42:
43: /* */
44:
45: static read_termcap () {
46: register char *bp,
47: *term;
48: char *cp,
49: myterm[TXTSIZ];
50: #ifndef SYS5
51: struct sgttyb sg;
52: #else SYS5
53: struct termio sg;
54: #endif SYS5
55: static int inited = 0;
56:
57: if (inited++)
58: return;
59:
60: if ((term = getenv ("TERM")) == NULL || tgetent (myterm, term) <= OK)
61: return;
62:
63: #ifndef SYS5
64: ospeed = ioctl (fileno (stdout), TIOCGETP, (char *) &sg) != NOTOK
65: ? sg.sg_ospeed : 0;
66: #else SYS5
67: ospeed = ioctl (fileno (stdout), TCGETA, &sg) != NOTOK
68: ? sg.c_cflag & CBAUD : 0;
69: #endif SYS5
70:
71: if (!initCO && (CO = tgetnum ("co")) <= 0)
72: CO = 80;
73: if (!initLI && (LI = tgetnum ("li")) <= 0)
74: LI = 24;
75:
76: cp = termcap;
77: CL = tgetstr ("cl", &cp);
78: if (bp = tgetstr ("pc", &cp))
79: PC = *bp;
80: if (tgetnum ("sg") <= 0) {
81: SE = tgetstr ("se", &cp);
82: SO = tgetstr ("so", &cp);
83: }
84: }
85:
86: /* */
87:
88: int sc_width () {
89: #ifdef TIOCGWINSZ
90: struct winsize win;
91:
92: if (ioctl (fileno (stderr), TIOCGWINSZ, &win) != NOTOK
93: && (CO = win.ws_col) > 0)
94: initCO++;
95: else
96: #endif TIOCGWINSZ
97: read_termcap ();
98:
99: return CO;
100: }
101:
102:
103: int sc_length () {
104: #ifdef TIOCGWINSZ
105: struct winsize win;
106:
107: if (ioctl (fileno (stderr), TIOCGWINSZ, &win) != NOTOK
108: && (LI = win.ws_row) > 0)
109: initLI++;
110: else
111: #endif TIOCGWINSZ
112: read_termcap ();
113:
114: return LI;
115: }
116:
117: /* */
118:
119: static int outc (c)
120: register char c;
121: {
122: (void) putchar (c);
123: }
124:
125:
126: void clear_screen () {
127: read_termcap ();
128:
129: if (CL && ospeed)
130: tputs (CL, LI, outc);
131: else {
132: printf ("\f");
133: if (ospeed)
134: printf ("\200");
135: }
136:
137: (void) fflush (stdout);
138: }
139:
140: /* */
141:
142: /* VARARGS1 */
143:
144: int SOprintf (fmt, a, b, c, d, e, f)
145: char *fmt,
146: *a,
147: *b,
148: *c,
149: *d,
150: *e,
151: *f;
152: {
153: read_termcap ();
154: if (SO == NULL || SE == NULL)
155: return NOTOK;
156:
157: tputs (SO, 1, outc);
158: printf (fmt, a, b, c, d, e, f);
159: tputs (SE, 1, outc);
160:
161: return OK;
162: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.