[gcalctool] Support arbitrary variable names, e.g. set with "name=55"
- From: Robert Ancell <rancell src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gcalctool] Support arbitrary variable names, e.g. set with "name=55"
- Date: Wed, 28 Oct 2009 03:45:16 +0000 (UTC)
commit ac35b39525452b0a3e01520415ec324faa77ad2a
Author: Robert Ancell <robert ancell gmail com>
Date: Wed Oct 28 13:06:01 2009 +1100
Support arbitrary variable names, e.g. set with "name=55"
Fix scientific display for numbers with exponent 0
Fix missing translator comments
ChangeLog | 4 +
data/gcalctool.ui | 90 +++--------------------
src/calctool.h | 3 -
src/display.c | 57 +++++-----------
src/gtk.c | 32 ++++-----
src/register.c | 203 ++++++++++++++++++++---------------------------------
src/register.h | 10 +--
7 files changed, 125 insertions(+), 274 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 0d8218b..9d1ba7e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,10 @@
gcalctool change history.
=========================
+2009-10-28 Robert Ancell <robert ancell gmail com>
+
+ * Support arbitrary varible names, e.g. set with "name=55"
+
2009-10-27 Robert Ancell <robert ancell gmail com>
* Support conversions in display (e.g. "1 AUD in USD" or "6.2 inches in meters")
diff --git a/data/gcalctool.ui b/data/gcalctool.ui
index 7580791..22acfef 100644
--- a/data/gcalctool.ui
+++ b/data/gcalctool.ui
@@ -30,7 +30,6 @@
<object class="GtkImageMenuItem" id="copy_menu">
<property name="label">gtk-copy</property>
<property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Copy selection</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="accel_group">accelgroup1</property>
@@ -41,7 +40,6 @@
<object class="GtkImageMenuItem" id="paste_menu">
<property name="label">gtk-paste</property>
<property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Paste selection</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="accel_group">accelgroup1</property>
@@ -71,7 +69,6 @@
<object class="GtkImageMenuItem" id="quit_menu">
<property name="label">gtk-quit</property>
<property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Quit the calculator</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="accel_group">accelgroup1</property>
@@ -92,7 +89,6 @@
<child>
<object class="GtkRadioMenuItem" id="view_basic_menu">
<property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Basic</property>
<property name="label" translatable="yes" comments="View|Basic menu item">_Basic</property>
<property name="use_underline">True</property>
<property name="active">True</property>
@@ -102,7 +98,6 @@
<child>
<object class="GtkRadioMenuItem" id="view_advanced_menu">
<property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Advanced</property>
<property name="label" translatable="yes" comments="View|Advanced menu item">_Advanced</property>
<property name="use_underline">True</property>
<property name="group">view_basic_menu</property>
@@ -112,7 +107,6 @@
<child>
<object class="GtkRadioMenuItem" id="view_financial_menu">
<property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Financial</property>
<property name="label" translatable="yes" comments="View|Financial menu item">_Financial</property>
<property name="use_underline">True</property>
<property name="group">view_basic_menu</property>
@@ -122,7 +116,6 @@
<child>
<object class="GtkRadioMenuItem" id="view_scientific_menu">
<property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Scientific</property>
<property name="label" translatable="yes" comments="View|Scientific menu item">_Scientific</property>
<property name="use_underline">True</property>
<property name="group">view_basic_menu</property>
@@ -132,7 +125,6 @@
<child>
<object class="GtkRadioMenuItem" id="view_programming_menu">
<property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Programming</property>
<property name="label" translatable="yes" comments="View|Programming menu item">_Programming</property>
<property name="use_underline">True</property>
<property name="group">view_basic_menu</property>
@@ -154,7 +146,6 @@
<object class="GtkImageMenuItem" id="help_menu">
<property name="label" comments="Help|Contents menu">_Contents</property>
<property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Show help contents</property>
<property name="use_underline">True</property>
<property name="image">image1</property>
<property name="use_stock">False</property>
@@ -167,7 +158,6 @@
<object class="GtkImageMenuItem" id="about_menu">
<property name="label">gtk-about</property>
<property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Show the About Gcalctool dialog</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="accel_group">accelgroup1</property>
@@ -901,7 +891,7 @@
<object class="GtkLabel" id="bit_marker_label5">
<property name="visible">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">0</property>
+ <property name="label">0</property>
<property name="justify">center</property>
</object>
<packing>
@@ -3996,7 +3986,7 @@
</child>
<child>
<object class="GtkButton" id="calc_currency_button">
- <property name="label" translatable="yes">¤$€</property>
+ <property name="label" translatable="yes" comments="The label on the currency button">¤$€</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@@ -4331,27 +4321,27 @@
</columns>
<data>
<row>
- <col id="0" translatable="yes">Decimal</col>
+ <col id="0" translatable="yes" comments="Number display mode combo: Decimal, e.g. 1234">Decimal</col>
<col id="1">decimal</col>
</row>
<row>
- <col id="0" translatable="yes">Scientific</col>
+ <col id="0" translatable="yes" comments="Number display mode combo: Scientific, e.g. 1.234Ã?10^3">Scientific</col>
<col id="1">scientific</col>
</row>
<row>
- <col id="0" translatable="yes">Engineering</col>
+ <col id="0" translatable="yes" comments="Number display mode combo: Engineering, e.g. 1.234k">Engineering</col>
<col id="1">engineering</col>
</row>
<row>
- <col id="0" translatable="yes">Binary</col>
+ <col id="0" translatable="yes" comments="Number display mode combo: Binary, e.g. 10011010010â??">Binary</col>
<col id="1">binary</col>
</row>
<row>
- <col id="0" translatable="yes">Octal</col>
+ <col id="0" translatable="yes" comments="Number display mode combo: Octal, e.g. 2322â??">Octal</col>
<col id="1">octal</col>
</row>
<row>
- <col id="0" translatable="yes">Hexadecimal</col>
+ <col id="0" translatable="yes" comments="Number display mode combo: Hexadecimal, e.g. 4D2â??â??">Hexadecimal</col>
<col id="1">hexadecimal</col>
</row>
</data>
@@ -4365,19 +4355,19 @@
</columns>
<data>
<row>
- <col id="0" translatable="yes">8-bit</col>
+ <col id="0" translatable="yes" comments="Word size combo: 8 bits">8-bit</col>
<col id="1">8</col>
</row>
<row>
- <col id="0" translatable="yes">16-bit</col>
+ <col id="0" translatable="yes" comments="Word size combo: 16 bits">16-bit</col>
<col id="1">16</col>
</row>
<row>
- <col id="0" translatable="yes">32-bit</col>
+ <col id="0" translatable="yes" comments="Word size combo: 32 bits">32-bit</col>
<col id="1">32</col>
</row>
<row>
- <col id="0" translatable="yes">64-bit</col>
+ <col id="0" translatable="yes" comments="Word size combo: 64 bits">64-bit</col>
<col id="1">64</col>
</row>
</data>
@@ -4425,34 +4415,6 @@
<signal name="activate" handler="store_menu_cb"/>
</object>
</child>
- <child>
- <object class="GtkMenuItem" id="store_menu_item6">
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="store_menu_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="store_menu_item7">
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="store_menu_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="store_menu_item8">
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="store_menu_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="store_menu_item9">
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="store_menu_cb"/>
- </object>
- </child>
</object>
<object class="GtkMenu" id="memory_recall_popup">
<child>
@@ -4497,34 +4459,6 @@
<signal name="activate" handler="recall_menu_cb"/>
</object>
</child>
- <child>
- <object class="GtkMenuItem" id="recall_menu_item6">
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="recall_menu_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="recall_menu_item7">
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="recall_menu_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="recall_menu_item8">
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="recall_menu_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="recall_menu_item9">
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="recall_menu_cb"/>
- </object>
- </child>
</object>
<object class="GtkDialog" id="ascii_dialog">
<property name="border_width">6</property>
diff --git a/src/calctool.h b/src/calctool.h
index aa35ef9..f945057 100644
--- a/src/calctool.h
+++ b/src/calctool.h
@@ -37,9 +37,6 @@
#define MAXLINE 512 /* Length of character strings. */
#endif
-#define MAX_FUNCTIONS 10
-#define MAX_REGISTERS 10 /* Maximum number of memory registers. */
-
#ifndef RCNAME
#define RCNAME ".gcalctoolrc"
#endif
diff --git a/src/display.c b/src/display.c
index 08f9240..07ebf63 100644
--- a/src/display.c
+++ b/src/display.c
@@ -615,10 +615,9 @@ void display_set_angle_unit(GCDisplay *display, MPAngleUnit angle_unit)
static void
make_eng_sci(GCDisplay *display, char *target, int target_len, const MPNumber *x, int base_)
{
- static char digits[] = "0123456789ABCDEF";
char fixed[MAX_DIGITS];
MPNumber t, z, base, base3, base10, base10inv, mantissa;
- int ddig, eng, exponent = 0;
+ int eng, exponent = 0;
GString *string;
string = g_string_sized_new(target_len);
@@ -662,30 +661,7 @@ make_eng_sci(GCDisplay *display, char *target, int target_len, const MPNumber *x
mp_cast_to_string(&mantissa, base_, display->accuracy, !display->show_zeroes, fixed, MAX_DIGITS);
g_string_append(string, fixed);
- g_string_append(string, "Ã?10^");
-
- if (exponent < 0) {
- exponent = -exponent;
- g_string_append(string, "â??");
- } else {
- g_string_append(string, "+");
- }
-
- mp_set_from_string("0.5", &t);
- mp_add_integer(&t, exponent, &z);
- mp_set_from_integer(1, &t);
- for (ddig = 0; mp_is_greater_equal(&z, &t); ddig++) {
- mp_divide(&z, &base, &z);
- }
-
- while (ddig-- > 0) {
- int dval;
-
- mp_multiply(&z, &base, &z);
- dval = mp_cast_to_int(&z);
- g_string_append_c(string, digits[dval]);
- mp_add_integer(&z, -dval, &z);
- }
+ g_string_append_printf(string, "Ã?10^%d", exponent);
strncpy(target, string->str, target_len);
g_string_free(string, TRUE);
@@ -724,6 +700,7 @@ get_variable(const char *name, MPNumber *z, void *data)
char *c, *lower_name;
int result = 1;
GCDisplay *display = data;
+ MPNumber *t;
lower_name = strdup(name);
for (c = lower_name; *c; c++)
@@ -731,12 +708,15 @@ get_variable(const char *name, MPNumber *z, void *data)
if (strcmp(lower_name, "rand") == 0)
mp_set_from_random(z);
- else if (lower_name[0] == 'r')
- mp_set_from_mp(register_get_value(atoi(name+1)), z);
else if (strcmp(lower_name, "ans") == 0)
mp_set_from_mp(display_get_answer(display), z);
- else
- result = 0;
+ else {
+ t = register_get_value(name);
+ if (t)
+ mp_set_from_mp(t, z);
+ else
+ result = 0;
+ }
free(lower_name);
@@ -748,8 +728,7 @@ static void
set_variable(const char *name, const MPNumber *x, void *data)
{
/* FIXME: Don't allow writing to built-in variables, e.g. ans, rand, sin, ... */
- if (name[0] == 'R' || name[0] == 'r')
- register_set_value(atoi(name+1), x);
+ register_set_value(name, x);
}
@@ -1068,21 +1047,20 @@ do_factorize()
static void
-do_sto(GCDisplay *display, int index)
+do_sto(GCDisplay *display, const char *name)
{
- MPNumber temp;
+ MPNumber t;
- if (!display_is_usable_number(display, &temp))
+ if (!display_is_usable_number(display, &t))
ui_set_statusbar(_("No sane value to store"));
else
- register_set_value(index, &temp);
+ register_set_value(name, &t);
}
void
display_do_function(GCDisplay *display, int function, gpointer arg, int cursor_start, int cursor_end)
{
- char buf[MAXLINE];
MPNumber *ans;
int enabled;
guint64 bit_value;
@@ -1130,12 +1108,11 @@ display_do_function(GCDisplay *display, int function, gpointer arg, int cursor_s
return;
case FN_STORE:
- do_sto(display, GPOINTER_TO_INT (arg));
+ do_sto(display, (const char *)arg);
return;
case FN_RECALL:
- SNPRINTF(buf, MAXLINE, "R%s", (const char *)arg);
- display_insert(display, cursor_start, cursor_end, buf);
+ display_insert(display, cursor_start, cursor_end, (const char *)arg);
break;
case FN_BACKSPACE:
diff --git a/src/gtk.c b/src/gtk.c
index 39c9c72..d032a0c 100644
--- a/src/gtk.c
+++ b/src/gtk.c
@@ -92,6 +92,9 @@ static ButtonData button_data[] = {
{NULL, NULL}
};
+static char *registers[] = {"a", "b", "c", "x", "y", "z", NULL};
+#define MAX_REGISTERS 6
+
/* Window titles dependant on mode */
static char *titles[] = {
/* Translators: The window title when in basic mode */
@@ -654,7 +657,7 @@ G_MODULE_EXPORT
void
recall_menu_cb(GtkMenuItem *menu)
{
- do_button(FN_RECALL, g_object_get_data(G_OBJECT(menu), "register_digit"));
+ do_button(FN_RECALL, g_object_get_data(G_OBJECT(menu), "register_id"));
}
@@ -828,22 +831,16 @@ set_subscript_cb(GtkWidget *widget)
static void
update_memory_menus()
{
- char mstr[MAXLINE], value[MAXLINE];
int i;
- for (i = 0; i < MAX_REGISTERS; i++) {
- const char *name, *register_prefix;
-
- name = register_get_name(i);
-
- /* Translators: R is the short form of register used inter alia in popup menus */
- register_prefix = _("R");
+ for (i = 0; registers[i] != NULL; i++) {
+ char value[MAXLINE] = "", mstr[MAXLINE];
+ MPNumber *t;
- display_make_number(&v->display, value, MAXLINE, register_get_value(i));
- if (name[0] != '\0')
- SNPRINTF(mstr, MAXLINE, "<span weight=\"bold\">%s%s:</span> %s [%s]", register_prefix, subscript_digits[i], value, name);
- else
- SNPRINTF(mstr, MAXLINE, "<span weight=\"bold\">%s%s:</span> %s", register_prefix, subscript_digits[i], value);
+ t = register_get_value(registers[i]);
+ if (t)
+ display_make_number(&v->display, value, MAXLINE, t);
+ SNPRINTF(mstr, MAXLINE, "<span weight=\"bold\">%s</span> = %s", registers[i], value);
gtk_label_set_markup_with_mnemonic(GTK_LABEL(X.memory_store_labels[i]), mstr);
gtk_label_set_markup_with_mnemonic(GTK_LABEL(X.memory_recall_labels[i]), mstr);
}
@@ -1555,7 +1552,6 @@ create_main_window()
/* Connect super and subscript */
for (i = 0; i < 10; i++) {
-
SNPRINTF(name, MAXLINE, "calc_%d_button", i);
set_string_data(X.ui, name, "calc_subscript_text", subscript_digits[i]);
set_string_data(X.ui, name, "calc_superscript_text", superscript_digits[i]);
@@ -1568,15 +1564,15 @@ create_main_window()
set_data(X.ui, "calc_recall_button", "calc_menu", GET_WIDGET("memory_recall_popup"));
/* Get labels from popup menus */
- for (i = 0; i < MAX_REGISTERS; i++) {
+ for (i = 0; registers[i]; i++) {
SNPRINTF(name, MAXLINE, "store_menu_item%d", i);
widget = GET_WIDGET(name);
- g_object_set_data(G_OBJECT(widget), "register_id", GINT_TO_POINTER(i));
+ g_object_set_data(G_OBJECT(widget), "register_id", registers[i]);
X.memory_store_labels[i] = gtk_bin_get_child(GTK_BIN(widget));
SNPRINTF(name, MAXLINE, "recall_menu_item%d", i);
widget = GET_WIDGET(name);
- g_object_set_data(G_OBJECT(widget), "register_digit", (gpointer) subscript_digits[i]);
+ g_object_set_data(G_OBJECT(widget), "register_id", registers[i]);
X.memory_recall_labels[i] = gtk_bin_get_child(GTK_BIN(widget));
}
diff --git a/src/register.c b/src/register.c
index 9912ed7..d3189ac 100644
--- a/src/register.c
+++ b/src/register.c
@@ -17,155 +17,104 @@
*/
#include <stdio.h>
+#include <string.h>
+#include <glib.h>
#include "register.h"
-#include "calctool.h"
-#include "get.h"
-#include "mp.h"
-static char function_names[MAX_FUNCTIONS][MAXLINE]; /* Function names from .gcalctoolcf. */
-static char function_values[MAX_FUNCTIONS][MAXLINE]; /* Function defs from .gcalctoolcf. */
-static MPNumber registers[MAX_REGISTERS]; /* Memory register values. */
-static char register_names[MAX_REGISTERS][MAXLINE]; /* Memory register names */
+static gchar *file_name = NULL;
+static GHashTable *registers = NULL;
-static const char *default_registers[][2] =
+static void
+registers_load()
{
- /* Translators: This is the label for the default constant, the number of miles in one kilometer (0.621) */
- { N_("Kilometer-to-mile conversion factor"), "0.621" },
- /* Translators: This is the label for the default constant, the square root of 2 (1.41421) */
- { N_("square root of 2"), "1.4142135623" },
- /* Translators: This is the label for the default constant, Euler's number (2.71828) */
- { N_("Euler's Number (e)"), "2.7182818284" },
- /* Translators: This is the label for the default constant, Ï? (3.14159) */
- { N_("Ï?"), "3.1415926536" },
- /* Translators: This is the label for the default constant, the number of inches in a centimeter (0.39370) */
- { N_("Centimeter-to-inch conversion factor"), "0.3937007" },
- /* Translators: This is the label for the default constant, the number of degrees in a radian (57.2958) */
- { N_("degrees in a radian"), "57.295779513" },
- /* Translators: This is the label for the default constant, 2 to the power of 20 (1048576) */
- { N_("2 ^ 20"), "1048576.0" },
- /* Translators: This is the label for the default constant, the number of ounces in one gram (0.0353) */
- { N_("Gram-to-ounce conversion factor"), "0.0353" },
- /* Translators: This is the label for the default constant, the number of British Thermal Units in one Kilojoule (0.948) */
- { N_("Kilojoule-to-British-thermal-unit conversion factor"), "0.948" },
- /* Translators: This is the label for the default constant, the number of cubic inches in one cubic centimeter (0.0610) */
- { N_("Cubic-centimeter-to-cubic-inch conversion factor"), "0.0610" }
-};
-
-void register_init()
-{
- int i;
-
- for (i = 0; i < MAX_REGISTERS; i++) {
- char nkey[MAXLINE], *nline;
- char vkey[MAXLINE], *vline = NULL;
- MPNumber value;
-
- SNPRINTF(nkey, MAXLINE, "registger%1dname", i);
- nline = get_resource(nkey);
- if (nline) {
- SNPRINTF(vkey, MAXLINE, "register%1d", i);
- vline = get_resource(vkey);
- if (vline == NULL)
- g_free(nline);
- }
-
- if (nline && vline) {
- mp_set_from_string(vline, &value);
- register_set_name(i, nline);
- register_set_value(i, &value);
- g_free(nline);
- g_free(vline);
- }
- else {
- mp_set_from_string(default_registers[i][1], &value);
- register_set_name(i, default_registers[i][0]);
- register_set_value(i, &value);
- }
- }
-
- for (i = 0; i < MAX_FUNCTIONS; i++) {
- char nkey[MAXLINE], *nline;
- char vkey[MAXLINE], *vline;
-
- SNPRINTF(nkey, MAXLINE, "function%1dname", i);
- nline = get_resource(nkey);
- if (nline) {
- SNPRINTF(vkey, MAXLINE, "function%1dvalue", i);
- vline = get_resource(vkey);
- if (vline == NULL)
- g_free(nline);
- }
-
- if (nline && vline) {
- function_set(i, nline, vline);
- g_free(nline);
- g_free(vline);
- }
- else {
- function_set(i, "", "");
- }
+ FILE *f;
+ char line[1024];
+
+ f = fopen(file_name, "r");
+ if (!f)
+ return;
+
+ g_hash_table_remove_all(registers);
+
+ while (fgets(line, 1024, f) != NULL)
+ {
+ char *name, *value;
+ MPNumber *t;
+
+ value = strchr(line, '=');
+ if (!value)
+ continue;
+ *value = '\0';
+ value = value + 1;
+
+ name = g_strstrip(line);
+ value = g_strstrip(value);
+
+ t = g_malloc(sizeof(MPNumber));
+ if (mp_set_from_string(value, t) == 0)
+ g_hash_table_insert(registers, g_strdup(name), t);
+ else
+ g_free(t);
}
+ fclose(f);
}
-void
-register_set_value(int index, const MPNumber *value)
-{
- if ((index >= 0) && (index <= 10))
- mp_set_from_mp(value, ®isters[index]);
-}
-
-
-const MPNumber *
-register_get_value(int index)
-{
- if ((index >= 0) && (index <= 10))
- return ®isters[index];
- else
- return NULL;
-}
-
-
-void register_set_name(int index, const char *name)
-{
- char key[MAXLINE];
-
- STRNCPY(register_names[index], name, MAXLINE - 1);
- SNPRINTF(key, MAXLINE, "register%1dname", index);
- set_resource(key, name);
-}
-
-
-const char *register_get_name(int index)
+static void
+registers_save()
{
- return register_names[index];
+ gchar *dir;
+ FILE *f;
+ GHashTableIter iter;
+ gpointer key, val;
+
+ dir = g_path_get_dirname(file_name);
+ g_mkdir_with_parents(dir, 0700);
+ g_free(dir);
+
+ f = fopen(file_name, "w");
+ if (!f)
+ return;
+
+ g_hash_table_iter_init(&iter, registers);
+ while (g_hash_table_iter_next(&iter, &key, &val))
+ {
+ gchar *name = key;
+ MPNumber *value = val;
+ char number[1024];
+
+ mp_cast_to_string(value, 10, 50, TRUE, number, 1024);
+ fprintf(f, "%s=%s\n", name, number);
+ }
+ fclose(f);
}
-void function_set(int index, const char *name, const char *value)
+void
+register_init()
{
- char key[MAXLINE];
-
- STRNCPY(function_names[index], name, MAXLINE - 1);
- STRNCPY(function_values[index], value, MAXLINE - 1);
-
- SNPRINTF(key, MAXLINE, "function%1dname", index);
- set_resource(key, name);
- SNPRINTF(key, MAXLINE, "function%1dvalue", index);
- set_resource(key, value);
+ registers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
+ file_name = g_build_filename(g_get_user_data_dir(), "gcalctool", "registers", NULL);
+ registers_load();
}
-const char *function_get_name(int index)
+void
+register_set_value(const char *name, const MPNumber *value)
{
- return function_names[index];
+ MPNumber *t;
+ t = g_malloc(sizeof(MPNumber));
+ mp_set_from_mp(value, t);
+ g_hash_table_insert(registers, g_strdup(name), t);
+ registers_save();
}
-const char *function_get_value(int index)
+MPNumber *
+register_get_value(const char *name)
{
- return function_values[index];
+ return g_hash_table_lookup(registers, name);
}
diff --git a/src/register.h b/src/register.h
index 5daae75..4c9a9bf 100644
--- a/src/register.h
+++ b/src/register.h
@@ -22,13 +22,7 @@
#include "mp.h"
void register_init();
-void register_set_value(int index, const MPNumber *value);
-void register_set_name(int index, const char *name);
-const MPNumber *register_get_value(int index);
-const char *register_get_name(int index);
-
-void function_set(int index, const char *name, const char *value);
-const char *function_get_name(int index);
-const char *function_get_value(int index);
+void register_set_value(const char *name, const MPNumber *value);
+MPNumber *register_get_value(const char *name);
#endif /*REGISTER_H*/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]