| // SPDX-License-Identifier: GPL-2.0 | |
| #include "spark.h" | |
| #include <limits.h> | |
| #include <linux/kernel.h> | |
| #define SPARK_SHIFT 8 | |
| /* Print spark lines on outf for numval values in val. */ | |
| int print_spark(char *bf, int size, unsigned long *val, int numval) | |
| { | |
| static const char *ticks[NUM_SPARKS] = { | |
| "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" | |
| }; | |
| int i, printed = 0; | |
| unsigned long min = ULONG_MAX, max = 0, f; | |
| for (i = 0; i < numval; i++) { | |
| if (val[i] < min) | |
| min = val[i]; | |
| if (val[i] > max) | |
| max = val[i]; | |
| } | |
| f = ((max - min) << SPARK_SHIFT) / (NUM_SPARKS - 1); | |
| if (f < 1) | |
| f = 1; | |
| for (i = 0; i < numval; i++) { | |
| printed += scnprintf(bf + printed, size - printed, "%s", | |
| ticks[((val[i] - min) << SPARK_SHIFT) / f]); | |
| } | |
| return printed; | |
| } |