/* ARGSUSED */ int Tcl_ForCmd( void *dummy /* Not used. */ , Tcl_Interp *interp /* Current interpreter. */ , int argc /* Number of arguments. */ , unsigned char **argv /* Argument strings. */ ) { int result, value; if (argc != 5) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " start test next command\"", 0); return TCL_ERROR; } result = Tcl_Eval(interp, argv[1], 0, 0); if (result != TCL_OK) { if (result == TCL_ERROR) { Tcl_AddErrorInfo(interp, (unsigned char*) "\n (\"for\" initial command)"); } return result; } while (1) { result = Tcl_ExprBoolean(interp, argv[2], &value); if (result != TCL_OK) { return result; } if (!value) { break; } result = Tcl_Eval(interp, argv[4], 0, 0); if (result == TCL_CONTINUE) { result = TCL_OK; } else if (result != TCL_OK) { if (result == TCL_ERROR) { unsigned char msg[60]; snprintf(msg, sizeof (msg), "\n (\"for\" body line %d)", interp->errorLine); Tcl_AddErrorInfo(interp, msg); } break; } result = Tcl_Eval(interp, argv[3], 0, 0); if (result == TCL_BREAK) { break; } else if (result != TCL_OK) { if (result == TCL_ERROR) { Tcl_AddErrorInfo(interp, (unsigned char*) "\n (\"for\" loop-end command)"); } return result; } } if (result == TCL_BREAK) { result = TCL_OK; } if (result == TCL_OK) { Tcl_ResetResult(interp); } return result; }
static char * setFullButtons(ClientData data, Tcl_Interp * interp, char * name1, char * name2, int flags) { char * val = Tcl_GetVar(interp, "whiptcl_fullbuttons", TCL_GLOBAL_ONLY); int rc; int state; if ((rc = Tcl_ExprBoolean(interp, val, &state))) { Tcl_FreeResult(interp); return "whiptcl_fullbuttons may only contain a boolean value"; } useFullButtons(state); return NULL; }