* USE OR PERFORMANCE OF THIS SOFTWARE.
*
* $Log: wtcl.c,v $
- * Revision 1.4 1995/10/27 17:30:16 adam
+ * Revision 1.7 1995/10/31 16:56:25 adam
+ * Record presentation.
+ *
+ * Revision 1.6 1995/10/31 10:03:54 adam
+ * Work on queries.
+ * New command implemented - aborts script.
+ *
+ * Revision 1.5 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.
+ *
+ * Revision 1.4 1995/10/27 17:30:16 adam
* First search request/response that works.
*
* Revision 1.3 1995/10/27 15:12:14 adam
char *fbuf;
int fbuf_size;
int fbuf_ptr;
+ int wabort;
WCLIENT wcl;
};
return p->interp;
}
+static int proc_wabort_invoke (ClientData clientData, Tcl_Interp *interp,
+ int argc, char **argv)
+{
+ struct tcl_info *p = (struct tcl_info*) clientData;
+
+ p->wabort = 1;
+ return TCL_RETURN;
+}
+
+static int proc_wflush_invoke (ClientData clientData, Tcl_Interp *interp,
+ int argc, char **argv)
+{
+ struct tcl_info *p = (struct tcl_info*) clientData;
+
+ wo_flush (p->wcl);
+ return TCL_OK;
+}
+
static int proc_html_invoke (ClientData clientData, Tcl_Interp *interp,
int argc, char **argv)
{
return r;
}
-static int proc_form_invoke (ClientData clientData, Tcl_Interp *interp,
- int argc, char **argv)
+static int proc_wform_invoke (ClientData clientData, Tcl_Interp *interp,
+ int argc, char **argv)
{
struct tcl_info *p = (struct tcl_info*) clientData;
int i;
if (argc == 2)
{
- Tcl_AppendResult (p->interp, wgetval (p->wcl, argv[1]), NULL);
+ for (i = 0; *p->wcl->wf_data[i].name; i++)
+ if (!strcmp (argv[1], p->wcl->wf_data[i].name) &&
+ *p->wcl->wf_data[i].value)
+ Tcl_AppendElement (p->interp, p->wcl->wf_data[i].value);
return TCL_OK;
}
for (i = 0; *p->wcl->wf_data[i].name; i++)
Tcl_AppInit (p->interp);
Tcl_CreateCommand (p->interp, "html", proc_html_invoke, p, NULL);
Tcl_CreateCommand (p->interp, "htmlr", proc_htmlr_invoke, p, NULL);
- Tcl_CreateCommand (p->interp, "form", proc_form_invoke, p, NULL);
+ Tcl_CreateCommand (p->interp, "wform", proc_wform_invoke, p, NULL);
+ Tcl_CreateCommand (p->interp, "wabort", proc_wabort_invoke, p, NULL);
+ Tcl_CreateCommand (p->interp, "wflush", proc_wflush_invoke, p, NULL);
sprintf (tmp_str, "%d", wcl->id);
Tcl_SetVar (p->interp, "sessionId", tmp_str, TCL_GLOBAL_ONLY);
return p;
{
report_error (p, *lineno, "Error in Tcl script starting at line",
"Unexpected EOF (missing right brace)");
- return -1;
+ return TCL_ERROR;
}
if (c == '\\')
escape = 1;
p->fbuf[fbuf_ptr++] = c;
}
p->fbuf[fbuf_ptr] = '\0';
+ p->wabort = 0;
r = Tcl_Eval (p->interp, p->fbuf);
if (r == TCL_ERROR)
report_error (p, p->interp->errorLine + *lineno - 1,
"Error in Tcl script in line",
Tcl_GetVar (p->interp, "errorInfo", 0));
(*lineno) += local_line;
- return 0;
+ if (p->wabort)
+ return TCL_RETURN;
+ return r;
}
static int do_exec (const char *fname, char *parms, void *mydata)
wo_putc (p->wcl, c);
else
{
- if (tcl_exec (fname, parms, p, inf, &lineno))
+ int r = tcl_exec (fname, parms, p, inf, &lineno);
+ if (r == TCL_RETURN)
+ {
+ fclose (inf);
+ return 0;
+ }
+ else if (r == TCL_ERROR)
{
fclose (inf);
return -2;