Mercurial > hg > th-libs
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)