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