summaryrefslogtreecommitdiffstats
path: root/usr.bin/ministat
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2003-10-31 13:25:43 +0000
committerphk <phk@FreeBSD.org>2003-10-31 13:25:43 +0000
commitcd4a9b77a6df92c6fce807de7c5bf3271dbcb55c (patch)
tree2830176d04c83ff465888ce0813939cf550e9031 /usr.bin/ministat
parentf495dad33afc1fb92af14f234729f2db729b539a (diff)
downloadFreeBSD-src-cd4a9b77a6df92c6fce807de7c5bf3271dbcb55c.zip
FreeBSD-src-cd4a9b77a6df92c6fce807de7c5bf3271dbcb55c.tar.gz
Attached is a small patch to ministat that separates the
avg/median/stddev bars onto two lines. Useful for datasets that overlap. Submitted by: Dan Nelson <dnelson@allantgroup.com>
Diffstat (limited to 'usr.bin/ministat')
-rw-r--r--usr.bin/ministat/Makefile1
-rw-r--r--usr.bin/ministat/ministat.c66
2 files changed, 48 insertions, 19 deletions
diff --git a/usr.bin/ministat/Makefile b/usr.bin/ministat/Makefile
index 7c740ea..70bdce2 100644
--- a/usr.bin/ministat/Makefile
+++ b/usr.bin/ministat/Makefile
@@ -11,3 +11,4 @@ test: ${PROG}
./${PROG} ${.CURDIR}/chameleon
./${PROG} ${.CURDIR}/chameleon ${.CURDIR}/iguana
./${PROG} -c 80 ${.CURDIR}/chameleon ${.CURDIR}/iguana
+ ./${PROG} -s -c 80 ${.CURDIR}/chameleon ${.CURDIR}/iguana
diff --git a/usr.bin/ministat/ministat.c b/usr.bin/ministat/ministat.c
index b8ca72a..dbe3cde 100644
--- a/usr.bin/ministat/ministat.c
+++ b/usr.bin/ministat/ministat.c
@@ -279,12 +279,14 @@ struct plot {
double x0, dx;
int height;
char *data;
+ char **bar;
+ int separate_bars;
};
static struct plot plot;
static void
-SetupPlot(int width)
+SetupPlot(int width, int separate)
{
struct plot *pl;
@@ -292,6 +294,8 @@ SetupPlot(int width)
pl->width = width;
pl->height = 0;
pl->data = NULL;
+ pl->bar = NULL;
+ pl->separate_bars = separate;
pl->min = 999e99;
pl->max = -999e99;
}
@@ -326,10 +330,26 @@ PlotSet(struct dataset *ds, int val)
struct plot *pl;
struct point *pp;
int i, j, m, x;
+ int bar;
pl = &plot;
if (pl->span == 0)
return;
+
+ if (pl->separate_bars)
+ bar = val-1;
+ else
+ bar = 0;
+
+ if (pl->bar == NULL) {
+ pl->bar = malloc(sizeof(char *) * 2);
+ memset(pl->bar, 0, sizeof(char*) * 2);
+ }
+ if (pl->bar[bar] == NULL) {
+ pl->bar[bar] = malloc(pl->width);
+ memset(pl->bar[bar], 0, pl->width);
+ }
+
m = 1;
i = -1;
j = 0;
@@ -364,15 +384,15 @@ PlotSet(struct dataset *ds, int val)
}
x = ((Avg(ds) - Stddev(ds)) - pl->x0) / pl->dx;
m = ((Avg(ds) + Stddev(ds)) - pl->x0) / pl->dx;
- pl->data[m] = '|';
- pl->data[x] = '|';
+ pl->bar[bar][m] = '|';
+ pl->bar[bar][x] = '|';
for (i = x + 1; i < m; i++)
- if (pl->data[i] == 0)
- pl->data[i] = '_';
+ if (pl->bar[bar][i] == 0)
+ pl->bar[bar][i] = '_';
x = (Median(ds) - pl->x0) / pl->dx;
- pl->data[x] = 'M';
+ pl->bar[bar][x] = 'M';
x = (Avg(ds) - pl->x0) / pl->dx;
- pl->data[x] = 'A';
+ pl->bar[bar][x] = 'A';
}
static void
@@ -408,15 +428,19 @@ DumpPlot(void)
putchar('|');
putchar('\n');
}
- putchar('|');
- for (j = 0; j < pl->width; j++) {
- k = pl->data[j];
- if (k == 0)
- k = ' ';
- putchar(k);
+ for (i = 0; i < 2; i++) {
+ if (pl->bar[i] == NULL)
+ continue;
+ putchar('|');
+ for (j = 0; j < pl->width; j++) {
+ k = pl->bar[i][j];
+ if (k == 0)
+ k = ' ';
+ putchar(k);
+ }
+ putchar('|');
+ putchar('\n');
}
- putchar('|');
- putchar('\n');
putchar('+');
for (i = 0; i < pl->width; i++)
putchar('-');
@@ -479,7 +503,7 @@ usage(char const *whine)
fprintf(stderr, "%s\n", whine);
fprintf(stderr,
- "Usage: ministat [ -c confidence ] [file 1 [file 2]]\n");
+ "Usage: ministat [ -c confidence ] [-s] [file 1 [file 2]]\n");
fprintf(stderr, "\tconfidence = {");
for (i = 0; i < NCONF; i++) {
fprintf(stderr, "%s%g%%",
@@ -487,6 +511,7 @@ usage(char const *whine)
studentpct[i]);
}
fprintf(stderr, "}\n");
+ fprintf(stderr, "\t-s : print avg/median/stddev bars on separate lines\n");
exit (2);
}
@@ -497,9 +522,10 @@ main(int argc, char **argv)
double a;
char *p;
int c, i, ci;
+ int flag_s = 0;
ci = -1;
- while ((c = getopt(argc, argv, "c:")) != -1)
+ while ((c = getopt(argc, argv, "c:s")) != -1)
switch (c) {
case 'c':
a = strtod(optarg, &p);
@@ -511,6 +537,9 @@ main(int argc, char **argv)
if (ci == -1)
usage("No support for confidence level");
break;
+ case 's':
+ flag_s = 1;
+ break;
default:
usage("Unknown option");
break;
@@ -531,8 +560,7 @@ main(int argc, char **argv)
printf("+ %s\n", argv[1]);
}
-
- SetupPlot(74);
+ SetupPlot(74, flag_s);
DimPlot(ds1);
if (argc > 1)
DimPlot(ds2);
OpenPOWER on IntegriCloud