public TCL.CompletionCode cmdProc(Interp interp, TclObject[] argv) { if (argv.Length != 2) { throw new TclNumArgsException(interp, 1, argv, "name"); } VwaitTrace trace = new VwaitTrace(); Var.traceVar(interp, argv[1], TCL.VarFlag.GLOBAL_ONLY | TCL.VarFlag.TRACE_WRITES | TCL.VarFlag.TRACE_UNSETS, trace); int foundEvent = 1; while (!trace.done && (foundEvent != 0)) { foundEvent = interp.getNotifier().doOneEvent(TCL.ALL_EVENTS); } Var.untraceVar(interp, argv[1], TCL.VarFlag.GLOBAL_ONLY | TCL.VarFlag.TRACE_WRITES | TCL.VarFlag.TRACE_UNSETS, trace); // Clear out the interpreter's result, since it may have been set // by event handlers. interp.resetResult(); if (foundEvent == 0) { throw new TclException(interp, "can't wait for variable \"" + argv[1] + "\": would wait forever"); } return(TCL.CompletionCode.RETURN); }
public TCL.CompletionCode cmdProc(Interp interp, TclObject[] argv) { if (argv.Length != 2) { throw new TclNumArgsException(interp, 1, argv, "name"); } VwaitTrace trace = new VwaitTrace(); Var.traceVar(interp, argv[1], TCL.VarFlag.GLOBAL_ONLY | TCL.VarFlag.TRACE_WRITES | TCL.VarFlag.TRACE_UNSETS, trace); int foundEvent = 1; while (!trace.done && (foundEvent != 0)) { foundEvent = interp.getNotifier().doOneEvent(TCL.ALL_EVENTS); } Var.untraceVar(interp, argv[1], TCL.VarFlag.GLOBAL_ONLY | TCL.VarFlag.TRACE_WRITES | TCL.VarFlag.TRACE_UNSETS, trace); // Clear out the interpreter's result, since it may have been set // by event handlers. interp.resetResult(); if (foundEvent == 0) { throw new TclException(interp, "can't wait for variable \"" + argv[1] + "\": would wait forever"); } return TCL.CompletionCode.RETURN; }