gcalctool r2321 - trunk/gcalctool



Author: rancell
Date: Sat Nov 29 09:32:44 2008
New Revision: 2321
URL: http://svn.gnome.org/viewvc/gcalctool?rev=2321&view=rev

Log:
tidy up

Modified:
   trunk/gcalctool/calctool.h
   trunk/gcalctool/functions.c
   trunk/gcalctool/functions.h
   trunk/gcalctool/gtk.c
   trunk/gcalctool/ui.h

Modified: trunk/gcalctool/calctool.h
==============================================================================
--- trunk/gcalctool/calctool.h	(original)
+++ trunk/gcalctool/calctool.h	Sat Nov 29 09:32:44 2008
@@ -62,69 +62,6 @@
 /* Trigonometric types. */
 enum trig_type { DEG, GRAD, RAD, MAXTRIGMODES };
 
-/* Abbreviations for the gcalctool keyboard */
-enum
-{
-    KEY_0, KEY_1, KEY_2, KEY_3,
-    KEY_4, KEY_5, KEY_6, KEY_7,
-    KEY_8, KEY_9, KEY_A, KEY_B,
-    KEY_C, KEY_D, KEY_E, KEY_F,
-    KEY_NUMERIC_POINT,
-    KEY_CALCULATE,
-    KEY_CLEAR, KEY_CLEAR_ENTRY,
-    KEY_START_BLOCK, KEY_END_BLOCK,
-    KEY_ADD, KEY_SUBTRACT,
-    KEY_MULTIPLY, KEY_DIVIDE,
-    KEY_BACKSPACE,
-    KEY_DELETE,        
-    KEY_CHANGE_SIGN,
-    KEY_INTEGER,
-    KEY_FRACTION,
-    KEY_PERCENTAGE,
-    KEY_SQUARE,
-    KEY_SQUARE_ROOT,
-    KEY_RECIPROCAL,
-    KEY_E_POW_X,
-    KEY_10_POW_X,
-    KEY_2_POW_X,
-    KEY_X_POW_Y,
-    KEY_X_POW_Y_INV,
-    KEY_FACTORIAL,
-    KEY_RANDOM,
-    KEY_SIN, KEY_SINH, KEY_ASIN, KEY_ASINH,
-    KEY_COS, KEY_COSH, KEY_ACOS, KEY_ACOSH,
-    KEY_TAN, KEY_TANH, KEY_ATAN, KEY_ATANH,
-    KEY_NATURAL_LOGARITHM,
-    KEY_LOGARITHM,
-    KEY_LOGARITHM2,
-    KEY_ABSOLUTE_VALUE,
-    KEY_MASK_16,
-    KEY_MASK_32,
-    KEY_MODULUS_DIVIDE,
-    KEY_EXPONENTIAL,
-    KEY_NOT, KEY_OR, KEY_AND, KEY_XOR, KEY_XNOR,
-    KEY_FINC_CTRM,
-    KEY_FINC_DDB,
-    KEY_FINC_FV,
-    KEY_FINC_GPM,
-    KEY_FINC_PMT,
-    KEY_FINC_PV,
-    KEY_FINC_RATE,
-    KEY_FINC_SLN,
-    KEY_FINC_SYD,
-    KEY_FINC_TERM,
-    KEY_SHIFT,
-    KEY_STORE, KEY_RECALL, KEY_EXCHANGE,
-    KEY_SET_ACCURACY,
-    KEY_SET_BASE,
-    KEY_SET_NUMBERTYPE,
-    KEY_UNDO,
-    KEY_REDO,
-    KEY_CONSTANT,
-    KEY_FUNCTION,
-    NKEYS
-};
-
 #ifndef LINT_CAST
 #ifdef  lint
 #define LINT_CAST(arg)  (arg ? 0 : 0)

Modified: trunk/gcalctool/functions.c
==============================================================================
--- trunk/gcalctool/functions.c	(original)
+++ trunk/gcalctool/functions.c	Sat Nov 29 09:32:44 2008
@@ -47,100 +47,102 @@
     int id;
     char *symname;           /* Expression function name */
     enum button_flags flags; /* Misc flags */
-} Button;
+} Function;
 
 // FIXME: Sort this list
 /* Note that none of these strings can be translated as the parser expects them to be correct */
 /* id, symname flags */
