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