0001 #include <stdio.h>
0002 #include <limits.h>
0003 #include <string.h>
0004 #include <stdlib.h>
0005 #include "spark.h"
0006 #include "stat.h"
0007
0008 #define SPARK_SHIFT 8
0009
0010
0011 int print_spark(char *bf, int size, unsigned long *val, int numval)
0012 {
0013 static const char *ticks[NUM_SPARKS] = {
0014 "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"
0015 };
0016 int i, printed = 0;
0017 unsigned long min = ULONG_MAX, max = 0, f;
0018
0019 for (i = 0; i < numval; i++) {
0020 if (val[i] < min)
0021 min = val[i];
0022 if (val[i] > max)
0023 max = val[i];
0024 }
0025 f = ((max - min) << SPARK_SHIFT) / (NUM_SPARKS - 1);
0026 if (f < 1)
0027 f = 1;
0028 for (i = 0; i < numval; i++) {
0029 printed += scnprintf(bf + printed, size - printed, "%s",
0030 ticks[((val[i] - min) << SPARK_SHIFT) / f]);
0031 }
0032
0033 return printed;
0034 }