[gcalctool] Parser expects registers to be subscripted. Explain that to UI code and fix register parsing code to
- From: Robin Sonefors <rsonefors src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gcalctool] Parser expects registers to be subscripted. Explain that to UI code and fix register parsing code to
- Date: Wed, 7 Oct 2009 22:05:46 +0000 (UTC)
commit ec909bee64cc48061a08fd60f6177616f96ea997
Author: Robin Sonefors <ozamosi flukkost nu>
Date: Wed Oct 7 23:59:53 2009 +0200
Parser expects registers to be subscripted. Explain that to UI code and fix register parsing code to understand the subscrpted indexes.
src/display.c | 4 ++--
src/gtk.c | 13 +++++++------
src/mp-equation-lexer.l | 33 +--------------------------------
src/mp-equation.c | 21 +++++++++++++++++++--
src/mp-equation.h | 2 ++
5 files changed, 31 insertions(+), 42 deletions(-)
---
diff --git a/src/display.c b/src/display.c
index 9172a8d..a1a35ea 100644
--- a/src/display.c
+++ b/src/display.c
@@ -729,7 +729,7 @@ get_variable(const char *name, MPNumber *z, void *data)
*c = tolower(*c);
if (lower_name[0] == 'r')
- mp_set_from_mp(register_get_value(atoi(name+1)), z);
+ mp_set_from_mp(register_get_value(sub_atoi(name+1)), z);
else if (strcmp(lower_name, "ans") == 0)
mp_set_from_mp(display_get_answer(display), z);
else
@@ -960,7 +960,7 @@ display_do_function(GCDisplay *display, int function, gpointer arg, int cursor_s
return;
case FN_RECALL:
- SNPRINTF(buf, MAXLINE, "R%d", GPOINTER_TO_INT (arg));
+ SNPRINTF(buf, MAXLINE, "R%s", (const char *)arg);
display_insert(display, cursor_start, cursor_end, buf);
break;
diff --git a/src/gtk.c b/src/gtk.c
index 71779ee..efb30bb 100644
--- a/src/gtk.c
+++ b/src/gtk.c
@@ -216,6 +216,9 @@ typedef enum {
CURRENCY_TARGET_LOWER
} CurrencyTargetRow;
+static const char *subscript_digits[] = {"â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??"};
+static const char *superscript_digits[] = {"�", "¹", "²", "³", "�", "�", "�", "�", "�", "�"};
+
static void load_ui(GtkBuilder *ui, const gchar *filename)
{
GError *error = NULL;
@@ -651,7 +654,7 @@ G_MODULE_EXPORT
void
recall_menu_cb(GtkMenuItem *menu)
{
- do_button(FN_RECALL, g_object_get_data(G_OBJECT(menu), "register_id"));
+ do_button(FN_RECALL, g_object_get_data(G_OBJECT(menu), "register_digit"));
}
@@ -838,9 +841,9 @@ update_memory_menus()
display_make_number(&v->display, value, MAXLINE, register_get_value(i));
if (name[0] != '\0')
- SNPRINTF(mstr, MAXLINE, "<span weight=\"bold\">%s_%d:</span> %s [%s]", register_prefix, i, value, name);
+ 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_%d:</span> %s", register_prefix, i, value);
+ SNPRINTF(mstr, MAXLINE, "<span weight=\"bold\">%s%s:</span> %s", register_prefix, subscript_digits[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);
}
@@ -1553,8 +1556,6 @@ create_main_window()
/* Connect super and subscript */
for (i = 0; i < 10; i++) {
- static const char *subscript_digits[] = {"â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??"};
- static const char *superscript_digits[] = {"�", "¹", "²", "³", "�", "�", "�", "�", "�", "�"};
SNPRINTF(name, MAXLINE, "calc_%d_button", i);
set_string_data(X.ui, name, "calc_subscript_text", subscript_digits[i]);
@@ -1576,7 +1577,7 @@ create_main_window()
SNPRINTF(name, MAXLINE, "recall_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_digit", (gpointer) subscript_digits[i]);
X.memory_recall_labels[i] = gtk_bin_get_child(GTK_BIN(widget));
}
diff --git a/src/mp-equation-lexer.l b/src/mp-equation-lexer.l
index 668b975..172cce6 100644
--- a/src/mp-equation-lexer.l
+++ b/src/mp-equation-lexer.l
@@ -32,38 +32,7 @@
#include "mp-equation-private.h"
#include "mp-equation-parser.h"
-
-static int super_atoi(const char *data)
-{
- int i, value = 0;
- const char *digits[11] = {"�", "¹", "²", "³", "�", "�", "�", "�", "�", "�", NULL};
-
- while(*data != '\0') {
- for(i = 0; digits[i] != NULL && strncmp(data, digits[i], strlen(digits[i])) != 0; i++);
- if(digits[i] == NULL)
- return 0;
- value = value * 10 + i;
- data += strlen(digits[i]);
- }
-
- return value;
-}
-
-static int sub_atoi(const char *data)
-{
- int i, value = 0;
- const char *digits[11] = {"â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", NULL};
-
- while(*data != '\0') {
- for(i = 0; digits[i] != NULL && strncmp(data, digits[i], strlen(digits[i])) != 0; i++);
- if(digits[i] == NULL)
- return 0;
- data += strlen(digits[i]);
- value = value * 10 + i;
- }
-
- return value;
-}
+#include "mp-equation.h"
%}
diff --git a/src/mp-equation.c b/src/mp-equation.c
index c60e78f..e7d2c10 100644
--- a/src/mp-equation.c
+++ b/src/mp-equation.c
@@ -58,7 +58,8 @@ set_variable(MPEquationParserState *state, const char *name, const MPNumber *x)
// letters+numbers = numbers+letters+numbers = function
-static int sub_atoi(const char *data)
+int
+sub_atoi(const char *data)
{
int i, value = 0;
const char *digits[] = {"â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", "â??", NULL};
@@ -66,7 +67,7 @@ static int sub_atoi(const char *data)
do {
for(i = 0; digits[i] != NULL && strncmp(data, digits[i], strlen(digits[i])) != 0; i++);
if(digits[i] == NULL)
- return -1;
+ return 0;
data += strlen(digits[i]);
value = value * 10 + i;
} while(*data != '\0');
@@ -74,6 +75,22 @@ static int sub_atoi(const char *data)
return value;
}
+int
+super_atoi(const char *data)
+{
+ int i, value = 0;
+ const char *digits[11] = {"�", "¹", "²", "³", "�", "�", "�", "�", "�", "�", NULL};
+
+ do {
+ for(i = 0; digits[i] != NULL && strncmp(data, digits[i], strlen(digits[i])) != 0; i++);
+ if(digits[i] == NULL)
+ return 0;
+ value = value * 10 + i;
+ data += strlen(digits[i]);
+ } while(*data != '\0');
+
+ return value;
+}
static int
get_function(MPEquationParserState *state, const char *name, const MPNumber *x, MPNumber *z)
diff --git a/src/mp-equation.h b/src/mp-equation.h
index b4a0a57..b698e0f 100644
--- a/src/mp-equation.h
+++ b/src/mp-equation.h
@@ -54,4 +54,6 @@ typedef struct {
int mp_equation_parse(const char *expression, MPEquationOptions *options, MPNumber *result, char **error_token);
+int sub_atoi(const char *data);
+int super_atoi(const char *data);
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]