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