-static Button buttons[NKEYS] = {
-{ KEY_0,                 "0", NUMBER },
-{ KEY_1,                 "1", NUMBER },
-{ KEY_2,                 "2", NUMBER },    
-{ KEY_3,                 "3", NUMBER },
-{ KEY_4,                 "4", NUMBER },
-{ KEY_5,                 "5", NUMBER },
-{ KEY_6,                 "6", NUMBER },
-{ KEY_7,                 "7", NUMBER },
-{ KEY_8,                 "8", NUMBER },
-{ KEY_9,                 "9", NUMBER },
-{ KEY_A,                 "A", NUMBER },
-{ KEY_B,                 "B", NUMBER },    
-{ KEY_C,                 "C", NUMBER },
-{ KEY_D,                 "D", NUMBER },
-{ KEY_E,                 "E", NUMBER },
-{ KEY_F,                 "F", NUMBER },
-{ KEY_NUMERIC_POINT,     ".", NUMBER },
-{ KEY_CALCULATE,         NULL, 0 },
-{ KEY_CLEAR,             NULL, 0 },
-{ KEY_CLEAR_ENTRY,       NULL, 0 },
-{ KEY_START_BLOCK,       "(", 0 },
-{ KEY_END_BLOCK,         ")", 0 },
-{ KEY_ADD,               "+", 0 },
-{ KEY_SUBTRACT,          "-", 0 },
-{ KEY_MULTIPLY,          "*", 0 },
-{ KEY_DIVIDE,            "/", 0 },
-{ KEY_BACKSPACE,         NULL, 0 },
-{ KEY_DELETE,            NULL, 0 },
-{ KEY_CHANGE_SIGN,       NULL, 0 },
-{ KEY_INTEGER,           "Int", FUNC },
-{ KEY_FRACTION,          "Frac", FUNC },
-{ KEY_PERCENTAGE,        "%", 0 },
-{ KEY_SQUARE,            "^2", 0 },
-{ KEY_SQUARE_ROOT,       "Sqrt", FUNC },
-{ KEY_RECIPROCAL,        NULL, 0 },
-{ KEY_E_POW_X,           "e^", PREFIXOP },
-{ KEY_10_POW_X,          "10^", PREFIXOP },       
-{ KEY_2_POW_X,           "2^", PREFIXOP },
-{ KEY_X_POW_Y,           "^", 0 },
-{ KEY_X_POW_Y_INV,       "^(1/(", 0 },
-{ KEY_FACTORIAL,         "!", 0 },
-{ KEY_RANDOM,            "Rand", 0 },
-{ KEY_SIN,               "Sin", FUNC },
-{ KEY_SINH,              "Sinh", FUNC },
-{ KEY_ASIN,              "Asin", FUNC },
-{ KEY_ASINH,             "Asinh", FUNC },
-{ KEY_COS,               "Cos", FUNC },
-{ KEY_COSH,              "Cosh", FUNC },
-{ KEY_ACOS,              "Acos", FUNC },
-{ KEY_ACOSH,             "Acosh", FUNC },
-{ KEY_TAN,               "Tan", FUNC },
-{ KEY_TANH,              "Tanh", FUNC },
-{ KEY_ATAN,              "Atan", FUNC },
-{ KEY_TAN,               "Atanh", FUNC },
-{ KEY_NATURAL_LOGARITHM, "Ln", FUNC },
-{ KEY_LOGARITHM,         "Log", FUNC },
-{ KEY_LOGARITHM2,        "Log2", FUNC },
-{ KEY_ABSOLUTE_VALUE,    "Abs", FUNC },
-{ KEY_MASK_16,           "u16", FUNC },            
-{ KEY_MASK_32,           "u32", FUNC },
-{ KEY_MODULUS_DIVIDE,    " Mod ", 0 },
-{ KEY_EXPONENTIAL,       "e", 0 },
-{ KEY_NOT,               "~", 0 },
-{ KEY_OR,                " OR ", 0 },
-{ KEY_AND,               " AND ", 0 },       
-{ KEY_XOR,               " XOR ", 0 },
-{ KEY_XNOR,              " XNOR ", 0 },
-{ KEY_FINC_CTRM,         "Ctrm", 0 },
-{ KEY_FINC_DDB,          "Ddb", 0 },
-{ KEY_FINC_FV,           "Fv", 0 },
-{ KEY_FINC_GPM,          "Gpm", 0 },
-{ KEY_FINC_PMT,          "Pmt", 0 },
-{ KEY_FINC_PV,           "Pv", 0 },
-{ KEY_FINC_RATE,         "Rate", 0 },
-{ KEY_FINC_SLN,          "Sln", 0 },
-{ KEY_FINC_SYD ,         "Syd", 0 },
-{ KEY_FINC_TERM,         "Term", 0 },
-{ KEY_SHIFT,             NULL, 0 },
-{ KEY_STORE,             NULL, 0 },
-{ KEY_RECALL,            NULL, 0 },
-{ KEY_EXCHANGE,          NULL, 0 },
-{ KEY_SET_ACCURACY,      NULL, 0 },
-{ KEY_SET_BASE,          NULL, 0 },
-{ KEY_SET_NUMBERTYPE,    NULL, 0 },
-{ KEY_UNDO,              NULL, 0 },
-{ KEY_REDO,              NULL, 0 },
-{ KEY_CONSTANT,          NULL, 0 },
-{ KEY_FUNCTION,          NULL, 0 }
+static Function functions[NFUNCTIONS] = {
+{ FN_0,                 "0", NUMBER },
+{ FN_1,                 "1", NUMBER },
+{ FN_2,                 "2", NUMBER },    
+{ FN_3,                 "3", NUMBER },
+{ FN_4,                 "4", NUMBER },
+{ FN_5,                 "5", NUMBER },
+{ FN_6,                 "6", NUMBER },
+{ FN_7,                 "7", NUMBER },
+{ FN_8,                 "8", NUMBER },
+{ FN_9,                 "9", NUMBER },
+{ FN_A,                 "A", NUMBER },
+{ FN_B,                 "B", NUMBER },    
+{ FN_C,                 "C", NUMBER },
+{ FN_D,                 "D", NUMBER },
+{ FN_E,                 "E", NUMBER },
+{ FN_F,                 "F", NUMBER },
+{ FN_NUMERIC_POINT,     ".", NUMBER },
+{ FN_CALCULATE,         NULL, 0 },
+{ FN_CLEAR,             NULL, 0 },
+{ FN_CLEAR_ENTRY,       NULL, 0 },
+{ FN_START_BLOCK,       "(", 0 },
+{ FN_END_BLOCK,         ")", 0 },
+{ FN_ADD,               "+", 0 },
+{ FN_SUBTRACT,          "-", 0 },
+{ FN_MULTIPLY,          "*", 0 },
+{ FN_DIVIDE,            "/", 0 },
+{ FN_BACKSPACE,         NULL, 0 },
+{ FN_DELETE,            NULL, 0 },
+{ FN_CHANGE_SIGN,       NULL, 0 },
+{ FN_INTEGER,           "Int", FUNC },
+{ FN_FRACTION,          "Frac", FUNC },
+{ FN_PERCENTAGE,        "%", 0 },
+{ FN_SQUARE,            "^2", 0 },
+{ FN_SQUARE_ROOT,       "Sqrt", FUNC },
+{ FN_RECIPROCAL,        NULL, 0 },
+{ FN_E_POW_X,           "e^", PREFIXOP },
+{ FN_10_POW_X,          "10^", PREFIXOP },       
+{ FN_2_POW_X,           "2^", PREFIXOP },
+{ FN_X_POW_Y,           "^", 0 },
+{ FN_X_POW_Y_INV,       "^(1/(", 0 },
+{ FN_FACTORIAL,         "!", 0 },
+{ FN_RANDOM,            "Rand", 0 },
+{ FN_SIN,               "Sin", FUNC },
+{ FN_SINH,              "Sinh", FUNC },
+{ FN_ASIN,              "Asin", FUNC },
+{ FN_ASINH,             "Asinh", FUNC },
+{ FN_COS,               "Cos", FUNC },
+{ FN_COSH,              "Cosh", FUNC },
+{ FN_ACOS,              "Acos", FUNC },
+{ FN_ACOSH,             "Acosh", FUNC },
+{ FN_TAN,               "Tan", FUNC },
+{ FN_TANH,              "Tanh", FUNC },
+{ FN_ATAN,              "Atan", FUNC },
+{ FN_TAN,               "Atanh", FUNC },
+{ FN_NATURAL_LOGARITHM, "Ln", FUNC },
+{ FN_LOGARITHM,         "Log", FUNC },
+{ FN_LOGARITHM2,        "Log2", FUNC },
+{ FN_ABSOLUTE_VALUE,    "Abs", FUNC },
+{ FN_MASK_16,           "u16", FUNC },            
+{ FN_MASK_32,           "u32", FUNC },
+{ FN_MODULUS_DIVIDE,    " Mod ", 0 },
+{ FN_EXPONENTIAL,       "e", 0 },
+{ FN_NOT,               "~", 0 },
+{ FN_OR,                " OR ", 0 },
+{ FN_AND,               " AND ", 0 },       
+{ FN_XOR,               " XOR ", 0 },
+{ FN_XNOR,              " XNOR ", 0 },
+{ FN_TOGGLE_BIT,        NULL, 0 },
+{ FN_FINC_CTRM,         "Ctrm", 0 },
+{ FN_FINC_DDB,          "Ddb", 0 },
+{ FN_FINC_FV,           "Fv", 0 },
+{ FN_FINC_GPM,          "Gpm", 0 },
+{ FN_FINC_PMT,          "Pmt", 0 },
+{ FN_FINC_PV,           "Pv", 0 },
+{ FN_FINC_RATE,         "Rate", 0 },
+{ FN_FINC_SLN,          "Sln", 0 },
+{ FN_FINC_SYD ,         "Syd", 0 },
+{ FN_FINC_TERM,         "Term", 0 },
+{ FN_SHIFT,             NULL, 0 },
+{ FN_STORE,             NULL, 0 },
+{ FN_RECALL,            NULL, 0 },
+{ FN_EXCHANGE,          NULL, 0 },
+{ FN_SET_ACCURACY,      NULL, 0 },
+{ FN_SET_BASE,          NULL, 0 },
+{ FN_SET_NUMBERTYPE,    NULL, 0 },
+{ FN_SET_TRIG_TYPE,     NULL, 0 },
+{ FN_UNDO,              NULL, 0 },
+{ FN_REDO,              NULL, 0 },
+{ FN_CONSTANT,          NULL, 0 },
+{ FN_FUNCTION,          NULL, 0 }
 };
 
 static void
@@ -150,14 +152,6 @@
 }
 
 
