mkb.c (1291B)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 #include <string.h> 5 #include <err.h> 6 7 #define DEFAULT_SIZE 32 8 #define DEFAULT_CHAR1 "━" 9 #define DEFAULT_CHAR2 "━" 10 #define DEFAULT_START "[1;37m" 11 #define DEFAULT_END "[0m" 12 #define DEFAULT_SEP "╋[1;30m" 13 14 int 15 main (int argc, char **argv) 16 { 17 int i; 18 float size = 0; 19 float value = 0; 20 char *end = NULL; 21 char *sep = NULL; 22 char *char1 = NULL; 23 char *char2 = NULL; 24 char *begin = NULL; 25 char **current = NULL; 26 27 size = getenv("SIZE") ? atoi(getenv("SIZE")) : DEFAULT_SIZE; 28 char1 = getenv("CHAR1") ? getenv("CHAR1") : DEFAULT_CHAR1; 29 char2 = getenv("CHAR2") ? getenv("CHAR2") : DEFAULT_CHAR2; 30 begin = getenv("START") ? getenv("START") : DEFAULT_START; 31 end = getenv("END") ? getenv("END") : DEFAULT_END; 32 sep = getenv("SEP") ? getenv("SEP") : DEFAULT_SEP; 33 34 if (argc < 2) 35 scanf("%f", &value); 36 else 37 value = atof(argv[1]); 38 39 if (value > 100) 40 errx(1, "value should remain between 0 and 100"); 41 42 write(fileno(stdout), begin, strnlen(begin, 32)); 43 for (i=0; i<size; i++) { 44 current = (i < value / 100 * size) ? &char1 : (current == &char1 ? &sep : &char2); 45 write(fileno(stdout), *current, strnlen(*current, 32)); 46 } 47 write(fileno(stdout), end, strnlen(end, 32)); 48 49 putc('\n', stdout); 50 51 return 0; 52 }