[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.5

1.5     ! takayama    1: %% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.4 2001/04/21 11:16:30 takayama Exp $
1.1       takayama    2: %% http server by sm1
1.2       takayama    3:
                      4: /httpd.port 1200 def
1.4       takayama    5: /httpd.initialization
                      6: %% Put initialization codes here.
                      7:  [
1.5     ! takayama    8:   ("Asirweb version 0.80. "+
1.4       takayama    9:    " Risa/Asir oxasir version "+rtostr(version());)
                     10:  ] cat
                     11: def
1.1       takayama   12: [(parse) (oxasir.sm1) pushfile] extension
                     13: (oxasir.started) boundp {
                     14: } {
                     15:   [(x^2-1) (x)] fctr pop
1.5     ! takayama   16:   oxasir.ccc oxmathcap
        !            17:   oxasir.ccc oxsetmathcap
1.1       takayama   18: } ifelse
                     19:
1.5     ! takayama   20: /asirweb {
        !            21:   (sleep 3; netscape -geometry 800x500 http://localhost:1200 &) system
        !            22:    httpd ;
        !            23: } def
        !            24:
1.2       takayama   25: /httpd_startserver {
                     26:    [(sm1.socket) (open) [httpd.port (localhost)]] extension
1.5     ! takayama   27:    /httpd.server.fdAndPort set
        !            28:    (sm1.socket.open returns  ) messagen httpd.server.fdAndPort message
        !            29:    [(sm1.socket) (accept) [httpd.server.fdAndPort 0 get]] extension
        !            30:    /httpd.server.fd set
1.1       takayama   31:    (connected.) message
1.5     ! takayama   32:    (sm1.socket.accept returns  ) messagen httpd.server.fd message
1.1       takayama   33: } def
                     34:
1.2       takayama   35: /httpd_stopserver {
1.5     ! takayama   36:    [(sm1.socket) (close) httpd.server.fd ] extension message
1.1       takayama   37: } def
                     38:
1.3       takayama   39: /send_packet {
1.1       takayama   40:   /arg1 set
1.5     ! takayama   41:   [(sm1.socket) (write) [httpd.server.fd 0 get arg1]] extension message
1.1       takayama   42: } def
                     43:
                     44: /sendln {
1.2       takayama   45:  /arg1 set
                     46:  [/in-sendln /mmm] pushVariables
                     47:  [ arg1 /mmm set
1.1       takayama   48:   mmm tag 5 eq {
                     49:     [mmm 10 (string) dc] cat /mmm set
                     50:   }{
                     51:     10 (string) dc /mmm set
                     52:   } ifelse
1.5     ! takayama   53:   [(sm1.socket) (write) [httpd.server.fd 0 get mmm]] extension message
1.2       takayama   54:  ] pop
                     55:  popVariables
1.1       takayama   56: } def
                     57:
                     58: /httpd {
1.4       takayama   59:   /httpd.serial 0 def
1.3       takayama   60:   /httpd.history [ ] def
1.1       takayama   61:   {
1.2       takayama   62:     httpd_startserver ;
                     63:     httpd_action ;
                     64:     httpd_stopserver ;
1.1       takayama   65:     (5 sleep) system
1.3       takayama   66:     httpd.serial 1 add /httpd.serial set
1.1       takayama   67:   } loop
                     68: } def
                     69:
1.2       takayama   70: /httpd_action {
1.5     ! takayama   71:   [/in-httpd /ff /httpd.com /httpd.result /sss
        !            72:    /sss.engine /sss.web
1.3       takayama   73:   ] pushVariables
1.2       takayama   74:   [
1.1       takayama   75:   {
1.5     ! takayama   76:        [(sm1.socket) (select) [httpd.server.fd 0 get -1]] extension
        !            77:        %%     wait for ever
        !            78:         [(sm1.socket) (read) [httpd.server.fd 0 get ]] extension /ff set
1.1       takayama   79:         ff length 0 eq {
                     80:            (connection is closed.) message
                     81:         }
1.4       takayama   82:         {
1.1       takayama   83:           (------------  start ----------------------) message
                     84:              ff message
                     85:           (-----------------------------------------) message
                     86:              ff removeGET webstringToAscii /httpd.com set
                     87:              httpd.com message
                     88:           (------------  end ----------------------) message
                     89:           (   ) message
1.4       takayama   90:           httpd.serial 0 eq {
                     91:             /httpd.com  httpd.initialization def
                     92:           } { } ifelse
1.3       takayama   93:           httpd.com metaCommand {
1.5     ! takayama   94:             /httpd.history
        !            95:                 httpd.history
        !            96:                 [10 (string) dc
        !            97:                  (/**** ) httpd.serial toString ( ****/)
        !            98:                  10 (string) dc
        !            99:                   httpd.com
        !           100:                  ] cat
        !           101:                 append
        !           102:             def
1.3       takayama  103:             oxasir.ccc
                    104:              [(if (1) {)  httpd.com  (};)] cat
                    105:             oxexecutestring ;
1.5     ! takayama  106:
        !           107:             [(oxReq) oxasir.ccc SM_popString ] extension pop
        !           108:             [(flush)] extension pop
        !           109:             %% Select inputs for interruption.
        !           110:             %% Wait by the spin lock.
        !           111:             {
        !           112:               [(oxMultiSelect) [oxasir.ccc] 1] extension 1 get 0 get
        !           113:               /sss.engine set
        !           114:               [(sm1.socket) (mselect)
        !           115:                 [[httpd.server.fd 0 get] 1]
        !           116:               ] extension 0 get /sss.web set
        !           117:               /sss [sss.engine sss.web] def
        !           118:               sss.engine { exit } { } ifelse
        !           119:               sss.web    { exit } { } ifelse
        !           120:             } loop
        !           121:             sss message
        !           122:
        !           123:             sss 0 get {
        !           124:                 [(oxGet) oxasir.ccc] extension  /httpd.result set
        !           125:                 %% oxasir.ccc oxpopstring /httpd.result set
        !           126:             } {
        !           127:                 oxasir.ccc oxreset
        !           128:                 oxasir.ccc ("computation is interrupted.";) oxexecutestring ;
        !           129:                 oxasir.ccc oxpopstring
        !           130:                 /httpd.result set
        !           131:                 exit
        !           132:             } ifelse
1.3       takayama  133:             (------------- result -------------) message
                    134:             httpd.result message
                    135:             (----------------------------------) message
                    136:             (  ) message
1.4       takayama  137:             [httpd.serial 0 eq { } {
                    138:                 (<title> asirweb </title> )
                    139:                 (<font color="blue"> Input-) httpd.serial toString
                    140:                  (: </font> )
                    141:                 (<pre> ) httpd.com (</pre>) (<br>)
                    142:               } ifelse
1.3       takayama  143:              (<font color="green"> Output-) httpd.serial toString
                    144:              (: </font> )
                    145:              (<pre>) httpd.result (</pre>)
                    146:             ] cat
                    147:             send-page-3  exit
1.5     ! takayama  148:           } { exit } ifelse  %% metaCommand
1.1       takayama  149:         } ifelse
                    150:   } loop
1.2       takayama  151:   ] pop
                    152:   popVariables
1.1       takayama  153: } def
                    154:
                    155:
1.3       takayama  156: /send-page-bye {
1.1       takayama  157:    (HTTP/0.9 200 OK) sendln
                    158: %%   (Date: Sun, 18 Mar 2001 02:54:50 GMT) sendln
                    159: %%   (Server: sm1/0.1 (Unix)) sendln
                    160: %%   (Last-Modified: Wed, 23 Aug 2000 11:19:27 GMT) sendln
                    161: %%   (ETag: "1f8f-5df-39a3b33f") sendln
                    162: %%   (Accept-Ranges: bytes) sendln
                    163: %%   (Content-Length: 10) sendln
                    164:    (Connection: close) sendln
1.3       takayama  165: %   (Content-Type: text/plain) sendln
                    166:    (Content-Type: text/html) sendln
1.1       takayama  167:    0 sendln
1.3       takayama  168:    (<html>) sendln
                    169:    (Shutdown the engine. <br>) sendln
                    170:    (See you! <a href="http://www.openxm.org"> asirweb </a>) sendln
                    171:    (</html>) sendln
1.1       takayama  172:    0 sendln
                    173:    [(flush)] extension
                    174: } def
                    175:
                    176: /send-page-2 {
                    177:    (HTTP/0.9 200 OK) sendln
                    178: %%   (Content-Length: 10) sendln
                    179:    (Connection: close) sendln
                    180:    (Content-Type: text/html) sendln
                    181:    0 sendln
                    182:    (<FORM NAME="myFORM">) sendln
                    183:    (<INPUT TYPE="TEXT" NAME="Num">) sendln
                    184:    (</FORM>) sendln
                    185:    0 sendln
                    186:    [(flush)] extension
                    187: } def
                    188:
                    189: /send-page-3 {
                    190:   /arg1 set
                    191:   [/in-send-page-3 /result] pushVariables
                    192:   [
                    193:    /result arg1 def
                    194:    (HTTP/0.9 200 OK) sendln
                    195:    (Connection: close) sendln
                    196:    (Content-Type: text/html) sendln
                    197:    0 sendln
                    198: %%   (<FORM NAME="myFORM" METHOD="POST">) sendln
                    199:    result sendln
                    200:    (<FORM NAME="myFORM">) sendln
                    201:    (<INPUT TYPE=submit VALUE="submit">) sendln
1.2       takayama  202:    (<textarea name=msg rows=10 cols="80" wrap="soft"></textarea>) sendln
1.1       takayama  203:    (</FORM>) sendln
1.3       takayama  204:    send-menu-1
1.1       takayama  205:    0 sendln
                    206:    [(flush)] extension
                    207:   ] pop
                    208:   popVariables
                    209: } def
                    210:
1.3       takayama  211: /httpd.asirman
                    212:  ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/asir2000/html-jp/man_toc.html")
                    213: def
                    214: /httpd.asirman.index
                    215:   ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/asir2000/html-jp/man_262.html#SEC262")
                    216: def
1.4       takayama  217: /httpd.asir.intro
                    218:    ("http://www.math.sci.kobe-u.ac.jp/~taka/asir-book-html/main")
                    219: def
1.3       takayama  220: /send-menu-1 {
                    221:
1.4       takayama  222:   (FILE:) sendln
1.3       takayama  223:   [$<a href="http://localhost:$ httpd.port toString
1.4       takayama  224:    $/?msg=httpdAsirMeta+quit"> Shutdown the asir server. </a>, $
1.3       takayama  225:   ] cat sendln
1.5     ! takayama  226: %%  [$<a href="http://localhost:$ httpd.port toString
        !           227: %%   $/?msg=httpdAsirMeta+interrupt"> interrupt </a>, $
        !           228: %%  ] cat sendln
        !           229:   [$<a href="http://localhost:$ httpd.port toString
        !           230:    $/?msg=httpdAsirMeta+save"> save. </a>, $
        !           231:   ] cat sendln
1.4       takayama  232:   ( <spacer type=horizontal size=80> ) sendln
1.3       takayama  233:
1.4       takayama  234:   (HELP:) sendln
1.3       takayama  235:   [(<font color="red">
1.4       takayama  236:     <a href=) httpd.asirman ( > AsirManual (Ja) </a> </font>, )] cat sendln
1.3       takayama  237:   [(<font color="purple">
1.4       takayama  238:     <a href=) httpd.asirman.index ( > Index (Ja) </a> </font>, )] cat sendln
                    239:   [(<font color="blue">
                    240:     <a href=) httpd.asir.intro ( > Intro (Ja) </a> </font>, )] cat sendln
1.3       takayama  241: } def
1.1       takayama  242:
1.5     ! takayama  243: /send-page-save {
        !           244:  [/in-send-page-save /i] pushVariables
        !           245:  [
        !           246:    (HTTP/0.9 200 OK) sendln
        !           247:    (Connection: close) sendln
        !           248:    (Content-Type: text/html) sendln
        !           249:    0 sendln
        !           250:    (<html> <body>) sendln
        !           251:    (/* Save the following to  sm1out.txt */<br>) sendln
        !           252:
        !           253:    (<pre>) sendln
        !           254:    0 1 httpd.history length 1 sub {
        !           255:      /i set
        !           256:      httpd.history i get sendln
        !           257:    } for
        !           258:    (</pre>) sendln
        !           259:    (</body> </html>) sendln
        !           260:    0 sendln
        !           261:    [(flush)] extension
        !           262:    [(PrintDollar) 1] system_variable
        !           263:    httpd.history output
        !           264:    [(PrintDollar) 0] system_variable
        !           265:  ] pop
        !           266:  popVariables
        !           267: } def
        !           268:
        !           269:
1.1       takayama  270: /stopclient {
                    271:   [(sm1.socket) (close) [client.fdAndPort 0 get] ] extension message
                    272: } def
                    273:
                    274:
                    275: /fromHex {
                    276:   /arg1 set
                    277:   [/in-fromHex /s1 /s2 /c /c2] pushVariables
                    278:   [
                    279:     arg1 0 get /s1 set
                    280:     arg1 1 get /s2 set
                    281:
                    282:     48 s1 le  s1 57 le and {  % 0, ..., 9
                    283:       s1 48 sub /c set
                    284:     }{ } ifelse
                    285:     65 s1 le  s1 70 le and {  % A, ..., F
                    286:       s1 65 sub 10 add /c set
                    287:     }{ } ifelse
                    288:     97 s1 le  s1 102 le and {  % a, ..., f
                    289:       s1 97 sub 10 add /c set
                    290:     }{ } ifelse
                    291:     c 16 mul /c set
                    292:
                    293:     48 s2 le  s2 57 le and {  % 0, ..., 9
                    294:       s2 48 sub /c2 set
                    295:     }{ } ifelse
                    296:     65 s2 le  s2 70 le and {  % A, ..., F
                    297:       s2 65 sub 10 add /c2 set
                    298:     }{ } ifelse
                    299:     97 s2 le  s2 102 le and {  % a, ..., f
                    300:       s2 97 sub 10 add /c2 set
                    301:     }{ } ifelse
                    302:     c c2 add /arg1 set
                    303:   ] pop
                    304:   popVariables
                    305:   arg1
                    306: } def
                    307:
                    308: /removeGET {
                    309:   /arg1 set
                    310:   [/in-removeGET /s /s2 /i /j] pushVariables
                    311:   [
                    312:      /s arg1 def
                    313:      s 1 copy /s2 set
                    314:      s (array) dc /s set
                    315:      /j 0 def
                    316:      10 1 s length 1 sub {
                    317:        /i set
                    318:        s2 j << s i get (string) dc >> put
                    319:        j 1 add /j set
                    320:      } for
                    321:      /arg1 s2 def
                    322:   ] pop
                    323:   arg1
                    324: } def
                    325:
                    326: /webstringToAscii {
                    327:   /arg1 set
                    328:   [/in-webstringToAscii /s /i /j /c /n] pushVariables
                    329:   [
                    330:      /s arg1 def
                    331:      s (array) dc /s set
                    332:      /j 0 def /n s length def
                    333:      /i 0 def
                    334:      {
                    335:        s i get /c set
                    336:        c 32 eq { exit } { } ifelse
                    337:        c 37 eq {  % c == %
                    338:          [s i 1 add get s i 2 add get] fromHex /c set
                    339:          s j c put
                    340:          j 1 add /j set
                    341:          i 3 add /i set
                    342:        } {
                    343:          c 43 eq { % c == +
                    344:            s j 32 put
                    345:            j 1 add /j set
                    346:            i 1 add /i set
                    347:           } {
                    348:             c 13 eq { % c == 0xd
                    349:               i 1 add /i set
                    350:             } {
                    351:               s j c put
                    352:               j 1 add /j set
                    353:               i 1 add /i set
                    354:             } ifelse
                    355:          } ifelse
                    356:        } ifelse
                    357:        i n ge { exit } {  } ifelse
                    358:      } loop
                    359:      s j carN /s set
                    360:      s { (string) dc } map cat /arg1 set
                    361:   ] pop
                    362:   popVariables
                    363:   arg1
1.3       takayama  364: } def
                    365:
                    366: /metaCommand {
                    367:   /arg1 set
                    368:   [/in-metaCommand /msg /result] pushVariables
                    369:   [
                    370:     /msg arg1 def
                    371:     /result 1 def
                    372:     msg (httpdAsirMeta quit) eq {
                    373:        send-page-bye
                    374:        quit
1.5     ! takayama  375:        /result 0 def
        !           376:     } { } ifelse
        !           377:     msg (httpdAsirMeta save) eq {
        !           378:        send-page-save
        !           379:        /result 0 def
        !           380:     } { } ifelse
        !           381:     msg (httpdAsirMeta interrupt) eq {
        !           382:        oxasir.ccc oxreset
        !           383:        (Interrupted! <br>) send-page-3
1.3       takayama  384:        /result 0 def
                    385:     } { } ifelse
                    386:     /arg1 result def
                    387:   ] pop
                    388:   popVariables
                    389:   arg1
                    390: } def

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