#include #include #include #include #include #include int parse_double(const char *str, double *res) { char *ptr; *res = strtod(str, &ptr); if (*ptr) return 0; return 1; } void print(double diff, char *str, double min) { double val = 0; if (!parse_double(str, &val)) return; putchar('\xe2'); putchar('\x96'); putchar('\x81' + (int)round((val - min + 1) / diff * 7)); } int main(int argc, char **argv) { if (argc == 1) { fprintf(stderr, "spark: missing operands\n"); return 1; } unsigned int r_flag = 0; char ret = '\n'; double min = DBL_MAX; double max = DBL_MIN; /* Remove programm name */ argv++; argc--; for (int i = 0; i < argc; i++) { double val = 0; if (strstr(argv[i], "r")) r_flag = 1; else if (strstr(argv[i], "n")) ret = '\r'; else if (parse_double(argv[i], &val)) { if (val > max) max = val; if (val < min) min = val; } else { printf("spark [num1 num2...]\n\t[-n Use \\r] [-r Reverse]\n"); return 0; } } double diff = max - min + 1; if (diff < 1) diff = 1; if (r_flag) for (int i = argc - 1; i >= 0; i--) print(diff, argv[i], min); else for (int i = 0; i < argc; i++) print(diff, argv[i], min); putchar(ret); return 0; }