- w_interp_load_state (w_interp, NULL);
- timeout = TIMEOUT;
- while (1)
- {
- char *p;
- int r;
-
- r = wproto_process (wcl, timeout);
- if (r <= 0)
- {
- gw_db = gw_db_open ("www.db", 0, 0);
- if (gw_db)
- break;
- gw_log (GW_LOG_DEBUG, mod, "Cannot terminate - new request");
- timeout = 10;
- continue;
- }
- timeout = TIMEOUT;
- wo_clear (wcl, "text/html");
- strcpy (parms_buf, wcl->wf_parms);
- script = parms = parms_buf;
- while (*parms && *parms != '/')
- parms++;
- if (*parms)
- *parms++ = '\0';
- if (*script)
- {
- p = script + strlen(script) - 1;
- while (*p && p != script)
- switch (*p)
- {
- case '+':
- wproto_cache (wcl, wcl->cache_level+1);
- *p = '\0';
- break;
- case '-':
- if (p[1])
- wproto_cache (wcl, wcl->cache_level-atoi(p+1));
- else
- wproto_cache (wcl, wcl->cache_level-1);
- *p = '\0';
- break;
- case '=':
- if (isdigit(p[1]))
- wproto_cache (wcl, atoi(p+1));
- *p = '\0';
- break;
- default:
- --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))
- {
- wo_printf (wcl, "<html><head><title>wsh error</title></head>\n");
- wo_printf (wcl, "<body>Couldn't execute script %s</body></html>",
- script);
- }
- wo_finish(wcl);
- }
- w_interp_save_state (w_interp, NULL);
- wproto_terminate(wcl);
- return 0;