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

File: [local] / OpenXM / src / kan96xx / Doc / httpd-sm1.sm1 (download)

Revision 1.19, Sun Feb 22 17:30:03 2009 UTC (15 years, 2 months ago) by ohara
Branch: MAIN
CVS Tags: R_1_3_1-2, RELEASE_1_3_1_13b, RELEASE_1_2_3_12, HEAD
Changes since 1.18: +2 -2 lines

The term "(help|html)-(eg|jp)" are replaced.

%% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-sm1.sm1,v 1.19 2009/02/22 17:30:03 ohara Exp $
%% http server by sm1
%% Note to run on the Windows (TM).
%% (A) You need to set IE (internet explorer) as follows:
%%   (1) Visit the menu  
%%     tool / internet option / connection / LAN configuration
%%   (2) Add localhost to the list of hosts which are not accessed via
%%        the proxy server.
%% (B) You need to have the "start.exe" at  c:\windows\command\start.exe
%% (C) cygwin1.dll should be by sm1.exe, ox_sm1.exe and ox.exe

[(parse) (httpd.sm1) pushfile] extension pop

/httpd.image.name (kobeuniv2.jpg) def
/httpd.image.type (jpeg) def
/httpd.port 1200 def

/httpd.initialization
%% Put initialization codes here.
 [
  ([$parse$ $cohom.sm1$ pushfile] extension 
   [$Web/sm1 version 0.80. $
    $Kan/sm1 ox_sm1 version $ [$Version$] system_variable] cat)
 ] cat
def

[(ostype)] extension 0 get
(windows) eq {
  %% Native windows environment or cygwin.
  [(parse) (ox-win.sm1) pushfile] extension 
}{ 
  [(parse) (ox.sm1) pushfile] extension
} ifelse

(ox_sm1.started) boundp { 
} {
  %% Initialize ox_sm1
  [(ostype)] extension 0 get
  sm1connectr
  ox.ccc oxmathcap
  ox.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

/websm1 {
 [/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; start iexplore 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_action {
  [/in-httpd /ff /httpd.com /httpd.result /sss
   /sss.engine /sss.web /err /httpd.sendFile
   /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
              ox.ccc 
               [ 
                 httpd.com  
                 (  /) oxserver.vname (  set )
                 oxserver.vname ( )
               ] cat
              oxexecutestring ;
            }{
              send-page-warning  exit
            } ifelse
            [(oxReq) ox.ccc SM_dupErrors ] extension pop

            [(oxReq) ox.ccc SM_popCMO ] extension pop
            [(oxReq) ox.ccc SM_popString ] extension pop
            [(flush)] extension pop
            %% Select inputs for interruption.
            %% Wait by the spin lock.
            {
              [(oxMultiSelect) [ox.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) ox.ccc] extension  /err          set
                [(oxGet) ox.ccc] extension  /httpd.result set
                %% ox.ccc oxpopstring /httpd.result set
            } {
                ox.ccc oxreset
                ox.ccc ("computation is interrupted.";) oxexecutestring ;
                ox.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 
                 37 (string) dc httpd.serial toString 
                 10 (string) dc
                  httpd.com 
                 ( )  %% add extra ;
                 ] cat
                append 
              def
            } {
              ox.ccc cleanErrors
              [httpd.result 10 (string) dc err toString] cat
              /httpd.result set
            } ifelse

            [httpd.serial 0 eq { } {
                (<title> Web/sm1 </title> )
                (<font color="blue"> Input-) httpd.serial toString
                 (: </font> )  
                 httpd.com preformatHTML (<br>)
              } ifelse
             (<font color="green"> Output-) httpd.serial toString
             (: </font> ) 
             (<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
  } loop %% LOOP-A
  ] pop
  popVariables
} def



/httpd.sm1man
 ("http://www.math.sci.kobe-u.ac.jp/OpenXM/Current/doc/kan96xx/onlinehelp/index.html")
def
/httpd.sm1man.index
  ("http://www.math.sci.kobe-u.ac.jp/OpenXM/Current/doc/asir2000/html-ja/man_262.html#SEC262")
def
/httpd.asir.intro
   ("http://www.math.sci.kobe-u.ac.jp/OpenXM/Current/doc/kan96xx/ttt/index.html")
def
/send-menu-1 {
  
  (FILE:) sendln
  [$<a href="http://localhost:$ httpd.port toString
   $/?msg=httpdAsirMeta+quit"> Shutdown the sm1 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.sm1man ( > Sm1manual (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
   [37 (string) dc ( Saved the following to sm1out.txt )] cat sendln
   [37 (string) dc ( Save the following by your browser as a text file. )] 
   cat sendln
   
   0 1 httpd.history length 1 sub {
     /i set
     httpd.history i get sendln
   } for
   (  ) 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] pushVariables
  [
    /msg arg1 def
    /result 1 def
    msg (httpdAsirMeta quit) eq {
       ox.ccc ( quit ) oxsubmit
       ox.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 {
       ox.ccc oxreset
       (Interrupted! <br>) send-page-3
       /result 0 def
    } { } ifelse
    /arg1 result def
  ] pop
  popVariables
  arg1
} def