version 1.1, 2001/04/20 13:38:31 |
version 1.29, 2009/02/22 17:30:03 |
|
|
%% $OpenXM$ |
%% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.28 2006/02/11 02:34:53 takayama Exp $ |
%% http server by sm1 |
%% http server by sm1 |
|
|
|
[(parse) (httpd.sm1) pushfile] extension pop |
|
|
|
/httpd.port 1200 def |
|
/httpd.image.name (kobeuniv2.jpg) def |
|
|
|
/httpd.initialization |
|
%% Put initialization codes here. |
|
[ |
|
(XM_debug=0; ctrl("debug_window",0);) |
|
("Asirweb version 0.80. "+ |
|
" Risa/Asir oxasir version "+rtostr(version());) |
|
] cat |
|
def |
|
|
[(parse) (oxasir.sm1) pushfile] extension |
[(parse) (oxasir.sm1) pushfile] extension |
(oxasir.started) boundp { |
(oxasir.started) boundp { |
} { |
} { |
|
%% Initialize oxasir. |
[(x^2-1) (x)] fctr pop |
[(x^2-1) (x)] fctr pop |
|
oxasir.ccc oxmathcap |
|
oxasir.ccc oxsetmathcap |
} ifelse |
} ifelse |
|
|
/startserver { |
/ox-win.start.iconic 1 def |
[(sm1.socket) (open) [1200 (localhost)]] extension /server.fdAndPort set |
/ox.win.set.start { |
(sm1.socket.open returns ) messagen server.fdAndPort message |
[(stat) (c:\windows\system32\cmd.exe)] extension 0 get |
[(sm1.socket) (accept) [server.fdAndPort 0 get]] extension |
0 eq { |
/server.fd set |
/ox.win.start.0 [(c:\windows\system32\cmd.exe) (/c) (start)] def |
(connected.) message |
/ox.win.start [ox.win.start.0 aload pop |
(sm1.socket.accept returns ) messagen server.fd message |
ox-win.start.iconic { (/min) } { } ifelse ] def |
|
}{ |
|
[(stat) (c:\winnt\system32\cmd.exe)] extension 0 get |
|
0 eq { |
|
/ox.win.start.0 [(c:\winnt\system32\cmd.exe) (/c) (start) ] def |
|
/ox.win.start [ox.win.start.0 aload pop |
|
ox-win.start.iconic { (/min) } { } ifelse ] def |
|
}{ |
|
/ox.win.start.0 [ (start) ] def |
|
/ox.win.start [ ox.win.start.0 aload pop |
|
ox-win.start.iconic { (/min) } { } ifelse ] def |
|
} ifelse |
|
} ifelse |
} def |
} def |
|
|
/stopserver { |
/webasir { asirweb } def |
[(sm1.socket) (close) server.fd ] extension message |
/asirweb { |
} def |
[/rrr /cmd] pushVariables |
|
[ |
|
%% This procedure to generate port number might fail. |
|
[(oxGenPass)] extension . (integer) dc /rrr set |
|
rrr << rrr 20000 idiv 20000 mul >> sub /rrr set |
|
/httpd.port 1200 rrr add def |
|
httpd.port message |
|
|
/send { |
%%[(sleep 3; netscape -geometry 800x500 http://localhost:) |
/arg1 set |
%% httpd.port toString |
[(sm1.socket) (write) [server.fd 0 get arg1]] extension message |
%% ( &)] cat system |
} def |
[(ostype)] extension 0 get |
|
(windows) eq { |
|
%% On windows. |
|
ox.win.set.start |
|
[(forkExec) |
|
[ |
|
%%(c:\windows\command\start) |
|
ox.win.start.0 aload pop |
|
(iexplore) %% Starting internet explorer (TM). |
|
[(http://localhost:) httpd.port toString] cat |
|
] |
|
[ ] |
|
3] extension |
|
}{ |
|
%% On unix. |
|
httpd.port httpd.startBrowserUnix |
|
} ifelse |
|
|
/sendln { |
httpd ; |
/mmm set |
] pop |
mmm tag 5 eq { |
popVariables |
[mmm 10 (string) dc] cat /mmm set |
|
}{ |
|
10 (string) dc /mmm set |
|
} ifelse |
|
[(sm1.socket) (write) [server.fd 0 get mmm]] extension message |
|
} def |
} def |
|
|
/httpd { |
|
{ |
|
startserver ; |
|
action ; |
|
stopserver ; |
|
(5 sleep) system |
|
} loop |
|
} def |
|
|
|
/action { |
/httpd_action { |
|
[/in-httpd /ff /httpd.com /httpd.result /sss |
|
/sss.engine /sss.web /err |
|
/oxserver.vname |
|
] pushVariables |
|
[ |
{ |
{ |
/httpd.com.old ( ) def |
[(sm1.socket) (select) [httpd.server.fd 0 get -1]] extension |
[(sm1.socket) (select) [server.fd 0 get -1]] extension |
%% wait for ever |
%% wait for ever |
[(sm1.socket) (readHTTP) [httpd.server.fd 0 get ]] extension /ff set |
{ |
ff tag 0 eq { |
[(sm1.socket) (read) [server.fd 0 get ]] extension /ff set |
(connection is closed.) message exit |
ff length 0 eq { |
|
(connection is closed.) message |
|
} |
} |
ff (quit) eq |
{ |
{ (We exit the function httpd) message exit } |
|
{ %% [(SigIgn) 0] system_variable |
|
(------------ start ----------------------) message |
(------------ start ----------------------) message |
ff message |
ff message |
(-----------------------------------------) message |
(-----------------------------------------) message |
ff removeGET webstringToAscii /httpd.com set |
ff 1 copy askToSendFile /httpd.sendFile set |
httpd.com message |
httpd.sendFile tag 0 eq { |
|
ff removeGET webstringToAscii /httpd.com set |
|
} { |
|
/httpd.com (NONE) def |
|
} ifelse |
|
[(httpd.com=) httpd.com] cat message |
|
(httpd.sendFile=) messagen httpd.sendFile message |
(------------ end ----------------------) message |
(------------ end ----------------------) message |
( ) message |
( ) message |
oxasir.ccc |
httpd.serial 0 eq { |
[(if (1) {) httpd.com (};)] cat |
/httpd.com httpd.initialization def |
oxexecutestring ; |
/httpd.textarea.valid 1 def |
oxasir.ccc oxpopstring /httpd.result set |
} { } ifelse |
/httpd.com.old httpd.com def |
httpd.sendFile tag 0 eq { } |
(------------- result -------------) message |
{ |
httpd.result message |
httpd.sendFile httpd.image.type send-image |
(----------------------------------) message |
exit %% exit the loop LOOP-A |
( ) message |
} ifelse |
[(Input:) (<pre> ) httpd.com (</pre>) (<br>) |
httpd.com metaCommand { |
(Output:) (<pre>) |
httpd.textarea.valid { |
httpd.result |
/oxserver.vname |
(</pre>) |
[Oxserver_history_variable httpd.serial toString] cat |
] cat |
def |
send-page-3 exit |
oxasir.ccc |
%% [(SigIgn) 1] system_variable |
[(if (1) {) httpd.com (; };)] cat |
|
oxexecutestring ; |
|
}{ |
|
send-page-warning exit |
|
} ifelse |
|
[(oxReq) oxasir.ccc SM_dupErrors ] extension pop |
|
|
|
[(oxReq) oxasir.ccc SM_popCMO ] extension pop |
|
|
|
[(oxReq) oxasir.ccc SM_setName oxserver.vname] extension pop |
|
oxasir.ccc [oxserver.vname (;)] cat oxexecutestring |
|
|
|
[(oxReq) oxasir.ccc SM_popString ] extension pop |
|
[(flush)] extension pop |
|
%% Select inputs for interruption. |
|
%% Wait by the spin lock. |
|
{ |
|
[(oxMultiSelect) [oxasir.ccc] 1] extension 1 get 0 get |
|
/sss.engine set |
|
[(sm1.socket) (mselect) |
|
[[httpd.server.fd 0 get] 1] |
|
] extension 0 get /sss.web set |
|
/sss [sss.engine sss.web] def |
|
sss.engine { exit } { } ifelse |
|
sss.web { exit } { } ifelse |
|
} loop |
|
sss message |
|
|
|
sss 0 get { |
|
[(oxGet) oxasir.ccc] extension /err set |
|
[(oxGet) oxasir.ccc] extension /httpd.result set |
|
%% oxasir.ccc oxpopstring /httpd.result set |
|
} { |
|
oxasir.ccc oxreset |
|
oxasir.ccc ("computation is interrupted.";) oxexecutestring ; |
|
oxasir.ccc oxpopstring |
|
/httpd.result set |
|
exit |
|
} ifelse |
|
(------------- result -------------) message |
|
httpd.result message |
|
(----------------------------------) message |
|
( ) message |
|
|
|
err message |
|
err [ ] eq { |
|
/httpd.history |
|
httpd.history |
|
[10 (string) dc |
|
(/**** ) httpd.serial toString ( ****/) |
|
10 (string) dc |
|
httpd.com |
|
(;) %% add extra ; |
|
] cat |
|
append |
|
def |
|
} { |
|
oxasir.ccc cleanErrors |
|
[httpd.result 10 (string) dc err toString] cat |
|
/httpd.result set |
|
} ifelse |
|
|
|
[httpd.serial 0 eq { } { |
|
(<title> asirweb </title> ) |
|
(<font color="blue"> Input-) httpd.serial toString |
|
(: </font> ) |
|
httpd.com preformatHTML (<br>) |
|
} ifelse |
|
(<font color="green"> Output-) httpd.serial toString |
|
(: </font> ) |
|
(<a href="http://localhost:) httpd.port toString |
|
(/?msg=httpdAsirMeta+Pretty+) httpd.serial toString |
|
("> (in pretty format) </a>) |
|
%%(<a href=") httpd.image.name ("> (in pretty format) </a>) %%test |
|
httpd.result preformatHTML |
|
httpd.result.history httpd.result append /httpd.result.history set |
|
] cat |
|
send-page-3 exit %% exit the loop LOOP-A |
|
} { exit } ifelse %% metaCommand |
} ifelse |
} ifelse |
} |
} loop %% LOOP-A |
{ } ifelse |
] pop |
} loop |
popVariables |
} def |
} def |
|
|
|
|
/send-page-1 { |
|
(HTTP/0.9 200 OK) sendln |
/httpd.asirman |
%% (Date: Sun, 18 Mar 2001 02:54:50 GMT) sendln |
("http://www.math.sci.kobe-u.ac.jp/OpenXM/Current/doc/asir2000/html-ja/man_toc.html") |
%% (Server: sm1/0.1 (Unix)) sendln |
def |
%% (Last-Modified: Wed, 23 Aug 2000 11:19:27 GMT) sendln |
/httpd.asirman.contrib |
%% (ETag: "1f8f-5df-39a3b33f") sendln |
("http://www.math.sci.kobe-u.ac.jp/OpenXM/Current/doc/asir-contrib/ja/cman-html/cman-ja_toc.html") |
%% (Accept-Ranges: bytes) sendln |
def |
%% (Content-Length: 10) sendln |
/httpd.asir.intro |
(Connection: close) sendln |
("http://www.math.sci.kobe-u.ac.jp/~taka/asir-book-html/main") |
(Content-Type: text/plain) sendln |
def |
0 sendln |
/send-menu-1 { |
(HOGE HOGE!) sendln |
|
0 sendln |
(FILE:) sendln |
[(flush)] extension |
[$<a href="http://localhost:$ httpd.port toString |
|
$/?msg=httpdAsirMeta+quit"> Shutdown the asir server. </a>, $ |
|
] cat sendln |
|
%% [$<a href="http://localhost:$ httpd.port toString |
|
%% $/?msg=httpdAsirMeta+interrupt"> interrupt </a>, $ |
|
%% ] cat sendln |
|
[$<a href="http://localhost:$ httpd.port toString |
|
$/?msg=httpdAsirMeta+save"> save. </a>, $ |
|
] cat sendln |
|
( <spacer type=horizontal size=80> ) sendln |
|
|
|
(HELP:) sendln |
|
[(<font color="red"> |
|
<a href=) httpd.asirman ( > AsirManual (Ja) </a> </font>, )] cat sendln |
|
[(<font color="purple"> |
|
<a href=) httpd.asirman.contrib ( > AsirContrib (Ja) </a> </font>, )] cat sendln |
|
[(<font color="blue"> |
|
<a href=) httpd.asir.intro ( > Intro (Ja) </a> </font>, )] cat sendln |
} def |
} def |
|
|
/send-page-2 { |
/send-page-save { |
|
[/in-send-page-save /i] pushVariables |
|
[ |
(HTTP/0.9 200 OK) sendln |
(HTTP/0.9 200 OK) sendln |
%% (Content-Length: 10) sendln |
|
(Connection: close) sendln |
(Connection: close) sendln |
(Content-Type: text/html) sendln |
(Content-Type: text/plain) sendln |
0 sendln |
0 sendln |
(<FORM NAME="myFORM">) sendln |
(/* Saved the following to sm1out.txt */) sendln |
(<INPUT TYPE="TEXT" NAME="Num">) sendln |
(/* Save the following by your browser as a text file. */) sendln |
(</FORM>) sendln |
|
|
0 1 httpd.history length 1 sub { |
|
/i set |
|
httpd.history i get sendln |
|
} for |
|
( end$) sendln |
0 sendln |
0 sendln |
[(flush)] extension |
[(flush)] extension |
|
[(PrintDollar) 1] system_variable |
|
httpd.history output |
|
[(PrintDollar) 0] system_variable |
|
] pop |
|
popVariables |
} def |
} def |
|
|
/send-page-3 { |
|
|
/metaCommand { |
/arg1 set |
/arg1 set |
[/in-send-page-3 /result] pushVariables |
[/in-metaCommand /msg /result /msg2 /nn |
|
/err /fn |
|
] pushVariables |
[ |
[ |
/result arg1 def |
/msg arg1 def |
(HTTP/0.9 200 OK) sendln |
/result 1 def |
(Connection: close) sendln |
msg 1 copy toTokensBySpace /msg2 set |
(Content-Type: text/html) sendln |
msg2 length 3 eq { |
0 sendln |
msg2 0 get (httpdAsirMeta) eq |
%% (<FORM NAME="myFORM" METHOD="POST">) sendln |
msg2 1 get (Pretty) eq and |
result sendln |
{ |
(<FORM NAME="myFORM">) sendln |
httpd.image.type tag 0 eq { |
(<INPUT TYPE=submit VALUE="submit">) sendln |
send-page-warning-image |
(<textarea name=msg rows=10 cols="62" wrap="soft"></textarea>) sendln |
/skip-image goto |
(</FORM>) sendln |
} { } ifelse |
0 sendln |
|
[(flush)] extension |
|
] pop |
|
popVariables |
|
} def |
|
|
|
|
|
/stopclient { |
msg2 2 get . (integer) dc /nn set |
[(sm1.socket) (close) [client.fdAndPort 0 get] ] extension message |
|
} def |
|
|
|
|
%% Reformat the "nn"-th result by tex and send it. |
|
%% BUG: index is out of bound. httpd.result.history nn get message |
|
|
/fromHex { |
oxasir.ccc |
/arg1 set |
[$print_$ httpd.image.type $_form(Oxserver_history_variable_$ |
[/in-fromHex /s1 /s2 /c /c2] pushVariables |
nn toString |
[ |
$);$ |
arg1 0 get /s1 set |
] cat |
arg1 1 get /s2 set |
(cmo) |
|
executeStringAndSelectInputFromBrowserAndOxserver |
|
dup 0 get /err set |
|
1 get /fn set |
|
err [ ] eq { |
|
fn 0 get httpd.image.type send-image |
|
} { |
|
[err preformatHTML] cat |
|
send-page-3 |
|
} ifelse |
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
48 s1 le s1 57 le and { % 0, ..., 9 |
/skip-image |
s1 48 sub /c set |
/result 0 def |
|
} { } ifelse |
}{ } ifelse |
}{ } ifelse |
65 s1 le s1 70 le and { % A, ..., F |
msg (httpdAsirMeta quit) eq { |
s1 65 sub 10 add /c set |
oxasir.ccc oxshutdown |
}{ } ifelse |
send-page-bye |
97 s1 le s1 102 le and { % a, ..., f |
quit |
s1 97 sub 10 add /c set |
/result 0 def |
}{ } ifelse |
} { } ifelse |
c 16 mul /c set |
msg (httpdAsirMeta save) eq { |
|
send-page-save |
48 s2 le s2 57 le and { % 0, ..., 9 |
/result 0 def |
s2 48 sub /c2 set |
} { } ifelse |
}{ } ifelse |
msg (httpdAsirMeta interrupt) eq { |
65 s2 le s2 70 le and { % A, ..., F |
oxasir.ccc oxreset |
s2 65 sub 10 add /c2 set |
(Interrupted! <br>) send-page-3 |
}{ } ifelse |
/result 0 def |
97 s2 le s2 102 le and { % a, ..., f |
} { } ifelse |
s2 97 sub 10 add /c2 set |
/arg1 result def |
}{ } ifelse |
|
c c2 add /arg1 set |
|
] pop |
|
popVariables |
|
arg1 |
|
} def |
|
|
|
/removeGET { |
|
/arg1 set |
|
[/in-removeGET /s /s2 /i /j] pushVariables |
|
[ |
|
/s arg1 def |
|
s 1 copy /s2 set |
|
s (array) dc /s set |
|
/j 0 def |
|
10 1 s length 1 sub { |
|
/i set |
|
s2 j << s i get (string) dc >> put |
|
j 1 add /j set |
|
} for |
|
/arg1 s2 def |
|
] pop |
|
arg1 |
|
} def |
|
|
|
/webstringToAscii { |
|
/arg1 set |
|
[/in-webstringToAscii /s /i /j /c /n] pushVariables |
|
[ |
|
/s arg1 def |
|
s (array) dc /s set |
|
/j 0 def /n s length def |
|
/i 0 def |
|
{ |
|
s i get /c set |
|
c 32 eq { exit } { } ifelse |
|
c 37 eq { % c == % |
|
[s i 1 add get s i 2 add get] fromHex /c set |
|
s j c put |
|
j 1 add /j set |
|
i 3 add /i set |
|
} { |
|
c 43 eq { % c == + |
|
s j 32 put |
|
j 1 add /j set |
|
i 1 add /i set |
|
} { |
|
c 13 eq { % c == 0xd |
|
i 1 add /i set |
|
} { |
|
s j c put |
|
j 1 add /j set |
|
i 1 add /i set |
|
} ifelse |
|
} ifelse |
|
} ifelse |
|
i n ge { exit } { } ifelse |
|
} loop |
|
s j carN /s set |
|
s { (string) dc } map cat /arg1 set |
|
] pop |
] pop |
popVariables |
popVariables |
arg1 |
arg1 |
} def |
|
|
|
|
} def |