Annotation of OpenXM/src/asir-doc/parts/process.texi, Revision 1.5
1.5 ! noro 1: @comment $OpenXM: OpenXM/src/asir-doc/parts/process.texi,v 1.4 2000/01/13 08:29:56 noro Exp $
1.2 noro 2: \BJP
1.1 noro 3: @node $BJ,;67W;;(B,,, Top
4: @chapter $BJ,;67W;;(B
1.2 noro 5: \E
6: \BEG
7: @node Distributed computation,,, Top
8: @chapter Distributed computation
9: \E
1.1 noro 10:
11: @menu
12: * OpenXM::
13: * Mathcap::
1.2 noro 14: \BJP
1.1 noro 15: * $B%9%?%C%/%^%7%s%3%^%s%I(B::
16: * $B%G%P%C%0(B::
17: * $BJ,;67W;;$K4X$9$k4X?t(B::
1.2 noro 18: \E
19: \BEG
20: * Stackmachine commands::
21: * Debugging::
22: * Functions for distributed computation::
23: \E
1.1 noro 24: @end menu
25:
1.2 noro 26: \JP @node OpenXM,,, $BJ,;67W;;(B
27: \EG @node OpenXM,,, Distributed computation
1.1 noro 28: @section OpenXM
29:
1.2 noro 30: \BJP
31: @b{Asir} $B$O(B, $BJ,;67W;;$K$*$1$kDL?.%W%m%H%3%k$H$7$F(B, @b{OpenXM}
1.1 noro 32: (Open message eXchange protocol for Mathematics) $B$r:NMQ$7$F$$$k(B.
1.2 noro 33: @b{OpenXM} $B$O(B, $B<g$H$7$F?t3X%*%V%8%'%/%H$r%W%m%;%94V$G$d$j$H$j$9$k(B
34: $B$?$a$N5,Ls$G$"$k(B. @b{OpenXM} $B$K$*$$$F$O(B
35: \E
36: \BEG
1.3 noro 37: On @b{Asir} distributed computations are done under @b{OpenXM}
1.2 noro 38: (Open message eXchange protocol for Mathematics), which
39: is a protocol for exchanging mainly mathematical objects
40: between processes.
41: In @b{OpenXM} a distributed computation is done as follows:
42: \E
1.1 noro 43:
44: @enumerate
1.2 noro 45: \BJP
1.1 noro 46: @item client $B$,(B server $B$KBP$7$F7W;;<B9T0MMj$N%a%C%;!<%8$rAw$k(B.
47: @item server $B$,7W;;$r<B9T$9$k(B.
48: @item client $B$,(B server $B$K7k2LAwIU0MMj$N%a%C%;!<%8$rAw$k(B.
49: @item server $B$O7k2L$rJV$7(B, client $B$O7k2L$r<u$1<h$k(B
1.2 noro 50: \E
51: \BEG
52: @item A client requests something to a server.
53: @item The server does works according to the request.
54: @item The client requests to send data to the server.
55: @item The server sends the data to the client and the client gets the data.
56: \E
1.1 noro 57: @end enumerate
58:
1.2 noro 59: \BJP
1.1 noro 60: $B$H$$$&7A$GJ,;67W;;$,9T$o$l$k(B. server $B$O%9%?%C%/%^%7%s$G$"$k(B. $B$9$J$o$A(B,
61: client $B$+$iAw$i$l$?%G!<%?%*%V%8%'%/%H$O(B, $B;XDj$,$J$$8B$j(B server $B$N%9%?%C(B
62: $B%/$K@Q$^$l(B, $B%3%^%s%I$,Aw$i$l$?;~$K(B, $BI,MW$J$@$1%9%?%C%/$+$i%G!<%?$r<h$j=P(B
63: $B$7$F(B, $B4X?t8F$S=P$7$N0z?t$H$9$k(B.
1.2 noro 64: \E
65: \BEG
66: The server is a stack machine. That is data objects sent by the client
67: are pushed to the stack of the server.
68: If the server gets a command, then the data are
69: popped form the stack and they are used as arguments of a function call.
70: \E
1.1 noro 71:
1.2 noro 72: \BJP
73: @b{OpenXM} $B$K$*$$$FFCD'E*$J$3$H$O(B, $B7W;;7k2L$OC1$K(B server $B$N%9%?%C%/$K(B
1.1 noro 74: $B@Q$^$l$k$@$1$G(B, client $B$+$i$N0MMj$,$J$$8B$j(B, $BDL?.O)$K%G!<%?$ON.$l$J$$(B
75: $B$H$$$&E@$G$"$k(B.
1.2 noro 76: \E
1.1 noro 77:
1.2 noro 78: \BEG
79: In @b{OpenXM}, the result of a computation done in the server
80: is simply pushed to the stack and the data is not written to
81: the communication stream without requests from the client.
82: \E
83:
84: \BJP
1.1 noro 85: $B%W%m%H%3%k$K$O(B, $B%*%V%8%'%/%H$N6&DL%U%)!<%^%C%H$r5,Dj(B
86: $B$9$k(B @b{CMO} (Common Mathematical Object format), $B%W%m%;%9$KBP$9$k(B
87: $BF0:n$r;XDj$9$k(B @b{SM} (Stack Machine command) $B$,4^$^$l$k(B.
1.2 noro 88: $B$3$l$i$O(B, $B%G!<%?$rAw$k:]$K(B, $B%G!<%?$N<oN`$r;XDj$9$k(B
1.1 noro 89: $B$?$a$N(B @b{OX} expression $B$H$7$F%i%C%T%s%0$5$l$k(B.
90:
1.2 noro 91: @b{OpenXM} $B$K$h$kJ,;67W;;$r9T$&>l9g$K$O(B,
1.1 noro 92: $B$^$:(B, server $B$rN)$A>e$2$F(B, $BDL?.$r@.N)$5$;$kI,MW$,$"$k(B. $B$3$N$?$a$K(B,
93: @code{ox_launch()}, @code{ox_launch_nox()}, @code{ox_launch_generic()}
94: $B$J$I$N4X?t$,MQ0U$5$l$F$$$k(B. $B$5$i$K(B, $BDL?.$N@.N)$7$?(B server $B$KBP$7$F(B
95: $B0J2<$N$h$&$JA`:n$,4X?t$H$7$FMQ0U$5$l$F$$$k(B.
1.2 noro 96: \E
97:
98: \BEG
99: @b{OpenXM} protocol consists of two components:
100: @b{CMO} (Common Mathematical Object format) which determines
101: a common format of data representations and
102: @b{SM} (StackMachine command) which specifies actions on servers.
103: These are wrapped as @b{OX} expressions to indicate the sort of
104: data when they are sent.
105:
106: To execute a distributed computation by @b{OpenXM},
107: one has to invoke @b{OpenXM} servers and to establish communications
108: between the client and the servers.
109: @code{ox_launch()}, @code{ox_launch_nox()}, @code{ox_launch_generic()}
110: are preprared for such purposes. Furthermore the following functions
111: are available.
112: \E
1.1 noro 113:
114: @table @code
115: @item @code{ox_push_cmo()}
116:
1.2 noro 117: \JP $B%G!<%?$r(B server $B$N%9%?%C%/$K@Q$`(B
1.3 noro 118: \EG It requests a server to push an object to the stack of a server.
1.1 noro 119:
120: @item @code{ox_pop_cmo()}
1.2 noro 121: \JP $B%G!<%?$r(B server $B$N%9%?%C%/$+$i<h$j=P$9(B.
1.3 noro 122: \EG It request a server to pop an object from the stack of a server.
1.1 noro 123:
124: @item @code{ox_cmo_rpc()}
125:
1.2 noro 126: \JP server $B$N4X?t$r8F$S=P$7(B, $B7k2L$r%9%?%C%/$K@Q$`(B.
127: \BEG
128: It requests to execute a function on a server.
129: The result is pushed to the stack of the server.
130: \E
1.1 noro 131:
132: @item @code{ox_execute_string()}
133:
1.2 noro 134: \BJP
1.1 noro 135: server $B8GM-$N%f!<%68@8l(B (@b{Asir} $B$J$i(B Asir $B8@8l(B) $B$G=q$+$l$?J8;zNs$r(B
136: server $B$,<B9T$7(B, $B7k2L$r%9%?%C%/$K@Q$`(B.
1.2 noro 137: \E
138: \BEG
139: It requests a server to parse and execute a string
140: by the parser and the evaluater of the server.
141: The result is pushed to the stack of the server.
142: \E
1.1 noro 143:
144: @item @code{ox_push_cmd()}
145:
1.2 noro 146: \JP @b{SM} $B%3%^%s%I$NAw?.(B.
147: \EG It requests a server to execute a command.
1.1 noro 148:
149: @item @code{ox_get()}
150:
1.2 noro 151: \JP $B4{$KDL?.O)$K$"$k%G!<%?$N<h$j=P$7(B.
152: \EG It gets an object from a data stream.
1.1 noro 153: @end table
154:
1.2 noro 155: \JP @node Mathcap,,, $BJ,;67W;;(B
156: \EG @node Mathcap,,, Distributed computation
1.1 noro 157: @section Mathcap
158:
1.2 noro 159: \BJP
160: server, client $B$H$b$K(B, @b{OpenXM} $B$G5,Dj$5$l$F$$$kA4$F$N(B@b{CMO} $B%U%)!<(B
1.1 noro 161: $B%^%C%H(B, @b{SM} $B%3%^%s%I$r<BAu$7$F$$$k$H$O8B$i$J$$(B. $BAj<j$NCN$i$J$$%G!<%?(B,
1.2 noro 162: $B%3%^%s%I$rAw$C$?>l9g(B, $B8=>u$G$O7k2L$OM=A[$G$-$J$$(B. $B$3$N$?$a(B, @b{OpenXM}
1.1 noro 163: $B$G$O(B, $B$"$i$+$8$a8_$$$N%5%]!<%H$9$k(B @b{CMO}, @b{SM} $B$N%j%9%H$r8r49$7$"$C$F(B,
164: $BAj<j$NCN$i$J$$%G!<%?$rAw$i$J$$$h$&$K$9$k;EAH$_$rDs>'$7$F$$$k(B. $B$3$N$?$a$N(B
165: $B%G!<%?$,(B Mathcap $B$G$"$k(B. Mathcap $B$O(B @b{CMO} $B$H$7$F$O%j%9%H$G$"$j(B, $B$=$N(B
166: $BMWAG$O(B 32 bit $B@0?t$^$?$OJ8;zNs$G$"$k(B. $B8=:_$N5,Dj$G$O(B, Mathcap $B$O(B
167: $BD9$5$,(B 3 $B$N%j%9%H$G(B,
168:
1.2 noro 169: [[version $BHV9f(B, server $BL>(B],@b{SM}taglist,[[@b{OX}tag,@b{CMO}taglist],
170: [@b{OX}tag,@b{CMO}taglist],...]]
1.1 noro 171:
1.2 noro 172: $B$H$$$&7A$r$7$F$$$k(B. [@b{OX}tag,@b{CMO}taglist] $B$O(B,
1.1 noro 173: @b{OX}tag $B$G<($5$l$k%+%F%4%j$N%G!<%?$KBP$7$F(B, $B$I$N$h$&$J(B @b{CMO} $B$,;HMQ2D(B
174: $BG=$+$r<($9$b$N$G$"$k(B. $B$3$N;XDj$rJ#?t5v$9$3$H$K$h$j(B, $BNc$($P(B
175: @samp{ox_asir} $B$N$h$&$K(B, @b{CMO} $B%G!<%?0J30$K(B, @b{Asir} $B8GM-$N%G!<%?7A<0(B
176: $B$K$h$j(B, @b{CMO}$B$h$jB?$/$N<oN`$N%G!<%?Aw<u?.$r9T$($k$3$H$r<($;$k(B.
177:
178: $B%G!<%?Aw?.$N:]$K(B, $BAj<j%W%m%;%9$N(B Mathcap $B$,4{$KEPO?$5$l$F$$$k>l9g(B,
179: Mathcap $B$K$h$k%A%'%C%/$r9T$&$+H]$+$O(B,
180: @code{ctrl} $B%3%^%s%I$N(B @code{"ox_check"} $B%9%$%C%A$K$h$j7h$^$k(B.
181: $B$3$N%9%$%C%A$N=i4|CM$O(B 1 $B$G(B, $B%A%'%C%/$r9T$&$3$H$r0UL#$9$k(B.
182: @code{ctrl("ox_check",0)} $B$K$h$j%A%'%C%/$r9T$o$J$$$h$&$K$G$-$k(B.
1.2 noro 183: \E
184: \BEG
185: A server or a client does not necessarily implement full specifications
186: of @b{OpenXM}. If a program sends data unknown to its peer, an unrecoverable
187: error may occur. To avoid such a case @b{OpenXM} provides a scheme not
188: to send data unknown to peers. It is realized by exchanging the list of
189: supported @b{CMO} and @b{SM}. The list is called mathcap.
190: Mathcap is also defined as a @b{CMO} and the elements are 32bit integers
191: or strings.
192: The format of mathcap is as follows.
193:
1.3 noro 194: [[version number, server name],@b{SM}taglist,
195: [[@b{OX}tag,@b{CMO}taglist],[@b{OX}tag,@b{CMO}taglist],...]]
1.2 noro 196:
197: [@b{OX}tag,@b{CMO}taglist] indicates that available object tags for
198: a category of data specified by @b{OX}tag.
199: For example @samp{ox_asir} accepts the local object format used by @b{Asir}
200: and the mathcap from @samp{ox_asir} reflects the fact.
201:
202: If @code{"ox_check"} switch of @code{ctrl} is set to 1,
203: the check by a mathcap is done before data is sent.
204: If @code{"ox_check"} switch of @code{ctrl} is set to 0,
205: the check is not done.
206: By default it is set to 1.
207: \E
1.1 noro 208:
1.2 noro 209: \BJP
1.1 noro 210: @node $B%9%?%C%/%^%7%s%3%^%s%I(B,,, $BJ,;67W;;(B
211: @section $B%9%?%C%/%^%7%s%3%^%s%I(B
1.2 noro 212: \E
213: \BEG
214: @node Stackmachine commands,,, Distributed computation
215: @section Stackmachine commands
216: \E
1.1 noro 217:
1.2 noro 218: \BJP
1.1 noro 219: $B%9%?%C%/%^%7%s%3%^%s%I$O(B, $B%9%?%C%/%^%7%s$G$"$k(B server $B$K2?$i$+$NA`:n$r9T(B
220: $B$o$;$k$?$a$KMQ0U$5$l$F$$$k(B. $B$$$/$D$+$N%3%^%s%I$O(B, $B$h$/MQ$$$i$l$k7A$G(B, $BB>(B
1.2 noro 221: $B$N%3%^%s%I(B, $B%G!<%?$H$H$b$K(B, @b{Asir} $B$NAH$_9~$_4X?t$K$h$jAw$i$l$k$,(B, $B%f!<(B
1.1 noro 222: $B%6$,L@<(E*$K$"$k%3%^%s%I$rAw$kI,MW$,$7$P$7$P@8$:$k(B. $B%9%?%C%/%^%7%s%3%^%s(B
223: $B%I$O(B 32 bit $B0J2<$N@0?t$G$"$j(B, @code{ox_push_cmd()} $B%3%^%s%I$GAw?.$G$-$k(B.
224: $B0J2<$G(B, $BBeI=E*$J%9%?%C%/%^%7%s%3%^%s%I$K$D$$$F2r@b$9$k(B. @b{SM_xxx=yyy}
225: $B$G(B, @b{SM_xxx} $B$,(B mnemonic, @b{yyy} $B$,CM$G$"$k(B.
226:
227: $B0J2<$G(B, $B%9%?%C%/$+$i%G!<%?$r<h$j=P$9$H$O(B, $B%9%?%C%/$N0lHV>e$+$i%G!<%?$r(B
228: $B<h$j=|$/$3$H$r8@$&(B.
1.2 noro 229: \E
230:
231: \BEG
232: The stackmachine commands are provided to request a server to execute
233: various operations.
234: They are automatically sent by built-in functions of @b{Asir},
235: but one often has to send them manually. They are represented by
236: 32bit integers. One can send them by calling @code{ox_push_cmd()}.
237: Typical stackmachine commands are as follows.
238: @b{SM_xxx=yyy} means that @b{SM_xxx} is a mnemonic and that
239: @b{yyy} is its value.
240: \E
1.1 noro 241:
242: @table @b
243: @item SM_popSerializedLocalObject=258
244:
1.2 noro 245: \BJP
1.1 noro 246: server $B$,(B @samp{ox_asir} $B$N>l9g$K(B, $BI,$:$7$b(B @b{CMO} $B$GDj5A$5$l$F$$$J$$(B
1.2 noro 247: $B%*%V%8%'%/%H$r%9%?%C%/$+$i<h$j=P$7(B, $BDL?.O)$KN.$9(B.
248: \E
249: \BEG
250: An object not necessarily defined as @b{CMO} is popped from the stack
251: and is sent to the client. This is available only on @samp{ox_asir}.
252: \E
1.1 noro 253:
254: @item SM_popCMO=262
255:
1.2 noro 256: \JP @b{CMO} $B%*%V%8%'%/%H$r%9%?%C%/$+$i<h$j=P$7(B, $BDL?.O)$KN.$9(B.
257: \EG A @b{CMO} object is popped from the stack and is sent to the client.
1.1 noro 258:
259: @item SM_popString=263
260:
1.2 noro 261: \JP $B%9%?%C%/$+$i%G!<%?$r<h$j=P$7(B, $B2DFI7A<0$NJ8;zNs$KJQ49$7$FDL?.O)$KN.$9(B.
262: \EG An object is popped from the stack and is sent to the client as a readable string.
1.1 noro 263:
264: @item SM_mathcap=264
265:
1.2 noro 266: \JP server $B$N(B mathcap $B$r%9%?%C%/$K@Q$`(B.
267: \EG The server's mathcap is pushed to the stack.
1.1 noro 268:
269: @item SM_pops=265
270:
1.2 noro 271: \BJP
1.1 noro 272: $B%9%?%C%/$+$i<h$j=P$7$?%G!<%?$r8D?t$H$7$F(B, $B$=$N8D?tJ,%9%?%C%/$+$i(B
273: $B%G!<%?$r<h$j=|$/(B.
1.2 noro 274: \E
275: \BEG
276: Objects are removed from the stack. The number of object to be removed
277: is specified by the object at the top of the stack.
278: \E
1.1 noro 279:
280: @item SM_setName=266
281:
1.2 noro 282: \BJP
1.1 noro 283: $B%9%?%C%/$+$i%G!<%?$rJQ?tL>$H$7$F<h$j=P$7(B, $B<!$K<h$j=P$7$?%G!<%?$r$=$N(B
284: $BJQ?t$K3d$jEv$F$k(B. $B$3$N3d$jEv$F$O(B, server $B8GM-$N=hM}$H$7$F9T$o$l$k(B.
1.2 noro 285: \E
286: \BEG
287: A variable name is popped form the stack. Then an object is
288: popped and it is assigned to the variable. This assignment is done
289: by the local language of the server.
290: \E
1.1 noro 291:
292: @item SM_evalName=267
293:
1.2 noro 294: \JP $B%9%?%C%/$+$i<h$j=P$7$?%G!<%?$rJQ?tL>$H$7$F(B, $B$=$NCM$r%9%?%C%/$K:\$;$k(B.
295: \BEG
296: A variable name is popped from the stack.
297: Then the value of the variable is pushed to the stack.
298: \E
1.1 noro 299:
300: @item SM_executeStringByLocalParser=268
301:
1.2 noro 302: \BJP
1.1 noro 303: $B%9%?%C%/$+$i<h$j=P$7$?%G!<%?$r(B, server $B8GM-$N(B parser, evaluator $B$G(B
304: $B=hM}$7(B, $B7k2L$r%9%?%C%/$K:\$;$k(B.
1.2 noro 305: \E
306: \BEG
307: A string popped from the stack is parsed and evaluated.
308: The result is pushed to the stack.
309: \E
1.1 noro 310:
311: @item SM_executeFunction=269
312:
1.2 noro 313: \BJP
1.1 noro 314: $B%9%?%C%/$+$i(B, $B4X?tL>(B, $B0z?t$N8D?t(B, $B8D?tJ,$N0z?t$r<h$j=P$7(B, $B4X?t$r8F$S=P$7(B
315: $B7k2L$r%9%?%C%/$K:\$;$k(B.
1.2 noro 316: \E
317: \BEG
318: A function name, the number of arguments and the arguments are
319: popped from the stack. Then the function is executed and the result
320: is pushed to the stack.
321: \E
1.1 noro 322:
323: @item SM_beginBlock=270
1.2 noro 324: \JP $B%G!<%?%V%m%C%/$N$O$8$^$j(B.
325: \EG It indicates the beginning of a block.
1.1 noro 326:
327: @item SM_endBlock=271
1.2 noro 328: \JP $B%G!<%?%V%m%C%/$N=*$j(B.
329: \EG It indicates the end of a block.
1.1 noro 330:
331: @item SM_shutdown=272
332:
1.2 noro 333: \JP server $B$H$N8r?.$r@ZCG$7(B, server $B$r=*N;$5$;$k(B.
334: \EG It shuts down communications and terminates servers.
1.1 noro 335:
336: @item SM_setMathcap=273
337:
1.2 noro 338: \JP $B%9%?%C%/$N%G!<%?$r(B client $B$N(B mathcap $B$H$7$F(B, server $B$KEPO?$rMW5a$9$k(B.
339: \BEG
340: It requests a server to register the data at the top of the stack
341: as the client's mathcap.
342: \E
1.1 noro 343:
344: @item SM_getsp=275
345:
1.2 noro 346: \JP $B8=:_%9%?%C%/$K@Q$^$l$F$$$k%G!<%?$N?t$r%9%?%C%/$K:\$;$k(B.
347: \EG The number of objects in the current stack is pushed to the stack.
1.1 noro 348:
349: @item SM_dupErrors=276
350:
1.2 noro 351: \BJP
1.1 noro 352: $B8=:_%9%?%C%/$K@Q$^$l$F$$$k%*%V%8%'%/%H$NFb(B, $B%(%i!<%*%V%8%'%/%H$N$_(B
353: $B$r%j%9%H$K$7$F(B, $B%9%?%C%/$K:\$;$k(B.
1.2 noro 354: \E
355: \BEG
356: The list of all the error objects in the current stack is pushed to
357: the stack.
358: \E
1.1 noro 359:
360: @item SM_nop=300
361:
1.2 noro 362: \JP $B$J$K$b$7$J$$(B.
363: \EG Nothing is done.
1.1 noro 364: @end table
365:
1.2 noro 366: \BJP
1.1 noro 367: @node $B%G%P%C%0(B,,, $BJ,;67W;;(B
368: @section $B%G%P%C%0(B
1.2 noro 369: \E
370: \BEG
371: @node Debugging,,, Distributed computation
372: @section Debugging
373: \E
1.1 noro 374:
1.2 noro 375: \BJP
1.1 noro 376: $BJ,;67W;;$K$*$$$F$O(B, $B0lHL$K%G%P%C%0$,:$Fq$H$J$k(B. @samp{ox_asir} $B$K(B
377: $B$*$$$F$O(B, $B%G%P%C%0$N$?$a$N$$$/$D$+$N5!G=$rDs6!$7$F$$$k(B.
1.2 noro 378: \E
379: \BEG
380: In general, it is difficult to debug distributed computations.
381: @samp{ox_asir} provides several functions for debugging.
382: \E
1.1 noro 383:
384: @menu
1.2 noro 385: \BJP
1.1 noro 386: * $B%(%i!<%*%V%8%'%/%H(B::
387: * $B%j%;%C%H(B::
388: * $B%G%P%C%0MQ%]%C%W%"%C%W%&%#%s%I%&(B::
1.2 noro 389: \E
390: \BEG
391: * Error object::
392: * Resetting a server::
393: * Pop-up command window for debugging::
394: \E
1.1 noro 395: @end menu
396:
1.2 noro 397: \BJP
1.1 noro 398: @node $B%(%i!<%*%V%8%'%/%H(B,,, $B%G%P%C%0(B
399: @subsection $B%(%i!<%*%V%8%'%/%H(B
1.2 noro 400: \E
401: \BEG
402: @node Error object,,, Debugging
403: @subsection Error object
404: \E
1.1 noro 405:
1.2 noro 406: \BJP
407: @b{OpenXM} server $B$,<B9TCf$K%(%i!<$r5/$3$7$?>l9g(B, $B7k2L$N$+$o$j$K(B
1.1 noro 408: @b{CMO} $B%(%i!<%*%V%8%'%/%H$r%9%?%C%/$K@Q$`(B. $B%(%i!<%*%V%8%'%/%H$O(B, $BBP1~$9$k(B
409: @b{SM} $B%3%^%s%I$N%7%j%"%kHV9f$H(B, $B%(%i!<%a%C%;!<%8$+$i$J$j(B, $B$=$l$K$h$C$F(B
410: $B$I$N(B @b{SM} $B%3%^%s%I$,$I$N$h$&$J%(%i!<$r5/$3$7$?$,$"$kDxEYH=L@$9$k(B.
1.2 noro 411: \E
412: \BEG
413: When an error has occurred on an @b{OpenXM} server,
414: an error object is pushed to the stack instead of a result of the computation.
415: The error object consists of the serial number of the @b{SM} command
416: which caused the error, and an error message.
417: \E
1.1 noro 418:
419: @example
420: [340] ox_launch();
421: 0
422: [341] ox_rpc(0,"fctr",1.2*x);
423: 0
424: [342] ox_pop_cmo(0);
425: error([8,fctrp : invalid argument])
426: @end example
427:
1.2 noro 428: \BJP
1.1 noro 429: @node $B%j%;%C%H(B,,, $B%G%P%C%0(B
1.2 noro 430: @subsection $B%j%;%C%H(B
431: \E
432: \BEG
433: @node Resetting a server,,, Debugging
434: @subsection Resetting a server
435: \E
1.1 noro 436:
1.2 noro 437: \BJP
1.1 noro 438: @code{ox_reset()} $B$O8=:_<B9TCf$N(B server $B$r%j%;%C%H$7$F(B, $B%3%^%s%I<u$1IU$1(B
439: $B>uBV$KLa$9(B. $B$3$N5!G=$O(B, $BDL>o$N(B @b{Asir} $B%;%C%7%g%s$K$*$1$k%-!<%\!<%I3d$j9~$_(B
1.2 noro 440: $B$H$[$\F1MM$K(B, @b{OpenXM} server $B$r%j%;%C%H$G$-$k(B. $B$^$?(B, $B2?$i$+$N860x$G(B,
1.1 noro 441: $BDL?.O)$N%G!<%?$,:\$C$?$^$^$N>uBV$G(B @code{ox_rpc()} $B$J$I$r<B9T$9$k$H(B,
442: @code{ox_pop_cmo()} $B$J$I(B, $B%9%?%C%/$+$i$N<h$j=P$7$H(B, $B<B:]$KFI$^$l$k%G!<%?(B
443: $B$NBP1~$,IT@5$K$J$k(B. $B$=$N$h$&$J>l9g$K$bM-8z$G$"$k(B.
1.2 noro 444: \E
1.1 noro 445:
1.2 noro 446: \BEG
447: @code{ox_reset()} resets a process whose identifier is @var{number}.
448: After its execution the process is ready for receiving data.
449: This function corresponds to the keyboard interrupt on an usual @b{Asir}
450: session. It often happens that a request of a client does not correspond
451: correctly to the result from a server. It is caused by remaining data
452: on data streams. @code{ox_reset} is effective for such cases.
453: \E
1.1 noro 454:
1.2 noro 455: \BJP
1.1 noro 456: @node $B%G%P%C%0MQ%]%C%W%"%C%W%&%#%s%I%&(B,,, $B%G%P%C%0(B
457: @subsection $B%G%P%C%0MQ%]%C%W%"%C%W%&%#%s%I%&(B
1.2 noro 458: \E
459: \BEG
460: @node Pop-up command window for debugging,,, Debugging
461: @subsection Pop-up command window for debugging
462: \E
1.1 noro 463:
1.2 noro 464: \BJP
1.1 noro 465: server $B$K$O(B, client $B$K$*$1$k%-!<%\!<%I$KAjEv$9$kF~NO5!G=$,$J$$$?$a(B,
466: server $BB&$GF0:n$7$F$$$k%f!<%68@8l%W%m%0%i%`$N%G%P%C%0$,:$Fq$K$J$k(B. $B$3$N(B
467: $B$?$a(B, server $BB&$G$N%f!<%68@8l%W%m%0%i%`<B9TCf$N%(%i!<$*$h$S(B, client $B$+$i(B
468: $B$N(B @code{ox_rpc(@var{id},"debug")} $B<B9T$K$h$j(B, server $B$K%G%P%C%0%3%^%s%I(B
469: $B$rF~NO$9$k$?$a$N>.$5$J%&%#%s%I%&$,%]%C%W%"%C%W$9$k(B. $B$3$N%&%#%s%I%&$+$i$N(B
470: $BF~NO$KBP$9$k=PNO$O(B, log $BMQ$N(B @samp{xterm} $B$KI=<($5$l$k(B. $B$3$N%&%#%s%I%&$r(B
471: $BJD$8$k$K$O(B, @code{quit} $B$rF~NO$9$l$P$h$$(B.
1.2 noro 472: \E
473: \BEG
474: As a server does not have any standard input device such as a keyboard,
475: it is difficult to debug user programs running on the server.
476: @samp{ox_asir} pops up a small command window to input debug commands
477: when an error has occurred during user a program execution or
478: @code{ox_rpc(@var{id},"debug")} has been executed.
479: The responses to commands are shown in @samp{xterm} to display
480: standard outputs from the server. To close the small window,
481: input @code{quit}.
482: \E
1.1 noro 483:
1.2 noro 484: \BJP
1.1 noro 485: @node $BJ,;67W;;$K4X$9$k4X?t(B,,, $BJ,;67W;;(B
486: @section $BJ,;67W;;$K4X$9$k4X?t(B
1.2 noro 487: \E
488: \BEG
489: @node Functions for distributed computation,,, Distributed computation
490: @section Functions for distributed computation
491: \E
1.1 noro 492:
493: @menu
494: * ox_launch ox_launch_nox ox_shutdown::
495: * ox_launch_generic::
496: * ox_asir::
497: * ox_rpc ox_cmo_rpc ox_execute_string::
498: * ox_push_cmo ox_push_local::
499: * ox_pop_cmo ox_pop_local::
500: * ox_push_cmd ox_sync::
501: * ox_get::
502: * ox_pops::
1.4 noro 503: * ox_reset ox_intr register_handler::
1.1 noro 504: * ox_select::
505: * ox_flush::
506: * ox_get_serverinfo::
507: * generate_port try_bind_listen try_connect try_accept register_server::
508: * ifplot conplot plot plotover::
509: @end menu
510:
1.2 noro 511: \JP @node ox_launch ox_launch_nox ox_shutdown,,, $BJ,;67W;;$K4X$9$k4X?t(B
512: \EG @node ox_launch ox_launch_nox ox_shutdown,,, Functions for distributed computation
1.1 noro 513: @subsection @code{ox_launch}, @code{ox_launch_nox}, @code{ox_shutdown}
514: @findex ox_launch
515: @findex ox_launch_nox
516: @findex ox_shutdown
517:
518: @table @t
519: @item ox_launch([@var{host}[,@var{dir}],@var{command}])
520: @itemx ox_launch_nox([@var{host}[,@var{dir}],@var{command}])
1.2 noro 521: \JP :: $B1s3V%W%m%;%9$N5/F0$*$h$SDL?.$r3+;O$9$k(B.
522: \EG :: Initialize OpenXM servers.
1.1 noro 523: @item ox_shutdown(@var{id})
1.2 noro 524: \JP :: $B1s3V%W%m%;%9$r=*N;$5$;(B, $BDL?.$r=*N;$9$k(B.
525: \EG :: Terminates OpenXM servers.
1.1 noro 526: @end table
527:
528: @table @var
529: @item return
1.2 noro 530: \JP $B@0?t(B
531: \EG integer
1.1 noro 532: @item host
1.2 noro 533: \JP $BJ8;zNs$^$?$O(B 0
534: \EG string or 0
1.1 noro 535: @item dir, command
1.2 noro 536: \JP $BJ8;zNs(B
537: \EG string
1.1 noro 538: @item id
1.2 noro 539: \JP $B@0?t(B
540: \EG integer
1.1 noro 541: @end table
542:
543: @itemize @bullet
1.2 noro 544: \BJP
1.1 noro 545: @item
546: @code{ox_launch()} $B$O(B, $B%[%9%H(B @var{host} $B>e$G%3%^%s%I(B @var{command} $B$r5/F0$7(B,
547: $B$3$N%W%m%;%9$HDL?.$r3+;O$9$k(B.
548: $B0z?t$,(B 3 $B$D$N>l9g(B, @var{host} $B>e$G(B,
549: @var{dir} $B$K$"$k(B @samp{ox_launch} $B$H$$$&%5!<%P5/F0MQ%W%m%0%i%`$rN)$A>e$2$k(B.
550: @samp{ox_launch} $B$O(B @var{command} $B$r5/F0$9$k(B.
551: @var{host} $B$,(B 0 $B$N;~(B, @b{Asir} $B$,F0:n$7$F$$$k(B
552: $B%^%7%s>e$G%3%^%s%I$r5/F0$9$k(B.
553: $BL50z?t$N>l9g(B, @var{host} $B$O(B 0, @var{dir} $B$O(B @code{get_rootdir()}
554: $B$GJV$5$l$k%G%#%l%/%H%j(B, @var{command} $B$OF1$8%G%#%l%/%H%j$N(B @samp{ox_asir}
555: $B$r0UL#$9$k(B.
1.2 noro 556:
1.1 noro 557: @item
558: @var{host} $B$,(B 0, $B$9$J$o$A%5!<%P$r(B local $B$K5/F0$9$k>l9g$K$O(B, @var{dir}
559: $B$r>JN,$G$-$k(B. $B$3$N>l9g(B, @var{dir} $B$O(B @code{get_rootdir()} $B$GJV$5$l$k(B
560: $B%G%#%l%/%H%j$H$J$k(B.
1.2 noro 561:
1.1 noro 562: @item
563: @var{command} $B$,(B @samp{/} $B$G;O$^$kJ8;zNs$N>l9g(B, $B@dBP%Q%9$H2r<a$5$l$k(B.
564: $B$=$l0J30$N>l9g(B, @var{dir} $B$+$i$NAjBP%Q%9$H2r<a$5$l$k(B.
1.2 noro 565:
1.1 noro 566: @item
567: UNIX $BHG$K$*$$$F$O(B, @code{ox_launch()} $B$O(B, @var{command} $B$NI8=`=PNO(B, $BI8=`(B
568: $B%(%i!<=PNO$rI=<($9$k$?$a$N(B @samp{xterm} $B$r5/F0$9$k(B.
569: @code{ox_launch_nox()} $B$O(B, @code{X} $B$J$7$N4D6-$N>l9g(B, $B$"$k$$$O(B @samp{xterm}
570: $B$r5/F0$;$:$K%5!<%P$rN)$A>e$2$k>l9g$KMQ$$$k(B. $B$3$N>l9g(B,
571: @var{command} $B$N=PNO$O(B @samp{/dev/null} $B$K@\B3$5$l$k(B.
572: @code{ox_launch()} $B$N>l9g$G$b(B, $B4D6-JQ?t(B @code{DISPLAY} $B$,@_Dj$5$l$F$$$J$$(B
573: $B>l9g$K$O(B, @code{ox_launch_nox()} $B$HF1$8F0:n$r$9$k(B.
574:
575: @item
576: $BJV$5$l$k@0?t$ODL?.$N$?$a$N<1JL;R$H$J$k(B.
577:
578: @item
579: @b{Asir} $B$HDL?.$9$k%W%m%;%9$OF10l$N%^%7%s>e$GF0:n$7$F$$$kI,MW$O$J$$(B. $B$^(B
580: $B$?(B, $BDL?.$K$*$1$k%P%$%H%*!<%@$O(B server, client $B4V$G$N:G=i$N(B negotiation
581: $B$G7h$^$k$?$a(B, $BAj<j@h$N%^%7%s$H%P%$%H%*!<%@$,0[$J$C$F$$$F$b9=$o$J$$(B.
582:
583: @item
584: @var{host} $B$K%^%7%sL>$r;XDj$9$k>l9g(B, $B0J2<$N=`Hw$,I,MW$G$"$k(B.
585: $B$3$3$G(B, @b{Asir} $B$NF0$$$F$$$k%[%9%H$r(B @code{A}, $BDL?.Aj<j$N%W%m%;%9(B
586: $B$,5/F0$5$l$k%[%9%H$r(B @code{B} $B$H$9$k(B.
587:
588: @enumerate
589: @item
590: $B%[%9%H(B @code{B} $B$N(B @samp{~/.rhosts} $B$K(B, $B%[%9%H(B @code{A} $B$N%[%9%H(B
591: $BL>$rEPO?$9$k(B.
592:
593: @item
594: @samp{ox_plot} $B$J$I(B, @code{X} $B$H$N%3%M%/%7%g%s$bMQ$$$i$l$k>l9g(B,
595: @code{Xserver} $B$KBP$7(B, $BI,MW$J%[%9%H$r(B authorize $B$5$;$k(B.
596: @code{xhost} $B$GI,MW$J%[%9%HL>$rDI2C$9$l$P$h$$(B.
597:
598: @item
599: @var{command} $B$K$h$C$F$O(B, $B%9%?%C%/$rBgNL$K;HMQ$9$k(B
600: $B$b$N$b$"$k$?$a(B, @samp{.cshrc} $B$G%9%?%C%/%5%$%:$rBg$-$a(B (16MB $BDxEY(B) $B$K(B
601: $B;XDj$7$F$*$/$N$,0BA4$G$"$k(B. $B%9%?%C%/%5%$%:$O(B @code{limit stacksize 16m}
602: $B$J$I$H;XDj$9$k(B.
603: @end enumerate
604:
605: @item
606: @var{command} $B$,(B, X $B>e$K%&%$%s%I%&$r3+$1$k>l9g(B,
607: @var{display}$B$,;XDj$5$l$l$P$=$NJ8;zNs$r(B, $B>JN,;~$K$O4D6-JQ?t(B
608: @code{DISPLAY} $B$NCM$rMQ$$$k(B.
609:
610: @item
1.5 ! noro 611: $B4D6-JQ?t(B @code{ASIR_RSH} $B$,%;%C%H$5$l$F$$$k>l9g(B, $B%5!<%P$NN)$A>e$2%W%m%0%i%`(B
! 612: $B$H$7$F(B@samp{rsh} $B$NBe$o$j$K$3$NJQ?t$NCM$,MQ$$$i$l$k(B. $BNc$($P(B,
! 613:
! 614: @example
! 615: % setenv ASIR_RSH "ssh -f -X -A "
! 616: @end example
! 617:
! 618: $B$K$h$j(B, $B%5!<%P$NN)$A>e$2$K(B @samp{ssh} $B$,MQ$$$i$l(B,
! 619: X11 $B$NDL?.$,(B forwarding $B$5$l$k(B. $B>\$7$/$O(B @samp{ssh} $B$N%^%K%e%"%k$r(B
! 620: $B;2>H(B.
! 621:
! 622: @item
1.1 noro 623: @code{ox_shutdown()} $B$O<1JL;R(B @var{id} $B$KBP1~$9$k1s3V%W%m%;%9(B
624: $B$r=*N;$5$;$k(B.
625:
626: @item
627: @b{Asir} $B$,@5>o$7$?>l9g$K$OA4$F$NF~=PNO%9%H%j!<%`$O<+F0E*$KJD$8$i$l(B,
628: $B5/F0$5$l$F$$$k%W%m%;%9$OA4$F=*N;$9$k$,(B, $B0[>o=*N;$7$?>l9g(B, $B1s3V%W%m%;%9(B
629: $B$,=*N;$7$J$$>l9g$b$"$k(B. @b{Asir} $B$,0[>o=*N;$7$?>l9g(B, $B1s3V%W%m%;%9$r(B
630: $B5/F0$7$?%^%7%s>e$G(B @code{ps} $B$J$I$r5/F0$7$F(B, $B$b$7(B @b{Asir} $B$+$i5/F0(B
631: $B$7$?%W%m%;%9$,;D$C$F$$$k>l9g(B, @code{kill} $B$9$kI,MW$,$"$k(B.
632:
633: @item
634: log $BI=<(MQ(B @samp{xterm} $B$O(B @samp{-name ox_term} $B%*%W%7%g%s$G5/F0$5$l$k(B.
635: $B$h$C$F(B, @samp{ox_term} $B$J$k%j%=!<%9L>$KBP$7$F(B @samp{xterm} $B$N%j%=!<%9@_Dj(B
636: $B$r9T$($P(B, log $BMQ(B @samp{xterm} $B$N5sF0$N$_$rJQ$($k$3$H$,$G$-$k(B.
637: $BNc$($P(B,
1.2 noro 638:
1.1 noro 639: @example
640: ox_xterm*iconic:on
641: ox_xterm*scrollBar:on
642: ox_xterm*saveLines:1000
643: @end example
1.2 noro 644:
1.1 noro 645: $B$K$h$j(B, icon $B$G5/F0(B, scrollbar $B$D$-(B, scrollbar $B$G;2>H$G$-$k9T?t(B
646: $B$,:GBg(B 1000 $B9T(B, $B$H$$$&;XDj$,$G$-$k(B.
1.5 ! noro 647:
1.2 noro 648: \E
649:
650: \BEG
651: @item
652: Function @code{ox_launch()} invokes a process to execute @var{command}
653: on a host @var{host} and enables @b{Asir} to communicate with that
654: process.
655: If the number of arguments is 3, @samp{ox_launch} in @var{dir}
656: is invoked on @var{host}. Then @samp{ox_launch} invokes @var{command}.
657: If @var{host} is equal to 0, all the commands are invoked
658: on the same machine as the @b{Asir} is running.
659: If no arguments are specified, @var{host}, @var{dir} and @var{command}
1.3 noro 660: are regarded as 0, the value of @code{get_rootdir()} and @samp{ox_asir} in
1.2 noro 661: the same directory respectively.
662:
663: @item
664: If @var{host} is equal to 0, then @var{dir} can be omitted.
665: In such a case @var{dir} is regarded as the value of @code{get_rootdir()}.
666:
667: @item
668: If @var{command} begins with @samp{/}, it is regarded as an absolute
669: pathname. Otherwise it is regarded as a relative pathname from
670: @var{dir}.
671:
672: @item
673: On UNIX, @code{ox_launch()} invokes @samp{xterm} to display
674: standard outputs from @var{command}.
675: If @code{X11} is not available or one wants to invoke servers without
676: @samp{xterm}, use @code{ox_launch_nox()}, where the outputs of
677: @var{command} are redirected to @samp{/dev/null}.
678: If the environment variable @code{DISPLAY} is not set,
679: @code{ox_launch()} and @code{ox_launch_nox()} behave identically.
680:
681: @item
682: The returned value is used as the identifier for communication.
683:
684: @item
685: The peers communicating with @b{Asir} are not necessarily processes
686: running on the same machine.
687: The communication will be successful even if
688: the byte order is different from those of the peer processes,
689: because the byte order for the communication is determined
690: by a negotiation between a client and a server.
691:
692: @item
693: The following preparations are necessary.
694: Here, Let @code{A} be the host on which @b{Asir} is running, and
695: @code{B} the host on which the peer process will run.
696:
697: @enumerate
698: @item
699: Register the hostname of the host @code{A} to the @samp{~/.rhosts} of
700: the host @code{B}.
701: That is, you should be allowed to access the host @code{B} from @code{A}
702: without supplying a password.
703:
704: @item
705: For cases where connection to @code{X} is also used,
706: let @code{Xserver} authorize the relevant hosts.
707: Adding the hosts can be done by command @code{xhost}.
1.5 ! noro 708:
! 709: @item
! 710: If an environment variable @code{ASIR_RSH} is set,
! 711: the content of this variable is used as a promgram to invoke
! 712: remote servers instead of @var{rsh}. For example,
! 713:
! 714: @example
! 715: % setenv ASIR_RSH "ssh -f -X -A "
! 716: @end example
! 717:
! 718: implies that remote servers are invoked by @samp{ssh} and that
! 719: X11 forwarding is enabled. See the manual of @samp{ssh} for the detail.
1.2 noro 720:
721: @item
722: Some @var{command}'s consume much stack space. You are recommended
723: to set the stack size to about 16MB large in @samp{.cshrc} for safe.
724: To specify the size, put @code{limit stacksize 16m} for an example.
725: @end enumerate
726:
727: @item
728: When @var{command} opens a window on @code{X},
729: it uses the string specified for @var{display};
730: if the specification is omitted, it uses the value set for the
731: environment variable @code{DISPLAY}.
732:
733: @item
734: @code{ox_shutdown()} terminates OpenXM servers whose identifier
735: is @var{id}.
736:
737: @item
738: When @b{Asir} is terminated successfully, all I/O streams are
739: automatically closed, and all the processes invoked are also terminated.
740: However, some remote processes may not terminated when @b{Asir}
741: is terminated abnormally.
742: If ever @b{Asir} is terminated abnormally, you have to kill all the
743: unterminated process invoked by @b{Asir} on every remote host.
744: Check by @code{ps} command on the remote hosts to see if such processed
745: are alive.
746:
747: @item
748: @samp{xterm} for displaying the outputs from @var{command} is
749: invoked with @samp{-name ox_term} option. Thus, by
750: specifying resources for the resource name @samp{ox_term},
751: only the behaviour of the @samp{xterm} can be customized.
752:
753: @example
754: /* iconify on start */
755: ox_xterm*iconic:on
756: /* activate the scroll bar */
757: ox_xterm*scrollBar:on
758: /* 1000 lines can be shown by the scrollbar */
759: ox_xterm*saveLines:1000
760: @end example
761: \E
1.1 noro 762: @end itemize
763:
764: @example
765: [219] ox_launch();
766: 0
767: [220] ox_rpc(0,"fctr",x^10-y^10);
768: 0
769: [221] ox_pop_local(0);
770: [[1,1],[x^4+y*x^3+y^2*x^2+y^3*x+y^4,1],
771: [x^4-y*x^3+y^2*x^2-y^3*x+y^4,1],[x-y,1],[x+y,1]]
772: [222] ox_shutdown(0);
773: 0
774: @end example
775:
776: @table @t
1.2 noro 777: \JP @item $B;2>H(B
778: \EG @item References
779: @fref{ox_rpc ox_cmo_rpc ox_execute_string},
780: @fref{ox_pop_cmo ox_pop_local},
781: @fref{ifplot conplot plot plotover}
1.1 noro 782: @end table
783:
1.2 noro 784: \JP @node ox_launch_generic,,, $BJ,;67W;;$K4X$9$k4X?t(B
785: \EG @node ox_launch_generic,,, Functions for distributed computation
1.1 noro 786: @subsection @code{ox_launch_generic}
787: @findex ox_launch_generic
788:
789: @table @t
790: @item ox_launch_generic(@var{host},@var{launch},@var{server},@var{use_unix},@var{use_ssh},@var{use_x},@var{conn_to_serv})
1.2 noro 791: \JP :: $B1s3V%W%m%;%9$N5/F0$*$h$SDL?.$r3+;O$9$k(B.
792: \EG :: Initialize OpenXM servers.
1.1 noro 793: @end table
794:
795: @table @var
796: @item return
1.2 noro 797: \JP $B@0?t(B
798: \EG integer
1.1 noro 799: @item host
1.2 noro 800: \JP $BJ8;zNs$^$?$O(B 0
801: \EG string or 0
1.1 noro 802: @item launcher, server
1.2 noro 803: \JP $BJ8;zNs(B
804: \EG string
1.1 noro 805: @item use_unix, use_ssh, use_x, conn_to_serv
1.2 noro 806: \JP $B@0?t(B
807: \EG integer
1.1 noro 808: @end table
809:
810: @itemize @bullet
1.2 noro 811: \BJP
1.1 noro 812: @item
813: @code{ox_launch_generic()} $B$O(B,
814: $B%[%9%H(B @var{host} $B>e$G(B, $B%3%s%H%m!<%k%W%m%;%9(B @var{launch} $B$*$h$S(B
815: $B%5!<%P%W%m%;%9(B @var{server} $B$r5/F0$9$k(B. $B$=$NB>$N0z?t$O(B, $B;HMQ$9$k(B
816: protocol $B$N<oN`(B, X $B$N;HMQ(B/$BIT;HMQ(B, rsh/ssh $B$K$h$k%W%m%;%95/F0(B, connect
817: $BJ}K!$N;XDj$J$I$r9T$&%9%$%C%A$G$"$k(B.
1.2 noro 818:
1.1 noro 819: @item
820: @var{host} $B$,(B 0 $B$N>l9g(B, @b{Asir} $B$,F0:n$7$F$$$k%^%7%s>e$K(B, @var{launch},
821: @var{server} $B$rN)$A>e$2$k(B. $B$3$N>l9g(B, @var{use_unix} $B$NCM$K$+$+$o$i$:(B,
822: UNIX internal protocol $B$,MQ$$$i$l$k(B.
1.2 noro 823:
1.1 noro 824: @item
825: @var{use_unix} $B$,(B 1 $B$N>l9g(B, UNIX internal protocol $B$rMQ$$$k(B. 0 $B$N>l9g(B,
826: Internet protocol $B$rMQ$$$k(B.
1.2 noro 827:
1.1 noro 828: @item
829: @var{use_ssh} $B$,(B 1 $B$N>l9g(B, @samp{ssh} (Secure Shell) $B$K$h$j%3%s%H%m!<%k(B,
1.2 noro 830: $B%5!<%P%W%m%;%9$rN)$A>e$2$k(B. @samp{ssh-agent} $B$J$I$rMxMQ$7$F$$$J>l9g(B,
831: $B%Q%9%o!<%I$NF~NO$,I,MW$H$J$k(B.
1.1 noro 832: $BAj<j@h$G(B @samp{sshd} $B$,F0$$$F$$$J$$>l9g(B, $B<+F0E*$K(B @samp{rsh} $B$,MQ$$$i$l$k$,(B,
833: $B%Q%9%o!<%I$,I,MW$H$J$k>l9g$K$O(B, $B$=$N>l$G5/F0$K<:GT$9$k(B.
1.2 noro 834:
1.1 noro 835: @item
836: @var{use_x} $B$,(B 1 $B$N>l9g(B, X $B>e$G$NF0:n$r2>Dj$7(B, $B@_Dj$5$l$F$$$k(B DISPLAY$BJQ(B
837: $B?t$rMQ$$$F(B, log $BI=<(MQ(B @samp{xterm} $B$N$b$H$G(B @var{server} $B$,5/F0$5$l(B
838: $B$k(B. DISPLAY $BJQ?t$,%;%C%H$5$l$F$$$J$$>l9g$K$O(B, $B<+F0E*$K(B X $B$J$7$N@_Dj$H$J(B
839: $B$k(B. DISPLAY $B$,ITE,@Z$K%;%C%H$5$l$F$$$k>l9g$K$O(B, $B%3%s%H%m!<%k(B, $B%5!<%P$,%O(B
840: $B%s%0$9$k$N$GMWCm0U$G$"$k(B.
1.2 noro 841:
1.1 noro 842: @item
843: @var{conn_to_serv} $B$,(B 1 $B$N>l9g(B, @b{Asir} (client) $B$,@8@.$7$?%]!<%H$K(B
844: $BBP$7(B, client $B$,(B bind,listen $B$7(B, $B5/F0$5$l$?%W%m%;%9$,(B connect $B$9$k(B.
845: @var{conn_to_serv} $B$,(B 0 $B$N>l9g(B, $B5/F0$5$l$?%W%m%;%9$,(B bind, listen $B$7(B,
846: client $B$,(B connect $B$9$k(B.
1.2 noro 847: \E
848:
849: \BEG
850: @item
851: @code{ox_launch_generic()} invokes a control process @var{launch}
852: and a server process @var{server} on @var{host}. The other arguments
853: are switches for protocol family selection, on/off of the X environment,
854: method of process invocation and selection of connection type.
855:
856: @item
857: If @var{host} is equal to 0, processes
858: are invoked on the same machine as the @b{Asir} is running.
859: In this case UNIX internal protocol is always used.
860:
861: @item
862: If @var{use_unix} is equal to 1, UNIX internal protocol is used.
863: If @var{use_unix} is equal to 0, Internet protocol is used.
864:
865: @item
866: If @var{use_ssh} is equal to 1,@samp{ssh} (Secure Shell)
867: is used to invoke processes. If one does not use @samp{ssh-agent},
868: a password (passphrase) is required.
869: If @samp{sshd} is not running on the target machine,
870: @samp{rsh} is used instead. But it will immediately fail
871: if a password is required.
872:
873: @item
874: If @var{use_x} is equal to 1, it is assumed that X environment
875: is available. In such a case @var{server} is invoked under
876: @samp{xterm} by using the current @code{DISPLAY} variable.
877: If @code{DISPLAY} is not set, it is invoked without X.
878: Note that the processes will hang up if @code{DISPLAY} is incorrectly set.
879:
880: @item
881: If @var{conn_to_serv} is equal to 1, @b{Asir} (client)
882: executes @code{bind} and @code{listen}, and the invoked processes execute
883: @code{connect}.
884: If @var{conn_to_serv} is equal to 0, @b{Asir} (client)
885: the invoked processes execute @code{bind} and @code{listen}, and
886: the client executes @code{connect}.
887: \E
1.1 noro 888: @end itemize
889:
890: @example
891: [342] LIB=get_rootdir();
892: /export/home/noro/ca/Kobe/build/OpenXM/lib/asir
893: [343] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",0,0,0,0);
894: 1
895: [344] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",1,0,0,0);
896: 2
897: [345] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",1,1,0,0);
898: 3
899: [346] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",1,1,1,0);
900: 4
901: [347] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",1,1,1,1);
902: 5
903: [348] ox_launch_generic(0,LIB+"/ox_launch",LIB+"/ox_asir",1,1,0,1);
904: 6
905: @end example
906:
907: @table @t
1.2 noro 908: \JP @item $B;2>H(B
909: \EG @item References
910: @fref{ox_launch ox_launch_nox ox_shutdown}, @fref{ox_launch_generic}
1.1 noro 911: @end table
912:
1.2 noro 913: \JP @node generate_port try_bind_listen try_connect try_accept register_server,,, $BJ,;67W;;$K4X$9$k4X?t(B
914: \EG @node generate_port try_bind_listen try_connect try_accept register_server,,, Functions for distributed computation
1.1 noro 915: @subsection @code{generate_port}, @code{try_bind_listen}, @code{try_connect}, @code{try_accept}, @code{register_server}
916: @findex generate_port
917: @findex try_bind_listen
918: @findex try_connect
919: @findex try_accept
920: @findex register_server
921:
922: @table @t
923: @item generate_port([@var{use_unix}])
1.2 noro 924: \JP :: port $B$N@8@.(B
925: \EG :: Generates a port number.
1.1 noro 926: @itemx try_bind_listen(@var{port})
1.2 noro 927: \JP :: port $B$KBP$7$F(B bind, listen
928: \EG :: Binds and listens on a port.
1.1 noro 929: @itemx try_connect(@var{host},@var{port})
1.2 noro 930: \JP :: port $B$KBP$7$F(B connect
931: \EG :: Connects to a port.
1.1 noro 932: @itemx try_accept(@var{socket},@var{port})
1.2 noro 933: \JP :: connect $BMW5a$r(B accept
934: \EG :: Accepts a connection request.
1.1 noro 935: @itemx register_server(@var{control_socket},@var{control_port},@var{server_socket},@var{server_port})
1.2 noro 936: \JP :: connection $B$N@.N)$7$?(B control socket, server socket $B$NEPO?(B
937: \EG :: Registers the sockets for which connections are established.
1.1 noro 938: @end table
939:
940: @table @var
941: @item return
1.2 noro 942: \JP @code{generate_port()} $B$N$_@0?t$^$?$OJ8;zNs(B. $B$=$NB>$O@0?t(B.
943: \EG integer or string for @code{generate_port()}, integer for the others
1.1 noro 944: @item use_unix
1.2 noro 945: \JP 0 $B$^$?$O(B 1
946: \EG 0 or 1
1.1 noro 947: @item host
1.2 noro 948: \JP $BJ8;zNs(B
949: \EG string
1.1 noro 950: @item port,control_port,server_port
1.2 noro 951: \JP $B@0?t$^$?$OJ8;zNs(B
952: \EG integer or string
1.1 noro 953: @item socket,control_socket,server_socket
1.2 noro 954: \JP $B@0?t(B
955: \EG integer
1.1 noro 956: @end table
957:
958: @itemize @bullet
1.2 noro 959: \BJP
1.1 noro 960: @item
961: $B$3$l$i$N4X?t$O(B, $B1s3V%W%m%;%9$HDL?.$r@.N)$5$;$k$?$a$N%W%j%_%F%#%V$G$"$k(B.
1.2 noro 962:
1.1 noro 963: @item
964: @code{generate_port()} $B$ODL?.$N$?$a$N(B port $B$r@8@.$9$k(B. $BL50z?t$"$k$$$O(B
965: $B0z?t$,(B 0 $B$N>l9g(B, Internet domain $B$N(B socket $B$N$?$a$N(B port $BHV9f(B, $B$=$l(B
966: $B0J30$N>l9g$K$O(B, UNIX domain (host-internal protocol) $B$N$?$a$N(B, $B%U%!%$%kL>(B
967: $B$r@8@.$9$k(B. port $BHV9f$O(B random $B$K@8@.$5$l$k$,(B, $B$=$N(B port $B$,;HMQCf$G$J$$(B
968: $BJ]>Z$O$J$$(B.
1.2 noro 969:
1.1 noro 970: @item
971: @code{try_bind_listen()} $B$O(B, $BM?$($i$l$?(B port $B$KBP$7(B, $B$=$N(B protocol $B$K(B
1.2 noro 972: $BBP1~$7$?(B socket $B$r@8@.$7(B, bind, listen $B$9$k(B. $B@.8y$7$?>l9g(B,
973: socket $B<1JL;R$rJV$9(B. $B<:GT$7$?>l9g(B, -1 $B$,JV$k(B.
974:
1.1 noro 975: @item
976: @code{try_connect()} $B$O(B, $B%[%9%H(B @var{host} $B$N(B port @var{port} $B$KBP$7(B
1.2 noro 977: connect $B$r;n$_$k(B. $B@.8y$7$?>l9g(B, socket $B<1JL;R$rJV$9(B. $B<:GT$7$?>l9g(B -1 $B$,JV$k(B.
978:
1.1 noro 979: @item
980: @code{try_accept()} $B$O(B, @var{socket} $B$KBP$9$k(B connect $BMW5a$r(B accept
981: $B$7(B, $B?7$?$K@8@.$5$l$?(B socket $B$rJV$9(B. $B<:GT$7$?>l9g(B -1 $B$,JV$k(B.
982: $B$$$:$l$N>l9g$K$b(B, @var{socket} $B$O<+F0E*$K(B close $B$5$l$k(B.
983: $B0z?t(B @var{port} $B$O(B, @var{socket} $B$N(B protocol $B$rH=JL$9$k$?$a$KM?$($k(B.
1.2 noro 984:
1.1 noro 985: @item
986: @code{register_server()} $B$O(B, control, server $B$=$l$>$l$N(B socket $B$r(B
987: $B0lAH$K$7$F(B, server list $B$KEPO?$7(B, @code{ox_push_cmo()} $B$J$I$GMQ$$$k(B
988: $B%W%m%;%9<1JL;R$rJV$9(B.
1.2 noro 989:
1.1 noro 990: @item
991: $B1s3V%W%m%;%9$N5/F0$O(B, @code{shell()} $B$^$?$O<jF0$G9T$&(B.
1.2 noro 992: \E
993: \BEG
994: @item
995: These functions are primitives to establish communications between
996: a client and servers.
997:
998: @item
999: @code{generate_port()} generates a port name for communication.
1000: If the argument is not specified or equal to 0, a port number
1001: for Internet domain socket is generated randomly. Otherwise
1002: a file name for UNIX domain (host-internal protocol) is generated.
1003: Note that it is not assured that the generated port is not in use.
1004:
1005: @item
1006: @code{try_bind_listen()} creates a socket according to the protocol
1007: family indicated by the given port and executes @code{bind} and @code{listen}.
1008: It returns a socket identifier if it is successful. -1 indicates an error.
1009:
1010: @item
1011: @code{try_connect()} tries to connect to a port @var{port} on
1012: a host @var{host}.
1013: It returns a socket identifier if it is successful. -1 indicates an error.
1014:
1015: @item
1016: @code{try_accept()} accepts a connection request to a socket @var{socket}.
1017: It returns a new socket identifier if it is successful. -1 indicates an error.
1018: In any case @var{socket} is automatically closed.
1019: @var{port} is specified to distinguish the protocol family of @var{socket}.
1020:
1021: @item
1022: @code{register_server()} registers a pair of a control socket and a server
1023: socket. A process identifier indicating the pair is returned.
1024: The process identifier is used as an argument
1025: of @code{ox} functions such as @code{ox_push_cmo()}.
1026:
1027: @item
1028: Servers are invoked by using @code{shell()}, or manually.
1029: \E
1.1 noro 1030: @end itemize
1031:
1032: @example
1033: [340] CPort=generate_port();
1034: 39896
1035: [341] SPort=generate_port();
1036: 37222
1037: [342] CSocket=try_bind_listen(CPort);
1038: 3
1039: [343] SSocket=try_bind_listen(SPort);
1040: 5
1041:
1042: /*
1.2 noro 1043: \JP $B$3$3$G(B, ox_launch $B$r5/F0(B :
1044: \EG ox_launch is invoked here :
1.1 noro 1045: % ox_launch "127.1" 0 39716 37043 ox_asir "shio:0"
1046: */
1047:
1048: [344] CSocket=try_accept(CSocket,CPort);
1049: 6
1050: [345] SSocket=try_accept(SSocket,SPort);
1051: 3
1052: [346] register_server(CSocket,CPort,SSocket,SPort);
1053: 0
1054: @end example
1055:
1056: @table @t
1.2 noro 1057: \JP @item $B;2>H(B
1058: \EG @item References
1059: @fref{ox_launch ox_launch_nox ox_shutdown},
1060: @fref{ox_launch_generic}, @fref{shell}, @fref{ox_push_cmo ox_push_local}
1.1 noro 1061: @end table
1062:
1.2 noro 1063: \JP @node ox_asir,,, $BJ,;67W;;$K4X$9$k4X?t(B
1064: \EG @node ox_asir,,, Functions for distributed computation
1.1 noro 1065: @subsection @samp{ox_asir}
1066:
1.2 noro 1067: \BJP
1068: @samp{ox_asir} $B$O(B, @b{Asir} $B$N$[$\A4$F$N5!G=$r(B @b{OpenXM} $B%5!<%P(B
1069: $B$H$7$FDs6!$9$k(B.
1070: @samp{ox_asir} $B$O(B, @code{ox_launch} $B$^$?$O(B @code{ox_launch_nox} $B$G(B
1071: $B5/F0$9$k(B. $B8e<T$O(B X $B4D6-$rMQ$$$J$$>l9g$N$?$a$KMQ0U$5$l$F$$$k(B.
1072: \E
1073: \BEG
1074: @samp{ox_asir} provides almost all the functionalities of @b{Asir} as
1075: an @b{OpenXM} server.
1076: @samp{ox_asir} is invoked by @code{ox_launch} or @code{ox_launch_nox}.
1077: If X environment is not available or is not necessary, one can use
1078: @code{ox_launch_nox}.
1079: \E
1.1 noro 1080:
1081: @example
1082: [5] ox_launch();
1083: 0
1084: @end example
1085:
1086: @example
1087: [5] ox_launch_nox("127.0.0.1","/usr/local/lib/asir","/usr/local/lib/asir/ox_asir");
1088: 0
1089: @end example
1090:
1091: @example
1092: [7] RemoteLibDir = "/usr/local/lib/asir/"$
1093: [8] Machines = ["sumire","rokkaku","genkotsu","shinpuku"];
1094: [sumire,rokkaku,genkotsu,shinpuku]
1095: [9] Servers = map(ox_launch,Machines,RemoteLibDir,RemoteLibDir+"ox_asir");
1096: [0,1,2,3]
1097: @end example
1098:
1099: @table @t
1.2 noro 1100: \JP @item $B;2>H(B
1101: \EG @item References
1102: @fref{ox_launch ox_launch_nox ox_shutdown}
1.1 noro 1103: @end table
1104:
1.2 noro 1105: \JP @node ox_rpc ox_cmo_rpc ox_execute_string,,, $BJ,;67W;;$K4X$9$k4X?t(B
1106: \EG @node ox_rpc ox_cmo_rpc ox_execute_string,,, Functions for distributed computation
1.1 noro 1107: @subsection @code{ox_rpc}, @code{ox_cmo_rpc}, @code{ox_execute_string}
1108: @findex ox_rpc
1109: @findex ox_cmo_rpc
1110: @findex ox_execute_string
1111:
1112: @table @t
1113: @item ox_rpc(@var{number},@code{"@var{func}"},@var{arg0},...)
1114: @itemx ox_cmo_rpc(@var{number},@code{"@var{func}"},@var{arg0},...)
1115: @itemx ox_execute_string(@var{number},@code{"@var{command}"},...)
1.2 noro 1116: \JP :: $B%W%m%;%9$NH!?t8F$S=P$7(B
1117: \EG :: Calls a function on an OpenXM server
1.1 noro 1118: @end table
1119:
1120: @table @var
1121: @item return
1122: 0
1123: @item number
1.2 noro 1124: \JP $B?t(B ($B%W%m%;%9<1JL;R(B)
1125: \EG integer (process identifier)
1.1 noro 1126: @item func
1.2 noro 1127: \JP $BH!?tL>(B
1128: \EG function name
1.1 noro 1129: @item command
1.2 noro 1130: \JP $BJ8;zNs(B
1131: \EG string
1.1 noro 1132: @item arg0, arg1, ...
1.2 noro 1133: \JP $BG$0U(B ($B0z?t(B)
1134: \EG arbitrary (arguments)
1.1 noro 1135: @end table
1136:
1137: @itemize @bullet
1.2 noro 1138: \BJP
1.1 noro 1139: @item
1140: $B<1JL;R(B @var{number} $B$N%W%m%;%9$NH!?t$r8F$S=P$9(B.
1.2 noro 1141:
1.1 noro 1142: @item
1143: $BH!?t$N7W;;=*N;$rBT$?$:(B, $BD>$A$K(B 0 $B$rJV$9(B.
1.2 noro 1144:
1.1 noro 1145: @item
1146: @code{ox_rpc()} $B$O(B, $B%5!<%P$,(B @samp{ox_asir} $B$N>l9g$N$_MQ$$$k$3$H$,$G$-$k(B.
1147: $B$=$l0J30$N>l9g$O(B, @code{ox_cmo_rpc()} $B$rMQ$$$k(B.
1.2 noro 1148:
1.1 noro 1149: @item
1150: $BH!?t$,JV$9CM$O(B @code{ox_pop_local()}, @code{ox_pop_cmo()} $B$K$h$j<h$j=P$9(B.
1.2 noro 1151:
1.1 noro 1152: @item
1153: $B%5!<%P$,(B @samp{ox_asir} $B0J30$N$b$N(B ($BNc$($P(B Kan $B%5!<%P(B @samp{ox_sm1}$B$J$I(B)
1154: $B$N>l9g$K$O(B, @b{Open_XM} $B%W%m%H%3%k$G%5%]!<%H$5$l$F$$$k%G!<%?$N$_$r(B
1155: $BAw$k$3$H$,$G$-$k(B.
1.2 noro 1156:
1.1 noro 1157: @item
1158: @code{ox_execute_string} $B$O(B, $BAw$C$?J8;zNs(B @var{command} $B$r%5!<%P$,<+$i$N(B
1159: $B%f!<%68@8l%Q!<%6$G2r@O$7(B, $BI>2A$7$?7k2L$r%5!<%P$N%9%?%C%/$KCV$/$h$&$K(B
1160: $B;X<($9$k(B.
1.2 noro 1161: \E
1162:
1163: \BEG
1164: @item
1165: Calls a function on an @b{OpenXM} server whose identifier is @var{number}.
1166:
1167: @item
1168: It returns 0 immediately. It does not wait the termination of the function
1169: call.
1170:
1171: @item
1172: @code{ox_rpc()} can be used when the server is @samp{ox_asir}.
1173: Otherwise @code{ox_cmo_rpc()} should be used.
1174:
1175: @item
1176: The result of the function call is put on the stack of the server.
1177: It can be received by @code{ox_pop_local()} or @code{ox_pop_cmo()}.
1178:
1179: @item
1180: If the server is not @samp{ox_asir}, only data defined in
1181: @b{OpenXM} can be sent.
1182:
1183: @item
1184: @code{ox_execute_string} requests the server to parse and execute
1185: @var{command} by the parser and the evaluater of the server.
1186: The result is pushed to the stack.
1187: \E
1.1 noro 1188: @end itemize
1189:
1190: @example
1191: [234] ox_cmo_rpc(0,"dp_ht",dp_ptod((x+y)^10,[x,y]));
1192: 0
1193: [235] ox_pop_cmo(0);
1194: (1)*<<10,0>>
1195: [236] ox_execute_string(0,"12345 % 678;");
1196: 0
1197: [237] ox_pop_cmo(0);
1198: 141
1199: @end example
1200:
1201: @table @t
1.2 noro 1202: \JP @item $B;2>H(B
1203: \EG @item References
1204: @fref{ox_pop_cmo ox_pop_local}
1.1 noro 1205: @end table
1206:
1.4 noro 1207: \JP @node ox_reset ox_intr register_handler,,, $BJ,;67W;;$K4X$9$k4X?t(B
1208: \EG @node ox_reset ox_intr register_handler,,, Functions for distributed computation
1209: @subsection @code{ox_reset},@code{ox_intr},@code{register_handler}
1.1 noro 1210: @findex ox_reset
1211: @findex register_handler
1212:
1213: @table @t
1214: @item ox_reset(@var{number})
1.2 noro 1215: \JP :: $B%W%m%;%9$N%j%;%C%H(B
1216: \EG :: Resets an OpenXM server
1.4 noro 1217: @item ox_intr(@var{number})
1218: \JP :: $B%W%m%;%9$N$K(B @code{SIGINT} $BAwIU(B
1219: \EG :: Sends @code{SIGINT} to an OpenXM server
1.1 noro 1220: @item register_handler(@var{func})
1.2 noro 1221: \JP :: $B%W%m%;%9$N%j%;%C%H$N$?$a$N4X?tEPO?(B
1222: \EG :: Registers a function callable on a keyboard interrupt.
1.1 noro 1223: @end table
1224:
1225: @table @var
1226: @item return
1227: 1
1228: @item number
1.2 noro 1229: \JP $B?t(B ($B%W%m%;%9<1JL;R(B)
1230: \EG integer(process identifier)
1.1 noro 1231: @item func
1.2 noro 1232: \JP $B4X?t;R$^$?$O(B 0
1233: \EG functor or 0
1.1 noro 1234: @end table
1235:
1236: @itemize @bullet
1.2 noro 1237: \BJP
1.1 noro 1238: @item
1239: @code{ox_reset()} $B$O(B, $B<1JL;R(B @var{number} $B$N%W%m%;%9$r%j%;%C%H$7(B, $B%3%^%s(B
1240: $B%I<u$1IU$1>uBV$K$9$k(B.
1.2 noro 1241:
1.1 noro 1242: @item
1243: $B$=$N%W%m%;%9$,4{$K=q$-=P$7$?(B, $B$"$k$$$O8=:_=q$-=P$7Cf$N%G!<%?$,$"$k>l9g(B,
1244: $B$=$l$rA4ItFI$_=P$7(B, $B=PNO%P%C%U%!$r6u$K$7$?;~E@$GLa$k(B.
1.2 noro 1245:
1.1 noro 1246: @item
1247: $B;R%W%m%;%9$,(B RUN $B>uBV$N>l9g$G$b(B, $B3d$j9~$_$K$h$j6/@)E*$K7W;;$r=*N;$5$;$k(B.
1.2 noro 1248:
1.1 noro 1249: @item
1250: $BJ,;67W;;$r9T$&H!?t$N@hF,$G(B, $B;HMQ$9$k%W%m%;%9$KBP$7$F<B9T$9$k(B. $B$"$k$$$O(B
1251: $B7W;;ESCf$G$N6/@)CfCG$KMQ$$$k(B.
1.2 noro 1252:
1.1 noro 1253: @item
1.4 noro 1254: @code{ox_intr()} $B$O(B, $B<1JL;R(B @var{number} $B$N%W%m%;%9$r$KBP$7$F(B
1255: @code{SIGINT} $B$rAwIU$9$k(B. @code{SIGINT} $B$KBP$9$k%W%m%;%9$NF0:n$O(B
1256: $B5,Dj$5$l$F$$$J$$$,(B, @samp{ox_asir} $B$N>l9g(B, $B$?$@$A$K(B debug mode $B$K(B
1257: $BF~$k(B. X $B>e$GF0:n$7$F$$$k>l9g(B, $B%G%P%C%0%3%^%s%IF~NOMQ$N%&%#%s%I%&$,(B
1258: $B%]%C%W%"%C%W$9$k(B.
1259:
1260: @item
1.1 noro 1261: @code{register_handler()} $B$O(B, @kbd{C-c} $B$J$I$K$h$k3d$j9~$_$N:]$K(B,
1262: @kbd{u} $B$r;XDj$9$k$3$H$G(B, $BL50z?t%f!<%6Dj5A4X?t(B @var{func()} $B$,8F$S=P$5$l$k(B
1263: $B$h$&$K@_Dj$9$k(B. $B$3$N4X?t$K(B, @code{ox_reset()} $B$r8F$S=P$5$;$k$3$H$G(B,
1.2 noro 1264: $B3d$j9~$_$N:]$K<+F0E*$K(B @b{OpenXM} server $B$N%j%;%C%H$r9T$&$3$H$,$G$-$k(B.
1265:
1.1 noro 1266: @item
1267: @var{func} $B$K(B 0 $B$r;XDj$9$k$3$H$G(B, $B@_Dj$r2r=|$G$-$k(B.
1.2 noro 1268: \E
1269:
1270: \BEG
1271: @item
1272: @code{ox_reset()} resets a process whose identifier is @var{number}.
1273: After its execution the process is ready for receiving data.
1274:
1275: @item
1276: After executing @code{ox_reset()}, sending/receiving buffers and
1277: stream buffers are assured to be empty.
1278:
1279: @item
1280: Even if a process is running, the execution is safely stopped.
1281:
1282: @item
1283: @code{ox_reset()} may be used prior to a distirbuted computation.
1284: It can be also used to interrupt a distributed computation.
1285:
1286: @item
1.4 noro 1287: @code{ox_intr()} sends @code{SIGINT} to a process whose identifier is
1288: @var{number}. The action of a server against @code{SIGINT} is not
1289: specified in @b{OpenXM}. @samp{ox_asir} immediately enters the debug
1290: mode and pops up an window to input debug commands on X window system.
1291:
1292: @item
1.2 noro 1293: @code{register_handler()} registers a function @var{func()}.
1294: If @kbd{u} is specified on a keybord interrupt, @var{func()}
1295: is executed before returning the toplevel.
1296: If @code{ox_reset()} calls are included in @var{func()},
1297: one can automatically reset @b{OpenXM} servers on a keyboard interrupt.
1298:
1299: @item
1300: If @var{func} is equal to 0, the setting is reset.
1301: \E
1.1 noro 1302: @end itemize
1303:
1304: @example
1305: [10] ox_launch();
1306: 0
1307: [11] ox_rpc(0,"fctr",x^100-y^100);
1308: 0
1.2 noro 1309: \BJP
1310: [12] ox_reset(0); /* xterm $B$N%&%#%s%I%&$K$O(B */
1311: 1 /* usr1 : return to toplevel by SIGUSR1 $B$,I=<($5$l$k(B. */
1312: \E
1313: \BEG
1314: [12] ox_reset(0); /* usr1 : return to toplevel by SIGUSR1 */
1315: 1 /* is displayed on the xterm. */
1316: \E
1.1 noro 1317: @end example
1318:
1319: @example
1320: [340] Procs=[ox_launch(),ox_launch()];
1321: [0,1]
1322: [341] def reset() @{ extern Procs; map(ox_reset,Procs);@}
1323: [342] map(ox_rpc,Procs,"fctr",x^100-y^100);
1324: [0,0]
1325: [343] register_handler(reset);
1326: 1
1327: [344] interrupt ?(q/t/c/d/u/w/?) u
1328: Abort this computation? (y or n) y
1329: Calling the registered exception handler...done.
1330: return to toplevel
1331: @end example
1332: @table @t
1.2 noro 1333: \JP @item $B;2>H(B
1334: \EG @item References
1335: @fref{ox_rpc ox_cmo_rpc ox_execute_string}
1.1 noro 1336: @end table
1337:
1.2 noro 1338: \JP @node ox_push_cmo ox_push_local,,, $BJ,;67W;;$K4X$9$k4X?t(B
1339: \EG @node ox_push_cmo ox_push_local,,, Functions for distributed computation
1.1 noro 1340: @subsection @code{ox_push_cmo}, @code{ox_push_local}
1341: @findex ox_push_cmo
1342: @findex ox_push_local
1343:
1344: @table @t
1345: @item ox_push_cmo(@var{number},@var{obj})
1346: @itemx ox_push_local(@var{number},@var{obj})
1.2 noro 1347: \JP :: @var{obj} $B$r<1JL;R(B @var{number} $B$N%W%m%;%9$KAw?.(B
1348: \EG :: Sends @var{obj} to a process whose identifier is @var{number}.
1.1 noro 1349: @end table
1350:
1351: @table @var
1352: @item return
1353: 0
1354: @item number
1.2 noro 1355: \JP $B?t(B($B%W%m%;%9<1JL;R(B)
1356: \EG integer(process identifier)
1.1 noro 1357: @item obj
1.2 noro 1358: \JP $B%*%V%8%'%/%H(B
1359: \EG object
1.1 noro 1360: @end table
1361:
1362: @itemize @bullet
1.2 noro 1363: \BJP
1.1 noro 1364: @item $B<1JL;R(B @var{number} $B$N%W%m%;%9$K(B @var{obj} $B$rAw?.$9$k(B.
1365: @item @code{ox_push_cmo} $B$O(B, Asir $B0J30$N(B @b{Open_XM} $B%5!<%P$KAw?.(B
1366: $B$9$k:]$KMQ$$$k(B.
1367: @item @code{ox_push_local} $B$O(B, @samp{ox_asir}, @samp{ox_plot} $B$K(B
1368: $B%G!<%?$rAw$k>l9g$KMQ$$$k$3$H$,$G$-$k(B.
1369: @item $B%P%C%U%!$,$$$C$Q$$$K$J$i$J$$8B$j(B, $B$?$@$A$KI|5"$9$k(B.
1.2 noro 1370: \E
1371: \BEG
1372: @item
1373: Sends @var{obj} to a process whose identifier is @var{number}.
1374:
1375: @item
1376: @code{ox_push_cmo} is used to send data to an @b{Open_XM} other
1377: than @samp{ox_asir} and @samp{ox_plot}.
1378:
1379: @item
1380: @code{ox_push_local} is used to send data to @samp{ox_asir} and @samp{ox_plot}.
1381:
1382: @item
1383: The call immediately returns unless the stream buffer is full.
1384: \E
1.1 noro 1385: @end itemize
1386:
1387: @table @t
1.2 noro 1388: \JP @item $B;2>H(B
1389: \EG @item References
1390: @fref{ox_rpc ox_cmo_rpc ox_execute_string},
1391: @fref{ox_pop_cmo ox_pop_local}
1.1 noro 1392: @end table
1393:
1.2 noro 1394: \JP @node ox_pop_cmo ox_pop_local,,, $BJ,;67W;;$K4X$9$k4X?t(B
1395: \EG @node ox_pop_cmo ox_pop_local,,, Functions for distributed computation
1.1 noro 1396: @subsection @code{ox_pop_cmo}, @code{ox_pop_local}
1397: @findex ox_pop_local
1398: @findex ox_pop_cmo
1399:
1400: @table @t
1401: @item ox_pop_local(@var{number})
1.2 noro 1402: \JP :: $B%W%m%;%9<1JL;R(B @var{number} $B$+$i%G!<%?$r<u?.$9$k(B.
1403: \EG :: Receives data from a process whose identifier is @var{number}.
1.1 noro 1404: @end table
1405:
1406: @table @var
1407: @item return
1.2 noro 1408: \JP $B<u?.%G!<%?(B
1409: \EG received data
1.1 noro 1410: @item number
1.2 noro 1411: \JP $B?t(B ($B%W%m%;%9<1JL;R(B)
1412: \EG integer(process identifier)
1.1 noro 1413: @end table
1414:
1415: @itemize @bullet
1.2 noro 1416: \BJP
1.1 noro 1417: @item
1418: $B%W%m%;%9<1JL;R(B @var{number} $B$N%W%m%;%9$+$i%G!<%?$r<u?.$9$k(B.
1419: @item @code{ox_pop_cmo} $B$O(B, Asir $B0J30$N(B @b{Open_XM} $B%5!<%P$+$i<u?.(B
1420: $B$9$k:]$KMQ$$$k(B.
1421: @item @code{ox_pop_local} $B$O(B, @samp{ox_asir}, @samp{ox_plot} $B$+$i(B
1422: $B%G!<%?$r<u$1<h$k>l9g$KMQ$$$k$3$H$,$G$-$k(B.
1423: @item $B%5!<%P$,7W;;Cf$N>l9g%V%m%C%/$9$k(B. $B$3$l$rHr$1$k$?$a$K$O(B,
1424: @code{ox_push_cmd} $B$G(B @code{SM_popCMO} (262) $B$^$?$O(B @code{SM_popSerializedLocalObject} (258) $B$rAw$C$F$*$-(B, @code{ox_select} $B$G%W%m%;%9$,(B ready
1425: $B$K$J$C$F$$$k$3$H$r3N$+$a$F$+$i(B @code{ox_get} $B$9$l$P$h$$(B.
1.2 noro 1426: \E
1427: \BEG
1.1 noro 1428: @item
1.2 noro 1429: Receives data from a process whose identifier is @var{number}.
1430: @item
1431: @code{ox_pop_cmo} can be used to receive data form an @b{OpenXM} server
1432: other than @samp{ox_asir} and @samp{ox_plot}.
1433: @item
1434: @code{ox_pop_local} can be used to receive data from
1435: @samp{ox_asir}, @samp{ox_plot}.
1436: @item
1437: If no data is available, these functions block.
1438: To avoid it, send @code{SM_popCMO} (262) or
1439: @code{SM_popSerializedLocalObject} (258).
1440: Then check the process status by @code{ox_select}.
1441: Finally call @code{ox_get} for a ready process.
1442: \E
1.1 noro 1443: @end itemize
1444:
1445: @example
1446: [3] ox_rpc(0,"fctr",x^100-y^100);
1447: 0
1448: [4] ox_push_cmd(0,258);
1449: 0
1450: [5] ox_select([0]);
1451: [0]
1452: [6] ox_get(0);
1453: [[1,1],[x^2+y^2,1],[x^4-y*x^3+y^2*x^2-y^3*x+y^4,1],...]
1454: @end example
1455:
1456: @table @t
1.2 noro 1457: \JP @item $B;2>H(B
1458: \EG @item References
1459: @fref{ox_rpc ox_cmo_rpc ox_execute_string},
1460: @fref{ox_push_cmd ox_sync}, @fref{ox_select}, @fref{ox_get}
1.1 noro 1461: @end table
1462:
1.2 noro 1463: \JP @node ox_push_cmd ox_sync,,, $BJ,;67W;;$K4X$9$k4X?t(B
1464: \EG @node ox_push_cmd ox_sync,,, Functions for distributed computation
1.1 noro 1465: @subsection @code{ox_push_cmd}, @code{ox_sync}
1466: @findex ox_push_cmd
1467: @findex ox_sync
1468:
1469: @table @t
1470: @item ox_push_cmd(@var{number},@var{command})
1.2 noro 1471: \JP :: $B%W%m%;%9<1JL;R(B @var{number} $B$N%W%m%;%9$K%3%^%s%I(B @var{command} $B$rAw?.$9$k(B.
1472: \EG :: Sends a command @var{command} to a process whose identifier is @var{number}.
1.1 noro 1473: @item ox_sync(@var{number})
1.2 noro 1474: \JP :: $B%W%m%;%9<1JL;R(B @var{number} $B$N%W%m%;%9$K(B @b{OX_SYNC_BALL} $B$rAw?.$9$k(B.
1475: \EG :: Sends @b{OX_SYNC_BALL} to a process whose identifier is @var{number}.
1.1 noro 1476: @end table
1477:
1478: @table @var
1479: @item return
1480: 0
1481: @item number
1.2 noro 1482: \JP $B?t(B ($B%W%m%;%9<1JL;R(B)
1483: \EG integer(process identifier)
1.1 noro 1484: @item command
1.2 noro 1485: \JP $B?t(B ($B%3%^%s%I<1JL;R(B)
1486: \EG integer(command identifier)
1.1 noro 1487: @end table
1488:
1489: @itemize @bullet
1.2 noro 1490: \BJP
1.1 noro 1491: @item
1492: $B<1JL;R(B @var{number} $B$N%W%m%;%9$K%3%^%s%I$^$?$O(B @b{OX_SYNC_BALL} $B$rAw?.$9$k(B.
1.2 noro 1493:
1.1 noro 1494: @item
1495: @b{Open_XM} $B$K$*$$$FAw<u?.%G!<%?$O(B @b{OX_DATA}, @b{OX_COMMAND},
1496: @b{OX_SYNC_BALL}$B$N(B 3 $B<oN`$KJ,$+$l$k(B. $BDL>o(B, $B%3%^%s%I$O2?$i$+$NA`:n$K(B
1497: $BIU?o$7$F0EL[$N$&$A$KAw?.$5$l$k$,(B, $B$3$l$r%f!<%6$,8DJL$KAw$j$?$$>l9g$K(B
1498: $BMQ$$$i$l$k(B.
1.2 noro 1499:
1.1 noro 1500: @item
1501: @b{OX_SYNC_BALL} $B$O(B @code{ox_reset} $B$K$h$k7W;;CfCG(B, $BI|5"$N:]$KAw<u?.$5$l$k(B
1502: $B$,(B, $B$3$l$r8DJL$KAw$j$?$$>l9g$KMQ$$$k(B. $B$J$*(B, $BDL>o>uBV$G$O(B @b{OX_SYNC_BALL}
1503: $B$OL5;k$5$l$k(B.
1.2 noro 1504: \E
1505:
1506: \BEG
1507: @item
1508: Sends a command or @b{OX_SYNC_BALL} to a process whose identifier is
1509: @var{number}.
1510:
1511: @item
1512: Data in @b{OpenXM} are categorized into three types:
1513: @b{OX_DATA}, @b{OX_COMMAND}, @b{OX_SYNC_BALL}.
1514: Usually @b{OX_COMMAND} and @b{OX_SYNC_BALL} are
1515: sent implicitly with high level operations, but
1516: these functions are prepared to send these data explicitly.
1517:
1518: @item
1519: @b{OX_SYNC_BALL} is used on the reseting operation by @code{ox_reset}.
1520: Usually @b{OX_SYNC_BALL} will be ignored by the peer.
1521: \E
1.1 noro 1522: @end itemize
1523:
1524: @table @t
1.2 noro 1525: \JP @item $B;2>H(B
1526: \EG @item References
1.4 noro 1527: @fref{ox_rpc ox_cmo_rpc ox_execute_string}, @fref{ox_reset ox_intr register_handler}
1.1 noro 1528: @end table
1529:
1.2 noro 1530: \JP @node ox_get,,, $BJ,;67W;;$K4X$9$k4X?t(B
1531: \EG @node ox_get,,, Functions for distributed computation
1.1 noro 1532: @subsection @code{ox_get}
1533: @findex ox_get
1534:
1535: @table @t
1536: @item ox_get(@var{number})
1.2 noro 1537: \JP :: $B%W%m%;%9<1JL;R(B @var{number} $B$N%W%m%;%9$+$i%G!<%?$r<u?.$9$k(B.
1538: \EG :: Receives data form a process whose identifer is @var{number}.
1.1 noro 1539: @end table
1540:
1541: @table @var
1542: @item return
1.2 noro 1543: \JP $B<u?.%G!<%?(B
1.1 noro 1544: @item number
1.2 noro 1545: \JP $B?t(B($B%W%m%;%9<1JL;R(B)
1546: \EG integer(process identifier)
1.1 noro 1547: @end table
1548:
1549: @itemize @bullet
1.2 noro 1550: \BJP
1.1 noro 1551: @item
1552: $B%W%m%;%9<1JL;R(B @var{number} $B$N%W%m%;%9$+$i%G!<%?$r<u?.$9$k(B. $B4{$K(B
1553: $B%9%H%j!<%`>e$K%G!<%?$,$"$k$3$H$r2>Dj$7$F$$$k(B.
1.2 noro 1554:
1.1 noro 1555: @item
1556: @code{ox_push_cmd} $B$HAH$_9g$o$;$FMQ$$$k(B.
1.2 noro 1557:
1.1 noro 1558: @item
1559: @code{ox_pop_cmo}, @code{ox_pop_local} $B$O(B, @code{ox_push_cmd} $B$H(B
1560: @code{ox_get} $B$NAH$_9g$o$;$G<B8=$5$l$F$$$k(B.
1.2 noro 1561: \E
1562: \BEG
1563: @item
1564: Receives data form a process whose identifer is @var{number}.
1565:
1566: @item
1567: One may use this function with @code{ox_push_cmd}.
1568:
1569: @item
1570: @code{ox_pop_cmo} and @code{ox_pop_local}
1571: is realized as combinations of @code{ox_push_cmd} and @code{ox_get}.
1572: \E
1.1 noro 1573: @end itemize
1574:
1575: @example
1576: [11] ox_push_cmo(0,123);
1577: 0
1578: [12] ox_push_cmd(0,262); /* 262=OX_popCMO */
1579: 0
1580: [13] ox_get(0);
1581: 123
1582: @end example
1583:
1584: @table @t
1.2 noro 1585: \JP @item $B;2>H(B
1586: \EG @item References
1587: @fref{ox_pop_cmo ox_pop_local}, @fref{ox_push_cmd ox_sync}
1.1 noro 1588: @end table
1589:
1.2 noro 1590: \JP @node ox_pops,,, $BJ,;67W;;$K4X$9$k4X?t(B
1591: \EG @node ox_pops,,, Functions for distributed computation
1.1 noro 1592: @subsection @code{ox_pops}
1593: @findex ox_pops
1594:
1595: @table @t
1596: @item ox_pops(@var{number}[,@var{nitem})
1.2 noro 1597: \JP :: $B%W%m%;%9<1JL;R(B @var{number} $B$N%W%m%;%9$N%9%?%C%/$+$i%G!<%?$r<h$j=|$/(B.
1598: \EG :: Removes data form the stack of a process whose identifier is @var{number}.
1.1 noro 1599: @end table
1600:
1601: @table @var
1602: @item return
1603: 0
1604: @item number
1.2 noro 1605: \JP $B?t(B ($B%W%m%;%9<1JL;R(B)
1606: \EG integer(process identifier)
1.1 noro 1607: @item nitem
1.2 noro 1608: \JP $B<+A3?t(B
1609: \EG non-negative integer
1.1 noro 1610: @end table
1611:
1612: @itemize @bullet
1.2 noro 1613: \BJP
1614: @item
1615: $B%W%m%;%9<1JL;R(B @var{number} $B$N%W%m%;%9$N%9%?%C%/$+$i%G!<%?$r<h$j=|$/(B.
1.1 noro 1616: @var{nitem} $B$,;XDj$5$l$F$$$k>l9g$O(B @var{nitem} $B8D(B, $B;XDj$N$J$$>l9g$O(B
1617: 1 $B8D<h$j=|$/(B.
1.2 noro 1618: \E
1619: \BEG
1620: @item
1621: Removes data form the stack of a process whose identifier is @var{number}.
1622: If @var{nitem} is specified, @var{nitem} items are removed.
1623: If @var{nitem} is not specified, 1 item is removed.
1624: \E
1.1 noro 1625: @end itemize
1626:
1627: @example
1628: [69] for(I=1;I<=10;I++)ox_push_cmo(0,I);
1629: [70] ox_pops(0,4);
1630: 0
1631: [71] ox_pop_cmo(0);
1632: 6
1633: @end example
1634:
1635: @table @t
1.2 noro 1636: \JP @item $B;2>H(B
1637: \EG @item References
1638: @fref{ox_pop_cmo ox_pop_local}
1.1 noro 1639: @end table
1640:
1.2 noro 1641: \JP @node ox_select,,, $BJ,;67W;;$K4X$9$k4X?t(B
1642: \EG @node ox_select,,, Functions for distributed computation
1.1 noro 1643: @subsection @code{ox_select}
1644: @findex ox_select
1645:
1646: @table @t
1647: @item ox_select(@var{nlist}[,@var{timeout}])
1.2 noro 1648: \JP :: $BFI$_=P$72DG=$J%W%m%;%9$N<1JL;R$rJV$9(B.
1649: \EG :: Returns the list of process identifiers on which data is available.
1.1 noro 1650: @end table
1651:
1652: @table @var
1653: @item return
1.2 noro 1654: \JP $B%j%9%H(B
1655: \EG list
1.1 noro 1656: @item nlist
1.2 noro 1657: \JP $B?t(B ($B;R%W%m%;%9<1JL;R(B) $B$N%j%9%H(B
1658: \EG list of integers (process identifier)
1.1 noro 1659: @item timeout
1.2 noro 1660: \JP $B?t(B
1661: \EG number
1.1 noro 1662: @end table
1663:
1664: @itemize @bullet
1.2 noro 1665: \BJP
1.1 noro 1666: @item
1667: $B<1JL;R%j%9%H(B @var{nlist} $B$N%W%m%;%9$N$&$A4{$K=PNO$rJV$7$F$$$k(B
1668: $B%W%m%;%9$N<1JL;R%j%9%H$rJV$9(B.
1.2 noro 1669:
1.1 noro 1670: @item
1671: $BA4$F$N%W%m%;%9$,(B RUN $B>uBV$N$H$-(B, $B$$$:$l$+$N%W%m%;%9$N=*N;$rBT$D(B.
1672: $BC"$7(B, @var{timeout} $B$,;XDj$5$l$F$$$k>l9g(B, @var{timeout} $BIC$@$1BT$D(B.
1.2 noro 1673:
1.1 noro 1674: @item
1675: @code{ox_push_cmd()} $B$G(B @code{SM_popCMO} $B$"$k$$$O(B
1676: @code{SM_popSerializedLocalObject} $B$rAw$C$F$*$-(B, @code{ox_select()} $B$G(B
1677: ready $B>uBV$N%W%m%;%9$rD4$Y$F(B@code{ox_get()} $B$9$k$3$H$G(B,
1678: @code{ox_pop_local()}, @code{ox_pop_cmo()}$B$GBT$A>uBV$KF~$k$N$rKI$0$3$H$,(B
1679: $B$G$-$k(B.
1.2 noro 1680: \E
1681: \BEG
1682: @item
1683: Returns the list of process identifiers on which data is available.
1684:
1685: @item
1686: If all the processes in @var{nlist} are running, it blocks until
1687: one of the processes returns data. If @var{timeout} is specified,
1688: it waits for only @var{timeout} seconds.
1689:
1690: @item
1691: By sending @code{SM_popCMO} or @code{SM_popSerializedLocalObject} with
1692: @code{ox_push_cmd()} in advance and by examining the process status with
1693: @code{ox_select()}, one can avoid a hanging up caused by @code{ox_pop_local()}
1694: or @code{ox_pop_cmo()}. In such a case, data can be received by
1695: @code{ox_get()}.
1696: \E
1.1 noro 1697: @end itemize
1698:
1699: @example
1700: ox_launch();
1701: 0
1702: [220] ox_launch();
1703: 1
1704: [221] ox_launch();
1705: 2
1706: [222] ox_rpc(2,"fctr",x^500-y^500);
1707: 0
1708: [223] ox_rpc(1,"fctr",x^100-y^100);
1709: 0
1710: [224] ox_rpc(0,"fctr",x^10-y^10);
1711: 0
1712: [225] P=[0,1,2];
1713: [0,1,2]
1714: [226] map(ox_push_cmd,P,258);
1715: [0,0,0]
1716: [227] ox_select(P);
1717: [0]
1718: [228] ox_get(0);
1719: [[1,1],[x^4+y*x^3+y^2*x^2+y^3*x+y^4,1],
1720: [x^4-y*x^3+y^2*x^2-y^3*x+y^4,1],[x-y,1],[x+y,1]]
1721: @end example
1722:
1723: @table @t
1.2 noro 1724: \JP @item $B;2>H(B
1725: \EG @item References
1726: @fref{ox_pop_cmo ox_pop_local}, @fref{ox_push_cmd ox_sync}, @fref{ox_get}
1.1 noro 1727: @end table
1728:
1.2 noro 1729: \JP @node ox_flush ,,, $BJ,;67W;;$K4X$9$k4X?t(B
1730: \EG @node ox_flush ,,, Functions for distributed computation
1.1 noro 1731: @subsection @code{ox_flush}
1732: @findex ox_flush
1733:
1734: @table @t
1735: @item ox_flush(@var{id})
1.2 noro 1736: \JP :: $BAw?.%P%C%U%!$N6/@)(B flush
1737: \EG :: Flushes the sending buffer.
1.1 noro 1738: @end table
1739:
1740: @table @var
1741: @item return
1742: 1
1743: @item id
1.2 noro 1744: \JP $B;R%W%m%;%9<1JL;R(B
1745: \EG process identifier
1.1 noro 1746: @end table
1747:
1748: @itemize @bullet
1.2 noro 1749: \BJP
1.1 noro 1750: @item $BDL>o$O%P%C%A%b!<%I$O(B off $B$G$"$j(B, $B%G!<%?(B, $B%3%^%s%IAw?.$4$H$K(B
1751: $BAw?.%P%C%U%!$O(B flush $B$5$l$k(B.
1.2 noro 1752:
1.1 noro 1753: @item $B%P%C%A%b!<%I$O(B @code{"ctrl"} $B%3%^%s%I$N(B @code{"ox_batch"} $B%9%$%C%A(B
1754: $B$G(B on/off $B$G$-$k(B.
1.2 noro 1755:
1.1 noro 1756: @item $B:Y$+$$%G!<%?$rB??tAw$k>l9g$K(B, @code{ctrl("ox_batch",1)}
1757: $B$G%P%C%A%b!<%I$r(B on $B$K$9$k$H(B, $B%P%C%U%!$,$$$C$Q$$$K$J$C$?>l9g$K$N$_(B flush
1758: $B$5$l$k$?$a(B, overhead $B$,>.$5$/$J$k>l9g$,$"$k(B. $B$?$@$7$3$N>l9g$K$O(B, $B:G8e$K(B
1759: @code{ox_flush(@var{id})} $B$r<B9T$7$F(B, $B%P%C%U%!$r6/@)E*$K(B flush $B$9$kI,MW$,(B
1760: $B$"$k(B.
1.2 noro 1761:
1.1 noro 1762: @item @code{ox_pop_cmo}, @code{ox_pop_local} $B$N$h$&$K(B, $B%3%^%s%IAw?.8e(B
1763: $B$?$@$A$K%G!<%?BT$A$KF~$k4X?t$,%O%s%0$7$J$$$h$&(B, $B$3$l$i$N4X?t$NFbIt$G$O(B
1764: $B6/@)(B flush $B$,<B9T$5$l$F$$$k(B.
1.2 noro 1765: \E
1766:
1767: \BEG
1768: @item
1769: By default the batch mode is off and the sending buffer is flushed
1770: at every sending operation of data and command.
1771:
1772: @item
1773: The batch mode is set by @code{"ox_batch"} switch of @code{"ctrl"}.
1774:
1775: @item
1776: If one wants to send many pieces of small data,
1777: @code{ctrl("ox_batch",1)} may decrease the overhead of flush operations.
1778: Of course, one has to call @code{ox_flush(@var{id})} at the end of
1779: the sending operations.
1780:
1781: @item
1782: Functions such as @code{ox_pop_cmo} and @code{ox_pop_local}
1783: enter a waiting mode immediately after sending a command.
1784: These functions always flush the sending buffer.
1785: \E
1.1 noro 1786: @end itemize
1787:
1788: @example
1789: [340] ox_launch_nox();
1790: 0
1791: [341] cputime(1);
1792: 0
1793: 7e-05sec + gc : 4.8e-05sec(0.000119sec)
1794: [342] for(I=0;I<10000;I++)ox_push_cmo(0,I);
1795: 0.232sec + gc : 0.006821sec(0.6878sec)
1796: [343] ctrl("ox_batch",1);
1797: 1
1798: 4.5e-05sec(3.302e-05sec)
1799: [344] for(I=0;I<10000;I++)ox_push_cmo(0,I); ox_flush(0);
1800: 0.08063sec + gc : 0.06388sec(0.4408sec)
1801: [345] 1
1802: 9.6e-05sec(0.01317sec)
1803: @end example
1804:
1805: @table @t
1.2 noro 1806: \JP @item $B;2>H(B
1807: \EG @item References
1808: @fref{ox_pop_cmo ox_pop_local}, @fref{ctrl}
1.1 noro 1809: @end table
1810:
1.2 noro 1811: \JP @node ox_get_serverinfo ,,, $BJ,;67W;;$K4X$9$k4X?t(B
1812: \EG @node ox_get_serverinfo ,,, Functions for distributed computation
1.1 noro 1813: @subsection @code{ox_get_serverinfo}
1814: @findex ox_get_serverinfo
1815:
1816: @table @t
1817: @item ox_get_serverinfo([@var{id}])
1.2 noro 1818: \JP :: server $B$N(B Mathcap, $BF0:nCf$N%W%m%;%9<1JL;R$N<hF@(B
1819: \EG :: Gets server's mathcap and proess id.
1.1 noro 1820: @end table
1821:
1822: @table @var
1823: @item return
1.2 noro 1824: \JP $B%j%9%H(B
1825: \EG list
1.1 noro 1826: @item id
1.2 noro 1827: \JP $B;R%W%m%;%9<1JL;R(B
1828: \EG process identifier
1.1 noro 1829: @end table
1830:
1831: @itemize @bullet
1.2 noro 1832: \BJP
1.1 noro 1833: @item $B0z?t(B @var{id} $B$,$"$k$H$-(B, $B%W%m%;%9<1JL;R(B @var{id} $B$N%W%m%;%9$N(B
1834: Mathcap $B$r%j%9%H$H$7$FJV$9(B.
1835: @item $B0z?t$J$7$N$H$-(B, $B8=:_F0:nCf$N%W%m%;%9<1JL;R$*$h$S$=$N(B Mathcap $B$+$i(B
1836: $B$J$k%Z%"$r(B, $B%j%9%H$H$7$FJV$9(B.
1.2 noro 1837: \E
1838: \BEG
1839: @item If @var{id} is specified, the mathcap of the process whose
1840: identifier is @var{id} is returned.
1841: @item If @var{id} is not specified, the list of @var{[id,Mathcap]}
1842: is returned, where @var{id} is the identifier of a currently active process,
1843: and @var{Mathcap} is the mathcap of the process.
1844: identifier @var{id} is returned.
1845: \E
1.1 noro 1846: @end itemize
1847:
1848: @example
1849: [343] ox_get_serverinfo(0);
1850: [[199909080,Ox_system=ox_sm1.plain,Version=2.991118,HOSTTYPE=FreeBSD],
1851: [262,263,264,265,266,268,269,272,273,275,276],
1852: [[514],[2130706434,1,2,4,5,17,19,20,22,23,24,25,26,30,31,60,61,27,33,40,16,34]]]
1853: [344] ox_get_serverinfo();
1854: [[0,[[199909080,Ox_system=ox_sm1.plain,Version=2.991118,HOSTTYPE=FreeBSD],
1855: [262,263,264,265,266,268,269,272,273,275,276],
1856: [[514],[2130706434,1,2,4,5,17,19,20,22,23,24,25,26,30,31,60,61,27,33,40,16,34]]]],
1857: [1,[[199901160,ox_asir],
1858: [276,275,258,262,263,266,267,268,274,269,272,265,264,273,300,270,271],
1859: [[514,2144202544],
1860: [1,2,3,4,5,2130706433,2130706434,17,19,20,21,22,24,25,26,31,27,33,60],[0,1]]]]]
1861: @end example
1862:
1863: @table @t
1.2 noro 1864: \JP @item $B;2>H(B
1865: \EG @item References
1866: @fref{Mathcap}.
1.1 noro 1867: @end table
1868:
1.2 noro 1869: \JP @node ifplot conplot plot plotover,,, $BJ,;67W;;$K4X$9$k4X?t(B
1870: \EG @node ifplot conplot plot plotover,,, Functions for distributed computation
1.1 noro 1871: @subsection @code{ifplot}, @code{conplot}, @code{plot}, @code{plotover}
1872: @findex ifplot
1873: @findex conplot
1874: @findex plot
1875: @findex plotover
1876:
1877: @table @t
1878: @item ifplot(@var{func} [,@var{geometry}] [,@var{xrange}] [,@var{yrange}] [,@var{id}] [,@var{name}])
1.2 noro 1879: \JP :: 2 $BJQ?t4X?t$N<B?t>e$G$NNmE@$rI=<($9$k(B.
1880: \EG :: Displays real zeros of a bi-variate function.
1.1 noro 1881: @item conplot(@var{func} [,@var{geometry}] [,@var{xrange}] [,@var{yrange}] [,@var{zrange}] [,@var{id}] [,@var{name}])
1.2 noro 1882: \JP :: 2 $BJQ?t4X?t$N<B?t>e$G$NEy9b@~$rI=<($9$k(B.
1883: \EG :: Displays real contour lines of a bi-variate function.
1.1 noro 1884: @item plot(@var{func} [,@var{geometry}] [,@var{xrange}] [,@var{id}] [,@var{name}])
1.2 noro 1885: \JP :: 1 $BJQ?t4X?t$N%0%i%U$rI=<($9$k(B.
1886: \EG :: Displays the graph of a univariate function.
1.1 noro 1887: @item plotover(@var{func},@var{id},@var{number})
1.2 noro 1888: \JP :: $B$9$G$KB8:_$7$F$$$k%&%#%s%I%&$XIA2h$9$k(B.
1889: \EG Plots on the existing window real zeros of a bivariate function.
1.1 noro 1890: @end table
1891:
1892: @table @var
1893: @item return
1.2 noro 1894: \JP $B@0?t(B
1895: \EG integer
1.1 noro 1896: @item func
1.2 noro 1897: \JP $BB?9`<0(B
1898: \EG polynomial
1.1 noro 1899: @item geometry, xrange, yrange, zrange
1.2 noro 1900: \JP $B%j%9%H(B
1901: \EG list
1.1 noro 1902: @item id, number
1.2 noro 1903: \JP $B@0?t(B
1904: \EG integer
1.1 noro 1905: @item name
1.2 noro 1906: \JP $BJ8;zNs(B
1907: \EG string
1.1 noro 1908: @end table
1909:
1910: @itemize @bullet
1.2 noro 1911: \BJP
1.1 noro 1912: @item
1913: @code{ifplot()} $B$O(B, 2 $BJQ?t4X?t(B @var{func} $B$N<B?t>e$G$NNmE@$N(B
1914: $B%0%i%U$NI=<($r9T$&(B. @code{conplot()} $B$O(B, $BF1MM$N0z?t$KBP$7(B,
1915: $BEy9b@~$NI=<($r9T$&(B. @code{plot()} $B$O(B 1 $BJQ?t4X?t$N(B
1916: $B%0%i%U$NI=<($r9T$&(B. Windows $BHG$O8=>u$G$OL$%5%]!<%H$G$"$k(B.
1.2 noro 1917:
1.1 noro 1918: @item
1919: UNIX $BHG$O(B, $B1s3V%W%m%;%9$K$h$j<B8=$5$l$F$$$k(B. $B%3%^%s%I$O(B @samp{ox_plot}
1920: $B$G(B, @code{ox_launch()} $B$K$h$j5/F0$7$F$*$/I,MW$,$"$k(B. @samp{ox_plot}
1921: $B$O(B, @b{Asir} $B$NI8=`%i%$%V%i%j%G%#%l%/%H%j$K$"$k(B.
1.2 noro 1922:
1.1 noro 1923: @item
1924: $B0z?t$NFb(B, @var{func} $B$OI,?\$G$"$k(B. $B$=$NB>$N0z?t$O%*%W%7%g%s$G$"$k(B.
1925: $B%*%W%7%g%s$N7A<0$*$h$S$=$N%G%U%)%k%HCM(B ($B%+%C%3Fb(B) $B$O<!$NDL$j(B.
1.2 noro 1926:
1.1 noro 1927: @table @var
1928: @item geometry
1929: $B%&%#%s%I%&$N%5%$%:$r%I%C%HC10L$G(B @var{[x,y]} $B$G;XDj$9$k(B.
1930: (UNIX $BHG$G$O(B @var{[}@code{300},@code{300}@var{]}. )
1.2 noro 1931:
1.1 noro 1932: @item xrange, yrange
1933: $BJQ?t$NHO0O$N;XDj$G(B, @var{[v,vmin,vmax]} $B$G;XDj$9$k(B.
1934: ($B$$$:$l$NJQ?t$b(B @var{[v},@code{-2},@code{2}@var{]}.)
1935: $B$3$N;XDj$,$J$$>l9g(B, @var{func} $B$K4^$^$l$kJQ?t$NFbJQ?t=g=x$N>e$NJQ?t(B
1936: $B$,(B @samp{x}, $B2<$NJQ?t$,(B @samp{y} $B$H$7$F07$o$l$k(B. $B$3$l$rHr$1$k$?$a$K$O(B
1937: @var{xrange}, @var{yrange} $B$r;XDj$9$k(B. $B$^$?(B, @var{func} $B$,(B 1 $BJQ?t$N(B
1938: $B>l9g(B, $B$3$l$i$N;XDj$OI,?\$H$J$k(B.
1.2 noro 1939:
1.1 noro 1940: @item zrange
1941: @code{conplot()} $B$N>l9g$N$_;XDj$G$-$k(B. $B7A<0$O(B
1942: @var{[v,vmin,vmax} @code{[},@var{step} @code{]}@var{]} $B$G(B, @var{step} $B$,;XDj$5$l(B
1943: $B$?>l9g$K$O(B, $BEy9b@~$N4V3V$,(B @var{(vmax-vmin)/step} $B$H$J$k(B.
1944: (@var{[z},@code{-2},@code{2},@code{16}@var{]}.)
1.2 noro 1945:
1.1 noro 1946: @item id
1947: $B1s3V%W%m%;%9$NHV9f(B, $B$9$J$o$A(B @code{ox_launch()} $B$,JV$7$?HV9f$r;XDj$9$k(B.
1948: ($B0lHV:G6a$K:n$i$l(B, $B$+$D%"%/%F%#%V$J%W%m%;%9$KBP1~$9$kHV9f(B.)
1.2 noro 1949:
1.1 noro 1950: @item name
1951: $B%&%#%s%I%&$NL>A0(B. (@code{Plot}.)
1952: $B@8@.$5$l$?%&%#%s%I%&$N%?%$%H%k$O(B @var{name:n/m} $B$H$J$k(B.
1953: $B$3$l$O(B, $B%W%m%;%9HV9f(B @var{n} $B$N%W%m%;%9$N(B, @var{m} $BHV$N%&%#%s%I%&$r0UL#$9$k(B.
1954: $B$3$NHV9f$O(B, @code{plotover()} $B$GMQ$$$i$l$k(B.
1955: @end table
1.2 noro 1956:
1.1 noro 1957: @item
1958: $B0l$D$N%W%m%;%9>e$GIA2h$G$-$k%&%#%s%I%&$N?t$O:GBg(B 128 $B8D$G$"$k(B.
1.2 noro 1959:
1.1 noro 1960: @item
1961: @code{plotover()} $B$O(B, $B;XDj$7$?%&%#%s%I%&>e$K(B, $B0z?t$G$"$k(B 2 $BJQ?tB?9`<0$N(B
1962: $BNmE@$r>e=q$-$9$k(B.
1963:
1964: @item
1965: $BIA2h=*N;8e$N%&%#%s%I%&>e$G(B, $B%^%&%9$N:8%\%?%s$r2!$7$J$,$i$N%I%i%C%0(B
1966: $B$GHO0O$r;XDj$7%\%?%s$rN%$9$H?7$?$J%&%#%s%I%&$,@8@.$5$l(B, $B;XDj$7$?(B
1967: $BHO0O$,3HBg$7$FI=<($5$l$k(B. $B%I%i%C%0$O:8>e$+$i1&2<$X$H9T$&(B.
1968: $B%I%i%C%0$r;O$a$?8e%-%c%s%;%k$9$k>l9g$O(B, $B%^%&%9%]%$%s%?$r;OE@$N>e$+(B
1969: $B:8$K;}$C$F$$$C$F%\%?%s$rN%$;$P$h$$(B. $B?7$7$$%&%$%s%I%&$N7A$O(B, $B;XDj(B
1970: $BNN0h$HAj;w$G(B, $B:GBgJU$,(B, $B85$N%&%#%s%I%&$N:GBgJU$H0lCW$9$k$h$&$K(B
1971: $BDj$a$i$l$k(B. $B0J2<$G@bL@$9$k(B @code{precise} $B$,(B on $B$N>l9g(B,
1972: $BA*Br$7$?NN0h$,F10l(B window $B>e$G=q$-D>$5$l$k(B.
1973:
1974: @item
1975: $B%&%#%s%I%&Fb$G1&%\%?%s$r2!$9$H(B, $B$=$NE@$N:BI8$,%&%#%s%I%&$N2<It$KI=<($5$l$k(B.
1976:
1977: @item
1978: @code{conplot()} $B$G@8@.$7$?%&%#%s%I%&$K$*$$$F(B, $B%&%#%s%I%&$N1&B&$N%^!<%+$r(B
1979: $BCf%\%?%s$G%I%i%C%0$9$k$H(B, $BBP1~$9$kEy9b@~$N?'$,JQ$o$j(B, $B1&>e$N(B
1980: $B%&%#%s%I%&$KBP1~$9$k%l%Y%k$,I=<($5$l$k(B.
1981:
1982: @item
1.2 noro 1983: UNIX $BHG$G$O$$$/$D$+$N%\%?%s$K$h$j(B
1.1 noro 1984: $B$$$/$D$+$N@_DjJQ99(B, $BA`:n$,$G$-$k(B. UNIX $BHG$G$O<!$N%\%?%s$,$"$k(B.
1985:
1986: @table @code
1987: @item quit
1988: window $B$rGK2u$9$k(B. $B7W;;$rCfCG$9$k>l9g(B, @code{ox_reset()} $B$rMQ$$$k(B.
1.2 noro 1989:
1.1 noro 1990: @item wide ($B%H%0%k(B)
1991: $B8=:_$NI=<(ItJ,$r=D2#3F(B 10 $BG\$7$?NN0h$rI=<($9$k(B. $B8=:_I=<($5$l$F$$$kHO0O$O(B
1992: $B$3$NI=<($K$*$$$FCf1{It$KD9J}7A$G<($5$l$k(B. $B$3$NI=<($GHO0O;XDj$r9T$&$H(B,
1993: $B$=$NHO0O$,?7$7$$%&%#%s%I%&$KIA2h$5$l$k(B.
1.2 noro 1994:
1.1 noro 1995: @item precise ($B%H%0%k(B)
1996: $BA*BrNN0h$r(B, $B@0?t1i;;$K$h$j(B, $B$h$j@53N$K:FIA2h$9$k(B. $B$3$l$O(B, @var{func} $B$,(B
1997: $BM-M}?t78?t$N(B 2 $BJQ?tB?9`<0$N>l9g$K$N$_M-8z$G$"$k(B. $B$3$N%b!<%I$G$O(B Sturm $BNs(B
1998: $B$HFsJ,K!$K$h$j(B, $B6h4VFb$NNmE@$N8D?t$r@53N$K5a$a$F$$$/$b$N$G(B, $B%G%U%)%k%H$N(B
1999: $B7W;;K!$h$j$b@53N$JIA2h$,4|BT$G$-$k(B. $B$?$@$7(B, $BIA2h;~4V$OM>7W$K$+$+$k>l9g$,(B
2000: $BB?$$(B. $B$3$N@bL@$+$iL@$i$+$J$h$&$K(B, $B$3$N5!G=$OM-M}?t78?t$NB?9`<0$NIA2h$KBP(B
2001: $B$7$F$N$_M-8z$G$"$k(B. ((x^2+y^2-1)^2 $B$NIA2h$G;n$7$F$_$h(B.)
2002:
2003: @item formula
2004: $BBP1~$9$k<0$rI=<($9$k(B.
1.2 noro 2005:
1.1 noro 2006: @item noaxis ($B%H%0%k(B)
2007: $B:BI8<4$r>C$9(B.
2008: @end table
2009:
2010: @item
2011: @samp{ox_plot} $B$,5/F0$5$l$k%^%7%s$K$h$C$F$O(B, $B%9%?%C%/$rBgNL$K;HMQ$9$k(B
2012: $B$b$N$b$"$k$?$a(B, @samp{.cshrc} $B$G%9%?%C%/%5%$%:$rBg$-$a(B (16MB $BDxEY(B) $B$K(B
2013: $B;XDj$7$F$*$/$N$,0BA4$G$"$k(B. $B%9%?%C%/%5%$%:$O(B @code{limit stacksize 16m}
2014: $B$J$I$H;XDj$9$k(B.
2015:
2016: @item
2017: @code{X} $B$G$O!"%&%$%s%I%&$N3FItJ,$K$D$$$F(B resource $B$K$h$j(B
2018: $B?'IU$1$d!"%\%?%s$N7A$rJQ$($k$3$H$,$G$-$k!#(B
2019: resource $B$N;XDj$N;EJ}$O0J2<$NDL$j!#!J%G%U%)%k%H$r<($7$F$*$/!K(B
2020: @code{plot*form*shapeStyle} $B$O!"(B@t{rectangle, oval, ellipse, roundedRectangle}
2021: $B$,!";XDj$G$-$k!#(B
1.2 noro 2022: \E
2023: \BEG
2024: @item
2025: Function @code{ifplot()} draws a graph of real zeros of a bi-variate
2026: function.
2027: Function @code{conplot()} plots the contour lines for a same argument.
2028: Function @code{plot()} draws the graph of a uninivariate function.
2029: These functions are available on UNIX version (on @code{X11}).
2030:
2031: @item
2032: The plotting functions for UNIX version are realized on remote process
2033: facilities described previously.
2034: The command for this is @samp{ox_plot} in @b{Asir} root directory.
2035: Of course, it must be activated by @code{ox_launch()}.
2036:
2037: @item
2038: Argument @var{func} is indispensable. Other arguments are optional.
2039: The format of optional arguments and their default values (parenthesized)
2040: are listed below.
2041:
2042: @table @var
2043: @item geometry
2044: Window size is specified by @var{[x,y]} in unit `dot.'
2045: (@var{[}@code{300},@code{300}@var{]} for UNIX version;
2046:
2047: @item xrange, yrange
2048: Value ranges of the variables are specified by @var{[v,vmin,vmax]}.
2049: (@var{[v},@code{-2},@code{2}@var{]} for each variable.)
2050: If this specification is omitted, the indeterminate having the higher
2051: order in @var{func} is taken for @samp{x} and the one with lower order
2052: is taken for @samp{y}. To change this selection, specify explicitly
2053: by @var{xrange} and/or @var{yrange}.
2054: For an uni-variate function, the specification is mandatory.
2055:
2056: @item zrange
2057: This specification applies only to @code{conplot()}. The format is
2058: @var{[v,vmin,vmax} @code{[},@var{step} @code{]}@var{]}.
2059: If @var{step} is specified, the height difference of contours is set to
2060: @var{(vmax-vmin)/step}.
2061: (@var{[z},@code{-2},@code{2},@code{16}@var{]}.)
2062:
2063: @item id
2064: This specifies the number of the remote process by which you wish
2065: to draw a graph.
2066: (The number for the newest active process.)
2067:
2068: @item name
2069: The name of the window.
2070: (@code{Plot}.)
2071: The created window is titled @var{name:n/m} which means the @var{m}-th
2072: window of the process with process number @var{n}.
2073: These numbers are used for @code{plotover()}.
2074: @end table
2075:
2076: @item
2077: The maximum number of the windows that can be created on a process is
2078: 128.
2079:
2080: @item
2081: Function @code{plotover()} superposes reals zeros of its argument
2082: bi-variate function onto the specified window.
2083:
2084: @item
2085: Enlarged plot can be obtained for rectangular area which is specified,
2086: on an already existing window with a graph,
2087: by dragging cursor with the left button of mouse
2088: from the upper-left corner to lower-right corner
2089: and then releasing it.
2090: Then, a new window is created whose shape is similar to the specified
2091: area and whose size is determined so that the largest
2092: side of the new window has the same size of the largest side of
2093: the original window.
2094: If you wish to cancel the action, drag the cursor to any point
2095: above or left of the starting point.
2096:
2097: This facility is effective when @code{precise} button switch is
2098: inactive. If @code{precise} is selected and active, the area specified
2099: by the cursor dragging will be rewritten on the same window. This
2100: will be explained later.
2101: @item
2102: A click of the right button will display the current coordinates of
2103: the cursor at the bottom area of the window.
2104:
2105: @item
2106: Place the cursor at any point in the right marker area on
2107: a window created by @code{conplot()},
2108: and drag the cursor with the middle mutton. Then you will find the contour lines changing
2109: their colors depending on the movement of the cursor and the
2110: corresponding height level displayed on the upper right corner of
2111: the window.
2112:
2113: @item
2114: Several operations are available on the window: by button operations
2115: for UNIX version, and pull-down menus for Macintosh version.
2116:
2117: @table @code
2118: @item quit
2119: Destroys (kills) the window. While computing, quit the current
2120: computation.
2121: If one wants to interrupt the computation, use @code{ox_reset()}.
2122:
2123: @item wide (toggle)
2124: Will display, on the same window, a new area enlarged by 10 times
2125: as large as the current area for both width-direction and
2126: height-direction. The current area will be indicated by a rectangle
2127: placed at the center. Area specification by dragging the cursor will
2128: create a new window with a plot of the graph in the specified area.
2129: @item precise (toggle)
2130: When selected and active,
2131: @code{ox_plot} redraws the specified area more precisely by integer
2132: arithmetic.
2133: This mode uses bisection method based on Sturm sequence computation to
2134: locate real zeros precisely. More precise plotting can be expected
2135: by this technique than by the default plotting technique, at the expense
2136: of significant increase of computing time. As you see by above
2137: explanation, this function is only effective to polynomials with
2138: rational coefficients.
2139: (Check how they differ for (x^2+y^2-1)^2.)
2140:
2141: @item formula
2142: Displays the expression for the graph.
2143:
2144: @item noaxis (toggle)
2145: Erase the coordinates.
2146: @end table
2147:
2148: @item
2149: Program @samp{ox_plot} may consume much stack space depending on
2150: which machine it is running.
2151: You are recommended to set the stack size to about 16MB as large
2152: in @samp{.cshrc} for safe.
2153: To specify the size, put @code{limit stacksize 16m} for an example.
2154:
2155: @item
2156: You can customize various resources of a window on @code{X}, e.g.,
2157: coloring, shape of buttons etc.
2158: The default setting of resources is shown below.
2159: For @code{plot*form*shapeStyle} you can select among
2160: @t{rectangle}, @t{oval}, @t{ellipse}, and @t{roundedRectangle}.
2161: \E
2162:
1.1 noro 2163: @example
2164: plot*background:white
2165: plot*form*shapeStyle:rectangle
2166: plot*form*background:white
2167: plot*form*quit*background:white
2168: plot*form*wide*background:white
2169: plot*form*precise*background:white
2170: plot*form*formula*background:white
2171: plot*form*noaxis*background:white
2172: plot*form*xcoord*background:white
2173: plot*form*ycoord*background:white
2174: plot*form*level*background:white
2175: plot*form*xdone*background:white
2176: plot*form*ydone*background:white
2177: @end example
2178: @end itemize
2179:
2180: @example
2181: @end example
2182:
2183: @table @t
1.2 noro 2184: \JP @item $B;2>H(B
2185: \EG @item References
1.4 noro 2186: @fref{ox_launch ox_launch_nox ox_shutdown}, @fref{ox_reset ox_intr register_handler}
1.1 noro 2187: @end table
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>