[BACK]Return to stackmachine.tex CVS log [TXT][DIR] Up to [local] / OpenXM / doc / OpenXM-specs

Annotation of OpenXM/doc/OpenXM-specs/stackmachine.tex, Revision 1.3

1.1       noro        1: //&jp \section{ OX スタックマシン }
                      2: //&eg \section{ OX stackmachine }  (This section has not yet been translated.)
                      3:
                      4: /*&jp
                      5: この節では, OX スタックマシン operator の説明
                      6: (TCP/IP ソケット上での標準 encoding 法 を用いる),
                      7: および, サンプルサーバとリンクする場合または
                      8: open XM ライブラリとしてリンクして使用する場合の
                      9: ための C の関数の仕様を説明する.
                     10:
                     11: 説明の前に, OX サーバスタックマシンの動作の原則を
                     12: 説明しておく.
                     13: サーバスタックマシンは,
                     14: {\tt SM\_pop*} 系のスタックマシンコマンドがこないかぎり,
                     15: 自発的にメッセージを送信することはない.
                     16: この原則に基づいて分散計算のプログラミングをおこなう.
                     17: イベントドリブンなプログラム法とはちがうことに
                     18: 注意しよう.
1.2       noro       19: */
1.1       noro       20:
1.2       noro       21: /*&eg
                     22: In this section we describe the OX stack machine operators.  In
                     23: the descriptions OX messages are represented by th standard encoding
                     24: scheme on TCP/IP sockets.  In principle, an OX stack machine never
                     25: sends data to the output stream unless it receives {\tt SM\_pop*}
                     26: commands.  Note that the programming style should be different from
                     27: that for event-driven programming.
                     28: */
1.1       noro       29:
1.2       noro       30: //&jp \subsection{サーバスタックマシン }
                     31: //&eg \subsection{Server stack machine}
1.1       noro       32:
1.2       noro       33: /*&jp
1.1       noro       34: サンプルサーバである {\tt oxserver00.c}
                     35: は以下の仕様の C の関数を用意して,
                     36: {\tt nullstackmachine.c } を置き換えれば一応動作するはずである.
1.2       noro       37: */
                     38: /*&eg
                     39: {\tt oxserver00.c} is implemented as a sample server.
                     40: If you want to implement you own server,
                     41: write the following functions and use them instead of
                     42: those in {\tt nullstackmachine.c }.
                     43: */
1.1       noro       44:
1.2       noro       45: //&jp \subsubsection{サーバスタックマシンのグループ SMobject/Basic0 に属するオペレータ}
                     46: //&eg \subsubsection{Operators in the group SMobject/Basic0}
