Fix printing to not go over the line limit
diff --git a/include/num.h b/include/num.h
index e5fd14e..5be0893 100644
--- a/include/num.h
+++ b/include/num.h
@@ -78,6 +78,8 @@
#define BC_NUM_SCALE(n) ((n)->len - (n)->radix)
+#define BC_NUM_PRINT_WIDTH (68)
+
typedef struct BcNum {
char* num;
diff --git a/src/bc/num.c b/src/bc/num.c
index fae246e..0ec345e 100644
--- a/src/bc/num.c
+++ b/src/bc/num.c
@@ -873,25 +873,59 @@
static BcStatus bc_num_printDecimal(BcNum* n, FILE* f) {
size_t i;
+ size_t chars;
+
+ chars = 0;
if (n->len) {
- if (n->neg) fputc('-', f);
+ if (n->neg) {
+ fputc('-', f);
+ ++chars;
+ }
- for (i = 0; i < n->radix; ++i) fputc(BC_NUM_TO_CHAR(n->num[i]), f);
+ for (i = 0; i < n->radix; ++i) {
+
+ fputc(BC_NUM_TO_CHAR(n->num[i]), f);
+ ++chars;
+
+ if (chars == BC_NUM_PRINT_WIDTH) {
+ fputc('\\', f);
+ fputc('\n', f);
+ chars = 0;
+ }
+ }
if (i < n->len) {
fputc('.', f);
+ ++chars;
- for (; i < n->len; ++i) fputc(BC_NUM_TO_CHAR(n->num[i]), f);
+ if (chars == BC_NUM_PRINT_WIDTH) {
+ fputc('\\', f);
+ fputc('\n', f);
+ chars = 0;
+ }
+
+ for (; i < n->len; ++i) {
+
+ fputc(BC_NUM_TO_CHAR(n->num[i]), f);
+ ++chars;
+
+ if (chars == BC_NUM_PRINT_WIDTH) {
+ fputc('\\', f);
+ fputc('\n', f);
+ chars = 0;
+ }
+ }
}
}
else {
fputc('0', f);
+ ++chars;
}
- fputc('\n', f);
+ if (chars) fputc('\n', f);
return BC_STATUS_SUCCESS;
}