check parenthesis
[calc.git] / storage.c
1 #include <malloc.h>
2 #include <math.h>
3 #include <stdio.h>
4
5 #include "alloc.h"
6 #include "debug.h"
7 #include "format.h"
8 #include "tabular.h"
9
10 #include "storage.h"
11
12 /* global variables */
13
14 #define DEFAULT_STORAGE_SIZE 10
15 tab_t *storage = NULL;
16
17 /* storage functions */
18
19 void memory (int nb)
20 {
21 if (nb != size_tab (storage)) {
22 storage = resize_tab (storage, nb);
23 }
24 }
25
26 double store (int id, double value)
27 {
28 if (storage == NULL) {
29 memory (DEFAULT_STORAGE_SIZE);
30 }
31 return set_tab (storage, id, value);
32 }
33
34 double recall (int id)
35 {
36 if (storage == NULL) {
37 memory (DEFAULT_STORAGE_SIZE);
38 }
39 return get_tab (storage, id);
40 }
41
42 double increase (int id)
43 {
44 if (storage == NULL) {
45 memory (DEFAULT_STORAGE_SIZE);
46 }
47 double val = get_tab (storage, id);
48 if (!isnan (val)) {
49 set_tab (storage, id, ++val);
50 }
51 return val;
52 }
53
54 double decrease (int id)
55 {
56 if (storage == NULL) {
57 memory (DEFAULT_STORAGE_SIZE);
58 }
59 double val = get_tab (storage, id);
60 if (!isnan (val)) {
61 set_tab (storage, id, --val);
62 }
63 return val;
64 }
65
66 void display (void)
67 {
68 if (storage == NULL) {
69 memory (DEFAULT_STORAGE_SIZE);
70 }
71 int i, n = size_tab (storage);
72 fprintf (stdout, "storage:");
73 for (i = 0; i < n; i++) {
74 fprintf (stdout, " ");
75 fprintf (stdout, minform, get_tab (storage, i + 1));
76 }
77 fprintf (stdout, "\n");
78 }
79
80 void clear ()
81 {
82 if (storage == NULL) {
83 memory (DEFAULT_STORAGE_SIZE);
84 }
85 int i, n = size_tab (storage);
86 for (i = 0; i < n; i++) {
87 set_tab (storage, i, 0);
88 }
89 }
90
91 /* vim: set ts=4 sw=4 et: */