1.1       noro       47:
1.2       noro       48: /*&jp
1.1       noro       49: \noindent
1.2       noro       50: サーバスタックマシンは最低で1本のスタック
                     51: \begin{verbatim}
                     52: Object xxx_OperandStack[SIZE];
                     53: \end{verbatim}
                     54: をもつ.  ここで, {\tt Object} はそのシステム固有の Object 型で構わない.
                     55: CMObject は各サーバ固有のローカルオブジェクトに変換してスタックへプッ
                     56: シュしてよい.  ただし変換, 逆変換を合成したものは恒等写像であることが
                     57: のぞましい.  CMObject をどのように (local) Object に変換するか, Object
                     58: が受け付けるメッセージの定義は,各システムが独自にきめて文書化しておく
                     59: ものとする.  つまりすべてのメッセージは, private である.  たとえば,
                     60: {\tt add } のような基本的な メッセージにたいしても, OX スタックマシン
                     61: はなにもきめていない.  将来的には open math \cite{openmath} のように
                     62: CMObject に対する最大公約数的なメッセージの仕様をcontent dictionary
                     63: (CD) の形で定義したい.
                     64:
                     65: 以下, \verb+ xxx_ + は誤解の恐れがないときは省略する.
                     66: \verb+ xxx_ + は local サーバシステムに固有の識別子である.
                     67: {\tt Asir} の場合は \verb+ Asir_ + を用いる.  {\tt kan/sm1} の場合は
                     68: \verb+ Sm1_ + を用いる.  関数名, タグ名は長いので省略形を用いてもよい.
                     69:
                     70: 以下では次のようにパケットを記述する.  各フィールドは,
                     71: \fbox{データ型 \quad  データ} なる形式
                     72: で書く.  たとえば, {\tt int32 OX\_DATA} は 32 bit network byte order
                     73: の数字 {\tt OX\_DATA}という意味である.  ``イタリックで書かれているフィー
                     74: ルドは,定義が別のところでなされているか解釈に誤解のないような自然言語
                     75: で説明されている object を表す.''  たとえば, {\it String commandName}
                     76: は, String データ型の local object {\it commandName} を意味する.  (サー
                     77: バスタックマシン上の object は, CMO 形式の objectとは限らないことに注
                     78: 意.  CMO 形式で書いてあっても, それはサーバスタックマシンのlocal 形式
                     79: でスタック上にあると解釈して下さい.)
1.1       noro       80:
1.2       noro       81: すべてのサーバスタックマシンは以下の関数を実装していないといけない.
1.3     ! noro       82:
1.2       noro       83: */
1.1       noro       84:
1.2       noro       85: /*&eg
1.1       noro       86: \noindent
1.2       noro       87: Any OX stack machine has at least one stack.
1.1       noro       88: \begin{verbatim}
                     89: Object xxx_OperandStack[SIZE];
                     90: \end{verbatim}
1.2       noro       91: Here {\tt Object} may be local to the system {\tt xxx} wrapped by the stack
                     92: machine.
                     93: That is, the server may translate CMObjects into local its
                     94: objects and push them onto the stack.  However, it is preferable that
                     95: the composition of such a translation and its inverse is equal to the
                     96: identity map. The translation scheme is called the phrase book of the
                     97: server and it should be documented for each stack machine.  In OpenXM,
                     98: any message is private.  In future we will provide a content
                     99: dictionary (CD; see OpenMath \cite{openmath}) for basic specifications
                    100: of CMObjects.
                    101:
                    102: In the following, \verb+ xxx_ + may be omitted if no confusion occurs.
                    103: As the names of functions and tags are long, one may use abbreviated
                    104: names.  Message packets are represented as follows.  Each field is
                    105: shown as \fbox{data type \quad data}.  For example {\tt int32
                    106: OX\_DATA} denotes a number {\tt OX\_DATA} which is represented by a 32
                    107: bit network byte order.  If a field is displayed by italic characters,
                    108: it should be defined elsewhere or its meaning should be clear.  For
                    109: example {\it String commandName} denotes a local object {\it
                    110: commandName} whose data type is String.  Note that an object on the
                    111: stack may have a local data type even if it is represented as CMO.
1.1       noro      112:
1.2       noro      113: Any server stack machine has to implement the following operations.
                    114: */
1.1       noro      115:
                    116: \begin{enumerate}
1.2       noro      117: \item
                    118: /*&jp
                    119: CMObject/Basic0 の CMO データのうち必須のもの, {\tt CMO\_ERROR2}, {\tt
                    120: CMO\_NULL}, {\tt CMO\_INT32}, {\tt CMO\_STRING}, {\tt CMO\_LIST}がおく
                    121: られて来た場合それをスタックに push する.  たとえば, {\tt CMO\_NULL}
                    122: あるいは {\tt CMO\_String} の場合次のようになる.
                    123: */
                    124: /*&eg
                    125: Any server should accept CMObjects in the group CMObject/Basic0.
                    126: The server pushes such data onto the stack.
                    127: The following examples show the states of the stack after receiving
                    128: {\tt CMO\_NULL} or {\tt CMO\_String} respectively.
                    129: */
1.1       noro      130:
1.2       noro      131: Request:
1.1       noro      132: \begin{tabular}{|c|c|}  \hline
                    133: {\tt int32 OX\_DATA} & {\tt int32 CMO\_NULL} \\
                    134: \hline
                    135: \end{tabular}
1.2       noro      136:
                    137: Stack after the request:
1.1       noro      138: \begin{tabular}{|c|}  \hline
                    139: {\it NULL} \\
                    140: \hline
                    141: \end{tabular}
                    142:
1.3     ! noro      143: Result:  none.
1.2       noro      144:
                    145: Request:
1.1       noro      146: \begin{tabular}{|c|c|c|c|c|c|}  \hline
                    147: {\tt int32 OX\_DATA} & {\tt int32 CMO\_String} &{\tt int32} {\rm size}
                    148: &{\tt byte} {\rm s1} & $\cdots$ &{\tt byte} {\rm ssize}\\
                    149: \hline
                    150: \end{tabular}
1.2       noro      151:
                    152: Stack after the request:
1.1       noro      153: \begin{tabular}{|c|}  \hline
                    154: {\it String s} \\
                    155: \hline
                    156: \end{tabular}
                    157:
1.3     ! noro      158: Result:  none.
1.2       noro      159:
                    160: //&jp CMO データの受け取りに失敗した時のみ  \\
                    161: //&eg If the server fails to receive a CMO data,
1.1       noro      162: \begin{tabular}{|c|c|c|}  \hline
                    163: {\tt int32 OX\_DATA} & {\tt int32 CMO\_ERROR2} & {\it CMObject} ob\\
                    164: \hline
                    165: \end{tabular}
                    166: \\
