%% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-sm1.sm1,v 1.19 2009/02/22 17:30:03 ohara 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 /ox-win.start.iconic 1 def /ox.win.set.start { [(stat) (c:\windows\system32\cmd.exe)] extension 0 get 0 eq { /ox.win.start.0 [(c:\windows\system32\cmd.exe) (/c) (start)] def /ox.win.start [ox.win.start.0 aload pop 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 /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. 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 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) (readHTTP) [httpd.server.fd 0 get ]] extension /ff set ff tag 0 eq { (connection is closed.) message exit } { (------------ 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 /httpd.textarea.valid 1 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 { } { (