--- ray/src/cal/total.c 2019/12/28 18:05:13 1.14 +++ ray/src/cal/total.c 2022/03/24 22:26:50 1.16 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: total.c,v 1.14 2019/12/28 18:05:13 greg Exp $"; +static const char RCSid[] = "$Id: total.c,v 1.16 2022/03/24 22:26:50 greg Exp $"; #endif /* * total.c - program to reduce columns of data. @@ -59,7 +59,6 @@ char *argv[] func = MULT; break; case 's': - func = ADD; power = atof(argv[a]+2); break; case 'u': @@ -137,6 +136,10 @@ char *argv[] } else break; + if ((power != 0.0) & (func != ADD)) { + fprintf(stderr, "%s: -sE option requires summation\n", argv[0]); + exit(1); + } if (mean) { if (func == MAX) { fprintf(stderr, "%s: average maximum?!\n", argv[0]); @@ -228,6 +231,8 @@ putrecord( /* write out results record */ if (n) fputc(tabc, fp); } fputc('\n', fp); + if (!subtotal) + fflush(fp); /* flush unless -r */ } @@ -280,10 +285,14 @@ char *fname case ADD: if (inpval[n] == 0.0) break; - if (power != 0.0) - tally[n] += pow(fabs(inpval[n]),power); - else + if (power == 0.0) tally[n] += inpval[n]; + else if (power == 1.0) + tally[n] += fabs(inpval[n]); + else if (power == -1.0) + tally[n] += 1.0/fabs(inpval[n]); + else + tally[n] += pow(fabs(inpval[n]), power); break; case MULT: if (inpval[n] == 0.0) @@ -331,5 +340,5 @@ char *fname break; } /* close input */ - return(fclose(fp)); + return(fclose(fp) == EOF ? 1 : 0); }