Commit | Line | Data |
---|---|---|
cebf7d51 JY |
1 | #include <stdio.h> |
2 | #include <limits.h> | |
3 | #include <string.h> | |
4 | #include <stdlib.h> | |
5 | #include "spark.h" | |
6 | #include "stat.h" | |
7 | ||
8 | #define SPARK_SHIFT 8 | |
9 | ||
10 | /* Print spark lines on outf for numval values in val. */ | |
11 | int print_spark(char *bf, int size, unsigned long *val, int numval) | |
12 | { | |
13 | static const char *ticks[NUM_SPARKS] = { | |
14 | "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" | |
15 | }; | |
16 | int i, printed = 0; | |
17 | unsigned long min = ULONG_MAX, max = 0, f; | |
18 | ||
19 | for (i = 0; i < numval; i++) { | |
20 | if (val[i] < min) | |
21 | min = val[i]; | |
22 | if (val[i] > max) | |
23 | max = val[i]; | |
24 | } | |
25 | f = ((max - min) << SPARK_SHIFT) / (NUM_SPARKS - 1); | |
26 | if (f < 1) | |
27 | f = 1; | |
28 | for (i = 0; i < numval; i++) { | |
29 | printed += scnprintf(bf + printed, size - printed, "%s", | |
30 | ticks[((val[i] - min) << SPARK_SHIFT) / f]); | |
31 | } | |
32 | ||
33 | return printed; | |
34 | } |