%% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-sm1.sm1,v 1.13 2002/10/17 13:40:28 takayama Exp $ %% http server by sm1 %% Note to run on the Windows (TM). %% (A) You need to set IE (internet explorer) as follows: %% (1) Visit the menu %% tool / internet option / connection / LAN configuration %% (2) Add localhost to the list of hosts which are not accessed via %% the proxy server. %% (B) You need to have the "start.exe" at c:\windows\command\start.exe %% (C) cygwin1.dll should be by sm1.exe, ox_sm1.exe and ox.exe [(parse) (httpd.sm1) pushfile] extension pop /httpd.image.name (kobeuniv2.jpg) def /httpd.image.type (jpeg) def /httpd.port 1200 def /httpd.initialization %% Put initialization codes here. [ ([$parse$ $cohom.sm1$ pushfile] extension [$Web/sm1 version 0.80. $ $Kan/sm1 ox_sm1 version $ [$Version$] system_variable] cat) ] cat def [(ostype)] extension 0 get (windows) eq { %% Native windows environment or cygwin. [(parse) (ox-win.sm1) pushfile] extension }{ [(parse) (ox.sm1) pushfile] extension } ifelse (ox_sm1.started) boundp { } { %% Initialize ox_sm1 [(ostype)] extension 0 get sm1connectr ox.ccc oxmathcap ox.ccc oxsetmathcap } ifelse /websm1 { [/rrr ] 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 % [(sleep 3; start iexplore http://localhost:) % httpd.port toString % ( &)] cat system [(ostype)] extension 0 get (windows) eq { %% On windows. [(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. [(sleep 3 ; netscape http://localhost:) httpd.port toString ( & ) ] cat system } ifelse httpd ; ] pop popVariables } def /httpd_action { [/in-httpd /ff /httpd.com /httpd.result /sss /sss.engine /sss.web /err /httpd.sendFile /oxserver.vname ] pushVariables [ { [(sm1.socket) (select) [httpd.server.fd 0 get -1]] extension %% wait for ever [(sm1.socket) (readBlock) [httpd.server.fd 0 get ]] extension /ff set ff length 0 eq { (connection is closed.) message } { (------------ start ----------------------) message ff message (-----------------------------------------) message ff 1 copy askToSendFile /httpd.sendFile set 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 ( ) message httpd.serial 0 eq { /httpd.com httpd.initialization def } { } ifelse httpd.sendFile tag 0 eq { } { httpd.sendFile httpd.image.type send-image exit %% exit the loop LOOP-A } ifelse httpd.com metaCommand { httpd.textarea.valid { /oxserver.vname [Oxserver_history_variable httpd.serial toString] cat def ox.ccc [ httpd.com ( /) oxserver.vname ( set ) oxserver.vname ( ) ] cat oxexecutestring ; }{ send-page-warning exit } ifelse [(oxReq) ox.ccc SM_dupErrors ] extension pop [(oxReq) ox.ccc SM_popCMO ] extension pop [(oxReq) ox.ccc SM_popString ] extension pop [(flush)] extension pop %% Select inputs for interruption. %% Wait by the spin lock. { [(oxMultiSelect) [ox.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) ox.ccc] extension /err set [(oxGet) ox.ccc] extension /httpd.result set %% ox.ccc oxpopstring /httpd.result set } { ox.ccc oxreset ox.ccc ("computation is interrupted.";) oxexecutestring ; ox.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 37 (string) dc httpd.serial toString 10 (string) dc httpd.com ( ) %% add extra ; ] cat append def } { ox.ccc cleanErrors [httpd.result 10 (string) dc err toString] cat /httpd.result set } ifelse [httpd.serial 0 eq { } { ( Web/sm1 ) ( Input-) httpd.serial toString (: ) httpd.com preformatHTML (
) } ifelse ( Output-) httpd.serial toString (: ) ( (in pretty format) ) %%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 } loop %% LOOP-A ] pop popVariables } def /httpd.sm1man ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/kan96xx/onlinehelp/index.html") def /httpd.sm1man.index ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/asir2000/html-jp/man_262.html#SEC262") def /httpd.asir.intro ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/kan96xx/ttt/index.html") def /send-menu-1 { (FILE:) sendln [$ Shutdown the sm1 server. , $ ] cat sendln %% [$ interrupt , $ %% ] cat sendln [$ save. , $ ] cat sendln ( ) sendln (HELP:) sendln [( Sm1manual (Ja) , )] cat sendln [( Intro (Ja) , )] cat sendln } def /send-page-save { [/in-send-page-save /i] pushVariables [ (HTTP/0.9 200 OK) sendln (Connection: close) sendln (Content-Type: text/plain) sendln 0 sendln [37 (string) dc ( Saved the following to sm1out.txt )] cat sendln [37 (string) dc ( Save the following by your browser as a text file. )] cat sendln 0 1 httpd.history length 1 sub { /i set httpd.history i get sendln } for ( ) sendln 0 sendln [(flush)] extension [(PrintDollar) 1] system_variable httpd.history output [(PrintDollar) 0] system_variable ] pop popVariables } def /metaCommand { /arg1 set [/in-metaCommand /msg /result] pushVariables [ /msg arg1 def /result 1 def msg (httpdAsirMeta quit) eq { ox.ccc ( quit ) oxsubmit ox.ccc oxshutdown send-page-bye quit /result 0 def } { } ifelse msg (httpdAsirMeta save) eq { send-page-save /result 0 def } { } ifelse msg (httpdAsirMeta interrupt) eq { ox.ccc oxreset (Interrupted!
) send-page-3 /result 0 def } { } ifelse /arg1 result def ] pop popVariables arg1 } def