bar_vtcolors.c (1512B)
1 void 2 get_vt_colors(void) 3 { 4 char *cfs[3] = { 5 "/sys/module/vt/parameters/default_red", 6 "/sys/module/vt/parameters/default_grn", 7 "/sys/module/vt/parameters/default_blu", 8 }; 9 char vtcs[16][8]; 10 char tk[] = ","; 11 char cl[64]; 12 char *tp = NULL; 13 FILE *fp; 14 size_t r; 15 int i, c, n, len; 16 for (i = 0; i < 16; i++) 17 strcpy(vtcs[i], "#000000"); 18 19 for (i = 0, r = 0; i < 3; i++) { 20 if ((fp = fopen(cfs[i], "r")) == NULL) 21 continue; 22 while ((cl[r] = fgetc(fp)) != EOF && cl[r] != '\n') 23 r++; 24 cl[r] = '\0'; 25 for (c = 0, tp = cl, n = 0; c < 16; c++, tp++) { 26 if ((r = strcspn(tp, tk)) == -1) 27 break; 28 for (n = 0; r && *tp >= 48 && *tp < 58; r--, tp++) 29 n = n * 10 - 48 + *tp; 30 vtcs[c][i * 2 + 1] = n / 16 < 10 ? n / 16 + 48 : n / 16 + 87; 31 vtcs[c][i * 2 + 2] = n % 16 < 10 ? n % 16 + 48 : n % 16 + 87; 32 } 33 fclose(fp); 34 } 35 36 len = LENGTH(colors); 37 if (len > LENGTH(color_ptrs)) 38 len = LENGTH(color_ptrs); 39 for (i = 0; i < len; i++) { 40 for (c = 0; c < ColCount; c++) { 41 n = color_ptrs[i][c]; 42 if (n > -1 && strlen(colors[i][c]) >= strlen(vtcs[n])) 43 memcpy(colors[i][c], vtcs[n], 7); 44 } 45 } 46 } 47 48 int get_luminance(char *r) 49 { 50 char *c = r; 51 int n[3] = {0}; 52 int i = 0; 53 54 while (*c) { 55 if (*c >= 48 && *c < 58) 56 n[i / 2] = n[i / 2] * 16 - 48 + *c; 57 else if (*c >= 65 && *c < 71) 58 n[i / 2] = n[i / 2] * 16 - 55 + *c; 59 else if (*c >= 97 && *c < 103) 60 n[i / 2] = n[i / 2] * 16 - 87 + *c; 61 else 62 i--; 63 i++; 64 c++; 65 } 66 67 return (0.299 * n[0] + 0.587 * n[1] + 0.114 * n[2]) / 2.55; 68 } 69