From 77a92c3204b95eaf2870605718b9099ab6ece56a Mon Sep 17 00:00:00 2001
From: nancy.liao <huihui.liao@greentest.com.cn>
Date: 周一, 26 5月 2025 08:41:11 +0800
Subject: [PATCH] 匹配时添加了一个当前索引项

---
 libscpi/inc/scpi/externinterface.h |    6 +++++-
 libscpi/inc/scpi/types.h           |    1 -
 libscpi/src/parser.c               |   10 ++++++----
 libscpi/inc/scpi/parser.h          |    2 +-
 CMakeLists.txt                     |    2 +-
 libscpi/src/externinterface.cpp    |   25 +++++++++++++++++++++----
 6 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 58b4f6d..e2b7e79 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,7 @@
         "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/libscpi/inc>"
 )
 
-target_link_libraries(scpi_static PRIVATE Qt::Core)
+
 
 project(scpi_static LANGUAGES CXX)
 
diff --git a/libscpi/inc/scpi/externinterface.h b/libscpi/inc/scpi/externinterface.h
index 9fc8280..d38a740 100644
--- a/libscpi/inc/scpi/externinterface.h
+++ b/libscpi/inc/scpi/externinterface.h
@@ -1,6 +1,5 @@
 #ifndef EXTERNINTERFACE_H
 #define EXTERNINTERFACE_H
-
 //杩欎釜绫荤敤鍦ㄥ仛SCPI鍛戒护鐨勮娉曞垎鏋�,浼氬皢璇嶆硶鍖归厤鐨勭粨鏋滆繑鍥炵粰SCPI搴�
 #ifdef __cplusplus
 extern "C"
@@ -20,6 +19,8 @@
 {
     CSegment* segments;
     int segments_count;
+    char* commandData;
+
 } CPatternResult;
 
 
@@ -27,7 +28,10 @@
 void parse_pattern_global(const char* pattern);
 int get_pattern_count();
 void clear_global_patterns();
+void clearCurrentGroup();
+void setCurrentIndex(int index);
 
+char* currentPattern();
 
 #ifdef __cplusplus
 }
diff --git a/libscpi/inc/scpi/parser.h b/libscpi/inc/scpi/parser.h
index 5cade1e..de89f7c 100644
--- a/libscpi/inc/scpi/parser.h
+++ b/libscpi/inc/scpi/parser.h
@@ -64,7 +64,7 @@
 #if USE_DEVICE_DEPENDENT_ERROR_INFORMATION && !USE_MEMORY_ALLOCATION_FREE
     void SCPI_InitHeap(scpi_t * context, char * error_info_heap, size_t error_info_heap_length);
 #endif
-    scpi_bool_t findCommandHeader(scpi_t * context, const char * header,int len);
+    scpi_bool_t findCommandHeader(scpi_t * context, const char * header);
     scpi_bool_t SCPI_Input(scpi_t * context, const char * data, int len);
     scpi_bool_t SCPI_Parse(scpi_t * context, char * data, int len);
 
diff --git a/libscpi/inc/scpi/types.h b/libscpi/inc/scpi/types.h
index d2fe6d2..c595f68 100644
--- a/libscpi/inc/scpi/types.h
+++ b/libscpi/inc/scpi/types.h
@@ -475,7 +475,6 @@
         int SCPIerror;
         //澧炲姞浜嗕竴涓懡浠ゅ垪琛ㄧ殑闀垮害 闃叉闈炴硶瓒婄晫
         int cmdlistSize;
-
     };
 
     enum _scpi_array_format_t {
diff --git a/libscpi/src/externinterface.cpp b/libscpi/src/externinterface.cpp
index 15153ed..1713166 100644
--- a/libscpi/src/externinterface.cpp
+++ b/libscpi/src/externinterface.cpp
@@ -8,7 +8,12 @@
 #include <sstream>
 
 CPatternResult* g_pattern_results = new (std::nothrow) CPatternResult();
+
 int g_pattern_count = 0;
+
+//static std::vector<std::string_view> currentCommandGroup;
+
+static int currentIndex;
 
 class Segment {
 public:
@@ -221,8 +226,12 @@
     }
 };
 
