summaryrefslogtreecommitdiff
path: root/output/raw.c
diff options
context:
space:
mode:
Diffstat (limited to 'output/raw.c')
-rw-r--r--output/raw.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/output/raw.c b/output/raw.c
new file mode 100644
index 0000000..eaef8ee
--- /dev/null
+++ b/output/raw.c
@@ -0,0 +1,48 @@
+#include <math.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <unistd.h>
+
+int16_t buf_16;
+int8_t buf_8;
+
+int print_raw_out(int bars_count, int fd, int is_binary, int bit_format, int ascii_range,
+ char bar_delim, char frame_delim, int const f[200]) {
+ if (is_binary) {
+ for (int i = 0; i < bars_count; i++) {
+ int f_limited = f[i];
+ if (f_limited > (pow(2, bit_format) - 1))
+ f_limited = pow(2, bit_format) - 1;
+
+ switch (bit_format) {
+ case 16:
+ buf_16 = f_limited;
+ write(fd, &buf_16, sizeof(int16_t));
+ break;
+ case 8:
+ buf_8 = f_limited;
+ write(fd, &buf_8, sizeof(int8_t));
+ break;
+ }
+ }
+ } else { // ascii
+ for (int i = 0; i < bars_count; i++) {
+ int f_ranged = f[i];
+ if (f_ranged > ascii_range)
+ f_ranged = ascii_range;
+
+ // finding size of number-string in byte
+ int bar_height_size = 2; // a number + \0
+ if (f_ranged != 0)
+ bar_height_size += floor(log10(f_ranged));
+
+ char bar_height[bar_height_size];
+ snprintf(bar_height, bar_height_size, "%d", f_ranged);
+
+ write(fd, bar_height, bar_height_size - 1);
+ write(fd, &bar_delim, sizeof(bar_delim));
+ }
+ write(fd, &frame_delim, sizeof(frame_delim));
+ }
+ return 0;
+}