1 #include <math.h>
2 #include <stdint.h>
3 #include <stdio.h>
4 #include <unistd.h>
5
6 int16_t buf_16;
7 int8_t buf_8;
8
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])9 int print_raw_out(int bars_count, int fd, int is_binary, int bit_format, int ascii_range,
10 char bar_delim, char frame_delim, int const f[200]) {
11 if (is_binary) {
12 for (int i = 0; i < bars_count; i++) {
13 int f_limited = f[i];
14 if (f_limited > (pow(2, bit_format) - 1))
15 f_limited = pow(2, bit_format) - 1;
16
17 switch (bit_format) {
18 case 16:
19 buf_16 = f_limited;
20 write(fd, &buf_16, sizeof(int16_t));
21 break;
22 case 8:
23 buf_8 = f_limited;
24 write(fd, &buf_8, sizeof(int8_t));
25 break;
26 }
27 }
28 } else { // ascii
29 for (int i = 0; i < bars_count; i++) {
30 int f_ranged = f[i];
31 if (f_ranged > ascii_range)
32 f_ranged = ascii_range;
33
34 // finding size of number-string in byte
35 int bar_height_size = 2; // a number + \0
36 if (f_ranged != 0)
37 bar_height_size += floor(log10(f_ranged));
38
39 char bar_height[bar_height_size];
40 snprintf(bar_height, bar_height_size, "%d", f_ranged);
41
42 write(fd, bar_height, bar_height_size - 1);
43 write(fd, &bar_delim, sizeof(bar_delim));
44 }
45 write(fd, &frame_delim, sizeof(frame_delim));
46 }
47 return 0;
48 }
49