MathGroup Archive 1990

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: binary io

  • To: mathgroup at yoda.ncsa.uiuc.edu
  • Subject: Re: binary io
  • From: xinwei at jessica.stanford.edu
  • Date: Wed, 05 Sep 90 11:50:35 -0700

As for getting binary data out from Mathematica, one workaround
for simple functions (without control structures), is to
apply CForm[], then cut & paste the result into a C program]
to generate the data.  Of course, you might have to write a small
set of atomic C glue functions for those functions produced by CForm
which aren't in the standard C libraries.  Here's a test example
for producing binary data for a NeXT app (I stripped out the
functions originally generated by CForm, to save space.):

#include	<stdio.h>
#include	<varargs.h>
#include	<strings.h>
#include   <math.h>

#import <sys/file.h>
#import <sys/types.h>
#import <sys/stat.h>

#define FLOATSIZE	(sizeof(float))
#define NUMPOINTS	20
#define PI  	3.14159265359

main()
{
int fd;

    fd = setupfile();
     if (fd >=0)
     { 
     writepts(fd);
     close(fd);
     }
}

int setupfile()
{
int numpts;
int fd;

    fd = open("/xinwei/mobjunk.top", O_CREAT | O_RDWR, 777 );
    if (fd < 0)
    {
    	/*	char message[256];
    	sprintf(message,"Cannot open file.");
	NXRunAlertPanel(NULL,message,"OK",NULL,NULL);	*/
	return fd;
    }
     numpts = NUMPOINTS;
     write(fd, &numpts, sizeof(int));
     return fd;
}

float Sqrt(float x)
{
float xx;
	xx = (float) sqrt(x);
	return (xx);
}

float Sign(float x)
{
	return ((x < 0) ? -1.0 : 1.0) ; 
}

float Power(float x, int n)
{
float xx;
	xx = (float) pow((double) x, (double) n);
	return (xx);
}

float mob1(float t,float s)
{
     return(t);
}

float mob2(float t,float s)
{
     return (s);
}

float mob3(float t,float s)
{
     return(Power(2.7,- Power(t,2) - Power(s,2)));
}

int writepts(fd)
int fd;	/* file descriptor */
{
int i,j;
float t,s,x;
int cc;

    for (i= 0; i < NUMPOINTS; i++) {
	    for (j = 0; j < NUMPOINTS; j++) {
	    t = (i / (float) NUMPOINTS) * 1.6 - 0.8;
	    s = (j / (float) NUMPOINTS) * 2 * PI;
	    /* write  point  to file */
	    
	    x = mob1(t,s);
	    cc = write(fd,&x , FLOATSIZE);   
	    x = mob2(t,s);
	    cc = write(fd,&x , FLOATSIZE);   
	    x = mob3(t,s);
	    cc = write(fd,&x , FLOATSIZE);   
	    }
    }
}



  • Prev by Date: solve hangs on Arc Functions
  • Next by Date: Spherical Harmonic
  • Previous by thread: solve hangs on Arc Functions
  • Next by thread: Spherical Harmonic