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