File: [local] / OpenXM / src / kan96xx / Doc / cgi.sm1 (download)
Revision 1.2, Fri Sep 24 13:15:27 2004 UTC (19 years, 9 months ago) by takayama
Branch: MAIN
Changes since 1.1: +87 -10
lines
A test of a cgi version of polymake (incomplete).
|
% $OpenXM: OpenXM/src/kan96xx/Doc/cgi.sm1,v 1.2 2004/09/24 13:15:27 takayama Exp $
% A sample code
% (OpenXM) cgiQueryGoogle --> it does not work well.
/cgiQueryGoogle {
/key set
[[(URL),(/search)],
[(hl),(ja)],
[(ie),(UTF-8)],
[(q),key]] /kv set
[(cgiKeyValuePairToUrlEncodingString) kv] extension /sss set
[(GET ) , sss , ( HTTP/0.9) , nl , nl ] cat /sss2 set
[(sm1.socket) (connect) [80 (www.google.co.jp)]] extension 0 get /goo set
[(sm1.socket) (write) [goo sss2]] extension
goo readHTTP0 /pp set
pp message
[(sm1.socket) (close) [goo]] extension
[(cgiHttpToKeyValuePair) pp] extension /pp2 set
} def
% A sample
% (www.math.kobe-u.ac.jp) cgiGetIndex
/cgiGetIndex {
/url set
[[(URL),(/index.html)]
] /kv set
[(cgiKeyValuePairToUrlEncodingString) kv] extension /sss set
[(GET ) , sss , ( HTTP/0.9) , nl , nl ] cat /sss2 set
sss2 message
[(sm1.socket) (connect) [80 url]] extension 0 get /goo set
[(sm1.socket) (write) [goo sss2]] extension
goo readHTTP0 /pp set
pp message
[(sm1.socket) (close) [goo]] extension
[(cgiHttpToKeyValuePair) pp] extension /pp2 set
} def
/readHTTP0 {
/arg1 set
[/fd /sss /pp /pp2 /nn] pushVariables
[
/fd arg1 def
/sss [ ] def
{
[(sm1.socket) (select) [fd -1]] extension {
} { (select error) error } ifelse
[(sm1.socket) (read) [fd]] extension /pp set
pp length 0 eq { exit } { } ifelse
sss pp append /sss set
} loop
sss cat /arg1 set
] pop
popVariables
arg1
} def
% oxMessageBody=FACET input-data
/cgiPolymake {
[(getenv) (QUERY_STRING)] extension cgiPolymake.0
} def
/cgiPolymake.0 {
/arg1 set
[/sss /kv /comm /i /acti0 /pError] pushVariables
[
/sss arg1 def
[(cgiUrlEncodingToKeyValuePair) sss] extension /kv set
kv (oxMessageBody) getNode /comm set
comm (array) dc /comm set
/i 0 def
[
0 1, comm length 1 sub {
/i set
comm,i,get 33 lt {
exit
} { comm,i,get } ifelse
} for
] /acti0 set
acti0 { (string) dc } map cat /acti0 set
/cgi.body comm def
0 1 i {
cgi.body rest /cgi.body set
} for
cgi.body { (string) dc } map cat /cgi.body set
% acti0 cgi.body
/pError [ ] def
% bug: cgi.body --> oxsVarToFile(), value is not a string object ...
% [(polymake) (stringInOut://cgi.body) acti0] addStdoutStderr
/aaa cgi.body def
[(polymake) (stringInOut://aaa) acti0] addStdoutStderr
oxshell pop
pError [@@@stdout @@@stderr] append /pError set
] pop
popVariables
} def
/cgi.test0 {
[[(URL) (hoge)]
[(oxMessageBody)
[(FACETS )
(POINTS) nl
(1 0 0) nl
(1 1 0) nl
(1 0 1) nl
(1 1 1) nl ] cat
]] /ff set
[(cgiKeyValuePairToUrlEncodingString) ff] extension /ff1 set
ff1 message
ff1 cgiPolymake.0
cgi.body message
} def