From 1feb8316d9fafd2d84ed23ece3ffd0d1e7a15e66 Mon Sep 17 00:00:00 2001 From: Ajax Date: Sat, 28 Apr 2018 21:38:54 -0400 Subject: [PATCH] Fixed bug where negative sign infront of parenthesis as first character was parsed incorrectly --- keyboards/dz60/keymaps/60_calc/keymap.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/keyboards/dz60/keymaps/60_calc/keymap.c b/keyboards/dz60/keymaps/60_calc/keymap.c index 1e9860c591..dc126223ed 100644 --- a/keyboards/dz60/keymaps/60_calc/keymap.c +++ b/keyboards/dz60/keymaps/60_calc/keymap.c @@ -148,12 +148,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; static char backspaceText[BUFFER_SIZE + 1]; // Pretty dumb waste of memory because only backspace characters, used with send_string to backspace and remove input -static char text[BUFFER_SIZE + 1]; // Used to store input and then output when ready to print -static unsigned char inputLocation = 0; // Current index in text input +static char text[BUFFER_SIZE + 1] = {[0] = '0'}; // Used to store input and then output when ready to print +static unsigned char inputLocation = 1; // Current index in text input -/*----- - Known Problem: A negative sign before an open parenthesis as the first character in the input such as "-(4+3)" will not be parsed correctly, a very hacky solution would be to force the first character of the input to be a 0 ------*/ double calc(char input[]) // Finds value of input char array, relatively small and fast I think { char inputToken[BUFFER_SIZE + 1]; // Input buffer, used when a single token (generally a number) takes up more @@ -213,7 +210,7 @@ double calc(char input[]) // Finds value of input char array, relatively small a tokens[tokenCount].raw.op.priority = PRIO_DIV; break; case CHAR_EXP: - tokens[tokenCount].raw.op.priority = PRIO_EXP + tokens[tokenCount].raw.op.priority = PRIO_EXP; tokens[tokenCount].raw.op.ltr = false; break; case CHAR_SIN: @@ -501,7 +498,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) characterPressed = '.'; break; case KC_BSPC: - if(inputLocation > 0) + if(inputLocation > 1) { inputLocation--; } @@ -514,7 +511,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) forceReturnTrue = true; break; case CALC: - for(int i = 0; i < inputLocation; i++) + for(int i = 0; i < inputLocation - 1; i++) { backspaceText[i] = (char)8; } @@ -526,6 +523,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) text[i] = '\0'; backspaceText[i] = '\0'; } + text[0] = '0'; // Fixes error with + inputLocation = 1; // Restart at one to ensure the first character is a 0 break; case ENDCALC: layer_state = 0; @@ -584,3 +583,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) return true; } } +