State reestablised when shell restarts. History of previous
[egate.git] / www / wsh.c
index 990d141..c6093f4 100644 (file)
--- a/www/wsh.c
+++ b/www/wsh.c
  * USE OR PERFORMANCE OF THIS SOFTWARE.
  *
  * $Log: wsh.c,v $
- * Revision 1.3  1995/10/23 16:55:41  adam
+ * Revision 1.7  1995/11/06 17:44:23  adam
+ * State reestablised when shell restarts. History of previous
+ * result sets.
+ *
+ * Revision 1.6  1995/11/06  10:51:19  adam
+ * End of response marker in response from wsh/wproto to wcgi.
+ * Shells are respawned when necessary.
+ *
+ * Revision 1.5  1995/11/01  16:15:48  adam
+ * Better presentation of records. Query/set number persistent.
+ *
+ * Revision 1.4  1995/10/27  15:12:12  adam
+ * IrTcl incorporated in the gateway.
+ * Better separation of script types.
+ * Z39.50 gateway scripts entered.
+ *
+ * Revision 1.3  1995/10/23  16:55:41  adam
  * A lot of changes - really.
  *
  * Revision 1.2  1995/10/20  14:02:42  adam
@@ -59,7 +75,9 @@
 #include <unistd.h>
 #include <ctype.h>
 
-#include "winterp.h"
+#include "whtml.h"
+#include "wtcl.h"
+#include "wirtcl.h"
 
 #define TIMEOUT_SHORT 60
 #define TIMEOUT_MEDIUM 1800
@@ -88,6 +106,8 @@ int main (int argc, char **argv)
     gw_log_session (wcl->id);
     if (!strcmp (*argv, "egwtcl"))
         w_interp = w_interp_create (w_interp_tcl, wcl, NULL);
+    else if (!strcmp (*argv, "egwirtcl"))
+        w_interp = w_interp_create (w_interp_irtcl, wcl, NULL);
     else if (!strcmp (*argv, "egwhtml"))
         w_interp = w_interp_create (w_interp_html, wcl, NULL);
     else
@@ -96,18 +116,21 @@ int main (int argc, char **argv)
                *argv);
         exit (1);
     }
+    w_interp_load_state (w_interp, NULL);
     while (wproto_process(wcl, timeout) > 0)
     {
+        char *p;
+
        wo_clear (wcl, "text/html");
        strcpy (parms_buf, wcl->wf_parms);
        script = parms = parms_buf;
        while (*parms && *parms != '/')
            parms++;
-       if (*parms == '/')
+       if (*parms)
            *parms++ = '\0';
         if (*script)
         {
-            char *p = script + strlen(script) - 1;
+            p = script + strlen(script) - 1;
             while (*p && p != script)
                 switch (*p)
                 {
@@ -131,6 +154,9 @@ int main (int argc, char **argv)
                     --p;
                 }
         }
+        for (p = parms; *p; p++)
+            if (*p == '+')
+                *p = ' ';
        gw_log (GW_LOG_DEBUG, mod, "script: %s", script);
        gw_log (GW_LOG_DEBUG, mod, "parms: %s", parms);
         if (w_interp_exec (w_interp, script, parms))
@@ -141,6 +167,7 @@ int main (int argc, char **argv)
         }
        wo_finish(wcl);
     }
+    w_interp_save_state (w_interp, NULL);
     wproto_terminate(wcl);
     return 0;
 }