readvtc

[discontinued] Reads values from /sys/module/vt/parameters/default_<color>
git clone https://noxz.tech/git/readvtc.git
Log | Files | LICENSE

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}