--- ray/src/cal/calc.c 2003/07/17 09:21:29 1.4 +++ ray/src/cal/calc.c 2013/12/19 16:56:31 1.8 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: calc.c,v 1.4 2003/07/17 09:21:29 schorsch Exp $"; +static const char RCSid[] = "$Id: calc.c,v 1.8 2013/12/19 16:56:31 greg Exp $"; #endif /* * calc.c - simple algebraic desk calculator program. @@ -8,11 +8,10 @@ static const char RCSid[] = "$Id: calc.c,v 1.4 2003/07 */ #include -#include -#include #include #include +#include "rtio.h" #include "rterror.h" #include "calcomp.h" @@ -25,14 +24,16 @@ jmp_buf env; int recover = 0; +int main(argc, argv) int argc; char *argv[]; { - char expr[512]; + char expr[2048]; + char *epos; FILE *fp; int i; - register char *cp; + char *cp; esupport |= E_VARIABLE|E_INCHAN|E_FUNCTION; esupport &= ~(E_REDEFW|E_RCONST|E_OUTCHAN); @@ -41,17 +42,31 @@ char *argv[]; #endif varset("PI", ':', 3.14159265358979323846); - for (i = 1; i < argc; i++) - fcompile(argv[i]); - + for (i = 1; i < argc; i++) { + cp = getpath(argv[i], getrlibpath(), 0); + if (cp == NULL) { + eputs(argv[0]); + eputs(": cannot find file '"); + eputs(argv[i]); + eputs("'\n"); + quit(1); + } + fcompile(cp); + } setjmp(env); recover = 1; eclock++; - while (fgets(expr, sizeof(expr), stdin) != NULL) { - for (cp = expr; *cp && *cp != '\n'; cp++) - ; - *cp = '\0'; + epos = expr; + while (fgets(epos, sizeof(expr)-(epos-expr), stdin) != NULL) { + while (*epos && *epos != '\n') + epos++; + if (*epos && epos > expr && epos[-1] == '\\') { + epos[-1] = ' '; + continue; /* escaped newline */ + } + *epos = '\0'; + epos = expr; switch (expr[0]) { case '\0': continue; @@ -85,6 +100,11 @@ char *argv[]; eputs("file name required\n"); continue; } + cp = getpath(cp, getrlibpath(), 0); + if (cp == NULL) { + eputs("cannot find file\n"); + continue; + } fcompile(cp); eclock++; continue; @@ -116,6 +136,7 @@ char *argv[]; recover = 0; quit(0); + return 0; /* pro forma exit */ }