=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v retrieving revision 1.7 retrieving revision 1.32 diff -u -p -r1.7 -r1.32 --- OpenXM/src/kan96xx/Doc/httpd-asir.sm1 2001/04/22 01:02:27 1.7 +++ OpenXM/src/kan96xx/Doc/httpd-asir.sm1 2014/08/29 11:58:05 1.32 @@ -1,14 +1,20 @@ -%% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.6 2001/04/22 00:34:01 takayama Exp $ +%% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.31 2014/08/28 11:27:34 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 { } { @@ -18,8 +24,30 @@ def 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 ] pushVariables + [/rrr /cmd] pushVariables [ %% This procedure to generate port number might fail. [(oxGenPass)] extension . (integer) dc /rrr set @@ -27,89 +55,87 @@ def /httpd.port 1200 rrr add def httpd.port message - [(sleep 3; netscape -geometry 800x500 http://localhost:) - httpd.port toString - ( &)] cat system + %%[(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_startserver { - [(sm1.socket) (open) [httpd.port (localhost)]] extension - /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 httpd.server.fd message -} def -/httpd_stopserver { - [(sm1.socket) (close) httpd.server.fd ] extension message -} def - -/send_packet { - /arg1 set - [(sm1.socket) (write) [httpd.server.fd 0 get arg1]] extension message -} def - -/sendln { - /arg1 set - [/in-sendln /mmm] pushVariables - [ arg1 /mmm set - mmm tag 5 eq { - [mmm 10 (string) dc] cat /mmm set - }{ - 10 (string) dc /mmm set - } ifelse - [(sm1.socket) (write) [httpd.server.fd 0 get mmm]] extension message - ] pop - popVariables -} def - -/httpd { - /httpd.serial 0 def - /httpd.history [ ] def - { - httpd_startserver ; - httpd_action ; - httpd_stopserver ; - (5 sleep) system - httpd.serial 1 add /httpd.serial set - } loop -} 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) (read) [httpd.server.fd 0 get ]] extension /ff set - ff length 0 eq { - (connection is closed.) message + [(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 removeGET webstringToAscii /httpd.com set - httpd.com 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 { - oxasir.ccc - [(if (1) {) httpd.com (};)] cat - oxexecutestring ; + 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. @@ -150,6 +176,7 @@ def (/**** ) httpd.serial toString ( ****/) 10 (string) dc httpd.com + (;) %% add extra ; ] cat append def @@ -163,81 +190,32 @@ def (
) httpd.com () (
) httpd.result () + ( (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 + send-page-3 exit %% exit the loop LOOP-A } { exit } ifelse %% metaCommand } ifelse - } loop + } loop %% LOOP-A ] pop popVariables } def -/send-page-bye { - (HTTP/0.9 200 OK) sendln -%% (Date: Sun, 18 Mar 2001 02:54:50 GMT) sendln -%% (Server: sm1/0.1 (Unix)) sendln -%% (Last-Modified: Wed, 23 Aug 2000 11:19:27 GMT) sendln -%% (ETag: "1f8f-5df-39a3b33f") sendln -%% (Accept-Ranges: bytes) sendln -%% (Content-Length: 10) sendln - (Connection: close) sendln -% (Content-Type: text/plain) sendln - (Content-Type: text/html) sendln - 0 sendln - () sendln - (Shutdown the engine.
) sendln
    0 1 httpd.history length 1 sub {
      /i set
      httpd.history i get sendln
    } for
-   () sendln
-   ( ) sendln
+   ( end$) sendln
    0 sendln
    [(flush)] extension
    [(PrintDollar) 1] system_variable
@@ -293,131 +268,53 @@ def
 } def
 
 
