]> sigrok.org Git - libsigrok.git/commitdiff
sr: add period parser
authorBert Vermeulen <redacted>
Tue, 15 May 2012 18:46:14 +0000 (20:46 +0200)
committerBert Vermeulen <redacted>
Wed, 30 May 2012 21:56:12 +0000 (23:56 +0200)
sigrok-proto.h
strutil.c

index df31b90d819223d8768cf310ad4955e3d8a03125..d5a9adb9373067aa9b7028ce123bc5d14379ba42 100644 (file)
@@ -119,6 +119,7 @@ SR_API char **sr_parse_triggerstring(struct sr_dev *dev,
 SR_API int sr_parse_sizestring(const char *sizestring, uint64_t *size);
 SR_API uint64_t sr_parse_timestring(const char *timestring);
 SR_API gboolean sr_parse_boolstring(const char *boolstring);
+SR_API int sr_parse_period(const char *periodstr, struct sr_rational *r);
 
 /*--- version.c -------------------------------------------------------------*/
 
index cb51b2ab72ae241e42b0f96662bc52f531cedb15..ea69a2af628b43a6be95c7977863336fbe5da3c1 100644 (file)
--- a/strutil.c
+++ b/strutil.c
@@ -314,3 +314,33 @@ SR_API gboolean sr_parse_boolstring(const char *boolstr)
 
        return FALSE;
 }
+
+SR_API int sr_parse_period(const char *periodstr, struct sr_rational *r)
+{
+       char *s;
+
+       r->p = strtoull(periodstr, &s, 10);
+       if (r->p == 0 && s == periodstr)
+               /* No digits found. */
+               return SR_ERR_ARG;
+
+       if (s && *s) {
+               while (*s == ' ')
+                       s++;
+               if (!strcmp(s, "ns"))
+                       r->q = 1000000000L;
+               else if (!strcmp(s, "us"))
+                       r->q = 1000000;
+               else if (!strcmp(s, "ms"))
+                       r->q = 1000;
+               else if (!strcmp(s, "s"))
+                       r->q = 1;
+               else
+                       /* Must have a time suffix. */
+                       return SR_ERR_ARG;
+       }
+
+       return SR_OK;
+}
+
+