readvtc.c
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5void get_vt_colors(int cn)
6{
7 char *cfs[3] = {
8 "/sys/module/vt/parameters/default_red",
9 "/sys/module/vt/parameters/default_grn",
10 "/sys/module/vt/parameters/default_blu",
11 };
12 char vtcs[16][8];
13 char tk[] = ",";
14 char cl[64];
15 char *tp = NULL;
16 FILE *fp;
17 size_t r;
18 int i, c, n;
19
20 for (i = 0; i < 16; i++)
21 strcpy(vtcs[i], "#000000");
22
23 for (i = 0, r = 0; i < 3; i++) {
24 if ((fp = fopen(cfs[i], "r")) == NULL)
25 continue;
26 while ((cl[r] = fgetc(fp)) != EOF && cl[r] != '\n')
27 r++;
28 cl[r] = '\0';
29 for (c = 0, tp = cl, n = 0; c < 16; c++, tp++) {
30 if ((r = strcspn(tp, tk)) == -1)
31 break;
32 for (n = 0; r && *tp >= 48 && *tp < 58; r--, tp++)
33 n = n * 10 - 48 + *tp;
34 vtcs[c][i * 2 + 1] = n / 16 < 10 ? n / 16 + 48 : n / 16 + 87;
35 vtcs[c][i * 2 + 2] = n % 16 < 10 ? n % 16 + 48 : n % 16 + 87;
36 }
37
38 fclose(fp);
39 }
40
41 if (cn >= 0 && cn < 16) {
42 fprintf(stdout, "%s\n", vtcs[cn]);
43 } else {
44 for (i = 0; i < 16; i++)
45 fprintf(stdout, "%s\n", vtcs[i]);
46 }
47}
48
49int main(int argc, char *argv[])
50{
51 int cn;
52
53 if (argc == 2 && (sscanf(argv[1], "%d", &cn) == EOF))
54 cn = -1;
55
56 get_vt_colors(cn);
57 return 0;
58}