[clhp-cvs] CVS update: clhp/mod_clhp.c

Anthony Ventimiglia aventimiglia at common-lisp.net
Wed Nov 12 20:44:38 UTC 2003


Update of /project/clhp/cvsroot/clhp
In directory common-lisp.net:/tmp/cvs-serv7108

Modified Files:
	mod_clhp.c 
Log Message:
Got the module working !!! it needs refining, but it works !!!!
Now it's time to cook.

Date: Wed Nov 12 15:44:38 2003
Author: aventimiglia

Index: clhp/mod_clhp.c
diff -u clhp/mod_clhp.c:1.2 clhp/mod_clhp.c:1.3
--- clhp/mod_clhp.c:1.2	Tue Nov 11 20:31:25 2003
+++ clhp/mod_clhp.c	Wed Nov 12 15:44:38 2003
@@ -1,4 +1,4 @@
-/* $Id: mod_clhp.c,v 1.2 2003/11/12 01:31:25 aventimiglia Exp $
+/* $Id: mod_clhp.c,v 1.3 2003/11/12 20:44:38 aventimiglia Exp $
    
   CLHP the Common Lisp Hypertext Preprocessor
   (C) 2003 Anthony J Ventimiglia
@@ -33,6 +33,14 @@
 #define HUGE_STRING_LEN 65000
 #endif
 
+// AP_CALL_EXEC does not properly pass it's arguments
+#define BROKEN_AP_CALL_EXEC 1
+
+#define LISP_COMMAND "/usr/bin/lisp"
+#define LISP_OPTIONS "-noinit -nositeinit -quiet -batch"
+#define LISP_CORE "-core /usr/lib/cmucl/clhp.core"
+#define LISP_EVAL "-eval '(clhp:parse (cdr  (assoc :script_filename ext:*environment-list*)))(quit)'"
+
 typedef struct _child {
   request_rec *req;
 } child_stuff;
@@ -45,24 +53,25 @@
 				       child->req->subprocess_env );
   int child_pid;
 
-  child->req->args = ap_pstrdup ( child->req->pool, 
-				  "-noinit -quiet -core /usr/lib/cmucl/clhp.core" );
-
+#ifndef BROKEN_AP_CALL_EXEC
+  child->req->args = ap_psprintf ( child->req->pool, "%s %s %s", LISP_OPTIONS, 
+				   LISP_CORE, LISP_EVAL );
   ap_cleanup_for_exec ();
-  child_pid = ap_call_exec ( child->req, pinfo, "/usr/bin/lisp", env, 1 );
-
-  return (0);
-}
-
-static void send_to_lisp ( BUFF *out_buffer, const char *str )
-{
-  ap_bwrite ( out_buffer, str, strlen ( str ));
-  ap_bflush ( out_buffer );
-}
-
-static void close_lisp ( BUFF *out_buff )
-{
-  send_to_lisp ( out_buff, "(quit)" );
+  child_pid = ap_call_exec ( child->req, pinfo, LISP_COMMAND, env, 1 );
+#else
+  char *command = ap_psprintf (child->req->pool, "%s %s %s %s", LISP_COMMAND, 
+			       LISP_OPTIONS, LISP_CORE, LISP_EVAL );
+  ap_cleanup_for_exec ();
+  child_pid = ap_call_exec ( child->req, pinfo, command, env, 1 );
+#endif    
+  
+#ifdef WIN32
+  return ( child_pid );
+#else
+  exit ( 0 );
+  // Should not get here
+  return 0;
+#endif
 }
 
 static int Handler ( request_rec *req )
@@ -70,9 +79,6 @@
   BUFF *lisp_out, *lisp_in;
   child_stuff child;
 
-  req->content_type = "text/plain";
-  ap_send_http_header ( req );
-
   ap_add_common_vars ( req );
   ap_add_cgi_vars ( req );
   child.req = req;
@@ -81,25 +87,10 @@
 			   kill_always, &lisp_out, &lisp_in, NULL ))
     return HTTP_INTERNAL_SERVER_ERROR;
 
-  ap_hard_timeout ( "Hard Timeout", req );
-
-  // Debugging output
-  ap_rputs ( "-----------------\n", child.req );
-  ap_rprintf ( child.req, "ARGS: %s\n-------------\n", child.req->args );
-
-
-  send_to_lisp ( lisp_out, "(mapcar #'print ext:*command-line-strings*)");
-  send_to_lisp ( lisp_out, "(progn (loop for f from 1 to 50 do (format t \"-\")) (terpri))" );
-  send_to_lisp ( lisp_out, "(mapcar #'print ext:*environment-list*)" );
-
-
-  close_lisp ( lisp_out );
+  // ap_hard_timeout ( "Hard Timeout", req );
   ap_bclose ( lisp_out );
-
   ap_send_fb ( lisp_in, req );
   ap_bclose ( lisp_in );
-
-  ap_rputs ( "Done", req );
   ap_child_terminate ( req );
 
   return OK;





More information about the Clhp-cvs mailing list