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,