From c1e514e03ab7de4399ca12c9ae988b0707a99f8b Mon Sep 17 00:00:00 2001
From: Jan Breuer <jan.breuer@jaybee.cz>
Date: 周二, 15 9月 2015 03:13:35 +0800
Subject: [PATCH] Resolve #46: Detect missing parameter

---
 libscpi/src/parser.c      |   21 +++++++++++++++++++++
 libscpi/inc/scpi/parser.h |    2 ++
 2 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/libscpi/inc/scpi/parser.h b/libscpi/inc/scpi/parser.h
index 2402c85..fed317e 100644
--- a/libscpi/inc/scpi/parser.h
+++ b/libscpi/inc/scpi/parser.h
@@ -59,6 +59,8 @@
     size_t SCPI_ResultBool(scpi_t * context, scpi_bool_t val);
    
     scpi_bool_t SCPI_Parameter(scpi_t * context, scpi_parameter_t * parameter, scpi_bool_t mandatory);
+    scpi_bool_t SCPI_ParamIsValid(scpi_parameter_t * parameter);
+    scpi_bool_t SCPI_ParamErrorOccurred(scpi_t * context);
     scpi_bool_t SCPI_ParamIsNumber(scpi_parameter_t * parameter, scpi_bool_t suffixAllowed);
     scpi_bool_t SCPI_ParamToInt(scpi_t * context, scpi_parameter_t * parameter, int32_t * value);
     scpi_bool_t SCPI_ParamToUnsignedInt(scpi_t * context, scpi_parameter_t * parameter, uint32_t * value);
diff --git a/libscpi/src/parser.c b/libscpi/src/parser.c
index c307a37..9032c9c 100644
--- a/libscpi/src/parser.c
+++ b/libscpi/src/parser.c
@@ -1093,3 +1093,24 @@
 scpi_bool_t SCPI_CommandNumbers(scpi_t * context, int32_t * numbers, size_t len) {
     return matchCommand (context->param_list.cmd->pattern,  context->param_list.cmd_raw.data, context->param_list.cmd_raw.length, numbers, len);
 }
+
+/**
+ * If SCPI_Parameter() returns FALSE, this function can detect, if the parameter
+ * is just missing (TRUE) or if there was an error during processing of the command (FALSE)
+ * @param parameter
+ * @return
+ */
+scpi_bool_t SCPI_ParamIsValid(scpi_parameter_t * parameter)
+{
+    return parameter->type == SCPI_TOKEN_UNKNOWN ? FALSE : TRUE;
+}
+
+/**
+ * Returns TRUE if there was an error during parameter handling
+ * @param context
+ * @return
+ */
+scpi_bool_t SCPI_ParamErrorOccurred(scpi_t * context)
+{
+    return context->cmd_error;
+}

--
Gitblit v1.9.1