[gcalctool] Fix ans variable usage



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]