Bug fix: egw_enc failed on 8-bit chars.
[egate.git] / www / wtcl.c
index a5c0e71..5728d56 100644 (file)
  * USE OR PERFORMANCE OF THIS SOFTWARE.
  *
  * $Log: wtcl.c,v $
- * Revision 1.15  1996/05/22 16:50:27  adam
+ * Revision 1.16  1996/05/23 15:53:12  adam
+ * Bug fix: egw_enc failed on 8-bit chars.
+ * New command: egw_parms.
+ *
+ * Revision 1.15  1996/05/22  16:50:27  adam
  * Bug fix.
  *
  * Revision 1.14  1996/05/21  14:53:04  adam
@@ -175,10 +179,10 @@ static int proc_html_invoke (ClientData clientData, Tcl_Interp *interp,
     return TCL_OK;
 }
 
-static int proc_wform_invoke (ClientData clientData, Tcl_Interp *interp,
-                              int argc, char **argv)
+static int proc_form_invoke (struct tcl_info *p, wform_data *wfdata,
+                             Tcl_Interp *interp,
+                             int argc, char **argv)
 {
-    struct tcl_info *p = (struct tcl_info*) clientData;
     const char *arg = NULL;
     int failFlag = 0;
     int i;
@@ -206,12 +210,12 @@ static int proc_wform_invoke (ClientData clientData, Tcl_Interp *interp,
         arg = argv[1];
     if (arg)
     {
-        for (i = 0; *p->wcl->wf_data[i].name; i++)
-            if (!strcmp (arg, p->wcl->wf_data[i].name))
+        for (i = 0; *wfdata[i].name; i++)
+            if (!strcmp (arg, wfdata[i].name))
             {
                 failFlag = 0;
-                if (*p->wcl->wf_data[i].value)
-                    Tcl_AppendElement (p->interp, p->wcl->wf_data[i].value);
+                if (*wfdata[i].value)
+                    Tcl_AppendElement (p->interp, wfdata[i].value);
             }
         if (failFlag)
         {
@@ -220,16 +224,33 @@ static int proc_wform_invoke (ClientData clientData, Tcl_Interp *interp,
         }
         return TCL_OK;
     }    
-    for (i = 0; *p->wcl->wf_data[i].name; i++)
+    for (i = 0; *wfdata[i].name; i++)
     {
         Tcl_AppendResult (p->interp, "{ ", NULL);
-        Tcl_AppendElement (p->interp, p->wcl->wf_data[i].name);
-        Tcl_AppendElement (p->interp, p->wcl->wf_data[i].value);
+        Tcl_AppendElement (p->interp, wfdata[i].name);
+        Tcl_AppendElement (p->interp, wfdata[i].value);
         Tcl_AppendResult (p->interp, " }\n", NULL);
     }
     return TCL_OK;
 }
 
+static int proc_wform_invoke (ClientData clientData, Tcl_Interp *interp,
+                              int argc, char **argv)
+{
+    struct tcl_info *p = (struct tcl_info*) clientData;
+    wform_data *wfdata = p->wcl->wf_data;
+    return proc_form_invoke (p, wfdata, interp, argc, argv);
+}
+
+static int proc_parms_invoke (ClientData clientData, Tcl_Interp *interp,
+                              int argc, char **argv)
+{
+    struct tcl_info *p = (struct tcl_info*) clientData;
+    wform_data *wfdata = p->wcl->wf_parms_var;
+    return proc_form_invoke (p, wfdata, interp, argc, argv);
+}
+
+
 static int proc_wlog_invoke (ClientData clientData, Tcl_Interp *interp,
                              int argc, char **argv)
 {
@@ -269,7 +290,7 @@ static int proc_enc (ClientData clientData, Tcl_Interp *interp,
                      int argc, char **argv)
 {
     int i;
-    char buf1[4];
+    char buf1[6];
     char buf2[2];
     
     buf1[0] = '%';
@@ -282,7 +303,7 @@ static int proc_enc (ClientData clientData, Tcl_Interp *interp,
             if (*cp <= ' ' || *cp >= 127 || *cp == '/' || *cp == ' ' ||
                 *cp == '&' || *cp == ':' || *cp == '%')
             {
-                sprintf (buf1+1, "%02X", *cp);
+                sprintf (buf1+1, "%02X", *cp & 0xff);
                 Tcl_AppendResult (interp, buf1, NULL);
             }
             else
@@ -373,6 +394,7 @@ static void *do_create (WCLIENT wcl, void *args)
     Tcl_AppInit (p->interp);
     Tcl_CreateCommand (p->interp, "html", proc_html_invoke, p, NULL);
     Tcl_CreateCommand (p->interp, "egw_form", proc_wform_invoke, p, NULL);
+    Tcl_CreateCommand (p->interp, "egw_parms", proc_parms_invoke, p, NULL);
     Tcl_CreateCommand (p->interp, "egw_abort", proc_wabort_invoke, p, NULL);
     Tcl_CreateCommand (p->interp, "egw_flush", proc_wflush_invoke, p, NULL);
     Tcl_CreateCommand (p->interp, "egw_log", proc_wlog_invoke, p, NULL);