#include "dk4conf.h" #include #include "dk4error.h" #include "dk4maalu.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 */ unsigned long long i1; /* First operand */ unsigned long long i2; /* Second operand */ int exc; /* Exit code */ int cc; /* Flag: Can continue */ unsigned long long c1; /* First operand as char */ unsigned long long c2; /* Second operand as char */ unsigned long long 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, "%llu %llu", &i1, &i2) == 2) { c1 = i1; c2 = i2; printf("%llu %llu\n", c1, c2); dk4error_init(&er); c3 = dk4ma_ull_add(c1, c2, &er); printf("\t+ %llu", c3); show_error(&er); printf("\n"); dk4error_init(&er); c3 = dk4ma_ull_sub(c1, c2, &er); printf("\t- %llu", c3); show_error(&er); printf("\n"); dk4error_init(&er); c3 = dk4ma_ull_mul(c1, c2, &er); printf("\t* %llu", c3); show_error(&er); printf("\n"); dk4error_init(&er); c3 = dk4ma_ull_div(c1, c2, &er); printf("\t/ %llu", 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; }