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

1.11    ! takayama    1: %% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.10 2001/04/23 13:34:00 takayama Exp $
1.1       takayama    2: %% http server by sm1
1.2       takayama    3:
                      4: /httpd.port 1200 def
1.11    ! takayama    5: /httpd.image.name (kobeuniv2.jpg) def
        !             6: /httpd.image.type (jpeg) def
1.8       takayama    7:
1.4       takayama    8: /httpd.initialization
                      9: %% Put initialization codes here.
                     10:  [
1.5       takayama   11:   ("Asirweb version 0.80. "+
1.4       takayama   12:    " Risa/Asir oxasir version "+rtostr(version());)
                     13:  ] cat
                     14: def
1.8       takayama   15:
1.1       takayama   16: [(parse) (oxasir.sm1) pushfile] extension
                     17: (oxasir.started) boundp {
                     18: } {
1.6       takayama   19:   %% Initialize oxasir.
1.1       takayama   20:   [(x^2-1) (x)] fctr pop
1.5       takayama   21:   oxasir.ccc oxmathcap
                     22:   oxasir.ccc oxsetmathcap
1.1       takayama   23: } ifelse
                     24:
1.5       takayama   25: /asirweb {
1.7       takayama   26:  [/rrr ] pushVariables
                     27:  [
                     28:   %% This procedure to generate port number might fail.
                     29:   [(oxGenPass)] extension . (integer) dc  /rrr set
                     30:   rrr << rrr 20000 idiv 20000 mul >> sub /rrr set
                     31:   /httpd.port 1200 rrr add def
                     32:   httpd.port message
                     33:
1.6       takayama   34:   [(sleep 3; netscape -geometry 800x500 http://localhost:)
                     35:     httpd.port toString
                     36:    ( &)] cat system
1.5       takayama   37:    httpd ;
1.7       takayama   38:   ] pop
                     39:   popVariables
1.5       takayama   40: } def
                     41:
1.2       takayama   42: /httpd_startserver {
                     43:    [(sm1.socket) (open) [httpd.port (localhost)]] extension
1.5       takayama   44:    /httpd.server.fdAndPort set
                     45:    (sm1.socket.open returns  ) messagen httpd.server.fdAndPort message
                     46:    [(sm1.socket) (accept) [httpd.server.fdAndPort 0 get]] extension
                     47:    /httpd.server.fd set
1.1       takayama   48:    (connected.) message
1.5       takayama   49:    (sm1.socket.accept returns  ) messagen httpd.server.fd message
1.1       takayama   50: } def
                     51:
1.2       takayama   52: /httpd_stopserver {
1.5       takayama   53:    [(sm1.socket) (close) httpd.server.fd ] extension message
1.1       takayama   54: } def
                     55:
1.3       takayama   56: /send_packet {
1.1       takayama   57:   /arg1 set
1.5       takayama   58:   [(sm1.socket) (write) [httpd.server.fd 0 get arg1]] extension message
1.1       takayama   59: } def
                     60:
                     61: /sendln {
1.2       takayama   62:  /arg1 set
                     63:  [/in-sendln /mmm] pushVariables
                     64:  [ arg1 /mmm set
1.1       takayama   65:   mmm tag 5 eq {
                     66:     [mmm 10 (string) dc] cat /mmm set
                     67:   }{
                     68:     10 (string) dc /mmm set
                     69:   } ifelse
1.10      takayama   70:   [(sm1.socket) (select) [httpd.server.fd 0 get 0]] extension {
                     71:     (Warning: your peer closed the connection. Do not send the data.) message
                     72:   } {
                     73:     [(sm1.socket) (write) [httpd.server.fd 0 get mmm]] extension message
                     74:   } ifelse
1.2       takayama   75:  ] pop
                     76:  popVariables
1.1       takayama   77: } def
                     78:
1.11    ! takayama   79: /sendBinaryFile {
        !            80:  /arg1 set
        !            81:  [/in-sendln /fname /fd /c /cdata] pushVariables
        !            82:  [ arg1 /fname set
        !            83:    [(sendBinaryFile: sending data) ] cat message
        !            84:    [(fp2openForRead) fname] extension /fd set  fd message
        !            85:    fd 0 lt {
        !            86:       [(Error: sendBinaryFile: file ) fname ( is not found.)] cat message
        !            87:       /aaaa goto
        !            88:    } {  } ifelse
        !            89:    [(fp2pushfile) fname] extension /cdata set
        !            90:    [(sm1.socket) (select) [httpd.server.fd 0 get 0]] extension {
        !            91:        (Warning (sendBinaryFile): your peer closed the connection. Do not send the data.)
        !            92:        message
        !            93:        exit
        !            94:    } {
        !            95:        [(sm1.socket) (writeByte) [httpd.server.fd 0 get cdata]] extension pop
        !            96:    } ifelse
        !            97:    /aaaa
        !            98:  ] pop
        !            99:  popVariables
        !           100: } def
        !           101:
1.1       takayama  102: /httpd {
1.4       takayama  103:   /httpd.serial 0 def
1.3       takayama  104:   /httpd.history [ ] def
1.11    ! takayama  105:   /httpd.result.history [ 0 ] def
1.1       takayama  106:   {
1.2       takayama  107:     httpd_startserver ;
                    108:     httpd_action ;
                    109:     httpd_stopserver ;
1.1       takayama  110:     (5 sleep) system
1.3       takayama  111:     httpd.serial 1 add /httpd.serial set
1.1       takayama  112:   } loop
                    113: } def
                    114:
1.2       takayama  115: /httpd_action {
1.5       takayama  116:   [/in-httpd /ff /httpd.com /httpd.result /sss
1.6       takayama  117:    /sss.engine /sss.web /err
1.3       takayama  118:   ] pushVariables
1.2       takayama  119:   [
1.1       takayama  120:   {
1.5       takayama  121:        [(sm1.socket) (select) [httpd.server.fd 0 get -1]] extension
                    122:        %%     wait for ever
                    123:         [(sm1.socket) (read) [httpd.server.fd 0 get ]] extension /ff set
1.1       takayama  124:         ff length 0 eq {
                    125:            (connection is closed.) message
                    126:         }
1.4       takayama  127:         {
1.1       takayama  128:           (------------  start ----------------------) message
                    129:              ff message
                    130:           (-----------------------------------------) message
1.11    ! takayama  131:              ff 1 copy askToSendFile /httpd.sendFile set
        !           132:              httpd.sendFile tag 0 eq {
        !           133:                ff removeGET webstringToAscii /httpd.com set
        !           134:              } {
        !           135:                /httpd.com (NONE) def
        !           136:              } ifelse
        !           137:              [(httpd.com=) httpd.com] cat message
        !           138:              (httpd.sendFile=) messagen httpd.sendFile message
1.1       takayama  139:           (------------  end ----------------------) message
                    140:           (   ) message
1.4       takayama  141:           httpd.serial 0 eq {
                    142:             /httpd.com  httpd.initialization def
                    143:           } { } ifelse
1.11    ! takayama  144:           httpd.sendFile tag 0 eq { }
        !           145:           {
        !           146:             httpd.sendFile httpd.image.type send-image
        !           147:             exit  %% exit the loop LOOP-A
        !           148:           } ifelse
1.3       takayama  149:           httpd.com metaCommand {
1.8       takayama  150:             httpd.textarea.valid {
                    151:               oxasir.ccc
                    152:                [(if (1) {)  httpd.com  (; };)] cat
                    153:               oxexecutestring ;
                    154:             }{
                    155:               send-page-warning  exit
                    156:             } ifelse
1.6       takayama  157:             [(oxReq) oxasir.ccc SM_dupErrors ] extension pop
1.5       takayama  158:
1.6       takayama  159:             [(oxReq) oxasir.ccc SM_popCMO ] extension pop
1.5       takayama  160:             [(oxReq) oxasir.ccc SM_popString ] extension pop
                    161:             [(flush)] extension pop
                    162:             %% Select inputs for interruption.
                    163:             %% Wait by the spin lock.
                    164:             {
                    165:               [(oxMultiSelect) [oxasir.ccc] 1] extension 1 get 0 get
                    166:               /sss.engine set
                    167:               [(sm1.socket) (mselect)
                    168:                 [[httpd.server.fd 0 get] 1]
                    169:               ] extension 0 get /sss.web set
                    170:               /sss [sss.engine sss.web] def
                    171:               sss.engine { exit } { } ifelse
                    172:               sss.web    { exit } { } ifelse
                    173:             } loop
                    174:             sss message
                    175:
                    176:             sss 0 get {
1.6       takayama  177:                 [(oxGet) oxasir.ccc] extension  /err          set
1.5       takayama  178:                 [(oxGet) oxasir.ccc] extension  /httpd.result set
                    179:                 %% oxasir.ccc oxpopstring /httpd.result set
                    180:             } {
                    181:                 oxasir.ccc oxreset
                    182:                 oxasir.ccc ("computation is interrupted.";) oxexecutestring ;
                    183:                 oxasir.ccc oxpopstring
                    184:                 /httpd.result set
                    185:                 exit
                    186:             } ifelse
1.3       takayama  187:             (------------- result -------------) message
                    188:             httpd.result message
                    189:             (----------------------------------) message
                    190:             (  ) message
1.6       takayama  191:
                    192:             err message
                    193:             err [ ] eq  {
                    194:               /httpd.history
                    195:                 httpd.history
                    196:                 [10 (string) dc
                    197:                  (/**** ) httpd.serial toString ( ****/)
                    198:                  10 (string) dc
                    199:                   httpd.com
1.8       takayama  200:                  (;)  %% add extra ;
1.6       takayama  201:                  ] cat
                    202:                 append
                    203:               def
                    204:             } {
                    205:               oxasir.ccc cleanErrors
                    206:               [httpd.result 10 (string) dc err toString] cat
                    207:               /httpd.result set
                    208:             } ifelse
                    209:
1.4       takayama  210:             [httpd.serial 0 eq { } {
                    211:                 (<title> asirweb </title> )
                    212:                 (<font color="blue"> Input-) httpd.serial toString
                    213:                  (: </font> )
1.9       takayama  214:                  httpd.com preformatHTML (<br>)
1.4       takayama  215:               } ifelse
1.3       takayama  216:              (<font color="green"> Output-) httpd.serial toString
                    217:              (: </font> )
1.11    ! takayama  218:              (<a href="http://localhost:)  httpd.port toString
        !           219:              (/?msg=httpdAsirMeta+Pretty+) httpd.serial toString
        !           220:              ("> (in pretty format) </a>)
        !           221:              %%(<a href=") httpd.image.name ("> (in pretty format) </a>) %%test
1.9       takayama  222:               httpd.result preformatHTML
1.11    ! takayama  223:               httpd.result.history httpd.result append /httpd.result.history set
1.3       takayama  224:             ] cat
1.11    ! takayama  225:             send-page-3  exit  %% exit the loop LOOP-A
1.5       takayama  226:           } { exit } ifelse  %% metaCommand
1.1       takayama  227:         } ifelse
1.11    ! takayama  228:   } loop  %% LOOP-A
1.2       takayama  229:   ] pop
                    230:   popVariables
1.1       takayama  231: } def
                    232:
                    233:
1.3       takayama  234: /send-page-bye {
1.1       takayama  235:    (HTTP/0.9 200 OK) sendln
                    236: %%   (Date: Sun, 18 Mar 2001 02:54:50 GMT) sendln
                    237: %%   (Server: sm1/0.1 (Unix)) sendln
                    238: %%   (Last-Modified: Wed, 23 Aug 2000 11:19:27 GMT) sendln
                    239: %%   (ETag: "1f8f-5df-39a3b33f") sendln
                    240: %%   (Accept-Ranges: bytes) sendln
                    241: %%   (Content-Length: 10) sendln
                    242:    (Connection: close) sendln
1.3       takayama  243: %   (Content-Type: text/plain) sendln
                    244:    (Content-Type: text/html) sendln
1.1       takayama  245:    0 sendln
1.3       takayama  246:    (<html>) sendln
                    247:    (Shutdown the engine. <br>) sendln
                    248:    (See you! <a href="http://www.openxm.org"> asirweb </a>) sendln
                    249:    (</html>) sendln
1.1       takayama  250:    0 sendln
                    251:    [(flush)] extension
                    252: } def
                    253:
                    254: /send-page-2 {
                    255:    (HTTP/0.9 200 OK) sendln
                    256: %%   (Content-Length: 10) sendln
                    257:    (Connection: close) sendln
                    258:    (Content-Type: text/html) sendln
                    259:    0 sendln
                    260:    (<FORM NAME="myFORM">) sendln
                    261:    (<INPUT TYPE="TEXT" NAME="Num">) sendln
                    262:    (</FORM>) sendln
                    263:    0 sendln
                    264:    [(flush)] extension
                    265: } def
                    266:
                    267: /send-page-3 {
                    268:   /arg1 set
                    269:   [/in-send-page-3 /result] pushVariables
                    270:   [
                    271:    /result arg1 def
                    272:    (HTTP/0.9 200 OK) sendln
                    273:    (Connection: close) sendln
                    274:    (Content-Type: text/html) sendln
                    275:    0 sendln
                    276: %%   (<FORM NAME="myFORM" METHOD="POST">) sendln
                    277:    result sendln
                    278:    (<FORM NAME="myFORM">) sendln
                    279:    (<INPUT TYPE=submit VALUE="submit">) sendln
1.8       takayama  280:    [(<textarea name=) httpd.textarea.name
                    281:     ( rows=10 cols="80" wrap="soft"></textarea>)] cat sendln
1.1       takayama  282:    (</FORM>) sendln
1.3       takayama  283:    send-menu-1
1.1       takayama  284:    0 sendln
                    285:    [(flush)] extension
                    286:   ] pop
                    287:   popVariables
                    288: } def
                    289:
1.11    ! takayama  290: /send-image {
        !           291:   /arg2 set
        !           292:   /arg1 set
        !           293:   [/in-send-jpeg /fname /imagetype /ff /fsize] pushVariables
        !           294:   [
        !           295:      /fname arg1 def % set the jpeg file name.
        !           296:      /imagetype arg2 def %  jpeg or gif
        !           297:     [(stat) fname] extension 0 get tag 0 eq {
        !           298:        (Warning (send-image): the file ) messagen fname messagen ( is not found.) message
        !           299:        /notFound goto
        !           300:     }{  }ifelse
        !           301:     [(stat) fname] extension 1 get 0 get toString /fsize set
        !           302:     (HTTP/1.1 200 OK) dup message sendln
        !           303:     (Server: httpd_sm1) dup message sendln
        !           304:     %% (ETag: "2197-bf6c-3b2d6541") sendln ???
        !           305:     (Accept-Ranges: bytes) dup message sendln
        !           306:     [(Content-Length: ) fsize] cat dup message sendln
        !           307:     (Connection: close) dup message sendln
        !           308:     [(Content-Type: image/) imagetype] cat dup message sendln
        !           309:     [(flush)] extension
        !           310:     0 sendln
        !           311:     fname sendBinaryFile
        !           312:     0 sendln
        !           313:     [(flush)] extension
        !           314:     /notFound
        !           315:   ] pop
        !           316:   popVariables
        !           317: } def
        !           318:
1.3       takayama  319: /httpd.asirman
                    320:  ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/asir2000/html-jp/man_toc.html")
                    321: def
                    322: /httpd.asirman.index
                    323:   ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/doc/asir2000/html-jp/man_262.html#SEC262")
                    324: def
1.4       takayama  325: /httpd.asir.intro
                    326:    ("http://www.math.sci.kobe-u.ac.jp/~taka/asir-book-html/main")
                    327: def
1.3       takayama  328: /send-menu-1 {
                    329:
1.4       takayama  330:   (FILE:) sendln
1.3       takayama  331:   [$<a href="http://localhost:$ httpd.port toString
1.4       takayama  332:    $/?msg=httpdAsirMeta+quit"> Shutdown the asir server. </a>, $
1.3       takayama  333:   ] cat sendln
1.5       takayama  334: %%  [$<a href="http://localhost:$ httpd.port toString
                    335: %%   $/?msg=httpdAsirMeta+interrupt"> interrupt </a>, $
                    336: %%  ] cat sendln
                    337:   [$<a href="http://localhost:$ httpd.port toString
                    338:    $/?msg=httpdAsirMeta+save"> save. </a>, $
                    339:   ] cat sendln
1.4       takayama  340:   ( <spacer type=horizontal size=80> ) sendln
1.3       takayama  341:
1.4       takayama  342:   (HELP:) sendln
1.3       takayama  343:   [(<font color="red">
1.4       takayama  344:     <a href=) httpd.asirman ( > AsirManual (Ja) </a> </font>, )] cat sendln
1.3       takayama  345:   [(<font color="purple">
1.4       takayama  346:     <a href=) httpd.asirman.index ( > Index (Ja) </a> </font>, )] cat sendln
                    347:   [(<font color="blue">
                    348:     <a href=) httpd.asir.intro ( > Intro (Ja) </a> </font>, )] cat sendln
1.3       takayama  349: } def
1.1       takayama  350:
1.5       takayama  351: /send-page-save {
                    352:  [/in-send-page-save /i] pushVariables
                    353:  [
                    354:    (HTTP/0.9 200 OK) sendln
                    355:    (Connection: close) sendln
1.8       takayama  356:    (Content-Type: text/plain) sendln
1.5       takayama  357:    0 sendln
1.8       takayama  358:    (/* Saved the following to sm1out.txt */) sendln
                    359:    (/* Save the following by your browser as a text file. */) sendln
1.5       takayama  360:
                    361:    0 1 httpd.history length 1 sub {
                    362:      /i set
                    363:      httpd.history i get sendln
                    364:    } for
1.8       takayama  365:    ( end$) sendln
1.5       takayama  366:    0 sendln
                    367:    [(flush)] extension
                    368:    [(PrintDollar) 1] system_variable
                    369:    httpd.history output
                    370:    [(PrintDollar) 0] system_variable
                    371:  ] pop
                    372:  popVariables
                    373: } def
                    374:
1.8       takayama  375: /send-page-warning {
                    376:    (HTTP/0.9 200 OK) sendln
                    377:    (Connection: close) sendln
                    378:    (Content-Type: text/html) sendln
                    379:    0 sendln
                    380:    (You cannot execute oxasir without a session key! <br>) sendln
                    381:    0 sendln
                    382:    [(flush)] extension
                    383: } def
1.5       takayama  384:
1.1       takayama  385: /stopclient {
                    386:   [(sm1.socket) (close) [client.fdAndPort 0 get] ] extension message
1.6       takayama  387: } def
                    388:
                    389:
                    390: /cleanErrors {
                    391:   /arg1 set
                    392:   [/in-cleanErrors /clientt /spp] pushVariables
                    393:   [
                    394:     /clientt arg1 def
                    395:     clientt oxgetsp (integer) dc /spp set
                    396:     clientt spp oxpops
                    397:   ] pop
                    398:   popVariables
1.1       takayama  399: } def
                    400:
                    401:
                    402: /fromHex {
                    403:   /arg1 set
                    404:   [/in-fromHex /s1 /s2 /c /c2] pushVariables
                    405:   [
                    406:     arg1 0 get /s1 set
                    407:     arg1 1 get /s2 set
                    408:
                    409:     48 s1 le  s1 57 le and {  % 0, ..., 9
                    410:       s1 48 sub /c set
                    411:     }{ } ifelse
                    412:     65 s1 le  s1 70 le and {  % A, ..., F
                    413:       s1 65 sub 10 add /c set
                    414:     }{ } ifelse
                    415:     97 s1 le  s1 102 le and {  % a, ..., f
                    416:       s1 97 sub 10 add /c set
                    417:     }{ } ifelse
                    418:     c 16 mul /c set
                    419:
                    420:     48 s2 le  s2 57 le and {  % 0, ..., 9
                    421:       s2 48 sub /c2 set
                    422:     }{ } ifelse
                    423:     65 s2 le  s2 70 le and {  % A, ..., F
                    424:       s2 65 sub 10 add /c2 set
                    425:     }{ } ifelse
                    426:     97 s2 le  s2 102 le and {  % a, ..., f
                    427:       s2 97 sub 10 add /c2 set
                    428:     }{ } ifelse
                    429:     c c2 add /arg1 set
                    430:   ] pop
                    431:   popVariables
                    432:   arg1
                    433: } def
                    434:
1.8       takayama  435: /randomName {
                    436:   [/in-randomName /sss /rrr ] pushVariables
                    437:   [
                    438:     %% Seed name
                    439:     /sss [ 97 97 97 97 97 97 97 97 97 97 ] def  %% 97 == 'a'
                    440:     %% This procedure to generate port number might fail.
                    441:     sss {
                    442:       [
                    443:         [(oxGenPass)] extension .. /rrr set
                    444:         [(tdiv_qr) rrr (26)..] mpzext 1 get /rrr set
                    445:       ] pop
                    446:       rrr (integer) dc add
                    447:     } map
                    448:     /sss set
                    449:     sss {(string) dc} map cat /arg1 set
                    450:   ] pop
                    451:   popVariables
                    452:   arg1
                    453: } def
                    454:
                    455: (httpd.textarea.name) boundp { }
                    456:  {
                    457:     /httpd.textarea.name  randomName def
                    458:     /httpd.textarea.name.aaa
                    459:        [(GET /?) httpd.textarea.name] cat
                    460:        (array) dc
                    461:     def
                    462:  } ifelse
                    463:
1.11    ! takayama  464: %% Decompose into tokens separated by a space.
        !           465: %% (GET /hoge.jpeg ???) ---> [(GET) (/hoge.jpeg) (???)]
        !           466: /toTokensBySpace {
        !           467:   /arg1 set
        !           468:   [/in-toTokesBySpace /ss /ss2 /i] pushVariables
        !           469:   [
        !           470:     /ss arg1 def
        !           471:     ss 1 copy /ss set
        !           472:     ss (array) dc /ss2 set
        !           473:     0 1 ss2 length 1 sub {
        !           474:       /i set
        !           475:       ss2 i get 32 eq { %% equal to space
        !           476:         ss i (,) put
        !           477:       } {  } ifelse
        !           478:     } for
        !           479:     ss message
        !           480:     [ ss to_records pop] /arg1 set
        !           481:   ] pop
        !           482:   popVariables
        !           483:   arg1
        !           484: } def
        !           485:
        !           486: /askToSendFile {
        !           487:   /arg1 set
        !           488:   [/in-askToSendFile /ss /fname] pushVariables
        !           489:   [
        !           490:     /ss arg1 def
        !           491:     /fname null def
        !           492:     ss toTokensBySpace /ss set
        !           493:     ss 0 get (GET) eq {
        !           494:       ss 1 get length 1 gt {
        !           495:         ss 1 get (array) dc 1 get 63 eq { %% See if /?
        !           496:           /fname null def
        !           497:         }{
        !           498:           /fname ss 1 get def % set the file name.
        !           499:           fname (array) dc rest /fname set % remove /
        !           500:           fname { (string) dc } map cat /fname set
        !           501:         } ifelse
        !           502:       }{ /fname null def } ifelse
        !           503:     }{
        !           504:       /fname null def
        !           505:     } ifelse
        !           506:     (::::) messagen  ss message fname message
        !           507:     /arg1 fname def
        !           508:   ] pop
        !           509:   popVariables
        !           510:   arg1
        !           511: } def
        !           512:
        !           513:
1.7       takayama  514: %% remove GET /?msg=
1.1       takayama  515: /removeGET {
                    516:   /arg1 set
1.8       takayama  517:   [/in-removeGET /s /s2 /i /j /i0
                    518:    /tname
                    519:   ] pushVariables
1.1       takayama  520:   [
                    521:      /s arg1 def
1.8       takayama  522:      /httpd.textarea.valid 1 def
1.1       takayama  523:      s 1 copy /s2 set
                    524:      s (array) dc /s set
1.7       takayama  525:
1.8       takayama  526:      /tname  [  ] def
1.7       takayama  527:      0 1 s length 1 sub {
                    528:        /i0 set
                    529:        s i0 get 61 eq {  %% 61 is =
                    530:          i0 1 add /i0 set
1.8       takayama  531:          tname message
                    532:          httpd.textarea.name.aaa message
                    533:          tname httpd.textarea.name.aaa eq {
                    534:            /httpd.textarea.valid 1 def
                    535:          } {
                    536:            /httpd.textarea.valid 0 def
                    537:            (Warning: got an invalid name for the text field.) message
                    538:          } ifelse
1.7       takayama  539:          exit
                    540:        } { } ifelse
1.8       takayama  541:        tname s i0 get append /tname set
1.7       takayama  542:      } for
                    543:
1.1       takayama  544:      /j 0 def
1.7       takayama  545:      i0 1 s length 1 sub {
1.1       takayama  546:        /i set
                    547:        s2 j << s i get (string) dc >> put
                    548:        j 1 add /j set
                    549:      } for
                    550:      /arg1 s2 def
                    551:   ] pop
                    552:   arg1
                    553: } def
                    554:
                    555: /webstringToAscii {
                    556:   /arg1 set
                    557:   [/in-webstringToAscii /s /i /j /c /n] pushVariables
                    558:   [
                    559:      /s arg1 def
                    560:      s (array) dc /s set
                    561:      /j 0 def /n s length def
                    562:      /i 0 def
                    563:      {
                    564:        s i get /c set
                    565:        c 32 eq { exit } { } ifelse
                    566:        c 37 eq {  % c == %
                    567:          [s i 1 add get s i 2 add get] fromHex /c set
                    568:          s j c put
                    569:          j 1 add /j set
                    570:          i 3 add /i set
                    571:        } {
                    572:          c 43 eq { % c == +
                    573:            s j 32 put
                    574:            j 1 add /j set
                    575:            i 1 add /i set
                    576:           } {
                    577:             c 13 eq { % c == 0xd
                    578:               i 1 add /i set
                    579:             } {
                    580:               s j c put
                    581:               j 1 add /j set
                    582:               i 1 add /i set
                    583:             } ifelse
                    584:          } ifelse
                    585:        } ifelse
                    586:        i n ge { exit } {  } ifelse
                    587:      } loop
                    588:      s j carN /s set
                    589:      s { (string) dc } map cat /arg1 set
1.9       takayama  590:   ] pop
                    591:   popVariables
                    592:   arg1
                    593: } def
                    594:
                    595: /preformatHTML {
                    596:   /arg1 set
                    597:   [/in-preformatHTML /sss /c] pushVariables
                    598:   [
                    599:      /sss arg1 def
                    600:      sss (array) dc /sss set
                    601:      sss {
                    602:        /c set
                    603:        [
                    604:           c 60 eq {
                    605:             /c (&lt) def
                    606:           } {  } ifelse
                    607:           c 62 eq {
                    608:             /c (&gt) def
                    609:           } {  } ifelse
                    610:           c 38 eq {
                    611:             /c (&amp) def
                    612:           } {  } ifelse
                    613:         ] pop
                    614:         c (string) dc
                    615:      } map cat /sss set
                    616:      [(<pre> ) sss ( </pre> )] cat /arg1 set
1.1       takayama  617:   ] pop
                    618:   popVariables
                    619:   arg1
1.3       takayama  620: } def
                    621:
                    622: /metaCommand {
                    623:   /arg1 set
1.11    ! takayama  624:   [/in-metaCommand /msg /result /msg2 /nn] pushVariables
1.3       takayama  625:   [
                    626:     /msg arg1 def
                    627:     /result 1 def
1.11    ! takayama  628:     msg 1 copy toTokensBySpace /msg2 set
        !           629:     msg2 length 3 eq {
        !           630:       msg2 0 get (httpdAsirMeta) eq
        !           631:       msg2 1 get (Pretty) eq and
        !           632:       {
        !           633:         msg2 2 get . (integer) dc /nn set
        !           634:
        !           635:         %%BUG: This part should be rewritten.
        !           636:         %% Reformat the "nn"-th result by tex and send it.
        !           637:         httpd.result.history nn get message
        !           638:         httpd.image.name httpd.image.type send-image
        !           639:         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        !           640:
        !           641:         /result 0 def
        !           642:       } { } ifelse
        !           643:     }{ } ifelse
1.3       takayama  644:     msg (httpdAsirMeta quit) eq {
1.8       takayama  645:        oxasir.ccc oxshutdown
1.3       takayama  646:        send-page-bye
                    647:        quit
1.5       takayama  648:        /result 0 def
                    649:     } { } ifelse
                    650:     msg (httpdAsirMeta save) eq {
                    651:        send-page-save
                    652:        /result 0 def
                    653:     } { } ifelse
                    654:     msg (httpdAsirMeta interrupt) eq {
                    655:        oxasir.ccc oxreset
                    656:        (Interrupted! <br>) send-page-3
1.3       takayama  657:        /result 0 def
                    658:     } { } ifelse
                    659:     /arg1 result def
                    660:   ] pop
                    661:   popVariables
                    662:   arg1
                    663: } def

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