--- ray/src/cal/tabfunc.c 2003/06/08 12:03:09 1.2 +++ ray/src/cal/tabfunc.c 2019/08/11 17:04:09 1.7 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: tabfunc.c,v 1.2 2003/06/08 12:03:09 schorsch Exp $"; +static const char RCSid[] = "$Id: tabfunc.c,v 1.7 2019/08/11 17:04:09 greg Exp $"; #endif /* * Put tabular data into functions suitable for cal programs. @@ -12,21 +12,16 @@ static const char RCSid[] = "$Id: tabfunc.c,v 1.2 2003 #include #include #include -#ifdef _WIN32 - #include /* getpid() */ -#else - #include - #include -#endif +#include -#include "standard.h" -#include "platform.h" +#include "rtprocess.h" /* getpid() */ +#include "rtmath.h" +#include "rtio.h" #define isdelim(c) (isspace(c) || (c)==',') -#define MAXTAB 1024 /* maximum number of data rows */ -#define MAXLINE 4096 /* maximum line width (characters) */ -/*#define FLOAT float */ /* real type (precision) */ +#define MAXTAB 8192 /* maximum number of data rows */ +#define MAXLINE 16384 /* maximum line width (characters) */ #define OUTFMT "%.7g" /* output format conversion string */ int interpolate = 0; @@ -34,8 +29,8 @@ char *progname; char **func; int nfuncs; -FLOAT abscissa[MAXTAB]; /* independent values (first column) */ -FLOAT (*ordinate)[MAXTAB]; /* dependent values (other columns) */ +RREAL abscissa[MAXTAB]; /* independent values (first column) */ +RREAL (*ordinate)[MAXTAB]; /* dependent values (other columns) */ int tabsize = 0; /* final table size (number of rows) */ char locID[16]; /* local identifier (for uniqueness) */ @@ -43,7 +38,7 @@ char locID[16]; /* local identifier (for uniqueness) static void load_data(FILE *fp); static void print_funcs(char *xe); -static void putlist(register FLOAT *av, int al, register int pos); +static void putlist(register RREAL *av, int al, register int pos); static char * absc_exp(void); int @@ -68,7 +63,7 @@ char **argv } func = argv; nfuncs = argc; - ordinate = (FLOAT (*)[MAXTAB])malloc(nfuncs*MAXTAB*sizeof(FLOAT)); + ordinate = (RREAL (*)[MAXTAB])malloc(nfuncs*MAXTAB*sizeof(RREAL)); if (ordinate == NULL) { fprintf(stderr, "%s: not enough memory\n", progname); exit(1); @@ -156,7 +151,9 @@ absc_exp(void) /* produce expression for abscissa */ strcpy(ourexp, "x"); else sprintf(ourexp, "x-%g", abscissa[0]-1); - } else + } else if (fabs(abscissa[0]) < eps) + sprintf(ourexp, "x/%g+1", step); + else sprintf(ourexp, "(x-%g)/%g+1", abscissa[0], step); } else { printf("X`%s(i):select(i,", locID); @@ -192,7 +189,7 @@ char *xe xelen = strlen(xe); for (i = 0; i < nfuncs; i++) { - if (func[i][0] == '\0' | func[i][0] == '0') + if ((func[i][0] == '\0') | (func[i][0] == '0')) continue; if (interpolate) { printf("%s`%s(i):select(i,", func[i], locID); @@ -212,7 +209,7 @@ char *xe static void putlist( /* put out array of values */ -register FLOAT *av, +register RREAL *av, int al, register int pos )