1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-22 11:17:19 +00:00
freebsd/lib/libmytinfo/caps.c
1994-10-06 23:38:41 +00:00

174 lines
3.5 KiB
C

/*
* caps.c
*
* By Ross Ridge
* Public Domain
* 92/02/01 07:29:45
*
* caps [-c | -t] [term]
*
* -c use termcap names instead of terminfo variable names
* -t use terminfo capnames instead of variables names
* term name of terminal to use
*
* prints out all the capabilities given the specified terminal. If no
* terminal is given, it is taken from the environment variable TERM.
*
*/
#define NOTLIB
#include "defs.h"
#include <term.h>
const char SCCSid[] = "@(#) mytinfo caps.c 3.2 92/02/01 public domain, By Ross Ridge";
/* output a string in a human readable format */
void
putstr(s)
char *s; {
while(*s != '\0') {
switch(*s) {
case '\n': printf("\\n"); break;
case '\b': printf("\\b"); break;
case '\t': printf("\\t"); break;
case '\r': printf("\\r"); break;
case '\f': printf("\\f"); break;
case ' ': printf("\\s"); break;
case '\177': printf("^?"); break;
case '\200': printf("\\0"); break;
default:
if (*s > 0 && *s < 32)
printf("^%c", *s + 64);
else if (*s < 0)
printf("\\%03o", *s & 0xff);
else
putchar(*s);
break;
}
s++;
}
}
void
do_cleanup(e)
int e; {
fprintf(stderr, "usage: %s [-c | -t ] [terminal]\n", prg_name);
return;
}
int
main(argc, argv)
int argc;
char **argv; {
int names = 0;
register int i;
int flag, num;
char *str;
prg_name = argv[0];
cleanup = do_cleanup;
if (argc > 3)
quit(-1, "argument count");
if (argc == 1)
setupterm(NULL, 2, (int *) 0);
else if (argc == 2) {
if (argv[1][0] != '-')
setupterm(argv[1], 2, (int *) 0);
else {
if (argv[1][1] == 'c')
names = 2;
else if (argv[1][1] == 't')
names = 1;
else
quit(-1, "unknown switch '%c'", argv[1][1]);
setupterm(NULL, 2, (int *) 0);
}
} else {
if (argv[1][0] != '-')
quit(-1, "bad switch");
if (argv[1][1] == 'c')
names = 2;
else if (argv[1][1] == 't')
names = 1;
else
quit(-1, "unknown switch '%c'", argv[1][1]);
setupterm(argv[2], 2, (int *) 0);
}
fflush(stderr);
fflush(stdout);
printf("\n");
#ifdef _CUR_TERM
printf("%s: %s\n", cur_term->name, cur_term->name_all);
printf("pad: %d xon: %d termcap: %d\n",
cur_term->pad, cur_term->xon, cur_term->termcap);
printf("true_columns: %d true_lines: %d baudrate: %lu\n",
cur_term->true_columns, cur_term->true_lines,
(unsigned long) cur_term->baudrate);
printf("\n");
#endif
printf("Booleans:\n");
for(i = 0; boolnames[i] != NULL; i++) {
#ifdef _CUR_TERM
flag = cur_term->bools[i];
#else
flag = tigetflag(boolnames[i]);
#endif
if (flag != -1 && flag != 0) {
switch(names) {
case 0:
printf(" %s\n", boolfnames[i]);
break;
case 1:
printf(" %s\n", boolnames[i]);
break;
case 2:
printf(" %s\n", boolcodes[i]);
break;
}
}
}
printf("\nNumerics:\n");
for(i = 0; numnames[i] != NULL; i++) {
num = tigetnum(numnames[i]);
if (num != -2 && num != -1) {
switch(names) {
case 0:
printf(" %-32s: %d\n", numfnames[i], num);
break;
case 1:
printf(" %-5s: %d\n", numnames[i], num);
break;
case 2:
printf(" %-2s: %d\n", numcodes[i], num);
break;
}
}
}
printf("\nStrings:\n");
for(i = 0; strnames[i] != NULL; i++) {
str = tigetstr(strnames[i]);
if (str != (char *) -1 && str != (char *) 0) {
switch(names) {
case 0:
printf(" %-32s: ", strfnames[i]);
break;
case 1:
printf(" %-5s: ", strnames[i]);
break;
case 2:
printf(" %-2s: ", strcodes[i]);
break;
}
putstr(str);
putchar('\n');
}
}
return 0;
}