[BACK]Return to cgi.sm1 CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Doc

File: [local] / OpenXM / src / kan96xx / Doc / cgi.sm1 (download)

Revision 1.2, Fri Sep 24 13:15:27 2004 UTC (19 years, 8 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