mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
Release calc version 2.12.0
This commit is contained in:
147
BUGS
147
BUGS
@@ -68,33 +68,14 @@ of a context diff patch).
|
||||
|
||||
Known bugs:
|
||||
|
||||
The stoponerror() facility does not seem to work, or perhaps
|
||||
the stoponerror help file is incorrect. The stoponerror help file
|
||||
lacks examples because of this problem.
|
||||
|
||||
We are sure some more bugs exist. When you find them, please let
|
||||
us know! See the above for details on how to report and were to
|
||||
EMail your bug reports and hopefully patches to fix them.
|
||||
|
||||
* The following command:
|
||||
|
||||
calc 'read ellip; efactor(13*17*19)'
|
||||
|
||||
will generate the following error:
|
||||
|
||||
efactor(iN,ia,B,force) defined
|
||||
point_print(p) defined
|
||||
point_mul(p1,p2) defined
|
||||
point_square(p) defined
|
||||
point_pow(p,pow) defined
|
||||
A = 1
|
||||
2 (1,1)
|
||||
"point_square": line 165: Not initializing matrix, object or list
|
||||
Error in commands
|
||||
|
||||
This is not an error in the ellip standard calc resource files.
|
||||
It is a bug inside calc. Versions going back as far as version
|
||||
2.11.4t2 in the year 2000 (and perhaps even further) all have
|
||||
this bug.
|
||||
|
||||
Anyone want to track down and fix this bug?
|
||||
|
||||
=-=
|
||||
|
||||
mis-features in calc:
|
||||
@@ -129,55 +110,6 @@ mis-features in calc:
|
||||
|
||||
Problems with old systems that have known work-a-rounds:
|
||||
|
||||
* The gcc as shipped with Redhat 7 perhaps other Linux distributions
|
||||
has a bug causes calc to dump core on startup when calc is:
|
||||
|
||||
compiled optimized (-O, -O1, -O2 or -O3)
|
||||
|
||||
AND
|
||||
|
||||
compiled with debugging (-g or -g3)
|
||||
|
||||
AND
|
||||
|
||||
when calc is compiled with readline (see USE_READLINE,
|
||||
READLINE_LIB and READLINE_INCLUDE in the Makefile)
|
||||
|
||||
This is known as the Redhat 7 readlne problem.
|
||||
|
||||
On Redhat, the gcc -v which has this problem is:
|
||||
|
||||
gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-85)
|
||||
|
||||
there may be other gcc versions that also suffer this fate.
|
||||
|
||||
The readlines associated with problem are:
|
||||
|
||||
readline-4.1-5
|
||||
readline2.2.1-2.2.1-2
|
||||
readline-devel-4.1-5
|
||||
|
||||
One work-a-round is to compile calc WITHOUT readline. In the
|
||||
Makefile be sure that:
|
||||
|
||||
USE_READLINE=
|
||||
READLINE_LIB=
|
||||
READLINE_INCLUDE=
|
||||
|
||||
i.e., these Makefile vars are empty.
|
||||
|
||||
If you must use readline, then an alternate work-a-round is to
|
||||
change the DEBUG Makefile variable to either:
|
||||
|
||||
compile for speed: -O3 (or -O2 if you do not have -O3)
|
||||
compile to debug: -g3 (or -g if you do not have -g3)
|
||||
|
||||
but not both.
|
||||
|
||||
See RH bug #57889 for details:
|
||||
|
||||
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=57889
|
||||
|
||||
* There is a bug in gcc-2.95 that causes calc, when compiled with -O2,
|
||||
to fail the regression test. The work-a-round is to compile with -O
|
||||
or to use gcc-2.96 or later.
|
||||
@@ -227,59 +159,6 @@ Problems with old systems that have known work-a-rounds:
|
||||
if (n < 0) n = 0;
|
||||
z.sign = 0;
|
||||
|
||||
* Solaris cc somtimes barfs while compiling zrand.c. In particular, calc
|
||||
barfs on on the SVAL macro. The work-a-round is to use the Solaric cc
|
||||
Makefile set sets -DFORCE_STDC. I.e,:
|
||||
|
||||
CCWARN=
|
||||
CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
CCMISC= -DFORCE_STDC
|
||||
#
|
||||
CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
LCFLAGS=
|
||||
LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
ILDFLAGS=
|
||||
#
|
||||
LCC= cc
|
||||
CC= ${PURIFY} ${LCC}
|
||||
|
||||
* There is a bug in some versions of the Dec/Compaq cc for the Alpha
|
||||
where the following:
|
||||
|
||||
#include <stdio.h>
|
||||
#define SVAL(a,b) (unsigned long)(0x ## a ## b ## ULL)
|
||||
main(){SVAL(b8a8aeb0,8168eadc);}
|
||||
|
||||
fails because it puts a space inside the concatenated hex. Calc
|
||||
has code that is affected by this bug. This bug has been reported
|
||||
to Compaq and may be fixed in the future. A work-a-round is to
|
||||
compile with cc -std0 or to use a later version of their compiler.
|
||||
|
||||
* On a Digital UNIX V4.0F (Rev. 1229) on a 500 Mhz 21264, make check
|
||||
dies a horrible death starting in test 600 and 622 gives 100s of
|
||||
messages for calc version 2.11.0t9.4 using the Dec's cc with -O2:
|
||||
|
||||
600: Beginning test_bignums
|
||||
601: muldivcheck 1
|
||||
**** abc != acb: 602: muldivcheck 2
|
||||
**** acb != bac: 602: muldivcheck 2
|
||||
...
|
||||
**** t4 != a4: 622: algcheck 1
|
||||
**** t5 != a5: 622: algcheck 1
|
||||
**** t6 != a6: 622: algcheck 1
|
||||
**** t4 != a4: 622: algcheck 1
|
||||
...
|
||||
|
||||
it finally hangs at test 2000.
|
||||
|
||||
The work-a-round is to compile calc without the optimizer. If this
|
||||
happens to you, try compiling without -O and without -O2. I.e., in
|
||||
the Makefile, set:
|
||||
|
||||
DEBUG= -g
|
||||
|
||||
* There are problems compiling calc on the sparcv9 under 64 bit
|
||||
Solaris. On that platform, gcc-2.96 is able to compile calc, but
|
||||
calc dumps core very early on in startup. It is said that sparcv9
|
||||
@@ -295,19 +174,7 @@ Problems with old systems that have known work-a-rounds:
|
||||
CCWARN="-DFORCE_STDC -w"
|
||||
DEBUG="-fast -xarch=v9"
|
||||
|
||||
* Under BSDI v4, the warnings of the form:
|
||||
|
||||
/usr/include/ctype.h:147: warning: `__runetype' defined but not used
|
||||
/usr/include/ctype.h:161: warning: `__isctype' defined but not used
|
||||
/usr/include/ctype.h:170: warning: `toupper' defined but not used
|
||||
/usr/include/ctype.h:177: warning: `tolower' defined but not used
|
||||
|
||||
are seen. These warnings are the result of mis-features in BSDI
|
||||
include files. They do not have an impact on the operation
|
||||
or performance. The work-a-round is to ignore these warnings
|
||||
under BSDI.
|
||||
|
||||
## 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
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -323,8 +190,8 @@ Problems with old systems that have known work-a-rounds:
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.22 $
|
||||
## @(#) $Id: BUGS,v 29.22 2004/10/23 02:25:02 chongo Exp $
|
||||
## @(#) $Revision: 29.24 $
|
||||
## @(#) $Id: BUGS,v 29.24 2006/05/21 07:54:13 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
|
||||
##
|
||||
## Under source code control: 1994/03/18 14:06:13
|
||||
|
158
CHANGES
158
CHANGES
@@ -1,11 +1,159 @@
|
||||
The following are the changes from calc version 2.11.10.1 to date:
|
||||
The following are the changes from calc version 2.12.0 to date:
|
||||
|
||||
Fixed ellip.cal to deal with a calc syntax change that happened
|
||||
many ages ago but was never applied to this file until now.
|
||||
This bug was fixed by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||
|
||||
Fixed a problem where comments using # followed by a !, newline or
|
||||
another # works. This bug was fixed by Ernest Bowen <ebowen at une
|
||||
dot edu dot au>.
|
||||
|
||||
The show builtins display for functions with long descriptions
|
||||
is now broken into multi-line descriptions.
|
||||
|
||||
The str functions, such as strcpy(s1, s2), will now copy as many
|
||||
characters as possible from s2 to s1, treating '\0' like any other
|
||||
character until the end of s2 is reached. If s2 is shorter than s1,
|
||||
a '\0' is inserted.
|
||||
|
||||
The strcmp(s1, s2) builtin, for strings s1, s2: strcmp(s1, s2) == 0 now
|
||||
means the same as s1 == s2.
|
||||
|
||||
The str(s) builtin has been changed so that it will return only the
|
||||
string formed by the characters of 's' up to the first '\0'.
|
||||
|
||||
The substr(s, start, num) builtin has been changed so that '\0' characters
|
||||
are treated like any other.
|
||||
|
||||
Fixed a bug where strcpy("", "a") used to cause a segmentation fault.
|
||||
This bug was fixed by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||
|
||||
Make minor change to natnumset.cal in how the tail variable is initialized.
|
||||
|
||||
Fixed bugs in the strcmp, strncmp, strcpy, and strncpy help files.
|
||||
This bug was fixed by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||
|
||||
Added cal/screen.cal which Defines ANSI control sequences providing
|
||||
(i.e., cursor movement, changing foreground or background color,
|
||||
etc.) for VT100 terminals and terminal window emulators (i.e., xterm,
|
||||
Apple OS/X Terminal, etc.) that support them. For example:
|
||||
|
||||
read screen
|
||||
print green:"This is green. ":red:"This is red.":black
|
||||
|
||||
Fixed a bug where too many open files returned E_FOPEN3. Now
|
||||
a new error symbol F_MANYOPEN is used for too many open files.
|
||||
|
||||
Added the builtin function fpathopen() to open a file while
|
||||
searching along a path:
|
||||
|
||||
; fd2 = fpathopen("tmp/date", "r", ".:~:~sc:/tmp:/var/tmp:/var")
|
||||
; print fd2
|
||||
"/var/tmp/date"
|
||||
|
||||
By default, fpathopen() searches along CALCPATH.
|
||||
|
||||
Added the calcpath() builtin function to return the current value
|
||||
of CALCPATH.
|
||||
|
||||
Fixed prompt characters in the EXAMPLE section of help files.
|
||||
|
||||
Fixed problems related to the protect function and its documentation.
|
||||
This bug was reported by David Gilham <davidgilham at gmail dot com>.
|
||||
This bug was fixed by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||
|
||||
Raised the limit of exponent in exponential notation. It was set to
|
||||
arbitrary 1000000 (making 1e1000001 in invalid exponential notation
|
||||
value). The exponent for exponential notation is now int(MAXLONG/10).
|
||||
On 32 bit machines, this means a limit of 214748364. On 64 bit
|
||||
machines, this means 922337203685477580. Of course, you may not
|
||||
have enough memory to hold such huge values, but if you did you can
|
||||
now express such values in exponential notation.
|
||||
|
||||
Added log() builtin for base 10 logarithm.
|
||||
|
||||
Fixed problems where internal use of libc strcpy() might have caused
|
||||
a buffer overflow. Calc now only uses libc strcpy() when the source
|
||||
string is a constant.
|
||||
|
||||
The calc STRING and STRINGHEAD now use the standard size_t (an unsigned
|
||||
type) length. Calc mostly uses size_t in dealing with string lengths
|
||||
and object sizes when possible.
|
||||
|
||||
Added ${CCWERR} make variable to allow one to force compiler warnings
|
||||
to be treated as errors. The ${CC} make variable now uses ${CCWERR}
|
||||
however the ${LCC} (used by the Makefile test code for building hsrc
|
||||
files) does not use ${CCWERR}. By default, ${CCWERR} is empty.
|
||||
In development Makefiles, we set CCWERR= -Werror to force us to
|
||||
address compiler warnings before the next release.
|
||||
|
||||
The calc make variable, CALCPAGER, now defaults to CALCPAGER= less
|
||||
because the less utility is now very common. Set CALCPAGER= more
|
||||
if you do not have less.
|
||||
|
||||
Calc source had two styles of switch indentation. Converted the
|
||||
style where case statements were indented with respect to the switch
|
||||
statement into the style where the case statements are at the same
|
||||
level. When comparing with older source, one may use the -b argument
|
||||
of the diff command to ignore changes in amount of white space:
|
||||
|
||||
diff -b -r -u calc-2.11.11 calc-2.12.0
|
||||
|
||||
The read, write, and help commands use the value of global string
|
||||
variable if the symbol name starts with a $. For example:
|
||||
|
||||
global x = "lucas.cal";
|
||||
read $x; /* same as read lucas.cal or read "lucas.cal" */
|
||||
|
||||
Added dotest.cal resource. Based on a design by Ernest Bowen
|
||||
<ebowen at une dot edu dot au>, the dotest evaluates individual
|
||||
lines from a file. The dotest() function takes 1 to 3 arguments:
|
||||
|
||||
dotest(dotest_file [,dotest_code [,dotest_maxcond]])
|
||||
|
||||
dotest_file
|
||||
|
||||
Search along CALCPATH for dotest_file, which contains lines that
|
||||
should evaluate to 1. Comment lines and empty lines are ignored.
|
||||
Comment lines should use ## instead of the multi like /* ... */
|
||||
because lines are evaluated one line at a time.
|
||||
|
||||
dotest_code
|
||||
|
||||
Assign the code number that is to be printed at the start of
|
||||
each non-error line and after **** in each error line.
|
||||
The default code number is 999.
|
||||
|
||||
dotest_maxcond
|
||||
|
||||
The maximum number of error conditions that may be detected.
|
||||
An error condition is not a sign of a problem, in some cases
|
||||
a line deliberately forces an error condition. A value of -1,
|
||||
the default, implies a maximum of 2147483647.
|
||||
|
||||
Global variables and functions must be declared ahead of time because
|
||||
the dotest scope of evaluation is a line at a time. For example:
|
||||
|
||||
read dotest.cal
|
||||
read set8700.cal
|
||||
dotest("set8700.line");
|
||||
|
||||
Updated the todo / wish list items. The top priority now is to
|
||||
convert calc to GNU autoconf / configure to build the calc.
|
||||
|
||||
help todo
|
||||
|
||||
Added missing help file for the stoponerror() builtin.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.11.10.1 to 2.11.11:
|
||||
|
||||
Fixed a bug reported by the sourceforge user: cedars where:
|
||||
|
||||
ln(exp(6)) == 3 /* WRONG!!! */
|
||||
|
||||
incorrectly returned 1. This bug was fixed by Ernest Bowen
|
||||
<ernie at turing dot une dot edu dot au>. The regression test
|
||||
<ebowen at une dot edu dot au>. The regression test
|
||||
was expanded to cover this issue.
|
||||
|
||||
Added minor improvements to hash regression testing of pi().
|
||||
@@ -2179,6 +2327,8 @@ The following are the changes from calc version 2.10.3t5.38 to 2.11.3t5.46:
|
||||
into a single section.
|
||||
|
||||
|
||||
|
||||
|
||||
The following are the changes from calc version 2.10.3t5.34 to 2.10.3t5.37:
|
||||
|
||||
Per request from David I Bell, the README line:
|
||||
@@ -5812,8 +5962,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.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.71 $
|
||||
## @(#) $Id: CHANGES,v 29.71 2005/12/12 06:47:21 chongo Exp $
|
||||
## @(#) $Revision: 29.76 $
|
||||
## @(#) $Id: CHANGES,v 29.76 2006/05/21 07:55:17 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $
|
||||
##
|
||||
## Under source code control: 1993/06/02 18:12:57
|
||||
|
6
COPYING
6
COPYING
@@ -12,8 +12,8 @@ This file is Copyrighted
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
# @(#) $Revision: 29.7 $
|
||||
# @(#) $Id: COPYING,v 29.7 2003/02/26 16:54:59 chongo Exp $
|
||||
# @(#) $Revision: 29.8 $
|
||||
# @(#) $Id: COPYING,v 29.8 2006/05/01 19:16:57 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $
|
||||
|
||||
=-=
|
||||
@@ -170,7 +170,7 @@ Calc copyrights and exception files
|
||||
|
||||
shs1.c shs1.h shs.c shs.h
|
||||
md5.c md5.h COPYING COPYING-LGPL
|
||||
cal/qtime.cal
|
||||
cal/qtime.cal cal/screen.cal
|
||||
|
||||
The file COPYING-LGPL, which contains a copy of the version 2.1
|
||||
GNU Lesser General Public License, is itself Copyrighted by the
|
||||
|
45
Makefile
45
Makefile
@@ -10,14 +10,13 @@
|
||||
# or less. It compiles with gcc -O3 -g3 as well. You can change all
|
||||
# this by modifying the Makefile variables below.
|
||||
#
|
||||
# NOTE: You might want use the READLINE facility and the less pager if
|
||||
# your system supports them. To do this, set:
|
||||
# NOTE: You might want use the READLINE facility if your system
|
||||
# has the GNU readline headers and libaraies:
|
||||
#
|
||||
# USE_READLINE= -DUSE_READLINE
|
||||
# READLINE_LIB= -lreadline -lhistory -lncurses
|
||||
# CALCPAGER= less
|
||||
#
|
||||
# Copyright (C) 1999-2004 Landon Curt Noll
|
||||
# Copyright (C) 1999-2006 Landon Curt Noll
|
||||
#
|
||||
# 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
|
||||
@@ -33,8 +32,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
MAKEFILE_REV= $$Revision: 29.74 $$
|
||||
# @(#) $Id: Makefile.ship,v 29.74 2005/10/18 11:53:37 chongo Exp $
|
||||
MAKEFILE_REV= $$Revision: 29.75 $$
|
||||
# @(#) $Id: Makefile.ship,v 29.75 2006/05/19 13:54:05 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/Makefile.ship,v $
|
||||
#
|
||||
# Under source code control: 1990/02/15 01:48:41
|
||||
@@ -807,10 +806,10 @@ READLINE_INCLUDE=
|
||||
#
|
||||
# Select CALCPAGER= less.exe -ci for DJGPP.
|
||||
#
|
||||
CALCPAGER= more
|
||||
#CALCPAGER= more
|
||||
#CALCPAGER= pg
|
||||
#CALCPAGER= cat
|
||||
#CALCPAGER= less
|
||||
CALCPAGER= less
|
||||
#CALCPAGER= less.exe -ci
|
||||
|
||||
# Debug/Optimize options for ${CC} and ${LCC}
|
||||
@@ -983,6 +982,9 @@ EXT=
|
||||
#
|
||||
# CCOPT are flags given to ${CC} for optimization
|
||||
# CCWARN are flags given to ${CC} for warning message control
|
||||
# CCWERR are flags given to ${CC} to make warnings fatal errors
|
||||
# NOTE: CCWERR is only set in development Makefiles and must
|
||||
# only be used with ${CC}, not ${LCC}.
|
||||
# CCMISC are misc flags given to ${CC}
|
||||
#
|
||||
# CFLAGS are all flags given to ${CC} [[often includes CCOPT, CCWARN, CCMISC]]
|
||||
@@ -1001,6 +1003,7 @@ EXT=
|
||||
# Tested on Red Hat 6.0 Linux but should run on almost any Linux release.
|
||||
#
|
||||
CCWARN= -Wall -W -Wno-comment
|
||||
CCWERR=
|
||||
CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
CCMISC=
|
||||
#
|
||||
@@ -1011,13 +1014,14 @@ LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
ILDFLAGS=
|
||||
#
|
||||
LCC= gcc
|
||||
CC= ${PURIFY} ${LCC}
|
||||
CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
# gcc set (some call it gcc2, some call it gcc)
|
||||
# gcc set
|
||||
#
|
||||
#CCWARN= -Wall -W -Wno-comment
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC=
|
||||
#
|
||||
@@ -1028,8 +1032,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= gcc
|
||||
#LCC= gcc2
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1039,6 +1042,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# If -O2 -g is not supported try: DEBUG= -O -g
|
||||
#
|
||||
#CCWARN=
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC=
|
||||
#
|
||||
@@ -1049,7 +1053,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1067,6 +1071,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# woff 1209: cancel 'controlling expression is constant' warnings
|
||||
#
|
||||
#CCWARN= -fullwarn -woff 1209
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -rdata_shared
|
||||
#
|
||||
@@ -1077,7 +1082,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc -n32 -xansi
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1090,6 +1095,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# If 'make check' fails use: DEBUG= -g
|
||||
#
|
||||
#CCWARN=
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= +e
|
||||
#
|
||||
@@ -1100,7 +1106,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1110,6 +1116,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# If -O2 -g is not supported try: DEBUG= -O -g
|
||||
#
|
||||
#CCWARN=
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -qlanglvl=ansi
|
||||
#
|
||||
@@ -1120,7 +1127,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1133,6 +1140,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# to avoid the use of -Xc (which as a lose performance wise).
|
||||
#
|
||||
#CCWARN=
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -DFORCE_STDC
|
||||
#
|
||||
@@ -1143,7 +1151,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1152,6 +1160,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# For better performance, set the following: DEBUG= -std0 -fast -O4 -static
|
||||
#
|
||||
#CCWARN=
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC=
|
||||
#
|
||||
@@ -1162,7 +1171,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=-=-=- Be careful if you change something below -=-=-=-=-=-=-=-=-#
|
||||
|
10
addop.c
10
addop.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* addop - add opcodes to a function being compiled
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell and Ernest Bowen
|
||||
* Copyright (C) 1999-2006 David I. Bell and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.5 $
|
||||
* @(#) $Id: addop.c,v 29.5 2004/02/23 14:04:01 chongo Exp $
|
||||
* @(#) $Revision: 29.8 $
|
||||
* @(#) $Id: addop.c,v 29.8 2006/05/20 08:43:55 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:10
|
||||
@@ -184,7 +184,7 @@ void
|
||||
endfunc(void)
|
||||
{
|
||||
register FUNC *fp; /* function just finished */
|
||||
unsigned long size; /* size of just created function */
|
||||
size_t size; /* size of just created function */
|
||||
unsigned long index;
|
||||
|
||||
if (oldop != OP_RETURN) {
|
||||
@@ -211,7 +211,7 @@ endfunc(void)
|
||||
if (newname[0] != '*' && (conf->traceflags & TRACE_FNCODES)) {
|
||||
dumpnames = TRUE;
|
||||
for (size = 0; size < fp->f_opcodecount; ) {
|
||||
printf("%ld: ", (long)size);
|
||||
printf("%u: ", size);
|
||||
size += dumpop(&fp->f_opcodes[size]);
|
||||
}
|
||||
}
|
||||
|
66
blkcpy.c
66
blkcpy.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* blkcpy - general values and related routines used by the calculator
|
||||
*
|
||||
* Copyright (C) 1999-2004 Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2006 Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: Landon Curt Noll
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.5 $
|
||||
* @(#) $Id: blkcpy.c,v 29.5 2004/02/23 14:04:01 chongo Exp $
|
||||
* @(#) $Revision: 29.9 $
|
||||
* @(#) $Id: blkcpy.c,v 29.9 2006/05/20 08:43:55 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $
|
||||
*
|
||||
* Under source code control: 1997/04/18 20:41:26
|
||||
@@ -280,7 +280,7 @@ copymat2mat(MATRIX *smat, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
VALUE *vp;
|
||||
VALUE *vq;
|
||||
VALUE *vtemp;
|
||||
short subtype;
|
||||
unsigned short subtype;
|
||||
|
||||
if (ssi > smat->m_size)
|
||||
return E_COPY2;
|
||||
@@ -311,7 +311,7 @@ copymat2mat(MATRIX *smat, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
subtype = vq->v_subtype;
|
||||
freevalue(vq);
|
||||
*vq = *vp;
|
||||
vq->v_subtype = subtype;
|
||||
vq->v_subtype |= subtype;
|
||||
}
|
||||
free(vtemp);
|
||||
return 0;
|
||||
@@ -329,7 +329,7 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
VALUE *vq;
|
||||
VALUE *vtemp;
|
||||
long i;
|
||||
short subtype;
|
||||
unsigned short subtype;
|
||||
|
||||
if (ssi > blk->datalen)
|
||||
return E_COPY2;
|
||||
@@ -363,7 +363,7 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
subtype = vq->v_subtype;
|
||||
freevalue(vq);
|
||||
*vq = *vp;
|
||||
vq->v_subtype = subtype;
|
||||
vq->v_subtype |= subtype;
|
||||
}
|
||||
free(vtemp);
|
||||
return 0;
|
||||
@@ -429,6 +429,7 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
|
||||
LISTELEM *ep;
|
||||
VALUE *vtemp;
|
||||
long i;
|
||||
unsigned short subtype;
|
||||
|
||||
if (ssi > smat->m_size)
|
||||
return E_COPY2;
|
||||
@@ -456,8 +457,10 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
|
||||
ep = listelement(lp, (long) dsi);
|
||||
i = num;
|
||||
while (i-- > 0) {
|
||||
subtype = ep->e_value.v_subtype;
|
||||
freevalue(&ep->e_value);
|
||||
ep->e_value = *vq++;
|
||||
ep->e_value.v_subtype |= subtype;
|
||||
ep = ep->e_next;
|
||||
}
|
||||
free(vtemp);
|
||||
@@ -476,7 +479,7 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
LISTELEM *ep;
|
||||
VALUE *vtemp;
|
||||
long i;
|
||||
short subtype;
|
||||
unsigned short subtype;
|
||||
|
||||
if (ssi > lp->l_count)
|
||||
return E_COPY2;
|
||||
@@ -508,7 +511,7 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
subtype = vq->v_subtype;
|
||||
freevalue(vq);
|
||||
*vq = *vp;
|
||||
vq->v_subtype = subtype;
|
||||
vq->v_subtype |= subtype;
|
||||
}
|
||||
free(vtemp);
|
||||
return 0;
|
||||
@@ -526,6 +529,7 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
|
||||
LISTELEM *dep;
|
||||
VALUE *vtemp;
|
||||
VALUE *vp;
|
||||
unsigned short subtype;
|
||||
|
||||
if (ssi > slp->l_count)
|
||||
return E_COPY2;
|
||||
@@ -555,8 +559,10 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
|
||||
vp = vtemp;
|
||||
i = num;
|
||||
while (i-- > 0) {
|
||||
subtype = dep->e_value.v_subtype;
|
||||
freevalue(&dep->e_value);
|
||||
dep->e_value = *vp++;
|
||||
dep->e_value.v_subtype |= subtype;
|
||||
dep = dep->e_next;
|
||||
}
|
||||
free(vtemp);
|
||||
@@ -806,13 +812,13 @@ copystr2str(STRING *sstr, long ssi, long num, STRING *dstr, long dsi)
|
||||
{
|
||||
char *c, *c1;
|
||||
|
||||
if (num < 0 || ssi + num > sstr->s_len)
|
||||
if (num < 0 || (size_t)(ssi + num) > sstr->s_len)
|
||||
num = sstr->s_len - ssi;
|
||||
if (num <= 0)
|
||||
return 0; /* Nothing to be copied */
|
||||
if (dsi < 0) /* default destination index */
|
||||
dsi = 0;
|
||||
if (dsi + num > dstr->s_len)
|
||||
if ((size_t)(dsi + num) > dstr->s_len)
|
||||
num = dstr->s_len - dsi;
|
||||
c1 = sstr->s_str + ssi;
|
||||
c = dstr->s_str + dsi;
|
||||
@@ -838,7 +844,7 @@ copyblk2str(BLOCK *sblk, long ssi, long num, STRING *dstr, long dsi)
|
||||
return 0; /* Nothing to be copied */
|
||||
if (dsi < 0) /* default destination index */
|
||||
dsi = 0;
|
||||
if (dsi + num > dstr->s_len)
|
||||
if ((size_t)(dsi + num) > dstr->s_len)
|
||||
num = dstr->s_len - dsi;
|
||||
c1 = sblk->data + ssi;
|
||||
c = (USB8 *)dstr->s_str + dsi;
|
||||
@@ -852,18 +858,18 @@ copyblk2str(BLOCK *sblk, long ssi, long num, STRING *dstr, long dsi)
|
||||
int
|
||||
copyostr2str(char *sstr, long ssi, long num, STRING *dstr, long dsi)
|
||||
{
|
||||
long len;
|
||||
size_t len;
|
||||
char *c, *c1;
|
||||
|
||||
len = (long)strlen(sstr);
|
||||
len = strlen(sstr);
|
||||
|
||||
if (num < 0 || ssi + num > len)
|
||||
if (num < 0 || (size_t)(ssi + num) > len)
|
||||
num = len - ssi;
|
||||
if (num <= 0) /* Nothing to be copied */
|
||||
return 0;
|
||||
if (dsi < 0)
|
||||
dsi = 0; /* Default destination index */
|
||||
if (dsi + num > dstr->s_len)
|
||||
if ((size_t)(dsi + num) > dstr->s_len)
|
||||
num = dstr->s_len - dsi;
|
||||
c1 = sstr + ssi;
|
||||
c = dstr->s_str + dsi;
|
||||
@@ -879,16 +885,16 @@ copyostr2str(char *sstr, long ssi, long num, STRING *dstr, long dsi)
|
||||
int
|
||||
copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
||||
{
|
||||
int len;
|
||||
int newlen;
|
||||
int newsize;
|
||||
size_t len;
|
||||
size_t newlen;
|
||||
size_t newsize;
|
||||
USB8 *newdata;
|
||||
|
||||
len = strlen(str) + 1;
|
||||
|
||||
if (ssi > len)
|
||||
if (ssi > 0 && (size_t)ssi > len)
|
||||
return E_COPY2;
|
||||
if (num < 0 || ssi + num > len)
|
||||
if (num < 0 || (size_t)(ssi + num) > len)
|
||||
num = len - ssi;
|
||||
if (num <= 0) /* Nothing to be copied */
|
||||
return 0;
|
||||
@@ -897,7 +903,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
||||
newlen = dsi + num;
|
||||
if (newlen <= 0)
|
||||
return E_COPY7;
|
||||
if (newlen >= dblk->maxsize) {
|
||||
if (newlen >= (size_t)dblk->maxsize) {
|
||||
if (noreloc)
|
||||
return E_COPY17;
|
||||
newsize = (1 + newlen/dblk->blkchunk) * dblk->blkchunk;
|
||||
@@ -910,7 +916,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
||||
dblk->maxsize = newsize;
|
||||
}
|
||||
memmove(dblk->data + dsi, str + ssi, num);
|
||||
if (newlen > dblk->datalen)
|
||||
if (newlen > (size_t)dblk->datalen)
|
||||
dblk->datalen = newlen;
|
||||
return 0;
|
||||
}
|
||||
@@ -978,8 +984,8 @@ memmove(void *s1, const void *s2, CALC_SIZE_T n)
|
||||
int
|
||||
copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
|
||||
{
|
||||
long newlen;
|
||||
long newsize;
|
||||
size_t newlen;
|
||||
size_t newsize;
|
||||
USB8 *newdata;
|
||||
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
||||
ZVALUE *swnum; /* byte swapped numerator */
|
||||
@@ -995,10 +1001,10 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
|
||||
return E_COPY5;
|
||||
if (dsi < 0)
|
||||
dsi = dblk->datalen;
|
||||
newlen = dsi + (long)(num*sizeof(HALF));
|
||||
newlen = dsi + (num*sizeof(HALF));
|
||||
if (newlen <= 0)
|
||||
return E_COPY7;
|
||||
if (newlen >= dblk->maxsize) {
|
||||
if (newlen >= (size_t)dblk->maxsize) {
|
||||
if (noreloc)
|
||||
return E_COPY17;
|
||||
newsize = (1 + newlen/dblk->blkchunk) * dblk->blkchunk;
|
||||
@@ -1017,7 +1023,7 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
|
||||
memmove(dblk->data+dsi, (char *)(swnum->v+ssi), num*sizeof(HALF));
|
||||
zfree(*swnum);
|
||||
#endif
|
||||
if (newlen > dblk->datalen)
|
||||
if (newlen > (size_t)dblk->datalen)
|
||||
dblk->datalen = newlen;
|
||||
return 0;
|
||||
}
|
||||
@@ -1029,7 +1035,7 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
|
||||
int
|
||||
copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi, NUMBER **res)
|
||||
{
|
||||
long newlen;
|
||||
size_t newlen;
|
||||
NUMBER *ret; /* cloned and modified numerator */
|
||||
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
||||
HALF *swapped; /* byte swapped input data */
|
||||
@@ -1048,7 +1054,7 @@ copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi, NUMBER **re
|
||||
return E_COPY5;
|
||||
if (dsi < 0)
|
||||
dsi = dnum->num.len;
|
||||
newlen = dsi + (long)((num+sizeof(HALF)-1)/sizeof(HALF));
|
||||
newlen = dsi + ((num+sizeof(HALF)-1)/sizeof(HALF));
|
||||
if (newlen <= 0)
|
||||
return E_COPY7;
|
||||
|
||||
|
6
block.c
6
block.c
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: block.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: block.c,v 29.3 2006/05/01 19:16:57 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.c,v $
|
||||
*
|
||||
* Under source code control: 1997/02/27 00:29:40
|
||||
@@ -57,7 +57,7 @@ static void blkchk(BLOCK*);
|
||||
*
|
||||
* given:
|
||||
* len - initial memory length of the block
|
||||
* type - BLK_TYPE_XXX
|
||||
* type - BLK_TYPE_XYZ
|
||||
* chunk - allocation chunk size
|
||||
*
|
||||
* returns:
|
||||
|
@@ -18,8 +18,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.16 $
|
||||
# @(#) $Id: Makefile,v 29.16 2005/12/12 06:42:30 chongo Exp $
|
||||
# @(#) $Revision: 29.18 $
|
||||
# @(#) $Id: Makefile,v 29.18 2006/05/20 19:32:40 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
|
||||
#
|
||||
# Under source code control: 1991/07/21 05:00:54
|
||||
@@ -176,7 +176,8 @@ CALC_FILES= README bigprime.cal deg.cal ellip.cal lucas.cal lucas_chk.cal \
|
||||
test3500.cal seedrandom.cal test4000.cal test4100.cal test4600.cal \
|
||||
beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
|
||||
randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.cal \
|
||||
test8400.cal test8500.cal test8600.cal chi.cal intfile.cal
|
||||
test8400.cal test8500.cal test8600.cal chi.cal intfile.cal screen.cal \
|
||||
dotest.cal set8700.cal set8700.line
|
||||
|
||||
# These files are found (but not built) in the distribution
|
||||
#
|
||||
|
112
cal/README
112
cal/README
@@ -12,7 +12,7 @@ Normally a resource file will simply define some functions. By default,
|
||||
most resource files will print out a short message when they are read.
|
||||
For example:
|
||||
|
||||
> read lucas
|
||||
; read lucas
|
||||
lucas(h,n) defined
|
||||
gen_u0(h,n,v1) defined
|
||||
gen_v1(h,n) defined
|
||||
@@ -22,9 +22,9 @@ will cause calc to load and execute the 'lucas.cal' resource file.
|
||||
Executing the resource file will cause several functions to be defined.
|
||||
Executing the lucas function:
|
||||
|
||||
> lucas(149,60)
|
||||
; lucas(149,60)
|
||||
1
|
||||
> lucas(146,61)
|
||||
; lucas(146,61)
|
||||
0
|
||||
|
||||
shows that 149*2^60-1 is prime whereas 146*2^61-1 is not.
|
||||
@@ -180,6 +180,38 @@ deg.cal
|
||||
Calculate in degrees, minutes, and seconds.
|
||||
|
||||
|
||||
dotest.cal
|
||||
|
||||
dotest(dotest_file [,dotest_code [,dotest_maxcond]])
|
||||
|
||||
dotest_file
|
||||
|
||||
Search along CALCPATH for dotest_file, which contains lines that
|
||||
should evaluate to 1. Comment lines and empty lines are ignored.
|
||||
Comment lines should use ## instead of the multi like /* ... */
|
||||
because lines are evaluated one line at a time.
|
||||
|
||||
dotest_code
|
||||
|
||||
Assign the code number that is to be printed at the start of
|
||||
each non-error line and after **** in each error line.
|
||||
The default code number is 999.
|
||||
|
||||
dotest_maxcond
|
||||
|
||||
The maximum number of error conditions that may be detected.
|
||||
An error condition is not a sign of a problem, in some cases
|
||||
a line deliberately forces an error condition. A value of -1,
|
||||
the default, implies a maximum of 2147483647.
|
||||
|
||||
Global variables and functions must be declared ahead of time because
|
||||
the dotest scope of evaluation is a line at a time. For example:
|
||||
|
||||
read dotest.cal
|
||||
read set8700.cal
|
||||
dotest("set8700.line");
|
||||
|
||||
|
||||
ellip.cal
|
||||
|
||||
efactor(iN, ia, B, force)
|
||||
@@ -505,6 +537,58 @@ regress.cal
|
||||
Errors are reported with '****' messages, or worse. :-)
|
||||
|
||||
|
||||
screen.cal
|
||||
|
||||
up
|
||||
CUU /* same as up */
|
||||
down = CUD
|
||||
CUD /* same as down */
|
||||
forward
|
||||
CUF /* same as forward */
|
||||
back = CUB
|
||||
CUB /* same as back */
|
||||
save
|
||||
SCP /* same as save */
|
||||
restore
|
||||
RCP /* same as restore */
|
||||
cls
|
||||
home
|
||||
eraseline
|
||||
off
|
||||
bold
|
||||
faint
|
||||
italic
|
||||
blink
|
||||
rapidblink
|
||||
reverse
|
||||
concealed
|
||||
/* Lowercase indicates foreground, uppercase background */
|
||||
black
|
||||
red
|
||||
green
|
||||
yellow
|
||||
blue
|
||||
magenta
|
||||
cyan
|
||||
white
|
||||
Black
|
||||
Red
|
||||
Green
|
||||
Yellow
|
||||
Blue
|
||||
Magenta
|
||||
Cyan
|
||||
White
|
||||
|
||||
Define ANSI control sequences providing (i.e., cursor movement, changing
|
||||
foreground or background color, etc.) for VT100 terminals and terminal
|
||||
window emulators (i.e., xterm, Apple OS/X Terminal, etc.) that support them.
|
||||
|
||||
For example:
|
||||
|
||||
read screen
|
||||
print green:"This is green. ":red:"This is red.":black
|
||||
|
||||
seedrandom.cal
|
||||
|
||||
seedrandom(seed1, seed2, bitsize [,trials])
|
||||
@@ -523,6 +607,24 @@ seedrandom.cal
|
||||
Blum primes for the modulus.
|
||||
|
||||
|
||||
set8700.cal
|
||||
|
||||
set8700_getA1() defined
|
||||
set8700_getA2() defined
|
||||
set8700_getvar() defined
|
||||
set8700_f(set8700_x) defined
|
||||
set8700_g(set8700_x) defined
|
||||
|
||||
Declare globals and define functions needed by dotest() (see
|
||||
dotest.cal) to evaluate set8700.line a line at a time.
|
||||
|
||||
|
||||
set8700.line
|
||||
|
||||
A line-by-line evaluation file for dotest() (see dotest.cal).
|
||||
The set8700.cal file (and dotest.cal) should be read first.
|
||||
|
||||
|
||||
solve.cal
|
||||
|
||||
solve(low, high, epsilon)
|
||||
@@ -833,8 +935,8 @@ xx_print.cal
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.10 $
|
||||
## @(#) $Id: README,v 29.10 2005/12/12 06:39:18 chongo Exp $
|
||||
## @(#) $Revision: 29.12 $
|
||||
## @(#) $Id: README,v 29.12 2006/05/21 04:41:09 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
|
||||
##
|
||||
## Under source code control: 1990/02/15 01:50:32
|
||||
|
193
cal/dotest.cal
Normal file
193
cal/dotest.cal
Normal file
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* dotest - test truth statements found in line tests of dotest_testline file
|
||||
*
|
||||
* This file was created by Ernest Bowen <ebowen at une dot edu dot au>
|
||||
* and modified by Landon Curt Noll.
|
||||
*
|
||||
* This dotest_code has been placed in the public domain. Please do not
|
||||
* copyright this dotest_code.
|
||||
*
|
||||
* ERNEST BOWEN AND LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||||
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MER-
|
||||
* CHANTABILITY AND FITNESS. IN NO EVENT SHALL LANDON CURT
|
||||
* NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: dotest.cal,v 29.2 2006/05/21 00:55:27 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/dotest.cal,v $
|
||||
*
|
||||
* This file is not covered under version 2.1 of the GNU LGPL.
|
||||
*
|
||||
* Under source dotest_code control: 2006/03/08 05:54:09
|
||||
* File existed as early as: 2006
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* dotest - perform tests from dotest_testline file
|
||||
*
|
||||
* given:
|
||||
* dotest_file filename containing single test lines
|
||||
* dotest_code regress.cal test number to use (def: 0)
|
||||
* dotest_maxcond max error conditions allowed (def: <0 ==> 2^31-1)
|
||||
*
|
||||
* returns:
|
||||
* number of line test failures
|
||||
*
|
||||
* NOTE: All variables used by the dotest() function start with "dotest_".
|
||||
* The dotest_file and dotest_read should not use any variable
|
||||
* that starts with "dotest_".
|
||||
*/
|
||||
define dotest(dotest_file, dotest_code = 0, dotest_maxcond = -1)
|
||||
{
|
||||
local dotest_f_file; /* open file containing test lines */
|
||||
local dotest_testline; /* test line */
|
||||
local dotest_testeval; /* eval value from dotest_testline test line */
|
||||
local dotest_tmperrcnt; /* temp error count after line test */
|
||||
local dotest_errcnt; /* total number of errors */
|
||||
local dotest_failcnt; /* number of line tests failed */
|
||||
local dotest_testnum; /* number of test lines evaluated */
|
||||
local dotest_linenum; /* test line number */
|
||||
local dotest_old_errmax; /* value of errmax() prior to calling */
|
||||
local dotest_old_errcount; /* value of errcount() prior to calling */
|
||||
|
||||
/*
|
||||
* preserve calling stats
|
||||
*/
|
||||
dotest_old_errmax = errmax();
|
||||
dotest_old_errcount = errcount(0);
|
||||
|
||||
/*
|
||||
* initialize test accounting
|
||||
*/
|
||||
dotest_errcnt = errcount();
|
||||
dotest_failcnt = 0;
|
||||
dotest_testnum = 0;
|
||||
dotest_linenum = 0;
|
||||
|
||||
/*
|
||||
* setup error accounting for dotest
|
||||
*/
|
||||
if (dotest_maxcond >= 0 && dotest_maxcond < 2147483647) {
|
||||
errmax(dotest_maxcond + dotest_old_errcount + 1),;
|
||||
} else {
|
||||
errmax(2147483647),;
|
||||
}
|
||||
|
||||
/*
|
||||
* open the test line file
|
||||
*/
|
||||
printf("%d-: opening line file: %d", dotest_code, dotest_file);
|
||||
dotest_f_file = fpathopen(dotest_file, "r");
|
||||
if (!isfile(dotest_f_file)) {
|
||||
printf("**** Unable to file or open file \"%s\"\n",
|
||||
dotest_file);
|
||||
quit;
|
||||
}
|
||||
printf('%d: testing "%s"\n', dotest_code, dotest_file);
|
||||
|
||||
/*
|
||||
* perform dotest_testline test on each line of the file
|
||||
*/
|
||||
for (;;) {
|
||||
|
||||
/* get the next test line */
|
||||
dotest_testline = fgets(dotest_f_file);
|
||||
++dotest_linenum;
|
||||
if (iserror(dotest_testline)) {
|
||||
quit "**** Error while reading file";
|
||||
} else if (isnull(dotest_testline)) {
|
||||
/* EOF - end of test file */
|
||||
break;
|
||||
}
|
||||
|
||||
/* skip empty lines */
|
||||
if (dotest_testline == "\n") {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* evaluate the test line */
|
||||
dotest_testeval = eval(dotest_testline);
|
||||
|
||||
/* ignore white space or comment lines */
|
||||
if (isnull(dotest_testeval)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* look for test line parse errors */
|
||||
if (iserror(dotest_testeval)) {
|
||||
printf("**** evaluation error: ");
|
||||
++dotest_failcnt;
|
||||
|
||||
/* look for test line dotest_failcnt */
|
||||
} else if (dotest_testeval != 1) {
|
||||
printf("**** did not return 1: ");
|
||||
++dotest_failcnt;
|
||||
}
|
||||
|
||||
/* show the test line we just performed */
|
||||
printf("%d-%d: %s", dotest_code, dotest_linenum, dotest_testline);
|
||||
|
||||
/* error accounting */
|
||||
dotest_tmperrcnt = errcount() - dotest_errcnt;
|
||||
if (dotest_tmperrcnt > 0) {
|
||||
|
||||
/* report any other errors */
|
||||
if (dotest_tmperrcnt > 1) {
|
||||
printf("%d-%d: NOTE: %d error conditions(s): %s\n",
|
||||
dotest_code, dotest_linenum, dotest_tmperrcnt);
|
||||
}
|
||||
|
||||
/* report the calc error string */
|
||||
printf("%d-%d: NOTE: last error string: %s\n",
|
||||
dotest_code, dotest_linenum, strerror());
|
||||
|
||||
/* new error count level */
|
||||
dotest_errcnt = errcount();
|
||||
if (dotest_maxcond >= 0 &&
|
||||
dotest_old_errcount-dotest_errcnt > dotest_maxcond) {
|
||||
printf("%d-%d: total error conditions: %d > %d\n",
|
||||
dotest_code, dotest_linenum,
|
||||
dotest_maxcond, dotest_old_errcount-dotest_errcnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* test the close of the line file
|
||||
*/
|
||||
printf("%d-: detected %d error condition(s), many of which may be OK\n",
|
||||
dotest_code, dotest_old_errcount-dotest_errcnt);
|
||||
printf("%d-: closing line file: %d\n", dotest_code, dotest_file);
|
||||
fclose(dotest_f_file);
|
||||
|
||||
/*
|
||||
* test line file accounting
|
||||
*/
|
||||
if (dotest_failcnt > 0) {
|
||||
printf("**** %d-: %d test failure(s) in %d line(s)\n",
|
||||
dotest_code, dotest_failcnt, dotest_linenum);
|
||||
} else {
|
||||
printf("%d-: no failure(s) in %d line(s)\n",
|
||||
dotest_code, dotest_linenum);
|
||||
}
|
||||
|
||||
/*
|
||||
* preppare to return to the caller environment
|
||||
*
|
||||
* We increase the caller's error count by the number
|
||||
* of line tests that failed, not the number of internal
|
||||
* errors that were noted.
|
||||
*/
|
||||
errmax(dotest_old_errmax),;
|
||||
errcount(dotest_old_errcount + dotest_failcnt),;
|
||||
|
||||
/*
|
||||
* All Done!!! -- Jessica Noll, Age 2
|
||||
*/
|
||||
return dotest_failcnt;
|
||||
}
|
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: ellip.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: ellip.cal,v 29.3 2006/03/07 22:16:25 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:33
|
||||
@@ -141,7 +141,7 @@ define point_mul(p1, p2)
|
||||
if (p2 == 1)
|
||||
return p1;
|
||||
if (p1 == p2)
|
||||
return point_square(&p1);
|
||||
return point_square(`p1);
|
||||
obj point r;
|
||||
m = (minv(p2.x - p1.x, N) * (p2.y - p1.y)) % N;
|
||||
if (m == 0) {
|
||||
@@ -185,9 +185,9 @@ define point_pow(p, pow)
|
||||
r = p;
|
||||
t = p;
|
||||
for (bit = 2; ((bit <= pow) && (f == 0)); bit <<= 1) {
|
||||
t = point_square(&t);
|
||||
t = point_square(`t);
|
||||
if (bit & pow)
|
||||
r = point_mul(&t, &r);
|
||||
r = point_mul(`t, `r);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: natnumset.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: natnumset.cal,v 29.3 2006/05/01 19:19:46 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/natnumset.cal,v $
|
||||
*
|
||||
* Under source code control: 1997/09/07 23:53:51
|
||||
@@ -471,7 +471,7 @@ define set_plus(a) = set_sum(a);
|
||||
define interval(a, b)
|
||||
{
|
||||
local i, j, s;
|
||||
static tail = str("\0\1\3\7\17\37\77\177\377");
|
||||
static tail = "\0\1\3\7\17\37\77\177\377";
|
||||
|
||||
if (!isint(a) || !isint(b))
|
||||
quit "Non-integer argument for interval";
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* regress - calc regression and correctness test suite
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* 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
|
||||
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.20 $
|
||||
* @(#) $Id: regress.cal,v 29.20 2004/10/22 23:51:26 chongo Exp $
|
||||
* @(#) $Revision: 29.25 $
|
||||
* @(#) $Id: regress.cal,v 29.25 2006/05/21 00:58:31 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:36
|
||||
@@ -1310,9 +1310,14 @@ define test_functions()
|
||||
* verify sleep
|
||||
*/
|
||||
vrfy(sleep(1/5) == null(), '1153: sleep(1/5) == null()');
|
||||
vrfy(sleep(1) == null(), '1154: sleep(1) == null()');
|
||||
vrfy(sleep(1/100) == null(), '1154: sleep(1/100) == null()');
|
||||
|
||||
print '1155: Ending test_functions';
|
||||
/*
|
||||
* verify calcpath
|
||||
*/
|
||||
vrfy(isstr(calcpath()), '1155: isstr(calcpath())');
|
||||
|
||||
print '1156: Ending test_functions';
|
||||
}
|
||||
print '017: parsed test_functions()';
|
||||
|
||||
@@ -2595,6 +2600,22 @@ define test_2600()
|
||||
strcat(str(tnum++), ': ln(exp(6)^15) == 90'));
|
||||
vrfy(ln(exp(5)^18) == 90,
|
||||
strcat(str(tnum++), ': ln(exp(5)^18) == 90'));
|
||||
vrfy(log(1e6) == 6,
|
||||
strcat(str(tnum++), ': log(1e6)) == 6'));
|
||||
vrfy(log(1) == 0,
|
||||
strcat(str(tnum++), ': log(1)) == 0'));
|
||||
vrfy(log(100) == 2,
|
||||
strcat(str(tnum++), ': log(100)) == 2'));
|
||||
vrfy(log(1e66) == 66,
|
||||
strcat(str(tnum++), ': log(1e66)) == 66'));
|
||||
vrfy(log(1e127) == 127,
|
||||
strcat(str(tnum++), ': log(1e127)) == 127'));
|
||||
vrfy(round(log(17^47),10) == 57.8310993048,
|
||||
strcat(str(tnum++),
|
||||
': round(log(17^47),10) == 57.8310993048'));
|
||||
vrfy(round(log(127),10) == 2.103803721,
|
||||
strcat(str(tnum++),
|
||||
': round(log(127),10) == 2.103803721'));
|
||||
epsilon(i),;
|
||||
print tnum++: ': epsilon(i),;';
|
||||
|
||||
@@ -3383,7 +3404,7 @@ print '070: parsed test_redc()';
|
||||
*/
|
||||
define test_fileops()
|
||||
{
|
||||
local a, b, c, f, m, n, x, y, z;
|
||||
local a, b, c, f, m, n, p, r, x, y, z;
|
||||
local L = "Landon";
|
||||
local C = "Curt";
|
||||
local N = "Noll";
|
||||
@@ -3485,13 +3506,21 @@ define test_fileops()
|
||||
vrfy(y == "Noll", '4258: y == "Noll"');
|
||||
vrfy(isnull(fclose(f)), '4259: isnull(fclose(f))');
|
||||
|
||||
/*
|
||||
* fpathopen tests
|
||||
*/
|
||||
vrfy(!iserror(p=fpathopen("junk4200","r",".")),
|
||||
'4260: !iserror(p=fparhopen("junk4200","r","."))');
|
||||
vrfy(!iserror(r=fpathopen("regress.cal","r")),
|
||||
'4261: !iserror(r=fparhopen("regress.cal","r","."))');
|
||||
|
||||
/*
|
||||
* cleanup
|
||||
*/
|
||||
x = rm("junk4200");
|
||||
print '4260: x = rm("junk4200")';
|
||||
print '4262: x = rm("junk4200")';
|
||||
|
||||
print '4261: Ending test_fileops';
|
||||
print '4263: Ending test_fileops';
|
||||
}
|
||||
print '071: parsed test_fileops()';
|
||||
|
||||
@@ -5115,7 +5144,7 @@ define test_assign(base, work)
|
||||
Y5800 = base+4;
|
||||
print base+4: ': Y5800 = base+4';
|
||||
obj xy5800 A={1,2}, obj xy5800 B={3,4};
|
||||
print base+5: ': obj xy5800 A={1,2}, obj xy5000 B={3,4}';
|
||||
print base+5: ': obj xy5800 A={1,2}, obj xy5800 B={3,4}';
|
||||
|
||||
/*
|
||||
* test assignment
|
||||
@@ -5238,7 +5267,7 @@ define test_is()
|
||||
prime = 3217;
|
||||
print '5922: prime = 3217';
|
||||
square = prime^2;
|
||||
print '5923: square = prine^2';
|
||||
print '5923: square = prime^2';
|
||||
string = "a string";
|
||||
print '5924: string = "a string"';
|
||||
com = 3+4i;
|
||||
@@ -6237,7 +6266,7 @@ define test_blk()
|
||||
/* A second named block */
|
||||
|
||||
B1 = blk("+++6700", 15, 10) = {1,2,3,4,5};
|
||||
print '6746: B1 = blk("+++6700", , 10);';
|
||||
print '6746: B1 = blk("+++6700", 15 , 10) = {1,2,3,4,5};';
|
||||
vrfy(size(B1) == 15, '6747: size(B1) == 15');
|
||||
vrfy(sizeof(B1) == 20, '6748: sizeof(B1) == 20');
|
||||
vrfy(test(B1) == 1, '6749: test(B1) == 1');
|
||||
@@ -7339,7 +7368,7 @@ define test_somenew()
|
||||
vrfy(size(char(0)) == 1, '8203: size(char(0)) == 1');
|
||||
vrfy(strlen(char(0)) == 0, '8204: strlen(char(0)) == 0');
|
||||
vrfy(char(0) != "", '8205: char(0) != ""');
|
||||
vrfy(strcmp(char(0),"") == 0, '8206: strcmp(char(0),"") == 0');
|
||||
vrfy(str(char(0)) == "", '8206: str(char(0)) == ""');
|
||||
|
||||
vrfy(str("abc") == "abc", '8207: str("abc") == "abc"');
|
||||
|
||||
@@ -7696,20 +7725,34 @@ print '8406: Ending test_quit';
|
||||
* test_divmod - psuedo-random tests on the // and % with various rounding modes
|
||||
*/
|
||||
print;
|
||||
print '8500: Starting test_divmod'
|
||||
print '8500: Starting test of divmod'
|
||||
read -once "test8500";
|
||||
/* 85xx: Ending test_divmod is printed by test8500.cal */
|
||||
/* 85xx: Ending test of divmod is printed by test8500.cal */
|
||||
|
||||
|
||||
/*
|
||||
* test_maxargs - test up to 1024 args being passed to a builtin function
|
||||
*/
|
||||
print;
|
||||
print '8600: Starting test_1024args'
|
||||
print '8600: Starting test of up to 1024 args'
|
||||
read -once "test8600";
|
||||
/* 86xx: Ending test_1024args is printed by test8600.cal */
|
||||
/* 86xx: Ending test of up to 1024 args is printed by test8600.cal */
|
||||
|
||||
|
||||
/*
|
||||
* dotest scripts
|
||||
*
|
||||
* We use the dotest driver to evaluate test-97xx data files.
|
||||
*/
|
||||
print '8700: Starting dotest runs'
|
||||
print '8701: read -once "dotest"';
|
||||
read -once "dotest";
|
||||
print '8702: read -once "set8700"';
|
||||
read -once "set8700";
|
||||
vrfy(dotest("set8700.line", 8703) == 0,
|
||||
'8703: dotest("set8700.line", 8703) == 0');
|
||||
/* 87xx: Ending dotest runs is printed by set8700.test */
|
||||
|
||||
/*
|
||||
* read various calc resource files
|
||||
*
|
||||
|
61
cal/screen.cal
Normal file
61
cal/screen.cal
Normal file
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* screen - ANSI control sequences
|
||||
*
|
||||
* This file was created by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||
*
|
||||
* This code has been placed in the public domain. Please do not
|
||||
* copyright this code.
|
||||
*
|
||||
* ERNEST BOWEN DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||||
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MER-
|
||||
* CHANTABILITY AND FITNESS. IN NO EVENT SHALL LANDON CURT
|
||||
* NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: screen.cal,v 29.2 2006/05/01 19:21:18 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/screen.cal,v $
|
||||
*
|
||||
* This file is not covered under version 2.1 of the GNU LGPL.
|
||||
*
|
||||
* Under source code control: 2006/03/08 05:54:09
|
||||
* File existed as early as: 2006
|
||||
*/
|
||||
|
||||
up = CUU ="\e[A";
|
||||
down = CUD = "\e[B}";
|
||||
forward = CUF = "\e[C";
|
||||
back = CUB = "\e[D";
|
||||
save = SCP = "\e[s";
|
||||
restore = RCP = "\e[u";
|
||||
cls = "\e[2J";
|
||||
home = "\e[F";
|
||||
eraseline = "\e[K";
|
||||
off = "\e[0m";
|
||||
bold = "\e[1m";
|
||||
faint = "\e[2m";
|
||||
italic = "\e[3m";
|
||||
blink = "\e[5m";
|
||||
rapidblink = "\e[6m";
|
||||
reverse = "\e[7m";
|
||||
concealed = "\e[8m";
|
||||
/* Lowercase indicates foreground, uppercase background" */
|
||||
black = "\e[30m";
|
||||
red = "\e[31m";
|
||||
green = "\e[32m";
|
||||
yellow = "\e[33m";
|
||||
blue = "\e[34m";
|
||||
magenta = "\e[35m";
|
||||
cyan = "\e[36m";
|
||||
white = "\e[37m";
|
||||
Black = "\e[40m";
|
||||
Red = "\e[41m";
|
||||
Green = "\e[42m";
|
||||
Yellow = "\e[43m";
|
||||
Blue = "\e[44m";
|
||||
Magenta = "\e[45m";
|
||||
Cyan = "\e[46m";
|
||||
White = "\e[47m";
|
72
cal/set8700.cal
Normal file
72
cal/set8700.cal
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* set8700 - environment for dotest line tests for the 8700 set of regress.cal
|
||||
*
|
||||
* Copyright (C) 2006 Ernest Bowen and Landon Curt Noll
|
||||
*
|
||||
* 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
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
* Public License for more details.
|
||||
*
|
||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.1 $
|
||||
* @(#) $Id: set8700.cal,v 29.1 2006/05/20 19:35:33 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.cal,v $
|
||||
*
|
||||
* Under source code control: 2006/05/20 14:10:11
|
||||
* File existed as early as: 2006
|
||||
*
|
||||
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* setup global variables for dotest() to use with set8700.set
|
||||
*/
|
||||
|
||||
global set8700_A;
|
||||
global set8700_B;
|
||||
global set8700_M;
|
||||
global set8700_M1;
|
||||
global set8700_M2;
|
||||
global set8700_L;
|
||||
global set8700_L1;
|
||||
global set8700_L2;
|
||||
global set8700_O;
|
||||
global set8700_P;
|
||||
global set8700_P1;
|
||||
global set8700_P2;
|
||||
global set8700_Q;
|
||||
global set8700_R;
|
||||
global set8700_S;
|
||||
global set8700_X;
|
||||
global set8700_Y;
|
||||
global set8700_x;
|
||||
global set8700_y;
|
||||
|
||||
define set8700_getA1() = set8700_A;
|
||||
|
||||
define set8700_getA2() { return set8700_A; }
|
||||
|
||||
define set8700_getvar() {local a = 42; protect(a,256); return a;}
|
||||
|
||||
define set8700_f(set8700_x) = set8700_x^2;
|
||||
|
||||
define set8700_g(set8700_x)
|
||||
{
|
||||
if (isodd(set8700_x)) protect(set8700_x, 256);
|
||||
return set8700_x;
|
||||
}
|
||||
|
||||
obj set8700_point {
|
||||
set8700_x, set8700_y, set8700_z
|
||||
}
|
405
cal/set8700.line
Normal file
405
cal/set8700.line
Normal file
@@ -0,0 +1,405 @@
|
||||
##
|
||||
## set8700 - dotest line tests for the 8700 set of regress.cal
|
||||
##
|
||||
## Copyright (C) 2006 Ernest Bowen and Landon Curt Noll
|
||||
##
|
||||
## 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
|
||||
## as published by the Free Software Foundation.
|
||||
##
|
||||
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
## Public License for more details.
|
||||
##
|
||||
## A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.1 $
|
||||
## @(#) $Id: set8700.line,v 29.1 2006/05/20 19:35:33 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.line,v $
|
||||
##
|
||||
## Under source code control: 2006/05/20 14:10:11
|
||||
## File existed as early as: 2006
|
||||
##
|
||||
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||
|
||||
|
||||
strcpy("", "") == ""
|
||||
strcpy("", "xyz") == ""
|
||||
strcpy("a", "xyz") == "x"
|
||||
strcpy("ab", "xyz") == "xy"
|
||||
strcpy("abc", "xyz") == "xyz"
|
||||
strcpy("abcd", "xyz") == "xyz\0" ## Result will print as "xyz"
|
||||
strcpy("abcde", "xyz") == "xyz\0e"
|
||||
strcpy("abcdef", "xyz") == "xyz\0ef"
|
||||
strcpy("abcdef", "x\0z") == "x\0z\0ef" ## Note z is copied
|
||||
strcpy("abc", "") == "\0bc"
|
||||
|
||||
strncpy("abcdef", "xyz", 0) == "abcdef" ## No characters copied
|
||||
strncpy("abcdef", "xyz", 1) == "xbcdef" ## One character copied, no '\0'
|
||||
strncpy("abcdef", "xyz", 2) == "xycdef"
|
||||
strncpy("abcdef", "xyz", 3) == "xyzdef"
|
||||
strncpy("abcdef", "xyz", 4) == "xyz\0ef"
|
||||
strncpy("abcdef", "xyz", 5) == "xyz\0\0f" ## Two nulls as in C
|
||||
strncpy("abcdef", "xyz", 6) == "xyz\0\0\0"
|
||||
strncpy("abcdef", "xyz", 7) == "xyz\0\0\0" ## Size of first string unchanged
|
||||
strncpy("a\0cdef", "\0yz", 4) == "\0yz\0ef"
|
||||
strncpy("ab", "xyz", 3) == "xy"
|
||||
|
||||
strcmp("", "") == 0
|
||||
strcmp("", "a") == -1
|
||||
strcmp("\n", "\n") == 0
|
||||
strcmp("\0", "") == 1 ## '\0' treated like other characters
|
||||
strcmp("ab", "") == 1
|
||||
strcmp("ab", "a") == 1
|
||||
strcmp("ab", "ab") == 0
|
||||
strcmp("ab", "abc") == -1
|
||||
strcmp("abc", "abb") == 1
|
||||
strcmp("abc", "abc") == 0
|
||||
strcmp("abc", "abd") == -1
|
||||
strcmp("abc\0", "abc") == 1
|
||||
|
||||
strncmp("abc", "xyz", 0) == 0
|
||||
strncmp("abc", "xyz", 1) == -1
|
||||
strncmp("abc", "", 1) == 1
|
||||
strncmp("abc", "a", 1) == 0
|
||||
strncmp("", "", 2) == 0
|
||||
strncmp("a", "a", 2) == 0
|
||||
strncmp("a", "b", 2) == -1
|
||||
strncmp("ab", "ab", 2) == 0
|
||||
strncmp("ab", "ac", 2) == -1
|
||||
strncmp("\0ac", "\0b", 2) == -1
|
||||
strncmp("ab", "abc", 2) == 0
|
||||
strncmp("abc", "abd", 2) == 0
|
||||
strncmp("a", "a\0", 2) == -1
|
||||
strncmp("a", "a", 3) == 0
|
||||
strncmp("abc", "abd", 3) == -1
|
||||
strncmp("\0\0\n", "\0\0\t", 3) == 1
|
||||
|
||||
str("abc") == "abc"
|
||||
str("ab\0") == "ab"
|
||||
str("a\0c") == "a"
|
||||
str("\0bc") == ""
|
||||
|
||||
size("") == 0
|
||||
size("a") == 1
|
||||
size("\0") == 1
|
||||
size("a\0") == 2
|
||||
size("a\0b") == 3
|
||||
|
||||
strlen("\0") == 0
|
||||
strlen("a\0") == 1
|
||||
strlen("a\0b") == 1
|
||||
|
||||
0 * "abc" == ""
|
||||
1 * "abc" == "abc"
|
||||
2 * "abc" == "abcabc"
|
||||
3 * "abc" == "abcabcabc"
|
||||
1 * "" == ""
|
||||
-1 * "abc" == "cba"
|
||||
-2 * "abc" == "cbacba"
|
||||
"abc" + "xyz" == "abcxyz"
|
||||
"abc" - "xyz" == "abczyx"
|
||||
|
||||
|
||||
substr("abcd",0,0) == ""
|
||||
substr("abcd",0,1) == "a"
|
||||
substr("abcd",0,2) == "ab"
|
||||
substr("abcd",1,0) == ""
|
||||
substr("abcd",1,1) == "a"
|
||||
substr("abcd",1,2) == "ab"
|
||||
substr("abcd",2,0) == ""
|
||||
substr("abcd",2,1) == "b"
|
||||
substr("abcd",2,2) == "bc";
|
||||
substr("abcd",2,3) == "bcd";
|
||||
substr("abcd",2,4) == "bcd";
|
||||
substr("abcd",2,5) == "bcd"; ## substr stops at end of string
|
||||
substr("abcd",4,0) == ""
|
||||
substr("abcd",4,1) == "d"
|
||||
substr("abcd",4,2) == "d"
|
||||
substr("abcd",4,3) == "d"
|
||||
substr("abcd",5,0) == ""
|
||||
substr("abcd",5,1) == ""
|
||||
substr("a\0c\0",2,2) == "\0c" ## '\0' treated like other characters
|
||||
substr("a\0c\0",2,3) == "\0c\0"
|
||||
|
||||
#"" == 0 ## # operator counts number of bits
|
||||
#"\0" == 0
|
||||
# "a" == 3
|
||||
# "ab" == 6 ## white space ignored
|
||||
# "abc" == 10
|
||||
# 27 == 4
|
||||
# 0b1010111011 == 7
|
||||
|
||||
7 # 9 == 2 ## 7 # 9 = abs(7 - 9)
|
||||
3/4 # 2/3 == 1/12
|
||||
|
||||
a = 5, a #= 2, a == 3
|
||||
a #= 4, a == 1
|
||||
|
||||
## Binary # operator not defined for strings
|
||||
|
||||
global set8700_A; protect(set8700_A) == 0
|
||||
## Testing with one lvalue
|
||||
isnull(protect(set8700_A,65))
|
||||
protect(set8700_A) == 65
|
||||
isnull(protect(set8700_A, -1))
|
||||
protect(set8700_A) == 64
|
||||
protect(set8700_A,-2), protect(set8700_A) == 64
|
||||
protect(set8700_A,5), protect(set8700_A) == 69
|
||||
protect(set8700_A,-4), protect(set8700_A) == 65
|
||||
protect(set8700_A,0), protect(set8700_A) == 0
|
||||
protect(set8700_A,1234), protect(set8700_A) == 1234
|
||||
protect(set8700_A,-1234), protect(set8700_A) == 0
|
||||
protect(set8700_A,65535), protect(set8700_A) == 65535
|
||||
protect(set8700_A,-65535), protect(set8700_A) == 0
|
||||
|
||||
## Simple assignments
|
||||
set8700_A = 42, protect(set8700_A,1024), set8700_B = set8700_A, protect(set8700_B) == 1024
|
||||
set8700_A = 6 * 7, protect(set8700_A) == 1024
|
||||
set8700_A == set8700_B
|
||||
|
||||
## Testing matrix protectioon
|
||||
set8700_A = mat [3] = {1, 2, list(3,4)}; 1
|
||||
protect(set8700_A, 65, 1), protect(set8700_A) == 1089
|
||||
protect(set8700_A[0]) == 65
|
||||
protect(set8700_A[2]) == 65
|
||||
protect(set8700_A[2][1]) == 0
|
||||
protect(set8700_A, 65, 2), protect(set8700_A[2][1]) == 65
|
||||
protect(set8700_A,-1024), protect(set8700_A) == 65
|
||||
protect(set8700_A, -1, 1), protect(set8700_A) == 64
|
||||
protect(set8700_A[1]) == 64
|
||||
protect(set8700_A[2]) == 64
|
||||
protect(set8700_A[2][0]) == 65
|
||||
protect(set8700_A,0), protect(set8700_A) == 0
|
||||
protect(set8700_A[1]) == 64
|
||||
protect(set8700_A, 0, 2), protect(set8700_A) == 0
|
||||
protect(set8700_A[1]) == 0
|
||||
protect(set8700_A[2][1]) == 0
|
||||
protect(set8700_A,1024, 2), protect(set8700_A) == 1024
|
||||
protect(set8700_A[2]) == 1024
|
||||
protect(set8700_A[2][0], 512), protect(set8700_A[2][0]) == 1536
|
||||
|
||||
## Testing simple assignment of matrix
|
||||
set8700_B = set8700_A, protect(set8700_B) == 1024 ## protect(set8700_A) copied
|
||||
protect(set8700_B[2]) == 1024 ## protect(set8700_A[2]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## copying matrix to list
|
||||
set8700_B = list(5,6,7), protect(set8700_B) == 1024
|
||||
protect(set8700_B[0]) == 0
|
||||
protect(set8700_B[2]) == 0
|
||||
protect(set8700_A,0), protect(set8700_A) == 0
|
||||
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||
set8700_B[2] == list(3,4)
|
||||
protect(set8700_B) == 1024 ## protect(set8700_A) not copied
|
||||
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## copying matrix to matrix
|
||||
set8700_B = mat[3], protect(set8700_B) == 1024
|
||||
protect(set8700_B[2]) == 0
|
||||
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||
set8700_B[2] == list(3,4)
|
||||
protect(set8700_B) == 1024 ## protect(set8700_A) not copied
|
||||
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## Testing list protection
|
||||
set8700_A = list(1, 2, list(3,4)), 1
|
||||
protect(set8700_A,1024, 2), protect(set8700_A) == 1024
|
||||
protect(set8700_A[2]) == 1024
|
||||
protect(set8700_A[2][0], 512), protect(set8700_A[2][0]) == 1536
|
||||
|
||||
## Simple assignment of list
|
||||
set8700_B = set8700_A, protect(set8700_B) == 1024 ## protect(set8700_A) copied
|
||||
protect(set8700_B[2]) == 1024 ## protect(set8700_A[2]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## Copying list to list
|
||||
set8700_B = list(5,6,7), protect(set8700_B) == 1024
|
||||
protect(set8700_B[2]) == 0
|
||||
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||
set8700_B[2] == list(3,4)
|
||||
protect(set8700_B) == 1024 ## protect(set8700_A) not copied
|
||||
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## Copying list to matrix
|
||||
set8700_B = mat[3], protect(set8700_B) == 1024
|
||||
protect(set8700_B[2]) == 0
|
||||
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||
set8700_B[2] == list(3,4)
|
||||
protect(set8700_B) == 1024
|
||||
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## Protecting one element of a list
|
||||
set8700_A = list(1,4,3,2), protect(set8700_A[1]) == 0
|
||||
protect(set8700_A[1], 1024), protect(set8700_A[1]) == 1024
|
||||
|
||||
## Testing sort
|
||||
set8700_A = sort(set8700_A), set8700_A == list(1,2,3,4)
|
||||
protect(set8700_A[1]) == 0
|
||||
protect(set8700_A[3]) == 1024 ## status of 4
|
||||
|
||||
## Testings reverse
|
||||
set8700_A = reverse(set8700_A), set8700_A == list(4,3,2,1)
|
||||
protect(set8700_A[0]) == 1024 ## status of 4
|
||||
|
||||
## Testing swap
|
||||
swap(set8700_A[0], set8700_A[1]), set8700_A == list(3,4,2,1)
|
||||
protect(set8700_A[0]) == 0 ## status moved
|
||||
protect(set8700_A[1]) == 1024 ## 4 retains protection
|
||||
|
||||
## Testing list with protected list argument
|
||||
protect(set8700_A, 0), protect(set8700_A) == 0
|
||||
protect(set8700_A, 512), protect(set8700_A) == 512
|
||||
protect(set8700_A[1]) == 1024
|
||||
set8700_L = list(1,set8700_A,3), protect(set8700_L) == 0
|
||||
protect(set8700_L[0]) == 0
|
||||
protect(set8700_L[1]) == 512 ## protect(set8700_A) copied
|
||||
protect(set8700_L[1][1]) == 1024 ## protect(set8700_A[1]) copied
|
||||
|
||||
## Testing list with "intialization"
|
||||
set8700_L = list(1,2,3), protect(set8700_L) == 0
|
||||
protect(set8700_L[0]) | protect(set8700_L[1]) | protect(set8700_L[2]) == 0 ## All zero
|
||||
set8700_L = {1,set8700_A}, set8700_L[1] == set8700_A
|
||||
protect(set8700_L[1]) == 512 ## protect(set8700_A) copied
|
||||
protect(set8700_L[1][1]) == 1024 ## protect(set8700_A[1]) copied
|
||||
set8700_L[1] = 2, protect(set8700_L[1]) == 512 ## Not changed
|
||||
|
||||
## Testing matrix with "initialization"
|
||||
set8700_M = mat[3] = {1,set8700_A}, protect(set8700_M) == 0
|
||||
protect(set8700_M[0]) == 0
|
||||
protect(set8700_M[1]) == 512 ## protect(set8700_A) copied
|
||||
protect(set8700_M[2]) == 0
|
||||
protect(set8700_M[1][1]) == 1024 ## protect(set8700_A[1]) copied
|
||||
|
||||
## Testing push, pop, append, remove
|
||||
set8700_A = list(1,2), protect(set8700_A,0,1), protect(set8700_A[0]) == 0
|
||||
protect(set8700_A[0], 256), protect(set8700_A[0]) == 256
|
||||
protect(set8700_A[1]) == 0
|
||||
append(set8700_A, pop(set8700_A)), protect(set8700_A[0]) == 0
|
||||
protect(set8700_A[1]) == 256
|
||||
push(set8700_A, remove(set8700_A)), protect(set8700_A[0]) == 256
|
||||
protect(set8700_A[1]) == 0
|
||||
|
||||
## Testing operation-assignments
|
||||
set8700_A = 5, protect(set8700_A,1024), protect(set8700_A) == 1024
|
||||
protect(set8700_A, 1024), set8700_A = 7, protect(set8700_A) == 1024
|
||||
protect(set8700_A,1024), set8700_A += 2, protect(set8700_A) == 1024
|
||||
protect(set8700_A,1024), set8700_A *= 2, protect(set8700_A) == 1024
|
||||
protect(set8700_A,1024), set8700_A |= 2, protect(set8700_A) == 1024
|
||||
protect(set8700_A,1024), set8700_A &= 2, protect(set8700_A) == 1024
|
||||
protect(set8700_A,1024), set8700_A ^= 2, protect(set8700_A) == 1024
|
||||
|
||||
protect(set8700_B,0), set8700_B = set8700_getA1(), protect(set8700_B) == 1024
|
||||
protect(set8700_B,0), set8700_B = set8700_getA2(), protect(set8700_B) == 1024
|
||||
set8700_B = set8700_getvar(), protect(set8700_B) == 1024 + 256
|
||||
|
||||
global set8700_x, set8700_y; set8700_x = 7, protect(set8700_x) == 0
|
||||
protect(7,2) == error(10234)
|
||||
protect(set8700_x,2.5) == error(10235)
|
||||
protect(set8700_x,"abc") == error(10235)
|
||||
protect(set8700_x, 1e6) == error(10235)
|
||||
protect(set8700_x,1), (set8700_x = 2) == error(10366)
|
||||
(set8700_x = 3 + 4) == error(10366)
|
||||
|
||||
protect(set8700_x,2), protect(set8700_x) == 3
|
||||
protect(set8700_x,-1), protect(set8700_x) == 2
|
||||
(set8700_x = 2) == error(10368)
|
||||
(set8700_x = 3 + 4) == 7
|
||||
protect(set8700_x,2), ++set8700_x == error(10379)
|
||||
set8700_x == 7
|
||||
--set8700_x == error(10382)
|
||||
set8700_x == 7
|
||||
set8700_x++ == error(10385)
|
||||
set8700_x == 7
|
||||
set8700_x-- == error(10388)
|
||||
|
||||
global set8700_A, set8700_B; 1
|
||||
protect(set8700_A,0), protect(set8700_A,16), 1
|
||||
set8700_A = "abcdef", protect(set8700_A) == 16 ## No copy to set8700_A
|
||||
protect(set8700_B,0), set8700_B = "xyz", protect(set8700_B) == 0
|
||||
copy(set8700_B, set8700_A) == error(10226)
|
||||
set8700_A == "abcdef" ## set8700_A not changed
|
||||
protect(set8700_A,0), copy(set8700_B,set8700_A), set8700_A == "xyzdef"
|
||||
protect(set8700_B,128), protect(set8700_B) == 128 ## No copy from set8700_B
|
||||
copy(set8700_B,set8700_A,,,3) == error(10225)
|
||||
set8700_A == "xyzdef"
|
||||
protect(set8700_B,0), copy(set8700_B,set8700_A,,,3), set8700_A == "xyzxyz"
|
||||
|
||||
set8700_A = "abcdef", protect(set8700_A, 16), swap(set8700_A[0], set8700_A[5]) == error(10371)
|
||||
set8700_A == "abcdef"
|
||||
protect(set8700_A,0), isnull(swap(set8700_A[0], set8700_A[5]))
|
||||
set8700_A == "fbcdea"
|
||||
protect(set8700_A,2), ++set8700_A[0] == error(10377)
|
||||
--set8700_A[1] == error(10380)
|
||||
set8700_A[2]++ == error(10383)
|
||||
set8700_A[3]-- == error(10386)
|
||||
set8700_A == "fbcdea"
|
||||
protect(set8700_A,0), ++set8700_A[0] == 'g'
|
||||
--set8700_A[1] == 'a'
|
||||
set8700_A[2]++ == ord('c')
|
||||
set8700_A[3]-- == ord('d')
|
||||
set8700_A == "gadcea"
|
||||
|
||||
protect(set8700_x,0), protect(set8700_y,0), protect(set8700_x,256), protect(set8700_y,512),1
|
||||
quomod(11,4,set8700_x,set8700_y), set8700_x == 2 && set8700_y == 3
|
||||
protect(set8700_x) == 256
|
||||
protect(set8700_y) == 512
|
||||
|
||||
set8700_A = mat[3]; protect(set8700_A[0], 1024); protect(set8700_A[0]) == 1024
|
||||
set8700_x = 7, protect(set8700_x,0), protect(set8700_x, 512), 1
|
||||
set8700_A = {set8700_x,,set8700_x}, protect(set8700_A[0]) == 1536
|
||||
protect(set8700_A[1]) == 0
|
||||
protect(set8700_A[2]) == 512
|
||||
protect(set8700_A,16), protect(set8700_A) == 16 ## No copy to
|
||||
set8700_A == (mat[3] = {7,0,7})
|
||||
set8700_A = {1,2,3}, errno() == 10390;
|
||||
set8700_A == (mat[3] = {7,0,7})
|
||||
|
||||
protect(set8700_A,0), set8700_A = {1,2,3}, set8700_A == (mat[3] = {1,2,3})
|
||||
protect(set8700_A[1],1), protect(set8700_A[1]) == 1
|
||||
set8700_A = {4,5,6}, errno() == 10394
|
||||
set8700_A == (mat[3] = {4,2,6})
|
||||
modify(7, "set8700_f") == error(10405)
|
||||
set8700_A = list(2,3,5), modify(set8700_A, 7) == error(10406)
|
||||
protect(set8700_A,2), modify(set8700_A, "set8700_f") == error(10407)
|
||||
protect(set8700_A,0), modify(set8700_A, "h") == error(10408)
|
||||
set8700_B = 42, protect(set8700_B,0), modify(set8700_B, "set8700_f") == error(10409)
|
||||
set8700_A == list(2,3,5) ## set8700_A not affected by failures
|
||||
protect(set8700_A,0,1), modify(set8700_A, "set8700_f") == null()
|
||||
set8700_A == list(4,9,25)
|
||||
modify(set8700_A,"set8700_g") == null()
|
||||
protect(set8700_A[0]) == 0
|
||||
protect(set8700_A[1]) == 256 && protect(set8700_A[2]) == 256
|
||||
|
||||
set8700_A = 0, protect(set8700_A,0), set8700_A = pop(2), set8700_A == error(10181)
|
||||
set8700_A = pop(list(1,2,3)), set8700_A == error(10181)
|
||||
set8700_B = set8700_A = pop(2), set8700_B == error(10181)
|
||||
set8700_A = 32, protect(set8700_A,8), (set8700_A = pop(2)) == error(10370)
|
||||
set8700_A == 32
|
||||
set8700_B = set8700_A = pop(2), set8700_B == error(10370)
|
||||
## Testing copying of protected elements and initialization
|
||||
set8700_M1 = mat[3], protect(set8700_M1,0), protect(set8700_M1[1],1), protect(set8700_M1[1]) == 1
|
||||
set8700_M2 = mat[3], protect(set8700_M2,0), protect(set8700_M2[2],4), protect(set8700_M2[2]) == 4
|
||||
set8700_L = list(set8700_M1, set8700_M2), protect(set8700_L[0][1]) == 1 && protect(set8700_L[1][2]) == 4
|
||||
set8700_L = {{1,2,3},{'a','b','c'}}, set8700_L[0] == (mat[3] = {1,0,3})
|
||||
set8700_L[1] == (mat[3] = {'a','b',0})
|
||||
set8700_M = mat[2], protect(set8700_M,0), set8700_M = {1,2,3,4}, set8700_M == (mat[2] = {1,2})
|
||||
set8700_x = 5, set8700_M = {set8700_x++, set8700_x++, set8700_x++, set8700_x++, set8700_x++}, set8700_M == (mat[2] = {5,6})
|
||||
set8700_x == 10 ## All initialization terms evaluated
|
||||
set8700_S = " ", set8700_S = {'a','b','c','d'}, set8700_S == "abc"
|
||||
|
||||
set8700_P = obj set8700_point = {1,2,3,4}, set8700_P.set8700_x == 1 && set8700_P.set8700_y == 2 && set8700_P.set8700_z == 3
|
||||
protect(set8700_P,16), set8700_Q = set8700_P, set8700_Q = {5,6,7}, set8700_Q == set8700_P
|
||||
set8700_P == (obj set8700_point = {1,2,3})
|
||||
set8700_L = list(mat[1] = {set8700_P}), protect(set8700_L[0][0]) == 16
|
||||
set8700_L = {{{4,5,6}}}, set8700_L[0][0] == set8700_P
|
||||
protect(set8700_L,0,2), set8700_L = {{{4,5,6}}}, set8700_L[0][0] == (obj set8700_point = {4,5,6})
|
19
calc.c
19
calc.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* calc - arbitrary precision calculator
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2006 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.11 $
|
||||
* @(#) $Id: calc.c,v 29.11 2004/02/23 14:04:01 chongo Exp $
|
||||
* @(#) $Revision: 29.13 $
|
||||
* @(#) $Id: calc.c,v 29.13 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:11
|
||||
@@ -111,7 +111,7 @@ main(int argc, char **argv)
|
||||
BOOL done = FALSE;
|
||||
BOOL havearg;
|
||||
BOOL haveendstr;
|
||||
int len;
|
||||
size_t len;
|
||||
|
||||
/*
|
||||
* parse args
|
||||
@@ -393,7 +393,7 @@ main(int argc, char **argv)
|
||||
}
|
||||
/* XXX What if *cp = '\''? */
|
||||
*bp++ = '\'';
|
||||
strcpy(bp, cp);
|
||||
strncpy(bp, cp, len+1);
|
||||
bp += len;
|
||||
*bp++ = '\'';
|
||||
cp += len;
|
||||
@@ -452,16 +452,19 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
while (index < maxindex) {
|
||||
size_t cplen;
|
||||
|
||||
if (cmdlen > 0)
|
||||
cmdbuf[cmdlen++] = ' ';
|
||||
newcmdlen = cmdlen + strlen(cp);
|
||||
cplen = strlen(cp);
|
||||
newcmdlen = cmdlen + cplen;
|
||||
if (newcmdlen > MAXCMD) {
|
||||
fprintf(stderr,
|
||||
"%s: commands too long\n",
|
||||
program);
|
||||
exit(1);
|
||||
}
|
||||
strcpy(cmdbuf + cmdlen, cp);
|
||||
strncpy(cmdbuf + cmdlen, cp, cplen+1);
|
||||
cmdlen = newcmdlen;
|
||||
index++;
|
||||
if (index < maxindex)
|
||||
@@ -579,7 +582,7 @@ main(int argc, char **argv)
|
||||
if (run_state == RUN_PRE_CMD_ARGS) {
|
||||
if (havecommands) {
|
||||
set_run_state(RUN_CMD_ARGS);
|
||||
(void) openstring(cmdbuf, (long) strlen(cmdbuf));
|
||||
(void) openstring(cmdbuf, strlen(cmdbuf));
|
||||
getcommands(FALSE);
|
||||
closeinput();
|
||||
}
|
||||
|
15
calc.h
15
calc.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* calc - definitions for calculator program
|
||||
*
|
||||
* Copyright (C) 1999 David I. Bell
|
||||
* Copyright (C) 1999-2006 David I. Bell
|
||||
*
|
||||
* 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
|
||||
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.11 $
|
||||
* @(#) $Id: calc.h,v 29.11 2003/08/26 04:36:10 chongo Exp $
|
||||
* @(#) $Revision: 29.18 $
|
||||
* @(#) $Id: calc.h,v 29.18 2006/05/21 07:28:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:31
|
||||
@@ -98,12 +98,13 @@
|
||||
#define FILEID_STDIN ((FILEID) 0)
|
||||
#define FILEID_STDOUT ((FILEID) 1)
|
||||
#define FILEID_STDERR ((FILEID) 2)
|
||||
#define FILEID_NONE ((FILEID) -1)
|
||||
#define FILEID_NONE ((FILEID) -1) /* must be < 0 */
|
||||
|
||||
/*
|
||||
* File I/O routines.
|
||||
*/
|
||||
extern DLL FILEID openid(char *name, char *mode);
|
||||
extern DLL FILEID openpathid(char *name, char *mode, char *pathlist);
|
||||
extern DLL FILEID indexid(long index);
|
||||
extern DLL BOOL validid(FILEID id);
|
||||
extern DLL BOOL errorid(FILEID id);
|
||||
@@ -148,7 +149,7 @@ extern DLL void trimconstants(void);
|
||||
/*
|
||||
* Input routines.
|
||||
*/
|
||||
extern DLL int openstring(char *str, long num);
|
||||
extern DLL int openstring(char *str, size_t num);
|
||||
extern DLL int openterminal(void);
|
||||
extern DLL int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
|
||||
extern DLL char *nextline(void);
|
||||
@@ -205,7 +206,7 @@ extern DLL int d_flag; /* TRUE => disable heading, resource_debug */
|
||||
extern DLL int c_flag; /* TRUE => continue after error if permitted */
|
||||
extern DLL int i_flag; /* TRUE => try to go interactive after error */
|
||||
extern DLL int s_flag; /* TRUE => keep args as strings for argv() */
|
||||
extern DLL int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
||||
extern DLL long stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
||||
extern DLL BOOL abort_now; /* TRUE => try to go interactive */
|
||||
|
||||
extern DLL int argc_value; /* count of argv[] strings for argv() builtin */
|
||||
@@ -231,7 +232,7 @@ extern DLL char *shell; /* $SHELL or default */
|
||||
extern DLL char *program; /* our name (argv[0]) */
|
||||
|
||||
extern DLL int no_env; /* TRUE (-e) => ignore env vars on startup */
|
||||
extern DLL int errmax; /* if >= 0, error when errcount exceeds errmax */
|
||||
extern DLL long errmax; /* if >= 0, error when errcount exceeds errmax */
|
||||
extern DLL int use_old_std; /* TRUE (-O) => use classic configuration */
|
||||
|
||||
extern DLL int allow_read; /* FALSE => dont open any files for reading */
|
||||
|
10
calc.spec.in
10
calc.spec.in
@@ -18,8 +18,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.14 $
|
||||
# @(#) $Id: calc.spec.in,v 29.14 2005/12/12 06:57:27 chongo Exp $
|
||||
# @(#) $Revision: 29.15 $
|
||||
# @(#) $Id: calc.spec.in,v 29.15 2006/05/21 06:26:00 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.spec.in,v $
|
||||
#
|
||||
# Under source code control: 2003/02/16 20:21:39
|
||||
@@ -92,6 +92,7 @@ rm -rf %{buildroot}
|
||||
%{_datadir}/%{name}/bindings
|
||||
%{_datadir}/%{name}/README
|
||||
%{_datadir}/%{name}/*.cal
|
||||
%{_datadir}/%{name}/*.line
|
||||
|
||||
%files devel
|
||||
%defattr(-, root, root)
|
||||
@@ -100,7 +101,10 @@ rm -rf %{buildroot}
|
||||
%attr(644, root, root) %{_libdir}/*.a
|
||||
|
||||
%changelog
|
||||
* Sun Dec 11 2006 Landon Curt Noll http://www.isthe.com/chongo
|
||||
* Sun May 20 2006 Landon Curt Noll http://www.isthe.com/chongo
|
||||
- Release of calc-2.12.0
|
||||
- Added *.line set files to the list of packaged files
|
||||
* Sun Dec 11 2005 Landon Curt Noll http://www.isthe.com/chongo
|
||||
- Release of calc-2.11.11
|
||||
- Fixed description in spec file
|
||||
* Wed Feb 26 2003 Landon Curt Noll http://www.isthe.com/chongo
|
||||
|
64
calcerr.tbl
64
calcerr.tbl
@@ -17,8 +17,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.4 $
|
||||
# @(#) $Id: calcerr.tbl,v 29.4 2001/04/10 22:06:46 chongo Exp $
|
||||
# @(#) $Revision: 29.8 $
|
||||
# @(#) $Id: calcerr.tbl,v 29.8 2006/05/19 15:12:57 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
|
||||
#
|
||||
# Under source code control: 1996/05/23 17:38:44
|
||||
@@ -164,7 +164,7 @@ E_RSEARCH3 Bad third argument for rsearch
|
||||
E_RSEARCH4 Bad fourth argument for rsearch
|
||||
E_RSEARCH5 Cannot find fsize or fpos for rsearch
|
||||
E_RSEARCH6 File not readable for rsearch
|
||||
E_FOPEN3 Too many open files
|
||||
E_MANYOPEN Too many open files
|
||||
E_REWIND2 Attempt to rewind a file that is not open
|
||||
E_STRERROR1 Bad argument type for strerror
|
||||
E_STRERROR2 Index out of range for strerror
|
||||
@@ -260,14 +260,14 @@ E_COPY13 No-copy-from source variable
|
||||
E_COPY14 No-copy-to destination variable
|
||||
E_COPY15 No-copy-from source named block
|
||||
E_COPY16 No-copy-to destination named block
|
||||
E_COPY17 No-relocation destination for copy
|
||||
E_COPY17 No-relocate destination for copy
|
||||
E_COPYF1 File not open for copy
|
||||
E_COPYF2 fseek or fsize failure for copy
|
||||
E_COPYF3 fwrite error for copy
|
||||
E_COPYF4 fread error for copy
|
||||
E_PROTECT1 Non-variable first argument for protect
|
||||
E_PROTECT2 Non-integer second argument for protect
|
||||
E_PROTECT3 Out-of-range second argument for protect
|
||||
E_PROTECT2 Bad second argument for protect
|
||||
E_PROTECT3 Bad third argument for protect
|
||||
E_MATFILL3 No-copy-to destination for matfill
|
||||
E_MATFILL4 No-assign-from source for matfill
|
||||
E_MATTRACE1 Non-matrix argument for mattrace
|
||||
@@ -393,3 +393,55 @@ E_BERN Bad argument for bern
|
||||
E_EULER Bad argument for euler
|
||||
E_SLEEP Bad argument for sleep
|
||||
E_TTY calc_tty failure
|
||||
E_ASSIGN1 No-copy-to destination for octet assign
|
||||
E_ASSIGN2 No-copy-from source for octet assign
|
||||
E_ASSIGN3 No-change destination for octet assign
|
||||
E_ASSIGN4 Non-variable destination for assign
|
||||
E_ASSIGN5 No-assign-to destination for assign
|
||||
E_ASSIGN6 No-assign-from source for assign
|
||||
E_ASSIGN7 No-change destination for assign
|
||||
E_ASSIGN8 No-type-change destination for assign
|
||||
E_ASSIGN9 No-error-value destination for assign
|
||||
E_SWAP1 No-copy argument for octet swap
|
||||
E_SWAP2 No-assign-to-or-from argument for swap
|
||||
E_SWAP3 Non-variable argument for swap
|
||||
E_QUOMOD1 Non-variable argument 4 or 4 for quomod
|
||||
E_QUOMOD2 Non-real-number argument 1 or 2 for quomod
|
||||
E_QUOMOD3 No-assign-to argument 3 or 4 for quomod
|
||||
E_PREINC1 No-copy-to or no-change argument for octet preinc
|
||||
E_PREINC2 Non-variable argument for preinc
|
||||
E_PREINC3 No-assign-to or no-change argument for preinc
|
||||
E_PREDEC1 No-copy-to or no-change argument for octet predec
|
||||
E_PREDEC2 Non-variable argument for predec
|
||||
E_PREDEC3 No-assign-to or no-change argument for predec
|
||||
E_POSTINC1 No-copy-to or no-change argument for octet postinc
|
||||
E_POSTINC2 Non-variable argument for postinc
|
||||
E_POSTINC3 No-assign-to or no-change argument for postinc
|
||||
E_POSTDEC1 No-copy-to or no-change argument for octet postdec
|
||||
E_POSTDEC2 Non-variable argument for postdec
|
||||
E_POSTDEC3 No-assign-to or no-change argument for postdec
|
||||
E_INIT1 Error-type structure for initialization
|
||||
E_INIT2 No-copy-to structure for initialization
|
||||
E_INIT3 Too many initializer values
|
||||
E_INIT4 Attempt to initialize freed named block
|
||||
E_INIT5 Bad structure type for initialization
|
||||
E_INIT6 No-assign-to element for initialization
|
||||
E_INIT7 No-change element for initialization
|
||||
E_INIT8 No-type-change element for initialization
|
||||
E_INIT9 No-error-value element for initialization
|
||||
E_INIT10 No-assign-or-copy-from source for initialization
|
||||
E_LIST1 No-relocate for list insert
|
||||
E_LIST2 No-relocate for list delete
|
||||
E_LIST3 No-relocate for list push
|
||||
E_LIST4 No-relocate for list append
|
||||
E_LIST5 No-relocate for list pop
|
||||
E_LIST6 No-relocate for list remove
|
||||
E_MODIFY1 Non-variable first argument for modify
|
||||
E_MODIFY2 Non-string second argument for modify
|
||||
E_MODIFY3 No-change first argument for modify
|
||||
E_MODIFY4 Undefined function for modify
|
||||
E_MODIFY5 Unacceptable type first argument for modify
|
||||
E_FPATHOPEN1 Non-string arguments for fpathopen
|
||||
E_FPATHOPEN2 Unrecognized mode for fpathopen
|
||||
E_LOG1 Bad epsilon argument for log
|
||||
E_LOG2 Non-numeric first argument for log
|
||||
|
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# check - check the regression output for problems
|
||||
#
|
||||
# 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
|
||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -18,8 +18,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.2 $
|
||||
# @(#) $Id: check.awk,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||
# @(#) $Revision: 29.3 $
|
||||
# @(#) $Id: check.awk,v 29.3 2006/05/20 19:43:39 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $
|
||||
#
|
||||
# Under source code control: 1996/05/25 22:07:58
|
||||
@@ -64,7 +64,7 @@ NF == 0 {
|
||||
end_seen = 1;
|
||||
}
|
||||
|
||||
$1 ~ /^[0-9]+:/ {
|
||||
$1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ {
|
||||
if (error > 0) {
|
||||
if (havebuf2) {
|
||||
print buf2;
|
||||
|
1
cmath.h
1
cmath.h
@@ -100,6 +100,7 @@ extern COMPLEX *c_sqrt(COMPLEX *c, NUMBER *epsilon, long R);
|
||||
extern COMPLEX *c_root(COMPLEX *c, NUMBER *q, NUMBER *epsilon);
|
||||
extern COMPLEX *c_exp(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_ln(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_log(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_cos(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_sin(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_cosh(COMPLEX *c, NUMBER *epsilon);
|
||||
|
125
codegen.c
125
codegen.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* codegen - module to generate opcodes from the input tokens
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell and Ernest Bowen
|
||||
* Copyright (C) 1999-2006 David I. Bell and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.9 $
|
||||
* @(#) $Id: codegen.c,v 29.9 2004/02/23 14:04:01 chongo Exp $
|
||||
* @(#) $Revision: 29.15 $
|
||||
* @(#) $Id: codegen.c,v 29.15 2006/05/20 09:42:57 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:13
|
||||
@@ -53,7 +53,8 @@ static BOOL rdonce; /* TRUE => do not reread this file */
|
||||
|
||||
FUNC *curfunc;
|
||||
|
||||
static int getfilename(char *name, BOOL *once);
|
||||
static int getsymvalue(char *name, VALUE *v_p);
|
||||
static int getfilename(char *name, size_t namelen, BOOL *once);
|
||||
static BOOL getid(char *buf);
|
||||
static void getshowstatement(void);
|
||||
static void getfunction(void);
|
||||
@@ -146,7 +147,7 @@ getcommands(BOOL toplevel)
|
||||
|
||||
case T_HELP:
|
||||
for (i=1;;i++) {
|
||||
switch(getfilename(name, NULL)) {
|
||||
switch(getfilename(name, MAXCMD+1, NULL)) {
|
||||
case -1:
|
||||
if(i == 1) {
|
||||
strcpy(name, DEFAULTCALCHELP);
|
||||
@@ -170,10 +171,13 @@ getcommands(BOOL toplevel)
|
||||
break;
|
||||
}
|
||||
for (;;) {
|
||||
if (getfilename(name, &rdonce))
|
||||
int open_ret;
|
||||
|
||||
if (getfilename(name, MAXCMD+1, &rdonce))
|
||||
break;
|
||||
switch (opensearchfile(name,calcpath,
|
||||
CALCEXT,rdonce)) {
|
||||
open_ret = opensearchfile(name,calcpath,
|
||||
CALCEXT,rdonce);
|
||||
switch (open_ret) {
|
||||
case 0:
|
||||
getcommands(FALSE);
|
||||
closeinput();
|
||||
@@ -200,7 +204,7 @@ getcommands(BOOL toplevel)
|
||||
"write command disallowed by -m mode\n");
|
||||
break;
|
||||
}
|
||||
if (getfilename(name, NULL))
|
||||
if (getfilename(name, MAXCMD+1, NULL))
|
||||
break;
|
||||
if (writeglobals(name)) {
|
||||
scanerror(T_NULL,
|
||||
@@ -213,8 +217,6 @@ getcommands(BOOL toplevel)
|
||||
break;
|
||||
case T_NEWLINE:
|
||||
case T_SEMICOLON:
|
||||
case T_POUNDBANG:
|
||||
case T_POUNDCOMMENT:
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -305,8 +307,7 @@ ungetfunction(void)
|
||||
type = getbuiltinfunc(name);
|
||||
if (type >= 0) {
|
||||
fprintf(stderr,
|
||||
"Attempt to undefine builtin function \"%s\" ignored\n",
|
||||
name);
|
||||
"Attempt to undefine builtin function \"%s\" ignored\n", name);
|
||||
continue;
|
||||
}
|
||||
rmuserfunc(name);
|
||||
@@ -320,8 +321,7 @@ ungetfunction(void)
|
||||
rescantoken();
|
||||
return;
|
||||
default:
|
||||
scanerror(T_SEMICOLON,
|
||||
"Non-name arg for undefine");
|
||||
scanerror(T_SEMICOLON, "Non-name arg for undefine");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1786,6 +1786,7 @@ getsum(void)
|
||||
switch (gettoken()) {
|
||||
case T_PLUS: op = OP_ADD; break;
|
||||
case T_MINUS: op = OP_SUB; break;
|
||||
case T_HASH: op = OP_HASHOP; break;
|
||||
default:
|
||||
rescantoken();
|
||||
return type;
|
||||
@@ -1868,7 +1869,6 @@ getandexpr(void)
|
||||
for (;;) {
|
||||
switch (gettoken()) {
|
||||
case T_AND: op = OP_AND; break;
|
||||
case T_HASH: op = OP_HASHOP; break;
|
||||
case T_TILDE: op = OP_XOR; break;
|
||||
case T_BACKSLASH: op = OP_SETMINUS; break;
|
||||
default:
|
||||
@@ -2228,6 +2228,45 @@ getidexpr(BOOL okmat, int autodef)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* getsymvalue - return the VALUE of a symbol
|
||||
*
|
||||
* given:
|
||||
* name symbol name
|
||||
* v_p pointer to value return
|
||||
*
|
||||
* returns:
|
||||
* symbol type found:
|
||||
*
|
||||
* SYM_UNDEFINED no such symbol
|
||||
* SYM_GLOBAL global symbol found
|
||||
*
|
||||
* NOTE: This is a special hack to allow some special code in getfilename()
|
||||
* to get the value of a symbol. It should NOT be used in the
|
||||
* general op code generation / calc code parsing case.
|
||||
*/
|
||||
static int
|
||||
getsymvalue(char *name, VALUE *v_p)
|
||||
{
|
||||
GLOBAL *g_ret; /* global return from findglobal() */
|
||||
|
||||
/* firewall */
|
||||
if (name == NULL || v_p == NULL) {
|
||||
return SYM_UNDEFINED;
|
||||
}
|
||||
|
||||
/* look for a global */
|
||||
g_ret = findglobal(name);
|
||||
if (g_ret != NULL) {
|
||||
*v_p = g_ret->g_value;
|
||||
return SYM_GLOBAL;
|
||||
}
|
||||
|
||||
/* no such symbol */
|
||||
return SYM_UNDEFINED;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Read in a filename for a read or write command.
|
||||
* Both quoted and unquoted filenames are handled here.
|
||||
@@ -2236,30 +2275,78 @@ getidexpr(BOOL okmat, int autodef)
|
||||
*
|
||||
* given:
|
||||
* name filename to read
|
||||
* namelen length of filename buffer including NUL byte
|
||||
* once non-NULL => set to TRUE of -once read
|
||||
*/
|
||||
static int
|
||||
getfilename(char *name, BOOL *once)
|
||||
getfilename(char *name, size_t namelen, BOOL *once)
|
||||
{
|
||||
STRING *s;
|
||||
char *symstr; /* symbol string */
|
||||
VALUE val; /* value of the symbol */
|
||||
int i;
|
||||
|
||||
(void) tokenmode(TM_NEWLINES | TM_ALLSYMS);
|
||||
for (i = 2; i > 0; i--) {
|
||||
switch (gettoken()) {
|
||||
case T_STRING:
|
||||
|
||||
/* use the value of the literal string */
|
||||
s = findstring(tokenstring());
|
||||
strcpy(name, s->s_str);
|
||||
strncpy(name, s->s_str, namelen-1);
|
||||
name[namelen-1] = '\0';
|
||||
sfree(s);
|
||||
break;
|
||||
|
||||
case T_SYMBOL:
|
||||
strcpy(name, tokensymbol());
|
||||
|
||||
/* get the symbol name */
|
||||
symstr = tokensymbol();
|
||||
|
||||
/*
|
||||
* special hack - symbols starting with $ are
|
||||
* treated as a gloabl variable
|
||||
* instead of a literal string.
|
||||
*/
|
||||
if (symstr[0] == '$') {
|
||||
++symstr;
|
||||
if (getsymvalue(symstr, &val)) {
|
||||
if (val.v_type == V_STR) {
|
||||
/* use symbol VALUE string */
|
||||
symstr = val.v_str->s_str;
|
||||
if (symstr == NULL) {
|
||||
math_error("string value pointer is NULL!!");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
} else {
|
||||
math_error("a filename variable must be a string");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
} else {
|
||||
math_error("no such global variable");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
}
|
||||
|
||||
/* return symbol name or value of global var string */
|
||||
strncpy(name, symstr, namelen-1);
|
||||
name[namelen-1] = '\0';
|
||||
break;
|
||||
|
||||
case T_NEWLINE:
|
||||
|
||||
/* found newline */
|
||||
rescantoken();
|
||||
return 1;
|
||||
|
||||
default:
|
||||
|
||||
/* found something unexpected */
|
||||
rescantoken();
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* deal with -once */
|
||||
if (i == 2 && once != NULL) {
|
||||
if ((*once = !strcmp(name, "-once")))
|
||||
continue;
|
||||
|
70
comfunc.c
70
comfunc.c
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.4 $
|
||||
* @(#) $Id: comfunc.c,v 29.4 2005/10/18 10:43:49 chongo Exp $
|
||||
* @(#) $Revision: 29.6 $
|
||||
* @(#) $Id: comfunc.c,v 29.6 2006/05/20 08:43:55 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/comfunc.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:13
|
||||
@@ -33,6 +33,16 @@
|
||||
#include "config.h"
|
||||
#include "cmath.h"
|
||||
|
||||
/*
|
||||
* cache the natural logarithm of 10
|
||||
*/
|
||||
static COMPLEX *cln_10 = NULL;
|
||||
static NUMBER *cln_10_epsilon = NULL;
|
||||
static NUMBER _q10_ = { { _tenval_, 1, 0 }, { _oneval_, 1, 0 }, 1, NULL };
|
||||
static NUMBER _q0_ = { { _zeroval_, 1, 0 }, { _oneval_, 1, 0 }, 1, NULL };
|
||||
COMPLEX _cten_ = { &_q10_, &_q0_, 1 };
|
||||
|
||||
|
||||
/*
|
||||
* Compute the result of raising a complex number to an integer power.
|
||||
*
|
||||
@@ -491,7 +501,7 @@ c_ln(COMPLEX *c, NUMBER *epsilon)
|
||||
NUMBER *a2b2, *tmp1, *tmp2, *epsilon1;
|
||||
|
||||
if (ciszero(c)) {
|
||||
math_error("Logarithm of zero");
|
||||
math_error("logarithm of zero");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
if (cisone(c))
|
||||
@@ -519,6 +529,60 @@ c_ln(COMPLEX *c, NUMBER *epsilon)
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate base 10 logarithm by:
|
||||
*
|
||||
* log(c) = ln(c) / ln(10)
|
||||
*/
|
||||
COMPLEX *
|
||||
c_log(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
int need_new_cln_10 = TRUE; /* FALSE => use cached cln_10 value */
|
||||
COMPLEX *ln_c; /* ln(x) */
|
||||
COMPLEX *ret; /* base 10 logarithm of x */
|
||||
|
||||
/*
|
||||
* compute ln(c) first
|
||||
*/
|
||||
ln_c = c_ln(c, epsilon);
|
||||
/* log(1) == 0 */
|
||||
if (ciszero(ln_c)) {
|
||||
return ln_c;
|
||||
}
|
||||
|
||||
/*
|
||||
* save epsilon for ln(10) if needed
|
||||
*/
|
||||
if (cln_10_epsilon == NULL) {
|
||||
/* first time call */
|
||||
cln_10_epsilon = qcopy(epsilon);
|
||||
} else if (qcmp(cln_10_epsilon, epsilon) == FALSE) {
|
||||
/* replaced cacheed value with epsilon arg */
|
||||
qfree(cln_10_epsilon);
|
||||
cln_10_epsilon = qcopy(epsilon);
|
||||
} else if (cln_10 != NULL) {
|
||||
/* the previously computed ln(2) is OK to use */
|
||||
need_new_cln_10 = FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* compute ln(10) if needed
|
||||
*/
|
||||
if (need_new_cln_10 == TRUE) {
|
||||
if (cln_10 != NULL) {
|
||||
comfree(cln_10);
|
||||
}
|
||||
cln_10 = c_ln(&_cten_, cln_10_epsilon);
|
||||
}
|
||||
|
||||
/*
|
||||
* return ln(c) / ln(10)
|
||||
*/
|
||||
ret = c_div(ln_c, cln_10);
|
||||
comfree(ln_c);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Calculate the complex cosine within the specified accuracy.
|
||||
|
10
config.c
10
config.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* config - configuration routines
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.15 $
|
||||
* @(#) $Id: config.c,v 29.15 2005/12/12 06:45:41 chongo Exp $
|
||||
* @(#) $Revision: 29.17 $
|
||||
* @(#) $Id: config.c,v 29.17 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
|
||||
*
|
||||
* Under source code control: 1991/07/20 00:21:56
|
||||
@@ -722,7 +722,7 @@ setconfig(int type, VALUE *vp)
|
||||
math_error("Cannot duplicate new prompt");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
strcpy(p, vp->v_str->s_str);
|
||||
strncpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||
free(conf->prompt1);
|
||||
conf->prompt1 = p;
|
||||
break;
|
||||
@@ -737,7 +737,7 @@ setconfig(int type, VALUE *vp)
|
||||
math_error("Cannot duplicate new more prompt");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
strcpy(p, vp->v_str->s_str);
|
||||
strncpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||
free(conf->prompt2);
|
||||
conf->prompt2 = p;
|
||||
break;
|
||||
|
8
custom.c
8
custom.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* custom - interface for custom software and hardware interfaces
|
||||
*
|
||||
* 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
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.4 $
|
||||
* @(#) $Id: custom.c,v 29.4 2004/02/25 23:54:40 chongo Exp $
|
||||
* @(#) $Revision: 29.6 $
|
||||
* @(#) $Id: custom.c,v 29.6 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/custom.c,v $
|
||||
*
|
||||
* Under source code control: 1997/03/03 04:53:08
|
||||
@@ -189,7 +189,7 @@ customhelp(char *name)
|
||||
/*
|
||||
* form the custom help name
|
||||
*/
|
||||
customname = (char *)malloc(sizeof("custhelp")+strlen(name)+1);
|
||||
customname = (char *)malloc(sizeof("custhelp")+1+strlen(name)+1);
|
||||
if (customname == NULL) {
|
||||
math_error("bad malloc of customname");
|
||||
/*NOTREACHED*/
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_argv - a custom function display info about its args
|
||||
*
|
||||
* Copyright (C) 1999-2004 Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 Landon Curt Noll
|
||||
*
|
||||
* 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
|
||||
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.4 $
|
||||
* @(#) $Id: c_argv.c,v 29.4 2004/02/23 14:04:01 chongo Exp $
|
||||
* @(#) $Revision: 29.6 $
|
||||
* @(#) $Id: c_argv.c,v 29.6 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_argv.c,v $
|
||||
*
|
||||
* Under source code control: 1997/03/09 20:27:37
|
||||
@@ -152,9 +152,9 @@ c_argv(char UNUSED *name, int count, VALUE **vals)
|
||||
/* getsize error */
|
||||
printf("\tsize=unknown");
|
||||
}
|
||||
printf("\tsizeof=%ld\n", lsizeof(vals[i]));
|
||||
printf("\tsizeof=%u\n", lsizeof(vals[i]));
|
||||
} else {
|
||||
printf("\tsize=%ld\tsizeof=%ld\n",
|
||||
printf("\tsize=%ld\tsizeof=%u\n",
|
||||
elm_count(vals[i]), lsizeof(vals[i]));
|
||||
}
|
||||
}
|
||||
|
331
file.c
331
file.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* file - file I/O routines callable by users
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.9 $
|
||||
* @(#) $Id: file.c,v 29.9 2004/02/23 14:04:01 chongo Exp $
|
||||
* @(#) $Revision: 29.14 $
|
||||
* @(#) $Id: file.c,v 29.14 2006/05/20 08:43:55 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.c,v $
|
||||
*
|
||||
* Under source code control: 1991/07/20 00:21:56
|
||||
@@ -68,11 +68,11 @@ extern FILE *f_open(char *name, char *mode);
|
||||
*/
|
||||
static FILEIO files[MAXFILES] = {
|
||||
{FILEID_STDIN, NULL, (dev_t)0, (ino_t)0,
|
||||
"(stdin)", TRUE, FALSE, 'r', "r"},
|
||||
"(stdin)", TRUE, FALSE, FALSE, FALSE, 'r', "r"},
|
||||
{FILEID_STDOUT, NULL, (dev_t)0, (ino_t)0,
|
||||
"(stdout)", FALSE, TRUE, 'w', "w"},
|
||||
"(stdout)", FALSE, TRUE, FALSE, FALSE, 'w', "w"},
|
||||
{FILEID_STDERR, NULL, (dev_t)0, (ino_t)0,
|
||||
"(stderr)", FALSE, TRUE, 'w', "w"}
|
||||
"(stderr)", FALSE, TRUE, FALSE, FALSE, 'w', "w"}
|
||||
};
|
||||
|
||||
|
||||
@@ -188,14 +188,141 @@ file_init(void)
|
||||
|
||||
|
||||
/*
|
||||
* Open the specified file name for reading or writing; mode is assumed
|
||||
* to be one of "r", "w", "a", "r+", "w+", "a+".
|
||||
* Returns a file id which can be used to do I/O to the file, or else
|
||||
* FILEID_NONE if the open failed.
|
||||
* init_fileio - initialize a FILEIO structure
|
||||
*
|
||||
* This function initializes a calc FILEIO structure. It will optionally
|
||||
* malloc the filename string if given an non-NULL associated filename.
|
||||
* It will canonicalize the file open mode string.
|
||||
*
|
||||
* given:
|
||||
* fiop pointer to FILEIO structure to initialize
|
||||
* name associated filename (NULL => caller will setup filename)
|
||||
* mode open mode (one of {r,w,a}{,b}{,+})
|
||||
* sbufp pointer to stat of open file
|
||||
* id calc file ID
|
||||
* fp open file stream
|
||||
*/
|
||||
static void
|
||||
init_fileio(FILEIO *fiop, char *name, char *mode,
|
||||
struct stat *sbufp, FILEID id, FILE *fp)
|
||||
{
|
||||
char modestr[sizeof(fiop->mode)]; /* mode [rwa]b?\+? */
|
||||
size_t namelen; /* length of name */
|
||||
|
||||
/* allocate filename if requested */
|
||||
if (name != NULL) {
|
||||
namelen = strlen(name);
|
||||
fiop->name = (char *)malloc(namelen + 1);
|
||||
if (fiop->name == NULL) {
|
||||
math_error("No memory for filename");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
}
|
||||
|
||||
/* initialize FILEIO structure */
|
||||
if (name != NULL) {
|
||||
strncpy(fiop->name, name, namelen+1);
|
||||
}
|
||||
fiop->id = id;
|
||||
fiop->fp = fp;
|
||||
fiop->dev = sbufp->st_dev;
|
||||
fiop->inode = sbufp->st_ino;
|
||||
fiop->reading = FALSE;
|
||||
fiop->writing = FALSE;
|
||||
fiop->appending = FALSE;
|
||||
fiop->binary = FALSE;
|
||||
fiop->action = 0;
|
||||
fiop->mode[0] = '\0';
|
||||
|
||||
/*
|
||||
* determine file open mode
|
||||
*
|
||||
* While a leading 'r' is for reading and a leading 'w' is
|
||||
* for writing, the presense of a '+' in the string means
|
||||
* both reading and writing. A leading 'a' means append
|
||||
* which is writing.
|
||||
*/
|
||||
/* canonicalize read modes */
|
||||
if (mode[0] == 'r') {
|
||||
|
||||
/* note read mode */
|
||||
strcpy(modestr, "r");
|
||||
fiop->reading = TRUE;
|
||||
|
||||
/* note binary mode even though mode is not used / ignored */
|
||||
if (strchr(mode, 'b') != NULL) {
|
||||
strcat(modestr, "b");
|
||||
}
|
||||
|
||||
/* note if reading and writing */
|
||||
if (strchr(mode, '+') != NULL) {
|
||||
fiop->writing = TRUE;
|
||||
strcat(modestr, "+");
|
||||
}
|
||||
|
||||
/* canonicalize write modes */
|
||||
} else if (mode[0] == 'w') {
|
||||
|
||||
/* note write mode */
|
||||
strcpy(modestr, "w");
|
||||
fiop->writing = TRUE;
|
||||
|
||||
/* note binary mode even though mode is not used / ignored */
|
||||
if (strchr(mode, 'b') != NULL) {
|
||||
strcat(modestr, "b");
|
||||
}
|
||||
|
||||
/* note if reading and writing */
|
||||
if (strchr(mode, '+') != NULL) {
|
||||
fiop->reading = TRUE;
|
||||
strcat(modestr, "+");
|
||||
}
|
||||
|
||||
/* canonicalize append modes */
|
||||
} else if (mode[0] == 'a') {
|
||||
|
||||
/* note append mode */
|
||||
strcpy(modestr, "a");
|
||||
fiop->writing = TRUE;
|
||||
fiop->appending = TRUE;
|
||||
|
||||
/* note binary mode even though mode is not used / ignored */
|
||||
if (strchr(mode, 'b') != NULL) {
|
||||
strcat(modestr, "b");
|
||||
}
|
||||
|
||||
/* note if reading and writing */
|
||||
if (strchr(mode, '+') != NULL) {
|
||||
fiop->reading = TRUE;
|
||||
strcat(modestr, "+");
|
||||
}
|
||||
|
||||
/* canonicalize no I/O modes */
|
||||
} else {
|
||||
modestr[0] = '\0';
|
||||
}
|
||||
modestr[sizeof(modestr)-1] = '\0'; /* firewall */
|
||||
|
||||
/* record canonical open mode string */
|
||||
strncpy(fiop->mode, modestr, sizeof(fiop->mode));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* openid - open the specified file name for reading or writing
|
||||
*
|
||||
* given:
|
||||
* name file name
|
||||
* mode open mode
|
||||
* mode open mode (one of {r,w,a}{,b}{,+})
|
||||
*
|
||||
* returns:
|
||||
* >=3 FILEID which can be used to do I/O to the file
|
||||
* <0 if the open failed
|
||||
*
|
||||
* NOTE: This function will not return 0, 1 or 2 since they are
|
||||
* reserved for stdin, stdout, stderr. In fact, it must not
|
||||
* return 0, 1, or 2 because it will confuse those who call
|
||||
* the opensearchfiile() function
|
||||
*/
|
||||
FILEID
|
||||
openid(char *name, char *mode)
|
||||
@@ -206,9 +333,9 @@ openid(char *name, char *mode)
|
||||
struct stat sbuf; /* file status */
|
||||
int i;
|
||||
|
||||
/* find the next open slot in the files array */
|
||||
if (idnum >= MAXFILES)
|
||||
return -E_FOPEN3;
|
||||
|
||||
return -E_MANYOPEN;
|
||||
fiop = &files[3];
|
||||
for (i = 3; i < MAXFILES; fiop++,i++) {
|
||||
if (fiop->name == NULL)
|
||||
@@ -217,8 +344,8 @@ openid(char *name, char *mode)
|
||||
if (i == MAXFILES)
|
||||
math_error("This should not happen in openid()!!!");
|
||||
|
||||
/* open the file */
|
||||
fp = f_open(name, mode);
|
||||
|
||||
if (fp == NULL) {
|
||||
return FILEID_NONE;
|
||||
}
|
||||
@@ -227,50 +354,88 @@ openid(char *name, char *mode)
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
fiop->name = (char *)malloc(strlen(name) + 1);
|
||||
if (fiop->name == NULL) {
|
||||
math_error("No memory for filename");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
/* get a new FILEID */
|
||||
id = ++lastid;
|
||||
ioindex[idnum++] = i;
|
||||
|
||||
strcpy(fiop->name, name);
|
||||
fiop->id = id;
|
||||
fiop->fp = fp;
|
||||
fiop->dev = sbuf.st_dev;
|
||||
fiop->inode = sbuf.st_ino;
|
||||
fiop->reading = TRUE;
|
||||
fiop->writing = TRUE;
|
||||
fiop->action = 0;
|
||||
/* initialize FILEIO structure */
|
||||
init_fileio(fiop, name, mode, &sbuf, id, fp);
|
||||
|
||||
/* return calc open file ID */
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* determine file open mode
|
||||
* openpathid - open the specified abse filename, or relative filename along a search path
|
||||
*
|
||||
* While a leading 'r' is for reading and a leading 'w' is
|
||||
* for writing, the presense of a '+' in the string means
|
||||
* both reading and writing. A leading 'a' means append
|
||||
* which is writing.
|
||||
* given:
|
||||
* name file name
|
||||
* mode open mode (one of {r,w,a}{,b}{,+})
|
||||
* pathlist list of colon separated paths (or NULL)
|
||||
*
|
||||
* returns:
|
||||
* >=3 FILEID which can be used to do I/O to the file
|
||||
* <0 if the open failed
|
||||
*
|
||||
* NOTE: This function will not return 0, 1 or 2 since they are
|
||||
* reserved for stdin, stdout, stderr. In fact, it must not
|
||||
* return 0, 1, or 2 because it will confuse those who call
|
||||
* the opensearchfiile() function
|
||||
*/
|
||||
if (mode[0] == 'r') {
|
||||
fiop->reading = TRUE;
|
||||
if (strchr(mode, '+') == NULL) {
|
||||
fiop->writing = FALSE;
|
||||
} else {
|
||||
fiop->writing = TRUE;
|
||||
FILEID
|
||||
openpathid(char *name, char *mode, char *pathlist)
|
||||
{
|
||||
FILEIO *fiop; /* file structure */
|
||||
FILEID id; /* new file id */
|
||||
FILE *fp;
|
||||
struct stat sbuf; /* file status */
|
||||
char *openpath; /* malloc copy of path that was opened */
|
||||
int i;
|
||||
|
||||
/* find the next open slot in the files array */
|
||||
if (idnum >= MAXFILES)
|
||||
return -E_MANYOPEN;
|
||||
fiop = &files[3];
|
||||
for (i = 3; i < MAXFILES; fiop++,i++) {
|
||||
if (fiop->name == NULL)
|
||||
break;
|
||||
}
|
||||
} else if (mode[0] == 'w' || mode[0] == 'a') {
|
||||
fiop->writing = TRUE;
|
||||
if (strchr(mode, '+') == NULL) {
|
||||
fiop->reading = FALSE;
|
||||
} else {
|
||||
fiop->reading = TRUE;
|
||||
if (i == MAXFILES)
|
||||
math_error("This should not happen in openpathid()!!!");
|
||||
|
||||
/* open a file - searching along a path */
|
||||
openpath = NULL;
|
||||
fp = f_pathopen(name, mode, pathlist, &openpath);
|
||||
if (fp == NULL) {
|
||||
if (openpath != NULL) {
|
||||
/* should not happen, but just in case */
|
||||
free(openpath);
|
||||
}
|
||||
} else {
|
||||
fiop->reading = FALSE;
|
||||
fiop->writing = FALSE;
|
||||
return FILEID_NONE;
|
||||
}
|
||||
strcpy(fiop->mode, mode);
|
||||
if (fstat(fileno(fp), &sbuf) < 0) {
|
||||
if (openpath != NULL) {
|
||||
free(openpath);
|
||||
}
|
||||
math_error("bad fstat");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
if (openpath == NULL) {
|
||||
fclose(fp);
|
||||
math_error("bad openpath");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
/* get a new FILEID */
|
||||
id = ++lastid;
|
||||
ioindex[idnum++] = i;
|
||||
|
||||
/* initialize FILEIO structure */
|
||||
init_fileio(fiop, NULL, mode, &sbuf, id, fp);
|
||||
fiop->name = openpath; /* already malloced by f_pathopen */
|
||||
|
||||
/* return calc open file ID */
|
||||
return id;
|
||||
}
|
||||
|
||||
@@ -281,14 +446,18 @@ openid(char *name, char *mode)
|
||||
* given:
|
||||
* id FILEID to reopen
|
||||
* mode new mode to open as
|
||||
* mode new mode to open as (one of "r", "w", "a", "r+", "w+", "a+")
|
||||
* name name of new file
|
||||
*
|
||||
* returns:
|
||||
* FILEID which can be used to do I/O to the file
|
||||
* <0 if the open failed
|
||||
*/
|
||||
FILEID
|
||||
reopenid(FILEID id, char *mode, char *name)
|
||||
{
|
||||
FILEIO *fiop; /* file structure */
|
||||
FILE *fp;
|
||||
char *newname;
|
||||
struct stat sbuf;
|
||||
int i;
|
||||
|
||||
@@ -299,8 +468,8 @@ reopenid(FILEID id, char *mode, char *name)
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
/* reopen the file */
|
||||
fiop = NULL;
|
||||
|
||||
for (i = 3; i < idnum; i++) {
|
||||
fiop = &files[ioindex[i]];
|
||||
if (fiop->id == id)
|
||||
@@ -344,57 +513,23 @@ reopenid(FILEID id, char *mode, char *name)
|
||||
return FILEID_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
if (fstat(fileno(fp), &sbuf) < 0) {
|
||||
math_error("bad fstat");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
if (name) {
|
||||
newname = (char *)malloc(strlen(name) + 1);
|
||||
if (newname == NULL) {
|
||||
math_error("No memory for filename");
|
||||
/*NOTREACHED*/
|
||||
/* initialize FILEIO structure */
|
||||
if (name == NULL) {
|
||||
if (fiop->name == NULL) {
|
||||
math_error("old and new reopen filenames are NULL");
|
||||
}
|
||||
if (fiop->name)
|
||||
} else if (fiop->name != NULL) {
|
||||
free(fiop->name);
|
||||
strcpy(newname, name);
|
||||
fiop->name = newname;
|
||||
fiop->name = NULL;
|
||||
}
|
||||
fiop->fp = fp;
|
||||
fiop->dev = sbuf.st_dev;
|
||||
fiop->inode = sbuf.st_ino;
|
||||
fiop->reading = TRUE;
|
||||
fiop->writing = TRUE;
|
||||
fiop->action = 0;
|
||||
init_fileio(fiop, name, mode, &sbuf, id, fp);
|
||||
|
||||
/*
|
||||
* determine file open mode
|
||||
*
|
||||
* While a leading 'r' is for reading and a leading 'w' is
|
||||
* for writing, the presense of a '+' in the string means
|
||||
* both reading and writing. A leading 'a' means append
|
||||
* which is writing.
|
||||
*/
|
||||
if (mode[0] == 'r') {
|
||||
fiop->reading = TRUE;
|
||||
if (strchr(mode, '+') == NULL) {
|
||||
fiop->writing = FALSE;
|
||||
} else {
|
||||
fiop->writing = TRUE;
|
||||
}
|
||||
} else if (mode[0] == 'w' || mode[0] == 'a') {
|
||||
fiop->writing = TRUE;
|
||||
if (strchr(mode, '+') == NULL) {
|
||||
fiop->reading = FALSE;
|
||||
} else {
|
||||
fiop->reading = TRUE;
|
||||
}
|
||||
} else {
|
||||
fiop->reading = FALSE;
|
||||
fiop->writing = FALSE;
|
||||
}
|
||||
strcpy(fiop->mode, mode);
|
||||
/* return calc open file ID */
|
||||
return id;
|
||||
}
|
||||
|
||||
@@ -810,7 +945,7 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
|
||||
VALUE *vp;
|
||||
char *str;
|
||||
int ch;
|
||||
long len;
|
||||
size_t len;
|
||||
int oldmode, newmode;
|
||||
long olddigits, newdigits;
|
||||
long width, precision;
|
||||
@@ -1014,13 +1149,13 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
|
||||
if (strchr(str, '\n'))
|
||||
width = 0;
|
||||
len = strlen(str);
|
||||
while (!didneg && (width > len)) {
|
||||
while (!didneg && ((size_t)width > len)) {
|
||||
width--;
|
||||
math_chr(' ');
|
||||
}
|
||||
math_str(str);
|
||||
free(str);
|
||||
while (didneg && (width > len)) {
|
||||
while (didneg && ((size_t)width > len)) {
|
||||
width--;
|
||||
math_chr(' ');
|
||||
}
|
||||
@@ -1828,7 +1963,7 @@ showfiles(void)
|
||||
FILE *fp;
|
||||
struct stat sbuf;
|
||||
ino_t inodes[MAXFILES];
|
||||
long sizes[MAXFILES];
|
||||
off_t sizes[MAXFILES];
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < idnum; i++) {
|
||||
@@ -1840,7 +1975,7 @@ showfiles(void)
|
||||
sizes[i] = -1;
|
||||
} else {
|
||||
inodes[i] = sbuf.st_ino;
|
||||
sizes[i] = (long) sbuf.st_size;
|
||||
sizes[i] = sbuf.st_size;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < idnum; i++) {
|
||||
@@ -2040,7 +2175,7 @@ fscanfile(FILE *fp, char *fmt, int count, VALUE **vals)
|
||||
BOOL skip; /* True if string to be skipped rather than read */
|
||||
int width;
|
||||
VALUE *var; /* lvalue to be assigned to */
|
||||
short subtype; /* for var->v_subtype */
|
||||
unsigned short subtype; /* for var->v_subtype */
|
||||
FILEPOS cur; /* current location */
|
||||
|
||||
if (feof(fp))
|
||||
|
21
file.h
21
file.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* file - file I/O routines callable by users
|
||||
*
|
||||
* Copyright (C) 1999 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.5 $
|
||||
* @(#) $Id: file.h,v 29.5 2001/06/08 21:00:58 chongo Exp $
|
||||
* @(#) $Revision: 29.8 $
|
||||
* @(#) $Id: file.h,v 29.8 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.h,v $
|
||||
*
|
||||
* Under source code control: 1996/05/24 05:55:58
|
||||
@@ -53,8 +53,10 @@ typedef struct {
|
||||
char *name; /* file name */
|
||||
BOOL reading; /* TRUE if opened for reading */
|
||||
BOOL writing; /* TRUE if opened for writing */
|
||||
BOOL appending; /* TRUE if also opened for appending */
|
||||
BOOL binary; /* TRUE if binary mode - mode ignored/unused */
|
||||
char action; /* most recent use for 'r', 'w' or 0 */
|
||||
char mode[sizeof("rb+")];/* open mode */
|
||||
char mode[sizeof("rb+")+1];/* open mode */
|
||||
} FILEIO;
|
||||
|
||||
|
||||
@@ -89,11 +91,12 @@ typedef struct {
|
||||
/*
|
||||
* external functions
|
||||
*/
|
||||
extern FILEIO * findid(FILEID id, int writable);
|
||||
extern int fgetposid(FILEID id, FILEPOS *ptr);
|
||||
extern int fsetposid(FILEID id, FILEPOS *ptr);
|
||||
extern int get_open_siz(FILE *fp, ZVALUE *res);
|
||||
extern char* findfname(FILEID);
|
||||
extern DLL FILEIO * findid(FILEID id, int writable);
|
||||
extern DLL int fgetposid(FILEID id, FILEPOS *ptr);
|
||||
extern DLL int fsetposid(FILEID id, FILEPOS *ptr);
|
||||
extern DLL int get_open_siz(FILE *fp, ZVALUE *res);
|
||||
extern DLL char* findfname(FILEID);
|
||||
extern DLL FILE *f_pathopen(char *name, char *mode, char *pathlist, char **openpath);
|
||||
|
||||
|
||||
#endif /* !__FILE_H__ */
|
||||
|
449
func.c
449
func.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* func - built-in functions implemented here
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2006 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.16 $
|
||||
* @(#) $Id: func.c,v 29.16 2005/10/18 10:43:49 chongo Exp $
|
||||
* @(#) $Revision: 29.25 $
|
||||
* @(#) $Id: func.c,v 29.25 2006/05/21 07:28:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/func.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:15
|
||||
@@ -128,8 +128,6 @@ extern int idungetc(FILEID id, int ch);
|
||||
extern LIST* associndices(ASSOC *ap, long index);
|
||||
extern LIST* matindices(MATRIX *mp, long index);
|
||||
|
||||
extern int stoponerror;
|
||||
|
||||
|
||||
/*
|
||||
* malloced environment storage
|
||||
@@ -197,8 +195,8 @@ f_eval(VALUE *vp)
|
||||
FUNC *newfunc;
|
||||
VALUE result;
|
||||
char *str;
|
||||
long num;
|
||||
int temp;
|
||||
size_t num;
|
||||
long temp_stoponerror; /* temp value of stoponerror */
|
||||
|
||||
if (vp->v_type != V_STR)
|
||||
return error_value(E_EVAL2);
|
||||
@@ -212,10 +210,10 @@ f_eval(VALUE *vp)
|
||||
}
|
||||
oldfunc = curfunc;
|
||||
enterfilescope();
|
||||
temp = stoponerror;
|
||||
temp_stoponerror = stoponerror;
|
||||
stoponerror = -1;
|
||||
if (evaluate(TRUE)) {
|
||||
stoponerror = temp;
|
||||
stoponerror = temp_stoponerror;
|
||||
closeinput();
|
||||
exitfilescope();
|
||||
freevalue(stack--);
|
||||
@@ -229,7 +227,7 @@ f_eval(VALUE *vp)
|
||||
free(newfunc);
|
||||
return result;
|
||||
}
|
||||
stoponerror = temp;
|
||||
stoponerror = temp_stoponerror;
|
||||
closeinput();
|
||||
exitfilescope();
|
||||
newfunc = curfunc;
|
||||
@@ -250,7 +248,7 @@ f_prompt(VALUE *vp)
|
||||
VALUE result;
|
||||
char *cp;
|
||||
char *newcp;
|
||||
unsigned int len;
|
||||
size_t len;
|
||||
|
||||
/* initialize VALUE */
|
||||
result.v_type = V_STR;
|
||||
@@ -275,7 +273,7 @@ f_prompt(VALUE *vp)
|
||||
math_error("Cannot allocate string");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
strcpy(newcp, cp);
|
||||
strncpy(newcp, cp, len+1);
|
||||
result.v_str = makestring(newcp);
|
||||
return result;
|
||||
}
|
||||
@@ -332,7 +330,7 @@ f_str(VALUE *vp)
|
||||
|
||||
switch (vp->v_type) {
|
||||
case V_STR:
|
||||
result.v_str = stringcopy(vp->v_str);
|
||||
result.v_str = makenewstring(vp->v_str->s_str);
|
||||
break;
|
||||
case V_NULL:
|
||||
result.v_str = slink(&_nullstring_);
|
||||
@@ -2037,6 +2035,51 @@ f_ln(int count, VALUE **vals)
|
||||
}
|
||||
|
||||
|
||||
static VALUE
|
||||
f_log(int count, VALUE **vals)
|
||||
{
|
||||
VALUE result;
|
||||
COMPLEX ctmp, *c;
|
||||
NUMBER *err;
|
||||
|
||||
/* initialize VALUE */
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
err = conf->epsilon;
|
||||
if (count == 2) {
|
||||
if (vals[1]->v_type != V_NUM)
|
||||
return error_value(E_LOG1);
|
||||
err = vals[1]->v_num;
|
||||
}
|
||||
switch (vals[0]->v_type) {
|
||||
case V_NUM:
|
||||
if (!qisneg(vals[0]->v_num) && !qiszero(vals[0]->v_num)) {
|
||||
result.v_num = qlog(vals[0]->v_num, err);
|
||||
result.v_type = V_NUM;
|
||||
return result;
|
||||
}
|
||||
ctmp.real = vals[0]->v_num;
|
||||
ctmp.imag = qlink(&_qzero_);
|
||||
ctmp.links = 1;
|
||||
c = c_log(&ctmp, err);
|
||||
break;
|
||||
case V_COM:
|
||||
c = c_log(vals[0]->v_com, err);
|
||||
break;
|
||||
default:
|
||||
return error_value(E_LOG2);
|
||||
}
|
||||
result.v_type = V_COM;
|
||||
result.v_com = c;
|
||||
if (cisreal(c)) {
|
||||
result.v_num = qlink(c->real);
|
||||
result.v_type = V_NUM;
|
||||
comfree(c);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static VALUE
|
||||
f_cos(int count, VALUE **vals)
|
||||
{
|
||||
@@ -4001,8 +4044,8 @@ f_strlen(VALUE *vp)
|
||||
static VALUE
|
||||
f_strcmp(VALUE *v1, VALUE *v2)
|
||||
{
|
||||
unsigned char *c1, *c2;
|
||||
VALUE result;
|
||||
FLAG flag;
|
||||
|
||||
/* initialize VALUE */
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
@@ -4010,17 +4053,10 @@ f_strcmp(VALUE *v1, VALUE *v2)
|
||||
if (v1->v_type != V_STR || v2->v_type != V_STR)
|
||||
return error_value(E_STRCMP);
|
||||
|
||||
c1 = (unsigned char *)v1->v_str->s_str;
|
||||
c2 = (unsigned char *)v2->v_str->s_str;
|
||||
flag = stringrel(v1->v_str, v2->v_str);
|
||||
|
||||
result.v_type = V_NUM;
|
||||
for (; *c1 == *c2; ++c1, ++c2) {
|
||||
if (*c1 == '\0') {
|
||||
result.v_num = qlink(&_qzero_);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
result.v_num = (*c1 > *c2) ? qlink(&_qone_) : qlink(&_qnegone_);
|
||||
result.v_num = itoq((long) flag);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -4028,8 +4064,8 @@ f_strcmp(VALUE *v1, VALUE *v2)
|
||||
static VALUE
|
||||
f_strncmp(VALUE *v1, VALUE *v2, VALUE *v3)
|
||||
{
|
||||
unsigned char *c1, *c2;
|
||||
long i;
|
||||
long n1, n2, n;
|
||||
FLAG flag;
|
||||
VALUE result;
|
||||
|
||||
/* initialize VALUE */
|
||||
@@ -4039,18 +4075,21 @@ f_strncmp(VALUE *v1, VALUE *v2, VALUE *v3)
|
||||
v3->v_type != V_NUM || qisneg(v3->v_num) ||
|
||||
qisfrac(v3->v_num) || zge31b(v3->v_num->num))
|
||||
return error_value(E_STRNCMP);
|
||||
i = qtoi(v3->v_num);
|
||||
for (c1 = (unsigned char *)v1->v_str->s_str,
|
||||
c2 = (unsigned char *)v2->v_str->s_str;
|
||||
i > 0 && *c1 == *c2; ++c1, ++c2, --i) {
|
||||
if (*c1 == '\0')
|
||||
break;
|
||||
}
|
||||
n1 = v1->v_str->s_len;
|
||||
n2 = v2->v_str->s_len;
|
||||
n = qtoi(v3->v_num);
|
||||
if (n < n1)
|
||||
v1->v_str->s_len = n;
|
||||
if (n < n2)
|
||||
v2->v_str->s_len = n;
|
||||
|
||||
flag = stringrel(v1->v_str, v2->v_str);
|
||||
|
||||
v1->v_str->s_len = n1;
|
||||
v2->v_str->s_len = n2;
|
||||
|
||||
result.v_type = V_NUM;
|
||||
if (i == 0 || *c1 == *c2)
|
||||
result.v_num = qlink(&_qzero_);
|
||||
else
|
||||
result.v_num = (*c1>*c2) ? qlink(&_qone_) : qlink(&_qnegone_);
|
||||
result.v_num = itoq((long) flag);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -4141,7 +4180,7 @@ static VALUE
|
||||
f_substr(VALUE *v1, VALUE *v2, VALUE *v3)
|
||||
{
|
||||
NUMBER *q1, *q2;
|
||||
long i1, i2, len;
|
||||
size_t start, len;
|
||||
char *cp;
|
||||
char *ccp;
|
||||
VALUE result;
|
||||
@@ -4157,33 +4196,32 @@ f_substr(VALUE *v1, VALUE *v2, VALUE *v3)
|
||||
q2 = v3->v_num;
|
||||
if (qisfrac(q1) || qisneg(q1) || qisfrac(q2) || qisneg(q2))
|
||||
return error_value(E_SUBSTR2);
|
||||
i1 = qtoi(q1);
|
||||
i2 = qtoi(q2);
|
||||
cp = v1->v_str->s_str;
|
||||
len = (long)strlen(cp);
|
||||
start = qtoi(q1);
|
||||
len = qtoi(q2);
|
||||
if (start > 0)
|
||||
start--;
|
||||
result.v_type = V_STR;
|
||||
if (i1 > 0)
|
||||
i1--;
|
||||
if (i1 >= len) { /* indexing off of end */
|
||||
if (start >= v1->v_str->s_len || len == 0) {
|
||||
result.v_str = slink(&_nullstring_);
|
||||
return result;
|
||||
}
|
||||
cp += i1;
|
||||
len -= i1;
|
||||
if (len > i2)
|
||||
len = i2;
|
||||
if (len > v1->v_str->s_len - start)
|
||||
len = v1->v_str->s_len - start;
|
||||
cp = v1->v_str->s_str + start;
|
||||
ccp = (char *) malloc(len + 1);
|
||||
if (ccp == NULL) {
|
||||
math_error("No memory for substr");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
strncpy(ccp, cp, len);
|
||||
ccp[len] = '\0';
|
||||
result.v_str = makestring(ccp);
|
||||
result.v_str = stralloc();
|
||||
result.v_str->s_len = len;
|
||||
result.v_str->s_str = ccp;
|
||||
while (len-- > 0)
|
||||
*ccp++ = *cp++;
|
||||
*ccp = '\0';
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static VALUE
|
||||
f_char(VALUE *vp)
|
||||
{
|
||||
@@ -4245,8 +4283,9 @@ f_ord(VALUE *vp)
|
||||
static VALUE
|
||||
f_protect(int count, VALUE **vals)
|
||||
{
|
||||
int i;
|
||||
VALUE *v1, *v2;
|
||||
int i, depth;
|
||||
VALUE *v1, *v2, *v3;
|
||||
|
||||
VALUE result;
|
||||
BOOL have_nblock;
|
||||
|
||||
@@ -4272,22 +4311,20 @@ f_protect(int count, VALUE **vals)
|
||||
v2 = vals[1];
|
||||
if (v2->v_type == V_ADDR)
|
||||
v2 = v2->v_addr;
|
||||
if (v2->v_type != V_NUM || qisfrac(v2->v_num))
|
||||
if (v2->v_type != V_NUM||qisfrac(v2->v_num)||zge16b(v2->v_num->num))
|
||||
return error_value(E_PROTECT2);
|
||||
if (qisneg(v2->v_num) || zge31b(v2->v_num->num))
|
||||
return error_value(E_PROTECT3);
|
||||
i = qtoi(v2->v_num);
|
||||
if (i > MAXPROTECT)
|
||||
depth = 0;
|
||||
if (count > 2) {
|
||||
v3 = vals[2];
|
||||
if (v3->v_type == V_ADDR)
|
||||
v3 = v3->v_addr;
|
||||
if (v3->v_type != V_NUM || qisfrac(v3->v_num) ||
|
||||
qisneg(v3->v_num) || zge31b(v3->v_num->num))
|
||||
return error_value(E_PROTECT3);
|
||||
if (have_nblock) {
|
||||
v1->v_nblock->subtype |= i;
|
||||
return result;
|
||||
depth = qtoi(v3->v_num);
|
||||
}
|
||||
if (i & V_PROTECTALL) {
|
||||
protectall(v1, i);
|
||||
return result;
|
||||
}
|
||||
v1->v_subtype |= i;
|
||||
protecttodepth(v1, i, depth);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -4786,10 +4823,9 @@ f_listinsert(int count, VALUE **vals)
|
||||
v1 = *vals++;
|
||||
if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST))
|
||||
return error_value(E_INSERT1);
|
||||
if (v1->v_addr->v_subtype & V_NOREALLOC) {
|
||||
math_error("No-relocate list for insert");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
if (v1->v_addr->v_subtype & V_NOREALLOC)
|
||||
return error_value(E_LIST1);
|
||||
|
||||
v2 = *vals++;
|
||||
if (v2->v_type == V_ADDR)
|
||||
v2 = v2->v_addr;
|
||||
@@ -4820,10 +4856,9 @@ f_listpush(int count, VALUE **vals)
|
||||
v1 = *vals++;
|
||||
if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST))
|
||||
return error_value(E_PUSH);
|
||||
if (v1->v_addr->v_subtype & V_NOREALLOC) {
|
||||
math_error("No-relocate list for push");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
if (v1->v_addr->v_subtype & V_NOREALLOC)
|
||||
return error_value(E_LIST3);
|
||||
|
||||
while (--count > 0) {
|
||||
v2 = *vals++;
|
||||
if (v2->v_type == V_ADDR)
|
||||
@@ -4847,10 +4882,9 @@ f_listappend(int count, VALUE **vals)
|
||||
v1 = *vals++;
|
||||
if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST))
|
||||
return error_value(E_APPEND);
|
||||
if (v1->v_addr->v_subtype & V_NOREALLOC) {
|
||||
math_error("No-relocate list for append");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
if (v1->v_addr->v_subtype & V_NOREALLOC)
|
||||
return error_value(E_LIST4);
|
||||
|
||||
while (--count > 0) {
|
||||
v2 = *vals++;
|
||||
if (v2->v_type == V_ADDR)
|
||||
@@ -4872,10 +4906,9 @@ f_listdelete(VALUE *v1, VALUE *v2)
|
||||
|
||||
if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST))
|
||||
return error_value(E_DELETE1);
|
||||
if (v1->v_addr->v_subtype & V_NOREALLOC) {
|
||||
math_error("No-relocate list for delete");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
if (v1->v_addr->v_subtype & V_NOREALLOC)
|
||||
return error_value(E_LIST2);
|
||||
|
||||
if (v2->v_type == V_ADDR)
|
||||
v2 = v2->v_addr;
|
||||
if ((v2->v_type != V_NUM) || qisfrac(v2->v_num))
|
||||
@@ -4890,15 +4923,12 @@ f_listpop(VALUE *vp)
|
||||
{
|
||||
VALUE result;
|
||||
|
||||
/* initialize VALUE */
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
if ((vp->v_type != V_ADDR) || (vp->v_addr->v_type != V_LIST))
|
||||
return error_value(E_POP);
|
||||
if (vp->v_addr->v_subtype & V_NOREALLOC) {
|
||||
math_error("No-relocate list for pop");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
if (vp->v_addr->v_subtype & V_NOREALLOC)
|
||||
return error_value(E_LIST5);
|
||||
|
||||
removelistfirst(vp->v_addr->v_list, &result);
|
||||
return result;
|
||||
}
|
||||
@@ -4909,15 +4939,12 @@ f_listremove(VALUE *vp)
|
||||
{
|
||||
VALUE result;
|
||||
|
||||
/* initialize VALUE */
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
if ((vp->v_type != V_ADDR) || (vp->v_addr->v_type != V_LIST))
|
||||
return error_value(E_REMOVE);
|
||||
if (vp->v_addr->v_subtype & V_NOREALLOC) {
|
||||
math_error("No-relocate list for remove");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
if (vp->v_addr->v_subtype & V_NOREALLOC)
|
||||
return error_value(E_LIST6);
|
||||
|
||||
removelistlast(vp->v_addr->v_list, &result);
|
||||
return result;
|
||||
}
|
||||
@@ -4957,23 +4984,16 @@ f_time(void)
|
||||
static VALUE
|
||||
f_ctime(void)
|
||||
{
|
||||
time_t systime;
|
||||
char *str;
|
||||
VALUE res;
|
||||
time_t now; /* the current time */
|
||||
|
||||
/* initialize VALUE */
|
||||
res.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
str = (char *) malloc(26);
|
||||
if (str == NULL) {
|
||||
math_error("No memory for ctime()");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
systime = time(NULL);
|
||||
strcpy(str, ctime(&systime));
|
||||
str[24] = '\0';
|
||||
res.v_str = makestring(str);
|
||||
res.v_type = V_STR;
|
||||
|
||||
/* get the time */
|
||||
now = time(NULL);
|
||||
res.v_str = makenewstring(ctime(&now));
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -5019,6 +5039,61 @@ f_fopen(VALUE *v1, VALUE *v2)
|
||||
}
|
||||
|
||||
|
||||
static VALUE
|
||||
f_fpathopen(int count, VALUE **vals)
|
||||
{
|
||||
VALUE result;
|
||||
FILEID id;
|
||||
char *mode;
|
||||
|
||||
/* initialize VALUE */
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
/* check for valid strongs */
|
||||
if (vals[0]->v_type != V_STR || vals[1]->v_type != V_STR) {
|
||||
return error_value(E_FPATHOPEN1);
|
||||
}
|
||||
if (count == 3 && vals[2]->v_type != V_STR) {
|
||||
return error_value(E_FPATHOPEN1);
|
||||
}
|
||||
|
||||
/* check for a valid mode [rwa][b+\0][b+\0] */
|
||||
mode = vals[1]->v_str->s_str;
|
||||
if ((*mode != 'r') && (*mode != 'w') && (*mode != 'a'))
|
||||
return error_value(E_FPATHOPEN2);
|
||||
if (mode[1] != '\0') {
|
||||
if (mode[1] != '+' && mode[1] != 'b')
|
||||
return error_value(E_FPATHOPEN2);
|
||||
if (mode[2] != '\0') {
|
||||
if ((mode[2] != '+' && mode[2] != 'b') ||
|
||||
mode[1] == mode[2])
|
||||
return error_value(E_FPATHOPEN2);
|
||||
if (mode[3] != '\0')
|
||||
return error_value(E_FPATHOPEN2);
|
||||
}
|
||||
}
|
||||
|
||||
/* try to open along a path */
|
||||
errno = 0;
|
||||
if (count == 2) {
|
||||
id = openpathid(vals[0]->v_str->s_str,
|
||||
vals[1]->v_str->s_str,
|
||||
calcpath);
|
||||
} else {
|
||||
id = openpathid(vals[0]->v_str->s_str,
|
||||
vals[1]->v_str->s_str,
|
||||
vals[2]->v_str->s_str);
|
||||
}
|
||||
if (id == FILEID_NONE)
|
||||
return error_value(errno);
|
||||
if (id < 0)
|
||||
return error_value(-id);
|
||||
result.v_type = V_FILE;
|
||||
result.v_file = id;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static VALUE
|
||||
f_freopen(int count, VALUE **vals)
|
||||
{
|
||||
@@ -5138,7 +5213,7 @@ f_errcount(int count, VALUE **vals)
|
||||
static VALUE
|
||||
f_errmax(int count, VALUE **vals)
|
||||
{
|
||||
int oldmax;
|
||||
long oldmax;
|
||||
VALUE *vp;
|
||||
VALUE result;
|
||||
|
||||
@@ -5150,11 +5225,12 @@ f_errmax(int count, VALUE **vals)
|
||||
vp = vals[0];
|
||||
|
||||
if (vp->v_type != V_NUM || qisfrac(vp->v_num) ||
|
||||
zge31b(vp->v_num->num))
|
||||
zge31b(vp->v_num->num) || zltnegone(vp->v_num->num)) {
|
||||
fprintf(stderr,
|
||||
"Out-of-range arg for errmax ignored\n");
|
||||
else
|
||||
errmax = (int) ztoi(vp->v_num->num);
|
||||
} else {
|
||||
errmax = ztoi(vp->v_num->num);
|
||||
}
|
||||
}
|
||||
|
||||
result.v_type = V_NUM;
|
||||
@@ -5166,7 +5242,7 @@ f_errmax(int count, VALUE **vals)
|
||||
static VALUE
|
||||
f_stoponerror(int count, VALUE **vals)
|
||||
{
|
||||
int oldval;
|
||||
long oldval;
|
||||
VALUE *vp;
|
||||
VALUE result;
|
||||
|
||||
@@ -5178,11 +5254,12 @@ f_stoponerror(int count, VALUE **vals)
|
||||
vp = vals[0];
|
||||
|
||||
if (vp->v_type != V_NUM || qisfrac(vp->v_num) ||
|
||||
zge31b(vp->v_num->num))
|
||||
zge31b(vp->v_num->num) || zltnegone(vp->v_num->num)) {
|
||||
fprintf(stderr,
|
||||
"Out-of-range arg for stoponerror ignored\n");
|
||||
else
|
||||
stoponerror = (int) ztoi(vp->v_num->num);
|
||||
} else {
|
||||
stoponerror = ztoi(vp->v_num->num);
|
||||
}
|
||||
}
|
||||
|
||||
result.v_type = V_NUM;
|
||||
@@ -6196,10 +6273,8 @@ f_reverse(VALUE *val)
|
||||
{
|
||||
VALUE res;
|
||||
|
||||
/* initialize VALUE */
|
||||
res.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
res.v_type = val->v_type;
|
||||
res.v_subtype = val->v_subtype;
|
||||
switch(val->v_type) {
|
||||
case V_MAT:
|
||||
res.v_mat = matcopy(val->v_mat);
|
||||
@@ -6227,10 +6302,8 @@ f_sort(VALUE *val)
|
||||
{
|
||||
VALUE res;
|
||||
|
||||
/* initialize VALUE */
|
||||
res.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
res.v_type = val->v_type;
|
||||
res.v_subtype = val->v_subtype;
|
||||
switch (val->v_type) {
|
||||
case V_MAT:
|
||||
res.v_mat = matcopy(val->v_mat);
|
||||
@@ -6413,31 +6486,27 @@ f_modify(VALUE *v1, VALUE *v2)
|
||||
long s;
|
||||
VALUE res;
|
||||
VALUE *vp;
|
||||
unsigned short subtype;
|
||||
|
||||
/* initialize VALUE */
|
||||
res.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
if (v1->v_type != V_ADDR) {
|
||||
math_error("Non-variable first argument for modify");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
if (v1->v_type != V_ADDR)
|
||||
return error_value(E_MODIFY1);
|
||||
v1 = v1->v_addr;
|
||||
if (v2->v_type == V_ADDR)
|
||||
v2 = v2->v_addr;
|
||||
if (v2->v_type != V_STR) {
|
||||
math_error("Non-string second argument for modify");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
if (v2->v_type != V_STR)
|
||||
return error_value(E_MODIFY2);
|
||||
if (v1->v_subtype & V_NONEWVALUE)
|
||||
return error_value(E_MODIFY3);
|
||||
fp = findfunc(adduserfunc(v2->v_str->s_str));
|
||||
if (!fp) {
|
||||
math_error("Undefined function for modify");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
if (!fp)
|
||||
return error_value(E_MODIFY4);
|
||||
switch (v1->v_type) {
|
||||
case V_LIST:
|
||||
for (ep = v1->v_list->l_first; ep; ep = ep->e_next) {
|
||||
subtype = ep->e_value.v_subtype;
|
||||
*++stack = ep->e_value;
|
||||
calculate(fp, 1);
|
||||
stack->v_subtype |= subtype;
|
||||
ep->e_value = *stack--;
|
||||
}
|
||||
break;
|
||||
@@ -6445,16 +6514,29 @@ f_modify(VALUE *v1, VALUE *v2)
|
||||
vp = v1->v_mat->m_table;
|
||||
s = v1->v_mat->m_size;
|
||||
while (s-- > 0) {
|
||||
subtype = vp->v_subtype;
|
||||
*++stack = *vp;
|
||||
calculate(fp, 1);
|
||||
stack->v_subtype |= subtype;
|
||||
*vp++ = *stack--;
|
||||
}
|
||||
break;
|
||||
case V_OBJ:
|
||||
vp = v1->v_obj->o_table;
|
||||
s = v1->v_obj->o_actions->oa_count;
|
||||
while (s-- > 0) {
|
||||
subtype = vp->v_subtype;
|
||||
*++stack = *vp;
|
||||
calculate(fp, 1);
|
||||
stack->v_subtype |= subtype;
|
||||
*vp++ = *stack--;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
math_error("Non list or matrix first argument for modify");
|
||||
/*NOTREACHED*/
|
||||
return error_value(E_MODIFY5);
|
||||
}
|
||||
res.v_type = V_NULL;
|
||||
res.v_subtype = V_NOSUBTYPE;
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -6657,13 +6739,15 @@ f_cmdbuf(void)
|
||||
{
|
||||
VALUE result;
|
||||
char *newcp;
|
||||
size_t cmdbuf_len; /* length of cmdbuf string */
|
||||
|
||||
/* initialize VALUE */
|
||||
result.v_type = V_STR;
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
newcp = (char *)malloc(strlen(cmdbuf) + 1);
|
||||
strcpy(newcp, cmdbuf);
|
||||
cmdbuf_len = strlen(cmdbuf);
|
||||
newcp = (char *)malloc(cmdbuf_len+1);
|
||||
strncpy(newcp, cmdbuf, cmdbuf_len+1);
|
||||
result.v_str = makestring(newcp);
|
||||
return result;
|
||||
}
|
||||
@@ -6751,6 +6835,20 @@ f_calclevel (void)
|
||||
}
|
||||
|
||||
|
||||
static VALUE
|
||||
f_calcpath(void)
|
||||
{
|
||||
VALUE result;
|
||||
|
||||
/* initialize VALUE */
|
||||
result.v_type = V_STR;
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
result.v_str = makenewstring(calcpath);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static VALUE
|
||||
f_access(int count, VALUE **vals)
|
||||
{
|
||||
@@ -6758,7 +6856,8 @@ f_access(int count, VALUE **vals)
|
||||
int m;
|
||||
char *s, *fname;
|
||||
VALUE result;
|
||||
long i;
|
||||
size_t len;
|
||||
int i;
|
||||
|
||||
/* initialize VALUE */
|
||||
result.v_type = V_NULL;
|
||||
@@ -6779,8 +6878,8 @@ f_access(int count, VALUE **vals)
|
||||
break;
|
||||
case V_STR:
|
||||
s = vals[1]->v_str->s_str;
|
||||
i = (long)strlen(s);
|
||||
while (i-- > 0) {
|
||||
len = (long)strlen(s);
|
||||
while (len-- > 0) {
|
||||
switch (*s++) {
|
||||
case 'r': m |= 4; break;
|
||||
case 'w': m |= 2; break;
|
||||
@@ -6855,7 +6954,8 @@ f_putenv(int count, VALUE **vals)
|
||||
math_error("Cannot allocate string in putenv");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
strcpy(putenv_str, vals[0]->v_str->s_str);
|
||||
strncpy(putenv_str, vals[0]->v_str->s_str,
|
||||
vals[0]->v_str->s_len + 1);
|
||||
}
|
||||
|
||||
/* return putenv result */
|
||||
@@ -6912,7 +7012,7 @@ f_system(VALUE *vp)
|
||||
}
|
||||
#if defined(_WIN32)
|
||||
/* if the execute length is 0 then just return 0 */
|
||||
if (strlen(vp->v_str->s_str) == 0) {
|
||||
if (vp->v_str->s_len == 0) {
|
||||
result.v_num = itoq((long)0);
|
||||
} else {
|
||||
result.v_num = itoq((long)system(vp->v_str->s_str));
|
||||
@@ -7820,14 +7920,14 @@ f_version(void)
|
||||
*
|
||||
* For nice output, when the description of function (b_desc)
|
||||
* gets too long (extends into col 79) you should chop the
|
||||
* line and add "\n\t\t ", thats newline, 2 tabs a 4 spaces.
|
||||
* line and add "\n\t\t\t", that's newline and 3 tabs.
|
||||
* For example the description:
|
||||
*
|
||||
* ... very long description that goes beyond col 79
|
||||
*
|
||||
* should be written as:
|
||||
*
|
||||
* "... very long description that\n\t\t goes beyond col 79"},
|
||||
* "... very long description that\n\t\t\tgoes beyond col 79"},
|
||||
*
|
||||
* fields:
|
||||
* b_name name of built-in function
|
||||
@@ -7904,16 +8004,18 @@ static CONST struct builtin builtins[] = {
|
||||
"round value a to b number of binary places"},
|
||||
{"btrunc", 1, 2, 0, OP_NOP, f_btrunc, 0,
|
||||
"truncate a to b number of binary places"},
|
||||
{"calclevel", 0, 0, 0, OP_NOP, 0, f_calclevel,
|
||||
"current calculation level"},
|
||||
{"calc_tty", 0, 0, 0, OP_NOP, 0, f_calc_tty,
|
||||
"set tty for interactivity"},
|
||||
{"calclevel", 0, 0, 0, OP_NOP, 0, f_calclevel,
|
||||
"current calculation level"},
|
||||
{"calcpath", 0, 0, 0, OP_NOP, 0, f_calcpath,
|
||||
"current CALCPATH search path value"},
|
||||
{"catalan", 1, 1, 0, OP_NOP, 0, f_catalan,
|
||||
"catalan number for index a"},
|
||||
{"ceil", 1, 1, 0, OP_NOP, 0, f_ceil,
|
||||
"smallest integer greater than or equal to number"},
|
||||
{"cfappr", 1, 3, 0, OP_NOP, f_cfappr, 0,
|
||||
"approximate a within accuracy b using\n\t\t continued fractions"},
|
||||
"approximate a within accuracy b using\n\t\t\tcontinued fractions"},
|
||||
{"cfsim", 1, 2, 0, OP_NOP, f_cfsim, 0,
|
||||
"simplify number using continued fractions"},
|
||||
{"char", 1, 1, 0, OP_NOP, 0, f_char,
|
||||
@@ -8009,13 +8111,15 @@ static CONST struct builtin builtins[] = {
|
||||
{"fgets", 1, 1, 0, OP_NOP, 0, f_fgets,
|
||||
"read next line from file, newline is kept"},
|
||||
{"fgetstr", 1, 1, 0, OP_NOP, 0, f_fgetstr,
|
||||
"read next null-terminated string from file, null character is kept"},
|
||||
"read next null-terminated string from file, null\n\t\t\tcharacter is kept"},
|
||||
{"files", 0, 1, 0, OP_NOP, 0, f_files,
|
||||
"return opened file or max number of opened files"},
|
||||
{"floor", 1, 1, 0, OP_NOP, 0, f_floor,
|
||||
"greatest integer less than or equal to number"},
|
||||
{"fopen", 2, 2, 0, OP_NOP, 0, f_fopen,
|
||||
"open file name a in mode b"},
|
||||
{"fpathopen", 2, 3, 0, OP_NOP, 0, f_fpathopen,
|
||||
"open file name a in mode b, search for a along\n\t\t\tCALCPATH or path c"},
|
||||
{"fprintf", 2, IN, 0, OP_NOP, 0, f_fprintf,
|
||||
"print formatted output to opened file"},
|
||||
{"fputc", 2, 2, 0, OP_NOP, 0, f_fputc,
|
||||
@@ -8039,9 +8143,9 @@ static CONST struct builtin builtins[] = {
|
||||
{"freopen", 2, 3, 0, OP_NOP, 0, f_freopen,
|
||||
"reopen a file stream to a named file"},
|
||||
{"fscan", 2, IN, FA, OP_NOP, 0, f_fscan,
|
||||
"scan a file for assignments to one or more variables"},
|
||||
"scan a file for assignments to one or\n\t\t\tmore variables"},
|
||||
{"fscanf", 2, IN, FA, OP_NOP, 0, f_fscanf,
|
||||
"formatted scan of a file for assignment to one or more variables"},
|
||||
"formatted scan of a file for assignment to one\n\t\t\tor more variables"},
|
||||
{"fseek", 2, 3, 0, OP_NOP, 0, f_fseek,
|
||||
"seek to position b (offset from c) in file a"},
|
||||
{"fsize", 1, 1, 0, OP_NOP, 0, f_fsize,
|
||||
@@ -8059,7 +8163,7 @@ static CONST struct builtin builtins[] = {
|
||||
{"getenv", 1, 1, 0, OP_NOP, 0, f_getenv,
|
||||
"value of environment variable (or NULL)"},
|
||||
{"hash", 1, IN, 0, OP_NOP, 0, f_hash,
|
||||
"return non-negative hash value for one or\n\t\t more values"},
|
||||
"return non-negative hash value for one or\n\t\t\tmore values"},
|
||||
{"head", 2, 2, 0, OP_NOP, 0, f_head,
|
||||
"return list of specified number at head of a list"},
|
||||
{"highbit", 1, 1, 0, OP_HIGHBIT, 0, 0,
|
||||
@@ -8153,7 +8257,7 @@ static CONST struct builtin builtins[] = {
|
||||
{"istype", 2, 2, 0, OP_ISTYPE, 0, 0,
|
||||
"whether the type of a is same as the type of b"},
|
||||
{"jacobi", 2, 2, 0, OP_NOP, qjacobi, 0,
|
||||
"-1 => a is not quadratic residue mod b\n\t\t 1 => b is composite, or a is quad residue of b"},
|
||||
"-1 => a is not quadratic residue mod b\n\t\t\t1 => b is composite, or a is quad residue of b"},
|
||||
{"join", 1, IN, 0, OP_NOP, 0, f_join,
|
||||
"join one or more lists into one list"},
|
||||
{"lcm", 1, IN, 0, OP_NOP, f_lcm, 0,
|
||||
@@ -8168,6 +8272,8 @@ static CONST struct builtin builtins[] = {
|
||||
"create list of specified values"},
|
||||
{"ln", 1, 2, 0, OP_NOP, 0, f_ln,
|
||||
"natural logarithm of value a within accuracy b"},
|
||||
{"log", 1, 2, 0, OP_NOP, 0, f_log,
|
||||
"base 10 logarithm of value a within accuracy b"},
|
||||
{"lowbit", 1, 1, 0, OP_LOWBIT, 0, 0,
|
||||
"low bit number in base 2 representation"},
|
||||
{"ltol", 1, 2, FE, OP_NOP, f_legtoleg, 0,
|
||||
@@ -8227,7 +8333,7 @@ static CONST struct builtin builtins[] = {
|
||||
{"ord", 1, 1, 0, OP_NOP, 0, f_ord,
|
||||
"integer corresponding to character value"},
|
||||
{"param", 1, 1, 0, OP_ARGVALUE, 0, 0,
|
||||
"value of parameter n (or parameter count if n\n\t\t is zero)"},
|
||||
"value of parameter n (or parameter count if n\n\t\t\tis zero)"},
|
||||
{"perm", 2, 2, 0, OP_NOP, qperm, 0,
|
||||
"permutation number a!/(a-b)!"},
|
||||
{"prevcand", 1, 5, 0, OP_NOP, f_prevcand, 0,
|
||||
@@ -8247,14 +8353,14 @@ static CONST struct builtin builtins[] = {
|
||||
{"polar", 2, 3, 0, OP_NOP, 0, f_polar,
|
||||
"complex value of polar coordinate (a * exp(b*1i))"},
|
||||
{"poly", 1, IN, 0, OP_NOP, 0, f_poly,
|
||||
"evaluates a polynomial given its coefficients or coefficient-list"},
|
||||
"evaluates a polynomial given its coefficients\n\t\t\tor coefficient-list"},
|
||||
{"pop", 1, 1, FA, OP_NOP, 0, f_listpop,
|
||||
"pop value from front of list"},
|
||||
{"popcnt", 1, 2, 0, OP_NOP, f_popcnt, 0,
|
||||
"number of bits in a that match b (or 1)"},
|
||||
{"power", 2, 3, 0, OP_NOP, 0, f_power,
|
||||
"value a raised to the power b within accuracy c"},
|
||||
{"protect", 1, 2, FA, OP_NOP, 0, f_protect,
|
||||
{"protect", 1, 3, FA, OP_NOP, 0, f_protect,
|
||||
"read or set protection level for variable"},
|
||||
{"ptest", 1, 3, 0, OP_NOP, f_primetest, 0,
|
||||
"probabilistic primality test"},
|
||||
@@ -8269,7 +8375,7 @@ static CONST struct builtin builtins[] = {
|
||||
{"quo", 2, 3, 0, OP_NOP, 0, f_quo,
|
||||
"integer quotient of a by b, rounding type c"},
|
||||
{"quomod", 4, 4, 0, OP_QUOMOD, 0, 0,
|
||||
"set c and d to quotient and remainder of a\n\t\t divided by b"},
|
||||
"set c and d to quotient and remainder of a\n\t\t\tdivided by b"},
|
||||
{"rand", 0, 2, 0, OP_NOP, f_rand, 0,
|
||||
"additive 55 random number [0,2^64), [0,a), or [a,b)"},
|
||||
{"randbit", 0, 1, 0, OP_NOP, f_randbit, 0,
|
||||
@@ -8305,7 +8411,7 @@ static CONST struct builtin builtins[] = {
|
||||
{"round", 1, 3, 0, OP_NOP, 0, f_round,
|
||||
"round value a to b number of decimal places"},
|
||||
{"rsearch", 2, 4, 0, OP_NOP, 0, f_rsearch,
|
||||
"reverse search matrix or list for value b\n\t\t starting at index c"},
|
||||
"reverse search matrix or list for value b\n\t\t\tstarting at index c"},
|
||||
{"runtime", 0, 0, 0, OP_NOP, f_runtime, 0,
|
||||
"user mode cpu time in seconds"},
|
||||
{"saveval", 1, 1, 0, OP_SAVEVAL, 0, 0,
|
||||
@@ -8313,11 +8419,11 @@ static CONST struct builtin builtins[] = {
|
||||
{"scale", 2, 2, 0, OP_SCALE, 0, 0,
|
||||
"scale value up or down by a power of two"},
|
||||
{"scan", 1, IN, FA, OP_NOP, 0, f_scan,
|
||||
"scan standard input for assignment to one or more variables"},
|
||||
"scan standard input for assignment to one\n\t\t\tor more variables"},
|
||||
{"scanf", 2, IN, FA, OP_NOP, 0, f_scanf,
|
||||
"formatted scan of standard input for assignment to variables"},
|
||||
"formatted scan of standard input for assignment\n\t\t\tto variables"},
|
||||
{"search", 2, 4, 0, OP_NOP, 0, f_search,
|
||||
"search matrix or list for value b starting\n\t\t at index c"},
|
||||
"search matrix or list for value b starting\n\t\t\tat index c"},
|
||||
{"sec", 1, 2, 0, OP_NOP, 0, f_sec,
|
||||
"sec of a within accuracy b"},
|
||||
{"sech", 1, 2, 0, OP_NOP, 0, f_sech,
|
||||
@@ -8363,9 +8469,9 @@ static CONST struct builtin builtins[] = {
|
||||
{"strcat", 1,IN, 0, OP_NOP, 0, f_strcat,
|
||||
"concatenate strings together"},
|
||||
{"strcmp", 2, 2, 0, OP_NOP, 0, f_strcmp,
|
||||
"compare two null-terminated strings"},
|
||||
"compare two strings"},
|
||||
{"strcpy", 2, 2, 0, OP_NOP, 0, f_strcpy,
|
||||
"copy null-terminated string to string"},
|
||||
"copy string to string"},
|
||||
{"strerror", 0, 1, 0, OP_NOP, 0, f_strerror,
|
||||
"string describing error type"},
|
||||
{"strlen", 1, 1, 0, OP_NOP, 0, f_strlen,
|
||||
@@ -8450,10 +8556,11 @@ void
|
||||
showbuiltins(void)
|
||||
{
|
||||
CONST struct builtin *bp; /* current function */
|
||||
int i;
|
||||
|
||||
printf("\nName\tArgs\tDescription\n\n");
|
||||
for (bp = builtins; bp->b_name; bp++) {
|
||||
printf("%-9s ", bp->b_name);
|
||||
for (bp = builtins, i = 0; bp->b_name; bp++, i++) {
|
||||
printf("%-14s ", bp->b_name);
|
||||
if (bp->b_maxargs == IN)
|
||||
printf("%d+ ", bp->b_minargs);
|
||||
else if (bp->b_minargs == bp->b_maxargs)
|
||||
@@ -8461,6 +8568,11 @@ showbuiltins(void)
|
||||
else
|
||||
printf("%d-%-4d", bp->b_minargs, bp->b_maxargs);
|
||||
printf("%s\n", bp->b_desc);
|
||||
if (i == 32) {
|
||||
i = 0;
|
||||
if (getchar() == 27)
|
||||
break;
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
@@ -8551,6 +8663,7 @@ builtinfunc(long index, int argcount, VALUE *stck)
|
||||
vpp++;
|
||||
}
|
||||
result.v_type = V_NUM;
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
if (!(bp->b_flags & FE) && (bp->b_minargs != bp->b_maxargs)) {
|
||||
result.v_num = (*bp->b_numfunc)(argcount, numargs);
|
||||
return result;
|
||||
|
8
hash.c
8
hash.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* hash - one-way hash routines
|
||||
*
|
||||
* Copyright (C) 1999-2002 Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 Landon Curt Noll
|
||||
*
|
||||
* 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
|
||||
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.6 $
|
||||
* @(#) $Id: hash.c,v 29.6 2004/02/25 23:55:38 chongo Exp $
|
||||
* @(#) $Revision: 29.8 $
|
||||
* @(#) $Id: hash.c,v 29.8 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/hash.c,v $
|
||||
*
|
||||
* Under source code control: 1995/11/23 05:13:11
|
||||
@@ -596,7 +596,7 @@ hash_complex(int type, void *c, HASH *state)
|
||||
HASH *
|
||||
hash_str(int type, char *str, HASH *state)
|
||||
{
|
||||
USB32 len; /* string length */
|
||||
size_t len; /* string length */
|
||||
|
||||
/*
|
||||
* initialize if state is NULL
|
||||
|
@@ -18,8 +18,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.25 $
|
||||
# @(#) $Id: Makefile,v 29.25 2004/07/28 12:21:05 chongo Exp $
|
||||
# @(#) $Revision: 29.28 $
|
||||
# @(#) $Id: Makefile,v 29.28 2006/05/07 12:59:51 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/help/RCS/Makefile,v $
|
||||
#
|
||||
# Under source code control: 1991/07/23 06:47:57
|
||||
@@ -258,32 +258,41 @@ BLT_HELP_FILES= ${BLT_HELP_FILES_3} ${BLT_HELP_FILES_5} \
|
||||
|
||||
# This list is prodiced by the detaillist rule when no WARNINGS are detected.
|
||||
#
|
||||
# Please use:
|
||||
#
|
||||
# make detaillist
|
||||
#
|
||||
# to keep this list in nice sorted order and to check that these
|
||||
# non-special help files are under RCS control.
|
||||
#
|
||||
DETAIL_HELP= abs access acos acosh acot acoth acsc acsch address agd append \
|
||||
appr arg argv arrow asec asech asin asinh assign atan atan2 atanh \
|
||||
avg base base2 bernoulli bit blk blkcpy blkfree blocks bround btrunc \
|
||||
calc_tty calclevel catalan ceil cfappr cfsim char cmdbuf cmp comb \
|
||||
conj cos cosh cot coth count cp csc csch ctime delete den dereference \
|
||||
det digit digits display dp epsilon errcount errmax errno error euler \
|
||||
eval exp fact factor fclose fcnt feof ferror fflush fgetc fgetfield \
|
||||
fgetline fgets fgetstr fib files floor fopen forall fprintf fputc \
|
||||
fputs fputstr frac free freebernoulli freeeuler freeglobals freeredc \
|
||||
freestatics frem freopen fscan fscanf fseek fsize ftell gcd gcdrem \
|
||||
gd getenv hash head highbit hmean hnrmod hypot ilog ilog10 ilog2 \
|
||||
im indices inputlevel insert int inverse iroot isassoc isatty isblk \
|
||||
isconfig isdefined iserror iseven isfile ishash isident isint islist \
|
||||
ismat ismult isnull isnum isobj isobjtype isodd isprime isptr isqrt \
|
||||
isrand israndom isreal isrel issimple issq isstr istype jacobi join \
|
||||
lcm lcmfact lfactor ln lowbit ltol makelist matdim matfill matmax \
|
||||
matmin matsum mattrace mattrans max md5 memsize meq min minv mmin \
|
||||
mne mod modify name near newerror nextcand nextprime norm null \
|
||||
num oldvalue ord param perm pfact pi pix places pmod polar poly \
|
||||
pop popcnt power prevcand prevprime printf prompt protect ptest \
|
||||
push putenv quo quomod rand randbit random randombit randperm rcin \
|
||||
rcmul rcout rcpow rcsq re remove reverse rewind rm root round rsearch \
|
||||
runtime saveval scale scan scanf search sec sech seed segment select \
|
||||
sgn sha sha1 sin sinh size sizeof sleep sort sqrt srand srandom \
|
||||
ssq str strcat strerror strlen strpos strprintf strscan strscanf \
|
||||
substr sum swap system tail tan tanh test time trunc version xor
|
||||
det digit digits display dp epsilon errcount errmax errno error \
|
||||
euler eval exp fact factor fclose fcnt feof ferror fflush fgetc \
|
||||
fgetfield fgetline fgets fgetstr fib files floor fopen forall \
|
||||
fpathopen fprintf fputc fputs fputstr frac free freebernoulli \
|
||||
freeeuler freeglobals freeredc freestatics frem freopen fscan \
|
||||
fscanf fseek fsize ftell gcd gcdrem gd getenv hash head highbit \
|
||||
hmean hnrmod hypot ilog ilog10 ilog2 im indices inputlevel insert \
|
||||
int inverse iroot isassoc isatty isblk isconfig isdefined iserror \
|
||||
iseven isfile ishash isident isint islist ismat ismult isnull isnum \
|
||||
isobj isobjtype isodd isprime isptr isqrt isrand israndom isreal \
|
||||
isrel issimple issq isstr istype jacobi join lcm lcmfact lfactor \
|
||||
ln log lowbit ltol makelist matdim matfill matmax matmin matsum \
|
||||
mattrace mattrans max md5 memsize meq min minv mmin mne mod modify \
|
||||
name near newerror nextcand nextprime norm null num oldvalue ord \
|
||||
param perm pfact pi pix places pmod polar poly pop popcnt power \
|
||||
prevcand prevprime printf prompt protect ptest push putenv quo \
|
||||
quomod rand randbit random randombit randperm rcin rcmul rcout \
|
||||
rcpow rcsq re remove reverse rewind rm root round rsearch runtime \
|
||||
saveval scale scan scanf search sec sech seed segment select sgn \
|
||||
sha sha1 sin sinh size sizeof sleep sort sqrt srand srandom ssq \
|
||||
str strcat strcmp strcpy strerror strlen strncmp strncpy strpos \
|
||||
strprintf strscan strscanf substr sum swap system tail tan tanh \
|
||||
test time trunc version xor
|
||||
|
||||
# This list is of files that are clones of DETAIL_HELP files. They are
|
||||
# built from DETAIL_HELP files.
|
||||
|
8
help/abs
8
help/abs
@@ -29,10 +29,10 @@ DESCRIPTION
|
||||
the result will be the absolute value correct to n decimal places.
|
||||
|
||||
EXAMPLE
|
||||
> print abs(3.4), abs(-3.4)
|
||||
; print abs(3.4), abs(-3.4)
|
||||
3.4 3.4
|
||||
|
||||
> print abs(3+4i, 1e-5), abs(4+5i, 1e-5), abs(4+5i, 1e-10)
|
||||
; print abs(3+4i, 1e-5), abs(4+5i, 1e-5), abs(4+5i, 1e-10)
|
||||
5 6.40312 6.4031242374
|
||||
|
||||
LIMITS
|
||||
@@ -60,8 +60,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: abs,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: abs,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/abs,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:22
|
||||
|
24
help/access
24
help/access
@@ -23,19 +23,19 @@ EXAMPLE
|
||||
The system error-numbers and messages may differ for different
|
||||
implementations
|
||||
|
||||
> !rm -f junk
|
||||
> access("junk")
|
||||
; !rm -f junk
|
||||
; access("junk")
|
||||
System error 2
|
||||
> strerror(.)
|
||||
; strerror(.)
|
||||
"No such file or directory"
|
||||
> f = fopen("junk", "w")
|
||||
> access("junk")
|
||||
> fputs(f, "Alpha")
|
||||
> fclose(f)
|
||||
> !chmod u-w junk
|
||||
> access("junk", "w")
|
||||
; f = fopen("junk", "w")
|
||||
; access("junk")
|
||||
; fputs(f, "Alpha")
|
||||
; fclose(f)
|
||||
; !chmod u-w junk
|
||||
; access("junk", "w")
|
||||
System error 13
|
||||
> strerror(.)
|
||||
; strerror(.)
|
||||
"Permission denied"
|
||||
|
||||
LIMITS
|
||||
@@ -64,8 +64,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: access,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: access,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/access,v $
|
||||
##
|
||||
## Under source code control: 1996/04/30 03:36:20
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = acos(x) is the number in [0, pi] for which cos(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print acos(.5, 1e-5), acos(.5, 1e-10), acos(.5, 1e-15), acos(.5, 1e-20)
|
||||
; print acos(.5, 1e-5), acos(.5, 1e-10), acos(.5, 1e-15), acos(.5, 1e-20)
|
||||
1.0472 1.0471975512 1.047197551196598 1.04719755119659774615
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: acos,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acos,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acos,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:23
|
||||
|
@@ -20,7 +20,7 @@ DESCRIPTION
|
||||
acosh(x) = ln(x + sqrt(x^2 - 1))
|
||||
|
||||
EXAMPLE
|
||||
> print acosh(2, 1e-5), acosh(2, 1e-10), acosh(2, 1e-15), acosh(2, 1e-20)
|
||||
; print acosh(2, 1e-5), acosh(2, 1e-10), acosh(2, 1e-15), acosh(2, 1e-20)
|
||||
1.31696 1.3169578969 1.316957896924817 1.31695789692481670862
|
||||
|
||||
LIMITS
|
||||
@@ -48,8 +48,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: acosh,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acosh,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acosh,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:24
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = acot(x) is the number in (0, pi) for which cot(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print acot(2, 1e-5), acot(2, 1e-10), acot(2, 1e-15), acot(2, 1e-20)
|
||||
; print acot(2, 1e-5), acot(2, 1e-10), acot(2, 1e-15), acot(2, 1e-20)
|
||||
.46365 .463647609 .463647609000806 .46364760900080611621
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: acot,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acot,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acot,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -19,7 +19,7 @@ DESCRIPTION
|
||||
acoth(x) = ln((x + 1)/(x - 1))/2
|
||||
|
||||
EXAMPLE
|
||||
> print acoth(2, 1e-5), acoth(2, 1e-10), acoth(2, 1e-15), acoth(2, 1e-20)
|
||||
; print acoth(2, 1e-5), acoth(2, 1e-10), acoth(2, 1e-15), acoth(2, 1e-20)
|
||||
.54931 .5493061443 .549306144334055 .5493061443340548457
|
||||
|
||||
LIMITS
|
||||
@@ -47,8 +47,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: acoth,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acoth,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acoth,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:01
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = acsc(x) is the number in [-pi/2, pi/2] for which csc(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print acsc(2, 1e-5), acsc(2, 1e-10), acsc(2, 1e-15), acsc(2, 1e-20)
|
||||
; print acsc(2, 1e-5), acsc(2, 1e-10), acsc(2, 1e-15), acsc(2, 1e-20)
|
||||
.5236 .5235987756 .523598775598299 .52359877559829887308
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: acsc,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acsc,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acsc,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -20,7 +20,7 @@ DESCRIPTION
|
||||
|
||||
|
||||
EXAMPLE
|
||||
> print acsch(2, 1e-5), acsch(2, 1e-10), acsch(2, 1e-15), acsch(2, 1e-20)
|
||||
; print acsch(2, 1e-5), acsch(2, 1e-10), acsch(2, 1e-15), acsch(2, 1e-20)
|
||||
.48121 .4812118251 .481211825059603 .4812118250596034475
|
||||
|
||||
LIMITS
|
||||
@@ -48,8 +48,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: acsch,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acsch,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acsch,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:01
|
||||
|
20
help/address
20
help/address
@@ -134,21 +134,21 @@ DESCRIPTION
|
||||
EXAMPLE
|
||||
Addresses for particular systems may differ from those displayed here.
|
||||
|
||||
> mat A[3]
|
||||
> B = blk()
|
||||
; mat A[3]
|
||||
; B = blk()
|
||||
|
||||
> print &A, &A[0], &A[1]
|
||||
; print &A, &A[0], &A[1]
|
||||
v-ptr: 1400470d0 v-ptr: 140044b70 v-ptr: 140044b80
|
||||
|
||||
> print &B, &B[0], &B[1]
|
||||
; print &B, &B[0], &B[1]
|
||||
v-ptr: 140047130 o-ptr: 140044d00 o-ptr: 140044d01
|
||||
|
||||
> a = A[0] = 27
|
||||
> print &*a, &*A[0]. &27
|
||||
; a = A[0] = 27
|
||||
; print &*a, &*A[0]. &27
|
||||
n_ptr: 14003a850 n_ptr: 14003a850 n_ptr: 14003a850
|
||||
|
||||
> a = A[0] = "abc"
|
||||
> print &*a, &*A[0], &"abc"
|
||||
; a = A[0] = "abc"
|
||||
; print &*a, &*A[0], &"abc"
|
||||
s_ptr: 14004cae0 s_ptr: 14004cae0 s_ptr: 14004cae0
|
||||
|
||||
LIMITS
|
||||
@@ -176,8 +176,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: address,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: address,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/address,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:34
|
||||
|
12
help/agd
12
help/agd
@@ -35,16 +35,16 @@ DESCRIPTION
|
||||
|
||||
|
||||
EXAMPLE
|
||||
> print agd(1, 1e-5), agd(1, 1e-10), agd(1, 1e-15)
|
||||
; print agd(1, 1e-5), agd(1, 1e-10), agd(1, 1e-15)
|
||||
1.22619 1.2261911709 1.226191170883517
|
||||
|
||||
> print agd(2, 1e-5), agd(2, 1e-10)
|
||||
; print agd(2, 1e-5), agd(2, 1e-10)
|
||||
1.52345-3.14159i 1.5234524436-3.1415926536i
|
||||
|
||||
> print agd(5, 1e-5), agd(5, 1e-10), agd(5, 1e-15)
|
||||
; print agd(5, 1e-5), agd(5, 1e-10), agd(5, 1e-15)
|
||||
-1.93237 -1.9323667197 -1.932366719745925
|
||||
|
||||
> print agd(1+2i, 1e-5), agd(1+2i, 1e-10)
|
||||
; print agd(1+2i, 1e-5), agd(1+2i, 1e-10)
|
||||
.22751+1.42291i .2275106584+1.4229114625i
|
||||
|
||||
LIMITS
|
||||
@@ -72,8 +72,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: agd,v 29.3 2005/10/18 10:48:29 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: agd,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/agd,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:34
|
||||
|
18
help/append
18
help/append
@@ -19,9 +19,9 @@ DESCRIPTION
|
||||
append(x, y_0, y_1, ...) is equivalent to insert(x, n, y_0, y_1, ...).
|
||||
|
||||
EXAMPLE
|
||||
> x = list(2,3,4)
|
||||
> append(x, 5, 6)
|
||||
> print x
|
||||
; x = list(2,3,4)
|
||||
; append(x, 5, 6)
|
||||
; print x
|
||||
|
||||
list (5 elements, 5 nonzero):
|
||||
[[0]] = 2
|
||||
@@ -30,8 +30,8 @@ EXAMPLE
|
||||
[[3]] = 5
|
||||
[[4]] = 6
|
||||
|
||||
> append(x, pop(x), pop(x))
|
||||
> print x
|
||||
; append(x, pop(x), pop(x))
|
||||
; print x
|
||||
|
||||
list (5 elements, 5 nonzero):
|
||||
[[0]] = 4
|
||||
@@ -40,8 +40,8 @@ EXAMPLE
|
||||
[[3]] = 2
|
||||
[[4]] = 3
|
||||
|
||||
> append(x, (remove(x), 7))
|
||||
> print x
|
||||
; append(x, (remove(x), 7))
|
||||
; print x
|
||||
|
||||
list (5 elements, 5 nonzero):
|
||||
[[0]] = 4
|
||||
@@ -75,8 +75,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: append,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: append,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/append,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 03:13:17
|
||||
|
34
help/appr
34
help/appr
@@ -97,47 +97,47 @@ PROPERTIES
|
||||
If y is nonzero, appr(x,y,8)/y = an odd integer n only if x = n * y.
|
||||
|
||||
EXAMPLES
|
||||
> print appr(-5.44,0.1,0), appr(5.44,0.1,0), appr(5.7,1,0), appr(-5.7,1,0)
|
||||
; print appr(-5.44,0.1,0), appr(5.44,0.1,0), appr(5.7,1,0), appr(-5.7,1,0)
|
||||
-5.5 5.4 5 -6
|
||||
|
||||
> print appr(-5.44,-.1,0), appr(5.44,-.1,0), appr(5.7,-1,0), appr(-5.7,-1,0)
|
||||
; print appr(-5.44,-.1,0), appr(5.44,-.1,0), appr(5.7,-1,0), appr(-5.7,-1,0)
|
||||
-5.4 5.5 6 -5
|
||||
|
||||
> print appr(-5.44,0.1,3), appr(5.44,0.1,3), appr(5.7,1,3), appr(-5.7,1,3)
|
||||
; print appr(-5.44,0.1,3), appr(5.44,0.1,3), appr(5.7,1,3), appr(-5.7,1,3)
|
||||
-5.5 5.5 6 -6
|
||||
|
||||
> print appr(-5.44,0.1,4), appr(5.44,0.1,4), appr(5.7,1,4), appr(-5.7,1,4)
|
||||
; print appr(-5.44,0.1,4), appr(5.44,0.1,4), appr(5.7,1,4), appr(-5.7,1,4)
|
||||
-5.5 5.4 5 -6
|
||||
|
||||
> print appr(-5.44,0.1,6), appr(5.44,0.1,6), appr(5.7,1,6), appr(-5.7,1,6)
|
||||
; print appr(-5.44,0.1,6), appr(5.44,0.1,6), appr(5.7,1,6), appr(-5.7,1,6)
|
||||
-5.4 5.4 6 -5
|
||||
|
||||
> print appr(-5.44,-.1,6), appr(5.44,-.1,6), appr(5.7,-1,6), appr(-5.7,-1,6)
|
||||
; print appr(-5.44,-.1,6), appr(5.44,-.1,6), appr(5.7,-1,6), appr(-5.7,-1,6)
|
||||
-5.5 5.5 6 -6
|
||||
|
||||
> print appr(-5.44,0.1,9), appr(5.44,0.1,9), appr(5.7,1,9), appr(-5.7,1,9)
|
||||
; print appr(-5.44,0.1,9), appr(5.44,0.1,9), appr(5.7,1,9), appr(-5.7,1,9)
|
||||
-5.5 5.5 5 -5
|
||||
|
||||
> print appr(-.44,0.1,11), appr(.44,0.1,11), appr(5.7,1,11), appr(-5.7,1,11)
|
||||
; print appr(-.44,0.1,11), appr(.44,0.1,11), appr(5.7,1,11), appr(-5.7,1,11)
|
||||
-.4 .5 5 -6
|
||||
|
||||
> print appr(-.44,-.1,11),appr(.44,-.1,11),appr(5.7,-1,11),appr(-5.7,-1,11)
|
||||
; print appr(-.44,-.1,11),appr(.44,-.1,11),appr(5.7,-1,11),appr(-5.7,-1,11)
|
||||
-.5 .4 6 -5
|
||||
|
||||
> print appr(-.44,0.1,12), appr(.44,0.1,12), appr(5.7,1,12), appr(-5.7,1,12)
|
||||
; print appr(-.44,0.1,12), appr(.44,0.1,12), appr(5.7,1,12), appr(-5.7,1,12)
|
||||
-.4 .5 5 -6
|
||||
|
||||
> print appr(-.44,-.1,12),appr(.44,-.1,12),appr(5.7,-1,12),appr(-5.7,-1,12)
|
||||
; print appr(-.44,-.1,12),appr(.44,-.1,12),appr(5.7,-1,12),appr(-5.7,-1,12)
|
||||
-.5 .4 6 -5
|
||||
|
||||
> print appr(-.44,0.1,15), appr(.44,0.1,15), appr(5.7,1,15), appr(-5.7,1,15)
|
||||
; print appr(-.44,0.1,15), appr(.44,0.1,15), appr(5.7,1,15), appr(-5.7,1,15)
|
||||
-.4 .5 5 -6
|
||||
|
||||
> print appr(-.44,-.1,15),appr(.44,-.1,15),appr(5.7,-1,15),appr(-5.7,-1,15)
|
||||
; print appr(-.44,-.1,15),appr(.44,-.1,15),appr(5.7,-1,15),appr(-5.7,-1,15)
|
||||
-.4 .5 5 -6
|
||||
|
||||
> x = sqrt(7-3i, 1e-20)
|
||||
> print appr(x,1e-5,0), appr(x,1e-5,1), appr(x,1e-5,2), appr(x,1e-6,3)
|
||||
; x = sqrt(7-3i, 1e-20)
|
||||
; print appr(x,1e-5,0), appr(x,1e-5,1), appr(x,1e-5,2), appr(x,1e-6,3)
|
||||
2.70331-.55488i 2.70332-.55487i 2.70331-.55487i 2.70332-.55488i
|
||||
|
||||
LIMITS
|
||||
@@ -167,8 +167,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: appr,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: appr,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/appr,v $
|
||||
##
|
||||
## Under source code control: 1994/09/25 17:18:21
|
||||
|
10
help/arg
10
help/arg
@@ -16,11 +16,11 @@ DESCRIPTION
|
||||
but usually less than 0.5 * abs(eps).
|
||||
|
||||
EXAMPLE
|
||||
> print arg(2), arg(2+3i, 1e-5), arg(2+3i, 1e-10), arg(2+3i, 1e-20)
|
||||
; print arg(2), arg(2+3i, 1e-5), arg(2+3i, 1e-10), arg(2+3i, 1e-20)
|
||||
0 .98279 .9827937232 .98279372324732906799
|
||||
|
||||
> pi = pi(1e-10); deg = pi/180; eps = deg/10000
|
||||
> print arg(2+3i, eps)/deg, arg(-1 +1i, eps)/deg, arg(-1 - 1i,eps)/deg
|
||||
; pi = pi(1e-10); deg = pi/180; eps = deg/10000
|
||||
; print arg(2+3i, eps)/deg, arg(-1 +1i, eps)/deg, arg(-1 - 1i,eps)/deg
|
||||
56.3099 135 -135
|
||||
|
||||
LIMITS
|
||||
@@ -48,8 +48,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: arg,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: arg,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/arg,v $
|
||||
##
|
||||
## Under source code control: 1994/09/25 20:22:31
|
||||
|
@@ -38,8 +38,8 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
$ calc -s a bb ccc
|
||||
> argc = argv();
|
||||
> for (i = 0; i < argc; i++) print "argv[": i : '] = "': argv(i) : '"';
|
||||
; argc = argv();
|
||||
; for (i = 0; i < argc; i++) print "argv[": i : '] = "': argv(i) : '"';
|
||||
argv[0] = "a"
|
||||
argv[1] = "bb"
|
||||
argv[2] = "ccc"
|
||||
@@ -69,8 +69,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: argv,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: argv,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/argv,v $
|
||||
##
|
||||
## Under source code control: 1999/11/23 19:45:05
|
||||
|
24
help/arrow
24
help/arrow
@@ -23,21 +23,21 @@ DESCRIPTION
|
||||
Spaces or tabs on either side of -> are optional.
|
||||
|
||||
EXAMPLES
|
||||
> obj pair {one, two}
|
||||
> obj pair A, B
|
||||
> p = &A
|
||||
> p->one = 1; p->two = 2
|
||||
> A
|
||||
; obj pair {one, two}
|
||||
; obj pair A, B
|
||||
; p = &A
|
||||
; p->one = 1; p->two = 2
|
||||
; A
|
||||
obj pair {1, 2}
|
||||
|
||||
> A->two = &B
|
||||
> p->two->one = 3; p->two->two = 4
|
||||
; A->two = &B
|
||||
; p->two->one = 3; p->two->two = 4
|
||||
|
||||
> *p->ptwo
|
||||
; *p->ptwo
|
||||
obj pair {3, 4}
|
||||
|
||||
> B = {5,6}
|
||||
> *p->two
|
||||
; B = {5,6}
|
||||
; *p->two
|
||||
obj pair {5, 6}
|
||||
|
||||
|
||||
@@ -66,8 +66,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: arrow,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: arrow,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/arrow,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:34
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = asec(x) is the number in [0, pi] for which sec(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print asec(2, 1e-5), asec(2, 1e-10), asec(2, 1e-15), asec(2, 1e-20)
|
||||
; print asec(2, 1e-5), asec(2, 1e-10), asec(2, 1e-15), asec(2, 1e-20)
|
||||
1.0472 1.0471975512 1.047197551196598 1.04719755119659774615
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: asec,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: asec,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asec,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -19,7 +19,7 @@ DESCRIPTION
|
||||
asech(x) = ln((1 + sqrt(1 - x^2))/x)
|
||||
|
||||
EXAMPLE
|
||||
> print asech(.5,1e-5), asech(.5,1e-10), asech(.5,1e-15), asech(.5,1e-20)
|
||||
; print asech(.5,1e-5), asech(.5,1e-10), asech(.5,1e-15), asech(.5,1e-20)
|
||||
1.31696 1.3169578969 1.316957896924817 1.31695789692481670862
|
||||
|
||||
LIMITS
|
||||
@@ -47,8 +47,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: asech,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: asech,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asech,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = asin(x) is the number in [-pi/2, pi/2] for which sin(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print asin(.5, 1e-5), asin(.5, 1e-10), asin(.5, 1e-15), asin(.5, 1e-20)
|
||||
; print asin(.5, 1e-5), asin(.5, 1e-10), asin(.5, 1e-15), asin(.5, 1e-20)
|
||||
.5236 .5235987756 .523598775598299 .52359877559829887308
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: asin,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: asin,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asin,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:24
|
||||
|
@@ -19,7 +19,7 @@ DESCRIPTION
|
||||
asinh(x) = ln(x + sqrt(1 + x^2))
|
||||
|
||||
EXAMPLE
|
||||
> print asinh(2, 1e-5), asinh(2, 1e-10), asinh(2, 1e-15), asinh(2, 1e-20)
|
||||
; print asinh(2, 1e-5), asinh(2, 1e-10), asinh(2, 1e-15), asinh(2, 1e-20)
|
||||
1.44363 1.4436354752 1.44363547517881 1.44363547517881034249
|
||||
|
||||
LIMITS
|
||||
@@ -47,8 +47,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: asinh,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: asinh,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asinh,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:25
|
||||
|
28
help/assign
28
help/assign
@@ -76,32 +76,32 @@ DESCRIPTION
|
||||
|
||||
|
||||
EXAMPLE
|
||||
> b = 3+1
|
||||
> a = b
|
||||
> print a, b
|
||||
; b = 3+1
|
||||
; a = b
|
||||
; print a, b
|
||||
4 4
|
||||
|
||||
> obj point {x,y}
|
||||
> mat A[3] = {1, list(2,3), obj point = {4,5}}
|
||||
; obj point {x,y}
|
||||
; mat A[3] = {1, list(2,3), obj point = {4,5}}
|
||||
|
||||
> A[1][[0]] = 6; A[2].x = 7
|
||||
> print A[1]
|
||||
; A[1][[0]] = 6; A[2].x = 7
|
||||
; print A[1]
|
||||
|
||||
list (2 elements, 2 nonzero):
|
||||
[[0]] = 6
|
||||
[[1]] = 3
|
||||
|
||||
> print A[2]
|
||||
; print A[2]
|
||||
obj point {7, 5}
|
||||
|
||||
> A = {A[2], , {9,10}}
|
||||
> print A[0]
|
||||
; A = {A[2], , {9,10}}
|
||||
; print A[0]
|
||||
obj point {7, 5}
|
||||
|
||||
> print A[2]
|
||||
; print A[2]
|
||||
obj point {9, 10}
|
||||
|
||||
> A = {, {2}}
|
||||
; A = {, {2}}
|
||||
print A[1]
|
||||
|
||||
list (2 elements, 2 nonzero):
|
||||
@@ -133,8 +133,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: assign,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: assign,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/assign,v $
|
||||
##
|
||||
## Under source code control: 1995/05/11 21:03:23
|
||||
|
12
help/assoc
12
help/assoc
@@ -60,12 +60,12 @@ DESCRIPTION
|
||||
and are illegal.
|
||||
|
||||
EXAMPLE
|
||||
> A = assoc(); print A
|
||||
; A = assoc(); print A
|
||||
assoc (0 elements):
|
||||
|
||||
> A["zero"] = 0; A["one"] = 1; A["two"] = 2; A["three"] = 3;
|
||||
> A["smallest", "prime"] = 2;
|
||||
> print A
|
||||
; A["zero"] = 0; A["one"] = 1; A["two"] = 2; A["three"] = 3;
|
||||
; A["smallest", "prime"] = 2;
|
||||
; print A
|
||||
assoc (5 elements);
|
||||
["two"] = 2
|
||||
["three"] = 3
|
||||
@@ -98,8 +98,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: assoc,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: assoc,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/assoc,v $
|
||||
##
|
||||
## Under source code control: 1994/09/25 20:22:31
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = atan(x) is the number in (-pi/2, pi/2) for which tan(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print atan(2, 1e-5), atan(2, 1e-10), atan(2, 1e-15), atan(2, 1e-20)
|
||||
; print atan(2, 1e-5), atan(2, 1e-10), atan(2, 1e-15), atan(2, 1e-20)
|
||||
1.10715 1.1071487178 1.107148717794091 1.10714871779409050302
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: atan,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: atan,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atan,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:25
|
||||
|
@@ -24,7 +24,7 @@ DESCRIPTION
|
||||
returns 0.
|
||||
|
||||
EXAMPLE
|
||||
> print atan2(0,0), atan2(1,sqrt(3)), atan2(17,53,1e-100)
|
||||
; print atan2(0,0), atan2(1,sqrt(3)), atan2(17,53,1e-100)
|
||||
0 ~.52359877559829887307 ~.31038740713235146535
|
||||
|
||||
LIMITS
|
||||
@@ -52,8 +52,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: atan2,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: atan2,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atan2,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:26
|
||||
|
@@ -19,7 +19,7 @@ DESCRIPTION
|
||||
atanh(x) = ln((1 + x)/(1 - x))/2
|
||||
|
||||
EXAMPLE
|
||||
> print atanh(.5,1e-5), atanh(.5,1e-10), atanh(.5,1e-15), atanh(.5,1e-20)
|
||||
; print atanh(.5,1e-5), atanh(.5,1e-10), atanh(.5,1e-15), atanh(.5,1e-20)
|
||||
.54931 .5493061443 .549306144334055 .5493061443340548457
|
||||
|
||||
LIMITS
|
||||
@@ -47,8 +47,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: atanh,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: atanh,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atanh,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:27
|
||||
|
12
help/avg
12
help/avg
@@ -27,12 +27,12 @@ DESCRIPTION
|
||||
be averaged.
|
||||
|
||||
EXAMPLE
|
||||
> print avg(1,2,3,4,5), avg(list(1,2,3,4,5)), avg(1,2,list(3,4,5))
|
||||
; print avg(1,2,3,4,5), avg(list(1,2,3,4,5)), avg(1,2,list(3,4,5))
|
||||
3 3 3
|
||||
|
||||
> mat x[2,2] = {1,2,3,4}
|
||||
> mat y[2,2] = {1,2,4,8}
|
||||
> avg(x,y)
|
||||
; mat x[2,2] = {1,2,3,4}
|
||||
; mat y[2,2] = {1,2,4,8}
|
||||
; avg(x,y)
|
||||
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 1
|
||||
@@ -65,8 +65,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: avg,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: avg,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/avg,v $
|
||||
##
|
||||
## Under source code control: 1994/09/25 20:22:31
|
||||
|
10
help/base
10
help/base
@@ -60,13 +60,13 @@ DESCRIPTION
|
||||
listed in the table above.
|
||||
|
||||
EXAMPLE
|
||||
> base()
|
||||
; base()
|
||||
10
|
||||
|
||||
> base(8)
|
||||
; base(8)
|
||||
012
|
||||
|
||||
> print 10
|
||||
; print 10
|
||||
012
|
||||
|
||||
LIMITS
|
||||
@@ -97,8 +97,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: base,v 29.5 2002/12/29 09:17:54 chongo Exp $
|
||||
## @(#) $Revision: 29.6 $
|
||||
## @(#) $Id: base,v 29.6 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/base,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 00:09:39
|
||||
|
16
help/base2
16
help/base2
@@ -68,16 +68,16 @@ DESCRIPTION
|
||||
listed in the table above.
|
||||
|
||||
EXAMPLE
|
||||
> base2()
|
||||
; base2()
|
||||
0
|
||||
> base2(8)
|
||||
; base2(8)
|
||||
0 /* 0 */
|
||||
> print 10
|
||||
; print 10
|
||||
10 /* 012 */
|
||||
> base2(16),
|
||||
> 131072
|
||||
; base2(16),
|
||||
; 131072
|
||||
131072 /* 0x20000 */
|
||||
> 2345
|
||||
; 2345
|
||||
2345 /* 0x929 */
|
||||
|
||||
LIMITS
|
||||
@@ -109,8 +109,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 1.3 $
|
||||
## @(#) $Id: base2,v 1.3 2002/12/29 09:17:54 chongo Exp $
|
||||
## @(#) $Revision: 1.4 $
|
||||
## @(#) $Id: base2,v 1.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/base2,v $
|
||||
##
|
||||
## Under source code control: 2002/12/29 00:21:07
|
||||
|
@@ -28,8 +28,8 @@ DESCRIPTION
|
||||
freebernoulli().
|
||||
|
||||
EXAMPLE
|
||||
> config("mode", "frac"),;
|
||||
> for (n = 0; n <= 6; n++) print bernoulli(n),; print;
|
||||
; config("mode", "frac"),;
|
||||
; for (n = 0; n <= 6; n++) print bernoulli(n),; print;
|
||||
1 -1/2 1/6 0 -1/30 0 1/42
|
||||
|
||||
LIMITS
|
||||
@@ -57,8 +57,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: bernoulli,v 29.5 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.6 $
|
||||
## @(#) $Id: bernoulli,v 29.6 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bernoulli,v $
|
||||
##
|
||||
## Under source code control: 2000/07/13 01:33:00
|
||||
|
14
help/bit
14
help/bit
@@ -20,17 +20,17 @@ DESCRIPTION
|
||||
return 1, otherwise return 0.
|
||||
|
||||
EXAMPLE
|
||||
> print bit(9,0), bit(9,1), bit(9,2), bit(9,3)
|
||||
; print bit(9,0), bit(9,1), bit(9,2), bit(9,3)
|
||||
1 0 0 1
|
||||
|
||||
> print bit(9,4), bit(0,0), bit(9,-1)
|
||||
; print bit(9,4), bit(0,0), bit(9,-1)
|
||||
0 0 0
|
||||
|
||||
> print bit(1.25, -2), bit(1.25, -1), bit(1.25, 0)
|
||||
; print bit(1.25, -2), bit(1.25, -1), bit(1.25, 0)
|
||||
1 0 1
|
||||
|
||||
> p = pi()
|
||||
> print bit(p, 1), bit(p, -2), bit(p, -3)
|
||||
; p = pi()
|
||||
; print bit(p, 1), bit(p, -2), bit(p, -3)
|
||||
1 0 1
|
||||
|
||||
LIMITS
|
||||
@@ -58,8 +58,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: bit,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: bit,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bit,v $
|
||||
##
|
||||
## Under source code control: 1994/10/21 02:21:30
|
||||
|
54
help/blk
54
help/blk
@@ -14,7 +14,7 @@ TYPES
|
||||
|
||||
DESCRIPTION
|
||||
With only integer arguments, blk(len, chunk) attempts to
|
||||
allocate a block of memory consisting of N octets (unsigned 8-bit
|
||||
allocate a block of memory consisting of len octets (unsigned 8-bit
|
||||
bytes). Allocation is always done in multiples of chunk
|
||||
octets, so the actual allocation size of len rounded up
|
||||
to the next multiple of chunk.
|
||||
@@ -26,7 +26,7 @@ DESCRIPTION
|
||||
... , B[len-1], these all initially having zero value.
|
||||
|
||||
The octets B[i] for i >= len always have zero value. If B[i] with
|
||||
some i >= len is referenced, len is increased by 1. For example:
|
||||
some i >= len is referenced, size(B) is increased to i + 1. For example:
|
||||
|
||||
B[i] = x
|
||||
|
||||
@@ -56,7 +56,7 @@ DESCRIPTION
|
||||
will append one octet to B and increment size(B).
|
||||
|
||||
The builtin test(B) returns 1 or 0 according as at least one octet
|
||||
is zero or all octets are zero. If B1 and B2 are blocks, they are
|
||||
is nonzero or all octets are zero. If B1 and B2 are blocks, they are
|
||||
considered equal (B1 == B2) if they have the same length and the
|
||||
same data, i.e. B1[i] == B2[i] for 0 <= i < len. Chunksizes
|
||||
and maxsizes are ignored.
|
||||
@@ -107,7 +107,7 @@ DESCRIPTION
|
||||
|
||||
will give a second variable B referring to the same block as A.
|
||||
Either A[i] = x or B[i] = x may then be used to assign a value
|
||||
to an octet in the book. Its length or chunksize may be changed by
|
||||
to an octet in the block. Its length or chunksize may be changed by
|
||||
instructions like:
|
||||
|
||||
blk(A, len, chunk);
|
||||
@@ -154,55 +154,55 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
|
||||
> B = blk(15,10)
|
||||
; B = blk(15,10)
|
||||
|
||||
> B[7] = 0xff
|
||||
> B
|
||||
; B[7] = 0xff
|
||||
; B
|
||||
chunksize = 10, maxsize = 20, datalen = 15
|
||||
00000000000000ff00000000000000
|
||||
|
||||
> B[18] = 127
|
||||
> B
|
||||
; B[18] = 127
|
||||
; B
|
||||
chunksize = 10, maxsize = 20, datalen = 18
|
||||
00000000000000ff0000000000000000007f
|
||||
|
||||
> B[20] = 2
|
||||
; B[20] = 2
|
||||
Index out of bounds for block
|
||||
|
||||
> print size(B), sizeof(B)
|
||||
; print size(B), sizeof(B)
|
||||
18 20
|
||||
|
||||
> B = blk(B, 100, 20)
|
||||
> B
|
||||
; B = blk(B, 100, 20)
|
||||
; B
|
||||
chunksize = 20, maxsize = 120, datalen = 100
|
||||
00000000000000ff0000000000000000007f000000000000000000000000...
|
||||
|
||||
> C = blk(B, 10} = {1,2,3}
|
||||
> C
|
||||
; C = blk(B, 10} = {1,2,3}
|
||||
; C
|
||||
chunksize = 20, maxsize = 20, datalen = 10
|
||||
01020300000000ff0000
|
||||
|
||||
> A1 = blk("alpha")
|
||||
> A1
|
||||
; A1 = blk("alpha")
|
||||
; A1
|
||||
block 0: alpha
|
||||
chunksize = 256, maxsize = 256, datalen = 0
|
||||
|
||||
> A1[7] = 0xff
|
||||
> A2 = A1
|
||||
> A2[17] = 127
|
||||
> A1
|
||||
; A1[7] = 0xff
|
||||
; A2 = A1
|
||||
; A2[17] = 127
|
||||
; A1
|
||||
block 0: alpha
|
||||
chunksize = 256, maxsize = 256, datalen = 18
|
||||
00000000000000ff0000000000000000007f
|
||||
|
||||
> A1 = blk(A1, 1000)
|
||||
> A1
|
||||
; A1 = blk(A1, 1000)
|
||||
; A1
|
||||
block 0: alpha
|
||||
chunksize = 256, maxsize = 1024, datalen = 1000
|
||||
00000000000000ff0000000000000000007f000000000000000000000000...
|
||||
|
||||
> A1 = blk(A1, , 16)
|
||||
> A1
|
||||
; A1 = blk(A1, , 16)
|
||||
; A1
|
||||
block 0: alpha
|
||||
chunksize = 16, maxsize = 1008, datalen = 1000
|
||||
00000000000000ff0000000000000000007f000000000000000000000000...
|
||||
@@ -234,8 +234,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: blk,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: blk,v 29.4 2006/05/07 07:16:42 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blk,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 13:07:13
|
||||
|
64
help/blkcpy
64
help/blkcpy
@@ -108,74 +108,74 @@ DESCRIPTION
|
||||
|
||||
|
||||
EXAMPLE
|
||||
> A = blk() = {1,2,3,4}
|
||||
> B = blk()
|
||||
> blkcpy(B,A)
|
||||
> B
|
||||
; A = blk() = {1,2,3,4}
|
||||
; B = blk()
|
||||
; blkcpy(B,A)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 4
|
||||
01020304
|
||||
>
|
||||
> blkcpy(B,A)
|
||||
> B
|
||||
; blkcpy(B,A)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 8
|
||||
0102030401020304
|
||||
> blkcpy(B, A, 2, 10)
|
||||
> B
|
||||
; blkcpy(B, A, 2, 10)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 12
|
||||
010203040102030400000102
|
||||
> blkcpy(B,32767)
|
||||
> B
|
||||
; blkcpy(B,32767)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 16
|
||||
010203040102030400000102ff7f0000
|
||||
> mat M[2,2]
|
||||
> blkcpy(M, A)
|
||||
> M
|
||||
; mat M[2,2]
|
||||
; blkcpy(M, A)
|
||||
; M
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 1
|
||||
[0,1] = 2
|
||||
[1,0] = 3
|
||||
[1,1] = 4
|
||||
> blkcpy(M, A, 2, 2)
|
||||
> M
|
||||
; blkcpy(M, A, 2, 2)
|
||||
; M
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 1
|
||||
[0,1] = 2
|
||||
[1,0] = 1
|
||||
[1,1] = 2
|
||||
|
||||
> A = blk() = {1,2,3,4}
|
||||
> B = blk()
|
||||
> copy(A,B)
|
||||
> B
|
||||
; A = blk() = {1,2,3,4}
|
||||
; B = blk()
|
||||
; copy(A,B)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 4
|
||||
01020304
|
||||
> copy(A,B)
|
||||
> B
|
||||
; copy(A,B)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 8
|
||||
0102030401020304
|
||||
> copy(A,B,1,2)
|
||||
> B
|
||||
; copy(A,B,1,2)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 10
|
||||
01020304010203040203
|
||||
> mat M[2,2]
|
||||
> copy(A,M)
|
||||
> M
|
||||
; mat M[2,2]
|
||||
; copy(A,M)
|
||||
; M
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 1
|
||||
[0,1] = 2
|
||||
[1,0] = 3
|
||||
[1,1] = 4
|
||||
|
||||
> copy(A,M,2)
|
||||
> M
|
||||
; copy(A,M,2)
|
||||
; M
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 3
|
||||
[0,1] = 4
|
||||
[1,0] = 3
|
||||
[1,1] = 4
|
||||
|
||||
> copy(A,M,0,2,2)
|
||||
> M
|
||||
; copy(A,M,0,2,2)
|
||||
; M
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 3
|
||||
[0,1] = 4
|
||||
@@ -207,8 +207,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: blkcpy,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: blkcpy,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blkcpy,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 14:08:50
|
||||
|
18
help/blkfree
18
help/blkfree
@@ -23,27 +23,27 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
|
||||
> B1 = blk("foo")
|
||||
> B2 = blk("Second block")
|
||||
; B1 = blk("foo")
|
||||
; B2 = blk("Second block")
|
||||
show blocks
|
||||
id name
|
||||
---- -----
|
||||
0 foo
|
||||
1 Second block
|
||||
|
||||
> blkfree(B1)
|
||||
> show blocks
|
||||
; blkfree(B1)
|
||||
; show blocks
|
||||
id name
|
||||
---- -----
|
||||
1 Second block
|
||||
|
||||
> B1
|
||||
; B1
|
||||
block 0: foo
|
||||
chunksize = 256, maxsize = 0, datalen = 0
|
||||
NULL
|
||||
|
||||
> blk(B1); B[7] = 5
|
||||
> B1
|
||||
; blk(B1); B[7] = 5
|
||||
; B1
|
||||
block 0: foo
|
||||
chunksize = 256, maxsize = 256, datalen = 8
|
||||
0000000000000005
|
||||
@@ -73,8 +73,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: blkfree,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: blkfree,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blkfree,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 13:07:13
|
||||
|
16
help/blocks
16
help/blocks
@@ -20,17 +20,17 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
|
||||
> A = blk("alpha")
|
||||
> B = blk("beta") = {1,2,3}
|
||||
> blocks()
|
||||
; A = blk("alpha")
|
||||
; B = blk("beta") = {1,2,3}
|
||||
; blocks()
|
||||
2
|
||||
> blocks(1)
|
||||
; blocks(1)
|
||||
block 1: beta
|
||||
chunksize = 256, maxsize = 256, datalen = 3
|
||||
010203
|
||||
> blocks(2)
|
||||
; blocks(2)
|
||||
Error 10211
|
||||
> strerror()
|
||||
; strerror()
|
||||
"Non-allocated index number for blocks"
|
||||
|
||||
LIMITS
|
||||
@@ -58,8 +58,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: blocks,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: blocks,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blocks,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 13:07:13
|
||||
|
30
help/bround
30
help/bround
@@ -66,38 +66,38 @@ DESCRIPTION
|
||||
variables, so their values are not changed by the call.
|
||||
|
||||
EXAMPLES
|
||||
> a = 7/32, b = -7/32
|
||||
; a = 7/32, b = -7/32
|
||||
|
||||
> print a, b
|
||||
; print a, b
|
||||
.21875 -.21875
|
||||
|
||||
> print round(a,3,0), round(a,3,1), round(a,3,2), print round(a,3,3)
|
||||
; print round(a,3,0), round(a,3,1), round(a,3,2), print round(a,3,3)
|
||||
.218, .219, .218, .219
|
||||
|
||||
> print round(b,3,0), round(b,3,1), round(b,3,2), print round(b,3,3)
|
||||
; print round(b,3,0), round(b,3,1), round(b,3,2), print round(b,3,3)
|
||||
-.219, -.218, -.218, -.219
|
||||
|
||||
> print round(a,3,16), round(a,3,17), round(a,3,18), print round(a,3,19)
|
||||
; print round(a,3,16), round(a,3,17), round(a,3,18), print round(a,3,19)
|
||||
.2188 .2188 .2188 .2188
|
||||
|
||||
> print round(a,4,16), round(a,4,17), round(a,4,18), print round(a,4,19)
|
||||
; print round(a,4,16), round(a,4,17), round(a,4,18), print round(a,4,19)
|
||||
.2187 .2188 .2187 .2188
|
||||
|
||||
> print round(a,2,8), round(a,3,8), round(a,4,8), round(a,5,8)
|
||||
; print round(a,2,8), round(a,3,8), round(a,4,8), round(a,5,8)
|
||||
.22 .218 .2188 .21875
|
||||
|
||||
> print round(a,2,24), round(a,3,24), round(a,4,24), round(a,5,24)
|
||||
; print round(a,2,24), round(a,3,24), round(a,4,24), round(a,5,24)
|
||||
.22 .219 .2188 .21875
|
||||
|
||||
> c = 21875
|
||||
> print round(c,-2,0), round(c,-2,1), round(c,-3,0), round(c,-3,16)
|
||||
; c = 21875
|
||||
; print round(c,-2,0), round(c,-2,1), round(c,-3,0), round(c,-3,16)
|
||||
21800 21900 21000 22000
|
||||
|
||||
> print round(c,2,32), round(c,2,33), round(c,2,56), round(c,4,56)
|
||||
; print round(c,2,32), round(c,2,33), round(c,2,56), round(c,4,56)
|
||||
21000 22000 22000 21880
|
||||
|
||||
> A = list(1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8)
|
||||
> print round(A,2,24)
|
||||
; A = list(1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8)
|
||||
; print round(A,2,24)
|
||||
|
||||
list(7 elements, 7 nonzero):
|
||||
[[0]] = .12
|
||||
@@ -138,8 +138,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: bround,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: bround,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bround,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 00:22:35
|
||||
|
12
help/btrunc
12
help/btrunc
@@ -22,16 +22,16 @@ DESCRIPTION
|
||||
int(x).
|
||||
|
||||
EXAMPLE
|
||||
> print btrunc(pi()), btrunc(pi(), 10)
|
||||
; print btrunc(pi()), btrunc(pi(), 10)
|
||||
3 3.140625
|
||||
|
||||
> print btrunc(3.3), btrunc(3.7), btrunc(3.3, 2), btrunc(3.7, 2)
|
||||
; print btrunc(3.3), btrunc(3.7), btrunc(3.3, 2), btrunc(3.7, 2)
|
||||
3 3 3.25 3.5
|
||||
|
||||
> print btrunc(-3.3), btrunc(-3.7), btrunc(-3.3, 2), btrunc(-3.7, 2)
|
||||
; print btrunc(-3.3), btrunc(-3.7), btrunc(-3.3, 2), btrunc(-3.7, 2)
|
||||
-3 -3 -3.25 -3.5
|
||||
|
||||
> print btrunc(55.123, -4), btrunc(-55.123, -4)
|
||||
; print btrunc(55.123, -4), btrunc(-55.123, -4)
|
||||
48 -48
|
||||
|
||||
LIMITS
|
||||
@@ -59,8 +59,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: btrunc,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: btrunc,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/btrunc,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 00:44:27
|
||||
|
@@ -18,7 +18,7 @@ DESCRIPTION
|
||||
> !stty echo -cbreak
|
||||
|
||||
EXAMPLE
|
||||
> calc_tty();
|
||||
; calc_tty();
|
||||
|
||||
LIBRARY
|
||||
none
|
||||
@@ -42,8 +42,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.1 $
|
||||
## @(#) $Id: calc_tty,v 29.1 2000/12/14 10:31:45 chongo Exp $
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: calc_tty,v 29.2 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/calc_tty,v $
|
||||
##
|
||||
## Under source code control: 2000/12/14 01:33:00
|
||||
|
@@ -25,7 +25,7 @@ DESCRIPTION
|
||||
from (x,y) = (0,0) to (x,y) = (n,n) for which always y <= x.
|
||||
|
||||
EXAMPLE
|
||||
> print catalan(2), catalan(3), catalan(4), catalan(20)
|
||||
; print catalan(2), catalan(3), catalan(4), catalan(20)
|
||||
2 5 14 6564120420
|
||||
|
||||
LIMITS
|
||||
@@ -53,8 +53,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: catalan,v 29.2 2000/12/17 12:27:58 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: catalan,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/catalan,v $
|
||||
##
|
||||
## Under source code control: 2000/12/14 01:33:00
|
||||
|
@@ -20,7 +20,7 @@ DESCRIPTION
|
||||
by ceil(t).
|
||||
|
||||
EXAMPLE
|
||||
> print ceil(27), ceil(1.23), ceil(-4.56), ceil(7.8 - 9.1i)
|
||||
; print ceil(27), ceil(1.23), ceil(-4.56), ceil(7.8 - 9.1i)
|
||||
27 2 -4 8-9i
|
||||
|
||||
LIMITS
|
||||
@@ -48,8 +48,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: ceil,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: ceil,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/ceil,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 01:12:01
|
||||
|
18
help/cfappr
18
help/cfappr
@@ -66,17 +66,17 @@ DESCRIPTION
|
||||
exceeding n is 1/cfappr(1/x, n, 16).
|
||||
|
||||
EXAMPLE
|
||||
> c = config("mode", "frac")
|
||||
> x = 43/30; u = cfappr(x, 10, 0); v = cfappr(x, 10, 1);
|
||||
> print u, v, x - u, v - x, v - u, cfappr(x, 10, 16)
|
||||
; c = config("mode", "frac")
|
||||
; x = 43/30; u = cfappr(x, 10, 0); v = cfappr(x, 10, 1);
|
||||
; print u, v, x - u, v - x, v - u, cfappr(x, 10, 16)
|
||||
10/7 13/9 1/210 1/90 1/63 10/7
|
||||
|
||||
> pi = pi(1e-10)
|
||||
> print cfappr(pi, 100, 16), cfappr(pi, .01, 16), cfappr(pi, 1e-6, 16)
|
||||
; pi = pi(1e-10)
|
||||
; print cfappr(pi, 100, 16), cfappr(pi, .01, 16), cfappr(pi, 1e-6, 16)
|
||||
311/99 22/7 355/113
|
||||
|
||||
> x = 17/12; u = cfappr(x,4,0); v = cfappr(x,4,1);
|
||||
> print u, v, x - u, v - x, cfappr(x,4,16)
|
||||
; x = 17/12; u = cfappr(x,4,0); v = cfappr(x,4,1);
|
||||
; print u, v, x - u, v - x, cfappr(x,4,16)
|
||||
4/3 3/2 1/12 1/12 3/2
|
||||
|
||||
LIMITS
|
||||
@@ -104,8 +104,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: cfappr,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cfappr,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cfappr,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 01:23:59
|
||||
|
12
help/cfsim
12
help/cfsim
@@ -95,13 +95,13 @@ DESCRIPTION
|
||||
cfsim(1/x, rnd) = 1/cfsim(x, rnd).
|
||||
|
||||
EXAMPLE
|
||||
> c = config("mode", "frac");
|
||||
; c = config("mode", "frac");
|
||||
|
||||
> print cfsim(43/30, 0), cfsim(43/30, 1), cfsim(43/30, 8), cfsim(43/30,16)
|
||||
; print cfsim(43/30, 0), cfsim(43/30, 1), cfsim(43/30, 8), cfsim(43/30,16)
|
||||
10/7 33/23 10/7 33/23
|
||||
|
||||
> x = pi(1e-20); c = config("mode", "frac");
|
||||
> while (!isint(x)) {x = cfsim(x,8); if (den(x) < 1e6) print x,:;}
|
||||
; x = pi(1e-20); c = config("mode", "frac");
|
||||
; while (!isint(x)) {x = cfsim(x,8); if (den(x) < 1e6) print x,:;}
|
||||
1146408/364913 312689/99532 104348/33215 355/113 22/7 3
|
||||
|
||||
LIMITS
|
||||
@@ -129,8 +129,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: cfsim,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cfsim,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cfsim,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 01:29:45
|
||||
|
@@ -14,7 +14,7 @@ DESCRIPTION
|
||||
the same value as j. For j = 0, returns the null string "".
|
||||
|
||||
EXAMPLE
|
||||
> print char(0102), char(0x6f), char(119), char(0145), char(0x6e)
|
||||
; print char(0102), char(0x6f), char(119), char(0145), char(0x6e)
|
||||
B o w e n
|
||||
|
||||
LIMITS
|
||||
@@ -42,8 +42,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: char,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: char,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/char,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 01:45:45
|
||||
|
12
help/cmp
12
help/cmp
@@ -92,16 +92,16 @@ DESCRIPTION
|
||||
for example, cmp(2, "2"), returns the null value.
|
||||
|
||||
EXAMPLE
|
||||
> print cmp(3,4), cmp(4,3), cmp(4,4), cmp("a","b"), cmp("abcd","abc")
|
||||
; print cmp(3,4), cmp(4,3), cmp(4,4), cmp("a","b"), cmp("abcd","abc")
|
||||
-1 1 0 -1 1
|
||||
|
||||
> print cmp(3,4i), cmp(4,4i), cmp(5,4i), cmp(-5,4i), cmp(-4i,5), cmp(-4i,-5)
|
||||
; print cmp(3,4i), cmp(4,4i), cmp(5,4i), cmp(-5,4i), cmp(-4i,5), cmp(-4i,-5)
|
||||
1-1i 1-1i 1-1i -1-1i -1-1i 1-1i
|
||||
|
||||
> print cmp(3i,4i), cmp(4i,4i), cmp(5i,4i), cmp(3+4i,5), cmp(3+4i,-5)
|
||||
; print cmp(3i,4i), cmp(4i,4i), cmp(5i,4i), cmp(3+4i,5), cmp(3+4i,-5)
|
||||
-1i 0 1i -1+1i 1+1i
|
||||
|
||||
> print cmp(3+4i,3+4i), cmp(3+4i,3-4i), cmp(3+4i,2+3i), cmp(3+4i,-4-5i)
|
||||
; print cmp(3+4i,3+4i), cmp(3+4i,3-4i), cmp(3+4i,2+3i), cmp(3+4i,-4-5i)
|
||||
0 1i 1+1i 1+1i
|
||||
|
||||
LIMITS
|
||||
@@ -130,8 +130,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: cmp,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cmp,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cmp,v $
|
||||
##
|
||||
## Under source code control: 1994/10/20 02:52:30
|
||||
|
@@ -21,10 +21,10 @@ DESCRIPTION
|
||||
may be chosen from x items ignoring the order in which they are chosen.
|
||||
|
||||
EXAMPLE
|
||||
> print comb(7,3), comb(7,4), comb(7,5), comb(3,0), comb(0,0)
|
||||
; print comb(7,3), comb(7,4), comb(7,5), comb(3,0), comb(0,0)
|
||||
35 35 21 1 1
|
||||
|
||||
> print comb(2^31+1,2^31-1)
|
||||
; print comb(2^31+1,2^31-1)
|
||||
2305843010287435776
|
||||
|
||||
LIMITS
|
||||
@@ -54,8 +54,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: comb,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: comb,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/comb,v $
|
||||
##
|
||||
## Under source code control: 1994/10/20 04:03:02
|
||||
|
65
help/command
65
help/command
@@ -18,6 +18,7 @@ Command sequence
|
||||
-----------------
|
||||
define function(params) { body }
|
||||
define function(params) = expression
|
||||
|
||||
This first form defines a full function which can consist
|
||||
of declarations followed by many statements which implement
|
||||
the function.
|
||||
@@ -42,16 +43,30 @@ Command sequence
|
||||
|
||||
read calc commands
|
||||
------------------
|
||||
read $var
|
||||
read -once $var
|
||||
read filename
|
||||
read -once filename
|
||||
|
||||
This reads definitions from the specified calc resource filename.
|
||||
|
||||
The name can be quoted if desired. The calculator uses the
|
||||
CALCPATH environment variable to search through the specified
|
||||
directories for the filename, similarly to the use of the
|
||||
PATH environment variable. If CALCPATH is not defined,
|
||||
then a default path which is usually ":/usr/local/lib/calc"
|
||||
is used.
|
||||
In the 1st and 2nd forms, if var is a global variable string
|
||||
value, then the value of that variable is used as a filename.
|
||||
|
||||
The following is equivalent to read lucas.cal or read "lucas.cal":
|
||||
|
||||
global var = "lucas.cal";
|
||||
read $var;
|
||||
|
||||
In the 3rd or 4th forms, the filename argument is treated
|
||||
as a literal string, not a variable. In these forms, the
|
||||
name can be quoted if desired.
|
||||
|
||||
The calculator uses the CALCPATH environment variable to
|
||||
search through the specified directories for the filename,
|
||||
similarly to the use of the PATH environment variable.
|
||||
If CALCPATH is not defined, then a default path which is
|
||||
usually ":/usr/local/lib/calc" is used.
|
||||
|
||||
The ".cal" extension is defaulted for input files, so that
|
||||
if "filename" is not found, then "filename.cal" is then
|
||||
@@ -76,7 +91,9 @@ Command sequence
|
||||
|
||||
write calc commands
|
||||
-------------------
|
||||
write $var
|
||||
write filename
|
||||
|
||||
This writes the values of all global variables to the
|
||||
specified filename, in such a way that the file can be
|
||||
later read in order to recreate the variable values.
|
||||
@@ -85,6 +102,19 @@ Command sequence
|
||||
matrices, lists, and objects are not saved. Function
|
||||
definitions are also not saved.
|
||||
|
||||
In the 1st form, if var is a global variable string
|
||||
value, then the value of that variable is used as a filename.
|
||||
|
||||
The following is equivalent to write dump.out or
|
||||
write "dump.out":
|
||||
|
||||
global var = "dump.out";
|
||||
write $var;
|
||||
|
||||
In the 2nd form, the filename argument is treated as a literal
|
||||
string, not a variable. In this form, the name can be quoted
|
||||
if desired.
|
||||
|
||||
If the -m mode disallows opening of files for writing,
|
||||
this command will be disabled.
|
||||
|
||||
@@ -95,6 +125,7 @@ Command sequence
|
||||
quit string
|
||||
exit
|
||||
exit string
|
||||
|
||||
The action of these commands depends on where they are used.
|
||||
At the interactive level, they will cause calc it edit.
|
||||
This is the normal way to leave the calculator. In any
|
||||
@@ -131,6 +162,7 @@ Command sequence
|
||||
-----
|
||||
abort
|
||||
abort string
|
||||
|
||||
This command behaves like QUIT except that it will attempt
|
||||
to return to the interactive level if permitted, otherwise
|
||||
calc exit.
|
||||
@@ -143,6 +175,7 @@ Command sequence
|
||||
------------------------
|
||||
cd
|
||||
cd dir
|
||||
|
||||
Change the current directory to 'dir'. If 'dir' is ommitted,
|
||||
change the current directory to the home directory, if $HOME
|
||||
is set in the environment.
|
||||
@@ -151,6 +184,7 @@ Command sequence
|
||||
show information
|
||||
----------------
|
||||
show item
|
||||
|
||||
This command displays some information where 'item' is
|
||||
one of the following:
|
||||
|
||||
@@ -185,11 +219,24 @@ Command sequence
|
||||
|
||||
calc help
|
||||
---------
|
||||
help
|
||||
help $var
|
||||
help name
|
||||
|
||||
This displays a help related to 'name' or general
|
||||
help of none is given.
|
||||
|
||||
In the 1st form, if var is a global variable string
|
||||
value, then the value of that variable is used as a name.
|
||||
|
||||
The following is equivalent to help command or help "command":
|
||||
|
||||
global var = "command";
|
||||
help $var;
|
||||
|
||||
In the 2nd form, the filename argument is treated as a literal
|
||||
string, not a variable. In this form, the name can be quoted
|
||||
if desired.
|
||||
|
||||
|
||||
=-=
|
||||
|
||||
@@ -323,8 +370,8 @@ Command sequence
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: command,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: command,v 29.3 2006/05/20 10:01:33 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/command,v $
|
||||
##
|
||||
## Under source code control: 1991/07/21 04:37:17
|
||||
|
@@ -28,7 +28,7 @@ DESCRIPTION
|
||||
conjugate of the corresponding component of a.
|
||||
|
||||
EXAMPLE
|
||||
> print conj(3), conj(3 + 4i)
|
||||
; print conj(3), conj(3 + 4i)
|
||||
3 3-4i
|
||||
|
||||
LIMITS
|
||||
@@ -56,8 +56,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: conj,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: conj,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/conj,v $
|
||||
##
|
||||
## Under source code control: 1995/10/03 10:40:01
|
||||
|
12
help/cos
12
help/cos
@@ -15,14 +15,14 @@ DESCRIPTION
|
||||
absolute value than .75 * eps.
|
||||
|
||||
EXAMPLE
|
||||
> print cos(1, 1e-5), cos(1, 1e-10), cos(1, 1e-15), cos(1, 1e-20)
|
||||
; print cos(1, 1e-5), cos(1, 1e-10), cos(1, 1e-15), cos(1, 1e-20)
|
||||
.5403 .5403023059 .54030230586814 .5403023058681397174
|
||||
|
||||
> print cos(2 + 3i, 1e-5), cos(2 + 3i, 1e-10)
|
||||
; print cos(2 + 3i, 1e-5), cos(2 + 3i, 1e-10)
|
||||
-4.18963-9.10923i -4.189625691-9.1092278938i
|
||||
|
||||
> pi = pi(1e-20)
|
||||
> print cos(pi/3, 1e-10), cos(pi/2, 1e-10), cos(pi, 1e-10)
|
||||
; pi = pi(1e-20)
|
||||
; print cos(pi/3, 1e-10), cos(pi/2, 1e-10), cos(pi, 1e-10)
|
||||
.5 0 -1
|
||||
|
||||
LIMITS
|
||||
@@ -51,8 +51,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cos,v 29.3 2005/10/18 10:48:29 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: cos,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cos,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:27
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
cosh(x) = (exp(x) + exp(-x))/2
|
||||
|
||||
EXAMPLE
|
||||
> print cosh(1, 1e-5), cosh(1, 1e-10), cosh(1, 1e-15), cosh(1, 1e-20)
|
||||
; print cosh(1, 1e-5), cosh(1, 1e-10), cosh(1, 1e-15), cosh(1, 1e-20)
|
||||
1.54308 1.5430806348 1.543080634815244 1.54308063481524377848
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: cosh,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cosh,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cosh,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:28
|
||||
|
6
help/cot
6
help/cot
@@ -15,7 +15,7 @@ DESCRIPTION
|
||||
in absolute value than .75 * eps.
|
||||
|
||||
EXAMPLE
|
||||
> print cot(1, 1e-5), cot(1, 1e-10), cot(1, 1e-15), cot(1, 1e-20)
|
||||
; print cot(1, 1e-5), cot(1, 1e-10), cot(1, 1e-15), cot(1, 1e-20)
|
||||
.64209 .6420926159 .642092615934331 .64209261593433070301
|
||||
|
||||
LIMITS
|
||||
@@ -43,8 +43,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: cot,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cot,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cot,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
coth(x) = (exp(2*x) + 1)/(exp(2*x) - 1)
|
||||
|
||||
EXAMPLE
|
||||
> print coth(1, 1e-5), coth(1, 1e-10), coth(1, 1e-15), coth(1, 1e-20)
|
||||
; print coth(1, 1e-5), coth(1, 1e-10), coth(1, 1e-15), coth(1, 1e-20)
|
||||
1.31304 1.3130352855 1.313035285499331 1.31303528549933130364
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: coth,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: coth,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/coth,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
10
help/count
10
help/count
@@ -16,9 +16,9 @@ DESCRIPTION
|
||||
tests as "true".
|
||||
|
||||
EXAMPLE
|
||||
> define f(a) = (a < 5)
|
||||
> A = list(1,2,7,6,4,8)
|
||||
> count(A, "f")
|
||||
; define f(a) = (a < 5)
|
||||
; A = list(1,2,7,6,4,8)
|
||||
; count(A, "f")
|
||||
3
|
||||
|
||||
LIMITS
|
||||
@@ -46,8 +46,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: count,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: count,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/count,v $
|
||||
##
|
||||
## Under source code control: 1995/07/10 02:09:31
|
||||
|
10
help/cp
10
help/cp
@@ -17,9 +17,9 @@ DESCRIPTION
|
||||
{x1 * y2 - x2 * y1, x3 * y1 - x1 * y3, x1 * y2 - x2 * y1}
|
||||
|
||||
EXAMPLE
|
||||
> mat x[3] = {2,3,4}
|
||||
> mat y[3] = {3,4,5}
|
||||
> print cp(x,y)
|
||||
; mat x[3] = {2,3,4}
|
||||
; mat y[3] = {3,4,5}
|
||||
; print cp(x,y)
|
||||
|
||||
mat [3] (3 elements, 3 nonzero):
|
||||
[0] = -1
|
||||
@@ -52,8 +52,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: cp,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cp,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cp,v $
|
||||
##
|
||||
## Under source code control: 1995/10/05 04:52:26
|
||||
|
6
help/csc
6
help/csc
@@ -15,7 +15,7 @@ DESCRIPTION
|
||||
in absolute value than .75 * eps.
|
||||
|
||||
EXAMPLE
|
||||
> print csc(1, 1e-5), csc(1, 1e-10), csc(1, 1e-15), csc(1, 1e-20)
|
||||
; print csc(1, 1e-5), csc(1, 1e-10), csc(1, 1e-15), csc(1, 1e-20)
|
||||
1.1884 1.1883951058 1.188395105778121 1.18839510577812121626
|
||||
|
||||
LIMITS
|
||||
@@ -43,8 +43,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: csc,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: csc,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/csc,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
csch(x) = 2/(exp(x) - exp(-x))
|
||||
|
||||
EXAMPLE
|
||||
> print csch(1, 1e-5), csch(1, 1e-10), csch(1, 1e-15), csch(1, 1e-20)
|
||||
; print csch(1, 1e-5), csch(1, 1e-10), csch(1, 1e-15), csch(1, 1e-20)
|
||||
.85092 .8509181282 .850918128239322 .85091812823932154513
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: csch,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: csch,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/csch,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -16,7 +16,7 @@ DESCRIPTION
|
||||
The 25th ctime() character, '\n' is removed.
|
||||
|
||||
EXAMPLE
|
||||
> printf("The time is now %s.\n", ctime())
|
||||
; printf("The time is now %s.\n", ctime())
|
||||
The time is now Mon Apr 15 12:41:44 1996.
|
||||
|
||||
LIMITS
|
||||
@@ -44,8 +44,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: ctime,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: ctime,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/ctime,v $
|
||||
##
|
||||
## Under source code control: 1996/04/30 03:05:18
|
||||
|
10
help/custom
10
help/custom
@@ -70,19 +70,19 @@ DESCRIPTION
|
||||
EXAMPLE
|
||||
If calc compiled with ALLOW_CUSTOM= (custom disabled):
|
||||
|
||||
> print custom("sysinfo", "baseb")
|
||||
; print custom("sysinfo", "baseb")
|
||||
Calc was built with custom functions disabled
|
||||
Error 10195
|
||||
|
||||
If calc compiled with ALLOW_CUSTOM= -DCUSTOM and is invoked without -C:
|
||||
|
||||
> print custom("sysinfo", "baseb")
|
||||
; print custom("sysinfo", "baseb")
|
||||
Calc must be run with a -C argument to use custom function
|
||||
Error 10194
|
||||
|
||||
If calc compiled with ALLOW_CUSTOM= -DCUSTOM and is invoked with -C:
|
||||
|
||||
> print custom("sysinfo", "baseb")
|
||||
; print custom("sysinfo", "baseb")
|
||||
32
|
||||
|
||||
LIMITS
|
||||
@@ -110,8 +110,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: custom,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: custom,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/custom,v $
|
||||
##
|
||||
## Under source code control: 1997/03/09 16:33:22
|
||||
|
@@ -166,8 +166,8 @@ DESCRIPTION
|
||||
matrices or objects.
|
||||
|
||||
EXAMPLE
|
||||
> define f(a,b) = 2*a + b;
|
||||
> define g(alpha, beta)
|
||||
; define f(a,b) = 2*a + b;
|
||||
; define g(alpha, beta)
|
||||
>> {
|
||||
>> local a, pi2;
|
||||
>>
|
||||
@@ -207,8 +207,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: define,v 29.3 2000/07/17 15:36:26 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: define,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/define,v $
|
||||
##
|
||||
##
|
||||
|
10
help/delete
10
help/delete
@@ -15,7 +15,7 @@ DESCRIPTION
|
||||
the value of this element.
|
||||
|
||||
EXAMPLE
|
||||
> lst = list(2,3,4,5)
|
||||
; lst = list(2,3,4,5)
|
||||
|
||||
list (4 elements, 4 nonzero):
|
||||
[[0]] = 2
|
||||
@@ -23,9 +23,9 @@ EXAMPLE
|
||||
[[2]] = 4
|
||||
[[3]] = 5
|
||||
|
||||
> delete(lst, 2)
|
||||
; delete(lst, 2)
|
||||
4
|
||||
> print lst
|
||||
; print lst
|
||||
|
||||
list (3 elements, 3 nonzero):
|
||||
[[0]] = 2
|
||||
@@ -57,8 +57,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: delete,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: delete,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/delete,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 03:13:18
|
||||
|
6
help/den
6
help/den
@@ -26,7 +26,7 @@ DESCRIPTION
|
||||
The denominator for this n/d is d.
|
||||
|
||||
EXAMPLE
|
||||
> print den(7), den(-1.25), den(121/33)
|
||||
; print den(7), den(-1.25), den(121/33)
|
||||
1 4 3
|
||||
|
||||
LIMITS
|
||||
@@ -54,8 +54,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: den,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: den,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/den,v $
|
||||
##
|
||||
## Under source code control: 1995/10/05 04:52:26
|
||||
|
@@ -58,18 +58,18 @@ DESCRIPTION
|
||||
**c returns the lvalue a; ***c returns the value of a.
|
||||
|
||||
EXAMPLE
|
||||
> mat A[3] = {1,2,3}
|
||||
> p = &A[0]
|
||||
> print *p, *(p + 1), *(p + 2)
|
||||
; mat A[3] = {1,2,3}
|
||||
; p = &A[0]
|
||||
; print *p, *(p + 1), *(p + 2)
|
||||
1 2 3
|
||||
|
||||
> *(p + 1) = 4
|
||||
> print A[1]
|
||||
; *(p + 1) = 4
|
||||
; print A[1]
|
||||
4
|
||||
|
||||
> A[0] = &a
|
||||
> a = 7
|
||||
> print **p
|
||||
; A[0] = &a
|
||||
; a = 7
|
||||
; print **p
|
||||
7
|
||||
|
||||
LIMITS
|
||||
@@ -97,8 +97,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: dereference,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: dereference,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/dereference,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:34
|
||||
|
36
help/det
36
help/det
@@ -37,25 +37,25 @@ DESCRIPTION
|
||||
- (a * h - g * b) * (a * f - d * c))/a.
|
||||
|
||||
EXAMPLE
|
||||
> mat A[3,3] = {2, 3, 5, 7, 11, 13, 17, 19, 23}
|
||||
> c = config("mode", "frac")
|
||||
> print det(A), det(A^2), det(A^3), det(A^-1)
|
||||
; mat A[3,3] = {2, 3, 5, 7, 11, 13, 17, 19, 23}
|
||||
; c = config("mode", "frac")
|
||||
; print det(A), det(A^2), det(A^3), det(A^-1)
|
||||
-78 6084 -474552 -1/78
|
||||
|
||||
> obj res {r}
|
||||
> global md
|
||||
> define res_test(a) = !ismult(a.r, md)
|
||||
> define res_sub(a,b) {local obj res v = {(a.r - b.r) % md}; return v;}
|
||||
> define res_mul(a,b) {local obj res v = {(a.r * b.r) % md}; return v;}
|
||||
> define res_neg(a) {local obj res v = {(-a.r) % md}; return v;}
|
||||
> define res(x) {local obj res v = {x % md}; return v;}
|
||||
> md = 0
|
||||
> mat A[2,2] = {res(2), res(3), res(5), res(7)}
|
||||
> md = 5
|
||||
> print det(A)
|
||||
; obj res {r}
|
||||
; global md
|
||||
; define res_test(a) = !ismult(a.r, md)
|
||||
; define res_sub(a,b) {local obj res v = {(a.r - b.r) % md}; return v;}
|
||||
; define res_mul(a,b) {local obj res v = {(a.r * b.r) % md}; return v;}
|
||||
; define res_neg(a) {local obj res v = {(-a.r) % md}; return v;}
|
||||
; define res(x) {local obj res v = {x % md}; return v;}
|
||||
; md = 0
|
||||
; mat A[2,2] = {res(2), res(3), res(5), res(7)}
|
||||
; md = 5
|
||||
; print det(A)
|
||||
obj res {4}
|
||||
> md = 6
|
||||
> print det(A)
|
||||
; md = 6
|
||||
; print det(A)
|
||||
obj res {5}
|
||||
|
||||
Note that if A had been a 3 x 3 or larger matrix, res_div(a,b) for
|
||||
@@ -89,8 +89,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: det,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: det,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/det,v $
|
||||
##
|
||||
## Under source code control: 1995/11/28 11:17:47
|
||||
|
12
help/digits
12
help/digits
@@ -29,16 +29,16 @@ DESCRIPTION
|
||||
digits(-0.123) == 1 combination of all of the above
|
||||
|
||||
EXAMPLE
|
||||
> print digits(100), digits(23209), digits(2^72)
|
||||
; print digits(100), digits(23209), digits(2^72)
|
||||
3 5 22
|
||||
|
||||
> print digits(0), digits(1), digits(-1)
|
||||
; print digits(0), digits(1), digits(-1)
|
||||
1 1 1
|
||||
|
||||
> print digits(-1234), digits(12.3456), digits(107.207)
|
||||
; print digits(-1234), digits(12.3456), digits(107.207)
|
||||
4 2 3
|
||||
|
||||
> print digits(17^463-1, 17), digits(10000, 100), digits(21701, 2)
|
||||
; print digits(17^463-1, 17), digits(10000, 100), digits(21701, 2)
|
||||
3, 15 14
|
||||
|
||||
LIMITS
|
||||
@@ -66,8 +66,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: digits,v 29.5 2003/01/26 19:41:35 chongo Exp $
|
||||
## @(#) $Revision: 29.6 $
|
||||
## @(#) $Id: digits,v 29.6 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/digits,v $
|
||||
##
|
||||
## Under source code control: 1995/10/03 10:40:01
|
||||
|
10
help/display
10
help/display
@@ -36,13 +36,13 @@ DESCRIPTION
|
||||
the type of rounding to be used is controlled by config("outround").
|
||||
|
||||
EXAMPLE
|
||||
> print display(), 2/3
|
||||
; print display(), 2/3
|
||||
20 ~0.66666666666666666667
|
||||
|
||||
> print display(40), 2/3
|
||||
; print display(40), 2/3
|
||||
20 ~0.6666666666666666666666666666666666666667
|
||||
|
||||
> print display(5), 2/3
|
||||
; print display(5), 2/3
|
||||
40 ~0.66667
|
||||
|
||||
LIMITS
|
||||
@@ -70,8 +70,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.1 $
|
||||
## @(#) $Id: display,v 29.1 2004/07/26 06:54:41 chongo Exp $
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: display,v 29.2 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/display,v $
|
||||
##
|
||||
## Under source code control: 2004/07/25 23:50:40
|
||||
|
10
help/dp
10
help/dp
@@ -22,9 +22,9 @@ DESCRIPTION
|
||||
x0*y0 + x1*y1 + ... + xn*yn
|
||||
|
||||
EXAMPLE
|
||||
> mat x[3] = {2,3,4}
|
||||
> mat y[1:3] = {3,4,5}
|
||||
> print dp(x,y)
|
||||
; mat x[3] = {2,3,4}
|
||||
; mat y[1:3] = {3,4,5}
|
||||
; print dp(x,y)
|
||||
38
|
||||
|
||||
LIMITS
|
||||
@@ -52,8 +52,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: dp,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: dp,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/dp,v $
|
||||
##
|
||||
## Under source code control: 1995/10/05 04:52:26
|
||||
|
@@ -3,8 +3,9 @@ Environment variables
|
||||
CALCPATH
|
||||
|
||||
A :-separated list of directories used to search for
|
||||
resource filenames (*.cal files) that do not begin with
|
||||
/, ./ or ~.
|
||||
resource filenames (*.cal files) that do not begin with:
|
||||
|
||||
/ ./ ../ ~
|
||||
|
||||
If this variable does not exist, a compiled value
|
||||
is used. Typically compiled in value is:
|
||||
@@ -104,8 +105,8 @@ Environment variables
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: environment,v 29.3 2004/07/26 07:10:43 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: environment,v 29.4 2006/05/07 07:22:20 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/environment,v $
|
||||
##
|
||||
## Under source code control: 1991/07/23 05:47:25
|
||||
|
10
help/epsilon
10
help/epsilon
@@ -19,9 +19,9 @@ DESCRIPTION
|
||||
the functions appr(x, eps, rnd), sqrt(x, eps, rnd), etc.
|
||||
|
||||
EXAMPLE
|
||||
> oldeps = epsilon(1e-6)
|
||||
> print epsilon(), sqrt(2), epsilon(1e-4), sqrt(2), epsilon(oldeps)
|
||||
> .000001 1.414214 .000001 1.4142 .0001
|
||||
; oldeps = epsilon(1e-6)
|
||||
; print epsilon(), sqrt(2), epsilon(1e-4), sqrt(2), epsilon(oldeps)
|
||||
; .000001 1.414214 .000001 1.4142 .0001
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -49,8 +49,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: epsilon,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: epsilon,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/epsilon,v $
|
||||
##
|
||||
## Under source code control: 1995/10/05 04:52:26
|
||||
|
@@ -28,12 +28,12 @@ DESCRIPTION
|
||||
errcount.
|
||||
|
||||
EXAMPLE
|
||||
> errmax(10)
|
||||
; errmax(10)
|
||||
0
|
||||
> errcount()
|
||||
; errcount()
|
||||
0
|
||||
> a = 1/0; b = 2 + ""; c = error(27); d = newerror("a");
|
||||
> print errcount(), a, errcount(), errmax();
|
||||
; a = 1/0; b = 2 + ""; c = error(27); d = newerror("a");
|
||||
; print errcount(), a, errcount(), errmax();
|
||||
4 Error 10001 4 10
|
||||
|
||||
LIMITS
|
||||
@@ -43,9 +43,10 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
errmax, error, strerror, iserror, errno, newerror, errorcodes
|
||||
errmax, error, strerror, iserror, errno, newerror, errorcodes,
|
||||
stoponerror
|
||||
|
||||
## 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
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -61,8 +62,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: errcount,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: errcount,v 29.4 2006/05/21 07:31:35 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errcount,v $
|
||||
##
|
||||
## Under source code control: 1997/03/08 08:51:14
|
||||
|
32
help/errmax
32
help/errmax
@@ -13,33 +13,39 @@ DESCRIPTION
|
||||
Without an argument, errmax() returns the current value of an
|
||||
internal variable errmax. Calling errmax(num) returns this value
|
||||
but then resets its value to num. Execution is aborted if
|
||||
evaluation of an error value if this makes errcount > errmax.
|
||||
An error message displays the errno for the error.
|
||||
evaluation of an error value if this makes errcount > errmax
|
||||
and errmax is >= 0.
|
||||
|
||||
When errmax is -1, there is no limit on the number of errors.
|
||||
|
||||
EXAMPLE
|
||||
> errmax(2)
|
||||
; errmax(2)
|
||||
0
|
||||
> errcount()
|
||||
; errcount()
|
||||
0
|
||||
> a = 1/0; b = 2 + ""; c = error(27); d = newerror("alpha");
|
||||
; a = 1/0; b = 2 + ""; c = error(27); d = newerror("alpha");
|
||||
Error 27 caused errcount to exceed errmax
|
||||
|
||||
> print c, d
|
||||
## Here global variables c and d were created when compiling the line
|
||||
## but execution was aborted before the intended assignments to c and d.
|
||||
|
||||
; print c, d
|
||||
0 0
|
||||
|
||||
Here global variables c and d were created when compiling the line
|
||||
but execution was aborted before the intended assignments to c and d.
|
||||
; errmax(-1)
|
||||
2
|
||||
|
||||
LIMITS
|
||||
0 <= num < 2^32
|
||||
-1 <= num <= 2147483647
|
||||
|
||||
LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
errcount, error, strerror, iserror, errno, newerror, errorcodes
|
||||
errcount, error, strerror, iserror, errno, newerror, errorcodes,
|
||||
stoponerror
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 2006 Landon Curt Noll
|
||||
##
|
||||
## 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
|
||||
@@ -55,8 +61,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: errmax,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.6 $
|
||||
## @(#) $Id: errmax,v 29.6 2006/05/21 07:31:35 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errmax,v $
|
||||
##
|
||||
## Under source code control: 1997/03/08 08:51:14
|
||||
|
21
help/errno
21
help/errno
@@ -33,15 +33,15 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
Assuming there is no file with name "not_a_file"
|
||||
> errno(0)
|
||||
> errmax(errcount()+4)
|
||||
; errno(0)
|
||||
; errmax(errcount()+4)
|
||||
0
|
||||
> badfile = fopen("not_a_file", "r")
|
||||
> print errno(), error(), strerror()
|
||||
; badfile = fopen("not_a_file", "r")
|
||||
; print errno(), error(), strerror()
|
||||
2 System error 2 No such file or directory
|
||||
|
||||
> a = 1/0
|
||||
> print errno(), error(), strerror()
|
||||
; a = 1/0
|
||||
; print errno(), error(), strerror()
|
||||
10001 Error 10001 Division by zero
|
||||
|
||||
LIMITS
|
||||
@@ -51,9 +51,10 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
errmax, errcount, error, strerror, iserror, newerror, errorcodes
|
||||
errmax, errcount, error, strerror, iserror, newerror, errorcodes,
|
||||
stoponerror
|
||||
|
||||
## 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
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -69,8 +70,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: errno,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: errno,v 29.4 2006/05/21 07:31:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errno,v $
|
||||
##
|
||||
## Under source code control: 1994/10/27 03:05:08
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user