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(buf: bf + printed, size: size - printed, fmt: "%s" , |
30 | ticks[((val[i] - min) << SPARK_SHIFT) / f]); |
31 | } |
32 | |
33 | return printed; |
34 | } |
35 | |