%% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.24 2002/10/24 02:30:15 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 /webasir { asirweb } def /asirweb { [/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; netscape -geometry 800x500 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 /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 { } { ( asirweb ) ( Input-) httpd.serial toString (: ) httpd.com preformatHTML (
) } ifelse ( Output-) httpd.serial toString (: ) ( (in pretty format) ) %%( (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.asirman ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/asir2000/html-jp/man_toc.html") def /httpd.asirman.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/~taka/asir-book-html/main") def /send-menu-1 { (FILE:) sendln [$ Shutdown the asir server. , $ ] cat sendln %% [$ interrupt , $ %% ] cat sendln [$ save. , $ ] cat sendln ( ) sendln (HELP:) sendln [( AsirManual (Ja) , )] cat sendln [( Index (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 (/* Saved the following to sm1out.txt */) sendln (/* Save the following by your browser as a text file. */) sendln 0 1 httpd.history length 1 sub { /i set httpd.history i get sendln } for ( end$) 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 /msg2 /nn /err /fn ] pushVariables [ /msg arg1 def /result 1 def msg 1 copy toTokensBySpace /msg2 set msg2 length 3 eq { msg2 0 get (httpdAsirMeta) eq msg2 1 get (Pretty) eq and { httpd.image.type null eq { send-page-warning-image /skip-image goto } { } ifelse msg2 2 get . (integer) dc /nn set %% Reformat the "nn"-th result by tex and send it. %% BUG: index is out of bound. httpd.result.history nn get message oxasir.ccc [$print_$ httpd.image.type $_form(Oxserver_history_variable_$ nn toString $);$ ] cat (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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /skip-image /result 0 def } { } ifelse }{ } ifelse msg (httpdAsirMeta quit) eq { oxasir.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 { oxasir.ccc oxreset (Interrupted!
) send-page-3 /result 0 def } { } ifelse /arg1 result def ] pop popVariables arg1 } def