1.2       noro      167: /*&jp
1.1       noro      168: をスタックへ push する.
                    169: 現在のところ, ob には, \\
                    170: \centerline{
                    171: [{\sl Integer32} OX パケット番号, {\sl Integer32} エラー番号,
                    172: {\sl CMObject} optional 情報]
                    173: }
                    174: なるリストを入れる (CMO 形式でかいてあるが, これはサーバ独自の形式でよい.
                    175: CMO として送出されるときこのような形式でないといけないという意味である.)
1.2       noro      176: */
                    177: /*&eg
                    178: is pushed onto the stack.
                    179: Currently ob is a list\\
                    180: \centerline{
                    181: [{\sl Integer32} OX serial number, {\sl Integer32} error code,
                    182: {\sl CMObject} optional information]
                    183: }
                    184: */
1.1       noro      185:
                    186: \item
                    187: \begin{verbatim}
1.2       noro      188: SM_mathcap
1.1       noro      189: \end{verbatim}
1.2       noro      190: /*&jp
                    191: このサーバの mathcap をもどす (termcap のまね).  サーバのタイプ, サー
                    192: バスタックマシンの能力を知ることができる.  C 言語で実装する場合は,
                    193: mathCap の構造体をシステム毎にきめるものとし,この関数はその構造体への
                    194: ポインタを戻す.  (open sm1 では {\tt struct mathCap} を用いている.
                    195: */
                    196: /*&eg
1.3     ! noro      197: It requests a server to push the mathcap of the server.
1.2       noro      198: The mathcap is similar to the termcap. One can know the server type
                    199: and the capability of the server from the mathcap.
                    200: */
1.1       noro      201: @plugin/mathcap.h)
1.2       noro      202:
                    203: Request:
1.1       noro      204: \begin{tabular}{|c|c|}  \hline
                    205: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_mathcap}  \\
                    206: \hline
                    207: \end{tabular}
1.2       noro      208:
1.3     ! noro      209: Stack after the request:
1.1       noro      210: \begin{tabular}{|c|c|}  \hline
                    211: {\tt int32 OX\_DATA} & {\sl Mathcap}  mathCapOb \\
                    212: \hline
                    213: \end{tabular}
                    214:
1.3     ! noro      215: Result: none.
        !           216:
1.1       noro      217: \item
                    218: \begin{verbatim}
1.2       noro      219: SM_setMathCap
1.1       noro      220: \end{verbatim}
1.2       noro      221: /*&jp
                    222: 受け取った Mathcap {\tt m} を自分のシステムに設定して, 相手側が理解不
                    223: 能な CMO をおくらないようにする.  C 言語で実装する場合は, mathCap の構
                    224: 造体をシステム毎にきめるものとし,この関数はその構造体へのポインタを引
                    225: 数とする.  (open sm1 では {\tt struct mathCap} を用いている.
                    226: */
                    227: /*&eg
1.3     ! noro      228: It requests a server to register the peer's mathcap {\tt m} in the server.
1.2       noro      229: The server can avoid to send OX messages unknown to its peer.
                    230: */
1.1       noro      231: @plugin/mathcap.h)
1.2       noro      232:
                    233: Request:
1.1       noro      234: \begin{tabular}{|c|c|}  \hline
                    235: {\tt int32 OX\_DATA} & {\sl Mathcap} m  \\ \hline
                    236: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_setMathCap}  \\
                    237: \hline
                    238: \end{tabular}
1.2       noro      239:
1.3     ! noro      240: Result:  none.
1.2       noro      241: /*&jp
                    242: \noindent
1.1       noro      243: 注意: mathcap は一般にクライアント主体で設定する.
                    244: クライアントがサーバに {\tt SM\_mathcap} をおくり,
                    245: サーバ側の mathcap を得る.
                    246: それを, クライアントはそのサーバに付随した mathcap として
                    247: 設定する.
                    248: 次に, クライアントはサーバに自分の mathcap を
                    249: {\tt SM\_setMathCap} でおくり, 自分の mathcap を設定させる.
1.2       noro      250: */
                    251: /*&eg
                    252: \noindent
                    253: Remark: In general the exchange of mathcaps is triggered by a client.
                    254: A client sends {\tt SM\_mathcap} to a server and obtains the server's
                    255: mathcap. Then the client registers the mathcap. Finally the client
                    256: sends its own mathcap by {\tt SM\_setMathCap} and the server
                    257: registers it.
                    258: */
1.1       noro      259:
                    260: \item
                    261: \begin{verbatim}
