Re: Mathlink probs under Unix
- To: mathgroup at smc.vnet.net
- Subject: [mg26395] Re: [mg26246] Mathlink probs under Unix
- From: number9 <number9 at net-connect.net>
- Date: Wed, 20 Dec 2000 00:21:24 -0500 (EST)
- References: <90v6uc$74h@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hmm, I am trying to use Experimental`BinaryImport now. It seems to work fine
on a windows box with the following:
str=OpenRead["c:\t\me03.sig", DOSTextFormat->False]
xx = Experimental`BinaryImport[str,{"Byte"}..}]
and then when I look at xx I feel that it is getting
the correct info, however, when I try something like a
ToString on the data it dies (under Solaris).
Where I seem to be having the problem is that the old
notebook for this was for Mathematica 3.0 and it used ReadListBinary
to read in sections of the binary file a byte or several bytes
at a time... that way the ToString works as it is not trying to
ToString the entire file.
My real question is this: I have created this binary file on
an intel based machine (little-endian) and I am moving the file
to a Sun workstation (big-endian) for analysis. Does Mathematica for
Solaris assume all binary files to be in big-endian??
Will the "ByteOrdering" option for Experimental`BinaryImport
cure this is this is true??
Thanks for the help.
John Fultz wrote:
> Your compiler is complaining about an overly long string. This will
> probably fix it...
>
> In the file binary.tm, find something that looks like the following text:
>
> :Evaluate:
> resolveExistingFilename[s_String]:=Module[{first=First[Characters[s]],drive,os,fileinfo,thefile},
> Switch[os=$OperatingSystem,
> "Unix", (* a whole bunch of stuff here *),
> "MacOS", (* a whole bunch of stuff here *),
> "Windows"|"WINDOWS"|"WindowsNT", (*a whole bunch of stuff here *),
> _, (* a whole bunch of stuff here *)]]
>
> This is being turned into a C string by 'mprep', and apparently it's too
> long for your compiler to swallow. We can make it simpler by just
> splitting out the stuff that's irrelevant for Solaris:
>
> :Evaluate:
> resolveExistingFilename[s_String]:=Module[{first=First[Characters[s]],drive,os,fileinfo,thefile},
> Switch[os=$OperatingSystem,
> "Unix", (* a whole bunch of stuff here *),
> _, (* a whole bunch of stuff here *)]]
>
> which is to say, just delete all of the lines from the line beginning with
> "MacOS" to the line immediately preceding the one beginning with '_'.
>
> Or, you could rewrite your code in terms of Experimental`BinaryImport[] and
> Experimental`BinaryExport[], which is somewhat faster than FastBinaryFiles
> these days.
>
> Sincerely,
>
> John Fultz
> jfultz at wolfram.com
> User Interface Group
> Wolfram Research, Inc.
>