+static int proc_source (ClientData clientData, Tcl_Interp *interp,
+ int argc, char **argv)
+{
+ struct tcl_info *p = (struct tcl_info*) clientData;
+ int r, offset = 0;
+
+ if (argc < 2 || argc > 3)
+ {
+ Tcl_AppendResult (p->interp,
+ "wrong # args: should be egw_source file ?var?",
+ NULL);
+ return TCL_ERROR;
+ }
+ if (argc == 3)
+ offset = wproto_save_push (p->wcl);
+ r = exec_file (argv[1], p);
+ Tcl_ResetResult (p->interp);
+ if (argc == 3)
+ {
+ char *res = wproto_save_pop (p->wcl, offset);
+ if (res)
+ Tcl_SetVar (p->interp, argv[2], res, 0);
+ }
+ if (r == -1)
+ {
+ Tcl_AppendResult (p->interp, "egw_source: couldn't open ",
+ argv[1], NULL);
+ return TCL_ERROR;
+ }
+ else if (r == -2)
+ {
+ Tcl_AppendResult (p->interp, "egw_source: Tcl error in script ",
+ argv[1], NULL);
+ return TCL_ERROR;
+ }
+ return TCL_OK;
+}
+
+static int proc_clear (ClientData clientData, Tcl_Interp *interp,
+ int argc, char **argv)
+{
+ struct tcl_info *p = (struct tcl_info*) clientData;
+
+ wo_clear (p->wcl);
+ return TCL_OK;
+}
+