--- ray/src/cal/tabfunc.c 2005/11/12 06:14:51 1.6 +++ ray/src/cal/tabfunc.c 2024/02/28 03:17:23 1.11 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: tabfunc.c,v 1.6 2005/11/12 06:14:51 greg Exp $"; +static const char RCSid[] = "$Id: tabfunc.c,v 1.11 2024/02/28 03:17:23 greg Exp $"; #endif /* * Put tabular data into functions suitable for cal programs. @@ -7,12 +7,9 @@ static const char RCSid[] = "$Id: tabfunc.c,v 1.6 2005 * 2/2/95 Greg Ward */ -#include #include -#include #include #include -#include #include "rtprocess.h" /* getpid() */ #include "rtmath.h" @@ -20,8 +17,8 @@ static const char RCSid[] = "$Id: tabfunc.c,v 1.6 2005 #define isdelim(c) (isspace(c) || (c)==',') -#define MAXTAB 1024 /* maximum number of data rows */ -#define MAXLINE 4096 /* maximum line width (characters) */ +#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; @@ -109,7 +106,7 @@ FILE *fp goto fatal; } ordinate[i][tabsize] = atof(cp); - if ((cp = fskip(cp)) == NULL) { + if ((cp = fskip(cp)) == NULL || !isdelim(*cp)) { err = "bad floating-point format"; goto fatal; } @@ -159,20 +156,21 @@ absc_exp(void) /* produce expression for abscissa */ printf("X`%s(i):select(i,", locID); putlist(abscissa, tabsize, 20); puts(");"); - if (increasing) { + if (increasing) + printf("fx2`%s(x,i):if(x-X`%s(i),\n", locID, locID); + else + printf("fx2`%s(x,i):if(X`%s(i)-x,\n", locID, locID); + printf("\ti+(x-X`%s(i))/(X`%s(i+1)-X`%s(i)),\n", + locID, locID, locID); + printf("\tfx2`%s(x,i-1));\n", locID); + if (increasing) printf("fx`%s(x):if(x-%g,if(%g-x,fx2`%s(x,%d),%d),1);\n", locID, abscissa[0], abscissa[tabsize-1], locID, tabsize, tabsize); - printf("fx2`%s(x,i):if(x-X`%s(i),\n", locID, locID); - } else { + else printf("fx`%s(x):if(%g-x,if(x-%g,fx2`%s(x,%d),%d),1);\n", locID, abscissa[0], abscissa[tabsize-1], locID, tabsize, tabsize); - printf("fx2`%s(x,i):if(X`%s(i)-x,\n", locID, locID); - } - printf("\ti+(x-X`%s(i))/(X`%s(i+1)-X`%s(i)),\n", - locID, locID, locID); - printf("\tfx2`%s(x,i-1));\n", locID); sprintf(ourexp, "fx`%s(x)", locID); } return(ourexp);