Mercurial > hg > th-libs
comparison th_config.c @ 172:eb2c073d93b3
Adding floating point configuration item support.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 19 Feb 2015 17:03:00 +0200 |
parents | 8e69e07e5aac |
children | 791eaeb4f412 |
comparison
equal
deleted
inserted
replaced
171:9a1353862520 | 172:eb2c073d93b3 |
---|---|
211 { | 211 { |
212 th_cfgitem_t *item = NULL; | 212 th_cfgitem_t *item = NULL; |
213 char *tmpStr = NULL; | 213 char *tmpStr = NULL; |
214 size_t strPos; | 214 size_t strPos; |
215 int c, parseMode, prevMode, nextMode, tmpCh; | 215 int c, parseMode, prevMode, nextMode, tmpCh; |
216 BOOL isFound, isStart, isError, validError; | 216 BOOL isFound, isStart, isError, validError, fpSet; |
217 | 217 |
218 // Initialize values | 218 // Initialize values |
219 tmpCh = 0; | 219 tmpCh = 0; |
220 strPos = 0; | 220 strPos = 0; |
221 c = -1; | 221 c = -1; |
222 isFound = isStart = isError = validError = FALSE; | 222 fpSet = isFound = isStart = isError = validError = FALSE; |
223 nextMode = prevMode = parseMode = PM_IDLE; | 223 nextMode = prevMode = parseMode = PM_IDLE; |
224 | 224 |
225 if ((tmpStr = th_malloc(SET_MAX_BUF + 1)) == NULL) | 225 if ((tmpStr = th_malloc(SET_MAX_BUF + 1)) == NULL) |
226 goto out; | 226 goto out; |
227 | 227 |
385 } | 385 } |
386 | 386 |
387 prevMode = parseMode; | 387 prevMode = parseMode; |
388 parseMode = PM_NEXT; | 388 parseMode = PM_NEXT; |
389 isStart = TRUE; | 389 isStart = TRUE; |
390 fpSet = FALSE; | |
390 strPos = 0; | 391 strPos = 0; |
391 } | 392 } |
392 else | 393 else |
393 { | 394 { |
394 // Error! No configuration key by this name found | 395 // Error! No configuration key by this name found |
554 { | 555 { |
555 VADDCH(c) | 556 VADDCH(c) |
556 else | 557 else |
557 isError = TRUE; | 558 isError = TRUE; |
558 } | 559 } |
560 else if (isStart && item->type == ITEM_FLOAT && c == '.') | |
561 { | |
562 fpSet = TRUE; | |
563 VADDCH('0') | |
564 else | |
565 isError = TRUE; | |
566 | |
567 VADDCH(c) | |
568 else | |
569 isError = TRUE; | |
570 } | |
571 else if (item->type == ITEM_FLOAT && c == '.' && !fpSet) | |
572 { | |
573 fpSet = TRUE; | |
574 VADDCH(c) | |
575 else | |
576 isError = TRUE; | |
577 } | |
559 else if (th_isdigit(c)) | 578 else if (th_isdigit(c)) |
560 { | 579 { |
561 VADDCH(c) | 580 VADDCH(c) |
562 else | 581 else |
563 isError = TRUE; | 582 isError = TRUE; |
572 *(item->v.val_int) = atoi(tmpStr); | 591 *(item->v.val_int) = atoi(tmpStr); |
573 break; | 592 break; |
574 | 593 |
575 case ITEM_UINT: | 594 case ITEM_UINT: |
576 *(item->v.val_uint) = atol(tmpStr); | 595 *(item->v.val_uint) = atol(tmpStr); |
596 break; | |
597 | |
598 case ITEM_FLOAT: | |
599 *(item->v.val_float) = atof(tmpStr); | |
577 break; | 600 break; |
578 } | 601 } |
579 | 602 |
580 prevMode = parseMode; | 603 prevMode = parseMode; |
581 parseMode = PM_IDLE; | 604 parseMode = PM_IDLE; |
747 break; | 770 break; |
748 | 771 |
749 case ITEM_UINT: | 772 case ITEM_UINT: |
750 if (fprintf(ctx->fp, "%s = %d\n", | 773 if (fprintf(ctx->fp, "%s = %d\n", |
751 item->name, *(item->v.val_uint)) < 0) | 774 item->name, *(item->v.val_uint)) < 0) |
775 return -5; | |
776 break; | |
777 | |
778 case ITEM_FLOAT: | |
779 if (fprintf(ctx->fp, "%s = %1.5f\n", | |
780 item->name, *(item->v.val_float)) < 0) | |
752 return -5; | 781 return -5; |
753 break; | 782 break; |
754 | 783 |
755 case ITEM_BOOL: | 784 case ITEM_BOOL: |
756 if (fprintf(ctx->fp, "%s = %s\n", item->name, | 785 if (fprintf(ctx->fp, "%s = %s\n", item->name, |