1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#include "dk4conf.h"
#include <stdio.h>
#include "dk4error.h"
#include "dk4maamu.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 */
uintmax_t i1; /* First operand */
uintmax_t i2; /* Second operand */
int exc; /* Exit code */
int cc; /* Flag: Can continue */
uintmax_t c1; /* First operand as char */
uintmax_t c2; /* Second operand as char */
uintmax_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, "%ju %ju", &i1, &i2) == 2) {
c1 = i1;
c2 = i2;
printf("%ju %ju\n", c1, c2);
dk4error_init(&er);
c3 = dk4ma_uintmax_t_add(c1, c2, &er);
printf("\t+ %ju", c3);
show_error(&er);
printf("\n");
dk4error_init(&er);
c3 = dk4ma_uintmax_t_sub(c1, c2, &er);
printf("\t- %ju", c3);
show_error(&er);
printf("\n");
dk4error_init(&er);
c3 = dk4ma_uintmax_t_mul(c1, c2, &er);
printf("\t* %ju", c3);
show_error(&er);
printf("\n");
dk4error_init(&er);
c3 = dk4ma_uintmax_t_div(c1, c2, &er);
printf("\t/ %ju", 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;
}
|