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>