+char* currentPattern()
+{
+    return g_pattern_results[currentIndex].commandData;
+}
 // 鍏ㄥ眬绠$悊鍑芥暟瀹炵幇
-void add_pattern_to_global(const std::vector<Segment>& segments)
+void add_pattern_to_global(const char* pattern, const std::vector<Segment>& segments)
 {
     // 閲嶆柊鍒嗛厤鍐呭瓨
     CPatternResult* new_results = new CPatternResult[g_pattern_count + 1];
@@ -237,7 +246,6 @@
     CPatternResult& new_item = new_results[g_pattern_count];
     new_item.segments_count = static_cast<int>(segments.size());
     new_item.segments = new CSegment[segments.size()];
-
     for (size_t i = 0; i < segments.size(); ++i)
     {
         const auto& seg = segments[i];
@@ -281,14 +289,23 @@
 
 int get_pattern_count() { return g_pattern_count; }
 
-
+void clearCurrentGroup()
+{
+    currentIndex = -1;
+    //currentCommandGroup.clear();
+}
 void parse_pattern_global(const char* pattern)
 {
     auto segments = PatternParser::extract_all_segments(pattern);
-    add_pattern_to_global(segments);
+    add_pattern_to_global(pattern,segments);
 }
 
+void setCurrentIndex(int index)
+{
+    currentIndex = index;
+}
 
+//pattern_index  鍖归厤缁勭殑涓嬫爣
 int match_segments_global(const char* input, int pattern_index)
 {
     if (pattern_index < 0 || pattern_index >= g_pattern_count)
diff --git a/libscpi/src/parser.c b/libscpi/src/parser.c
index 8530871..5e34d1c 100644
--- a/libscpi/src/parser.c
+++ b/libscpi/src/parser.c
@@ -57,7 +57,7 @@
 static size_t writeData(scpi_t * context, const char * data, size_t len) {
     if ((len > 0) && (data != NULL)) {
         return 0;
-       // return context->interface->write(context, data, len);
+        return context->interface->write(context, data, len);
     } else {
         return 0;
     }
@@ -180,7 +180,7 @@
  * @param context
  * @result TRUE if context->paramlist is filled with correct values
  */
-scpi_bool_t findCommandHeader(scpi_t * context, const char * header,int len)
+scpi_bool_t findCommandHeader(scpi_t * context, const char * header)
 {
     //鍙傛暟宸茬粡鍦ㄥ墠闈㈤儴鍒嗚В鏋愬畬鎴�,鍖归厤鍛戒护鏃跺氨涓嶅啀闇�瑕佸弬鏁伴儴鍒� 灏嗗懡浠ゆ媶闄ゅ嵆鍙�
     char *header_copy = strdup(header);
@@ -190,12 +190,13 @@
     {
         if( match_segments_global(first_part,i) )
         {
+            setCurrentIndex(i);
             context->param_list.cmd = &context->cmdlist[i];
             free(header_copy);
             return TRUE;
         }
     }
-    context->SCPIerror = RETURN_NotFind;
+     context->SCPIerror = RETURN_NotFind;
     return FALSE;
 }
 
@@ -245,7 +246,7 @@
             //鍛戒护鏈夋晥寮�濮嬪鐞�
             composeCompoundCommand(&cmd_prev, &state->programHeader);
             //鏌ユ壘鍛戒护鍚庡苟涓旇缃В鏋愮姸鎬佸苟涓旀墽琛屽懡浠�
-            if (findCommandHeader(context, state->programHeader.ptr, state->programHeader.len)) {
+            if (findCommandHeader(context, state->programHeader.ptr)) {
 
                 context->param_list.lex_state.buffer = state->programData.ptr;
                 context->param_list.lex_state.pos = context->param_list.lex_state.buffer;
@@ -361,6 +362,7 @@
  */
 scpi_bool_t SCPI_Input(scpi_t * context, const char * data, int len)
 {
+    clearCurrentGroup();
     scpi_bool_t result = FALSE;
     size_t totcmdlen = 0;
     int cmdlen = 0;

--
Gitblit v1.9.1