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