mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
Release calc version 2.12.0.2
This commit is contained in:
38
CHANGES
38
CHANGES
@@ -145,6 +145,40 @@ The following are the changes from calc version 2.12.0 to date:
|
|||||||
|
|
||||||
Added missing help file for the stoponerror() builtin.
|
Added missing help file for the stoponerror() builtin.
|
||||||
|
|
||||||
|
Corrected and improved the help documentation for factor and lfactor.
|
||||||
|
|
||||||
|
Fixed a problem where some error messages that should have been
|
||||||
|
written to a file or string, went to stderr instead. This bug was
|
||||||
|
fixed by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||||
|
|
||||||
|
Corrected the documentation relating to the calc -c command line option.
|
||||||
|
The -c relates to scan/parse errors only, not execution errors.
|
||||||
|
|
||||||
|
Corrected a stack overflow problem where the math_fmt() in zio.c
|
||||||
|
could be induced to overflow the stack. This problem was independently
|
||||||
|
reported by Chew Keong Tan of Secunia Research <vuln at secunia dot com>.
|
||||||
|
|
||||||
|
Corrected a stack overflow problem where the scanerror() in token.c
|
||||||
|
could be induced to overflow the stack by a malformed token.
|
||||||
|
|
||||||
|
Made math_error() in math_error.c more robust against a error
|
||||||
|
message constant that is too long.
|
||||||
|
|
||||||
|
Made read_bindings() in hist.c more robust against very line bindings
|
||||||
|
config lines.
|
||||||
|
|
||||||
|
Made listsort() in listfunc.c and matsort() matfunc.c more robust
|
||||||
|
against sorting of impossibly huge lists and matrices.
|
||||||
|
|
||||||
|
Warnings about an undefining a builtin or undefined function, a
|
||||||
|
constant before the comma operator, and an unterminated comment is
|
||||||
|
now processed by scanerrors (not simply written directly to stderr).
|
||||||
|
These warnings file and line number in which the "error" occurred
|
||||||
|
as well as a more precise message than before. If using -c on the
|
||||||
|
calc command line or if stoponerror(-1), then assuming there are
|
||||||
|
no other compile errors, only the unterminated comment will stop
|
||||||
|
completion of the function being defined.
|
||||||
|
|
||||||
|
|
||||||
The following are the changes from calc version 2.11.10.1 to 2.11.11:
|
The following are the changes from calc version 2.11.10.1 to 2.11.11:
|
||||||
|
|
||||||
@@ -5962,8 +5996,8 @@ Following is a list of visible changes to calc from version 1.24.7 to 1.26.1:
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.76 $
|
## @(#) $Revision: 29.78 $
|
||||||
## @(#) $Id: CHANGES,v 29.76 2006/05/21 07:55:17 chongo Exp $
|
## @(#) $Id: CHANGES,v 29.78 2006/06/03 22:52:39 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1993/06/02 18:12:57
|
## Under source code control: 1993/06/02 18:12:57
|
||||||
|
18
addop.c
18
addop.c
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.9 $
|
* @(#) $Revision: 29.12 $
|
||||||
* @(#) $Id: addop.c,v 29.9 2006/05/22 19:04:45 chongo Exp $
|
* @(#) $Id: addop.c,v 29.12 2006/06/03 22:47:28 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:10
|
* Under source code control: 1990/02/15 01:48:10
|
||||||
@@ -195,8 +195,8 @@ endfunc(void)
|
|||||||
checklabels();
|
checklabels();
|
||||||
|
|
||||||
if (errorcount) {
|
if (errorcount) {
|
||||||
printf("\"%s\": %ld error%s\n", newname, errorcount,
|
scanerror(T_NULL,"Compilation of \"%s\" failed: %ld error(s)",
|
||||||
((errorcount == 1) ? "" : "s"));
|
newname, errorcount);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
size = funcsize(curfunc->f_opcodecount);
|
size = funcsize(curfunc->f_opcodecount);
|
||||||
@@ -280,8 +280,9 @@ rmuserfunc(char *name)
|
|||||||
|
|
||||||
index = findstr(&funcnames, name);
|
index = findstr(&funcnames, name);
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
fprintf(stderr, "%s() has never been defined\n",
|
errorcount--;
|
||||||
name);
|
scanerror(T_NULL,
|
||||||
|
"Attempt to undefine an undefined function\n\t\"%s\"", name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (functions[index] == NULL)
|
if (functions[index] == NULL)
|
||||||
@@ -526,9 +527,8 @@ addop(long op)
|
|||||||
fp->f_opcodecount -= diff;
|
fp->f_opcodecount -= diff;
|
||||||
oldop = OP_NOP;
|
oldop = OP_NOP;
|
||||||
oldoldop = OP_NOP;
|
oldoldop = OP_NOP;
|
||||||
fprintf(stderr,
|
errorcount--;
|
||||||
"Line %ld: unused value ignored\n",
|
scanerror(T_NULL, "Constant before comma operator");
|
||||||
linenumber());
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.25 $
|
* @(#) $Revision: 29.26 $
|
||||||
* @(#) $Id: regress.cal,v 29.25 2006/05/21 00:58:31 chongo Exp $
|
* @(#) $Id: regress.cal,v 29.26 2006/06/02 09:49:13 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:36
|
* Under source code control: 1990/02/15 01:50:36
|
||||||
@@ -3409,6 +3409,7 @@ define test_fileops()
|
|||||||
local C = "Curt";
|
local C = "Curt";
|
||||||
local N = "Noll";
|
local N = "Noll";
|
||||||
local LCN = "Landon\nCurt\nNoll\n";
|
local LCN = "Landon\nCurt\nNoll\n";
|
||||||
|
local long = "0123456789abcdef0123456789abcdef";
|
||||||
|
|
||||||
print '4200: Beginning test_fileops';
|
print '4200: Beginning test_fileops';
|
||||||
|
|
||||||
@@ -3511,16 +3512,32 @@ define test_fileops()
|
|||||||
*/
|
*/
|
||||||
vrfy(!iserror(p=fpathopen("junk4200","r",".")),
|
vrfy(!iserror(p=fpathopen("junk4200","r",".")),
|
||||||
'4260: !iserror(p=fparhopen("junk4200","r","."))');
|
'4260: !iserror(p=fparhopen("junk4200","r","."))');
|
||||||
|
vrfy(!iserror(fclose(p)), '4261: !iserror(fclose(p))');
|
||||||
vrfy(!iserror(r=fpathopen("regress.cal","r")),
|
vrfy(!iserror(r=fpathopen("regress.cal","r")),
|
||||||
'4261: !iserror(r=fparhopen("regress.cal","r","."))');
|
'4262: !iserror(r=fparhopen("regress.cal","r","."))');
|
||||||
|
vrfy(!iserror(fclose(r)), '4263: !iserror(fclose(r))');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* verify non-stack overflow on long filenames
|
||||||
|
*/
|
||||||
|
long = long + long + long + long;
|
||||||
|
print '4264: long = long + long + long + long;';
|
||||||
|
long = long + long + long + long;
|
||||||
|
print '4265: long = long + long + long + long;';
|
||||||
|
vrfy(strlen(long) == 512, '4266: strlen(long) == 512');
|
||||||
|
/* bump ecnt up by 1 */
|
||||||
|
++ecnt;
|
||||||
|
print '4267: ++ecnt;';
|
||||||
|
vrfy(isfile(p=fopen(long,"r")) == 0,
|
||||||
|
'4268: isfile(p=fopen(long,"r")) == 0');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cleanup
|
* cleanup
|
||||||
*/
|
*/
|
||||||
x = rm("junk4200");
|
x = rm("junk4200");
|
||||||
print '4262: x = rm("junk4200")';
|
print '4269: x = rm("junk4200")';
|
||||||
|
|
||||||
print '4263: Ending test_fileops';
|
print '4270: Ending test_fileops';
|
||||||
}
|
}
|
||||||
print '071: parsed test_fileops()';
|
print '071: parsed test_fileops()';
|
||||||
|
|
||||||
|
13
calc.man
13
calc.man
@@ -15,8 +15,8 @@
|
|||||||
.\" received a copy with calc; if not, write to Free Software Foundation, Inc.
|
.\" received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
.\"
|
.\"
|
||||||
.\" @(#) $Revision: 29.18 $
|
.\" @(#) $Revision: 29.20 $
|
||||||
.\" @(#) $Id: calc.man,v 29.18 2005/10/18 11:10:18 chongo Exp $
|
.\" @(#) $Id: calc.man,v 29.20 2006/06/01 12:04:16 chongo Exp $
|
||||||
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
|
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
|
||||||
.\"
|
.\"
|
||||||
.\" Under source code control: 1991/07/23 05:48:26
|
.\" Under source code control: 1991/07/23 05:48:26
|
||||||
@@ -63,8 +63,11 @@ CALC OPTIONS
|
|||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-c
|
.B \-c
|
||||||
Continue reading command lines even after an execution
|
Continue reading command lines even after an scan/parse
|
||||||
error has caused the abandonment of a line.
|
error has caused the abandonment of a line.
|
||||||
|
Note that this option only deals with scanning and
|
||||||
|
parsing of the calc language.
|
||||||
|
It does not deal with execution or run-time errors.
|
||||||
.sp 1
|
.sp 1
|
||||||
For example:
|
For example:
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -76,7 +79,7 @@ calc read many_errors.cal
|
|||||||
.sp 1
|
.sp 1
|
||||||
will cause
|
will cause
|
||||||
.B calc
|
.B calc
|
||||||
to abort on the first error, whereas:
|
to abort on the first syntax error, whereas:
|
||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
@@ -88,7 +91,7 @@ will
|
|||||||
cause
|
cause
|
||||||
.B calc
|
.B calc
|
||||||
to try to process each line being read
|
to try to process each line being read
|
||||||
despite the errors that it encounters.
|
despite the scan/parse errors that it encounters.
|
||||||
.sp 1
|
.sp 1
|
||||||
By default, calc startup resource files are silently
|
By default, calc startup resource files are silently
|
||||||
ignored if not found.
|
ignored if not found.
|
||||||
|
26
codegen.c
26
codegen.c
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.15 $
|
* @(#) $Revision: 29.18 $
|
||||||
* @(#) $Id: codegen.c,v 29.15 2006/05/20 09:42:57 chongo Exp $
|
* @(#) $Id: codegen.c,v 29.18 2006/06/03 22:47:28 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:13
|
* Under source code control: 1990/02/15 01:48:13
|
||||||
@@ -306,8 +306,9 @@ ungetfunction(void)
|
|||||||
name = tokensymbol();
|
name = tokensymbol();
|
||||||
type = getbuiltinfunc(name);
|
type = getbuiltinfunc(name);
|
||||||
if (type >= 0) {
|
if (type >= 0) {
|
||||||
fprintf(stderr,
|
errorcount--;
|
||||||
"Attempt to undefine builtin function \"%s\" ignored\n", name);
|
scanerror(T_NULL,
|
||||||
|
"Attempt to undefine the builtin function \"%s\"", name);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
rmuserfunc(name);
|
rmuserfunc(name);
|
||||||
@@ -365,7 +366,8 @@ getfunction(void)
|
|||||||
if (type == T_RIGHTPAREN)
|
if (type == T_RIGHTPAREN)
|
||||||
break;
|
break;
|
||||||
if (type != T_SYMBOL) {
|
if (type != T_SYMBOL) {
|
||||||
scanerror(T_COMMA, "Bad function definition");
|
scanerror(T_COMMA,
|
||||||
|
"Using non-identifier as function parameter");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
name = tokensymbol();
|
name = tokensymbol();
|
||||||
@@ -394,7 +396,8 @@ getfunction(void)
|
|||||||
if (type == T_RIGHTPAREN)
|
if (type == T_RIGHTPAREN)
|
||||||
break;
|
break;
|
||||||
if (type != T_COMMA) {
|
if (type != T_COMMA) {
|
||||||
scanerror(T_COMMA, "Bad function definition");
|
scanerror(T_COMMA,
|
||||||
|
"Using other than comma to separate parameters");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -408,8 +411,7 @@ getfunction(void)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
scanerror(T_NULL,
|
scanerror(T_NULL,
|
||||||
"Left brace or equals sign "
|
"Left brace or equals sign expected for function");
|
||||||
"expected for function");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
endfunc();
|
endfunc();
|
||||||
@@ -938,6 +940,7 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
case T_RIGHTBRACKET:
|
case T_RIGHTBRACKET:
|
||||||
case T_RIGHTBRACE:
|
case T_RIGHTBRACE:
|
||||||
case T_NEWLINE:
|
case T_NEWLINE:
|
||||||
|
case T_ELSE:
|
||||||
case T_EOF:
|
case T_EOF:
|
||||||
rescantoken();
|
rescantoken();
|
||||||
/*FALLTHRU*/
|
/*FALLTHRU*/
|
||||||
@@ -1020,6 +1023,7 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
case T_RIGHTBRACE:
|
case T_RIGHTBRACE:
|
||||||
case T_NEWLINE:
|
case T_NEWLINE:
|
||||||
case T_EOF:
|
case T_EOF:
|
||||||
|
case T_ELSE:
|
||||||
rescantoken();
|
rescantoken();
|
||||||
return;
|
return;
|
||||||
case T_SEMICOLON:
|
case T_SEMICOLON:
|
||||||
@@ -1393,7 +1397,7 @@ getinitlist(void)
|
|||||||
oldmode = tokenmode(TM_DEFAULT);
|
oldmode = tokenmode(TM_DEFAULT);
|
||||||
|
|
||||||
if (gettoken() != T_LEFTBRACE) {
|
if (gettoken() != T_LEFTBRACE) {
|
||||||
scanerror(T_SEMICOLON, "Missing brace for initialization list");
|
scanerror(T_SEMICOLON, "Missing left brace for initialization list");
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -1428,7 +1432,7 @@ getinitlist(void)
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
scanerror(T_SEMICOLON,
|
scanerror(T_SEMICOLON,
|
||||||
"Bad initialization list");
|
"Missing right brace for initialization list");
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -2305,7 +2309,7 @@ getfilename(char *name, size_t namelen, BOOL *once)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* special hack - symbols starting with $ are
|
* special hack - symbols starting with $ are
|
||||||
* treated as a gloabl variable
|
* treated as a global variable
|
||||||
* instead of a literal string.
|
* instead of a literal string.
|
||||||
*/
|
*/
|
||||||
if (symstr[0] == '$') {
|
if (symstr[0] == '$') {
|
||||||
|
@@ -34,8 +34,9 @@ DESCRIPTION
|
|||||||
EXAMPLE
|
EXAMPLE
|
||||||
Assuming there is no file with name "not_a_file"
|
Assuming there is no file with name "not_a_file"
|
||||||
; errno(0)
|
; errno(0)
|
||||||
; errmax(errcount()+4)
|
|
||||||
0
|
0
|
||||||
|
; errmax(errcount()+4)
|
||||||
|
20
|
||||||
; badfile = fopen("not_a_file", "r")
|
; badfile = fopen("not_a_file", "r")
|
||||||
; print errno(), error(), strerror()
|
; print errno(), error(), strerror()
|
||||||
2 System error 2 No such file or directory
|
2 System error 2 No such file or directory
|
||||||
@@ -70,8 +71,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.4 $
|
## @(#) $Revision: 29.5 $
|
||||||
## @(#) $Id: errno,v 29.4 2006/05/21 07:31:46 chongo Exp $
|
## @(#) $Id: errno,v 29.5 2006/05/23 19:15:48 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errno,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errno,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1994/10/27 03:05:08
|
## Under source code control: 1994/10/27 03:05:08
|
||||||
|
14
help/error
14
help/error
@@ -19,17 +19,13 @@ DESCRIPTION
|
|||||||
is returned by some function, errno() will return the value n.
|
is returned by some function, errno() will return the value n.
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
Note that by default, errmax() is 0 so unless errmax() is
|
|
||||||
increased you will get:
|
|
||||||
|
|
||||||
; ba = error(10009)
|
|
||||||
Error 10009 caused errcount to exceed errmax
|
|
||||||
|
|
||||||
; errmax(errcount()+1)
|
; errmax(errcount()+1)
|
||||||
0
|
20
|
||||||
; a = error(10009)
|
; a = error(10009)
|
||||||
; a
|
; a
|
||||||
Error 10009
|
Error 10009
|
||||||
|
; strerror(a)
|
||||||
|
"Bad argument for inverse"
|
||||||
|
|
||||||
LIMITS
|
LIMITS
|
||||||
none
|
none
|
||||||
@@ -57,8 +53,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.4 $
|
## @(#) $Revision: 29.5 $
|
||||||
## @(#) $Id: error,v 29.4 2006/05/21 07:31:46 chongo Exp $
|
## @(#) $Id: error,v 29.5 2006/05/23 19:15:48 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/error,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/error,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1995/12/18 03:30:59
|
## Under source code control: 1995/12/18 03:30:59
|
||||||
|
39
help/factor
39
help/factor
@@ -9,38 +9,47 @@ TYPES
|
|||||||
limit integer with abs(limit) < 2^32, defaults to 2^32 - 1
|
limit integer with abs(limit) < 2^32, defaults to 2^32 - 1
|
||||||
err integer
|
err integer
|
||||||
|
|
||||||
return positive integer, -1 or err
|
return positive integer or err
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
|
This function ignores the signs of n and limit, so here we shall
|
||||||
|
assume n and limit are both nonnegative.
|
||||||
|
|
||||||
If n >= 0 and n has a prime factor less than or equal to limit,
|
If n has a prime proper factor less than or equal to limit, then
|
||||||
factor(n, limit) returns the smallest such factor. If n >= 0
|
factor(n, limit) returns the smallest such factor.
|
||||||
and the smallest prime factor of n exceeds limit, 1 is returned.
|
|
||||||
In particular, if n >= 0 and limit <= 1, factor(n, limit)
|
|
||||||
always returns 1; factor(n,2) returns 2 if and only if n is even.
|
|
||||||
|
|
||||||
If n < 0, -1 is returned.
|
NOTE: A proper factor of n>1 is a factor < n. In other words,
|
||||||
|
for n>1 is not a proper factor of itself. The value 1
|
||||||
|
is a special case because 1 is a proper factor of 1.
|
||||||
|
|
||||||
If abs(limit) >= 2^32, factor(n, limit) causes an error,
|
When every prime proper factor of n is greater than limit, 1 is
|
||||||
factor(n, limit, err) returns the value of err.
|
returned. In particular, if limit < 2, factor(n, limit) always
|
||||||
|
returns 1. Also, factor(n,2) returns 2 if and only if n is even
|
||||||
|
and n > 2.
|
||||||
|
|
||||||
|
If 1 < n < nextprime(limit)^2, then f(n, limit) == 1 <==> n is prime.
|
||||||
|
For example, if 1 < n < 121, n is prime if and only if f(n,7) == 1.
|
||||||
|
|
||||||
|
If limit >= 2^32, factor(n, limit) causes an error and factor(n,
|
||||||
|
limit, err) returns the value of err.
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
; print factor(35,4), factor(35,5), factor(35), factor(-35)
|
; print factor(35,4), factor(35,5), factor(35), factor(-35)
|
||||||
1 5 5 -1
|
1 5 5 5
|
||||||
|
|
||||||
; print factor(2^32 + 1), factor(2^47 - 1), factor(2^59 - 1)
|
; print factor(2^32 + 1), factor(2^47 - 1), factor(2^59 - 1)
|
||||||
641 2351 179951
|
641 2351 179951
|
||||||
|
|
||||||
LIMITS
|
LIMITS
|
||||||
none
|
limit < 2^32
|
||||||
|
|
||||||
LINK LIBRARY
|
LINK LIBRARY
|
||||||
FLAG zfactor(ZVALUE n, ZVALUE limit, ZVALUE *res)
|
FLAG zfactor(ZVALUE n, ZVALUE limit, ZVALUE *res)
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
lfactor
|
lfactor
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -56,8 +65,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.3 $
|
## @(#) $Revision: 29.4 $
|
||||||
## @(#) $Id: factor,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
## @(#) $Id: factor,v 29.4 2006/06/01 11:36:02 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/factor,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/factor,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1995/12/18 12:34:57
|
## Under source code control: 1995/12/18 12:34:57
|
||||||
|
@@ -35,7 +35,7 @@ EXAMPLE
|
|||||||
file is open
|
file is open
|
||||||
|
|
||||||
; err = fclose(fd);
|
; err = fclose(fd);
|
||||||
; if (isnull(err)) print "close successful"; else errno(err);
|
; if (isnull(err)) print "close successful"; else strerror(err);
|
||||||
close successful
|
close successful
|
||||||
|
|
||||||
; if (!fd) print "file is closed";
|
; if (!fd) print "file is closed";
|
||||||
@@ -51,7 +51,7 @@ SEE ALSO
|
|||||||
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
|
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
|
||||||
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt
|
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -67,8 +67,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.3 $
|
## @(#) $Revision: 29.4 $
|
||||||
## @(#) $Id: fclose,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
## @(#) $Id: fclose,v 29.4 2006/05/23 19:15:48 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fclose,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fclose,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1994/10/27 03:04:16
|
## Under source code control: 1994/10/27 03:04:16
|
||||||
|
10
help/file
10
help/file
@@ -59,12 +59,12 @@ Using files
|
|||||||
function returns the numeric value of errno if there had been an
|
function returns the numeric value of errno if there had been an
|
||||||
error using the file, or the null value if there was no error.
|
error using the file, or the null value if there was no error.
|
||||||
|
|
||||||
The builtin 'errno' can be use to convert an errno number into
|
The builtin 'strerror' can be use to convert an errno number into
|
||||||
a slightly more meaningful error message:
|
a slightly more meaningful error message:
|
||||||
|
|
||||||
badfile = fopen("not_a_file", "r");
|
badfile = fopen("not_a_file", "r");
|
||||||
if (!isfile(badfile)) {
|
if (!isfile(badfile)) {
|
||||||
print "error #" : badfile : ":", errno(badfile);
|
print "error #" : badfile : ":", strerror(badfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
File values can be printed. When this is done, the filename of the
|
File values can be printed. When this is done, the filename of the
|
||||||
@@ -166,7 +166,7 @@ Using files
|
|||||||
but the output is returned as a string value instead of being
|
but the output is returned as a string value instead of being
|
||||||
printed.
|
printed.
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -182,8 +182,8 @@ Using files
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: file,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: file,v 29.3 2006/05/23 19:15:48 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/file,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/file,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1991/07/21 04:37:19
|
## Under source code control: 1991/07/21 04:37:19
|
||||||
|
18
help/fopen
18
help/fopen
@@ -75,7 +75,7 @@ DESCRIPTION
|
|||||||
The truth value of an opened file is TRUE.
|
The truth value of an opened file is TRUE.
|
||||||
|
|
||||||
If the open is unsuccessful, the numeric value of errno is returned.
|
If the open is unsuccessful, the numeric value of errno is returned.
|
||||||
You can the errno() builtin to determine what the errno number means.
|
You can the strerror() builtin to determine what the errno number means.
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
; fd = fopen("/etc/motd", "r")
|
; fd = fopen("/etc/motd", "r")
|
||||||
@@ -90,9 +90,11 @@ EXAMPLE
|
|||||||
; outfile
|
; outfile
|
||||||
FILE 4 "~/tmp/output" (writing, pos 0)
|
FILE 4 "~/tmp/output" (writing, pos 0)
|
||||||
|
|
||||||
; badfile = fopen("not_a_file", "r")
|
; badfile = fopen("not_a_file", "r");
|
||||||
; if (!isfile(badfile)) print "error #" : badfile : ":", errno(badfile);
|
; if (!isfile(badfile)) {
|
||||||
error #2: No such file or directory
|
;; printf("error(%d): %s\n", errno(badfile), strerror(badfile));
|
||||||
|
;; }
|
||||||
|
error(2): No such file or directory
|
||||||
|
|
||||||
LIMITS
|
LIMITS
|
||||||
none
|
none
|
||||||
@@ -103,9 +105,9 @@ LINK LIBRARY
|
|||||||
SEE ALSO
|
SEE ALSO
|
||||||
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
|
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
|
||||||
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt,
|
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt,
|
||||||
fpathopen
|
fpathopen, strerror
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -121,8 +123,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.4 $
|
## @(#) $Revision: 29.6 $
|
||||||
## @(#) $Id: fopen,v 29.4 2006/05/07 07:18:26 chongo Exp $
|
## @(#) $Id: fopen,v 29.6 2006/05/23 20:06:16 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fopen,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fopen,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1994/10/27 03:04:17
|
## Under source code control: 1994/10/27 03:04:17
|
||||||
|
@@ -165,7 +165,7 @@ EXAMPLE
|
|||||||
FILE 7 "/home/chongo/tmp/output" (writing, pos 0)
|
FILE 7 "/home/chongo/tmp/output" (writing, pos 0)
|
||||||
|
|
||||||
; badfile = fpathopen("no_such_file", "r")
|
; badfile = fpathopen("no_such_file", "r")
|
||||||
; if (!isfile(badfile)) print "error #" : badfile : ":", errno(badfile);
|
; if (!isfile(badfile)) print "error #" errno(badfile) : ":" : strerror(badfile);
|
||||||
error #2: No such file or directory
|
error #2: No such file or directory
|
||||||
|
|
||||||
LIMITS
|
LIMITS
|
||||||
@@ -195,8 +195,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: fpathopen,v 29.2 2006/05/07 07:24:34 chongo Exp $
|
## @(#) $Id: fpathopen,v 29.3 2006/05/23 19:15:48 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fpathopen,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fpathopen,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 2006/05/07 23:56:04
|
## Under source code control: 2006/05/07 23:56:04
|
||||||
|
25
help/lfactor
25
help/lfactor
@@ -11,20 +11,29 @@ TYPES
|
|||||||
return positive integer
|
return positive integer
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
If n >= 0 and n has a prime factor in the first m primes,
|
This function ignores the signs of n and m, so here we shall
|
||||||
lfactor(n, m) returns the smallest such factor.
|
assume n and limit are both nonnegative.
|
||||||
|
|
||||||
If n < 0, -1 is returned.
|
If n is nonzero and abs(n) has a prime proper factor in the first
|
||||||
|
m primes (2, 3, 5, ...), then lfactor(n, m) returns the smallest
|
||||||
|
such factor. Otherwise 1 is returned.
|
||||||
|
|
||||||
|
If n is nonzero and m = pix(limit), then lfactor(n, m) returns the
|
||||||
|
same as factor(n, limit).
|
||||||
|
|
||||||
|
Both lfactor(n, 0) and lfactor(1, m) return 1 for all n and m.
|
||||||
|
Also lfactor(0, m) always returns 1, and factor(0, limit) always
|
||||||
|
returns 2 if limit >= 2.
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
; print lfactor(35,2), lfactor(35,3), lfactor(-35, 3)
|
; print lfactor(35,2), lfactor(35,3), lfactor(-35, 3)
|
||||||
1 5 -1
|
1 5 5
|
||||||
|
|
||||||
; print lfactor(2^32+1,115), lfactor(2^32+1,116), lfactor(2^59-1,1e5)
|
; print lfactor(2^32+1,115), lfactor(2^32+1,116), lfactor(2^59-1,1e5)
|
||||||
1 641 179951
|
1 641 179951
|
||||||
|
|
||||||
LIMITS
|
LIMITS
|
||||||
none
|
m <= 203280221 (= number of primes < 2^32)
|
||||||
|
|
||||||
LINK LIBRARY
|
LINK LIBRARY
|
||||||
NUMBER *qlowfactor(NUMBER *n, NUMBER *count)
|
NUMBER *qlowfactor(NUMBER *n, NUMBER *count)
|
||||||
@@ -33,7 +42,7 @@ LINK LIBRARY
|
|||||||
SEE ALSO
|
SEE ALSO
|
||||||
factor
|
factor
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -49,8 +58,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.3 $
|
## @(#) $Revision: 29.4 $
|
||||||
## @(#) $Id: lfactor,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
## @(#) $Id: lfactor,v 29.4 2006/06/01 11:36:02 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/lfactor,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/lfactor,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1995/12/18 12:34:57
|
## Under source code control: 1995/12/18 12:34:57
|
||||||
|
14
help/usage
14
help/usage
@@ -8,19 +8,21 @@ Calc command line
|
|||||||
|
|
||||||
#!/usr/local/bin/calc -S [other_flags]
|
#!/usr/local/bin/calc -S [other_flags]
|
||||||
|
|
||||||
-c Continue reading command lines even after an execution
|
-c Continue reading command lines even after an scan/parse
|
||||||
error has caused the abandonment of a line.
|
error has caused the abandonment of a line. Note that this
|
||||||
|
option only deals with scanning and parsing of the calc
|
||||||
|
language. It does not deal with execution or run-time errors.
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
calc read many_errors.cal
|
calc read many_errors.cal
|
||||||
|
|
||||||
will cause calc to abort on the first error, whereas:
|
will cause calc to abort on the first syntax error, whereas:
|
||||||
|
|
||||||
calc -c read many_errors.cal
|
calc -c read many_errors.cal
|
||||||
|
|
||||||
will cause calc to try to process each line being read
|
will cause calc to try to process each line being read
|
||||||
despite the errors that it encounters.
|
despite the scan/parse errors that it encounters.
|
||||||
|
|
||||||
By default, calc startup resource files are
|
By default, calc startup resource files are
|
||||||
silently ignored if not found. This flag will report
|
silently ignored if not found. This flag will report
|
||||||
@@ -357,8 +359,8 @@ For more information use the following calc commands:
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.6 $
|
## @(#) $Revision: 29.8 $
|
||||||
## @(#) $Id: usage,v 29.6 2003/06/10 21:39:34 chongo Exp $
|
## @(#) $Id: usage,v 29.8 2006/06/01 12:04:16 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/usage,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/usage,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1991/07/21 04:37:25
|
## Under source code control: 1991/07/21 04:37:25
|
||||||
|
9
hist.c
9
hist.c
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.11 $
|
* @(#) $Revision: 29.12 $
|
||||||
* @(#) $Id: hist.c,v 29.11 2006/05/22 19:04:45 chongo Exp $
|
* @(#) $Id: hist.c,v 29.12 2006/06/02 09:57:12 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/hist.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/hist.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1993/05/02 20:09:19
|
* Under source code control: 1993/05/02 20:09:19
|
||||||
@@ -589,7 +589,7 @@ read_bindings(FILE *fp)
|
|||||||
{
|
{
|
||||||
char *cp;
|
char *cp;
|
||||||
KEY_MAP *input_map;
|
KEY_MAP *input_map;
|
||||||
char line[100];
|
char line[BUFSIZ+1];
|
||||||
|
|
||||||
base_map = find_map(base_map_name);
|
base_map = find_map(base_map_name);
|
||||||
cur_map = base_map;
|
cur_map = base_map;
|
||||||
@@ -599,6 +599,7 @@ read_bindings(FILE *fp)
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
while (fgets(line, sizeof(line) - 1, fp)) {
|
while (fgets(line, sizeof(line) - 1, fp)) {
|
||||||
|
line[BUFSIZ] = '\0';
|
||||||
cp = line;
|
cp = line;
|
||||||
while (isspace((int)*cp))
|
while (isspace((int)*cp))
|
||||||
cp++;
|
cp++;
|
||||||
@@ -1546,7 +1547,7 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
char *filename;
|
char *filename;
|
||||||
int len;
|
int len;
|
||||||
char buf[256];
|
char buf[BUFSIZ+1];
|
||||||
|
|
||||||
filename = NULL;
|
filename = NULL;
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
|
16
listfunc.c
16
listfunc.c
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: listfunc.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: listfunc.c,v 29.3 2006/06/02 10:24:09 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/listfunc.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/listfunc.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:18
|
* Under source code control: 1990/02/15 01:48:18
|
||||||
@@ -680,14 +680,13 @@ listreverse(LIST *lp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
listsort(LIST *lp)
|
listsort(LIST *lp)
|
||||||
{
|
{
|
||||||
LISTELEM *start;
|
LISTELEM *start;
|
||||||
LISTELEM *last, *a, *a1, *b, *next;
|
LISTELEM *last, *a, *a1, *b, *next;
|
||||||
LISTELEM *S[32];
|
LISTELEM *S[LONG_BITS+1];
|
||||||
long len[32];
|
long len[LONG_BITS+1];
|
||||||
long i, j, k;
|
long i, j, k;
|
||||||
|
|
||||||
if (lp->l_count < 2)
|
if (lp->l_count < 2)
|
||||||
@@ -697,7 +696,7 @@ listsort(LIST *lp)
|
|||||||
next = lp->l_first;
|
next = lp->l_first;
|
||||||
last = start;
|
last = start;
|
||||||
start->e_next = next;
|
start->e_next = next;
|
||||||
for (k = 0; next; k++) {
|
for (k = 0; next && k < LONG_BITS; k++) {
|
||||||
next->e_prev = last;
|
next->e_prev = last;
|
||||||
last = next;
|
last = next;
|
||||||
S[k] = next;
|
S[k] = next;
|
||||||
@@ -769,6 +768,11 @@ listsort(LIST *lp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (k >= LONG_BITS) {
|
||||||
|
/* this should never happen */
|
||||||
|
math_error("impossible k overflow in listsort!");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
lp->l_first = start->e_next;
|
lp->l_first = start->e_next;
|
||||||
lp->l_first->e_prev = NULL;
|
lp->l_first->e_prev = NULL;
|
||||||
lp->l_last = last;
|
lp->l_last = last;
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.6 $
|
* @(#) $Revision: 29.7 $
|
||||||
* @(#) $Id: longbits.c,v 29.6 2006/05/22 19:04:45 chongo Exp $
|
* @(#) $Id: longbits.c,v 29.7 2006/06/01 11:37:20 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/longbits.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/longbits.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1994/03/18 03:06:18
|
* Under source code control: 1994/03/18 03:06:18
|
||||||
@@ -146,7 +146,7 @@ main(int argc, char **argv)
|
|||||||
*/
|
*/
|
||||||
printf("#undef LONG_BITS\n");
|
printf("#undef LONG_BITS\n");
|
||||||
printf("#define LONG_BITS %ld\t\t/%s/\n",
|
printf("#define LONG_BITS %ld\t\t/%s/\n",
|
||||||
long_bits, "* bit length of a long *");
|
(long int)long_bits, "* bit length of a long *");
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
15
matfunc.c
15
matfunc.c
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.6 $
|
* @(#) $Revision: 29.7 $
|
||||||
* @(#) $Id: matfunc.c,v 29.6 2006/05/20 08:43:55 chongo Exp $
|
* @(#) $Id: matfunc.c,v 29.7 2006/06/02 10:24:09 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/matfunc.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/matfunc.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:18
|
* Under source code control: 1990/02/15 01:48:18
|
||||||
@@ -1606,8 +1606,8 @@ matsort(MATRIX *m)
|
|||||||
{
|
{
|
||||||
VALUE *a, *b, *next, *end;
|
VALUE *a, *b, *next, *end;
|
||||||
VALUE *buf, *p;
|
VALUE *buf, *p;
|
||||||
VALUE *S[32];
|
VALUE *S[LONG_BITS];
|
||||||
long len[32];
|
long len[LONG_BITS];
|
||||||
long i, j, k;
|
long i, j, k;
|
||||||
|
|
||||||
buf = (VALUE *) malloc(m->m_size * sizeof(VALUE));
|
buf = (VALUE *) malloc(m->m_size * sizeof(VALUE));
|
||||||
@@ -1617,7 +1617,7 @@ matsort(MATRIX *m)
|
|||||||
}
|
}
|
||||||
next = m->m_table;
|
next = m->m_table;
|
||||||
end = next + m->m_size;
|
end = next + m->m_size;
|
||||||
for (k = 0; next; k++) {
|
for (k = 0; next && k < LONG_BITS; k++) {
|
||||||
S[k] = next++; /* S[k] is start of a run */
|
S[k] = next++; /* S[k] is start of a run */
|
||||||
len[k] = 1;
|
len[k] = 1;
|
||||||
if (next == end)
|
if (next == end)
|
||||||
@@ -1665,6 +1665,11 @@ matsort(MATRIX *m)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(buf);
|
free(buf);
|
||||||
|
if (k >= LONG_BITS) {
|
||||||
|
/* this should never happen */
|
||||||
|
math_error("impossible k overflow in matsort!");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: math_error.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: math_error.c,v 29.3 2006/06/02 09:52:22 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/math_error.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/math_error.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1994/08/03 05:08:22
|
* Under source code control: 1994/08/03 05:08:22
|
||||||
@@ -95,8 +95,9 @@ math_error(char *fmt, ...)
|
|||||||
#else
|
#else
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
#endif
|
#endif
|
||||||
vsprintf(calc_error, fmt, ap);
|
vsnprintf(calc_error, MAXERROR, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
calc_error[MAXERROR] = '\0';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if we should longjmp, so do
|
* if we should longjmp, so do
|
||||||
|
9
token.c
9
token.c
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.6 $
|
* @(#) $Revision: 29.8 $
|
||||||
* @(#) $Id: token.c,v 29.6 2006/05/20 08:43:55 chongo Exp $
|
* @(#) $Id: token.c,v 29.8 2006/06/03 22:47:28 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/token.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/token.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:25
|
* Under source code control: 1990/02/15 01:48:25
|
||||||
@@ -390,7 +390,7 @@ eatcomment(void)
|
|||||||
reread();
|
reread();
|
||||||
}
|
}
|
||||||
if (ch == EOF || ch == '\0') {
|
if (ch == EOF || ch == '\0') {
|
||||||
fprintf(stderr, "Unterminated comment ignored\n");
|
scanerror(T_NULL, "Unterminated comment");
|
||||||
reread();
|
reread();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -717,8 +717,9 @@ scanerror(int skip, char *fmt, ...)
|
|||||||
if (name)
|
if (name)
|
||||||
fprintf(stderr, "\"%s\", line %ld: ", name, linenumber());
|
fprintf(stderr, "\"%s\", line %ld: ", name, linenumber());
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
vsprintf(buf, fmt, ap);
|
vsnprintf(buf, MAXERROR, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
buf[MAXERROR] = '\0';
|
||||||
fprintf(stderr, "%s\n", buf);
|
fprintf(stderr, "%s\n", buf);
|
||||||
|
|
||||||
/* bail out if continuation not permitted */
|
/* bail out if continuation not permitted */
|
||||||
|
28
value.c
28
value.c
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.8 $
|
* @(#) $Revision: 29.9 $
|
||||||
* @(#) $Id: value.c,v 29.8 2006/05/20 08:43:55 chongo Exp $
|
* @(#) $Id: value.c,v 29.9 2006/06/01 11:47:07 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/value.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/value.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:25
|
* Under source code control: 1990/02/15 01:48:25
|
||||||
@@ -2659,21 +2659,21 @@ printvalue(VALUE *vp, int flags)
|
|||||||
if (userfunc("error_print", vp))
|
if (userfunc("error_print", vp))
|
||||||
return;
|
return;
|
||||||
if (-type >= E__BASE)
|
if (-type >= E__BASE)
|
||||||
printf("Error %d", -type);
|
math_fmt("Error %d", -type);
|
||||||
else
|
else
|
||||||
printf("System error %d", -type);
|
math_fmt("System error %d", -type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case V_NUM:
|
case V_NUM:
|
||||||
qprintnum(vp->v_num, MODE_DEFAULT);
|
qprintnum(vp->v_num, MODE_DEFAULT);
|
||||||
if (conf->traceflags & TRACE_LINKS)
|
if (conf->traceflags & TRACE_LINKS)
|
||||||
printf("#%ld", vp->v_num->links);
|
math_fmt("#%ld", vp->v_num->links);
|
||||||
break;
|
break;
|
||||||
case V_COM:
|
case V_COM:
|
||||||
comprint(vp->v_com);
|
comprint(vp->v_com);
|
||||||
if (conf->traceflags & TRACE_LINKS)
|
if (conf->traceflags & TRACE_LINKS)
|
||||||
printf("##%ld", vp->v_com->links);
|
math_fmt("##%ld", vp->v_com->links);
|
||||||
break;
|
break;
|
||||||
case V_STR:
|
case V_STR:
|
||||||
if (flags & PRINT_UNAMBIG)
|
if (flags & PRINT_UNAMBIG)
|
||||||
@@ -2731,16 +2731,16 @@ printvalue(VALUE *vp, int flags)
|
|||||||
qfree(qtemp);
|
qfree(qtemp);
|
||||||
break;
|
break;
|
||||||
case V_OPTR:
|
case V_OPTR:
|
||||||
printf("o-ptr: %p", vp->v_octet);
|
math_fmt("o-ptr: %p", vp->v_octet);
|
||||||
break;
|
break;
|
||||||
case V_VPTR:
|
case V_VPTR:
|
||||||
printf("v-ptr: %p", vp->v_addr);
|
math_fmt("v-ptr: %p", vp->v_addr);
|
||||||
break;
|
break;
|
||||||
case V_SPTR:
|
case V_SPTR:
|
||||||
printf("s_ptr: %p", vp->v_str);
|
math_fmt("s_ptr: %p", vp->v_str);
|
||||||
break;
|
break;
|
||||||
case V_NPTR:
|
case V_NPTR:
|
||||||
printf("n_ptr: %p", vp->v_num);
|
math_fmt("n_ptr: %p", vp->v_num);
|
||||||
break;
|
break;
|
||||||
case V_NBLOCK:
|
case V_NBLOCK:
|
||||||
if (!userfunc("nblk_print", vp))
|
if (!userfunc("nblk_print", vp))
|
||||||
@@ -2789,22 +2789,22 @@ config_print(CONFIG *cfg)
|
|||||||
|
|
||||||
/* print tab if allowed */
|
/* print tab if allowed */
|
||||||
if (tab_over) {
|
if (tab_over) {
|
||||||
printf("\t");
|
math_str("\t");
|
||||||
} else if (conf->tab_ok) {
|
} else if (conf->tab_ok) {
|
||||||
tab_over = TRUE; /* tab next time */
|
tab_over = TRUE; /* tab next time */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* print name and spaces */
|
/* print name and spaces */
|
||||||
printf("%s", cp->name);
|
math_fmt("%s", cp->name);
|
||||||
len = 16 - strlen(cp->name);
|
len = 16 - strlen(cp->name);
|
||||||
while (len-- > 0)
|
while (len-- > 0)
|
||||||
printf(" ");
|
math_str(" ");
|
||||||
|
|
||||||
/* print value */
|
/* print value */
|
||||||
config_value(cfg, cp->type, &tmp);
|
config_value(cfg, cp->type, &tmp);
|
||||||
printvalue(&tmp, PRINT_SHORT | PRINT_UNAMBIG);
|
printvalue(&tmp, PRINT_SHORT | PRINT_UNAMBIG);
|
||||||
freevalue(&tmp);
|
freevalue(&tmp);
|
||||||
if ((cp+1)->name)
|
if ((cp+1)->name)
|
||||||
printf("\n");
|
math_str("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.58 $
|
* @(#) $Revision: 29.59 $
|
||||||
* @(#) $Id: version.c,v 29.58 2006/05/22 19:04:45 chongo Exp $
|
* @(#) $Id: version.c,v 29.59 2006/06/03 22:52:39 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/version.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/version.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/05/22 11:00:58
|
* Under source code control: 1990/05/22 11:00:58
|
||||||
@@ -48,7 +48,7 @@ static char *program;
|
|||||||
#define MAJOR_VER 2 /* major version */
|
#define MAJOR_VER 2 /* major version */
|
||||||
#define MINOR_VER 12 /* minor version */
|
#define MINOR_VER 12 /* minor version */
|
||||||
#define MAJOR_PATCH 0 /* patch level or 0 if no patch */
|
#define MAJOR_PATCH 0 /* patch level or 0 if no patch */
|
||||||
#define MINOR_PATCH 1 /* test number or 0 if no minor patch */
|
#define MINOR_PATCH 2 /* test number or 0 if no minor patch */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
9
zio.c
9
zio.c
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.6 $
|
* @(#) $Revision: 29.8 $
|
||||||
* @(#) $Id: zio.c,v 29.6 2006/05/19 15:26:10 chongo Exp $
|
* @(#) $Id: zio.c,v 29.8 2006/06/01 16:21:37 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/zio.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/zio.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1993/07/30 19:42:48
|
* Under source code control: 1993/07/30 19:42:48
|
||||||
@@ -176,11 +176,12 @@ void
|
|||||||
math_fmt(char *fmt, ...)
|
math_fmt(char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
char buf[200];
|
char buf[BUFSIZ+1];
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
vsprintf(buf, fmt, ap);
|
vsnprintf(buf, BUFSIZ, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
buf[BUFSIZ] = '\0';
|
||||||
math_str(buf);
|
math_str(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user