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

Annotation of OpenXM/src/kan96xx/Doc/httpd-asir.sm1, Revision 1.3

1.3     ! takayama    1: %% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.2 2001/04/21 06:38:37 takayama Exp $
1.1       takayama    2: %% http server by sm1
1.2       takayama    3:
                      4: /httpd.port 1200 def
1.1       takayama    5: [(parse) (oxasir.sm1) pushfile] extension
                      6: (oxasir.started) boundp {
                      7: } {
                      8:   [(x^2-1) (x)] fctr pop
                      9: } ifelse
                     10:
1.2       takayama   11: /httpd_startserver {
                     12:    [(sm1.socket) (open) [httpd.port (localhost)]] extension
                     13:    /server.fdAndPort set
1.1       takayama   14:    (sm1.socket.open returns  ) messagen server.fdAndPort message
                     15:    [(sm1.socket) (accept) [server.fdAndPort 0 get]] extension
                     16:    /server.fd set
                     17:    (connected.) message
                     18:    (sm1.socket.accept returns  ) messagen server.fd message
                     19: } def
                     20:
1.2       takayama   21: /httpd_stopserver {
1.1       takayama   22:    [(sm1.socket) (close) server.fd ] extension message
                     23: } def
                     24:
1.3     ! takayama   25: /send_packet {
1.1       takayama   26:   /arg1 set
                     27:   [(sm1.socket) (write) [server.fd 0 get arg1]] extension message
                     28: } def
                     29:
                     30: /sendln {
1.2       takayama   31:  /arg1 set
                     32:  [/in-sendln /mmm] pushVariables
                     33:  [ arg1 /mmm set
1.1       takayama   34:   mmm tag 5 eq {
                     35:     [mmm 10 (string) dc] cat /mmm set
                     36:   }{
                     37:     10 (string) dc /mmm set
                     38:   } ifelse
                     39:   [(sm1.socket) (write) [server.fd 0 get mmm]] extension message
1.2       takayama   40:  ] pop
                     41:  popVariables
1.1       takayama   42: } def
                     43:
                     44: /httpd {
1.3     ! takayama   45:   /httpd.serial 1 def
        !            46:   /httpd.history [ ] def
1.1       takayama   47:   {
1.2       takayama   48:     httpd_startserver ;
                     49:     httpd_action ;
                     50:     httpd_stopserver ;
1.1       takayama   51:     (5 sleep) system
1.3     ! takayama   52:     httpd.serial 1 add /httpd.serial set
1.1       takayama   53:   } loop
                     54: } def
                     55:
1.2       takayama   56: /httpd_action {
1.3     ! takayama   57:   [/in-httpd /httpd.com.old /ff /httpd.com /httpd.result
        !            58:   ] pushVariables
1.2       takayama   59:   [
                     60:   (httpd:sm1 is ready) message
1.1       takayama   61:   {
                     62:    /httpd.com.old ( ) def
                     63:    [(sm1.socket) (select) [server.fd 0 get -1]] extension
                     64: %%                                          wait for ever
                     65:    {
                     66:         [(sm1.socket) (read) [server.fd 0 get ]] extension /ff set
                     67:         ff length 0 eq {
                     68:            (connection is closed.) message
                     69:         }
                     70:         ff (quit) eq
                     71:         { (We exit the function httpd) message exit }
                     72:         { %% [(SigIgn) 0] system_variable
                     73:           (------------  start ----------------------) message
                     74:              ff message
                     75:           (-----------------------------------------) message
                     76:              ff removeGET webstringToAscii /httpd.com set
                     77:              httpd.com message
                     78:           (------------  end ----------------------) message
                     79:           (   ) message
1.3     ! takayama   80:           httpd.com metaCommand {
        !            81:             /httpd.history httpd.history httpd.com append def
        !            82:             oxasir.ccc
        !            83:              [(if (1) {)  httpd.com  (};)] cat
        !            84:             oxexecutestring ;
        !            85:             oxasir.ccc oxpopstring /httpd.result set
        !            86:             /httpd.com.old httpd.com def
        !            87:             (------------- result -------------) message
        !            88:             httpd.result message
        !            89:             (----------------------------------) message
        !            90:             (  ) message
        !            91:             [(<title> asirweb </title> )
        !            92:              (<font color="blue"> Input-) httpd.serial toString
        !            93:               (: </font> )
        !            94:              (<pre> ) httpd.com (</pre>) (<br>)
        !            95:              (<font color="green"> Output-) httpd.serial toString
        !            96:              (: </font> )
        !            97:              (<pre>) httpd.result (</pre>)
        !            98:             ] cat
        !            99:             send-page-3  exit
        !           100:           } { } ifelse
1.1       takayama  101:         } ifelse
                    102:    }
                    103:    {  } ifelse
                    104:   } loop
1.2       takayama  105:   ] pop
                    106:   popVariables
1.1       takayama  107: } def
                    108:
                    109:
