#include "dk4conf.h" #include #include "dk4error.h" #include "dk4maami.h" $!trace-include static void show_error(dk4_er_t *erp) { if (DK4_E_NONE != erp->ec) { switch(erp->ec) { case DK4_E_MATH_OVERFLOW: { printf(" overflow"); } break; case DK4_E_MATH_DIVZERO: { printf(" divzero"); } break; default: { printf(" %d", erp->ec); } break; } } } int main(void) { char buffer[128]; /* Input line buffer */ dk4_er_t er; /* Error report */ intmax_t i1; /* First operand */ intmax_t i2; /* Second operand */ int exc; /* Exit code */ int cc; /* Flag: Can continue */ intmax_t c1; /* First operand as char */ intmax_t c2; /* Second operand as char */ intmax_t c3; /* Result as char */ $!trace-init test-dk4maac.deb $? "+ main" exc = 0; cc = 1; while((1 == cc) && (fgets(buffer, sizeof(buffer), stdin))) { if (sscanf(buffer, "%jd %jd", &i1, &i2) == 2) { c1 = i1; c2 = i2; printf("%jd %jd\n", c1, c2); dk4error_init(&er); c3 = dk4ma_intmax_t_add(c1, c2, &er); printf("\t+ %jd", c3); show_error(&er); printf("\n"); dk4error_init(&er); c3 = dk4ma_intmax_t_sub(c1, c2, &er); printf("\t- %jd", c3); show_error(&er); printf("\n"); dk4error_init(&er); c3 = dk4ma_intmax_t_mul(c1, c2, &er); printf("\t* %jd", c3); show_error(&er); printf("\n"); dk4error_init(&er); c3 = dk4ma_intmax_t_div(c1, c2, &er); printf("\t/ %jd", c3); show_error(&er); printf("\n"); } else { exc = 1; fprintf(stderr, "test-dk4maac:ERROR: Invalid input line!\n"); fflush(stderr); cc = 0; } } $? "- main" $!trace-end return exc; }