/** * Find next parameter * @param context * @param mandatory * @return */ bool_t paramNext(scpi_t * context, bool_t mandatory) { paramSkipWhitespace(context); if (context->paramlist.length == 0) { if (mandatory) { SCPI_ErrorPush(context, SCPI_ERROR_MISSING_PARAMETER); } return FALSE; } if (context->input_count != 0) { if (context->paramlist.parameters[0] == ',') { paramSkipBytes(context, 1); paramSkipWhitespace(context); } else { SCPI_ErrorPush(context, SCPI_ERROR_INVALID_SEPARATOR); return FALSE; } } context->input_count++; return TRUE; }
/** * Parse string parameter * @param context * @param value Pointer to string buffer where pointer to non-null terminated string will be returned * @param len Length of returned non-null terminated string * @param mandatory * @return */ scpi_bool_t SCPI_ParamString(scpi_t * context, const char ** value, size_t * len, scpi_bool_t mandatory) { size_t length; if (!value || !len) { return FALSE; } if (!paramNext(context, mandatory)) { return FALSE; } if (locateStr(context->paramlist.parameters, context->paramlist.length, value, &length)) { paramSkipBytes(context, length); paramSkipWhitespace(context); if (len) { *len = length; } return TRUE; } return FALSE; }