X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=www%2Fwirtcl.c;h=fcb49ff579ae6642f7c62190732923e9f0ca7bfc;hb=4a4288c5b72d694c1ca2c1c08926d1e10f01cc48;hp=cae84ee908844c9bee5f58f00ff8ac114a38faba;hpb=fb42e8909c46dfe29d2b8d8852e0ebf297eb2963;p=egate.git diff --git a/www/wirtcl.c b/www/wirtcl.c index cae84ee..fcb49ff 100644 --- a/www/wirtcl.c +++ b/www/wirtcl.c @@ -41,7 +41,11 @@ * USE OR PERFORMANCE OF THIS SOFTWARE. * * $Log: wirtcl.c,v $ - * Revision 1.3 1995/10/30 17:35:18 adam + * Revision 1.4 1995/10/31 10:03:53 adam + * Work on queries. + * New command implemented - aborts script. + * + * Revision 1.3 1995/10/30 17:35:18 adam * New function zwait that waits for a variable change - due to i/o events * that invoke callback routines. * @@ -164,12 +168,15 @@ static int do_exec (const char *fname, char *parms, void *mydata) static int events (struct tcl_info *p, char *waitVar) { - int r, i, min_fd = 0; + int r, i; char *cp; char *waitVarVal; static fd_set fdset_tcl_r; static fd_set fdset_tcl_w; static fd_set fdset_tcl_x; + int fifo_in = p->wcl->linein; + if (fifo_in > max_fd) + max_fd = fifo_in; assert (waitVar); if ((cp = Tcl_GetVar (p->interp, waitVar, 0))) @@ -179,8 +186,12 @@ static int events (struct tcl_info *p, char *waitVar) } else { - gw_log (GW_LOG_WARN, mod, "Variable %s doesn't exist", waitVar); - return 0; + char msg[128]; + + sprintf (msg, "Variable %s doesn't exist", waitVar); + gw_log (GW_LOG_WARN, mod, "%s", msg); + Tcl_AppendResult (p->interp, msg, NULL); + return TCL_ERROR; } gw_log (GW_LOG_DEBUG, mod, "Waiting for variable %s=%s", waitVar, waitVarVal); @@ -189,14 +200,15 @@ static int events (struct tcl_info *p, char *waitVar) if (!(cp = Tcl_GetVar (p->interp, waitVar, 0)) || strcmp (cp, waitVarVal)) { + Tcl_AppendResult (p->interp, cp, NULL); free (waitVarVal); - return 0; + return TCL_OK; } FD_ZERO (&fdset_tcl_r); FD_ZERO (&fdset_tcl_w); FD_ZERO (&fdset_tcl_x); - for (r=0, i=min_fd; i<=max_fd; i++) + for (r=0, i=0; i<=max_fd; i++) { if (callback_table[i].w_handle) { @@ -216,6 +228,7 @@ static int events (struct tcl_info *p, char *waitVar) } if (!r) break; + FD_SET (fifo_in, &fdset_tcl_r); if ((r = select(max_fd+1, &fdset_tcl_r, &fdset_tcl_w, &fdset_tcl_x, 0)) < 0) { @@ -223,8 +236,10 @@ static int events (struct tcl_info *p, char *waitVar) exit(1); } if (!r) - continue; - for (i=min_fd; i<=max_fd; i++) + break; + if (FD_ISSET (fifo_in, &fdset_tcl_r)) + break; + for (i=0; i<=max_fd; i++) { if (FD_ISSET (i, &fdset_tcl_r)) { @@ -244,7 +259,7 @@ static int events (struct tcl_info *p, char *waitVar) } } free (waitVarVal); - return 0; + return TCL_OK; } void ir_select_add (int fd, void *obj)