fix bracket evaluation
[calc.git] / storage.c
... / ...
CommitLineData
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
15tab_t *storage = NULL;
16
17/* storage functions */
18
19int 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
30double 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
38double recall (int id)
39{
40 if (storage == NULL) {
41 memory (DEFAULT_STORAGE_SIZE);
42 }
43 return get_tab (storage, id);
44}
45
46double 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
58double 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
70void 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
84void 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: */