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

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

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

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

# define SIZE 1024

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

	if (narg < 7 || *argv[1] != '-' || *(argv[1] + 1) != 'L') {
		fprintf(stderr, "Usage: gen4 -Llength t1 v1 a1 ... tN vN\n");
		exit(-1);
	}
	length = expr(argv[1] + 2);
	if (exprerr) {
		fprintf(stderr, "GEN4: Illegal length expression\n");
		exit(-1);
	}
	j = 2;
	if (!strcmp(argv[2], "-o")) {
		closed = 0;
		j = 3;
	}
	if (*argv[2] == '-' && !(index("0123456789.", *(argv[2] + 1))))
		j = 3;
	for (nc = 0; j < narg; nc++) {
		tcoef[nc] = expr(argv[j++]);
		if (exprerr) {
			fprintf(stderr, "GEN4: Illegal expression\n");
			exit(-1);
		}
		if (nc > 0) {
			for (i = 0; i < nc; i++)
				if (tcoef[nc] <= tcoef[i]) {
					fprintf(stderr, 
					    "GEN4: Non-increasing T values\n");
					exit(-1);
				}
		}
		vcoef[nc] = expr(argv[j++]);
		if (j < narg)
			alpha[nc] = expr(argv[j++]);
		if (exprerr) {
			fprintf(stderr, "GEN4: Illegal expression\n");
			exit(-1);
		}
		if (fabs(vcoef[nc]) > scale)
			scale = fabs(vcoef[nc]);
	}

	for (i = 0; i < nc; i++)
		tcoef[i] *= (float) (length - closed) / tcoef[nc - 1];
	if (scale == 0.0) {
		fprintf(stderr, "GEN4: all-zero f%d\n");
		exit(-1);
	}
	for (
	     ff = f = (float *) malloc(length * sizeof(float)), i = 0;
	     i < nc - 1;
	     f += seglen - 1, i++) {
		seglen = floor(tcoef[i + 1] +.5) - floor(tcoef[i] +.5) + 1;
		trans(vcoef[i], alpha[i], vcoef[i + 1], seglen, f);
	}
	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.