162306a36Sopenharmony_ci#include <stdio.h> 262306a36Sopenharmony_ci#include <limits.h> 362306a36Sopenharmony_ci#include <string.h> 462306a36Sopenharmony_ci#include <stdlib.h> 562306a36Sopenharmony_ci#include "spark.h" 662306a36Sopenharmony_ci#include "stat.h" 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#define SPARK_SHIFT 8 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci/* Print spark lines on outf for numval values in val. */ 1162306a36Sopenharmony_ciint print_spark(char *bf, int size, unsigned long *val, int numval) 1262306a36Sopenharmony_ci{ 1362306a36Sopenharmony_ci static const char *ticks[NUM_SPARKS] = { 1462306a36Sopenharmony_ci "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" 1562306a36Sopenharmony_ci }; 1662306a36Sopenharmony_ci int i, printed = 0; 1762306a36Sopenharmony_ci unsigned long min = ULONG_MAX, max = 0, f; 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci for (i = 0; i < numval; i++) { 2062306a36Sopenharmony_ci if (val[i] < min) 2162306a36Sopenharmony_ci min = val[i]; 2262306a36Sopenharmony_ci if (val[i] > max) 2362306a36Sopenharmony_ci max = val[i]; 2462306a36Sopenharmony_ci } 2562306a36Sopenharmony_ci f = ((max - min) << SPARK_SHIFT) / (NUM_SPARKS - 1); 2662306a36Sopenharmony_ci if (f < 1) 2762306a36Sopenharmony_ci f = 1; 2862306a36Sopenharmony_ci for (i = 0; i < numval; i++) { 2962306a36Sopenharmony_ci printed += scnprintf(bf + printed, size - printed, "%s", 3062306a36Sopenharmony_ci ticks[((val[i] - min) << SPARK_SHIFT) / f]); 3162306a36Sopenharmony_ci } 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci return printed; 3462306a36Sopenharmony_ci} 35