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