From f1cd7de018b623d19a8f42ac47f0271a28eedcce Mon Sep 17 00:00:00 2001
From: Jan Breuer <jan.breuer@jaybee.cz>
Date: 周日, 19 4月 2015 06:43:16 +0800
Subject: [PATCH] Implement Traversal of the Header Tree. Solve #22

---
 libscpi/src/parser.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/libscpi/src/parser.c b/libscpi/src/parser.c
index 80a4a00..9017bca 100644
--- a/libscpi/src/parser.c
+++ b/libscpi/src/parser.c
@@ -152,10 +152,11 @@
  * @param len - command line length
  * @return 1 if the last evaluated command was found
  */
-int SCPI_Parse(scpi_t * context, const char * data, int len) {
+int SCPI_Parse(scpi_t * context, char * data, int len) {
     int result = 0;
     scpi_parser_state_t * state;
     int r;
+    scpi_token_t cmd_prev = {SCPI_TOKEN_UNKNOWN, NULL, 0};
 
     if (context == NULL) {
         return -1;
@@ -171,6 +172,9 @@
         if (state->programHeader.type == SCPI_TOKEN_INVALID) {
             SCPI_ErrorPush(context, SCPI_ERROR_INVALID_CHARACTER);
         } else if (state->programHeader.len > 0) {
+
+            composeCompoundCommand(&cmd_prev, &state->programHeader);
+
             if (findCommandHeader(context, state->programHeader.ptr, state->programHeader.len)) {
 
                 context->param_list.lex_state.buffer = state->programData.ptr;
@@ -183,6 +187,7 @@
                 processCommand(context);
 
                 result = 1;
+                cmd_prev = state->programHeader;
             } else {
                 SCPI_ErrorPush(context, SCPI_ERROR_UNDEFINED_HEADER);
             }
@@ -414,7 +419,7 @@
  * @param token
  * @param ptr
  */
-static void invalidateToken(scpi_token_t * token, const char * ptr) {
+static void invalidateToken(scpi_token_t * token, char * ptr) {
     token->len = 0;
     token->ptr = ptr;
     token->type = SCPI_TOKEN_UNKNOWN;
@@ -934,7 +939,7 @@
  * @param len
  * @return 
  */
-int scpiParser_detectProgramMessageUnit(scpi_parser_state_t * state, const char * buffer, int len) {
+int scpiParser_detectProgramMessageUnit(scpi_parser_state_t * state, char * buffer, int len) {
     lex_state_t lex_state;
     scpi_token_t tmp;
     int result = 0;

--
Gitblit v1.9.1