spark.c 790 B

12345678910111213141516171819202122232425262728293031323334
  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. #define SPARK_SHIFT 8
  8. /* Print spark lines on outf for numval values in val. */
  9. int print_spark(char *bf, int size, unsigned long *val, int numval)
  10. {
  11. static const char *ticks[NUM_SPARKS] = {
  12. "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"
  13. };
  14. int i, printed = 0;
  15. unsigned long min = ULONG_MAX, max = 0, f;
  16. for (i = 0; i < numval; i++) {
  17. if (val[i] < min)
  18. min = val[i];
  19. if (val[i] > max)
  20. max = val[i];
  21. }
  22. f = ((max - min) << SPARK_SHIFT) / (NUM_SPARKS - 1);
  23. if (f < 1)
  24. f = 1;
  25. for (i = 0; i < numval; i++) {
  26. printed += scnprintf(bf + printed, size - printed, "%s",
  27. ticks[((val[i] - min) << SPARK_SHIFT) / f]);
  28. }
  29. return printed;
  30. }