version 1.6, 2004/09/28 12:20:39 |
version 1.12, 2004/12/29 01:42:13 |
|
|
% $OpenXM: OpenXM/src/kan96xx/Doc/cgi.sm1,v 1.5 2004/09/27 11:18:23 takayama Exp $ |
% $OpenXM: OpenXM/src/kan96xx/Doc/cgi.sm1,v 1.11 2004/11/23 02:38:46 takayama Exp $ |
% OpenXM/src/polymake/cgi/cgi-polymake.sh |
% OpenXM/src/polymake/cgi/cgi-polymake.sh |
% is a shell script to call sm1/polymake as a CGI script. |
% is a shell script to call sm1/polymake as a CGI script. |
% Override as /doPolymake {doPolymake.OoHG} def if you need. |
% Override as /doPolymake {doPolymake.OoHG} def if you need. |
|
|
[[(URL),(/index.html)] |
[[(URL),(/index.html)] |
] /kv set |
] /kv set |
[(cgiKeyValuePairToUrlEncodingString) kv] extension /sss set |
[(cgiKeyValuePairToUrlEncodingString) kv] extension /sss set |
[(GET ) , sss , ( HTTP/0.9) , nl , nl ] cat /sss2 set |
% [(GET ) , sss , ( HTTP/0.9) , nl , nl ] cat /sss2 set |
|
[(GET ) , sss , ( HTTP/0.9) , nl , |
|
(HOST: ) , url , nl |
|
nl ] cat /sss2 set |
|
|
sss2 message |
sss2 message |
[(sm1.socket) (connect) [80 url]] extension 0 get /goo set |
[(sm1.socket) (connect) [80 url]] extension 0 get /goo set |
|
|
]] putUsages |
]] putUsages |
% Server-side-script |
% Server-side-script |
% oxMessageBody=action input-data-for-polymake |
% oxMessageBody=action input-data-for-polymake |
% sm1 -q -s "[(parse) (cgi.sm1) pushfile] extension cgiPolymake quit " |
% t.t : oxMessageBody=FACETS++POINTS%0A1+0+0+%0A1+1+0+%0A1+0+1%0A |
% env QUERY_STRING="t?oxMessageBody=FACETS+POINTS+1+0+0%0A" sm1 -q -s "[(parse) (cgi.sm1) pushfile] extension cgiPolymake quit " |
% t?oxMe... |
|
% env CONTENT_LENGTH=57 sm1 -q -s "[(parse) (cgi.sm1) pushfile] extension cgiPolymake quit " <t.t |
/cgiPolymake { |
/cgiPolymake { |
{ |
{ |
[(getenv) (QUERY_STRING)] extension /cgi.query_string set |
[(getenv) (CONTENT_LENGTH)] extension /cgi.content_length set |
|
cgi.content_length isString { |
|
} { |
|
cgiPolymake.errorMessage message exit |
|
} ifelse |
|
cgi.content_length .. (integer) dc /cgi.content_length set |
|
cgi.content_length 1 lt { |
|
cgiPolymake.errorMessage message exit |
|
} { } ifelse |
|
[(read) 0 cgi.content_length] extension /cgi.query_string set |
cgi.query_string isString { |
cgi.query_string isString { |
cgi.query_string length 0 eq { |
cgi.query_string length 0 eq { |
cgiPolymake.errorMessage message exit |
cgiPolymake.errorMessage message exit |
|
|
(1 1 0 ) nl |
(1 1 0 ) nl |
(1 0 1 ) nl |
(1 0 1 ) nl |
(</pre>) nl |
(</pre>) nl |
(<form>) nl |
(<form method="POST">) nl |
(<input type=submit>) nl |
(<input type=submit>) nl |
(<textarea name="oxMessageBody") nl |
(<textarea name="oxMessageBody") nl |
( rows=10 cols="80" wrap="soft"></textarea>) nl |
( rows=10 cols="80" wrap="soft"></textarea>) nl |
|
|
[ |
[ |
/saction arg1 def /sfile arg2 def |
/saction arg1 def /sfile arg2 def |
% step1. Generate query in URL encoding. |
% step1. Generate query in URL encoding. |
[[(URL) cgiQueryPolymake.cginame] |
[(http://) cgiQueryPolymake.hostname cgiQueryPolymake.cginame] cat |
[(oxMessageBody) |
/ff1 set |
[saction ( ) |
% full URL necessary for virtual host of apache. |
sfile nl ] cat |
[[(oxMessageBody) |
]] /ff set |
[saction ( ) |
[(cgiKeyValuePairToUrlEncodingString) ff] extension /ff1 set |
sfile nl ] cat |
[(GET ) , ff1 , ( HTTP/0.9) , nl , nl ] cat /sss2 set |
] |
|
] /ff set |
|
[(cgiKeyValuePairToUrlEncodingString) ff] extension /ff set |
|
[(POST ) , ff1 , ( HTTP/0.9) , nl , |
|
% (Connection: Keep-Alive) , nl , |
|
(HOST: ) cgiQueryPolymake.hostname , nl , |
|
(Content-length: ) , ff length (dollar) dc , nl , nl |
|
ff nl] cat /sss2 set |
% step 2. Call the server and get the response in pp |
% step 2. Call the server and get the response in pp |
[(sm1.socket) (connect) |
[(sm1.socket) (connect) |
[80 cgiQueryPolymake.hostname]] extension 0 get /goo set |
[80 cgiQueryPolymake.hostname]] extension 0 get /goo set |
[(sm1.socket) (write) [goo sss2]] extension |
[(sm1.socket) (write) [goo sss2]] extension |
goo readHTTP0 /pp set |
goo readHTTP0 /pp set |
|
|
|
% 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 |
cgi.verbose { pp message } { } ifelse |
[(sm1.socket) (close) [goo]] extension |
[(sm1.socket) (close) [goo]] extension |
[(cgiHttpToKeyValuePair) pp] extension /pp2 set |
[(cgiHttpToKeyValuePair) pp] extension /pp2 set |
|
|
arg1 |
arg1 |
} def |
} def |
|
|
|
/cgi.test1 { |
|
(FACETS) |
|
[(POINTS) nl |
|
(1 0 0 ) nl |
|
(1 1 0 ) nl |
|
(1 0 1 ) nl |
|
] cat |
|
cgiQueryPolymake message |
|
} def |
% Overrides doPolymake |
% Overrides doPolymake |
%/doPolymake { doPolymake.OoHG } def |
%/doPolymake { doPolymake.OoHG } def |
|
%/polymake.start { polymake.start.OoHG } def |
|
|
[(doPolymake.OoHG) |
[(doPolymake.OoHG) |
[(It first looks for local polymake. If there is, it calls the local polymake.) |
[(It first looks for local polymake. If there is, it calls the local polymake.) |
|
|
(Trying web service.) message |
(Trying web service.) message |
pAction pNative cgiQueryPolymake /doPolymake.OoHG.result set |
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 |
doPolymake.OoHG.result 0 get /pNative set |
|
|
|
|
pError doPolymake.OoHG.result rest append /pError set |
pError doPolymake.OoHG.result rest append /pError set |
} { |
} { |
% local polymake |
% local polymake |
|
|
] pop |
] pop |
popVariables |
popVariables |
arg1 |
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 |
} def |
|
|
|
|