raw: refactoring

master
Chelovechishko 9 years ago
parent 2d4ba0b8f7
commit 67a67fd794
  1. 90
      output/raw.c
  2. 3
      output/raw.h

@ -1,60 +1,48 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define TEN_THSND 10000
#define BIT_16 16
#define BIT_8 8
#define NORMALIZE_AND_WRITE(type) _NORMALIZE_AND_WRITE(type)
#define _NORMALIZE_AND_WRITE(type) \
for (int i = 0; i < bars_count; i++) { \
uint##type##_t f_##type = UINT##type##_MAX; \
if (f[i] < TEN_THSND) \
f_##type *= f[i] / TEN_THSND; \
write(fd, &f_##type, sizeof(uint##type##_t)); \
}
int print_raw_out(int bars, int fp, int is_bin, int bit_format, int ascii_range, char bar_delim, char frame_delim, int f[200]) {
int i;
if (is_bin == 1){//binary
if (bit_format == 16 ){//16bit:
for (i = 0; i < bars; i++) {
uint16_t f16;
if (f[i] > 10000) {
f16 = 65535;
}
else {
f16 = ((float)f[i] / 10000) * 65535;
}
write(fp, &f16,sizeof(uint16_t));
}
} else {//8bit:
for (i = 0; i < bars; i++) {
uint8_t f8;
if (f[i] > 10000) {
f8 = 255;
}
else {
f8 = ((float)f[i] / 10000) * 255;
}
write(fp, &f8,sizeof(uint8_t));
}
int print_raw_out(int bars_count, int fd, int is_binary, int bit_format,
int ascii_range, char bar_delim, char frame_delim, const int const f[200]) {
if (is_binary) {
switch (bit_format) {
case BIT_16:
NORMALIZE_AND_WRITE(BIT_16);
break;
case BIT_8:
NORMALIZE_AND_WRITE(BIT_8);
break;
}
} else {//ascii:
for (i = 0; i < bars; i++) {
int f_ranged = ((float)f[i] / 10000) * ascii_range;
if (f_ranged > ascii_range) f_ranged = ascii_range;
//finding size of number-string in byte
int size;
if (f_ranged != 0) size = floor (log10 (abs (f_ranged))) + 1;
else size = 1;
char barheight[size];
sprintf(barheight, "%d", f_ranged);
write(fp, barheight,sizeof(barheight));
write(fp, &bar_delim, sizeof(bar_delim));
} else { // ascii
for (int i = 0; i < bars_count; i++) {
int f_ranged = (f[i] / 10000.0) * ascii_range;
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(fp, &frame_delim, sizeof(frame_delim));
write(fd, &frame_delim, sizeof(frame_delim));
}
return 0;
}

@ -1 +1,2 @@
int print_raw_out(int bars, int fp, int is_bin, int bin_datafrom, int ascii_range, char bar_delim, char frame_delim, int f[200]);
int print_raw_out(int bars_count, int fd, int is_binary, int bit_format,
int ascii_range, char bar_delim, char frame_delim, const int const f[200]);

Loading…
Cancel
Save