1.2       noro      262: SM_executeStringByLocalParser
1.1       noro      263: \end{verbatim}
1.2       noro      264: /*&jp
1.3     ! noro      265: 文字列 {\tt s} を stack から pop し,
        !           266: その文字列をシステム固有の文法(サーバスタックマシンの組み込みローカ
        !           267: ル言語)にしたがったコマンドとして実行する.  コマンドの実行の結
1.2       noro      268: 果の最後に戻り値があるときは, {\tt OperandStack} に戻り値を push する.
1.3     ! noro      269: OpenXM では, 現在のところ関数名の標準化はおこなっていない.
1.2       noro      270: この関数および {\tt popString} の機能を実現すれば, 最低限の open XM の
                    271: サーバになれる.  実装では, まずこの二つの関数の機能を実現すべきである.
                    272: */
                    273: /*&eg
1.3     ! noro      274: It requests a server to pop a character string {\tt s}, to
        !           275: parse it by the local parser of the stack machine,  and
        !           276: to interprete by the local interpreter.
1.2       noro      277: If the exececution produces a result, it is pushed onto
                    278: {\tt OperandStack}.
                    279: If an error has occured,  Error2 Object is pushed onto the stack.
                    280: OpenXM does not provide standard function names.
                    281: If this operation and {\tt SM\_popString} is implemented, the stack machine
                    282: can be used as an OX server.
                    283: */
                    284:
                    285: Stack before the request:
1.1       noro      286: \\
                    287: \begin{tabular}{|c|}  \hline
                    288: {\it String commandString} \\
                    289: \hline
                    290: \end{tabular}
1.2       noro      291:
                    292: Request:
1.1       noro      293: \begin{tabular}{|c|c|}  \hline
                    294: {\tt int32 OX\_COMMAND}& {\tt int32 SM\_executeStringByLocalParser} \\
                    295: \hline
                    296: \end{tabular}
1.2       noro      297:
1.3     ! noro      298: Result:  none.
1.2       noro      299: /*&jp
                    300: \noindent
                    301: 参考: \  実行前のスタックのデータは,
                    302: {\it String commandString} なる local stackmachine の object としてス
                    303: タック上にあるが, TCP/IP の通信路では, 次のようなデータがまずながれて
1.1       noro      304: {\it commandName} がスタックに push される:
1.2       noro      305: */
                    306: /*&eg
                    307: \noindent
                    308: Remark: Before this request, one has to push {\it String commandString}
                    309: onto the stack. It is done by sending the following OX data message.
                    310: */
1.1       noro      311: \begin{tabular}{|c|c|c|}  \hline
                    312: {\tt int32 OX\_DATA} & {\tt int32 CMO\_string} & {\it size and the string commandString} \\
                    313: \hline
                    314: \end{tabular}
                    315:
                    316: \item
                    317: \begin{verbatim}
1.2       noro      318: SM_executeStringByLocalParserInBatchMode
1.1       noro      319: \end{verbatim}
1.2       noro      320: /*&jp
                    321: スタックに副作用がない(スタックにたいしてなんの操作もしない)ことを除き
                    322: 上とまったく同じ関数である.  エラーの時のみ, Error2 Object をスタック
                    323: へプッシュする.
                    324: */
                    325: /*&eg
                    326: This is the same request as {\tt SM\_executeStringByLocalParser}
                    327: except that it does not modify the stack. It pushes an Error2 Object
                    328: if an error has occured.
                    329: */
1.1       noro      330: \item
                    331: \begin{verbatim}
1.2       noro      332: SM_popString
                    333: \end{verbatim}
                    334: /*&jp
                    335: {\tt OperandStack} より Object を pop し, それを xxx の出力規則にしたがい文
                    336: 字列型に変換して送信する.  スタックが空のときは, {\tt (char *)NULL} を戻す.
1.3     ! noro      337: 文字列は TCP/IP stream へ CMO のデー
1.2       noro      338: タとして送信する.  エラーの場合は {\tt CMO\_ERROR2} を戻すべきである.
                    339: */
                    340: /*&eg
1.3     ! noro      341: It requests a server to pop an object from {\tt OperandStack},
1.2       noro      342: to convert it into a character string according to the output format
                    343: of the local system, and to send the character string via TCP/IP stream.
                    344: {\tt (char *)NULL} is returned when the stack is empty.
                    345: The returned strings is sent as a CMO string data.
                    346: {\tt CMO\_ERROR2} should be returned if an error has occured.
                    347: */
                    348:
                    349: Stack before the request:
1.1       noro      350: \begin{tabular}{|c|}  \hline
                    351: {\it Object} \\
                    352: \hline
                    353: \end{tabular}
1.2       noro      354:
                    355: Request:
1.1       noro      356: \begin{tabular}{|c|c|}  \hline
                    357: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_popString} \\
                    358: \hline
                    359: \end{tabular}
1.2       noro      360:
                    361: Result:
