ftp.nice.ch/pub/next/unix/audio/Cmix.N.s.tar.gz#/cmix/filters/ellipse.mac.c

This is ellipse.mac.c in view mode; [Download] [Up]

#include "../H/ugens.h"
#include "ellipse.h"

ell(p,n_args)
float *p;
int n_args;
{
	float ps[10][4],c[10][4],xnorm;
	long i,nsamps,nchin,nchout;
	float ellipse(),x[4],y[4];
	int   nsects;

	nsamps=setnote(p[0],p[1],1);
	       setnote(p[2],p[1],0);
	nchin = p[3];
	nchout = p[4];
	ellpset(&p[5],ps,c,&xnorm,&nsects);
	for(i=0; i<4; i++) x[i] = y[i] = 0.;
	for(i=0;i<nsamps;i++) {
		GETIN(y,0);
		ELLIPSE(x[nchout],y[nchin],ps,c,xnorm,nsects); 
		ADDOUT(x,1); 
		}
	endnote(1);
}

float ellipse(x,ps,c,xnorm,nsects)
int nsects;
float x,ps[10][4],c[10][4],xnorm;
{
	register int m;
	float op;

	for(m=0;m<nsects;m++) {
		op = x + c[m][0] * ps[m][0] + c[m][2] * ps[m][1]
		       - c[m][1] * ps[m][2] - c[m][3] * ps[m][3];
		ps[m][1] = ps[m][0];
		ps[m][0] = x;
		ps[m][3] = ps[m][2];
		ps[m][2] = op;
		x = op;
		}
	return(x*xnorm);
}

ellpset(list,ps,c,xnorm,nsects)
float *list,ps[10][4],c[10][4],*xnorm;
int *nsects;
{
/* the first argument in the list is the number of sections */
	int m,i,j;
	*nsects = (int)list[0];
	i=1;
	for(m=0;m < *nsects ;m++) {
		for(j=0;j<4;j++)  {    
printf("%f %d %d %f\n",c[m][j],j,m,list[i]);
	        	 c[m][j] = list[i++];
			 ps[m][j] = 0;
		}
	}
	*xnorm = list[i];
printf("xnorm %d %f %f\n",i,*xnorm,list[i-1]);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.