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>