1.1       noro      362: \begin{tabular}{|c|c|c|}  \hline
                    363: {\tt int32 OX\_DATA} & {\tt int32 CMO\_STRING} & {\it size and the string s} \\
                    364: \hline
                    365: \end{tabular}
                    366:
                    367: \item
                    368: \begin{verbatim}
1.2       noro      369: SM_getsp
1.1       noro      370: \end{verbatim}
1.2       noro      371: /*&jp
                    372: 現在のスタックポインタの位置をもどす.  スタート時点での位置は 0 であり,
                    373: object が push されたばあい, 1 づつ増えるものとする.
                    374: */
                    375: /*&eg
1.3     ! noro      376: It requests a server to push the current stack pointer onto the stack.
1.2       noro      377: The stack pointer is represented by a non-negative integer.
                    378: Its initial value is 0 and a push operation increments the
                    379: stack pointer by 1.
                    380: */
                    381:
                    382: Stack before the request:
1.1       noro      383: \begin{tabular}{|c|}  \hline
                    384: {\it Object} \\
                    385: \hline
                    386: \end{tabular}
1.2       noro      387:
                    388: Request:
1.1       noro      389: \begin{tabular}{|c|c|}  \hline
                    390: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_getsp} \\
                    391: \hline
                    392: \end{tabular}
1.2       noro      393:
1.3     ! noro      394: Stack after the request:
1.1       noro      395: \begin{tabular}{|c|c|c|}  \hline
                    396: {\tt int32 OX\_DATA} & {\tt int32 CMO\_INT32} & {\it stack pointer value} \\
                    397: \hline
                    398: \end{tabular}
                    399:
1.3     ! noro      400: Result:  none.
        !           401:
1.1       noro      402: \item
                    403: \begin{verbatim}
1.2       noro      404: SM_dupErrors
1.1       noro      405: \end{verbatim}
1.2       noro      406: /*&jp
                    407: スタック上のエラーオブジェクトをリストにして戻す.  スタック自体は変化
                    408: させない.
                    409: */
                    410: /*&eg
1.3     ! noro      411: It requests a server to push a list object containing all error objects on the stack.
1.2       noro      412: */
                    413:
                    414: Stack before the request:
1.1       noro      415: \begin{tabular}{|c|}  \hline
                    416: {\it Object} \\
                    417: \hline
                    418: \end{tabular}
1.2       noro      419:
                    420: Request:
1.1       noro      421: \begin{tabular}{|c|c|}  \hline
                    422: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_dupErrors} \\
                    423: \hline
                    424: \end{tabular}
1.2       noro      425:
1.3     ! noro      426: Stack after the request:
1.1       noro      427: \begin{tabular}{|c|c|c|}  \hline
                    428: {\tt int32 OX\_DATA} & {\sl CMObject} \ a list of errors\\
                    429: \hline
                    430: \end{tabular}
1.3     ! noro      431:
        !           432: Result: none.
1.1       noro      433: \end{enumerate}
                    434:
                    435: \medbreak
                    436: \noindent
1.2       noro      437: /*&jp
1.1       noro      438: {\bf 例}: \
                    439: mathcap の問い合わせに対して, {\tt ox\_sm1} は次のように答える.
1.2       noro      440: */
                    441: /*&eg
                    442: {\bf Example}: \
                    443: {\tt ox\_sm1} returns the following data as its mathcap.
                    444: */
1.1       noro      445: %%Prog: [(cmoMathCap)] extension ::
                    446: \begin{verbatim}
                    447: Class.mathcap
                    448:  [ [199909080 , $Ox_system=ox_sm1.plain$ , $Version=2.990911$ ,
                    449:     $HOSTTYPE=i386$ ]  ,
                    450:    [262 , 263 , 264 , 265 , 266 , 268 , 269 , 272 , 273 , 275 , 276 ]  ,
                    451:    [[514] , [2130706434 , 1 , 2 , 4 , 5 , 17 , 19 , 20 , 22 , 23 , 24 ,
                    452:              25 , 26 , 30 , 31 , 60 , 61 , 27 , 33 , 40 , 34 ]]]
                    453: \end{verbatim}
                    454:
