Re: Further question on "I have nested lists of ints....."
- To: mathgroup at smc.vnet.net
- Subject: [mg22838] Re: Further question on "I have nested lists of ints....."
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Sat, 1 Apr 2000 02:51:00 -0500 (EST)
- Organization: Universitaet Leipzig
- References: <8c1hfd$q49@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi Jamie, it can't work. You need a recussive function to read your data structure. Expression *ReadExpression(MLINK link) { Expression *e; int n; switch(MLGetNext(link)) { case MLTKFUNC: MLGetArgCount(link, &n); e=NewExpression(link,n); /* this include a recursive call to ReadExpression() to scan the head */ for (i = 0; i < n; i++) InsertAt(e,i, ReadExpression(link)); break; /* handel int's doubles and symbols */ } return e; } But neither ReadExpression() nor NewExpression() should call back to Mathematica !!! It is up to you to think how struct/class Expression should look like ! and what NewExpression() does. Hope that helps Jens "Jamie B. McHardy" wrote: > > Jens-Peer Kuska has informed me that must use MLGetNext etc in order to > get the information over. I have this problem though, the function > "SendDataToC" for example, > > int SendDataToC( void ) > { > int n, pkt; > > /* Send "LinkBuffer" > this holds the data that is needed in C, Refer to the original > question... > */ > MLPutFunction( stdlink , "EvaluatePacket", 1L); > MLPutSymbol( stdlink, "LinkBuffer\0"); > MLEndPacket( stdlink ); > > /* skip any packets before the first ReturnPacket */ > while( (pkt = MLNextPacket( stdlink ), pkt) && pkt != RETURNPKT) { > MLNewPacket( stdlink ); > if( MLError( stdlink )) error( stdlink ); > } > > MLGetArgCount(stdlink, &iArgCount); > while( iArgCount-- ) > { > /* read_element is a function that uses switch with > MLGetNext(...) to cope with all types of data in the > structure > being sent over > All this is modified from the factor3.c in the > mathematica > example programs*/ > read_element( stdlink ); > } > } > > This just doesn't work. > > I have tried this in many different ways, including having manual in the > Template file and then trying to get it over that way. > > What is wrong with this method? is it possible to get this data over? > how would I go about doing it. There seems to be no information on how > to get non uniform data over a mathlink that is calling an application > from within Mathematica. > > Many thanks in advance. > > Jamie