|
|
1.1 root 1: int tgetname (); /* get termcap name */
2: int tgetflag (); /* get termcap boolean value */
3: int tgetnum (); /* get termcap numeric value */
4: int tgetstr (); /* get termcap string value */
5:
6: /*
7: * print_name:
8: * print name and aliases of current termcap entry.
9: */
10: print_name ()
11: {
12: char name[100];
13:
14: tgetname (name);
15: printf ("%s,\n", name);
16: }
17:
18: /*
19: * print_bools:
20: * print all boolean fields of current termcap entry.
21: */
22: print_bools ()
23: {
24: int i, val;
25: bool stuffprinted = FALSE;
26:
27: for (i = 0; i < MAXBOOLS; i++)
28: if (val = tgetflag (boolcaps[i].capname)) {
29: if (val == 1)
30: printf ("\t%s,", boolcaps[i].infoname);
31: else
32: printf ("\t%s@,", boolcaps[i].infoname);
33: stuffprinted = TRUE;
34: }
35: if (stuffprinted)
36: (void) putchar ('\n');
37: }
38:
39: /*
40: * print_nums:
41: * print all numeric fields of current termcap entry.
42: */
43: print_nums ()
44: {
45: int i, capval;
46: bool stuffprinted = FALSE;
47:
48: for (i = 0; i < MAXNUMS; i++)
49: if ((capval = tgetnum (numcaps[i].capname)) >= 0) {
50: printf ("\t%s#%d,", numcaps[i].infoname, capval);
51: stuffprinted = TRUE;
52: }
53: else if (capval == -2) {
54: printf ("\t%s@,", numcaps[i].infoname);
55: stuffprinted = TRUE;
56: }
57: if (stuffprinted)
58: (void) putchar ('\n');
59: }
60:
61: /*
62: * print_strs:
63: * print all string fields of current termcap entry.
64: */
65: print_strs ()
66: {
67: int i, count = 0;
68: char capval[100];
69:
70: for (i = 0; i < MAXSTRS; i++) {
71: tgetstr (strcaps[i].capname, capval);
72: if (!capval[0]) {
73: if (strcmp (strcaps[i].capname, "le") == 0) {
74: tgetstr ("bc", capval);
75: }
76: else if (strcmp (strcaps[i].capname, "ta") == 0) {
77: if (tgetflag ("pt")) {
78: capval[0] = '\t';
79: capval[1] = '\0';
80: }
81: }
82: }
83: if ((!capval[0]) && (strcaps[i].dflt))
84: (void) strcpy (capval, strcaps[i].dflt);
85: if (capval[0]) {
86: if (strcmp (capval, "@") != 0) {
87: printf ("\t%s=", strcaps[i].infoname);
88: if (strcmp(strcaps[i].infoname,"use") != 0) {
89: put_str (capval);
90: printf (",");
91: }
92: else
93: printf ("%s,", capval);
94: }
95: else
96: printf ("\t%s@,", strcaps[i].infoname);
97: count++;
98: if (!(count %= 3))
99: putchar ('\n');
100: }
101: }
102: if (count)
103: (void) putchar ('\n');
104: }
105:
106: /*
107: * put_str:
108: * translate strings to printable format and print them.
109: */
110: put_str (s)
111: char *s;
112: {
113: bool rflag = FALSE; /* % codes */
114: char *c;
115: int parm;
116:
117: if ((isdigit (*s)) || (*s == '.')) { /* handle padding */
118: printf ("$<");
119: while ((isdigit (*s)) || (*s == '.')) {
120: (void) putchar (*s);
121: s++;
122: }
123: if (*s == '*') {
124: (void) putchar (*s);
125: s++;
126: }
127: (void) putchar ('>');
128: }
129: for (c = s; *c; c++) { /* scan for % codes (needs work) */
130: if (*c == '%') {
131: c++;
132: switch (*c) {
133: case 'r':
134: rflag = TRUE;
135: break;
136: default:
137: break; /* ignore */
138: }
139: }
140: }
141: parm = 0;
142: while (*s) { /* print the string */
143: switch (*s) {
144: case '%':
145: s++;
146: switch (*s) {
147: case '%':
148: printf ("%%%%");
149: break;
150: case 'i':
151: printf ("%%i");
152: break;
153: case 'd':
154: parm++;
155: if ((rflag) && (parm <= 2)) {
156: if (parm == 1)
157: printf ("%%p2%%d");
158: else
159: printf ("%%p1%%d");
160: }
161: else
162: printf ("%%p%d%%d", parm);
163: break;
164: case '2':
165: parm++;
166: if ((rflag) && (parm <= 2)) {
167: if (parm == 1)
168: printf ("%%p2%%02d");
169: else
170: printf ("%%p1%%02d");
171: }
172: else
173: printf ("%%p%d%%02d", parm);
174: break;
175: case '3':
176: parm++;
177: if ((rflag) && (parm <= 2)) {
178: if (parm == 1)
179: printf ("%%p2%%03d");
180: else
181: printf ("%%p1%%03d");
182: }
183: else
184: printf ("%%p%d%%03d", parm);
185: break;
186: case '.':
187: parm++;
188: if ((rflag) && (parm <= 2)) {
189: if (parm == 1)
190: printf ("%%p2%%c");
191: else
192: printf ("%%p1%%c");
193: }
194: else
195: printf ("%%p%d%%c", parm);
196: break;
197: case '+':
198: s++;
199: parm++;
200: if ((rflag) && (parm <= 2)) {
201: if (parm == 1)
202: printf ("%%p2%%'%c'%%+%%c", *s);
203: else
204: printf ("%%p1%%'%c'%%+%%c", *s);
205: }
206: else
207: printf ("%%p%d%%'%c'%%+%%c", parm, *s);
208: break;
209: default:
210: break; /* ignore */
211: }
212: break;
213: case '\200':
214: printf ("\\0");
215: break;
216: case '\177':
217: printf ("^?");
218: break;
219: case ',':
220: printf ("\\,");
221: break;
222: case '\\':
223: printf ("\\\\");
224: break;
225: case '^':
226: printf ("\\^");
227: break;
228: case ':':
229: printf ("\\:");
230: break;
231: case '\033':
232: printf ("\\E");
233: break;
234: case '\n':
235: printf ("\\n");
236: break;
237: case '\r':
238: printf ("\\r");
239: break;
240: case '\t':
241: printf ("\\t");
242: break;
243: case '\b':
244: printf ("\\b");
245: break;
246: case '\f':
247: printf ("\\f");
248: break;
249: case ' ':
250: printf ("\\s");
251: break;
252: default:
253: if (*s < ' ')
254: printf ("^%c", *s + 'A' - 1);
255: else
256: (void) putchar (*s);
257: break;
258: }
259: s++;
260: }
261: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.