[BACK]Return to httpd-asir.sm1 CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Doc

Diff for /OpenXM/src/kan96xx/Doc/httpd-asir.sm1 between version 1.2 and 1.10

version 1.2, 2001/04/21 06:38:37 version 1.10, 2001/04/23 13:34:00
Line 1 
Line 1 
 %% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.1 2001/04/20 13:38:31 takayama Exp $  %% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.9 2001/04/22 04:55:07 takayama Exp $
 %% http server by sm1  %% http server by sm1
   
 /httpd.port 1200 def  /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  [(parse) (oxasir.sm1) pushfile] extension
 (oxasir.started) boundp {  (oxasir.started) boundp {
 } {  } {
     %% Initialize oxasir.
   [(x^2-1) (x)] fctr pop    [(x^2-1) (x)] fctr pop
     oxasir.ccc oxmathcap
     oxasir.ccc oxsetmathcap
 } ifelse  } 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 {  /httpd_startserver {
    [(sm1.socket) (open) [httpd.port (localhost)]] extension     [(sm1.socket) (open) [httpd.port (localhost)]] extension
    /server.fdAndPort set     /httpd.server.fdAndPort set
    (sm1.socket.open returns  ) messagen server.fdAndPort message     (sm1.socket.open returns  ) messagen httpd.server.fdAndPort message
    [(sm1.socket) (accept) [server.fdAndPort 0 get]] extension     [(sm1.socket) (accept) [httpd.server.fdAndPort 0 get]] extension
    /server.fd set     /httpd.server.fd set
    (connected.) message     (connected.) message
    (sm1.socket.accept returns  ) messagen server.fd message     (sm1.socket.accept returns  ) messagen httpd.server.fd message
 } def  } def
   
 /httpd_stopserver {  /httpd_stopserver {
    [(sm1.socket) (close) server.fd ] extension message     [(sm1.socket) (close) httpd.server.fd ] extension message
 } def  } def
   
 /send {  /send_packet {
   /arg1 set    /arg1 set
   [(sm1.socket) (write) [server.fd 0 get arg1]] extension message    [(sm1.socket) (write) [httpd.server.fd 0 get arg1]] extension message
 } def  } def
   
 /sendln {  /sendln {
Line 36 
Line 65 
   }{    }{
     10 (string) dc /mmm set      10 (string) dc /mmm set
   } ifelse    } ifelse
   [(sm1.socket) (write) [server.fd 0 get mmm]] extension message    [(sm1.socket) (select) [httpd.server.fd 0 get 0]] extension {
       (Warning: your peer closed the connection. Do not send the data.) message
     } {
       [(sm1.socket) (write) [httpd.server.fd 0 get mmm]] extension message
     } ifelse
  ] pop   ] pop
  popVariables   popVariables
 } def  } def
   
 /httpd {  /httpd {
     /httpd.serial 0 def
     /httpd.history [ ] def
   {    {
     httpd_startserver ;      httpd_startserver ;
     httpd_action ;      httpd_action ;
     httpd_stopserver ;      httpd_stopserver ;
     (5 sleep) system      (5 sleep) system
       httpd.serial 1 add /httpd.serial set
   } loop    } loop
 } def  } def
   
 /httpd_action {  /httpd_action {
   [/in-httpd /httpd.com.old /ff /httpd.com /httpd.result] pushVariables    [/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) [httpd.server.fd 0 get -1]] extension
    [(sm1.socket) (select) [server.fd 0 get -1]] extension         %%     wait for ever
 %%                                          wait for ever          [(sm1.socket) (read) [httpd.server.fd 0 get ]] extension /ff set
    {  
         [(sm1.socket) (read) [server.fd 0 get ]] extension /ff set  
         ff length 0 eq {          ff length 0 eq {
            (connection is closed.) message             (connection is closed.) message
         }          }
         ff (quit) eq          {
         { (We exit the function httpd) message exit }  
         { %% [(SigIgn) 0] system_variable  
           (------------  start ----------------------) message            (------------  start ----------------------) message
              ff message               ff message
           (-----------------------------------------) message            (-----------------------------------------) message
Line 73 
Line 106 
              httpd.com message               httpd.com message
           (------------  end ----------------------) message            (------------  end ----------------------) message
           (   ) message            (   ) message
           oxasir.ccc            httpd.serial 0 eq {
             [(if (1) {)  httpd.com  (};)] cat              /httpd.com  httpd.initialization def
           oxexecutestring ;            } { } ifelse
           oxasir.ccc oxpopstring /httpd.result set            httpd.com metaCommand {
           /httpd.com.old httpd.com def              httpd.textarea.valid {
           (------------- result -------------) message                oxasir.ccc
           httpd.result message                 [(if (1) {)  httpd.com  (; };)] cat
           (----------------------------------) message                oxexecutestring ;
           (  ) message              }{
           [(<title> asirweb </title> )                send-page-warning  exit
            (<font color="blue"> Input: </font> )              } ifelse
            (<pre> ) httpd.com (</pre>) (<br>)              [(oxReq) oxasir.ccc SM_dupErrors ] extension pop
            (<font color="green"> Output: </font> )  
            (<pre>) httpd.result (</pre>)              [(oxReq) oxasir.ccc SM_popCMO ] extension pop
           ] cat              [(oxReq) oxasir.ccc SM_popString ] extension pop
           send-page-3  exit              [(flush)] extension pop
           %% [(SigIgn) 1] system_variable              %% 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 { } {
                   (<title> asirweb </title> )
                   (<font color="blue"> Input-) httpd.serial toString
                    (: </font> )
                    httpd.com preformatHTML (<br>)
                 } ifelse
                (<font color="green"> Output-) httpd.serial toString
                (: </font> )
                 httpd.result preformatHTML
               ] cat
               send-page-3  exit
             } { exit } ifelse  %% metaCommand
         } ifelse          } ifelse
    }  
    {  } ifelse  
   } loop    } loop
   ] pop    ] pop
   popVariables    popVariables
 } def  } def
   
   
 /send-page-1 {  /send-page-bye {
    (HTTP/0.9 200 OK) sendln     (HTTP/0.9 200 OK) sendln
 %%   (Date: Sun, 18 Mar 2001 02:54:50 GMT) sendln  %%   (Date: Sun, 18 Mar 2001 02:54:50 GMT) sendln
 %%   (Server: sm1/0.1 (Unix)) sendln  %%   (Server: sm1/0.1 (Unix)) sendln
Line 108 
Line 198 
 %%   (Accept-Ranges: bytes) sendln  %%   (Accept-Ranges: bytes) sendln
 %%   (Content-Length: 10) sendln  %%   (Content-Length: 10) sendln
    (Connection: close) sendln     (Connection: close) sendln
    (Content-Type: text/plain) sendln  %   (Content-Type: text/plain) sendln
      (Content-Type: text/html) sendln
    0 sendln     0 sendln
    (HOGE HOGE!) sendln     (<html>) sendln
      (Shutdown the engine. <br>) sendln
      (See you! <a href="http://www.openxm.org"> asirweb </a>) sendln
      (</html>) sendln
    0 sendln     0 sendln
    [(flush)] extension     [(flush)] extension
 } def  } def