1.3     ! takayama  110: /send-page-bye {
1.1       takayama  111:    (HTTP/0.9 200 OK) sendln
                    112: %%   (Date: Sun, 18 Mar 2001 02:54:50 GMT) sendln
                    113: %%   (Server: sm1/0.1 (Unix)) sendln
                    114: %%   (Last-Modified: Wed, 23 Aug 2000 11:19:27 GMT) sendln
                    115: %%   (ETag: "1f8f-5df-39a3b33f") sendln
                    116: %%   (Accept-Ranges: bytes) sendln
                    117: %%   (Content-Length: 10) sendln
                    118:    (Connection: close) sendln
1.3     ! takayama  119: %   (Content-Type: text/plain) sendln
        !           120:    (Content-Type: text/html) sendln
1.1       takayama  121:    0 sendln
1.3     ! takayama  122:    (<html>) sendln
        !           123:    (Shutdown the engine. <br>) sendln
        !           124:    (See you! <a href="http://www.openxm.org"> asirweb </a>) sendln
        !           125:    (</html>) sendln
1.1       takayama  126:    0 sendln
                    127:    [(flush)] extension
                    128: } def
                    129:
                    130: /send-page-2 {
                    131:    (HTTP/0.9 200 OK) sendln
                    132: %%   (Content-Length: 10) sendln
                    133:    (Connection: close) sendln
                    134:    (Content-Type: text/html) sendln
                    135:    0 sendln
                    136:    (<FORM NAME="myFORM">) sendln
                    137:    (<INPUT TYPE="TEXT" NAME="Num">) sendln
                    138:    (</FORM>) sendln
                    139:    0 sendln
                    140:    [(flush)] extension
                    141: } def
                    142:
                    143: /send-page-3 {
                    144:   /arg1 set
                    145:   [/in-send-page-3 /result] pushVariables
                    146:   [
                    147:    /result arg1 def
                    148:    (HTTP/0.9 200 OK) sendln
                    149:    (Connection: close) sendln
                    150:    (Content-Type: text/html) sendln
                    151:    0 sendln
                    152: %%   (<FORM NAME="myFORM" METHOD="POST">) sendln
                    153:    result sendln
                    154:    (<FORM NAME="myFORM">) sendln
                    155:    (<INPUT TYPE=submit VALUE="submit">) sendln
1.2       takayama  156:    (<textarea name=msg rows=10 cols="80" wrap="soft"></textarea>) sendln
1.1       takayama  157:    (</FORM>) sendln
1.3     ! takayama  158:    send-menu-1
1.1       takayama  159:    0 sendln
                    160:    [(flush)] extension
                    161:   ] pop
                    162:   popVariables
                    163: } def
                    164:
1.3     ! takayama  165: /httpd.asirman
        !           166:  ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/asir2000/html-jp/man_toc.html")
        !           167: def
        !           168: /httpd.asirman.index
        !           169:   ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/asir2000/html-jp/man_262.html#SEC262")
        !           170: def
        !           171: /send-menu-1 {
        !           172:
        !           173:   [$<a href="http://localhost:$ httpd.port toString
        !           174:    $/?msg=httpdAsirMeta+quit"> QUIT </a>, $
        !           175:   ] cat sendln
        !           176:
        !           177:   [(<font color="red">
        !           178:     <a href=) httpd.asirman (> AsirManual (Ja) </a> </font>, )] cat sendln
        !           179:   [(<font color="purple">
        !           180:     <a href=) httpd.asirman.index (> Index (Ja) </a> </font>, )] cat sendln
        !           181:   (<font color="blue">
        !           182:    <a href="http://www.math.sci.kobe-u.ac.jp/~taka/asir-book-html/main"> Intro (Ja) </a> </font>, ) sendln
        !           183: } def
