mkb.c (1291B)
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  | 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <err.h>
#define DEFAULT_SIZE 32
#define DEFAULT_CHAR1 "━"
#define DEFAULT_CHAR2 "━"
#define DEFAULT_START "[1;37m"
#define DEFAULT_END   "[0m"
#define DEFAULT_SEP   "╋[1;30m"
int
main (int argc, char **argv)
{
	int i;
	float size  = 0;
	float value = 0;
	char *end   = NULL;
	char *sep   = NULL;
	char *char1 = NULL;
	char *char2 = NULL;
	char *begin = NULL;
	char **current = NULL;
	size = getenv("SIZE")   ? atoi(getenv("SIZE")) : DEFAULT_SIZE;
	char1 = getenv("CHAR1") ? getenv("CHAR1") : DEFAULT_CHAR1;
	char2 = getenv("CHAR2") ? getenv("CHAR2") : DEFAULT_CHAR2;
	begin = getenv("START") ? getenv("START") : DEFAULT_START;
	end   = getenv("END")   ? getenv("END")   : DEFAULT_END;
	sep   = getenv("SEP")   ? getenv("SEP")   : DEFAULT_SEP;
	if (argc < 2)
		scanf("%f", &value);
	else
		value = atof(argv[1]);
	if (value > 100)
		errx(1, "value should remain between 0 and 100");
	write(fileno(stdout), begin, strnlen(begin, 32));
	for (i=0; i<size; i++) {
		current = (i < value / 100 * size) ? &char1 : (current == &char1 ? &sep : &char2);
		write(fileno(stdout), *current, strnlen(*current, 32));
	}
	write(fileno(stdout), end, strnlen(end, 32));
	putc('\n', stdout);
	return 0;
}
 |