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