Re: simplified C API call in MathLink
- To: mathgroup at smc.vnet.net
- Subject: [mg55918] Re: simplified C API call in MathLink
- From: "ragfield" <ragfield at gmail.com>
- Date: Sun, 10 Apr 2005 06:54:49 -0400 (EDT)
- References: <d3835t$cej$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
> I was wondering if Wolfram Research had plans for a simpler API for
mathlink.
The functionality of which you speak is very straightforward to
implement with MathLink by wrapping ToString[ToExpression[...],
InputForm] around the text you wish to evaluate. In fact, I just did
it:
#include <stdio.h>
#include "mathlink.h"
MLEnvironment gEnvironment = NULL;
MLINK KernelStart()
{
MLINK theLink = NULL;
long err;
if(gEnvironment == NULL)
{
gEnvironment = MLInitialize(0);
if(gEnvironment == NULL)
return theLink;
}
theLink = MLOpenString(gEnvironment, "-linkname
\"'/Applications/Mathematica 5.1.app/Contents/MacOS/MathKernel'
-mathlink\" -linkmode launch", &err);
return theLink;
}
const char* KernelEvaluate(MLINK theLink, const char* theExpression)
{
int thePacket;
MLNewPacket(theLink);
MLPutFunction(theLink, "EvaluatePacket", 1);
MLPutFunction(theLink, "ToString", 2);
MLPutFunction(theLink, "ToExpression", 1);
MLPutString(theLink, theExpression);
MLPutSymbol(theLink, "InputForm");
MLEndPacket(theLink);
while((thePacket = MLNextPacket(theLink)) != 0)
{
if(thePacket == RETURNPKT)
{
const char* theResult;
if(!MLGetString(theLink, &theResult))
theResult = NULL;
return theResult;
}
MLNewPacket(theLink);
}
return NULL;
}
void KernelStop(MLINK theLink)
{
if(theLink != NULL)
MLClose(theLink);
}
int main(int argc, char* argv[])
{
MLINK theLink = KernelStart();
if(theLink != NULL)
{
int i;
for(i = 1; i < argc; i++)
{
const char* theResult = KernelEvaluate(theLink, argv[i]);
if(theResult != NULL)
{
printf("%s\n%s\n\n", argv[i], theResult);
MLDisownString(theLink, theResult);
}
}
KernelStop(theLink);
}
else
fprintf(stderr, "Couldn't start kernel");
return 0;
}
Then to build (on OSX):
cc evaluate.c -I"/Applications/Mathematica
5.1.app/AddOns/MathLink/DeveloperKit/Darwin/CompilerAdditions"
-L"/Applications/Mathematica
5.1.app/AddOns/MathLink/DeveloperKit/Darwin/CompilerAdditions" -lML
-Wno-long-double
> ps - thanks much for this mailing list. I just stumbled across it,
and it looks
> like its going to be invaluable going forward. Is it available in
digest mode?
I don't know about the regular mailing list, but you can get the posts
in digest mode through Google Groups
<http://groups-beta.google.com/group/comp.soft-sys.math.mathematica/>.
-Rob
- Follow-Ups:
- Re: Re: simplified C API call in MathLink
- From: Edward Peschko <esp5@pge.com>
- Re: Re: simplified C API call in MathLink