=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v retrieving revision 1.3 retrieving revision 1.7 diff -u -p -r1.3 -r1.7 --- OpenXM/src/kan96xx/Doc/httpd-asir.sm1 2001/04/21 08:18:03 1.3 +++ OpenXM/src/kan96xx/Doc/httpd-asir.sm1 2001/04/22 01:02:27 1.7 @@ -1,30 +1,57 @@ -%% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.2 2001/04/21 06:38:37 takayama Exp $ +%% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.6 2001/04/22 00:34:01 takayama Exp $ %% http server by sm1 /httpd.port 1200 def +/httpd.initialization +%% Put initialization codes here. + [ + ("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 +/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 + httpd ; + ] pop + popVariables +} def + /httpd_startserver { [(sm1.socket) (open) [httpd.port (localhost)]] extension - /server.fdAndPort set - (sm1.socket.open returns ) messagen server.fdAndPort message - [(sm1.socket) (accept) [server.fdAndPort 0 get]] extension - /server.fd set + /httpd.server.fdAndPort set + (sm1.socket.open returns ) messagen httpd.server.fdAndPort message + [(sm1.socket) (accept) [httpd.server.fdAndPort 0 get]] extension + /httpd.server.fd set (connected.) message - (sm1.socket.accept returns ) messagen server.fd message + (sm1.socket.accept returns ) messagen httpd.server.fd message } def /httpd_stopserver { - [(sm1.socket) (close) server.fd ] extension message + [(sm1.socket) (close) httpd.server.fd ] extension message } def /send_packet { /arg1 set - [(sm1.socket) (write) [server.fd 0 get arg1]] extension message + [(sm1.socket) (write) [httpd.server.fd 0 get arg1]] extension message } def /sendln { @@ -36,13 +63,13 @@ }{ 10 (string) dc /mmm set } ifelse - [(sm1.socket) (write) [server.fd 0 get mmm]] extension message + [(sm1.socket) (write) [httpd.server.fd 0 get mmm]] extension message ] pop popVariables } def /httpd { - /httpd.serial 1 def + /httpd.serial 0 def /httpd.history [ ] def { httpd_startserver ; @@ -54,22 +81,18 @@ } def /httpd_action { - [/in-httpd /httpd.com.old /ff /httpd.com /httpd.result + [/in-httpd /ff /httpd.com /httpd.result /sss + /sss.engine /sss.web /err ] pushVariables [ - (httpd:sm1 is ready) message { - /httpd.com.old ( ) def - [(sm1.socket) (select) [server.fd 0 get -1]] extension -%% wait for ever - { - [(sm1.socket) (read) [server.fd 0 get ]] extension /ff set + [(sm1.socket) (select) [httpd.server.fd 0 get -1]] extension + %% wait for ever + [(sm1.socket) (read) [httpd.server.fd 0 get ]] extension /ff set ff length 0 eq { (connection is closed.) message } - ff (quit) eq - { (We exit the function httpd) message exit } - { %% [(SigIgn) 0] system_variable + { (------------ start ----------------------) message ff message (-----------------------------------------) message @@ -77,30 +100,78 @@ httpd.com message (------------ end ----------------------) message ( ) message + httpd.serial 0 eq { + /httpd.com httpd.initialization def + } { } ifelse httpd.com metaCommand { - /httpd.history httpd.history httpd.com append def oxasir.ccc [(if (1) {) httpd.com (};)] cat oxexecutestring ; - oxasir.ccc oxpopstring /httpd.result set - /httpd.com.old httpd.com def + [(oxReq) oxasir.ccc SM_dupErrors ] extension pop + + [(oxReq) oxasir.ccc SM_popCMO ] extension pop + [(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 - [( asirweb ) - ( Input-) httpd.serial toString - (: ) - (
 ) httpd.com (
) (
) + + err message + err [ ] eq { + /httpd.history + httpd.history + [10 (string) dc + (/**** ) httpd.serial toString ( ****/) + 10 (string) dc + httpd.com + ] 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 (
) (
) + } ifelse ( Output-) httpd.serial toString (: ) (
) httpd.result (
) ] cat send-page-3 exit - } { } ifelse + } { exit } ifelse %% metaCommand } ifelse - } - { } ifelse } loop ] pop popVariables @@ -168,25 +239,77 @@ 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 [$ QUIT , $ + $/?msg=httpdAsirMeta+quit"> Shutdown the asir server. , $ ] cat sendln +%% [$ interrupt , $ +%% ] cat sendln + [$ save. , $ + ] cat sendln + ( ) sendln + (HELP:) sendln [( - AsirManual (Ja) , )] cat sendln + AsirManual (Ja) , )] cat sendln [( - Index (Ja) , )] cat sendln - ( - Intro (Ja) , ) 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/html) sendln + 0 sendln + ( ) sendln + (/* Saved the following to sm1out.txt */
) sendln + (/* Save the following by your browser as a text file. */
) sendln + + (
) sendln
+   0 1 httpd.history length 1 sub {
+     /i set
+     httpd.history i get sendln
+   } for
+   (
) sendln + ( ) sendln + 0 sendln + [(flush)] extension + [(PrintDollar) 1] system_variable + httpd.history output + [(PrintDollar) 0] system_variable + ] pop + popVariables +} def + + /stopclient { [(sm1.socket) (close) [client.fdAndPort 0 get] ] extension message } def +/cleanErrors { + /arg1 set + [/in-cleanErrors /clientt /spp] pushVariables + [ + /clientt arg1 def + clientt oxgetsp (integer) dc /spp set + clientt spp oxpops + ] pop + popVariables +} def + + /fromHex { /arg1 set [/in-fromHex /s1 /s2 /c /c2] pushVariables @@ -220,15 +343,25 @@ def arg1 } def +%% remove GET /?msg= /removeGET { /arg1 set - [/in-removeGET /s /s2 /i /j] pushVariables + [/in-removeGET /s /s2 /i /j /i0] pushVariables [ /s arg1 def s 1 copy /s2 set s (array) dc /s set + + 0 1 s length 1 sub { + /i0 set + s i0 get 61 eq { %% 61 is = + i0 1 add /i0 set + exit + } { } ifelse + } for + /j 0 def - 10 1 s length 1 sub { + i0 1 s length 1 sub { /i set s2 j << s i get (string) dc >> put j 1 add /j set @@ -287,6 +420,15 @@ def msg (httpdAsirMeta quit) eq { 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