1.1       takayama  184:
                    185: /stopclient {
                    186:   [(sm1.socket) (close) [client.fdAndPort 0 get] ] extension message
                    187: } def
                    188:
                    189:
                    190: /fromHex {
                    191:   /arg1 set
                    192:   [/in-fromHex /s1 /s2 /c /c2] pushVariables
                    193:   [
                    194:     arg1 0 get /s1 set
                    195:     arg1 1 get /s2 set
                    196:
                    197:     48 s1 le  s1 57 le and {  % 0, ..., 9
                    198:       s1 48 sub /c set
                    199:     }{ } ifelse
                    200:     65 s1 le  s1 70 le and {  % A, ..., F
                    201:       s1 65 sub 10 add /c set
                    202:     }{ } ifelse
                    203:     97 s1 le  s1 102 le and {  % a, ..., f
                    204:       s1 97 sub 10 add /c set
                    205:     }{ } ifelse
                    206:     c 16 mul /c set
                    207:
                    208:     48 s2 le  s2 57 le and {  % 0, ..., 9
                    209:       s2 48 sub /c2 set
                    210:     }{ } ifelse
                    211:     65 s2 le  s2 70 le and {  % A, ..., F
                    212:       s2 65 sub 10 add /c2 set
                    213:     }{ } ifelse
                    214:     97 s2 le  s2 102 le and {  % a, ..., f
                    215:       s2 97 sub 10 add /c2 set
                    216:     }{ } ifelse
                    217:     c c2 add /arg1 set
                    218:   ] pop
                    219:   popVariables
                    220:   arg1
                    221: } def
                    222:
                    223: /removeGET {
                    224:   /arg1 set
                    225:   [/in-removeGET /s /s2 /i /j] pushVariables
                    226:   [
                    227:      /s arg1 def
                    228:      s 1 copy /s2 set
                    229:      s (array) dc /s set
                    230:      /j 0 def
                    231:      10 1 s length 1 sub {
                    232:        /i set
                    233:        s2 j << s i get (string) dc >> put
                    234:        j 1 add /j set
                    235:      } for
                    236:      /arg1 s2 def
                    237:   ] pop
                    238:   arg1
                    239: } def
                    240:
                    241: /webstringToAscii {
                    242:   /arg1 set
                    243:   [/in-webstringToAscii /s /i /j /c /n] pushVariables
                    244:   [
                    245:      /s arg1 def
                    246:      s (array) dc /s set
                    247:      /j 0 def /n s length def
                    248:      /i 0 def
                    249:      {
                    250:        s i get /c set
                    251:        c 32 eq { exit } { } ifelse
                    252:        c 37 eq {  % c == %
                    253:          [s i 1 add get s i 2 add get] fromHex /c set
                    254:          s j c put
                    255:          j 1 add /j set
                    256:          i 3 add /i set
                    257:        } {
                    258:          c 43 eq { % c == +
                    259:            s j 32 put
                    260:            j 1 add /j set
                    261:            i 1 add /i set
                    262:           } {
                    263:             c 13 eq { % c == 0xd
                    264:               i 1 add /i set
                    265:             } {
                    266:               s j c put
                    267:               j 1 add /j set
                    268:               i 1 add /i set
                    269:             } ifelse
                    270:          } ifelse
                    271:        } ifelse
                    272:        i n ge { exit } {  } ifelse
                    273:      } loop
                    274:      s j carN /s set
                    275:      s { (string) dc } map cat /arg1 set
                    276:   ] pop
                    277:   popVariables
                    278:   arg1
1.3     ! takayama  279: } def
        !           280:
        !           281: /metaCommand {
        !           282:   /arg1 set
        !           283:   [/in-metaCommand /msg /result] pushVariables
        !           284:   [
        !           285:     /msg arg1 def
        !           286:     /result 1 def
        !           287:     msg (httpdAsirMeta quit) eq {
        !           288:        send-page-bye
        !           289:        quit
        !           290:        /result 0 def
        !           291:     } { } ifelse
        !           292:     /arg1 result def
        !           293:   ] pop
        !           294:   popVariables
        !           295:   arg1
        !           296: } def

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