diff --git a/src/GCodeParser.cpp b/src/GCodeParser.cpp index 72e9ff1..bcbb5f6 100644 --- a/src/GCodeParser.cpp +++ b/src/GCodeParser.cpp @@ -32,6 +32,8 @@ SOFTWARE. void GCodeParser::Initialize() { lineCharCount = 0; + lastPointer = -1; + lastWord = '\0'; line[lineCharCount] = '\0'; comments = line; lastComment = comments; @@ -367,9 +369,11 @@ bool GCodeParser::HasWord(char letter) { return false; } + lastPointer = pointer; + lastWord = letter; + return true; } - - return true; + return false; } char wordLetter[] = { 'A', 'B', 'C', 'D', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\0' }; @@ -470,7 +474,14 @@ bool GCodeParser::NoWords() /// double GCodeParser::GetWordValue(char letter) { - int pointer = FindWord(letter); + int pointer = 0; + if(lastWord == letter && lastPointer >= 0) pointer = lastPointer; + else + { + pointer = FindWord(letter); + lastWord = letter; + lastPointer = pointer; + } if (line[pointer] != '\0') return (double)strtod(&line[pointer + 1], NULL); diff --git a/src/GCodeParser.h b/src/GCodeParser.h index ddceddf..2f9a60a 100644 --- a/src/GCodeParser.h +++ b/src/GCodeParser.h @@ -51,6 +51,8 @@ class GCodeParser { private: int lineCharCount; + int lastPointer = -1; + char lastWord = '\0'; public: char line[MAX_LINE_SIZE + 2];