1.2       noro      455: /*&jp
                    456: mathcap は 3つの要素をもつリストである.  まづ, 最初の要素を見よう.
                    457: Ox\_system は open xxx システム名である.  読み込むライブラリがちがって
                    458: いて, 関数名(または シンボル)の意味がちがうときはこの名前もかえる. た
                    459: とえば, open math の basic content dictionary 対応の関数定義マクロを読
                    460: みこんだ sm1 は, ox\_sm1\_basicCD なる名前にする.  HOSTTYPE値は, CPU
                    461: の種類をあらわしunix では環境変数\verb+$HOSTTYPE+ の値である.  2 番目
                    462: の要素は 利用可能な SM コマンドをあつめたリストである.  3 番目のリスト
                    463: は, 処理可能な数学データの形式, およびCMOの場合なら処理可能なCMOのタグ
                    464: のリストが続く.  上の例では, 514 は {\tt OX\_DATA} をあらわし, 数学デー
                    465: タのフォマットは(サイズ情報なしの) CMO であることを示す.
                    466: */
                    467: /*&eg
                    468: A mathcap has three components. The first one contains informations
                    469: to identify the system and hosts on which the application runs.
                    470: In the above example, Ox\_system denotes the system name.
                    471: HOSTTYPE represents the OS type and taken from \verb+$HOSTTYPE+
                    472: enviroment variable.
                    473: The second component consists of avaiable SM commands.
                    474: The third component is a list of pairs. Each pair consists
                    475: of an OX message tag and the available message tags.
                    476: Again in the above example, 514 is the value of {\tt OX\_DATA}
                    477: and it indicates that the server accepts CMO (without size information)
                    478: as mathematical data messages. In this case the subsequent
                    479: list represents available CMO tags.
                    480: */
1.1       noro      481:
                    482: \medbreak
                    483: \noindent
1.2       noro      484: //&jp {\bf 例}: \
                    485: //&eg {\bf Example}: \
1.1       noro      486: %%Prog: (ox.sm1) run  sm1connectr  [(oxWatch) ox.ccc] extension
                    487: %%Prog: ox.ccc (122345; ) oxsubmit ;
1.2       noro      488: //&jp {\tt message\_body} の実例をあげる.   シリアル番号部は除いてある.
1.3     ! noro      489: //&eg We show examples of {\tt message\_body}. Serial numbers are omitted.
1.1       noro      490: \begin{enumerate}
                    491: \item  {\tt executeStringByLocalParser("12345 ;");}
1.2       noro      492: /*&jp
                    493: は次のようなパケットに変換される. 各数字は 16進1バイトをあらわす.
                    494: {\tt xx(yy)} のなかの {\tt (yy)} は対応するアスキーコードをあわらす.
                    495: */
                    496: /*&eg
1.3     ! noro      497: is converted into the following packet. Each number denotes
        !           498: one byte in hexadecimal representation.
        !           499: {\tt (yy)} in {\tt xx(yy)} represents the corresponding ASCII code.
1.2       noro      500: */
1.1       noro      501: \begin{verbatim}
                    502: 0   0   2   2   0   0   0   4   0   0   0   7
                    503: 31(1)  32(2)  33(3)  34(4)  35(5)  20  3b(;)
                    504: 0   0   2   1   0   0   1   c
                    505: \end{verbatim}
1.2       noro      506: /*&jp
1.3     ! noro      507: それぞれのデータの意味は次のとおりである.
        !           508: */
        !           509: /*&eg
        !           510: Each data has the following meaning.
1.2       noro      511: */
1.1       noro      512:
                    513: \begin{verbatim}
                    514: 0   0   2   2  (OX_DATA) 0   0   0   4  (CMO_STRING)
                    515: 0   0   0   7  (size)
                    516: 31(1)  32(2)  33(3)  34(4)  35(5)  20  3b(;)   (data)
                    517: 0   0   2   1  (OX_COMMAND)
                    518: 0   0   1   c  (SM_executeStringByLocalParser)
                    519: \end{verbatim}
1.2       noro      520: //&jp これを OXexpression で表記すると次のようになる.
1.3     ! noro      521: //&eg This is expressed by OXexpression as follows.
1.1       noro      522: \begin{center}
                    523: (OX\_DATA, (CMO\_STRING, 7, "12345 ;"))
                    524: \end{center}
                    525: \begin{center}
                    526: (OX\_COMMAND, (SM\_executeStringByLocalParser))
                    527: \end{center}
                    528:
1.2       noro      529: //&jp \item  {\tt popString()}  を要請するメッセージ:
1.3     ! noro      530: //&eg \item  A message which requests {\tt SM\_popString}:
1.1       noro      531: \begin{verbatim}
                    532: 0   0   2   1  (OX_COMMAND)
                    533: 0   0   1   7  (SM_popString)
                    534: \end{verbatim}
1.3     ! noro      535: //&jp OXexpression では
        !           536: //&eg In OXexpression it is represented as
1.1       noro      537: (OX\_COMMAND, (SM\_popString)).
                    538:
                    539: \noindent
1.2       noro      540: //&jp これにたいして次の返答メッセージがくる.
1.3     ! noro      541: //&eg The server returns the following reply message:
1.1       noro      542: \begin{verbatim}
                    543: 0   0   2   2   (OX_DATA)
                    544: 0   0   0   4   (CMO_STRING) 0   0   0   5  (size)
                    545: 31(1)  32(2)  33(3)  34(4)  35(5)
                    546: \end{verbatim}
