-
Notifications
You must be signed in to change notification settings - Fork 25
/
unibi-dump.c
116 lines (102 loc) · 2.78 KB
/
unibi-dump.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/* Sample program to demonstrate basic unibilium features.
* This code is in the public domain; you can do whatever you want with it.
*/
#include "unibilium.h"
#include <stdio.h>
#include <ctype.h>
static void print_str_esc(const char *s) {
if (!s) {
printf("(null)");
return;
}
for (unsigned char c; (c = *s); s++) {
switch (c) {
case '\a': printf("\\a"); break;
case '\b': printf("\\b"); break;
case '\f': printf("\\f"); break;
case '\n': printf("\\n"); break;
case '\r': printf("\\r"); break;
case '\t': printf("\\t"); break;
case '\v': printf("\\v"); break;
case '\033': printf("\\e"); break;
default:
if (isprint(c)) {
printf("%c", c);
} else {
printf("\\%03o", c);
}
break;
}
}
}
int main(void) {
unibi_term *const ut = unibi_from_env();
if (!ut) {
perror("unibi_from_env");
return 1;
}
printf("Terminal name: %s\n", unibi_get_name(ut));
{
const char **a = unibi_get_aliases(ut);
if (*a) {
printf("Aliases: ");
do {
printf("%s%s", *a, a[1] ? " | " : "");
a++;
} while (*a);
printf("\n");
}
}
printf("\n");
printf("Boolean capabilities:\n");
for (enum unibi_boolean i = unibi_boolean_begin_ + 1; i < unibi_boolean_end_; i++) {
if (unibi_get_bool(ut, i)) {
printf(" %-25s / %s\n", unibi_name_bool(i), unibi_short_name_bool(i));
}
}
printf("\n");
printf("Numeric capabilities:\n");
for (enum unibi_numeric i = unibi_numeric_begin_ + 1; i < unibi_numeric_end_; i++) {
short n = unibi_get_num(ut, i);
if (n != -1) {
printf(" %-25s / %-10s = %hd\n", unibi_name_num(i), unibi_short_name_num(i), n);
}
}
printf("\n");
printf("String capabilities:\n");
for (enum unibi_string i = unibi_string_begin_ + 1; i < unibi_string_end_; i++) {
const char *s = unibi_get_str(ut, i);
if (s) {
/* Most of these strings will contain escape sequences */
printf(" %-25s / %-10s = ", unibi_name_str(i), unibi_short_name_str(i));
print_str_esc(s);
printf("\n");
}
}
printf("\n");
if (unibi_count_ext_bool(ut)) {
printf("Extended boolean capabilities:\n");
for (size_t i = 0; i < unibi_count_ext_bool(ut); i++) {
printf(" %-25s = %s\n", unibi_get_ext_bool_name(ut, i), unibi_get_ext_bool(ut, i) ? "true" : "false");
}
printf("\n");
}
if (unibi_count_ext_num(ut)) {
printf("Extended numeric capabilities:\n");
for (size_t i = 0; i < unibi_count_ext_num(ut); i++) {
printf(" %-25s = %hd\n", unibi_get_ext_num_name(ut, i), unibi_get_ext_num(ut, i));
}
printf("\n");
}
if (unibi_count_ext_str(ut)) {
printf("Extended string capabilities:\n");
for (size_t i = 0; i < unibi_count_ext_str(ut); i++) {
printf(" %-25s = ", unibi_get_ext_str_name(ut, i));
print_str_esc(unibi_get_ext_str(ut, i));
printf("\n");
}
printf("\n");
}
unibi_destroy(ut);
return 0;
}