%% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.33 2014/08/30 11:29:12 takayama Exp $ %% 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 (oxasir.started) boundp { } { %% Initialize oxasir. [(x^2-1) (x)] fctr pop oxasir.ccc oxmathcap oxasir.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 /webasir { asirweb } def /asirweb { [/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 %%[(sleep 3; firefox -geometry 800x500 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 /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 oxasir.ccc [(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 { } { (