1.2       noro      547: //&jp OXexpression でかくと,
1.3     ! noro      548: //&eg In OXexpression it is represented as
1.1       noro      549: (OX\_DATA, (CMO\_STRING, 7, "12345 ;")).
                    550: \end{enumerate}
                    551:
1.2       noro      552: //&jp \subsubsection{グループ SMobject/Basic1 に属するオペレータ}
1.3     ! noro      553: //&eg \subsubsection{Operators in the group SMobject/Basic1}
1.1       noro      554:
                    555: \begin{enumerate}
                    556: \item
                    557: \begin{verbatim}
1.3     ! noro      558: SM_pops
1.1       noro      559: \end{verbatim}
1.2       noro      560: /*&jp
                    561: operand stack より, {\it n} 個の元 ({\it obj1, obj2, $\ldots$, objn})
                    562: を pop して捨てる.
                    563: */
                    564: /*&eg
1.3     ! noro      565: It requests a server to pop {\it n} and to discard elements {\it obj1, obj2,
        !           566: $\ldots$, objn}) from the stack.
1.2       noro      567: */
                    568:
                    569: //&jp Stack before the request: (右が stack のトップである.) \\
1.3     ! noro      570: //&eg Stack before the request: (The rightmost one is the top of the stack.) \\
1.1       noro      571: \begin{tabular}{|c|c|c|c|c|}  \hline
                    572: {\it obj1} & {\it  obj2}  & $\cdots$ & {\it objn}  &{\it INT32 n} \\
                    573: \hline
                    574: \end{tabular}
1.2       noro      575:
                    576: Request:
1.1       noro      577: \begin{tabular}{|c|c|}  \hline
                    578: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_pops } \\
                    579: \hline
                    580: \end{tabular}
1.2       noro      581:
1.3     ! noro      582: Result:  none.
1.1       noro      583:
                    584:
                    585: \item
                    586: \begin{verbatim}
1.3     ! noro      587: int SM_setName
1.1       noro      588: \end{verbatim}
1.2       noro      589: /*&jp
                    590: {\tt OperandStack} より {\it name} を pop し, つぎに{\tt OperandStack}
                    591: より {\it obj} を pop し, それを現在の名前空間で変数 {\it name} に
                    592: bind する.  正常終了なら 0 を, 異常終了なら -1 をもどす.  TCP/IP によ
                    593: る通信では, 異常終了の時のみ, {\tt CMO\_ERROR2} をstack へ push する.
                    594: */
                    595: /*&eg
1.3     ! noro      596: It requests a server to pop {\it name}, to pop {\it obj}, and to
        !           597: bind {\it obj} to a variable {\it name} in the current name space.
        !           598: If an error has occured {\tt CMO\_ERROR2} is pushed to the stack.
1.2       noro      599: */
                    600: //&jp Stack before the request: (右が stack の top.)
1.3     ! noro      601: //&eg Stack before the request: (The rightmost one is the top of the stack.)
1.1       noro      602: \begin{tabular}{|c|c|}  \hline
                    603: {\it obj} & {\it String name}  \\
                    604: \hline
                    605: \end{tabular}
1.2       noro      606:
                    607: Request:
1.1       noro      608: \begin{tabular}{|c|c|}  \hline
                    609: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_setName} \\
                    610: \hline
                    611: \end{tabular}
1.2       noro      612:
1.3     ! noro      613: Result: none.
1.1       noro      614:
                    615: \item
                    616: \begin{verbatim}
1.3     ! noro      617: SM_evalName
1.1       noro      618: \end{verbatim}
1.3     ! noro      619:
1.2       noro      620: /*&jp
                    621: 現在の名前空間で変数 {\it name} を評価する.  評価の結果 {\it
                    622: resultObj} をスタックへ戻す.  関数自体は正常終了なら 0 を, 異常終了な
                    623: ら -1 をもどす.  TCP/IP の場合, 異常終了の場合のみ {\tt CMO\_ERROR2}
                    624: を stack へ push する.
                    625: */
1.3     ! noro      626:
1.2       noro      627: /*&eg
1.3     ! noro      628: It requests a server to pop {\it name} and to evaluate a variable
        !           629: {\it name} in the current name space. The result of the evaluation
        !           630: {\it resultObj} is pushed to the stack.
        !           631: If an error has occured {\tt CMO\_ERROR2} is pushed to the stack.
1.2       noro      632: */
                    633:
                    634: //&jp Stack before the request: (右が stack の top.)
