[gcalctool] Fix ans variable usage
- From: Robert Ancell <rancell src gnome org>
- To: svn-commits-list gnome org
- Subject: [gcalctool] Fix ans variable usage
- Date: Tue, 14 Jul 2009 07:33:56 +0000 (UTC)
commit a049aa804fa8bd79e63e5b80a0ef7350c3c98d84
Author: Robert Ancell <robert ancell gmail com>
Date: Tue Jul 14 17:24:40 2009 +1000
Fix ans variable usage
src/display.c | 12 ++++++------
src/mp-equation-lexer.l | 3 ++-
src/mp-equation.c | 19 ++++++++++++++-----
3 files changed, 22 insertions(+), 12 deletions(-)
---
diff --git a/src/display.c b/src/display.c
index 583a949..5887497 100644
--- a/src/display.c
+++ b/src/display.c
@@ -253,7 +253,7 @@ display_set_number(GCDisplay *display, const MPNumber *MPval)
void
display_set_answer(GCDisplay *display)
{
- display_set_string(display, "Ans", -1);
+ display_set_string(display, "ans", -1);
}
@@ -276,7 +276,7 @@ display_make_text(GCDisplay *display, char *localized, int length, int *cursor)
/* Substitute answer register */
display_make_number(display, temp, MAX_LOCALIZED, &e->ans, v->base, TRUE);
- str = str_replace(str, "Ans", temp);
+ str = str_replace(str, "ans", temp);
/* Replace registers with values. */
for (i = 0; i < 10; i++) {
@@ -389,7 +389,7 @@ void display_push(GCDisplay *display)
do {
i = ((i + 1) % UNDO_HISTORY_LENGTH);
free(display->h.e[i].expression);
- display->h.e[i].expression = strdup("Ans");
+ display->h.e[i].expression = strdup("ans");
} while (i != display->h.end);
}
@@ -526,9 +526,9 @@ display_backspace(GCDisplay *display, int cursor_start, int cursor_end)
len = g_utf8_strlen(ui_get_display(), -1);
- if (exp_has_postfix(e->expression, "Ans")) {
+ if (exp_has_postfix(e->expression, "ans")) {
display_make_number(display, buf, MAX_DISPLAY, &e->ans, v->base, FALSE);
- e->expression = str_replace(e->expression, "Ans", buf);
+ e->expression = str_replace(e->expression, "ans", buf);
} else {
for (i = 0; i < 10; i++) {
SNPRINTF(buf, MAX_DISPLAY, "R%d", i);
@@ -581,7 +581,7 @@ display_is_empty(GCDisplay *display)
gboolean
display_is_result(GCDisplay *display)
{
- if (strcmp(display_get_text(display), "Ans") == 0)
+ if (strcmp(display_get_text(display), "ans") == 0)
return TRUE;
return FALSE;
diff --git a/src/mp-equation-lexer.l b/src/mp-equation-lexer.l
index 5bb6a2e..4dcf260 100644
--- a/src/mp-equation-lexer.l
+++ b/src/mp-equation-lexer.l
@@ -99,7 +99,8 @@ SUP_NUM {SUPER_DIGITS}+
SUB_NUM {SUB_DIGITS}+
GREEKS "α"|"β"|"γ"|"δ"|"ε"|"ζ"|"η"|"θ"|"ι"|"κ"|"λ"|"μ"|"ν"|"ξ"|"ο"|"Ï?"|"Ï?"|"Ï?"|"Ï?"|"Ï?"|"Ï?"|"Ï?"|"Ï?"|"Ï?"|"Ï?"
REGISTERS "Râ??"|"Râ??"|"Râ??"|"Râ??"|"Râ??"|"Râ??"|"Râ??"|"Râ??"|"Râ??"|"Râ??"
-VARIABLE {REGISTERS}|{GREEKS}|"e"
+ANS [aA][nN][sS]
+VARIABLE {REGISTERS}|{GREEKS}|"e"|{ANS}
VARIABLE_NAME [a-zA-Z]+
FUNCTION {VARIABLE_NAME}|{VARIABLE_NAME}{INVERSE}|{VARIABLE_NAME}{SUB_NUM}
diff --git a/src/mp-equation.c b/src/mp-equation.c
index 60f1e8f..5bd61fe 100644
--- a/src/mp-equation.c
+++ b/src/mp-equation.c
@@ -33,18 +33,27 @@ extern int _mp_equation_parse(yyscan_t yyscanner);
static int
get_variable(MPEquationParserState *state, const char *name, MPNumber *z)
{
- if (name[0] == 'R' || name[0] == 'r')
+ char *c, *lower_name;
+ int result = 1;
+
+ lower_name = strdup(name);
+ for (c = lower_name; *c; c++)
+ *c = tolower(*c);
+
+ if (lower_name[0] == 'r')
register_get(atoi(name+1), z);
- else if (strcmp(name, "ans") == 0)
+ else if (strcmp(lower_name, "ans") == 0)
mp_set_from_mp(display_get_answer(&v->display), z);
else if (strcmp(name, "e") == 0)
mp_get_eulers(z);
else if (strcmp(name, "Ï?") == 0)
mp_get_pi(z);
else
- return 0;
+ result = 0;
+
+ free(lower_name);
- return 1;
+ return result;
}
static void
@@ -128,7 +137,7 @@ mp_equation_parse(const char *expression, MPNumber *result)
MPEquationParserState state;
yyscan_t yyscanner;
YY_BUFFER_STATE buffer;
-
+
if (!(expression && result) || strlen(expression) == 0)
return(-EINVAL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]