From 932061c92277c46278b2b4027e1fdb873e1bc19b Mon Sep 17 00:00:00 2001 From: Jan Breuer <jan.breuer@jaybee.cz> Date: 周二, 04 12月 2012 18:28:17 +0800 Subject: [PATCH] Update README - file structure --- scpi/scpi_utils.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 100 insertions(+), 4 deletions(-) diff --git a/scpi/scpi_utils.c b/scpi/scpi_utils.c index 0815a8c..4546b35 100644 --- a/scpi/scpi_utils.c +++ b/scpi/scpi_utils.c @@ -34,12 +34,14 @@ * */ -#include "scpi.h" -#include "scpi_utils.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> + +#include "scpi_utils.h" + +static size_t patternSeparatorShortPos(const char * pattern, size_t len); /** * Find the first occurrence in str of a character in set. @@ -152,7 +154,7 @@ return FALSE; } -bool_t locateStr(const char * str1, size_t len1, char ** str2, size_t * len2) { +bool_t locateText(const char * str1, size_t len1, char ** str2, size_t * len2) { size_t i; int quot = 0; int32_t strStart = -1; @@ -230,6 +232,68 @@ return valid; } +bool_t locateStr(const char * str1, size_t len1, char ** str2, size_t * len2) { + size_t i; + int32_t strStart = -1; + int32_t strStop = -1; + int valid = 0; + + + for (i = 0; i < len1; i++) { + if ((strStart < 0) && isspace(str1[i])) { + continue; + } + + if (strStart < 0) { + strStart = i; + } + + if (!isspace(str1[i]) && (str1[i] != ',')) { + strStop = i; + } + + if (isspace(str1[i])) { + continue; + } + + if (str1[i] == ',') { + valid = 1; + + if (strStop < 0) { + strStop = i; + } + break; + } + } + + if (i == len1) { + valid = 1; + if (strStop < 0) { + strStop = i; + } else { + strStop++; + } + if (strStart < 0) { + strStart = i; + } + } else { + strStop++; + } + + + if (valid) { + if (str2) { + *str2 = (char *) &str1[strStart]; + } + + if (len2) { + *len2 = strStop - strStart; + } + } + + return valid; +} + /** * Count white spaces from the beggining * @param cmd - command @@ -244,4 +308,36 @@ } } return len; -} \ No newline at end of file +} + + +/** + * Pattern is composed from upper case an lower case letters. This function + * search the first lowercase letter + * @param pattern + * @param len - max search length + * @return position of separator or len + */ +size_t patternSeparatorShortPos(const char * pattern, size_t len) { + size_t i; + for (i = 0; (i < len) && pattern[i]; i++) { + if (islower(pattern[i])) { + return i; + } + } + return i; +} + +/** + * Match pattern and str. Pattern is in format UPPERCASElowercase + * @param pattern + * @param pattern_len + * @param str + * @param str_len + * @return + */ +bool_t matchPattern(const char * pattern, size_t pattern_len, const char * str, size_t str_len) { + int pattern_sep_pos_short = patternSeparatorShortPos(pattern, pattern_len); + return compareStr(pattern, pattern_len, str, str_len) || + compareStr(pattern, pattern_sep_pos_short, str, str_len); +} -- Gitblit v1.9.1