1.3     ! noro      635: //&eg Stack before the request: (The rightmost one is the top of the stack.)
1.1       noro      636: \begin{tabular}{|c|}  \hline
                    637: {\it String name}  \\
                    638: \hline
                    639: \end{tabular}
1.2       noro      640:
                    641: Request:
1.1       noro      642: \begin{tabular}{|c|c|}  \hline
                    643: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_evalName} \\
                    644: \hline
                    645: \end{tabular}
1.2       noro      646:
                    647: //&jp Stack after the request: (右が stack の top.)
1.3     ! noro      648: //&eg Stack after the request: (The rightmost one is the top of the stack.)
1.1       noro      649: \begin{tabular}{|c|}  \hline
                    650: {\it resultObj} \\
                    651: \hline
                    652: \end{tabular}
1.2       noro      653:
1.3     ! noro      654: Result:  none.
1.1       noro      655:
                    656: \item
                    657: \begin{verbatim}
1.3     ! noro      658: SM_executeFunction
1.1       noro      659: \end{verbatim}
1.2       noro      660: /*&jp
                    661: スタックより {\it n} 個のデータを pop して, サーバのローカル関数{\it
                    662: s} を実行する.  エラーのときのみ {\tt CMO\_ERROR2} を stack へ push す
                    663: る.
                    664: */
                    665: /*&eg
1.3     ! noro      666: It requests a server to pop {\it s} as a function name,
        !           667: to pop {\it n} as the number of arguments and to execute
        !           668: a local function {\it s} with {\it n} arguments popped from
        !           669: the stack.
        !           670: If an error has occured {\tt CMO\_ERROR2} is pushed to the stack.
1.2       noro      671: */
                    672:
                    673: //&jp Stack before the request: (右が stack の top.) \\
                    674: //&eg Stack before the request: (右が stack の top.) \\
1.1       noro      675: \begin{tabular}{|c|c|c|c|c|}  \hline
                    676: {\it objn} & $\cdots$ & {\it obj1} & {\it INT32 n} & {\it String s} \\
                    677: \hline
                    678: \end{tabular}
1.2       noro      679:
                    680: Request:
1.1       noro      681: \begin{tabular}{|c|c|}  \hline
                    682: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_executeFunction}  \\
                    683: \hline
                    684: \end{tabular}
                    685:
1.2       noro      686: //&jp Stack after the request: 関数実行の結果.
1.3     ! noro      687: //&eg Stack after the request: The result of the execution.
1.1       noro      688:
1.3     ! noro      689: Result: none.
1.1       noro      690:
                    691: \item
                    692: \begin{verbatim}
1.3     ! noro      693: SM_popSerializedLocalObject
1.1       noro      694: \end{verbatim}
1.3     ! noro      695:
1.2       noro      696: /*&jp
1.3     ! noro      697: スタックより pop した object を local 形式で serialization して
        !           698: OX message として stream へ出力する. OX message tag としては,
        !           699: local 形式に対応したものが定義されていることが必要である.
        !           700: この関数はおもに, homogeneous な分散システムで用いる.
1.2       noro      701: */
                    702: /*&eg
1.3     ! noro      703: It requests a sever to pop an object, to convert it into a
        !           704: serialized form according to a local serialization scheme, and
        !           705: to send it to the stream as an OX message.
        !           706: An OX message tag corresponding to
        !           707: the local data format must be sent prior to the serialized data
        !           708: itself.
        !           709: This operation is used mainly on homogeneous distributed systems.
1.2       noro      710: */
1.1       noro      711:
                    712: \item
                    713: \begin{verbatim}
1.3     ! noro      714: SM_popCMO
1.1       noro      715: \end{verbatim}
                    716:
1.2       noro      717: /*&jp
1.3     ! noro      718: {\tt OperandStack} より object を pop し CMO 形式の serialized object を
        !           719: stream へ header {\tt OX\_DATA} をつけてながす.
1.2       noro      720: */
                    721: /*&eg
1.3     ! noro      722: It requests a server to pop an object from the stack, to convert
        !           723: it into a serialized form according to the standard CMO encoding scheme,
        !           724: and to send it to the stream with the {\tt OX\_DATA} header.
1.2       noro      725: */
                    726:
                    727: Request:
1.1       noro      728: \begin{tabular}{|c|c|}  \hline
                    729: {\tt int32 OX\_COMMAND} & {\tt int32 OX\_popCMO}  \\
                    730: \hline
                    731: \end{tabular}
1.2       noro      732:
                    733: Result:
1.1       noro      734: \begin{tabular}{|c|c|}  \hline
                    735: {\tt int32 OX\_DATA} &   {\it Serialized CMO} \\
                    736: \hline
                    737: \end{tabular}
                    738:
                    739: \end{enumerate}
                    740:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>