54    typedef unsigned char bool;
 
   65    typedef bool scpi_bool_t;
 
   69    enum _scpi_reg_name_t {
 
   84    typedef enum _scpi_reg_name_t scpi_reg_name_t;
 
   86    enum _scpi_ctrl_name_t {
 
  104    typedef enum _scpi_ctrl_name_t scpi_ctrl_name_t;
 
  106    typedef uint16_t scpi_reg_val_t;
 
  109    enum _scpi_result_t {
 
  113    typedef enum _scpi_result_t scpi_result_t;
 
  118    #define SCPI_CMD_LIST_END       {NULL, NULL, 0} 
  120    #define SCPI_CMD_LIST_END       {NULL, NULL} 
  142    typedef size_t(*scpi_write_t)(scpi_t * context, 
const char * data, 
size_t len);
 
  143    typedef scpi_result_t(*scpi_write_control_t)(scpi_t * context, scpi_ctrl_name_t ctrl, scpi_reg_val_t val);
 
  144    typedef int (*scpi_error_callback_t)(scpi_t * context, int_fast16_t error);
 
  147    enum _scpi_token_type_t {
 
  149        SCPI_TOKEN_SEMICOLON,
 
  151        SCPI_TOKEN_SPECIFIC_CHARACTER,
 
  157        SCPI_TOKEN_PROGRAM_MNEMONIC,
 
  158        SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA,
 
  159        SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA_WITH_SUFFIX,
 
  160        SCPI_TOKEN_SUFFIX_PROGRAM_DATA,
 
  161        SCPI_TOKEN_ARBITRARY_BLOCK_PROGRAM_DATA,
 
  162        SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA,
 
  163        SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA,
 
  164        SCPI_TOKEN_PROGRAM_EXPRESSION,
 
  165        SCPI_TOKEN_COMPOUND_PROGRAM_HEADER,
 
  166        SCPI_TOKEN_INCOMPLETE_COMPOUND_PROGRAM_HEADER,
 
  167        SCPI_TOKEN_COMMON_PROGRAM_HEADER,
 
  168        SCPI_TOKEN_INCOMPLETE_COMMON_PROGRAM_HEADER,
 
  169        SCPI_TOKEN_COMPOUND_QUERY_PROGRAM_HEADER,
 
  170        SCPI_TOKEN_COMMON_QUERY_PROGRAM_HEADER,
 
  172        SCPI_TOKEN_ALL_PROGRAM_DATA,
 
  176    typedef enum _scpi_token_type_t scpi_token_type_t;
 
  179        scpi_token_type_t type;
 
 
  193    enum _message_termination_t {
 
  194        SCPI_MESSAGE_TERMINATION_NONE,
 
  195        SCPI_MESSAGE_TERMINATION_NL,
 
  196        SCPI_MESSAGE_TERMINATION_SEMICOLON,
 
  198    typedef enum _message_termination_t message_termination_t;
 
  201        scpi_token_t programHeader;
 
  202        scpi_token_t programData;
 
  203        int numberOfParameters;
 
  204        message_termination_t termination;
 
 
  208    typedef scpi_result_t(*scpi_command_callback_t)(scpi_t *);
 
  221#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION 
  222        char * device_dependent_info;
 
 
  252        SCPI_UNIT_REVOLUTION,
 
  258        SCPI_UNIT_ELECTRONVOLT,
 
  263        SCPI_UNIT_ASTRONOMIC_UNIT,
 
  268        SCPI_UNIT_NAUTICAL_MILE,
 
  273        SCPI_UNIT_ATOMIC_MASS,
 
  277        SCPI_UNIT_ATMOSPHERE,
 
  278        SCPI_UNIT_INCH_OF_MERCURY,
 
  279        SCPI_UNIT_MM_OF_MERCURY,
 
  285        SCPI_UNIT_FAHRENHEIT,
 
  293    typedef enum _scpi_unit_t scpi_unit_t;
 
  300#define SCPI_UNITS_LIST_END       {NULL, SCPI_UNIT_NONE, 0} 
  303    enum _scpi_special_number_t {
 
  315    typedef enum _scpi_special_number_t scpi_special_number_t;
 
  321#define SCPI_CHOICE_LIST_END   {NULL, -1} 
  325        const scpi_command_t * cmd;
 
  326        lex_state_t lex_state;
 
  327        scpi_const_buffer_t cmd_raw;
 
 
  349    typedef scpi_token_t scpi_parameter_t;
 
  352        const char * pattern;
 
  353        scpi_command_callback_t callback;
 
 
  360        scpi_error_callback_t error;
 
  362        scpi_write_control_t control;
 
  363        scpi_command_callback_t flush;
 
  364        scpi_command_callback_t reset;
 
 
  368        const scpi_command_t * cmdlist;
 
  369        scpi_buffer_t buffer;
 
  370        scpi_param_list_t param_list;
 
  371        scpi_interface_t * interface;
 
  372        int_fast16_t output_count;
 
  373        int_fast16_t input_count;
 
  374        scpi_bool_t cmd_error;
 
  375        scpi_fifo_t error_queue;
 
  376#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION && !USE_MEMORY_ALLOCATION_FREE 
  377        scpi_error_info_heap_t error_info_heap;
 
  379        scpi_reg_val_t registers[SCPI_REG_COUNT];
 
  380        const scpi_unit_def_t * units;
 
  382        scpi_parser_state_t parser_state;
 
  384        size_t arbitrary_reminding;
 
 
  387    enum _scpi_array_format_t {
 
  388        SCPI_FORMAT_ASCII = 0,
 
  389        SCPI_FORMAT_NORMAL = 1,
 
  390        SCPI_FORMAT_SWAPPED = 2,
 
  391        SCPI_FORMAT_BIGENDIAN = SCPI_FORMAT_NORMAL,
 
  392        SCPI_FORMAT_LITTLEENDIAN = SCPI_FORMAT_SWAPPED,
 
  394    typedef enum _scpi_array_format_t scpi_array_format_t;