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.