fix bracket evaluation
[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 int memory (int nb)
20 {
21 if ((nb != -1) && (nb != size_tab (storage))) {
22 storage = resize_tab (storage, nb);
23 }
24 if (nb == -1) {
25 memory (DEFAULT_STORAGE_SIZE);
26 }
27 return size_tab (storage);
28 }
29
30 double store (int id, double value)
31 {
32 if (storage == NULL) {
33 memory (DEFAULT_STORAGE_SIZE);
34 }
35 return set_tab (storage, id, value);
36 }
37
38 double recall (int id)
39 {
40 if (storage == NULL) {
41 memory (DEFAULT_STORAGE_SIZE);
42 }
43 return get_tab (storage, id);
44 }
45
46 double increase (int id)
47 {
48 if (storage == NULL) {
49 memory (DEFAULT_STORAGE_SIZE);
50 }
51 double val = get_tab (storage, id);
52 if (!isnan (val)) {
53 set_tab (storage, id, ++val);
54 }
55 return val;
56 }
57
58 double decrease (int id)
59 {
60 if (storage == NULL) {
61 memory (DEFAULT_STORAGE_SIZE);
62 }
63 double val = get_tab (storage, id);
64 if (!isnan (val)) {
65 set_tab (storage, id, --val);
66 }
67 return val;
68 }
69
70 void display (void)
71 {
72 if (storage == NULL) {
73 memory (DEFAULT_STORAGE_SIZE);
74 }
75 int i, n = size_tab (storage);
76 printf ("storage:");
77 for (i = 0; i < n; i++) {
78 printf (" ");
79 printl (get_tab (storage, i + 1));
80 }
81 printf ("\n");
82 }
83
84 void clear ()
85 {
86 if (storage == NULL) {
87 memory (DEFAULT_STORAGE_SIZE);
88 }
89 int i, n = size_tab (storage);
90 for (i = 0; i < n; i++) {
91 set_tab (storage, i, 0);
92 }
93 }
94
95 /* vim: set ts=4 sw=4 et: */