35 lines · c
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 89 10/* Print spark lines on outf for numval values in val. */11int 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