=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/cgi.sm1,v retrieving revision 1.3 retrieving revision 1.8 diff -u -p -r1.3 -r1.8 --- OpenXM/src/kan96xx/Doc/cgi.sm1 2004/09/27 01:20:46 1.3 +++ OpenXM/src/kan96xx/Doc/cgi.sm1 2004/11/22 12:30:32 1.8 @@ -1,8 +1,10 @@ -% $OpenXM: OpenXM/src/kan96xx/Doc/cgi.sm1,v 1.2 2004/09/24 13:15:27 takayama Exp $ +% $OpenXM: OpenXM/src/kan96xx/Doc/cgi.sm1,v 1.7 2004/10/13 12:11:31 takayama Exp $ % OpenXM/src/polymake/cgi/cgi-polymake.sh % is a shell script to call sm1/polymake as a CGI script. % Override as /doPolymake {doPolymake.OoHG} def if you need. +/cgi.verbose 0 def + [(plugin-cgi) [(Key words: ) ( cgiUrlEncodingToKeyValuePair) @@ -96,16 +98,21 @@ /cgiPolymake { { [(getenv) (QUERY_STRING)] extension /cgi.query_string set - cgi.query_string isString { } + cgi.query_string isString { + cgi.query_string length 0 eq { + cgiPolymake.errorMessage message exit + } { } ifelse + } { cgiPolymake.errorMessage message exit } ifelse - cgi.body.http0 message + cgi.body.http0 message cgi.query_string cgiPolymake.0 cgi.body cgiReplyInHttp0 /cgi.body.http set cgi.body.http message exit } loop + [(flush)] extension } def /cgiPolymake.errorMessage [ (Content-Type: text/html) nl @@ -120,7 +127,7 @@ () nl (
) nl () nl - () nl (
) nl () nl @@ -138,6 +145,7 @@ def % Step 1. analyze the query string in URL encoding. [(cgiUrlEncodingToKeyValuePair) sss] extension /kv set kv (oxMessageBody) getNode /comm set +% [nl nl] cat message sss message kv message % for debug. % Step 2. Extract action part and file part for polymake. comm (array) dc /comm set /i 0 def @@ -167,7 +175,7 @@ def [cgiPolymake.polymakeName (stringInOut://cgi_body.poly) acti0] addStdoutStderr oxshell pop pError [@@@stdout @@@stderr] append /pError set - /cgi.body cgi_body def + /cgi.body cgi_body def ] pop popVariables } def @@ -195,8 +203,8 @@ def /ss arg1 def [[(Content-Body) ss] % [(Content-Type) (text/plain)] - [(oxshell-stdout) @@@stdout] - [(oxshell-stderr) @@@stderr] + [(oxshell-stdout) [(cgiStringToUrlEncoding) @@@stdout] extension] + [(oxshell-stderr) [(cgiStringToUrlEncoding) @@@stderr] extension] ] /sskv set [(cgiKeyValuePairToHttpString) sskv] extension /arg1 set ] pop @@ -205,14 +213,15 @@ def % ------------ client side script --------------- /cgiQueryPolymake.hostname (polymake.math.kobe-u.ac.jp) def -/cgiQueryPolymake.cginame (cgi-bin/cgi-polymake.sh) def +/cgiQueryPolymake.cginame (/cgi-bin/cgi-polymake.sh) def /cgiQueryPolymake { /arg2 set /arg1 set [/saction /sfile /ff /ff1 /sss2 /goo /pp /pp2] pushVariables [ /saction arg1 def /sfile arg2 def % step1. Generate query in URL encoding. - [[(URL) cgiQueryPolymake.cginame] + [[(URL) [(http://) cgiQueryPolymake.hostname cgiQueryPolymake.cginame] cat] +% full URL necessary for virtual host of apache. [(oxMessageBody) [saction ( ) sfile nl ] cat @@ -224,7 +233,17 @@ def [80 cgiQueryPolymake.hostname]] extension 0 get /goo set [(sm1.socket) (write) [goo sss2]] extension goo readHTTP0 /pp set - pp message + + % For the case of error. + [(regexec) (200 OK) [pp]] extension length 0 eq { + (sss2=) message + sss2 message + (pp=) message + pp message + (cgi.sm1: there seems to be an error in the HTTP connection.) + } { } ifelse + + cgi.verbose { pp message } { } ifelse [(sm1.socket) (close) [goo]] extension [(cgiHttpToKeyValuePair) pp] extension /pp2 set @@ -240,6 +259,7 @@ def % Overrides doPolymake %/doPolymake { doPolymake.OoHG } def +%/polymake.start { polymake.start.OoHG } def [(doPolymake.OoHG) [(It first looks for local polymake. If there is, it calls the local polymake.) @@ -266,13 +286,22 @@ def @@@polymake.k0.ccc ( QuoteMode(0); ) oxexecutestring [(treeToPolymake) ptree] extension /pNative set %% step 2: calling the polymake - [(which) (polymake)] oxshell tag 0 eq +% [(which) (polymake)] oxshell tag 0 eq + 1 % always call web service { % cgi-polymake (Trying web service.) message pAction pNative cgiQueryPolymake /doPolymake.OoHG.result set + [(regexec) (Not Found) [doPolymake.OoHG.result 0 get ]] + extension length 0 eq not { + doPolymake.OoHG.result message + (The polymake cgi seems to be out of service.) error + } { } ifelse + doPolymake.OoHG.result 0 get /pNative set + + pError doPolymake.OoHG.result rest append /pError set } { % local polymake @@ -294,6 +323,24 @@ def ] pop popVariables arg1 +} def + +/polymake.start.OoHG { + (ox.k0.loaded) boundp { } + { [(parse) (ox.sm1) pushfile] extension + /@@@polymake.k0.ccc [ ] def + } ifelse + @@@polymake.k0.ccc [ ] eq { + k0connectr /@@@polymake.k0.ccc oxk0.ccc def /oxk0.ccc [ ] def + @@@polymake.k0.ccc oxsetmathcap @@@polymake.k0.ccc oxmathcap + } { } ifelse + @@@polymake.k0.ccc 0 get (closed) eq { + k0connectr /@@@polymake.k0.ccc oxk0.ccc def /oxk0.ccc [ ] def + @@@polymake.k0.ccc oxsetmathcap @@@polymake.k0.ccc oxmathcap + } { } ifelse + [(which) (polymake2tfb)] oxshell tag 0 eq { + (polymake2tfb is not installed in this system.) error + } { } ifelse } def