Release calc version 2.11.0t8.7

This commit is contained in:
Landon Curt Noll
1999-10-29 17:16:58 -07:00
parent e6e2556893
commit 478d68fca9
12 changed files with 62 additions and 28 deletions

11
BUGS
View File

@@ -68,17 +68,6 @@ importantly, fixes (in the form of a context diff patch) to:
Known bugs:
* calc -i ignores quit binding or EOF input in some cases. For example:
echo 'define f(x) { ' > myfile
calc -i read myfile
"./myfile", line 2: End-of-file in function body
Error in commands
>
At this point, calc will re-prompt if you give it an EOF, or
type ^D while using lib/altbind or while ^D is bound to quit.
* When compiled on some Big Endian machines with BASEB forced to
be 16 (by setting LONGLONG_BITS= 0 in the Makefile), calc fails
a number of regression tests:

View File

@@ -132,6 +132,10 @@ Following is the change from calc version 2.11.0t8 to date:
Fixed the help/custom_cal, help/new_custom, and help/copy files so
that they contain the correct contents instead of the 'usage' file.
Fixed problem with loss of bindings when .calc -i args runs into
an error while processing 'args' and drops into interactive mode
without the terminal bindings being set.
Fixed misc compiler warnings.

View File

@@ -862,6 +862,17 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
}
break;
case T_ABORT:
switch (gettoken()) {
case T_STRING:
addopone(OP_ABORT, tokenstring());
break;
default:
addopone(OP_ABORT, -1);
rescantoken();
}
break;
case T_SYMBOL:
if (nextchar() == ':') { /****HACK HACK ****/
definelabel(tokensymbol());

View File

@@ -85,6 +85,10 @@ Command sequence
This leaves the calculator, when given as a top-level
command.
ABORT
Forces an immediate quit regardless calc command line
flags and termina state.
CD
Change the current directory to the home directory, if $HOME
is set in the environment.

View File

@@ -208,6 +208,9 @@ Statements
Exit is an alias for quit.
ABORT
Forces an immediate quit regardless calc command line
flags and termina state.
PRINT exprs
For interactive expression evaluation, the values of all

2
hist.c
View File

@@ -242,7 +242,7 @@ int
hist_getline(char *prompt, char *buf, int len)
{
if (!inited)
(void) hist_init((char *) NULL);
(void) hist_init(calcbindings);
HS.prompt = prompt;
HS.bufsize = len - 2;

View File

@@ -89,19 +89,19 @@ int i_flag = FALSE; /* TRUE => go interactive if permitted */
/*
* global values
*/
char *calcpath; /* $CALCPATH or default */
char *calcrc; /* $CALCRC or default */
char *calcbindings; /* $CALCBINDINGS or default */
char *home; /* $HOME or default */
char *pager; /* $PAGER or default */
char *shell; /* $SHELL or default */
int stdin_tty = FALSE; /* TRUE if stdin is a tty */
char *calcpath = NULL; /* $CALCPATH or default */
char *calcrc = NULL; /* $CALCRC or default */
char *calcbindings = NULL; /* $CALCBINDINGS or default */
char *home = NULL; /* $HOME or default */
char *pager = NULL; /* $PAGER or default */
char *shell = NULL; /* $SHELL or default */
int stdin_tty = FALSE; /* TRUE if stdin is a tty */
int havecommands = FALSE; /* TRUE if have one or more cmd args */
int stoponerror = FALSE; /* >0 => stop, <0 => continue on error */
int post_init = FALSE; /* TRUE setjmp for math_error is ready */
int post_init = FALSE; /* TRUE setjmp for math_error is ready */
int no_env = FALSE; /* TRUE (-e) => ignore env vars on startup */
int errmax = ERRMAX; /* if >= 0, maximum value for errcount */
int no_env = FALSE; /* TRUE (-e) => ignore env vars on startup */
int errmax = ERRMAX; /* if >= 0, maximum value for errcount */
NUMBER *epsilon_default; /* default allowed error for float calcs */

View File

@@ -33,6 +33,7 @@ static BOOL saveval = TRUE; /* to enable or disable saving */
static int calc_errno; /* most recent error-number */
static int errcount; /* counts calls to error_value */
static BOOL go;
static BOOL abort_now;
/*
* global symbols
@@ -3139,13 +3140,21 @@ o_quit(FUNC *fp, long index)
if (cp)
printf("%s\n", cp);
else
printf("Quit statement executed\n");
printf("Quit or abort executed\n");
if (!inputisterminal() && fp->f_name[0] == '*')
closeinput();
go = FALSE;
}
static void
o_abort(FUNC *fp, long index)
{
abort_now = TRUE;
o_quit(fp, index);
}
static void
o_getepsilon(void)
{
@@ -3533,7 +3542,8 @@ static struct opcode opcodes[MAX_OPCODE+1] = {
{o_backslash, OPNUL, "BACKSLASH"}, /* unary backslash op */
{o_setminus, OPNUL, "SETMINUS"}, /* binary backslash op */
{o_plus, OPNUL, "PLUS"}, /* unary + op */
{o_jumpnn, OPJMP, "JUMPNN"} /* jump if non-null */
{o_jumpnn, OPJMP, "JUMPNN"}, /* jump if non-null */
{o_abort, OPONE, "ABORT"} /* abort operation */
};
@@ -3567,6 +3577,7 @@ calculate(FUNC *fp, int argcount)
funcname = fp->f_name;
funcline = 0;
go = TRUE;
abort_now = FALSE;
origargcount = argcount;
while (argcount < fp->f_paramcount) {
stack++;
@@ -3703,6 +3714,13 @@ calculate(FUNC *fp, int argcount)
freevalue(stack--);
funcname = oldname;
funcline = oldline;
if (abort_now) {
if (!stdin_tty)
run_state = RUN_EXIT;
else if (run_state < RUN_PRE_TOP_LEVEL)
run_state = RUN_PRE_TOP_LEVEL;
longjmp(jmpbuf, 1);
}
return;
}
@@ -3748,8 +3766,10 @@ dumpop(unsigned long *pc)
case OP_PRINTSTRING: case OP_STRING:
printf(" \"%s\"\n", findstring((long)(*pc))->s_str);
return 2;
case OP_QUIT:
printf(" \"%s\"\n", findstring((long)(*pc))->s_str);
case OP_QUIT: case OP_ABORT:
if ((long)(*pc) >= 0)
printf(" \"%s\"", findstring((long)(*pc))->s_str);
putchar('\n');
return 2;
case OP_INDEXADDR:
printf(" %ld %ld\n", pc[0], pc[1]);

View File

@@ -144,7 +144,8 @@
#define OP_SETMINUS 129L /* binary backslash */
#define OP_PLUS 130L /* unary + */
#define OP_JUMPNN 131L /* jump if top value is non-null */
#define MAX_OPCODE 131L /* highest legal opcode */
#define OP_ABORT 132L /* abort operation */
#define MAX_OPCODE 132L /* highest legal opcode */
/*

View File

@@ -83,6 +83,7 @@ static struct keyword keywords[] = {
{"print", T_PRINT},
{"cd", T_CD},
{"undefine", T_UNDEFINE},
{"abort", T_ABORT},
{NULL, 0}
};

View File

@@ -110,6 +110,7 @@
#define T_PRINT 124 /* print keyword */
#define T_CD 125 /* change directory keyword */
#define T_UNDEFINE 126 /* undefine keyword */
#define T_ABORT 127 /* abort operation */
#define iskeyword(n) ((n) > 100) /* TRUE if token is a keyword */

View File

@@ -12,7 +12,7 @@
#define MAJOR_VER 2 /* major version */
#define MINOR_VER 11 /* minor version */
#define MAJOR_PATCH 0 /* patch level or 0 if no patch */
#define MINOR_PATCH "8.6" /* test number or empty string if no patch */
#define MINOR_PATCH "8.7" /* test number or empty string if no patch */
/*
* calc version constants