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 } 35