Line 141 
Line 235 
    result sendln     result sendln
    (<FORM NAME="myFORM">) sendln     (<FORM NAME="myFORM">) sendln
    (<INPUT TYPE=submit VALUE="submit">) sendln     (<INPUT TYPE=submit VALUE="submit">) sendln
    (<textarea name=msg rows=10 cols="80" wrap="soft"></textarea>) sendln     [(<textarea name=) httpd.textarea.name
       ( rows=10 cols="80" wrap="soft"></textarea>)] cat sendln
    (</FORM>) sendln     (</FORM>) sendln
      send-menu-1
    0 sendln     0 sendln
    [(flush)] extension     [(flush)] extension
   ] pop    ] pop
   popVariables    popVariables
 } def  } 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
     [$<a href="http://localhost:$ httpd.port toString
      $/?msg=httpdAsirMeta+quit"> Shutdown the asir server. </a>, $
     ] cat sendln
   %%  [$<a href="http://localhost:$ httpd.port toString
   %%   $/?msg=httpdAsirMeta+interrupt"> interrupt </a>, $
   %%  ] cat sendln
     [$<a href="http://localhost:$ httpd.port toString
      $/?msg=httpdAsirMeta+save"> save. </a>, $
     ] cat sendln
     ( <spacer type=horizontal size=80> ) sendln
   
     (HELP:) sendln
     [(<font color="red">
       <a href=) httpd.asirman ( > AsirManual (Ja) </a> </font>, )] cat sendln
     [(<font color="purple">
       <a href=) httpd.asirman.index ( > Index (Ja) </a> </font>, )] cat sendln
     [(<font color="blue">
       <a href=) httpd.asir.intro ( > Intro (Ja) </a> </font>, )] 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
   
   /send-page-warning {
      (HTTP/0.9 200 OK) sendln
      (Connection: close) sendln
      (Content-Type: text/html) sendln
      0 sendln
      (You cannot execute oxasir without a session key! <br>) sendln
      0 sendln
      [(flush)] extension
   } def
   
 /stopclient {  /stopclient {
   [(sm1.socket) (close) [client.fdAndPort 0 get] ] extension message    [(sm1.socket) (close) [client.fdAndPort 0 get] ] extension message
 } def  } 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 {  /fromHex {
   /arg1 set    /arg1 set
   [/in-fromHex /s1 /s2 /c /c2] pushVariables    [/in-fromHex /s1 /s2 /c /c2] pushVariables
Line 188 
Line 361 
   arg1    arg1
 } def  } def
   
   /randomName {
     [/in-randomName /sss /rrr ] pushVariables
     [
       %% Seed name
       /sss [ 97 97 97 97 97 97 97 97 97 97 ] def  %% 97 == 'a'
       %% This procedure to generate port number might fail.
       sss {
         [
           [(oxGenPass)] extension .. /rrr set
           [(tdiv_qr) rrr (26)..] mpzext 1 get /rrr set
         ] pop
         rrr (integer) dc add
       } map
       /sss set
       sss {(string) dc} map cat /arg1 set
     ] pop
     popVariables
     arg1
   } def
   
   (httpd.textarea.name) boundp { }
    {
       /httpd.textarea.name  randomName def
       /httpd.textarea.name.aaa
          [(GET /?) httpd.textarea.name] cat
          (array) dc
       def
    } ifelse
   
   %% remove GET /?msg=
 /removeGET {  /removeGET {
   /arg1 set    /arg1 set
   [/in-removeGET /s /s2 /i /j] pushVariables    [/in-removeGET /s /s2 /i /j /i0
      /tname
     ] pushVariables
   [    [
      /s arg1 def       /s arg1 def
        /httpd.textarea.valid 1 def
      s 1 copy /s2 set       s 1 copy /s2 set
      s (array) dc /s set       s (array) dc /s set
   
        /tname  [  ] def
        0 1 s length 1 sub {
          /i0 set
          s i0 get 61 eq {  %% 61 is =
            i0 1 add /i0 set
            tname message
            httpd.textarea.name.aaa message
            tname httpd.textarea.name.aaa eq {
              /httpd.textarea.valid 1 def
            } {
              /httpd.textarea.valid 0 def
              (Warning: got an invalid name for the text field.) message
            } ifelse
            exit
          } { } ifelse
          tname s i0 get append /tname set
        } for
   
      /j 0 def       /j 0 def
      10 1 s length 1 sub {       i0 1 s length 1 sub {
        /i set         /i set
        s2 j << s i get (string) dc >> put         s2 j << s i get (string) dc >> put
        j 1 add /j set         j 1 add /j set
Line 241 
Line 466 
      } loop       } loop
      s j carN /s set       s j carN /s set
      s { (string) dc } map cat /arg1 set       s { (string) dc } map cat /arg1 set
     ] pop
     popVariables
     arg1
   } def
   
   /preformatHTML {
     /arg1 set
     [/in-preformatHTML /sss /c] pushVariables
     [
        /sss arg1 def
        sss (array) dc /sss set
        sss {
          /c set
          [
             c 60 eq {
               /c (&lt) def
             } {  } ifelse
             c 62 eq {
               /c (&gt) def
             } {  } ifelse
             c 38 eq {
               /c (&amp) def
             } {  } ifelse
           ] pop
           c (string) dc
        } map cat /sss set
        [(<pre> ) sss ( </pre> )] cat /arg1 set
     ] pop
     popVariables
     arg1
   } def
   
   /metaCommand {
     /arg1 set
     [/in-metaCommand /msg /result] pushVariables
     [
       /msg arg1 def
       /result 1 def
       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! <br>) send-page-3
          /result 0 def
       } { } ifelse
       /arg1 result def
   ] pop    ] pop
   popVariables    popVariables
   arg1    arg1
 } def  
   
   } def

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.10

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>