ftp.nice.ch/pub/next/unix/audio/cmusic.bs.N.tar.gz#/src/gen/gen2.c

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

#include <stdio.h>
#include <math.h>
#include <carl/carl.h>
#define TWOPI (8.*atan(1.))

/* cc gen2.c -lfrm -lm -o gen2 */

# define SIZE 1024

main(narg, argv) int 
	narg;
	char           *argv[]; {
	float           coef[SIZE], factor, *f, *ff, scale = 0.0;
	float           expr();
	extern int      exprerr;
	int             i, j, seglen, length, na, nc, closed = 0;

	if (narg < 4 || *argv[1] != '-' || *(argv[1] + 1) != 'L') {
		fprintf(stderr,
			"Usage: gen2 -Llength [-o (default) or -c] a1 ... aN b0 ... bM N\n");
		exit(-1);
	}
	length = expr(argv[1] + 2);
	if (exprerr) {
		fprintf(stderr, "GEN2: Illegal length expression\n");
		exit(-1);
	}
	i = 2;
	if (!strcmp(argv[2], "-c")) {
		closed = 1;
		i = 3;
	}
	if (*argv[2] == '-' && !(index("0123456789.", *(argv[2] + 1))))
		i = 3;
	factor = TWOPI / (length - closed);
	for (nc = 0; i < narg - 1; i++, nc++)
		coef[nc] = expr(argv[i]);
	na = expr(argv[narg - 1]);
	ff = f = (float *) calloc(length, sizeof(float));
	for (i = 0; i < na; i++)
		for (f = ff, j = 0; j < length; j++, f++)
			*f += coef[i] * sin(factor * j * (i + 1));

	for (i = na; i < nc; i++)
		for (f = ff, j = 0; j < length; j++, f++)
			*f += coef[i] * cos(factor * j * (i - na));

	for (scale = 0.0, f = ff, j = 0; j < length; j++, f++)
		if (fabs(*f) > scale)
			scale = fabs(*f);
	if (scale == 0.0) {
		fprintf(stderr, "GEN2: all-zero function\n");
		exit(-1);
	}
	if (isatty(1)) {
		for (i = 0; i < length; i++)
			printf("%f\n", *(ff + i));
	} else {
		for (i = 0; i < length; i++)
			putfloat((ff + i));
	}
	flushfloat();
	exit(0);		/* Return status of 0 if all went OK */
}

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