Annotation of OpenXM/src/kan96xx/Doc/httpd-asir.sm1, Revision 1.28
1.28 ! takayama 1: %% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-asir.sm1,v 1.27 2005/11/21 09:12:22 takayama Exp $
1.1 takayama 2: %% http server by sm1
1.2 takayama 3:
1.12 takayama 4: [(parse) (httpd.sm1) pushfile] extension pop
5:
1.2 takayama 6: /httpd.port 1200 def
1.11 takayama 7: /httpd.image.name (kobeuniv2.jpg) def
1.8 takayama 8:
1.4 takayama 9: /httpd.initialization
10: %% Put initialization codes here.
11: [
1.17 takayama 12: (XM_debug=0; ctrl("debug_window",0);)
1.5 takayama 13: ("Asirweb version 0.80. "+
1.4 takayama 14: " Risa/Asir oxasir version "+rtostr(version());)
15: ] cat
16: def
1.8 takayama 17:
1.1 takayama 18: [(parse) (oxasir.sm1) pushfile] extension
19: (oxasir.started) boundp {
20: } {
1.6 takayama 21: %% Initialize oxasir.
1.1 takayama 22: [(x^2-1) (x)] fctr pop
1.5 takayama 23: oxasir.ccc oxmathcap
24: oxasir.ccc oxsetmathcap
1.1 takayama 25: } ifelse
26:
1.25 takayama 27: /ox-win.start.iconic 1 def
28: /ox.win.set.start {
29: [(stat) (c:\windows\system32\cmd.exe)] extension 0 get
30: 0 eq {
31: /ox.win.start.0 [(c:\windows\system32\cmd.exe) (/c) (start)] def
32: /ox.win.start [ox.win.start.0 aload pop
33: ox-win.start.iconic { (/min) } { } ifelse ] def
34: }{
35: [(stat) (c:\winnt\system32\cmd.exe)] extension 0 get
36: 0 eq {
37: /ox.win.start.0 [(c:\winnt\system32\cmd.exe) (/c) (start) ] def
38: /ox.win.start [ox.win.start.0 aload pop
39: ox-win.start.iconic { (/min) } { } ifelse ] def
40: }{
41: /ox.win.start.0 [ (start) ] def
42: /ox.win.start [ ox.win.start.0 aload pop
43: ox-win.start.iconic { (/min) } { } ifelse ] def
44: } ifelse
45: } ifelse
46: } def
47:
1.12 takayama 48: /webasir { asirweb } def
1.5 takayama 49: /asirweb {
1.26 takayama 50: [/rrr /cmd] pushVariables
1.7 takayama 51: [
52: %% This procedure to generate port number might fail.
53: [(oxGenPass)] extension . (integer) dc /rrr set
54: rrr << rrr 20000 idiv 20000 mul >> sub /rrr set
55: /httpd.port 1200 rrr add def
56: httpd.port message
57:
1.18 takayama 58: %%[(sleep 3; netscape -geometry 800x500 http://localhost:)
59: %% httpd.port toString
60: %% ( &)] cat system
61: [(ostype)] extension 0 get
62: (windows) eq {
63: %% On windows.
1.25 takayama 64: ox.win.set.start
1.18 takayama 65: [(forkExec)
66: [
1.19 takayama 67: %%(c:\windows\command\start)
1.20 takayama 68: ox.win.start.0 aload pop
1.18 takayama 69: (iexplore) %% Starting internet explorer (TM).
70: [(http://localhost:) httpd.port toString] cat
71: ]
72: [ ]
73: 3] extension
74: }{
75: %% On unix.
1.26 takayama 76: httpd.port httpd.startBrowserUnix
1.18 takayama 77: } ifelse
78:
1.5 takayama 79: httpd ;
1.7 takayama 80: ] pop
81: popVariables
1.5 takayama 82: } def
83:
1.1 takayama 84:
1.2 takayama 85: /httpd_action {
1.5 takayama 86: [/in-httpd /ff /httpd.com /httpd.result /sss
1.6 takayama 87: /sss.engine /sss.web /err
1.13 takayama 88: /oxserver.vname
1.3 takayama 89: ] pushVariables
1.2 takayama 90: [
1.1 takayama 91: {
1.5 takayama 92: [(sm1.socket) (select) [httpd.server.fd 0 get -1]] extension
93: %% wait for ever
1.22 takayama 94: [(sm1.socket) (readHTTP) [httpd.server.fd 0 get ]] extension /ff set
1.23 takayama 95: ff tag 0 eq {
96: (connection is closed.) message exit
1.1 takayama 97: }
1.4 takayama 98: {
1.1 takayama 99: (------------ start ----------------------) message
100: ff message
101: (-----------------------------------------) message
1.11 takayama 102: ff 1 copy askToSendFile /httpd.sendFile set
103: httpd.sendFile tag 0 eq {
104: ff removeGET webstringToAscii /httpd.com set
105: } {
106: /httpd.com (NONE) def
107: } ifelse
108: [(httpd.com=) httpd.com] cat message
109: (httpd.sendFile=) messagen httpd.sendFile message
1.1 takayama 110: (------------ end ----------------------) message
111: ( ) message
1.4 takayama 112: httpd.serial 0 eq {
113: /httpd.com httpd.initialization def
1.24 takayama 114: /httpd.textarea.valid 1 def
1.4 takayama 115: } { } ifelse
1.11 takayama 116: httpd.sendFile tag 0 eq { }
117: {
118: httpd.sendFile httpd.image.type send-image
119: exit %% exit the loop LOOP-A
120: } ifelse
1.3 takayama 121: httpd.com metaCommand {
1.8 takayama 122: httpd.textarea.valid {
1.13 takayama 123: /oxserver.vname
124: [Oxserver_history_variable httpd.serial toString] cat
125: def
1.8 takayama 126: oxasir.ccc
1.14 takayama 127: [(if (1) {) httpd.com (; };)] cat
1.8 takayama 128: oxexecutestring ;
129: }{
130: send-page-warning exit
131: } ifelse
1.6 takayama 132: [(oxReq) oxasir.ccc SM_dupErrors ] extension pop
1.5 takayama 133:
1.6 takayama 134: [(oxReq) oxasir.ccc SM_popCMO ] extension pop
1.14 takayama 135:
136: [(oxReq) oxasir.ccc SM_setName oxserver.vname] extension pop
137: oxasir.ccc [oxserver.vname (;)] cat oxexecutestring
138:
1.5 takayama 139: [(oxReq) oxasir.ccc SM_popString ] extension pop
140: [(flush)] extension pop
141: %% Select inputs for interruption.
142: %% Wait by the spin lock.
143: {
144: [(oxMultiSelect) [oxasir.ccc] 1] extension 1 get 0 get
145: /sss.engine set
146: [(sm1.socket) (mselect)
147: [[httpd.server.fd 0 get] 1]
148: ] extension 0 get /sss.web set
149: /sss [sss.engine sss.web] def
150: sss.engine { exit } { } ifelse
151: sss.web { exit } { } ifelse
152: } loop
153: sss message
154:
155: sss 0 get {
1.6 takayama 156: [(oxGet) oxasir.ccc] extension /err set
1.5 takayama 157: [(oxGet) oxasir.ccc] extension /httpd.result set
158: %% oxasir.ccc oxpopstring /httpd.result set
159: } {
160: oxasir.ccc oxreset
161: oxasir.ccc ("computation is interrupted.";) oxexecutestring ;
162: oxasir.ccc oxpopstring
163: /httpd.result set
164: exit
165: } ifelse
1.3 takayama 166: (------------- result -------------) message
167: httpd.result message
168: (----------------------------------) message
169: ( ) message
1.6 takayama 170:
171: err message
172: err [ ] eq {
173: /httpd.history
174: httpd.history
175: [10 (string) dc
176: (/**** ) httpd.serial toString ( ****/)
177: 10 (string) dc
178: httpd.com
1.8 takayama 179: (;) %% add extra ;
1.6 takayama 180: ] cat
181: append
182: def
183: } {
184: oxasir.ccc cleanErrors
185: [httpd.result 10 (string) dc err toString] cat
186: /httpd.result set
187: } ifelse
188:
1.4 takayama 189: [httpd.serial 0 eq { } {
190: (<title> asirweb </title> )
191: (<font color="blue"> Input-) httpd.serial toString
192: (: </font> )
1.9 takayama 193: httpd.com preformatHTML (<br>)
1.4 takayama 194: } ifelse
1.3 takayama 195: (<font color="green"> Output-) httpd.serial toString
196: (: </font> )
1.11 takayama 197: (<a href="http://localhost:) httpd.port toString
198: (/?msg=httpdAsirMeta+Pretty+) httpd.serial toString
199: ("> (in pretty format) </a>)
200: %%(<a href=") httpd.image.name ("> (in pretty format) </a>) %%test
1.9 takayama 201: httpd.result preformatHTML
1.11 takayama 202: httpd.result.history httpd.result append /httpd.result.history set
1.3 takayama 203: ] cat
1.11 takayama 204: send-page-3 exit %% exit the loop LOOP-A
1.5 takayama 205: } { exit } ifelse %% metaCommand
1.1 takayama 206: } ifelse
1.11 takayama 207: } loop %% LOOP-A
1.2 takayama 208: ] pop
209: popVariables
1.1 takayama 210: } def
211:
212:
1.11 takayama 213:
1.3 takayama 214: /httpd.asirman
1.25 takayama 215: ("http://www.math.sci.kobe-u.ac.jp/OpenXM/Current/doc/asir2000/html-jp/man_toc.html")
1.3 takayama 216: def
1.25 takayama 217: /httpd.asirman.contrib
1.28 ! takayama 218: ("http://www.math.sci.kobe-u.ac.jp/OpenXM/Current/doc/asir-contrib/ja/cman-html/cman-ja_toc.html")
1.3 takayama 219: def
1.4 takayama 220: /httpd.asir.intro
221: ("http://www.math.sci.kobe-u.ac.jp/~taka/asir-book-html/main")
222: def
1.3 takayama 223: /send-menu-1 {
224:
1.4 takayama 225: (FILE:) sendln
1.3 takayama 226: [$<a href="http://localhost:$ httpd.port toString
1.4 takayama 227: $/?msg=httpdAsirMeta+quit"> Shutdown the asir server. </a>, $
1.3 takayama 228: ] cat sendln
1.5 takayama 229: %% [$<a href="http://localhost:$ httpd.port toString
230: %% $/?msg=httpdAsirMeta+interrupt"> interrupt </a>, $
231: %% ] cat sendln
232: [$<a href="http://localhost:$ httpd.port toString
233: $/?msg=httpdAsirMeta+save"> save. </a>, $
234: ] cat sendln
1.4 takayama 235: ( <spacer type=horizontal size=80> ) sendln
1.3 takayama 236:
1.4 takayama 237: (HELP:) sendln
1.3 takayama 238: [(<font color="red">
1.4 takayama 239: <a href=) httpd.asirman ( > AsirManual (Ja) </a> </font>, )] cat sendln
1.3 takayama 240: [(<font color="purple">
1.25 takayama 241: <a href=) httpd.asirman.contrib ( > AsirContrib (Ja) </a> </font>, )] cat sendln
1.4 takayama 242: [(<font color="blue">
243: <a href=) httpd.asir.intro ( > Intro (Ja) </a> </font>, )] cat sendln
1.3 takayama 244: } def
1.1 takayama 245:
1.5 takayama 246: /send-page-save {
247: [/in-send-page-save /i] pushVariables
248: [
249: (HTTP/0.9 200 OK) sendln
250: (Connection: close) sendln
1.8 takayama 251: (Content-Type: text/plain) sendln
1.5 takayama 252: 0 sendln
1.8 takayama 253: (/* Saved the following to sm1out.txt */) sendln
254: (/* Save the following by your browser as a text file. */) sendln
1.5 takayama 255:
256: 0 1 httpd.history length 1 sub {
257: /i set
258: httpd.history i get sendln
259: } for
1.8 takayama 260: ( end$) sendln
1.5 takayama 261: 0 sendln
262: [(flush)] extension
263: [(PrintDollar) 1] system_variable
264: httpd.history output
265: [(PrintDollar) 0] system_variable
266: ] pop
267: popVariables
268: } def
269:
1.3 takayama 270:
271: /metaCommand {
272: /arg1 set
1.14 takayama 273: [/in-metaCommand /msg /result /msg2 /nn
274: /err /fn
275: ] pushVariables
1.3 takayama 276: [
277: /msg arg1 def
278: /result 1 def
1.11 takayama 279: msg 1 copy toTokensBySpace /msg2 set
280: msg2 length 3 eq {
281: msg2 0 get (httpdAsirMeta) eq
282: msg2 1 get (Pretty) eq and
283: {
1.27 takayama 284: httpd.image.type tag 0 eq {
1.16 takayama 285: send-page-warning-image
286: /skip-image goto
287: } { } ifelse
288:
289:
1.11 takayama 290: msg2 2 get . (integer) dc /nn set
291:
292: %% Reformat the "nn"-th result by tex and send it.
1.14 takayama 293: %% BUG: index is out of bound. httpd.result.history nn get message
294:
295: oxasir.ccc
1.15 takayama 296: [$print_$ httpd.image.type $_form(Oxserver_history_variable_$
1.14 takayama 297: nn toString
298: $);$
299: ] cat
300: (cmo)
301: executeStringAndSelectInputFromBrowserAndOxserver
302: dup 0 get /err set
303: 1 get /fn set
304: err [ ] eq {
1.15 takayama 305: fn 0 get httpd.image.type send-image
1.14 takayama 306: } {
307: [err preformatHTML] cat
308: send-page-3
309: } ifelse
1.11 takayama 310: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
311:
1.16 takayama 312: /skip-image
1.11 takayama 313: /result 0 def
314: } { } ifelse
315: }{ } ifelse
1.3 takayama 316: msg (httpdAsirMeta quit) eq {
1.8 takayama 317: oxasir.ccc oxshutdown
1.3 takayama 318: send-page-bye
319: quit
1.5 takayama 320: /result 0 def
321: } { } ifelse
322: msg (httpdAsirMeta save) eq {
323: send-page-save
324: /result 0 def
325: } { } ifelse
326: msg (httpdAsirMeta interrupt) eq {
327: oxasir.ccc oxreset
328: (Interrupted! <br>) send-page-3
1.3 takayama 329: /result 0 def
330: } { } ifelse
331: /arg1 result def
332: ] pop
333: popVariables
334: arg1
335: } def
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>