/** * Parse one command line * @param context * @param data - complete command line * @param len - command line length * @return 1 if the last evaluated command was found */ int SCPI_Parse(scpi_t * context, char * data, size_t len) { int result = 0; const char * cmdline_end = data + len; char * cmdline_ptr = data; size_t cmd_len; size_t cmdline_len; char * cmdline_ptr_prev = NULL; size_t cmd_len_prev = 0; if (context == NULL) { return -1; } while (cmdline_ptr < cmdline_end) { result = 0; cmd_len = cmdTerminatorPos(cmdline_ptr, cmdline_end - cmdline_ptr); if (cmd_len > 0) { composeCompoundCommand(cmdline_ptr_prev, cmd_len_prev, &cmdline_ptr, &cmd_len); cmdline_len = cmdlineSeparatorPos(cmdline_ptr, cmdline_end - cmdline_ptr); if(findCommand(context, cmdline_ptr, cmdline_len, cmd_len)) { processCommand(context); result = 1; cmdline_ptr_prev = cmdline_ptr; cmd_len_prev = cmd_len; } else { SCPI_ErrorPush(context, SCPI_ERROR_UNDEFINED_HEADER); } } cmdline_ptr += skipCmdLine(cmdline_ptr, cmdline_end - cmdline_ptr); cmdline_ptr += skipWhitespace(cmdline_ptr, cmdline_end - cmdline_ptr); } return result; }
/** * Parse one command line * @param context * @param data - complete command line * @param len - command line length * @return 1 if the last evaluated command was found */ int SCPI_Parse(scpi_t * context, const char * data, size_t len) { int result = 0; const char * cmdline_end = data + len; const char * cmdline_ptr = data; size_t cmd_len; size_t cmdline_len; if (context == NULL) { return -1; } while (cmdline_ptr < cmdline_end) { result = 0; cmd_len = cmdTerminatorPos(cmdline_ptr, cmdline_end - cmdline_ptr); cmdline_len = cmdlineSeparatorPos(cmdline_ptr, cmdline_end - cmdline_ptr); if (cmd_len > 0) { if(findCommand(context, cmdline_ptr, cmdline_len, cmd_len)) { processCommand(context); result = 1; } else { SCPI_ErrorPush(context, SCPI_ERROR_UNDEFINED_HEADER); } } cmdline_ptr = cmdlineNext(cmdline_ptr, cmdline_end - cmdline_ptr); } return result; }