diff --git a/main.c b/main.c index 6000ead..551f4eb 100644 --- a/main.c +++ b/main.c @@ -18,7 +18,7 @@ int main() send_cmd("*SRE 4\n"); // enable SRQ on error send_cmd("FOO:BAR:BAZ\n"); // invalid command causes error send_cmd("SYST:ERR:COUNT?\n"); // error subsystem - send_cmd("SYST:ERR:NEXT?;COUNT?;NEXT?\n"); // semicolon works according to spec + send_cmd("SYST:ERR:NEXT?; COUNT?; NEXT?\n"); // semicolon works according to spec send_cmd("DATA:BLOB #216abcdefghijklmnop\n"); // binary data block send_cmd("APPLY:SINE 50, 1.0, 2.17\n"); // floats diff --git a/scpi.pro.user b/scpi.pro.user index 0d0993d..c49305f 100644 --- a/scpi.pro.user +++ b/scpi.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/source/scpi_parser.c b/source/scpi_parser.c index df918b6..0849095 100644 --- a/source/scpi_parser.c +++ b/source/scpi_parser.c @@ -431,7 +431,7 @@ static void pars_cmd_colon(void) if (pst.cur_level_i == 0 || pst.cmdbuf_kept) { // top level command starts with colon (or after semicolon - reset level) - pars_reset_cmd(); + pars_reset_cmd(); // clears keep flag } else { // colon after nothing - error scpi_add_error(E_CMD_SYNTAX_ERROR, "Unexpected colon."); @@ -443,6 +443,7 @@ static void pars_cmd_colon(void) // internal colon - partial match if (match_cmd(true)) { // ok + pst.cmdbuf_kept = false; // drop the flag (needed for rejecting whitespace) } else { // error err_no_such_command_partial(); @@ -517,7 +518,7 @@ static void pars_cmd_newline(void) /** Whitespace received when collecting command parts */ static void pars_cmd_space(void) { - if (pst.cur_level_i == 0 && pst.charbuf_i == 0) { + if ((pst.cmdbuf_kept || pst.cur_level_i == 0) && pst.charbuf_i == 0) { // leading whitespace, ignore return; }