Repository navigation
Expand file tree
/
Copy pathmain.c
More file actions
67 lines (53 loc) · 1.45 KB
/
Copy pathmain.c
File metadata and controls
67 lines (53 loc) · 1.45 KB
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
#include <glib-object.h>
#include "tdouble.h"
static void
div_by_zero_cb (TDouble *self, gpointer user_data) {
g_printerr ("\nError: division by zero.\n\n");
}
static void
t_print (char *op, TDouble *d1, TDouble *d2, TDouble *d3) {
double v1, v2, v3;
if (! t_double_get_value (d1, &v1))
return;
if (! t_double_get_value (d2, &v2))
return;
if (! t_double_get_value (d3, &v3))
return;
g_print ("%lf %s %lf = %lf\n", v1, op, v2, v3);
}
int
main (int argc, char **argv) {
TDouble *d1, *d2, *d3;
double v1, v3;
d1 = t_double_new (10.0);
d2 = t_double_new (20.0);
if ((d3 = t_double_add (d1, d2)) != NULL) {
t_print ("+", d1, d2, d3);
g_object_unref (d3);
}
if ((d3 = t_double_sub (d1, d2)) != NULL) {
t_print ("-", d1, d2, d3);
g_object_unref (d3);
}
if ((d3 = t_double_mul (d1, d2)) != NULL) {
t_print ("*", d1, d2, d3);
g_object_unref (d3);
}
if ((d3 = t_double_div (d1, d2)) != NULL) {
t_print ("/", d1, d2, d3);
g_object_unref (d3);
}
g_signal_connect (d1, "div-by-zero", G_CALLBACK (div_by_zero_cb), NULL);
t_double_set_value (d2, 0.0);
if ((d3 = t_double_div (d1, d2)) != NULL) {
t_print ("/", d1, d2, d3);
g_object_unref (d3);
}
if ((d3 = t_double_uminus (d1)) != NULL && (t_double_get_value (d1, &v1)) && (t_double_get_value (d3, &v3))) {
g_print ("-%lf = %lf\n", v1, v3);
g_object_unref (d3);
}
g_object_unref (d1);
g_object_unref (d2);
return 0;
}