From 90f9c5a84c9e4c281cd665bcb41dc6b2d2abb550 Mon Sep 17 00:00:00 2001 From: Jan Breuer <jan.breuer@jaybee.cz> Date: 周日, 18 1月 2015 16:49:17 +0800 Subject: [PATCH] Correct type of *TST? callback function --- libscpi/src/units.c | 50 +++++++++++++++++++++++++++++++++++--------------- 1 files changed, 35 insertions(+), 15 deletions(-) diff --git a/libscpi/src/units.c b/libscpi/src/units.c index 46698b5..2b646e9 100644 --- a/libscpi/src/units.c +++ b/libscpi/src/units.c @@ -123,7 +123,7 @@ * @param value resultin value * @return TRUE if str matches one of specs patterns */ -static scpi_bool_t translateSpecialNumber(const scpi_special_number_def_t * specs, const char * str, size_t len, scpi_number_parameter_t * value) { +static scpi_bool_t translateSpecialNumber(const scpi_special_number_def_t * specs, const char * str, size_t len, scpi_number_t * value) { int i; value->value = 0.0; @@ -219,7 +219,7 @@ * @param value preparsed numeric value * @return TRUE if value parameter was converted to base units */ -static scpi_bool_t transformNumber(scpi_t * context, const char * unit, size_t len, scpi_number_parameter_t * value) { +static scpi_bool_t transformNumber(scpi_t * context, const char * unit, size_t len, scpi_number_t * value) { size_t s; const scpi_unit_def_t * unitDef; s = skipWhitespace(unit, len); @@ -249,30 +249,50 @@ * @param mandatory if the parameter is mandatory * @return */ -scpi_bool_t SCPI_ParamTranslateNumberVal(scpi_t * context, scpi_parameter_t * parameter) { +scpi_bool_t SCPI_ParamNumber(scpi_t * context, scpi_number_t * value, scpi_bool_t mandatory) +{ scpi_token_t token; lex_state_t state; + scpi_parameter_t param; + scpi_bool_t result; + + result = SCPI_Parameter(context, ¶m, mandatory); + - state.buffer = parameter->data.ptr; + state.buffer = param.data.ptr; state.pos = state.buffer; - state.len = parameter->data.len; + state.len = param.data.len; - switch(parameter->type) { + switch(param.type) { + case TokDecimalNumericProgramData: + case TokHexnum: + case TokOctnum: + case TokBinnum: + result = TRUE; + break; case TokDecimalNumericProgramDataWithSuffix: - lexDecimalNumericProgramData(&state, &token); - lexWhiteSpace(&state, &token); - lexSuffixProgramData(&state, &token); + scpiLex_DecimalNumericProgramData(&state, &token); + scpiLex_WhiteSpace(&state, &token); + scpiLex_SuffixProgramData(&state, &token); - return transformNumber(context, token.ptr, token.len, ¶meter->number); + result = transformNumber(context, token.ptr, token.len, ¶m.number); + break; case TokProgramMnemonic: - lexWhiteSpace(&state, &token); - lexCharacterProgramData(&state, &token); + scpiLex_WhiteSpace(&state, &token); + scpiLex_CharacterProgramData(&state, &token); /* convert string to special number type */ - return translateSpecialNumber(context->special_numbers, token.ptr, token.len, ¶meter->number); + result = translateSpecialNumber(context->special_numbers, token.ptr, token.len, ¶m.number); + break; default: - return FALSE; + result = FALSE; } + + if (result) { + memcpy(value, ¶m.number, sizeof(scpi_number_t)); + } + + return result; } /** @@ -283,7 +303,7 @@ * @param len max length of string * @return number of chars written to string */ -size_t SCPI_NumberToStr(scpi_t * context, scpi_number_parameter_t * value, char * str, size_t len) { +size_t SCPI_NumberToStr(scpi_t * context, scpi_number_t * value, char * str, size_t len) { const char * type; const char * unit; size_t result; -- Gitblit v1.9.1