This is stochist.c in view mode; [Download] [Up]
#include<stdio.h> #include<math.h> #include<carl/frm.h> #include<carl/carl.h> #define NHIST 22 int N = NHIST; int norm = 1; float *thresh; int *bin; extern int arg_index; extern char *arg_option; extern char crack (); char statln[] = "min=%6.3f max=%6.3f mode=%6.3f at %6.3f, mean=%6.3f, nsamps=%d\n"; main (argc, argv) char **argv; { int i, j, modeloc, otty = isatty (1), nsamps = 0; float lb = -3.0, ub = 3.0, input; float mode, mean, max = -HUGE, min = HUGE; float sfexpr (); char ch; if (isatty (0)) histohelp (); while ((ch = crack (argc, argv, "l|u|m|n|L|hfN")) != NULL) { switch (ch) { case 'l': lb = sfexpr (arg_option, 1.0); break; case 'u': ub = sfexpr (arg_option, 1.0); break; case 'm': ub = sfexpr (arg_option, 1.0); lb = -ub; break; case 'n': case 'L': N = sfexpr (arg_option, 1.0); break; case 'f': otty = 1; break; case 'N': norm = 0; case 'h': default: histohelp (); } } if (lb >= ub) { fprintf (stderr, "stochist: lower bound >= upper bound!\n"); exit (1); } thresh = (float *) malloc (sizeof (float) * (N + 1)); bin = (int *) malloc (sizeof (int) * (N + 1)); for (i = 0; i <= N; i++) thresh[i] = (float) i / N * (ub - lb) + lb; while (getfloat (&input) > 0) { nsamps++; mean += input; min = input < min ? input : min; max = input > max ? input : max; for (i = N; i >= 0; i--) if (input >= thresh[i]) { bin[i]++; break; } } if (nsamps == 0) exit (1); for (mode = 0., i = 0; i < N; i++) if (bin[i] > mode) { mode = bin[i]; modeloc = i; } if (mode == 0.) { fprintf (stderr, "stochist: no points in histogram window range.\n"); goto out; } for (i = 0; i < N; i++) { if (otty) { float x = 63.0 * bin[i] / (norm == 0 ? 1 : mode); printf ("%6.3f %d\t", thresh[i], bin[i]); if (x > 0.0 && x < 1.0) printf ("."); else for (j = 0; j < x; j++) printf ("*"); printf ("\n"); } else { float x = bin[i] / (norm == 0 ? 1 : mode); putfloat (&x); } } out: if (!otty) flushfloat (); else { mean /= nsamps; printf (statln, min, max, mode, thresh[modeloc], mean, nsamps); } exit (0); } histohelp () { fprintf (stderr, "%s%s%s%s%s%s%s%s%s%s%s", "usage: stochist [flags] < floatsams > floatsams\n", "input must be file or pipe of floatsams\n", "if output is a terminal, a text histogram is produced\n", "if output is file or pipe, histogram sums are written as floatsams\n", "flags: (default)\n", " -lN set lower bound of display (-3.0)\n", " -uN set upper bound of display (3.0)\n", " -mN set upper and lower bounds of display (3.0, -3.0)\n", " -N suppress normalization of histogram\n", " -LN set number of histogram windows (22)\n", " -f force output of text bar graph\n" ); exit (1); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.