%#!platex
%% $OpenXM: OpenXM/src/ox_math/documents/math2ox.tex,v 1.4 2000/03/11 09:17:41 ohara Exp $

\documentclass{article}
\title{Mathematica Client for Open XM}
\date{January 20, 2000}
\author{Katsuyoshi Ohara}

\begin{document}
\maketitle

\section{Mathematica Client}

The program {\tt math2ox} is an external module for Mathematica
to call OpenXM servers.
The {\tt math2ox} communicates with OpenXM servers by the OpenXM protocol
and communicates with Mathematica by MathLink.

The {\tt math2ox} has the following commands:\\
{\tt OxStart[s\_String], 
OxStartInsecure[s\_String, p\_Integer, q\_Integer],
OxStartRemoteSSH[s\_String, t\_String], 
OxExecuteString[s\_String], OxSendMessage[s\_String], OxGet[], OxPopCMO[],
OxPopString[], OxClose[], OxReset[]}.

First, let us load the math2ox.
\begin{verbatim}
In[1]:= Install["math2ox"]
\end{verbatim}

Second, let us open a connection with an OX server.
For example, if we want to call the ox\_sm1 (the kan/sm1 server), then
\begin{verbatim}
In[2] := oxid = OxStart["ox_sm1"]
\end{verbatim}
where we have the connection of reverse mode.  The OxStart function
automatically invoke ox\_sm1 on the local machine.  If you need to
connect an OX server on a remote machine, then you can use reverse mode.
\begin{verbatim}
In[2] := oxid = OxStartInsecure["water.s.kanazawa-u.ac.jp", 1300, 1400]
\end{verbatim}
The mode is not secured but you can crypt data stream by using ssh
(Secure SHell).
\begin{verbatim}
In[3] := Run["ssh -f water ox -insecure -ox ox_sm1 -host water"]
\end{verbatim}

Third, let us send an OX message to the OX server.
We can send an OX message written in OX/CMO expressions.
\begin{verbatim}
In[4] := OxSendMessage["(CMO_LIST, (CMO_STRING, "hello world"), (CMO_ZERO))"]
In[5] := OxSendMessage["(OX_COMMAND, (SM_popCMO))"]
\end{verbatim}
If the expression conains syntax errors, then nothing is sent.

Remarks: if SM\_popCMO is sent by the {\tt OxSendMessage[]} function, then the
OX stack machine returns the top of the stack to the {\tt math2ox}.
Then, in order to receive the message, we need to call the {\tt OxGet[]}
function always after executing {\tt OxSendMessage[]}
\begin{verbatim}
In[6] := OxGet[]
\end{verbatim}

If we do not use the {\tt OxSendMessage} function and use the {\tt OxPopCMO[]}
function, then we do not need to call the {\tt OxGet[]}.
\begin{verbatim}
In[5] := OxPopCMO[]
\end{verbatim}

Fourth, if we send a command expressed in the local language of the OX
server, then we need to call the {\tt OxExecuteString[]} function.

Last, let us close the connection.
\begin{verbatim}
In[7] := OxClose[]
\end{verbatim}

\section{Examples}

\begin{enumerate}
\item
{\tt OpenXM/lib/math/primadec.m} is a Mathematica program
to make primary ideal decompositions by calling
{\tt ox\_asir}.
As to usages, see comments in this file.
\item 
{\tt OpenXM/lib/math/beta.m} is a Mathematica program
to get beta-nbc bases by calling {\tt ox\_asir}.
\end{enumerate}



\appendix

\begin{thebibliography}{99}
\bibitem{Openxxx-1998}
M. Noro, N. Takayama:
Design and Implementation of OpenXM, 1996, 1997, 1998, 1999, 2000.
\bibitem{openxm-web}
{\footnotesize {\tt http://www.math.kobe-u.ac.jp/OpenXM/}}
\bibitem{Ohara-Takayama-Noro-1999}
M. Noro, K. Ohara, N. Takayama:
{Introduction to Open Asir}, 1999, Suusiki Shori, Vol 7, No 2,
2--17. (ISBN4-87243-086-7, SEG Publishing, Tokyo). (in Japanese)
\bibitem{Wolfram-1996}
Stephen Wolfram:
{The Mathematica Book}, Third edition,
Wolfram Media/Cambridge University Press, 1996.

\bibitem{miyachi-1998}
T. Miyachi:
{Mathematica Network Programming},
Iwanami Book Co., 1998. (in Japanese)
\end{thebibliography}

\end{document}
