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

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

/* chubby - to compile this beastie utter: cc -O chubby.c -lsf -lm */
/* Author: Marc LeBrun, local implementor: Gareth Loy */

#include <stdio.h>
#include <carl/carl.h>

/* from crack() */
extern int      arg_index;
extern char    *arg_option;

main(argc, argv)
	int             argc;
	char          **argv;
{
	int             lf, lk, i, j, k, lflag = 0;
	char            crack(), ch;
	float           x, tn, tn1, tn2;
	float          *f, *hk;

	while ((ch = crack(argc, argv, "L|oc", 0)) != NULL) {
		switch (ch) {
		case 'o':
		case 'c':
			break;
		case 'L':
			lf = atoi(arg_option);
			lflag++;
			break;
		}
	}
	if (!lflag)
		lf = atoi(argv[arg_index++]);
	lk = argc - arg_index;
	if (lf <= 0 || lk <= 0)
		exit(1);
	if ((f = (float *) malloc(sizeof(float) * lf)) == NULL)
		exit(1);
	if ((hk = (float *) malloc(sizeof(float) * lk)) == NULL)
		exit(1);

	for (i = 0, j = arg_index; j < argc; i++, j++) {
		hk[i] = expr(argv[j]);
		if (exprerr) {
			fprintf(stderr, "chubby: ill-formed expression: %s\n",
				argv[j]);
			exit(1);
		}
	}

	for (i = 0; i < lf; i++) {
		x = 2.0 * i / (lf - 1) - 1;	/* x is is in a unit interval */
		f[i] = 0;
		tn = 1;
		tn1 = x;
		for (k = 0; k < lk; k++) {
			f[i] = f[i] + hk[k] * tn;	/* add in the weighted
							 * sum */
			tn2 = tn1;	/* preparation for next weighted sum */
			tn1 = tn;
			tn = (2.0 * x * tn1 - tn2);
		}
	}

	if (isatty(1))
		for (i = 0; i < lf; i++)
			printf("%f\n", f[i]);
	else {
		for (i = 0; i < lf; i++)
			putfloat(&f[i]);
		flushfloat();
	}
	exit(0);
}

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