-void
-do_trigtype(enum trig_type t)    /* Change the current trigonometric type. */
-{
-    v->ttype = t;
-    set_resource(R_TRIG, Rtstr[(int) v->ttype]);
-}
-
-
 static void
 do_accuracy(int value)     /* Set display accuracy. */
 {
@@ -306,13 +300,15 @@
 {
     char buf[MAXLINE];
     int *ans;
+    int enabled;
+    guint64 bit_value;
     
-    switch (buttons[function].id) {
-        case KEY_UNDO:
+    switch (functions[function].id) {
+        case FN_UNDO:
             display_pop(&v->display);
             return;
 
-        case KEY_REDO:
+        case FN_REDO:
             display_unpop(&v->display);
             return;
 
@@ -329,74 +325,96 @@
 
     /* Starting a number after a calculation clears the display */
     if (display_is_result(&v->display)) {
-        if (buttons[function].flags & NUMBER) {
+        if (functions[function].flags & NUMBER) {
             display_clear(&v->display);
         }
     }
 
-    switch (buttons[function].id) {
-        case KEY_CLEAR:
-        case KEY_CLEAR_ENTRY:
+    switch (functions[function].id) {
+        case FN_CLEAR:
+        case FN_CLEAR_ENTRY:
             display_clear(&v->display);
             ui_set_error_state(FALSE);
             MPstr_to_num("0", 10, ans);
             break;
 
-        case KEY_SHIFT:
+        case FN_SHIFT:
             do_shift(arg);
             return;
 
-        case KEY_SET_ACCURACY:
+        case FN_SET_ACCURACY:
             do_accuracy(arg);
             return;
 
-        case KEY_SET_BASE:
+        case FN_SET_BASE:
             do_base(arg);
             return;
+        
+        case FN_SET_TRIG_TYPE:
+            v->ttype = arg;
+            set_resource(R_TRIG, Rtstr[arg]);
+            return;
 
-        case KEY_SET_NUMBERTYPE:
+        case FN_SET_NUMBERTYPE:
             do_numtype(arg);
             return;        
         
-        case KEY_FUNCTION:
+        case FN_FUNCTION:
             do_function(arg);
             return;
 
-        case KEY_STORE:
+        case FN_STORE:
             do_sto(arg);
             return;
 
-        case KEY_EXCHANGE:
+        case FN_EXCHANGE:
             do_exchange(arg);
             return;
 
-        case KEY_RECALL:
+        case FN_RECALL:
             SNPRINTF(buf, MAXLINE, "R%d", arg);
             display_insert(&v->display, buf);
             break;
 
-        case KEY_CONSTANT:
+        case FN_CONSTANT:
             make_number(buf, MAXLINE, constant_get_value(arg), v->base, FALSE);
             display_insert(&v->display, buf);
             break;
 
-        case KEY_BACKSPACE:
+        case FN_BACKSPACE:
             display_backspace(&v->display);
             break;
         
-        case KEY_DELETE:
+        case FN_DELETE:
             display_delete(&v->display);
             break;
 
-        case KEY_CHANGE_SIGN:
+        case FN_CHANGE_SIGN:
             display_surround(&v->display, "-(", ")");
             break;
 
-        case KEY_RECIPROCAL:
+        case FN_RECIPROCAL:
             display_surround(&v->display, "1/(", ")");
             break;
 
-        case KEY_CALCULATE:
+        case FN_TOGGLE_BIT:
+            if (display_get_unsigned_integer(&v->display, &bit_value)) {
+                char buf[MAX_DISPLAY];
+                int MP[MP_SIZE];
+
+                bit_value ^= (1LL << (63 - arg));
+    
+                /* FIXME: Convert to since we don't support setting MP numbers from 64 bit integers */
+                SNPRINTF(buf, MAX_DISPLAY, "%llu", bit_value);
+                MPstr_to_num(buf, 10, MP);
+
+                /* FIXME: Set as string as display_set_number doesn't store correctly */
+                make_number(buf, MAX_DISPLAY, MP, v->base, FALSE);
+                display_set_string(&v->display, buf, -1);
+            }
+            break;
+
+        case FN_CALCULATE:
             /* If showing a result display the calculation that caused
              * this result */
             /* TODO: Work out why two undo steps are required and why
@@ -454,24 +472,28 @@
             }
             break;
 
-        case KEY_NUMERIC_POINT:
+        case FN_NUMERIC_POINT:
             display_insert(&v->display, v->radix);
             break;
 
         default:
             /* If display is a number then perform functions on that number */
-            if (buttons[function].flags & (PREFIXOP | FUNC) && display_is_result(&v->display)) {
-                SNPRINTF(buf, MAXLINE, "%s(", buttons[function].symname);
+            if (functions[function].flags & (PREFIXOP | FUNC) && display_is_result(&v->display)) {
+                SNPRINTF(buf, MAXLINE, "%s(", functions[function].symname);
                 display_surround(&v->display, buf, ")");
             } else {
-                if (buttons[function].flags & FUNC) {
-                    SNPRINTF(buf, MAXLINE, "%s(", buttons[function].symname);
+                if (functions[function].flags & FUNC) {
+                    SNPRINTF(buf, MAXLINE, "%s(", functions[function].symname);
                     display_insert(&v->display, buf);
                 } else {
-                    display_insert(&v->display, buttons[function].symname);
+                    display_insert(&v->display, functions[function].symname);
                 }
             }
             break;
     }
+
     display_refresh(&v->display);
+    
+    enabled = display_get_unsigned_integer(&v->display, &bit_value);
+    ui_set_bitfield(enabled, bit_value);
 }

Modified: trunk/gcalctool/functions.h
==============================================================================
--- trunk/gcalctool/functions.h	(original)
+++ trunk/gcalctool/functions.h	Sat Nov 29 09:32:44 2008
@@ -23,9 +23,70 @@
 #ifndef FUNCTIONS_H
 #define FUNCTIONS_H
 
-// FIXME: Merge into do_expression
-#include "calctool.h"
-void do_trigtype(enum trig_type t);
+/* Available functions */
+enum
+{
+    FN_0, FN_1, FN_2, FN_3,
+    FN_4, FN_5, FN_6, FN_7,
+    FN_8, FN_9, FN_A, FN_B,
+    FN_C, FN_D, FN_E, FN_F,
+    FN_NUMERIC_POINT,
+    FN_CALCULATE,
+    FN_CLEAR, FN_CLEAR_ENTRY,
+    FN_START_BLOCK, FN_END_BLOCK,
+    FN_ADD, FN_SUBTRACT,
+    FN_MULTIPLY, FN_DIVIDE,
+    FN_BACKSPACE,
+    FN_DELETE,        
+    FN_CHANGE_SIGN,
+    FN_INTEGER,
+    FN_FRACTION,
+    FN_PERCENTAGE,
+    FN_SQUARE,
+    FN_SQUARE_ROOT,
+    FN_RECIPROCAL,
+    FN_E_POW_X,
+    FN_10_POW_X,
+    FN_2_POW_X,
+    FN_X_POW_Y,
+    FN_X_POW_Y_INV,
+    FN_FACTORIAL,
+    FN_RANDOM,
+    FN_SIN, FN_SINH, FN_ASIN, FN_ASINH,
+    FN_COS, FN_COSH, FN_ACOS, FN_ACOSH,
+    FN_TAN, FN_TANH, FN_ATAN, FN_ATANH,
+    FN_NATURAL_LOGARITHM,
+    FN_LOGARITHM,
+    FN_LOGARITHM2,
+    FN_ABSOLUTE_VALUE,
+    FN_MASK_16,
+    FN_MASK_32,
+    FN_MODULUS_DIVIDE,
+    FN_EXPONENTIAL,
+    FN_NOT, FN_OR, FN_AND, FN_XOR, FN_XNOR,
+    FN_TOGGLE_BIT,
+    FN_FINC_CTRM,
+    FN_FINC_DDB,
+    FN_FINC_FV,
+    FN_FINC_GPM,
+    FN_FINC_PMT,
+    FN_FINC_PV,
+    FN_FINC_RATE,
+    FN_FINC_SLN,
+    FN_FINC_SYD,
+    FN_FINC_TERM,
+    FN_SHIFT,
+    FN_STORE, FN_RECALL, FN_EXCHANGE,
+    FN_SET_ACCURACY,
+    FN_SET_BASE,
+    FN_SET_NUMBERTYPE,
+    FN_SET_TRIG_TYPE,
+    FN_UNDO,
+    FN_REDO,
+    FN_CONSTANT,
+    FN_FUNCTION,
+    NFUNCTIONS
+};
 
 void do_expression(int function, int arg, int cursor);
 

Modified: trunk/gcalctool/gtk.c
==============================================================================
--- trunk/gcalctool/gtk.c	(original)
+++ trunk/gcalctool/gtk.c	Sat Nov 29 09:32:44 2008
@@ -110,275 +110,275 @@
  */
     
 static struct button_widget button_widgets[] = {
-    {KEY_0,                  "0",
+    {FN_0,                  "0",
     { 0,     0,        0,             0 },
     { GDK_0, GDK_KP_0, GDK_KP_Insert, 0 }},
 
-    {KEY_1,                  "1",
+    {FN_1,                  "1",
     { 0,     0,        0,          0,       0 },
     { GDK_1, GDK_KP_1, GDK_KP_End, GDK_R13, 0 }},
 
-    {KEY_2,                  "2",
+    {FN_2,                  "2",
     { 0,     0,        0,           0 }, 
     { GDK_2, GDK_KP_2, GDK_KP_Down, 0 }},
 
-    {KEY_3,                  "3",
+    {FN_3,                  "3",
     { 0,     0,        0,                0,       0 },
     { GDK_3, GDK_KP_3, GDK_KP_Page_Down, GDK_R15, 0 }},
 
-    {KEY_4,                  "4",
+    {FN_4,                  "4",
     { 0,     0,        0,           0 },
     { GDK_4, GDK_KP_4, GDK_KP_Left, 0 }},
 
-    {KEY_5,                  "5",
+    {FN_5,                  "5",
     { 0,     0,        0,            0,       0 },
     { GDK_5, GDK_KP_5, GDK_KP_Begin, GDK_R11, 0 }},
 
-    {KEY_6,                  "6",
+    {FN_6,                  "6",
     { 0,     0,        0,            0 },
     { GDK_6, GDK_KP_6, GDK_KP_Right, 0 }},
 
-    {KEY_7,                  "7",
+    {FN_7,                  "7",
     { 0,     0,        0,           0,      0 },
     { GDK_7, GDK_KP_7, GDK_KP_Home, GDK_R7, 0 }},
 
-    {KEY_8,                  "8",
+    {FN_8,                  "8",
     { 0,     0,        0,         0 },
     { GDK_8, GDK_KP_8, GDK_KP_Up, 0 }},
 
-    {KEY_9,                  "9",
+    {FN_9,                  "9",
     { 0,     0,        0,              0,      0 },
     { GDK_9, GDK_KP_9, GDK_KP_Page_Up, GDK_R9, 0 }},
 
-    {KEY_A,                  "a",
+    {FN_A,                  "a",
     { 0,     0 },
     { GDK_a, 0 }},
 
-    {KEY_B,                  "b",
+    {FN_B,                  "b",
     { 0,     0 },
     { GDK_b, 0 }},
 
-    {KEY_C,                  "c",
+    {FN_C,                  "c",
     { 0,     0 },
     { GDK_c, 0 }},
 
-    {KEY_D,                  "d",
+    {FN_D,                  "d",
     { 0,     0 },
     { GDK_d, 0 }},
 
-    {KEY_E,                  "e",
+    {FN_E,                  "e",
     { 0,     0 },
     { GDK_e, 0 }},
 
-    {KEY_F,                  "f",
+    {FN_F,                  "f",
     { 0,     0 },
     { GDK_f, 0 }},
 
-    {KEY_CLEAR,              "clear_simple",
+    {FN_CLEAR,              "clear_simple",
     { 0,          0 },
     { GDK_Delete, 0 }},
     
-    {KEY_CLEAR,              "clear_advanced",
+    {FN_CLEAR,              "clear_advanced",
     { 0,          0 },
     { GDK_Delete, 0 }},
 
-    {KEY_SHIFT,              "shift_left",
+    {FN_SHIFT,              "shift_left",
     { 0,        0 },
     { GDK_less, 0 }},
 
-    {KEY_SHIFT,              "shift_right",
+    {FN_SHIFT,              "shift_right",
     { 0,           0 },
     { GDK_greater, 0 }},
 
-    {KEY_SET_ACCURACY,       "accuracy",
+    {FN_SET_ACCURACY,       "accuracy",
     { 0,     0 },
     { GDK_A, 0 }},
 
-    {KEY_CONSTANT,           "constants",
+    {FN_CONSTANT,           "constants",
     { 0,              0 },
     { GDK_numbersign, 0 }},
 
-    {KEY_FUNCTION,           "functions",
+    {FN_FUNCTION,           "functions",
     { 0,     0 },
     { GDK_F, 0 }},
 
-    {KEY_STORE,              "store",
+    {FN_STORE,              "store",
     { 0,     0 },
     { GDK_S, 0 }},
 
-    {KEY_RECALL,             "recall",
+    {FN_RECALL,             "recall",
     { 0,     0 },
     { GDK_R, 0 }},
 
-    {KEY_EXCHANGE,           "exchange",
+    {FN_EXCHANGE,           "exchange",
     { 0,     0 },
     { GDK_X, 0 }},
 
-    {KEY_CLEAR_ENTRY,        "clear_entry_simple",
+    {FN_CLEAR_ENTRY,        "clear_entry_simple",
     { GDK_CONTROL_MASK, 0,          0 },
     { GDK_BackSpace,    GDK_Escape, 0 }},
 
-    {KEY_CLEAR_ENTRY,        "clear_entry_advanced",
+    {FN_CLEAR_ENTRY,        "clear_entry_advanced",
     { GDK_CONTROL_MASK, 0,          0 },
     { GDK_BackSpace,    GDK_Escape, 0 }},
 
-    {KEY_BACKSPACE,          "backspace_simple",
+    {FN_BACKSPACE,          "backspace_simple",
     { 0,             0 },
     { GDK_BackSpace, 0 }},
 
-    {KEY_BACKSPACE,          "backspace_advanced",
+    {FN_BACKSPACE,          "backspace_advanced",
     { 0,             0 },
     { GDK_BackSpace, 0 }},
     
-    {KEY_NUMERIC_POINT,      "numeric_point",
+    {FN_NUMERIC_POINT,      "numeric_point",
     { 0,          0,              0,             0,                0 },
     { GDK_period, GDK_KP_Decimal, GDK_KP_Delete, GDK_KP_Separator, 0 }},
 
-    {KEY_CALCULATE,          "result",
+    {FN_CALCULATE,          "result",
     { 0,         0,            0,          0 },
     { GDK_equal, GDK_KP_Enter, GDK_Return, 0 }},
 
-    {KEY_START_BLOCK,        "start_group",
+    {FN_START_BLOCK,        "start_group",
     { 0,             0 },
     { GDK_parenleft, 0 }},
 
-    {KEY_END_BLOCK,          "end_group",
+    {FN_END_BLOCK,          "end_group",
     { 0,              0 },
     { GDK_parenright, 0 }},
 
-    {KEY_ADD,                "add",
+    {FN_ADD,                "add",
     { 0,        0,          0 },
     { GDK_plus, GDK_KP_Add, 0 }},
 
-    {KEY_SUBTRACT,           "subtract",
+    {FN_SUBTRACT,           "subtract",
     { 0,         0,               0,      0 },
     { GDK_minus, GDK_KP_Subtract, GDK_R4, 0 }},
 
-    {KEY_MULTIPLY,           "multiply",
+    {FN_MULTIPLY,           "multiply",
     { 0,            0,            0,               0,      0 },
     { GDK_asterisk, GDK_multiply, GDK_KP_Multiply, GDK_R6, 0 }},
 
-    {KEY_DIVIDE,             "divide",
+    {FN_DIVIDE,             "divide",
     { 0,         0,            0,             0,      0 },
     { GDK_slash, GDK_division, GDK_KP_Divide, GDK_R5, 0 }},
 
-    {KEY_CHANGE_SIGN,        "change_sign_simple",
+    {FN_CHANGE_SIGN,        "change_sign_simple",
     { 0,     0 },
     { GDK_C, 0 }},
 
-    {KEY_CHANGE_SIGN,        "change_sign_advanced",
+    {FN_CHANGE_SIGN,        "change_sign_advanced",
     { 0,     0 },
     { GDK_C, 0 }},
 
-    {KEY_INTEGER,            "integer_portion",
+    {FN_INTEGER,            "integer_portion",
     { 0,     0 },
     { GDK_i, 0 }},
 
-    {KEY_FRACTION,           "fractional_portion",
+    {FN_FRACTION,           "fractional_portion",
     { 0,         0 },
     { GDK_colon, 0 }},
 
-    {KEY_PERCENTAGE,         "percentage",
+    {FN_PERCENTAGE,         "percentage",
     { 0,           0 },
     { GDK_percent, 0 }},
 
-    {KEY_SQUARE,             "square",
+    {FN_SQUARE,             "square",
     { 0,      0 },
     { GDK_at, 0 }},
 
-    {KEY_SQUARE_ROOT,        "sqrt",
+    {FN_SQUARE_ROOT,        "sqrt",
     { 0,     0 },
     { GDK_s, 0 }},
 
-    {KEY_RECIPROCAL,         "reciprocal",
+    {FN_RECIPROCAL,         "reciprocal",
     { 0,     0 },
     { GDK_r, 0 }},
 
-    {KEY_ABSOLUTE_VALUE,     "abs",
+    {FN_ABSOLUTE_VALUE,     "abs",
     { 0,     0 },
     { GDK_u, 0 }},
 
-    {KEY_MASK_16,            "mask_16",
+    {FN_MASK_16,            "mask_16",
     { 0,                0 },
     { GDK_bracketright, 0 }},
 
-    {KEY_MASK_32,            "mask_32",
+    {FN_MASK_32,            "mask_32",
     { 0,               0 },
     { GDK_bracketleft, 0 }},
 
-    {KEY_MODULUS_DIVIDE,     "modulus_divide",
+    {FN_MODULUS_DIVIDE,     "modulus_divide",
     { 0,     0 },
     { GDK_M, 0 }},
 
-    {KEY_EXPONENTIAL,        "exponential",
+    {FN_EXPONENTIAL,        "exponential",
     { 0,     0 },
     { GDK_E, 0 }},
 
-    {KEY_FACTORIAL,          "factorial",
+    {FN_FACTORIAL,          "factorial",
     { 0,          0 },
     { GDK_exclam, 0 }},
 
-    {KEY_RANDOM,             "random",
+    {FN_RANDOM,             "random",
     { 0,            0 },
     { GDK_question, 0 }},
 
-    {KEY_NOT,                "not",
+    {FN_NOT,                "not",
     { 0,              0 },
     { GDK_asciitilde, 0 }},
 
-    {KEY_OR,                 "or",
+    {FN_OR,                 "or",
     { 0,       0 },
     { GDK_bar, 0 }},
 
-    {KEY_AND,                "and",
+    {FN_AND,                "and",
     { 0,             0 },
     { GDK_ampersand, 0 }},
 
-    {KEY_XOR,                "xor",
+    {FN_XOR,                "xor",
     { 0,     0 },
     { GDK_x, 0 }},
 
-    {KEY_XNOR,               "xnor",
+    {FN_XNOR,               "xnor",
     { 0,     0 },
     { GDK_braceleft, 0 }},
 
-    {KEY_FINC_CTRM,          "finc_compounding_term",
+    {FN_FINC_CTRM,          "finc_compounding_term",
     { 0,     0 },
     { GDK_m, 0 }},
 
-    {KEY_FINC_DDB,           "finc_double_declining_depreciation",
+    {FN_FINC_DDB,           "finc_double_declining_depreciation",
     { 0,     0 },
     { GDK_D, 0 }},
 
-    {KEY_FINC_FV,            "finc_future_value",
+    {FN_FINC_FV,            "finc_future_value",
     { 0,     0 },
     { GDK_v, 0 }},
 
-    {KEY_FINC_GPM,           "finc_gross_profit_margin",
+    {FN_FINC_GPM,           "finc_gross_profit_margin",
     { 0,     0 },
     { GDK_I, 0 }},
 
-    {KEY_FINC_PMT,           "finc_periodic_payment",
+    {FN_FINC_PMT,           "finc_periodic_payment",
     { 0,     0 },
     { GDK_P, 0 }},
 
-    {KEY_FINC_PV,            "finc_present_value",
+    {FN_FINC_PV,            "finc_present_value",
     { 0,     0 },
     { GDK_p, 0 }},
 
-    {KEY_FINC_RATE,          "finc_periodic_interest_rate",
+    {FN_FINC_RATE,          "finc_periodic_interest_rate",
     { 0,     0 },
     { GDK_T, 0 }},
 
-    {KEY_FINC_SLN,           "finc_straight_line_depreciation",
+    {FN_FINC_SLN,           "finc_straight_line_depreciation",
     { 0,     0 },
     { GDK_l, 0 }},
 
-    {KEY_FINC_SYD,           "finc_sum_of_the_years_digits_depreciation",
+    {FN_FINC_SYD,           "finc_sum_of_the_years_digits_depreciation",
     { 0,     0 },
     { GDK_Y, 0 }},
 
-    {KEY_FINC_TERM,          "finc_term",
+    {FN_FINC_TERM,          "finc_term",
     { 0,     0 },
     { GDK_t, 0 }},
 };
@@ -386,59 +386,59 @@
 
 /* All functions that share widget with other functions. */
 static struct button_widget widgetless_buttons[] = {
-    {KEY_SIN,                "sine",
+    {FN_SIN,                "sine",
     { 0,     0 },
     { GDK_k, 0 }},
 
-    {KEY_ASIN,                "sine",
+    {FN_ASIN,                "sine",
     { 0,     0 },
     { GDK_K, 0 }},
 
-    {KEY_COS,                "cosine",
+    {FN_COS,                "cosine",
     { 0,     0 },
     { GDK_j, 0 }},
 
-    {KEY_ACOS,                "cosine",
+    {FN_ACOS,                "cosine",
     { 0,     0 },
     { GDK_J, 0 }},
 
-    {KEY_TAN,                "tangent",
+    {FN_TAN,                "tangent",
     { 0,     0 },
     { GDK_w, 0 }},
 
-    {KEY_ATAN,                "tangent",
+    {FN_ATAN,                "tangent",
     { 0,     0 },
     { GDK_W, 0 }},
 
-    {KEY_NATURAL_LOGARITHM,  "natural_logarithm",
+    {FN_NATURAL_LOGARITHM,  "natural_logarithm",
     { 0,     0 },
     { GDK_n, 0 }},
 
-    {KEY_E_POW_X,            "pow_e",
+    {FN_E_POW_X,            "pow_e",
     { 0,             0 },
     { GDK_N, 0 }},
 
-    {KEY_LOGARITHM,          "logarithm",
+    {FN_LOGARITHM,          "logarithm",
     { 0,     0 },
     { GDK_g, 0 }},
 
-    {KEY_10_POW_X,           "pow_10",
+    {FN_10_POW_X,           "pow_10",
     { 0,              0 },
     { GDK_G, 0 }},
 
-    {KEY_LOGARITHM2,         "logarithm2",
+    {FN_LOGARITHM2,         "logarithm2",
     { 0,     0 },
     { GDK_h, 0 }},
 
-    {KEY_2_POW_X,            "logarithm2",
+    {FN_2_POW_X,            "logarithm2",
     { 0,     0 },
     { GDK_H, 0 }},
 
-    {KEY_X_POW_Y,            "x_pow_y",
+    {FN_X_POW_Y,            "x_pow_y",
     { 0,     0,         0,               0 },
     { GDK_o, GDK_caret, GDK_asciicircum, 0 }},
 
-    {KEY_X_POW_Y_INV,        "x_pow_y",
+    {FN_X_POW_Y_INV,        "x_pow_y",
     { 0,     0 },
     { GDK_O, 0 }},
 };
@@ -604,7 +604,7 @@
         N_("Hyperbolic Sine [k]"),
         /* Translators: The hyperbolic inverse sine tooltip */
         N_("Hyperbolic Inverse Sine [K]")};
-    static int  sine_functions[]    = {KEY_SIN, KEY_ASIN, KEY_SINH, KEY_ASINH};
+    static int  sine_functions[]    = {FN_SIN, FN_ASIN, FN_SINH, FN_ASINH};
     static char *cosine_labels[]    = {
         /* Translators: The cosine button */
         N_("Cos"),
@@ -623,7 +623,7 @@
         N_("Hyperbolic Cosine [j]"),
         /* Translators: The hyperbolic inverse cosine tooltip */
         N_("Hyperbolic Inverse Cosine [J]")};
-    static int  cosine_functions[]  = {KEY_COS, KEY_ACOS, KEY_COSH, KEY_ACOSH};
+    static int  cosine_functions[]  = {FN_COS, FN_ACOS, FN_COSH, FN_ACOSH};
     static char *tangent_labels[]   = {
         /* Translators: The tangent button */
         N_("Tan"),
@@ -642,7 +642,7 @@
         N_("Hyperbolic Tangent [w]"),
         /* Translators: The hyperbolic inverse tangent tooltip */
         N_("Hyperbolic Inverse Tangent [W]")};
-    static int  tangent_functions[] = {KEY_TAN, KEY_ATAN, KEY_TANH, KEY_ATANH};
+    static int  tangent_functions[] = {FN_TAN, FN_ATAN, FN_TANH, FN_ATANH};
     
 	static char *ln_labels[]        = {
         /* Translators: The natural logaritm button */
@@ -654,7 +654,7 @@
         N_("Natural log [n]"),
         /* Translators: Tooltip for the e to the power of x button */
         N_("e to the power of the displayed value [N]")};
-    static int ln_functions[]       = {KEY_NATURAL_LOGARITHM, KEY_E_POW_X};
+    static int ln_functions[]       = {FN_NATURAL_LOGARITHM, FN_E_POW_X};
     
     static char *log_labels[]       = {
         /* Translators: The 10-based logaritm button */
@@ -666,7 +666,7 @@
         N_("Base 10 log [g]"),
         /* Translators: Tooltip for the 10 to the power of x button */
         N_("10 to the power of displayed value [G]")};
-    static int log_functions[]      = {KEY_LOGARITHM, KEY_10_POW_X};
+    static int log_functions[]      = {FN_LOGARITHM, FN_10_POW_X};
     
     static char *log2_labels[]      = {
         /* Translators: The 2-based logaritm button */
@@ -678,7 +678,7 @@
         N_("Base 2 log [h]"),
         /* Translators: Tooltip for the 2 to the power of x button */
         N_("2 to the power of the displayed value [H]")};
-    static int log2_functions[]     = {KEY_LOGARITHM2, KEY_2_POW_X};
+    static int log2_functions[]     = {FN_LOGARITHM2, FN_2_POW_X};
 
     static char *x_pow_y_labels[]   = {
         /* Translators: The x to the power of y button */
@@ -690,7 +690,7 @@
         N_("Raise displayed value to the power of y [o]"),
         /* Translators: Tooltip for the x to the power of reciprocal y button */
         N_("Raise displayed value to the power of reciprocal y [O]")};
-    static int x_pow_y_functions[]  = {KEY_X_POW_Y, KEY_X_POW_Y_INV};
+    static int x_pow_y_functions[]  = {FN_X_POW_Y, FN_X_POW_Y_INV};
     
     int index = 0;
 
@@ -877,23 +877,16 @@
     }
 }
 
-
-static void
-set_bit_panel(void)
+void
+ui_set_bitfield(int enabled, guint64 bits)
 {
     int i;
     const gchar *label;
-    guint64 value;
     
-    if (!display_get_unsigned_integer(&v->display, &value))
-    {
-        gtk_widget_set_sensitive(X->bit_panel, FALSE);        
-        return;
-    }
-    gtk_widget_set_sensitive(X->bit_panel, TRUE);
+    gtk_widget_set_sensitive(X->bit_panel, enabled);
 
     for (i = 0; i < MAXBITS; i++) {
-        if (value & (1LL << (MAXBITS-i-1)))
+        if (bits & (1LL << (MAXBITS-i-1)))
             label = " 1";
         else
             label = " 0";
@@ -901,11 +894,9 @@
     }
 }
 
-
 static void do_button(int function, int arg)
 {
     do_expression(function, arg, get_cursor());
-    set_bit_panel();
 }
 
 static void
@@ -931,7 +922,7 @@
 
         ui_set_base(DEC);
         ui_set_numeric_mode(FIX);
-        do_button(KEY_SET_ACCURACY, DEFAULT_ACCURACY);
+        do_button(FN_SET_ACCURACY, DEFAULT_ACCURACY);
         ui_set_show_thousands_separator(FALSE);
         ui_set_show_trailing_zeroes(FALSE);
         ui_make_registers();
@@ -1382,7 +1373,7 @@
 disp_cb(GtkWidget *widget)
 {
     if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
-        do_button(KEY_SET_NUMBERTYPE, (int)g_object_get_data(G_OBJECT(widget), "numeric_mode"));
+        do_button(FN_SET_NUMBERTYPE, (int)g_object_get_data(G_OBJECT(widget), "numeric_mode"));
 }
 
 
@@ -1394,7 +1385,7 @@
 
     base = (enum base_type) g_object_get_data(G_OBJECT(widget), "base_mode");
     if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-        do_button(KEY_SET_BASE, base);
+        do_button(FN_SET_BASE, base);
     }
 }
 
@@ -1430,7 +1421,7 @@
 constant_menu_cb(GtkMenuItem *menu)
 {
     int arg = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu), "constant_id"));
-    do_button(KEY_CONSTANT, arg);
+    do_button(FN_CONSTANT, arg);
 }
 
 
@@ -1439,7 +1430,7 @@
 function_menu_cb(GtkMenuItem *menu)
 {
     int arg = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu), "function_id"));
-    do_button(KEY_FUNCTION, arg);
+    do_button(FN_FUNCTION, arg);
 }
 
 
@@ -1448,7 +1439,7 @@
 store_menu_cb(GtkMenuItem *menu)
 {
     int arg = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu), "register_id"));
-    do_button(KEY_STORE, arg);
+    do_button(FN_STORE, arg);
 }
 
 
@@ -1457,7 +1448,7 @@
 recall_menu_cb(GtkMenuItem *menu)
 {
     int arg = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu), "register_id"));
-    do_button(KEY_RECALL, arg);
+    do_button(FN_RECALL, arg);
 }
 
 
@@ -1466,7 +1457,7 @@
 exchange_menu_cb(GtkMenuItem *menu)
 {
     int arg = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu), "register_id"));
-    do_button(KEY_EXCHANGE, arg);
+    do_button(FN_EXCHANGE, arg);
 }
 
 
@@ -1771,37 +1762,13 @@
 }
 
 
-// FIXME: Move out of gtk.c
 /*ARGSUSED*/
 static gboolean
 bit_toggle_cb(GtkWidget *event_box, GdkEventButton *event)
 {
-    guint64 value;
     int index;
-    const gchar *text;
-    char buf[MAX_DISPLAY];
-    int MP[MP_SIZE];
-    
     index = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(event_box), "bit_index"));
-    assert(display_get_unsigned_integer(&v->display, &value));
-    value ^= (1LL << (MAXBITS - index - 1));
-    
-    /* FIXME: Convert to since we don't support setting MP numbers from 64 bit integers */
-    SNPRINTF(buf, MAX_DISPLAY, "%llu", value);
-    MPstr_to_num(buf, 10, MP);
-
-    /* FIXME: Set as string as display_set_number doesn't store correctly */
-    make_number(buf, MAX_DISPLAY, MP, v->base, FALSE);
-    display_set_string(&v->display, buf, -1);
-    display_refresh(&v->display);
-
-    text = gtk_label_get_text(GTK_LABEL(X->bits[index]));
-    if (strcmp(text, " 0") == 0)
-        text = " 1";
-    else
-        text = " 0";        
-    gtk_label_set_text(GTK_LABEL(X->bits[index]), text);
-
+    do_button(FN_TOGGLE_BIT, index);
     return (TRUE);
 }
 
@@ -1924,8 +1891,7 @@
 trig_cb(GtkWidget *widget)
 {
     if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
-        do_trigtype((enum trig_type) g_object_get_data(G_OBJECT(widget),
-                                                       "trig_mode"));
+        do_button(FN_SET_TRIG_TYPE, (int)g_object_get_data(G_OBJECT(widget), "trig_mode"));
 }
 
 
@@ -2026,34 +1992,34 @@
                                       v->modetype == PROGRAMMING)) {
         switch (event->keyval) {
             case GDK_0:
-                do_button(KEY_SET_ACCURACY, 0);
+                do_button(FN_SET_ACCURACY, 0);
                 return (TRUE);
             case GDK_1:
-                do_button(KEY_SET_ACCURACY, 1);
+                do_button(FN_SET_ACCURACY, 1);
                 return (TRUE);
             case GDK_2:
-                do_button(KEY_SET_ACCURACY, 2);
+                do_button(FN_SET_ACCURACY, 2);
                 return (TRUE);
             case GDK_3:
-                do_button(KEY_SET_ACCURACY, 3);
+                do_button(FN_SET_ACCURACY, 3);
                 return (TRUE);
             case GDK_4:
-                do_button(KEY_SET_ACCURACY, 4);
+                do_button(FN_SET_ACCURACY, 4);
                 return (TRUE);
             case GDK_5:
-                do_button(KEY_SET_ACCURACY, 5);
+                do_button(FN_SET_ACCURACY, 5);
                 return (TRUE);
             case GDK_6:
-                do_button(KEY_SET_ACCURACY, 6);
+                do_button(FN_SET_ACCURACY, 6);
                 return (TRUE);
             case GDK_7:
-                do_button(KEY_SET_ACCURACY, 7);
+                do_button(FN_SET_ACCURACY, 7);
                 return (TRUE);
             case GDK_8:
-                do_button(KEY_SET_ACCURACY, 8);
+                do_button(FN_SET_ACCURACY, 8);
                 return (TRUE);
             case GDK_9:
-                do_button(KEY_SET_ACCURACY, 9);
+                do_button(FN_SET_ACCURACY, 9);
                 return (TRUE);
         }
     }
@@ -2071,7 +2037,7 @@
     
     /* Delete in display */
     if (event->keyval == GDK_Delete && state == 0) {
-        do_button(KEY_DELETE, 0);
+        do_button(FN_DELETE, 0);
         return (TRUE);
     }
 
@@ -2272,7 +2238,7 @@
 static void
 undo_cb(GtkWidget *widget)
 {
-    do_button(KEY_UNDO, 0);
+    do_button(FN_UNDO, 0);
 }
 
 
@@ -2280,7 +2246,7 @@
 static void
 redo_cb(GtkWidget *widget)
 {
-    do_button(KEY_REDO, 0);    
+    do_button(FN_REDO, 0);    
     display_set_cursor(&v->display, -1);
     display_refresh(&v->display);
 }
@@ -2332,7 +2298,7 @@
 {
     int count = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), 
                                                    "shiftcount"));
-    do_button(KEY_SHIFT, count);
+    do_button(FN_SHIFT, count);
 }
 
 
@@ -2368,7 +2334,7 @@
     int count;
     count = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "accuracy"));
     if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) {
-        do_button(KEY_SET_ACCURACY, count);
+        do_button(FN_SET_ACCURACY, count);
     }
 }
 
@@ -2389,7 +2355,7 @@
 static void
 accuracy_default_cb(GtkWidget *widget)
 {
-    do_button(KEY_SET_ACCURACY, DEFAULT_ACCURACY);
+    do_button(FN_SET_ACCURACY, DEFAULT_ACCURACY);
 }
 
 
@@ -2419,7 +2385,7 @@
     int val;
     if (response_id == GTK_RESPONSE_OK) {
         val = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(X->precision_spin));
-        do_button(KEY_SET_ACCURACY, val);
+        do_button(FN_SET_ACCURACY, val);
     }
     
     gtk_widget_hide(dialog);
@@ -2542,6 +2508,7 @@
     CONNECT_SIGNAL(hyp_cb);
     CONNECT_SIGNAL(base_cb);
     CONNECT_SIGNAL(disp_cb);
+    CONNECT_SIGNAL(trig_cb);    
     CONNECT_SIGNAL(quit_cb);
     CONNECT_SIGNAL(edit_cb);
     CONNECT_SIGNAL(copy_cb);

Modified: trunk/gcalctool/ui.h
==============================================================================
--- trunk/gcalctool/ui.h	(original)
+++ trunk/gcalctool/ui.h	Sat Nov 29 09:32:44 2008
@@ -23,6 +23,8 @@
 #ifndef UI_H
 #define UI_H
 
+#include <stdint.h>
+
 #include "calctool.h"
 
 void ui_init(int *argc, char ***argv);
@@ -33,6 +35,7 @@
 void ui_set_undo_enabled(gboolean, gboolean);
 
 void ui_set_display(char *, int);
+void ui_set_bitfield(int enabled, guint64 bits);
 gchar *ui_get_display(void);
 
 void ui_set_registers_visible(gboolean);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]