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