diff -wNaur -xCVS cicb-5.1.1b3/icb/parse.c cicb/icb/parse.c --- cicb-5.1.1b3/icb/parse.c 2009-03-23 02:51:53.000000000 -0400 +++ cicb/icb/parse.c 2013-07-05 02:16:27.000000000 -0400 @@ -1,4 +1,4 @@ -/* $Id: parse.c,v 1.20 2009/03/23 06:51:53 hoche Exp $ */ +/* $Id: parse.c,v 1.21 2013/07/05 06:16:27 hoche Exp $ */ /* parse a line from the user */ @@ -8,6 +8,9 @@ #define ARRAY_SIZE(x) (sizeof (x) / sizeof (x[0])) +#define TCL_CONTINUE_ERROR_MSG "invoked \"continue\" outside of a loop" +#define TCL_IGNORE 666 + /* This is similar to Tcl_VarEval, but it treats each string as a separate list element, rather than concat-ing the strings together and then @@ -76,6 +79,14 @@ if (status == TCL_CONTINUE) { send_command (cmd, args); status = TCL_OK; + } else if (status == TCL_ERROR) { + + /* handle the dreaded "invoked continue" message */ + char *errmsg = (char*)Tcl_GetStringResult (interp); + if (strcmp(errmsg, TCL_CONTINUE_ERROR_MSG) == 0) { + send_command (cmd, args); + status = TCL_IGNORE; + } } return status; @@ -122,7 +133,9 @@ putl (result, PL_SL); } error_mode = 0; - + } else if (status == TCL_IGNORE) { + /* do nothing */ + error_mode = 0; } else { /* Report an error. */ char* errmsg = "";