18c2ecf20Sopenharmony_ci#include <stdio.h> 28c2ecf20Sopenharmony_ci#include <limits.h> 38c2ecf20Sopenharmony_ci#include <string.h> 48c2ecf20Sopenharmony_ci#include <stdlib.h> 58c2ecf20Sopenharmony_ci#include "spark.h" 68c2ecf20Sopenharmony_ci#include "stat.h" 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#define SPARK_SHIFT 8 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci/* Print spark lines on outf for numval values in val. */ 118c2ecf20Sopenharmony_ciint print_spark(char *bf, int size, unsigned long *val, int numval) 128c2ecf20Sopenharmony_ci{ 138c2ecf20Sopenharmony_ci static const char *ticks[NUM_SPARKS] = { 148c2ecf20Sopenharmony_ci "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" 158c2ecf20Sopenharmony_ci }; 168c2ecf20Sopenharmony_ci int i, printed = 0; 178c2ecf20Sopenharmony_ci unsigned long min = ULONG_MAX, max = 0, f; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci for (i = 0; i < numval; i++) { 208c2ecf20Sopenharmony_ci if (val[i] < min) 218c2ecf20Sopenharmony_ci min = val[i]; 228c2ecf20Sopenharmony_ci if (val[i] > max) 238c2ecf20Sopenharmony_ci max = val[i]; 248c2ecf20Sopenharmony_ci } 258c2ecf20Sopenharmony_ci f = ((max - min) << SPARK_SHIFT) / (NUM_SPARKS - 1); 268c2ecf20Sopenharmony_ci if (f < 1) 278c2ecf20Sopenharmony_ci f = 1; 288c2ecf20Sopenharmony_ci for (i = 0; i < numval; i++) { 298c2ecf20Sopenharmony_ci printed += scnprintf(bf + printed, size - printed, "%s", 308c2ecf20Sopenharmony_ci ticks[((val[i] - min) << SPARK_SHIFT) / f]); 318c2ecf20Sopenharmony_ci } 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci return printed; 348c2ecf20Sopenharmony_ci} 35