changeset 172:eb2c073d93b3

Adding floating point configuration item support.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 19 Feb 2015 17:03:00 +0200
parents 9a1353862520
children 503f0cb98775
files th_config.c th_config.h
diffstat 2 files changed, 32 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/th_config.c	Thu Feb 19 15:59:42 2015 +0200
+++ b/th_config.c	Thu Feb 19 17:03:00 2015 +0200
@@ -213,13 +213,13 @@
     char *tmpStr = NULL;
     size_t strPos;
     int c, parseMode, prevMode, nextMode, tmpCh;
-    BOOL isFound, isStart, isError, validError;
+    BOOL isFound, isStart, isError, validError, fpSet;
 
     // Initialize values
     tmpCh = 0;
     strPos = 0;
     c = -1;
-    isFound = isStart = isError = validError = FALSE;
+    fpSet = isFound = isStart = isError = validError = FALSE;
     nextMode = prevMode = parseMode = PM_IDLE;
 
     if ((tmpStr = th_malloc(SET_MAX_BUF + 1)) == NULL)
@@ -387,6 +387,7 @@
                     prevMode = parseMode;
                     parseMode = PM_NEXT;
                     isStart = TRUE;
+                    fpSet = FALSE;
                     strPos = 0;
                 }
                 else
@@ -556,6 +557,24 @@
                 else
                 isError = TRUE;
             }
+            else if (isStart && item->type == ITEM_FLOAT && c == '.')
+            {
+                fpSet = TRUE;
+                VADDCH('0')
+                else
+                isError = TRUE;
+
+                VADDCH(c)
+                else
+                isError = TRUE;
+            }
+            else if (item->type == ITEM_FLOAT && c == '.' && !fpSet)
+            {
+                fpSet = TRUE;
+                VADDCH(c)
+                else
+                isError = TRUE;
+            }
             else if (th_isdigit(c))
             {
                 VADDCH(c)
@@ -575,6 +594,10 @@
                 case ITEM_UINT:
                     *(item->v.val_uint) = atol(tmpStr);
                     break;
+
+                case ITEM_FLOAT:
+                    *(item->v.val_float) = atof(tmpStr);
+                    break;
                 }
 
                 prevMode = parseMode;
@@ -752,6 +775,12 @@
                     return -5;
                 break;
 
+            case ITEM_FLOAT:
+                if (fprintf(ctx->fp, "%s = %1.5f\n",
+                    item->name, *(item->v.val_float)) < 0)
+                    return -5;
+                break;
+
             case ITEM_BOOL:
                 if (fprintf(ctx->fp, "%s = %s\n", item->name,
                     *(item->v.val_bool) ? "yes" : "no") < 0)
--- a/th_config.h	Thu Feb 19 15:59:42 2015 +0200
+++ b/th_config.h	Thu Feb 19 17:03:00 2015 +0200
@@ -44,6 +44,7 @@
         unsigned int *val_uint;
         char **val_str;
         BOOL *val_bool;
+        float *val_float;
 
         void *data;
         th_llist_t **list;