[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.1 and 1.13

version 1.1, 2001/04/20 13:38:31 version 1.13, 2001/08/23 00:49:00
Line 1 
Line 1 
 %% $OpenXM$  %% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.12 2001/08/23 00:16:55 takayama Exp $
 %% http server by sm1  %% http server by sm1
   
   [(parse) (httpd.sm1) pushfile] extension pop
   
   /httpd.port 1200 def
   /httpd.image.name (kobeuniv2.jpg) def
   /httpd.image.type (jpeg) 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
   
 /startserver {  /webasir { asirweb } def
    [(sm1.socket) (open) [1200 (localhost)]] extension /server.fdAndPort set  /asirweb {
    (sm1.socket.open returns  ) messagen server.fdAndPort message   [/rrr ] pushVariables
    [(sm1.socket) (accept) [server.fdAndPort 0 get]] extension   [
    /server.fd set    %% This procedure to generate port number might fail.
    (connected.) message    [(oxGenPass)] extension . (integer) dc  /rrr set
    (sm1.socket.accept returns  ) messagen server.fd message    rrr << rrr 20000 idiv 20000 mul >> sub /rrr set
 } def    /httpd.port 1200 rrr add def
     httpd.port message
   
 /stopserver {    [(sleep 3; netscape -geometry 800x500 http://localhost:)
    [(sm1.socket) (close) server.fd ] extension message      httpd.port toString
      ( &)] cat system
      httpd ;
     ] pop
     popVariables
 } def  } def
   
 /send {  
   /arg1 set  
   [(sm1.socket) (write) [server.fd 0 get arg1]] extension message  
 } def  
   
 /sendln {  /httpd_action {
   /mmm set    [/in-httpd /ff /httpd.com /httpd.result /sss
   mmm tag 5 eq {     /sss.engine /sss.web /err
     [mmm 10 (string) dc] cat /mmm set     /oxserver.vname
   }{    ] pushVariables
     10 (string) dc /mmm set    [
   } ifelse  
   [(sm1.socket) (write) [server.fd 0 get mmm]] extension message  
 } def  
   
 /httpd {  
   {    {
     startserver ;         [(sm1.socket) (select) [httpd.server.fd 0 get -1]] extension
     action ;         %%     wait for ever
     stopserver ;          [(sm1.socket) (read) [httpd.server.fd 0 get ]] extension /ff set
     (5 sleep) system  
   } loop  
 } def  
   
 /action {  
   {  
    /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  
         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
              ff removeGET webstringToAscii /httpd.com set               ff 1 copy askToSendFile /httpd.sendFile set
              httpd.com message               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            (------------  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.sendFile tag 0 eq { }
           /httpd.com.old httpd.com def            {
           (------------- result -------------) message              httpd.sendFile httpd.image.type send-image
           httpd.result message              exit  %% exit the loop LOOP-A
           (----------------------------------) message            } ifelse
           (  ) message            httpd.com metaCommand {
           [(Input:)  (<pre> ) httpd.com (</pre>) (<br>)              httpd.textarea.valid {
            (Output:) (<pre>)                /oxserver.vname
             httpd.result                   [Oxserver_history_variable httpd.serial toString] cat
             (</pre>)                def
           ] cat                oxasir.ccc
           send-page-3  exit  %% original     (if (1) {)  httpd.com  (; };)
           %% [(SigIgn) 1] system_variable                 [(if (1) {)
                   oxserver.vname (=) httpd.com
                   (; };)
                   oxserver.vname (;)
                  ] 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_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 { } {
                   (<title> asirweb </title> )
                   (<font color="blue"> Input-) httpd.serial toString
                    (: </font> )
                    httpd.com preformatHTML (<br>)
                 } ifelse
                (<font color="green"> Output-) httpd.serial toString
                (: </font> )
                (<a href="http://localhost:)  httpd.port toString
                (/?msg=httpdAsirMeta+Pretty+) httpd.serial toString
                ("> (in pretty format) </a>)
                %%(<a href=") httpd.image.name ("> (in pretty format) </a>) %%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          } ifelse
    }    } loop  %% LOOP-A
    {  } ifelse    ] pop
   } loop    popVariables
 } def  } def
   
   
 /send-page-1 {  
    (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  
    0 sendln  
    (HOGE HOGE!) sendln  
    0 sendln  
    [(flush)] extension  
 } def  
   
 /send-page-2 {  /httpd.asirman
    (HTTP/0.9 200 OK) sendln   ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/asir2000/html-jp/man_toc.html")
 %%   (Content-Length: 10) sendln  def
    (Connection: close) sendln  /httpd.asirman.index
    (Content-Type: text/html) sendln    ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/asir2000/html-jp/man_262.html#SEC262")
    0 sendln  def
    (<FORM NAME="myFORM">) sendln  /httpd.asir.intro
    (<INPUT TYPE="TEXT" NAME="Num">) sendln     ("http://www.math.sci.kobe-u.ac.jp/~taka/asir-book-html/main")
    (</FORM>) sendln  def
    0 sendln  /send-menu-1 {
    [(flush)] extension  
     (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  } def
   
 /send-page-3 {  /send-page-save {
   /arg1 set   [/in-send-page-save /i] pushVariables
   [/in-send-page-3 /result] pushVariables   [
   [  
    /result arg1 def  
    (HTTP/0.9 200 OK) sendln     (HTTP/0.9 200 OK) sendln
    (Connection: close) sendln     (Connection: close) sendln
    (Content-Type: text/html) sendln     (Content-Type: text/plain) sendln
    0 sendln     0 sendln
 %%   (<FORM NAME="myFORM" METHOD="POST">) sendln     (/* Saved the following to sm1out.txt */) sendln
    result sendln     (/* Save the following by your browser as a text file. */) sendln
    (<FORM NAME="myFORM">) sendln  
    (<INPUT TYPE=submit VALUE="submit">) sendln     0 1 httpd.history length 1 sub {
    (<textarea name=msg rows=10 cols="62" wrap="soft"></textarea>) sendln       /i set
    (</FORM>) sendln       httpd.history i get sendln
      } for
      ( end$) sendln
    0 sendln     0 sendln
    [(flush)] extension     [(flush)] extension
   ] pop     [(PrintDollar) 1] system_variable
   popVariables     httpd.history output
      [(PrintDollar) 0] system_variable
    ] pop
    popVariables
 } def  } def
   
   
 /stopclient {  /metaCommand {
   [(sm1.socket) (close) [client.fdAndPort 0 get] ] extension message  
 } def  
   
   
 /fromHex {  
   /arg1 set    /arg1 set
   [/in-fromHex /s1 /s2 /c /c2] pushVariables    [/in-metaCommand /msg /result /msg2 /nn] pushVariables
   [    [
     arg1 0 get /s1 set      /msg arg1 def
     arg1 1 get /s2 set      /result 1 def
       msg 1 copy toTokensBySpace /msg2 set
       msg2 length 3 eq {
         msg2 0 get (httpdAsirMeta) eq
         msg2 1 get (Pretty) eq and
         {
           msg2 2 get . (integer) dc /nn set
   
     48 s1 le  s1 57 le and {  % 0, ..., 9          %%BUG: This part should be rewritten.
       s1 48 sub /c set          %% Reformat the "nn"-th result by tex and send it.
     }{ } ifelse          httpd.result.history nn get message
     65 s1 le  s1 70 le and {  % A, ..., F          httpd.image.name httpd.image.type send-image
       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  
   
 /removeGET {          /result 0 def
   /arg1 set        } { } ifelse
   [/in-removeGET /s /s2 /i /j] pushVariables      }{ } ifelse
   [      msg (httpdAsirMeta quit) eq {
      /s arg1 def         oxasir.ccc oxshutdown
      s 1 copy /s2 set         send-page-bye
      s (array) dc /s set         quit
      /j 0 def         /result 0 def
      10 1 s length 1 sub {      } { } ifelse
        /i set      msg (httpdAsirMeta save) eq {
        s2 j << s i get (string) dc >> put         send-page-save
        j 1 add /j set         /result 0 def
      } for      } { } ifelse
      /arg1 s2 def      msg (httpdAsirMeta interrupt) eq {
   ] pop         oxasir.ccc oxreset
   arg1         (Interrupted! <br>) send-page-3
 } def         /result 0 def
       } { } ifelse
 /webstringToAscii {      /arg1 result def
   /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    ] pop
   popVariables    popVariables
   arg1    arg1
 } def  
   
   } def

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.13

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