| | |
| | | #include "scpi/parser.h" |
| | | #include "scpi/units.h" |
| | | #include "utils_private.h" |
| | | #include "scpi/utils.h" |
| | | #include "scpi/error.h" |
| | | #include "lexer_private.h" |
| | | |
| | |
| | | lex_state_t state; |
| | | scpi_parameter_t param; |
| | | scpi_bool_t result; |
| | | int32_t intval; |
| | | int32_t tag; |
| | | |
| | | if (!value) { |
| | | SCPI_ErrorPush(context, SCPI_ERROR_SYSTEM_ERROR); |
| | |
| | | case SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA_WITH_SUFFIX: |
| | | case SCPI_TOKEN_PROGRAM_MNEMONIC: |
| | | value->unit = SCPI_UNIT_NONE; |
| | | value->type = SCPI_NUM_NUMBER; |
| | | value->special = FALSE; |
| | | result = TRUE; |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | |
| | | break; |
| | | case SCPI_TOKEN_OCTNUM: |
| | | value->base = 8; |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | |
| | | scpiLex_CharacterProgramData(&state, &token); |
| | | |
| | | /* convert string to special number type */ |
| | | SCPI_ParamToChoice(context, &token, special, &intval); |
| | | SCPI_ParamToChoice(context, &token, special, &tag); |
| | | |
| | | value->type = intval; |
| | | value->value = 0; |
| | | value->special = TRUE; |
| | | value->tag = tag; |
| | | |
| | | break; |
| | | default: |
| | |
| | | return 0; |
| | | } |
| | | |
| | | if (SCPI_ChoiceToName(special, value->type, &type)) { |
| | | strncpy(str, type, len); |
| | | return min(strlen(type), len); |
| | | if (value->special) { |
| | | if (SCPI_ChoiceToName(special, value->tag, &type)) { |
| | | strncpy(str, type, len); |
| | | return min(strlen(type), len); |
| | | } else { |
| | | str[0] = 0; |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | result = doubleToStr(value->value, str, len); |
| | | result = SCPI_DoubleToStr(value->value, str, len); |
| | | |
| | | unit = translateUnitInverse(context->units, value->unit); |
| | | |