-/stopclient {
-  [(sm1.socket) (close) [client.fdAndPort 0 get] ] extension message
-} def
-
-
-/cleanErrors {
+/metaCommand {
   /arg1 set
-  [/in-cleanErrors /clientt /spp] pushVariables
+  [/in-metaCommand /msg /result /msg2 /nn
+   /err /fn
+  ] pushVariables
   [
-    /clientt arg1 def
-    clientt oxgetsp (integer) dc /spp set
-    clientt spp oxpops
-  ] pop
-  popVariables
-} def
+    /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 tag 0 eq {
+          send-page-warning-image
+          /skip-image goto
+        } {  } ifelse
 
 
-/fromHex {
-  /arg1 set
-  [/in-fromHex /s1 /s2 /c /c2] pushVariables
-  [
-    arg1 0 get /s1 set
-    arg1 1 get /s2 set
+        msg2 2 get . (integer) dc /nn set 
 
-    48 s1 le  s1 57 le and {  % 0, ..., 9
-      s1 48 sub /c set
-    }{ } ifelse
-    65 s1 le  s1 70 le and {  % A, ..., F
-      s1 65 sub 10 add /c set
-    }{ } ifelse
-    97 s1 le  s1 102 le and {  % a, ..., f
-      s1 97 sub 10 add /c set
-    }{ } ifelse
-    c 16 mul /c set
-    
-    48 s2 le  s2 57 le and {  % 0, ..., 9
-      s2 48 sub /c2 set
-    }{ } ifelse
-    65 s2 le  s2 70 le and {  % A, ..., F
-      s2 65 sub 10 add /c2 set
-    }{ } ifelse
-    97 s2 le  s2 102 le and {  % a, ..., f
-      s2 97 sub 10 add /c2 set
-    }{ } ifelse
-    c c2 add /arg1 set
-  ] pop
-  popVariables
-  arg1
-} def
+        %% Reformat the "nn"-th result by tex and send it.
+        %% BUG: index is out of bound. httpd.result.history nn get message
 
-%% remove GET /?msg=
-/removeGET {
-  /arg1 set
-  [/in-removeGET /s /s2 /i /j /i0] pushVariables
-  [
-     /s arg1 def
-     s 1 copy /s2 set
-     s (array) dc /s set
+        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
+        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-     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
-     i0 1 s length 1 sub {
-       /i set
-       s2 j << s i get (string) dc >> put
-       j 1 add /j set
-     } for
-     /arg1 s2 def
-  ] pop
-  arg1
-} def
-
-/webstringToAscii {
-  /arg1 set
-  [/in-webstringToAscii /s /i /j /c /n] pushVariables
-  [
-     /s arg1 def
-     s (array) dc /s set
-     /j 0 def /n s length def
-     /i 0 def
-     {
-       s i get /c set
-       c 32 eq { exit } { } ifelse
-       c 37 eq {  % c == %
-         [s i 1 add get s i 2 add get] fromHex /c set
-         s j c put 
-         j 1 add /j set
-         i 3 add /i set
-       } { 
-         c 43 eq { % c == +
-           s j 32 put
-           j 1 add /j set
-           i 1 add /i set
-          } {
-            c 13 eq { % c == 0xd
-              i 1 add /i set
-            } {
-              s j c put
-              j 1 add /j set
-              i 1 add /i set
-            } ifelse
-         } ifelse
-       } ifelse
-       i n ge { exit } {  } ifelse
-     } loop
-     s j carN /s set
-     s { (string) dc } map cat /arg1 set
-  ] pop
-  popVariables
-  arg1
-} def
-
-/metaCommand {
-  /arg1 set
-  [/in-metaCommand /msg /result] pushVariables
-  [
-    /msg arg1 def
-    /result 1 def
+        /skip-image 
+        /result 0 def
+      } { } ifelse    
+    }{ } ifelse
     msg (httpdAsirMeta quit) eq {
+       oxasir.ccc oxshutdown
        send-page-bye
        quit
        /result 0 def
@@ -435,4 +332,26 @@ def
   ] pop
   popVariables
   arg1
+} def
+
+/webasir2 {
+ [/rrr /cmd /mypid /lockname] 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 
+
+  [(getpid)] extension (dollar) dc /mypid set
+  [(/tmp/webasir-) mypid (.txt)] cat /lockname set
+  [(outputObjectToFile) lockname 
+    [httpd.port nl httpd.textarea.name nl ] cat
+  ] extension 
+  lockname message
+  [(cat ) lockname] cat (system) nl message
+  httpd ;
+  [(rm -f ) lockname] cat system
+ ] pop
+ popVariables
 } def