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

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

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

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

# define SIZE 1024

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

	if (narg < 6 || *argv[1] != '-' || *(argv[1] + 1) != 'L') {
		fprintf(stderr, "Usage: gen1 -Llength t1 v1 ... tN vN\n");
		exit(1);
	}
	length = expr(argv[1] + 2);
	if (exprerr) {
		fprintf(stderr, "gen1: length expression error: %s\n", argv[1] + 2);
		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, "gen1: expression error: %s\n",
				argv[j - 1]);
			exit(1);
		}
		if (nc > 0) {
			for (i = 0; i < nc; i++)
				if (tcoef[nc] <= tcoef[i]) {
					fprintf(stderr, "gen1: Non-increasing T values\n");
					exit(1);
				}
		}
		vcoef[nc] = expr(argv[j++]);
		if (exprerr) {
			fprintf(stderr, "gen1: expression error: %s\n",
				argv[j - 1]);
			exit(1);
		}
		if (fabs(vcoef[nc]) > scale)
			scale = fabs(vcoef[nc]);
	}

	for (i = 0; i < nc; i++)
		tcoef[i] = (float) tcoef[i] * (length - closed) / tcoef[nc - 1];
	if (scale == 0.0) {
		fprintf(stderr, "gen1: warning, all-zero function\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], 0., 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.