mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Compare commits
26 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
ca0dd4560b | ||
|
f62d9fa1e6 | ||
|
253b47942f | ||
|
c773ee736f | ||
|
7d0cc52afe | ||
|
2441df7fdc | ||
|
5c565a7cea | ||
|
810e541281 | ||
|
ee30d787ea | ||
|
4e92927183 | ||
|
fb4a03c1f1 | ||
|
81a523043e | ||
|
2c0d0bbc1b | ||
|
a7147039ee | ||
|
6fa83e417e | ||
|
c335809b5f | ||
|
ee99adf8ca | ||
|
87570b56fe | ||
|
afe37ec851 | ||
|
bd3086138b | ||
|
9d62873a02 | ||
|
23a5fc3ede | ||
|
58d94b08d8 | ||
|
7165fa17c7 | ||
|
64a732b678 | ||
|
a6a37f9cad |
199
BUGS
199
BUGS
@@ -47,7 +47,7 @@ When you send your report, please include the following information:
|
|||||||
|
|
||||||
* a description of the problem
|
* a description of the problem
|
||||||
* the version of calc you are using (if you cannot get calc
|
* the version of calc you are using (if you cannot get calc
|
||||||
it to run, then send us the 4 #define lines from version.c)
|
to run, then send us the 4 #define lines from version.c)
|
||||||
* if you modified calc from an official patch, send me the mods you made
|
* if you modified calc from an official patch, send me the mods you made
|
||||||
* the type of system you were using
|
* the type of system you were using
|
||||||
* the type of compiler you were using
|
* the type of compiler you were using
|
||||||
@@ -72,183 +72,40 @@ Known bugs:
|
|||||||
us know! See the above for details on how to report and were to
|
us know! See the above for details on how to report and were to
|
||||||
EMail your bug reports and hopefully patches to fix them.
|
EMail your bug reports and hopefully patches to fix them.
|
||||||
|
|
||||||
Problems with known work-a-rounds:
|
=-=
|
||||||
|
|
||||||
* The gcc as shipped with Redhat 7 perhaps other Linux distributions
|
Problems that have known work-a-rounds:
|
||||||
has a bug causes calc to dump core on startup when calc is:
|
|
||||||
|
|
||||||
compiled optimized (-O, -O1, -O2 or -O3)
|
* There is a bug in gcc v4.1.0 that causes calc to fail the regression
|
||||||
|
test. The work-a-round is to compile with gcc v4.1.1 or later. This
|
||||||
|
problems was observed on Fedora 5.
|
||||||
|
|
||||||
AND
|
=-=
|
||||||
|
|
||||||
compiled with debugging (-g or -g3)
|
mis-features in calc:
|
||||||
|
|
||||||
AND
|
Some problems are not bugs but rarther mis-features / things that could
|
||||||
|
work better. The following is a list of mis-features that should be
|
||||||
|
addressed and improved someday.
|
||||||
|
|
||||||
when calc is compiled with readline (see USE_READLINE,
|
* When statement is of the form { ... }, the leading { MUST BE ON
|
||||||
READLINE_LIB and READLINE_INCLUDE in the Makefile)
|
THE SAME LINE as the if, for, while or do keyword.
|
||||||
|
|
||||||
On Redhat, the gcc -v which has this problem is:
|
This works as expected:
|
||||||
|
|
||||||
gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-85)
|
if (expr) {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
there may be other gcc versions that also suffer this fate.
|
However this WILL NOT WORK AS EXPECTED:
|
||||||
|
|
||||||
The readlines associated with problem are:
|
if (expr)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
readline-4.1-5
|
This needs to be changed. See also "help statement", "help unexpected",
|
||||||
readline2.2.1-2.2.1-2
|
and "help todo".
|
||||||
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.
|
|
||||||
|
|
||||||
This bug has been observed on the Sparc and the PowerPC machine.
|
|
||||||
|
|
||||||
On the PowerPC with gcc-2.95 when compiled with -O2, the following
|
|
||||||
patch seems to help:
|
|
||||||
|
|
||||||
*** zfunc.c.orig Fri Feb 23 18:18:39 2001
|
|
||||||
--- zfunc.c Fri Feb 23 18:39:33 2001
|
|
||||||
***************
|
|
||||||
*** 1481,1487 ****
|
|
||||||
{
|
|
||||||
HALF *a, *A, *b, *a0, u;
|
|
||||||
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
|
|
||||||
! FULL d, e, f, g, h, s, t, x, topbit;
|
|
||||||
int remsign;
|
|
||||||
BOOL up, onebit;
|
|
||||||
ZVALUE sqrt;
|
|
||||||
--- 1481,1488 ----
|
|
||||||
{
|
|
||||||
HALF *a, *A, *b, *a0, u;
|
|
||||||
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
|
|
||||||
! volatile FULL d;
|
|
||||||
! FULL e, f, g, h, s, t, x, topbit;
|
|
||||||
int remsign;
|
|
||||||
BOOL up, onebit;
|
|
||||||
ZVALUE sqrt;
|
|
||||||
*** zmath.c 2000/06/07 14:02:13 29.2
|
|
||||||
--- zmath.c 2001/03/13 19:47:03
|
|
||||||
***************
|
|
||||||
*** 1608,1614 ****
|
|
||||||
void
|
|
||||||
zbitvalue(long n, ZVALUE *res)
|
|
||||||
{
|
|
||||||
! ZVALUE z;
|
|
||||||
|
|
||||||
if (n < 0) n = 0;
|
|
||||||
z.sign = 0;
|
|
||||||
--- 1608,1614 ----
|
|
||||||
void
|
|
||||||
zbitvalue(long n, ZVALUE *res)
|
|
||||||
{
|
|
||||||
! volatile ZVALUE z;
|
|
||||||
|
|
||||||
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
|
|
||||||
support in gcc-2.96 is very unofficial and thus there is no
|
|
||||||
work-a-round for gcc-2-96.
|
|
||||||
|
|
||||||
There is a work-a-round for this architecture us one is using the
|
|
||||||
Solaris CC on the sparcv9. It has been reported that setting the
|
|
||||||
following Makefile variables will produce a working version of
|
|
||||||
calc on the sparcv9 under 64 bit Solaris:
|
|
||||||
|
|
||||||
LCC="cc -xarch=v9"
|
|
||||||
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.
|
|
||||||
|
|
||||||
* The chi.cal resource file does not work well with odd degrees
|
* The chi.cal resource file does not work well with odd degrees
|
||||||
of freedom. Can someone improve this algorithm?
|
of freedom. Can someone improve this algorithm?
|
||||||
@@ -272,7 +129,7 @@ Problems with known work-a-rounds:
|
|||||||
|
|
||||||
will not.
|
will not.
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2007 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -286,10 +143,10 @@ Problems with known work-a-rounds:
|
|||||||
## A copy of version 2.1 of the GNU Lesser General Public License is
|
## 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
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.17 $
|
## @(#) $Revision: 30.1 $
|
||||||
## @(#) $Id: BUGS,v 29.17 2001/12/31 22:12:35 chongo Exp $
|
## @(#) $Id: BUGS,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1994/03/18 14:06:13
|
## Under source code control: 1994/03/18 14:06:13
|
||||||
|
22
COPYING
22
COPYING
@@ -12,8 +12,8 @@ This file is Copyrighted
|
|||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
# @(#) $Revision: 29.7 $
|
# @(#) $Revision: 30.1 $
|
||||||
# @(#) $Id: COPYING,v 29.7 2003/02/26 16:54:59 chongo Exp $
|
# @(#) $Id: COPYING,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
@@ -45,12 +45,12 @@ Calc is covered by the GNU Lesser General Public License
|
|||||||
Public License by the calc command: help copying-lgpl
|
Public License by the calc command: help copying-lgpl
|
||||||
|
|
||||||
You should have received a copy of the version 2.1 GNU Lesser General
|
You should have received a copy of the version 2.1 GNU Lesser General
|
||||||
Public License with calc; if not, write to:
|
Public License with calc; if not, write to the following address:
|
||||||
|
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
59 Temple Place
|
51 Franklin Street
|
||||||
Suite 330
|
Fifth Floor
|
||||||
Boston, MA 02111-1307
|
Boston, MA 02110-1301
|
||||||
USA
|
USA
|
||||||
|
|
||||||
The contact addresses for calc is as follows:
|
The contact addresses for calc is as follows:
|
||||||
@@ -170,7 +170,7 @@ Calc copyrights and exception files
|
|||||||
|
|
||||||
shs1.c shs1.h shs.c shs.h
|
shs1.c shs1.h shs.c shs.h
|
||||||
md5.c md5.h COPYING COPYING-LGPL
|
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
|
The file COPYING-LGPL, which contains a copy of the version 2.1
|
||||||
GNU Lesser General Public License, is itself Copyrighted by the
|
GNU Lesser General Public License, is itself Copyrighted by the
|
||||||
@@ -182,9 +182,11 @@ Calc copyrights and exception files
|
|||||||
top of this file. It is important to note that you may distribute
|
top of this file. It is important to note that you may distribute
|
||||||
verbatim copies of this file but you may not modify this file.
|
verbatim copies of this file but you may not modify this file.
|
||||||
|
|
||||||
Some of these exception files are in the public domain. Other
|
Some of these exception files are in the public domain. The md5.c
|
||||||
exception files have non-LGPL Copyrights. Other files are under a
|
and md5.h files were "derived from the RSA Data Security, Inc. MD5
|
||||||
LGPL Copyright but have different authors.
|
Message-Digest Algorithm" and are under a copyright that allows these
|
||||||
|
two files to be freely used and distributed. Other files are under
|
||||||
|
the LGPL but have different authors that those listed above.
|
||||||
|
|
||||||
In all cases one may use and distribute these exception files freely.
|
In all cases one may use and distribute these exception files freely.
|
||||||
And because one may freely distribute the LGPL covered files, the
|
And because one may freely distribute the LGPL covered files, the
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
Version 2.1, February 1999
|
Version 2.1, February 1999
|
||||||
|
|
||||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
@@ -476,7 +476,7 @@ convey the exclusion of warranty; and each file should have at least the
|
|||||||
This library is free software; you can redistribute it and/or
|
This library is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU Lesser General Public
|
modify it under the terms of the GNU Lesser General Public
|
||||||
License as published by the Free Software Foundation; either
|
License as published by the Free Software Foundation; either
|
||||||
version 2 of the License, or (at your option) any later version.
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
This library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
@@ -485,7 +485,7 @@ convey the exclusion of warranty; and each file should have at least the
|
|||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
You should have received a copy of the GNU Lesser General Public
|
||||||
License along with this library; if not, write to the Free Software
|
License along with this library; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
@@ -27,6 +27,20 @@ Installing calc from the gziped tarball in 4 easy steps:
|
|||||||
|
|
||||||
1) Look at the makefile, and adjust it to suit your needs.
|
1) Look at the makefile, and adjust it to suit your needs.
|
||||||
|
|
||||||
|
The top level Makefile and the custom/Makefile require a GNU
|
||||||
|
Make (such as gmake) or an equivalently advanced make. On many
|
||||||
|
targets, the default make is sufficent. On FreeBSD for example,
|
||||||
|
one must use gmake instead of make.
|
||||||
|
|
||||||
|
If your target system does not have GNU Make (or equivalent), then
|
||||||
|
you should try using the Makefile.simple and custom/Makefile.simple
|
||||||
|
files:
|
||||||
|
|
||||||
|
mv Makefile Makefile.gmake
|
||||||
|
cp Makefile.simple Makefile
|
||||||
|
mv custom/Makefile custom/Makefile.gmake
|
||||||
|
cp custom/Makefile.simple custom/Makefile
|
||||||
|
|
||||||
The Makefile, as shipped, is suitable for installation under
|
The Makefile, as shipped, is suitable for installation under
|
||||||
Linux and Un*x-like environments. For the most part, the default
|
Linux and Un*x-like environments. For the most part, the default
|
||||||
values should work. If in doubt, follow the 'When in doubt'
|
values should work. If in doubt, follow the 'When in doubt'
|
||||||
@@ -52,14 +66,14 @@ Installing calc from the gziped tarball in 4 easy steps:
|
|||||||
CALC_INCDIR where the calc include files are installed
|
CALC_INCDIR where the calc include files are installed
|
||||||
CUSTOMCALDIR where custom *.cal files are installed
|
CUSTOMCALDIR where custom *.cal files are installed
|
||||||
CUSTOMHELPDIR where custom help files are installed
|
CUSTOMHELPDIR where custom help files are installed
|
||||||
CUSTOMINCPDIR where custom .h files are installed
|
CUSTOMINCDIR where custom .h files are installed
|
||||||
SCRIPTDIR where calc shell scripts are installed
|
SCRIPTDIR where calc shell scripts are installed
|
||||||
|
|
||||||
If you want to install calc files under a top level directory,
|
If you want to install calc files under a top level directory,
|
||||||
then set the T value:
|
then set the T value:
|
||||||
|
|
||||||
The calc install is performed under $T, the calc build is
|
The calc install is performed under ${T}, the calc build is
|
||||||
performed under /. The purpose for $T is to allow someone
|
performed under /. The purpose for ${T} is to allow someone
|
||||||
to install calc somewhere other than into the system area.
|
to install calc somewhere other than into the system area.
|
||||||
|
|
||||||
For example, if:
|
For example, if:
|
||||||
@@ -79,10 +93,10 @@ Installing calc from the gziped tarball in 4 easy steps:
|
|||||||
calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||||
... etc ... /var/tmp/testing/...
|
... etc ... /var/tmp/testing/...
|
||||||
|
|
||||||
If $T is empty, calc is installed under /, which is the same
|
If ${T} is empty, calc is installed under /, which is the same
|
||||||
top of tree for which it was built. If $T is non-empty, then
|
top of tree for which it was built. If ${T} is non-empty, then
|
||||||
calc is installed under $T, as if one had to chroot under
|
calc is installed under ${T}, as if one had to chroot under
|
||||||
$T for calc to operate.
|
${T} for calc to operate.
|
||||||
|
|
||||||
Look for the section that starts:
|
Look for the section that starts:
|
||||||
|
|
||||||
@@ -126,12 +140,36 @@ Installing calc from the gziped tarball in 4 easy steps:
|
|||||||
|
|
||||||
2) build calc:
|
2) build calc:
|
||||||
|
|
||||||
|
The top level Makefile and the custom/Makefile require a GNU
|
||||||
|
Make (such as gmake) or an equivalently advanced make. On many
|
||||||
|
targets, the default make is sufficent. On FreeBSD for example,
|
||||||
|
one must use gmake instead of make.
|
||||||
|
|
||||||
|
If your target system does not have GNU Make (or equivalent), then
|
||||||
|
you should try using the Makefile.simple and custom/Makefile.simple
|
||||||
|
files:
|
||||||
|
|
||||||
|
mv Makefile Makefile.gmake
|
||||||
|
cp Makefile.simple Makefile
|
||||||
|
mv custom/Makefile custom/Makefile.gmake
|
||||||
|
cp custom/Makefile.simple custom/Makefile
|
||||||
|
|
||||||
make all
|
make all
|
||||||
|
|
||||||
==> We are interested in any compiler warnings (and errors) that
|
==> We are interested in any compiler warnings (and errors) that
|
||||||
you may find. See the BUGS file if you find any compiler
|
you may find. See the BUGS file if you find any compiler
|
||||||
warning or errors.
|
warning or errors.
|
||||||
|
|
||||||
|
NOTE: You can force calc to build with only static libs:
|
||||||
|
|
||||||
|
make clobber
|
||||||
|
make calc-static-only BLD_TYPE=calc-static-only
|
||||||
|
|
||||||
|
or force calc to build with only dynamic libs:
|
||||||
|
|
||||||
|
make clobber
|
||||||
|
make calc-dynamic-only BLD_TYPE=calc-dynamic-only
|
||||||
|
|
||||||
3) test calc:
|
3) test calc:
|
||||||
|
|
||||||
make check
|
make check
|
||||||
@@ -139,6 +177,10 @@ Installing calc from the gziped tarball in 4 easy steps:
|
|||||||
==> If you run into problems, read the BUGS file and follow
|
==> If you run into problems, read the BUGS file and follow
|
||||||
the instructions found in there.
|
the instructions found in there.
|
||||||
|
|
||||||
|
NOTE: For a quiet check which only prints if something goes wrong:
|
||||||
|
|
||||||
|
make chk
|
||||||
|
|
||||||
4) install calc:
|
4) install calc:
|
||||||
|
|
||||||
make install
|
make install
|
||||||
@@ -146,7 +188,7 @@ Installing calc from the gziped tarball in 4 easy steps:
|
|||||||
We suggest that you might want to read the README file and look at
|
We suggest that you might want to read the README file and look at
|
||||||
the calc help subsystem. See the README file for details.
|
the calc help subsystem. See the README file for details.
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2007 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -160,10 +202,10 @@ the calc help subsystem. See the README file for details.
|
|||||||
## A copy of version 2.1 of the GNU Lesser General Public License is
|
## 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
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.7 $
|
## @(#) $Revision: 30.5 $
|
||||||
## @(#) $Id: HOWTO.INSTALL,v 29.7 2003/04/15 03:38:34 chongo Exp $
|
## @(#) $Id: HOWTO.INSTALL,v 30.5 2007/09/01 19:54:03 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/HOWTO.INSTALL,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/HOWTO.INSTALL,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1999/09/27 20:48:44
|
## Under source code control: 1999/09/27 20:48:44
|
||||||
|
251
LIBRARY
251
LIBRARY
@@ -58,13 +58,18 @@ External programs most likely want to use the installed calc header
|
|||||||
files under ${INCDIRCALC}. External programs most likely NOT want
|
files under ${INCDIRCALC}. External programs most likely NOT want
|
||||||
to define CALC_SRC.
|
to define CALC_SRC.
|
||||||
|
|
||||||
|
You need to include the following file to get the symbols and variables
|
||||||
|
related to error handling:
|
||||||
|
|
||||||
|
lib_calc.h
|
||||||
|
|
||||||
External programs may want to compile with:
|
External programs may want to compile with:
|
||||||
|
|
||||||
-L${LIBDIR} -lcalc
|
-I${INCDIR} -L${LIBDIR} -lcalc
|
||||||
|
|
||||||
If custom functions are also used, they may want to compile with:
|
If custom functions are also used, they may want to compile with:
|
||||||
|
|
||||||
-L${LIBDIR} -lcalc -lcustcalc
|
-I${INCDIR} -L${LIBDIR} -lcalc -lcustcalc
|
||||||
|
|
||||||
The CALC_SRC symbol should NOT be defined by default. However if you are
|
The CALC_SRC symbol should NOT be defined by default. However if you are
|
||||||
feeling pedantic you may want to force CALC_SRC to be undefined:
|
feeling pedantic you may want to force CALC_SRC to be undefined:
|
||||||
@@ -73,71 +78,215 @@ feeling pedantic you may want to force CALC_SRC to be undefined:
|
|||||||
|
|
||||||
as well.
|
as well.
|
||||||
|
|
||||||
--------------
|
-------------------
|
||||||
ERROR HANDLING
|
MATH ERROR HANDLING
|
||||||
--------------
|
-------------------
|
||||||
|
|
||||||
Your program MUST provide a function called math_error. This is called by
|
The math_error() function is called by the math routines on an error
|
||||||
the math routines on an error condition, such as malloc failures or a
|
condition, such as malloc failures, division by zero, or some form of
|
||||||
division by zero. The routine is called in the manner of printf, with a
|
an internal computation error. The routine is called in the manner of
|
||||||
format string and optional arguments. (However, none of the low level math
|
printf, with a format string and optional arguments:
|
||||||
routines currently uses formatting, so if you are lazy you can simply use
|
|
||||||
the first argument as a simple error string.) For example, one of the
|
|
||||||
error calls you might expect to receive is:
|
|
||||||
|
|
||||||
math_error("Division by zero");
|
void math_error(char *fmt, ...);
|
||||||
|
|
||||||
Your program can handle errors in basically one of two ways. Firstly, it
|
Your program must handle math errors in one of three ways:
|
||||||
can simply print the error message and then exit. Secondly, you can make
|
|
||||||
use of setjmp and longjmp in your program. Use setjmp at some appropriate
|
|
||||||
level in your program, and use longjmp in the math_error routine to return
|
|
||||||
to that level and so recover from the error. This is what the calc program
|
|
||||||
does.
|
|
||||||
|
|
||||||
For convenience, the link library libcalc.a contains a math_error routine.
|
1) Print the error message and then exit
|
||||||
By default, this routine simply prints a message to stderr and then exits.
|
|
||||||
By simply linking in this link library, any calc errors will result in a
|
|
||||||
error message on stderr followed by an exit.
|
|
||||||
|
|
||||||
External programs that wish to use this math_error may want to compile with:
|
There is a math_error() function supplied with the calc library.
|
||||||
|
By default, this routine simply prints a message to stderr and
|
||||||
|
then exits. By simply linking in this link library, any calc
|
||||||
|
errors will result in a error message on stderr followed by
|
||||||
|
an exit.
|
||||||
|
|
||||||
-I${LIBDIR} -L${LIBDIR} -lcalc
|
2) Use setjmp and longjmp in your program
|
||||||
|
|
||||||
If one sets up calc_jmp_buf, and then sets calc_jmp to non-zero then
|
Use setjmp at some appropriate level in your program, and let
|
||||||
this routine will longjmp back (with the value of calc_jmp) instead.
|
the longjmp in math_error() return to that level and to allow you
|
||||||
In addition, the last calc error message will be found in calc_error;
|
to recover from the error. This is what the calc program does.
|
||||||
this error is not printed to stderr. The calc error message will
|
|
||||||
not have a trailing newline.
|
|
||||||
|
|
||||||
For example:
|
If one sets up calc_matherr_jmpbuf, and then sets
|
||||||
|
calc_use_matherr_jmpbuf to non-zero then math_error() will
|
||||||
|
longjmp back with the return value of calc_use_matherr_jmpbuf.
|
||||||
|
In addition, the last calc error message will be found in
|
||||||
|
calc_err_msg; this error is not printed to stderr. The calc
|
||||||
|
error message will not have a trailing newline.
|
||||||
|
|
||||||
#include <setjmp.h>
|
For example:
|
||||||
|
|
||||||
extern jmp_buf calc_jmp_buf;
|
#include <setjmp.h>
|
||||||
extern int calc_jmp;
|
#include "lib_calc.h"
|
||||||
extern char *calc_error;
|
|
||||||
int error;
|
|
||||||
|
|
||||||
...
|
int error;
|
||||||
|
|
||||||
if ((error = setjmp(calc_jmp_buf)) != 0) {
|
...
|
||||||
|
|
||||||
/* reinitialize calc after a longjmp */
|
if ((error = setjmp(calc_matherr_jmpbuf)) != 0) {
|
||||||
reinitialize();
|
|
||||||
|
/* report the error */
|
||||||
|
printf("Ouch: %s\n", calc_err_msg);
|
||||||
|
|
||||||
|
/* reinitialize calc after the longjmp */
|
||||||
|
reinitialize();
|
||||||
|
}
|
||||||
|
calc_use_matherr_jmpbuf = 1;
|
||||||
|
|
||||||
|
If calc_use_matherr_jmpbuf is non-zero, then the jmp_buf value
|
||||||
|
calc_matherr_jmpbuf must be initialized by the setjmp() function
|
||||||
|
or your program will crash.
|
||||||
|
|
||||||
|
3) Supply your own math_error function:
|
||||||
|
|
||||||
|
void math_error(char *fmt, ...);
|
||||||
|
|
||||||
|
Your math_error() function may exit or transfer control to outside
|
||||||
|
of the calc library, but it must never return or calc will crash.
|
||||||
|
|
||||||
|
External programs can obtain the appropriate calc symbols by compiling with:
|
||||||
|
|
||||||
|
-I${INCDIR} -L${LIBDIR} -lcalc
|
||||||
|
|
||||||
|
-------------------------
|
||||||
|
PARSE/SCAN ERROR HANDLING
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
The scanerror() function is called when calc encounters a parse/scan
|
||||||
|
error. For example, scanerror() is called when calc is given code
|
||||||
|
with a syntax error.
|
||||||
|
|
||||||
|
The variable, calc_print_scanerr_msg, controls if calc prints to stderr,
|
||||||
|
any parse/scan errors. By default, this variable it set to 1 and so
|
||||||
|
parse/scan errors are printed to stderr. By setting this value to zero,
|
||||||
|
parse/scan errors are not printed:
|
||||||
|
|
||||||
|
#include "lib_calc.h"
|
||||||
|
|
||||||
|
/* do not print parse/scan errors to stderr */
|
||||||
|
calc_print_scanerr_msg = 0;
|
||||||
|
|
||||||
|
The last calc math error or calc parse/scan error message is kept
|
||||||
|
in the NUL terminated buffer:
|
||||||
|
|
||||||
|
char calc_err_msg[MAXERROR+1];
|
||||||
|
|
||||||
|
The value of calc_print_scanerr_msg does not change the use
|
||||||
|
of the calc_err_msg[] buffer. Messages are stored in that
|
||||||
|
buffer regardless of the calc_print_scanerr_msg value.
|
||||||
|
|
||||||
|
The calc_print_scanerr_msg and the calc_err_msg[] buffer are declared
|
||||||
|
lib_calc.h include file. The initialized storage for these variables
|
||||||
|
comes from the calc library. The MAXERROR symbol is also declared in
|
||||||
|
the lib_calc.h include file.
|
||||||
|
|
||||||
|
Your program must handle parse/scan errors in one of two ways:
|
||||||
|
|
||||||
|
1) exit on error
|
||||||
|
|
||||||
|
If you do not setup the calc_scanerr_jmpbuf, then when calc
|
||||||
|
encounters a parse/scan error, a message will be printed to
|
||||||
|
stderr and calc will exit.
|
||||||
|
|
||||||
|
2) Use setjmp and longjmp in your program
|
||||||
|
|
||||||
|
Use setjmp at some appropriate level in your program, and let
|
||||||
|
the longjmp in scanerror() return to that level and to allow you
|
||||||
|
to recover from the error. This is what the calc program does.
|
||||||
|
|
||||||
|
If one sets up calc_scanerr_jmpbuf, and then sets
|
||||||
|
calc_use_scanerr_jmpbuf to non-zero then scanerror() will longjmp
|
||||||
|
back with the return with a non-zero code. In addition, the last
|
||||||
|
calc error message will be found in calc_err_msg[]; this error is
|
||||||
|
not printed to stderr. The calc error message will not have a
|
||||||
|
trailing newline.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
#include <setjmp.h>
|
||||||
|
#include "lib_calc.h"
|
||||||
|
|
||||||
|
int scan_error;
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
/* delay the printing of the parse/scan error */
|
||||||
|
calc_use_scanerr_jmpbuf = 0; /* this is optional */
|
||||||
|
|
||||||
|
if ((scan_error = setjmp(calc_scanerr_jmpbuf)) != 0) {
|
||||||
|
|
||||||
|
/* report the parse/scan */
|
||||||
|
if (calc_use_scanerr_jmpbuf == 0) {
|
||||||
|
printf("parse error: %s\n", calc_err_msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* initialize calc after the longjmp */
|
||||||
|
initialize();
|
||||||
|
}
|
||||||
|
calc_use_scanerr_jmpbuf = 1;
|
||||||
|
|
||||||
|
If calc_use_scanerr_jmpbuf is non-zero, then the jmp_buf value
|
||||||
|
calc_scanerr_jmpbuf must be initialized by the setjmp() function
|
||||||
|
or your program will crash.
|
||||||
|
|
||||||
|
External programs can obtain the appropriate calc symbols by compiling with:
|
||||||
|
|
||||||
|
-I${INCDIR} -L${LIBDIR} -lcalc
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
PARSE/SCAN WARNING HANDLING
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Calc parse/scan warning message are printed to stderr by the warning()
|
||||||
|
function. The routine is called in the manner of printf, with a format
|
||||||
|
string and optional arguments:
|
||||||
|
|
||||||
|
void warning(char *fmt, ...);
|
||||||
|
|
||||||
|
The variable, calc_print_scanwarn_msg, controls if calc prints to stderr,
|
||||||
|
any parse/scan warnings. By default, this variable it set to 1 and so
|
||||||
|
parse/scan warnings are printed to stderr. By setting this value to zero,
|
||||||
|
parse/scan warnings are not printed:
|
||||||
|
|
||||||
|
#include "lib_calc.h"
|
||||||
|
|
||||||
|
/* do not print parse/scan warnings to stderr */
|
||||||
|
calc_print_scanwarn_msg = 0;
|
||||||
|
|
||||||
|
The last calc calc parse/scan warning message is kept in the NUL
|
||||||
|
terminated buffer:
|
||||||
|
|
||||||
|
char calc_warn_msg[MAXERROR+1];
|
||||||
|
|
||||||
|
The value of calc_print_scanwarn_msg does not change the use
|
||||||
|
of the calc_warn_msg[] buffer. Messages are stored in that
|
||||||
|
buffer regardless of the calc_print_scanwarn_msg value.
|
||||||
|
|
||||||
|
Your program must handle parse/scan warnings in one of two ways:
|
||||||
|
|
||||||
|
1) print the warning to stderr and continue
|
||||||
|
|
||||||
|
The warning() from libcalc prints warning messages to
|
||||||
|
stderr and returns. The flow of execution is not changed.
|
||||||
|
This is what calc does by default.
|
||||||
|
|
||||||
|
2) Supply your own warning function:
|
||||||
|
|
||||||
|
void warning(char *fmt, ...);
|
||||||
|
|
||||||
|
Your warning function should simply return when it is finished.
|
||||||
|
|
||||||
|
External programs can obtain the appropriate calc symbols by compiling with:
|
||||||
|
|
||||||
|
-I${INCDIR} -L${LIBDIR} -lcalc
|
||||||
|
|
||||||
/* report the error */
|
|
||||||
printf("Ouch: %s\n", calc_error);
|
|
||||||
}
|
|
||||||
calc_jmp = 1;
|
|
||||||
|
|
||||||
---------------
|
---------------
|
||||||
OUTPUT ROUTINES
|
OUTPUT ROUTINES
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
The output from the routines in the link library normally goes to stdout. You
|
The output from the routines in the link library normally goes to stdout.
|
||||||
can divert that output to either another FILE handle, or else to a string.
|
You can divert that output to either another FILE handle, or else
|
||||||
Read the routines in zio.c to see what is available. Diversions can be
|
to a string. Read the routines in zio.c to see what is available.
|
||||||
nested.
|
Diversions can be nested.
|
||||||
|
|
||||||
You use math_setfp to divert output to another FILE handle. Calling
|
You use math_setfp to divert output to another FILE handle. Calling
|
||||||
math_setfp with stdout restores output to stdout.
|
math_setfp with stdout restores output to stdout.
|
||||||
@@ -487,10 +636,10 @@ need call libcalc_call_me_last() only once.
|
|||||||
## A copy of version 2.1 of the GNU Lesser General Public License is
|
## 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
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.5 $
|
## @(#) $Revision: 30.1 $
|
||||||
## @(#) $Id: LIBRARY,v 29.5 2001/06/08 22:57:35 chongo Exp $
|
## @(#) $Id: LIBRARY,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/LIBRARY,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/LIBRARY,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1993/07/30 19:44:49
|
## Under source code control: 1993/07/30 19:44:49
|
||||||
|
5544
Makefile.simple
Normal file
5544
Makefile.simple
Normal file
File diff suppressed because it is too large
Load Diff
6
README
6
README
@@ -132,10 +132,10 @@ The calc web site is located at:
|
|||||||
## A copy of version 2.1 of the GNU Lesser General Public License is
|
## 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
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.3 $
|
## @(#) $Revision: 30.1 $
|
||||||
## @(#) $Id: README,v 29.3 2001/06/01 11:26:53 chongo Exp $
|
## @(#) $Id: README,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1995/10/25 05:27:59
|
## Under source code control: 1995/10/25 05:27:59
|
||||||
|
@@ -27,7 +27,6 @@ recommends the following settings:
|
|||||||
TERMCONTROL= -DUSE_TERMIOS
|
TERMCONTROL= -DUSE_TERMIOS
|
||||||
BYTE_ORDER= -DLITTLE_ENDIAN
|
BYTE_ORDER= -DLITTLE_ENDIAN
|
||||||
LONG_BITS= 32
|
LONG_BITS= 32
|
||||||
LONGLONG_BITS= 64
|
|
||||||
HAVE_FPOS_POS= -DHAVE_NO_FPOS_POS
|
HAVE_FPOS_POS= -DHAVE_NO_FPOS_POS
|
||||||
FPOS_BITS= 32
|
FPOS_BITS= 32
|
||||||
OFF_T_BITS= 32
|
OFF_T_BITS= 32
|
||||||
@@ -57,7 +56,7 @@ recommends the following settings:
|
|||||||
CALCPATH= .;./cal;~/.cal;${CALC_SHAREDIR};${CUSTOMCALDIR}
|
CALCPATH= .;./cal;~/.cal;${CALC_SHAREDIR};${CUSTOMCALDIR}
|
||||||
CALCRC= ${CALC_SHAREDIR}/startup;~/.calcrc;./.calcinit
|
CALCRC= ${CALC_SHAREDIR}/startup;~/.calcrc;./.calcinit
|
||||||
CALCPAGER= less.exe -ci
|
CALCPAGER= less.exe -ci
|
||||||
DEBUG= -O2 -gstabs+
|
DEBUG= -O2 -gstabs+ -DWINDOZ
|
||||||
|
|
||||||
The 'Linux set' or 'gcc set' (see the Select your compiler type section)
|
The 'Linux set' or 'gcc set' (see the Select your compiler type section)
|
||||||
should work for DJGPP systems if you set the above Makefile variables.
|
should work for DJGPP systems if you set the above Makefile variables.
|
||||||
@@ -93,53 +92,28 @@ The major porting work was performed by Thomas Jones-Low
|
|||||||
tools. The make file provided with Calc is not compatible with
|
tools. The make file provided with Calc is not compatible with
|
||||||
NMAKE, so I used the Visual Studio tools to generate another one
|
NMAKE, so I used the Visual Studio tools to generate another one
|
||||||
(not included). Calc is built in two parts, calc.dll, which is the
|
(not included). Calc is built in two parts, calc.dll, which is the
|
||||||
library, and calcexe.exe which is the command line interface.
|
library, and calc.exe which is the command line interface.
|
||||||
|
|
||||||
He recommends that you generate by hand all of the header files generated
|
He recommended that you generate by hand all of the header files that
|
||||||
by the make file:
|
by the Makefile. This has been done for you via the makefile rule:
|
||||||
|
|
||||||
align32.h args.h calcerr.h conf.h endian_calc.h
|
make win32_hsrc
|
||||||
fposval.h have_const.h have_fpos.h have_fpos_pos.h have_malloc.h
|
|
||||||
have_memmv.h have_newstr.h have_offscl.h have_posscl.h
|
which uses the Makefile variables in win32.mkdef to form these header
|
||||||
have_stdlib.h have_string.h have_times.h have_uid_t.h
|
files under win32 directory.
|
||||||
have_unistd.h longbits.h longlong.h terminal.h
|
|
||||||
have_ustat.h have_getsid.h have_getpgid.h
|
|
||||||
have_gettime.h have_getprid.h have_urandom.h have_rusage.h
|
|
||||||
have_strdup.h
|
|
||||||
|
|
||||||
You will find generated versions of these files located in the win32
|
You will find generated versions of these files located in the win32
|
||||||
sub-directory. These files may be appropriate for your Cygwin building
|
sub-directory. These files may be appropriate for your Cygwin building
|
||||||
needs. Just copy the win32/*.[ch] files up into the top level calc
|
needs.
|
||||||
source directory, edited (if needed) and build using the Cygwin GCC
|
|
||||||
compiler.
|
|
||||||
|
|
||||||
People who maintain calc need to keep in mind the following:
|
In particular:
|
||||||
|
|
||||||
The following was added to opcodes.h, config.h, zmath.h and value.h:
|
Just copy the win32/*.[ch] files up into the top level calc
|
||||||
|
source directory, edit them (if needed) and build using the
|
||||||
#if defined(_WIN32)
|
Cygwin GCC compiler and Cygwin build environment.
|
||||||
#ifdef _EXPORTING
|
|
||||||
#define DLL __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define DLL __declspec(dllimport)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else /* Windoz free systems */
|
|
||||||
|
|
||||||
#define DLL
|
|
||||||
|
|
||||||
#endif /* Windoz free systems */
|
|
||||||
|
|
||||||
Then DLL was added in front of all the exported functions. For example:
|
|
||||||
|
|
||||||
extern int configtype(char*);
|
|
||||||
|
|
||||||
was changed to:
|
|
||||||
|
|
||||||
DLL extern int configtype(char*);
|
|
||||||
|
|
||||||
|
|
||||||
## Copyright (C) 2002 Landon Curt Noll and Thomas Jones-Low
|
## Copyright (C) 2002-2007 Landon Curt Noll and Thomas Jones-Low
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -153,10 +127,10 @@ was changed to:
|
|||||||
## A copy of version 2.1 of the GNU Lesser General Public License is
|
## 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
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.8 $
|
## @(#) $Revision: 30.1 $
|
||||||
## @(#) $Id: README.WINDOWS,v 29.8 2002/03/14 00:28:28 chongo Exp $
|
## @(#) $Id: README.WINDOWS,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README.WINDOWS,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README.WINDOWS,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 2001/02/25 14:00:05
|
## Under source code control: 2001/02/25 14:00:05
|
||||||
|
261
addop.c
261
addop.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* addop - add opcodes to a function being compiled
|
* addop - add opcodes to a function being compiled
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell and Ernest Bowen
|
* Copyright (C) 1999-2007 David I. Bell and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: addop.c,v 29.4 2004/02/23 07:25:16 chongo Exp $
|
* @(#) $Id: addop.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:10
|
* Under source code control: 1990/02/15 01:48:10
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
#include "opcodes.h"
|
#include "opcodes.h"
|
||||||
#include "string.h"
|
#include "str.h"
|
||||||
#include "func.h"
|
#include "func.h"
|
||||||
#include "token.h"
|
#include "token.h"
|
||||||
#include "label.h"
|
#include "label.h"
|
||||||
@@ -44,17 +44,17 @@
|
|||||||
#define OPCODEALLOCSIZE 100 /* reallocate size for opcodes in functions */
|
#define OPCODEALLOCSIZE 100 /* reallocate size for opcodes in functions */
|
||||||
|
|
||||||
|
|
||||||
static unsigned long maxopcodes;/* number of opcodes available */
|
STATIC unsigned long maxopcodes;/* number of opcodes available */
|
||||||
static long newindex; /* index of new function */
|
STATIC long newindex; /* index of new function */
|
||||||
static char *newname; /* name of new function */
|
STATIC char *newname; /* name of new function */
|
||||||
static long oldop; /* previous opcode */
|
STATIC long oldop; /* previous opcode */
|
||||||
static long oldoldop; /* opcode before previous opcode */
|
STATIC long oldoldop; /* opcode before previous opcode */
|
||||||
static long debugline; /* line number of latest debug opcode */
|
STATIC long debugline; /* line number of latest debug opcode */
|
||||||
static long funccount; /* number of functions */
|
STATIC long funccount; /* number of functions */
|
||||||
static long funcavail; /* available number of functions */
|
STATIC long funcavail; /* available number of functions */
|
||||||
static FUNC *functemplate; /* function definition template */
|
STATIC FUNC *functemplate; /* function definition template */
|
||||||
static FUNC **functions; /* table of functions */
|
STATIC FUNC **functions; /* table of functions */
|
||||||
static STRINGHEAD funcnames; /* function names */
|
STATIC STRINGHEAD funcnames; /* function names */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -184,7 +184,7 @@ void
|
|||||||
endfunc(void)
|
endfunc(void)
|
||||||
{
|
{
|
||||||
register FUNC *fp; /* function just finished */
|
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;
|
unsigned long index;
|
||||||
|
|
||||||
if (oldop != OP_RETURN) {
|
if (oldop != OP_RETURN) {
|
||||||
@@ -195,8 +195,8 @@ endfunc(void)
|
|||||||
checklabels();
|
checklabels();
|
||||||
|
|
||||||
if (errorcount) {
|
if (errorcount) {
|
||||||
printf("\"%s\": %ld error%s\n", newname, errorcount,
|
scanerror(T_NULL,"Compilation of \"%s\" failed: %ld error(s)",
|
||||||
((errorcount == 1) ? "" : "s"));
|
newname, errorcount);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
size = funcsize(curfunc->f_opcodecount);
|
size = funcsize(curfunc->f_opcodecount);
|
||||||
@@ -211,7 +211,7 @@ endfunc(void)
|
|||||||
if (newname[0] != '*' && (conf->traceflags & TRACE_FNCODES)) {
|
if (newname[0] != '*' && (conf->traceflags & TRACE_FNCODES)) {
|
||||||
dumpnames = TRUE;
|
dumpnames = TRUE;
|
||||||
for (size = 0; size < fp->f_opcodecount; ) {
|
for (size = 0; size < fp->f_opcodecount; ) {
|
||||||
printf("%ld: ", (long)size);
|
printf("%ld: ", (unsigned long)size);
|
||||||
size += dumpop(&fp->f_opcodes[size]);
|
size += dumpop(&fp->f_opcodes[size]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -280,12 +280,13 @@ rmuserfunc(char *name)
|
|||||||
|
|
||||||
index = findstr(&funcnames, name);
|
index = findstr(&funcnames, name);
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
fprintf(stderr, "%s() has never been defined\n",
|
warning("No function named \"%s\" to be undefined", name);
|
||||||
name);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (functions[index] == NULL)
|
if (functions[index] == NULL) {
|
||||||
|
warning("No defined function \"%s\" to be undefined", name);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
freenumbers(functions[index]);
|
freenumbers(functions[index]);
|
||||||
free(functions[index]);
|
free(functions[index]);
|
||||||
if ((inputisterminal() && conf->resource_debug & RSCDBG_STDIN_FUNC) ||
|
if ((inputisterminal() && conf->resource_debug & RSCDBG_STDIN_FUNC) ||
|
||||||
@@ -451,124 +452,122 @@ addop(long op)
|
|||||||
* slightly optimize the code depending on the various combinations.
|
* slightly optimize the code depending on the various combinations.
|
||||||
*/
|
*/
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case OP_GETVALUE:
|
case OP_GETVALUE:
|
||||||
switch (oldop) {
|
switch (oldop) {
|
||||||
case OP_NUMBER:
|
case OP_NUMBER:
|
||||||
case OP_ZERO:
|
case OP_ZERO:
|
||||||
case OP_ONE:
|
case OP_ONE:
|
||||||
case OP_IMAGINARY:
|
case OP_IMAGINARY:
|
||||||
case OP_GETEPSILON:
|
case OP_GETEPSILON:
|
||||||
case OP_SETEPSILON:
|
case OP_SETEPSILON:
|
||||||
case OP_STRING:
|
case OP_STRING:
|
||||||
case OP_UNDEF:
|
case OP_UNDEF:
|
||||||
case OP_GETCONFIG:
|
case OP_GETCONFIG:
|
||||||
case OP_SETCONFIG:
|
case OP_SETCONFIG:
|
||||||
return;
|
return;
|
||||||
case OP_DUPLICATE:
|
case OP_DUPLICATE:
|
||||||
diff = 1;
|
diff = 1;
|
||||||
oldop = OP_DUPVALUE;
|
oldop = OP_DUPVALUE;
|
||||||
break;
|
break;
|
||||||
case OP_FIADDR:
|
case OP_FIADDR:
|
||||||
diff = 1;
|
diff = 1;
|
||||||
oldop = OP_FIVALUE;
|
oldop = OP_FIVALUE;
|
||||||
break;
|
break;
|
||||||
case OP_GLOBALADDR:
|
case OP_GLOBALADDR:
|
||||||
diff = 1 + PTR_SIZE;
|
diff = 1 + PTR_SIZE;
|
||||||
oldop = OP_GLOBALVALUE;
|
oldop = OP_GLOBALVALUE;
|
||||||
break;
|
break;
|
||||||
case OP_LOCALADDR:
|
case OP_LOCALADDR:
|
||||||
oldop = OP_LOCALVALUE;
|
oldop = OP_LOCALVALUE;
|
||||||
break;
|
break;
|
||||||
case OP_PARAMADDR:
|
case OP_PARAMADDR:
|
||||||
oldop = OP_PARAMVALUE;
|
oldop = OP_PARAMVALUE;
|
||||||
break;
|
break;
|
||||||
case OP_ELEMADDR:
|
case OP_ELEMADDR:
|
||||||
oldop = OP_ELEMVALUE;
|
oldop = OP_ELEMVALUE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
cut = FALSE;
|
cut = FALSE;
|
||||||
|
|
||||||
}
|
}
|
||||||
if (cut) {
|
if (cut) {
|
||||||
fp->f_opcodes[count - diff] = oldop;
|
fp->f_opcodes[count - diff] = oldop;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case OP_POP:
|
||||||
|
switch (oldop) {
|
||||||
|
case OP_ASSIGN:
|
||||||
|
fp->f_opcodes[count-1] = OP_ASSIGNPOP;
|
||||||
|
oldop = OP_ASSIGNPOP;
|
||||||
|
return;
|
||||||
|
case OP_NUMBER:
|
||||||
|
case OP_IMAGINARY:
|
||||||
|
q = constvalue(fp->f_opcodes[count-1]);
|
||||||
|
qfree(q);
|
||||||
break;
|
break;
|
||||||
case OP_POP:
|
case OP_STRING:
|
||||||
switch (oldop) {
|
sfree(findstring((long)fp->f_opcodes[count-1]));
|
||||||
case OP_ASSIGN:
|
|
||||||
fp->f_opcodes[count-1] = OP_ASSIGNPOP;
|
|
||||||
oldop = OP_ASSIGNPOP;
|
|
||||||
return;
|
|
||||||
case OP_NUMBER:
|
|
||||||
case OP_IMAGINARY:
|
|
||||||
q = constvalue(fp->f_opcodes[count-1]);
|
|
||||||
qfree(q);
|
|
||||||
break;
|
|
||||||
case OP_STRING:
|
|
||||||
sfree(findstring((long)fp->f_opcodes[count-1]));
|
|
||||||
break;
|
|
||||||
case OP_LOCALADDR:
|
|
||||||
case OP_PARAMADDR:
|
|
||||||
break;
|
|
||||||
case OP_GLOBALADDR:
|
|
||||||
diff = 1 + PTR_SIZE;
|
|
||||||
break;
|
|
||||||
case OP_UNDEF:
|
|
||||||
fp->f_opcodecount -= 1;
|
|
||||||
oldop = OP_NOP;
|
|
||||||
oldoldop = OP_NOP;
|
|
||||||
return;
|
|
||||||
default:
|
|
||||||
cut = FALSE;
|
|
||||||
}
|
|
||||||
if (cut) {
|
|
||||||
fp->f_opcodecount -= diff;
|
|
||||||
oldop = OP_NOP;
|
|
||||||
oldoldop = OP_NOP;
|
|
||||||
fprintf(stderr,
|
|
||||||
"Line %ld: unused value ignored\n",
|
|
||||||
linenumber());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case OP_NEGATE:
|
case OP_LOCALADDR:
|
||||||
if (oldop == OP_NUMBER) {
|
case OP_PARAMADDR:
|
||||||
q = constvalue(fp->f_opcodes[count-1]);
|
break;
|
||||||
fp->f_opcodes[count-1] = addqconstant(qneg(q));
|
case OP_GLOBALADDR:
|
||||||
qfree(q);
|
diff = 1 + PTR_SIZE;
|
||||||
return;
|
break;
|
||||||
}
|
case OP_UNDEF:
|
||||||
|
fp->f_opcodecount -= 1;
|
||||||
|
oldop = OP_NOP;
|
||||||
|
oldoldop = OP_NOP;
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
cut = FALSE;
|
||||||
|
}
|
||||||
|
if (cut) {
|
||||||
|
fp->f_opcodecount -= diff;
|
||||||
|
oldop = OP_NOP;
|
||||||
|
oldoldop = OP_NOP;
|
||||||
|
warning("Constant before comma operator");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case OP_NEGATE:
|
||||||
|
if (oldop == OP_NUMBER) {
|
||||||
|
q = constvalue(fp->f_opcodes[count-1]);
|
||||||
|
fp->f_opcodes[count-1] = addqconstant(qneg(q));
|
||||||
|
qfree(q);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (oldop == OP_NUMBER) {
|
if (oldop == OP_NUMBER) {
|
||||||
if (oldoldop == OP_NUMBER) {
|
if (oldoldop == OP_NUMBER) {
|
||||||
q1 = constvalue(fp->f_opcodes[count - 3]);
|
q1 = constvalue(fp->f_opcodes[count - 3]);
|
||||||
q2 = constvalue(fp->f_opcodes[count - 1]);
|
q2 = constvalue(fp->f_opcodes[count - 1]);
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case OP_DIV:
|
case OP_DIV:
|
||||||
if (qiszero(q2)) {
|
if (qiszero(q2)) {
|
||||||
cut = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
q = qqdiv(q1,q2);
|
|
||||||
break;
|
|
||||||
case OP_MUL:
|
|
||||||
q = qmul(q1,q2);
|
|
||||||
break;
|
|
||||||
case OP_ADD:
|
|
||||||
q = qqadd(q1,q2);
|
|
||||||
break;
|
|
||||||
case OP_SUB:
|
|
||||||
q = qsub(q1,q2);
|
|
||||||
break;
|
|
||||||
case OP_POWER:
|
|
||||||
if (qisfrac(q2) || qisneg(q2))
|
|
||||||
cut = FALSE;
|
|
||||||
else
|
|
||||||
q = qpowi(q1,q2);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
cut = FALSE;
|
cut = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
q = qqdiv(q1,q2);
|
||||||
|
break;
|
||||||
|
case OP_MUL:
|
||||||
|
q = qmul(q1,q2);
|
||||||
|
break;
|
||||||
|
case OP_ADD:
|
||||||
|
q = qqadd(q1,q2);
|
||||||
|
break;
|
||||||
|
case OP_SUB:
|
||||||
|
q = qsub(q1,q2);
|
||||||
|
break;
|
||||||
|
case OP_POWER:
|
||||||
|
if (qisfrac(q2) || qisneg(q2))
|
||||||
|
cut = FALSE;
|
||||||
|
else
|
||||||
|
q = qpowi(q1,q2);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cut = FALSE;
|
||||||
}
|
}
|
||||||
if (cut) {
|
if (cut) {
|
||||||
qfree(q1);
|
qfree(q1);
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: align32.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: align32.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/align32.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/align32.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/11/23 05:18:06
|
* Under source code control: 1995/11/23 05:18:06
|
||||||
|
56
alloc.h
56
alloc.h
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* alloc - storage allocation and storage debug macros
|
* alloc - storage allocation and storage debug macros
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell
|
* Copyright (C) 1999-2007 David I. Bell
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: alloc.h,v 29.4 2001/06/08 21:00:58 chongo Exp $
|
* @(#) $Id: alloc.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/alloc.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/alloc.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:29
|
* Under source code control: 1990/02/15 01:48:29
|
||||||
@@ -33,54 +33,38 @@
|
|||||||
|
|
||||||
|
|
||||||
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
# include "have_malloc.h"
|
|
||||||
# include "have_newstr.h"
|
# include "have_newstr.h"
|
||||||
# include "have_string.h"
|
# include "have_string.h"
|
||||||
# include "have_memmv.h"
|
# include "have_memmv.h"
|
||||||
#else
|
#else
|
||||||
# include <calc/have_malloc.h>
|
|
||||||
# include <calc/have_newstr.h>
|
# include <calc/have_newstr.h>
|
||||||
# include <calc/have_string.h>
|
# include <calc/have_string.h>
|
||||||
# include <calc/have_memmv.h>
|
# include <calc/have_memmv.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_MALLOC_H
|
|
||||||
# include <malloc.h>
|
|
||||||
#else
|
|
||||||
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
|
||||||
extern void *malloc();
|
|
||||||
extern void *realloc();
|
|
||||||
extern void free();
|
|
||||||
# else
|
|
||||||
extern char *malloc();
|
|
||||||
extern char *realloc();
|
|
||||||
extern void free();
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_STRING_H
|
#ifdef HAVE_STRING_H
|
||||||
# include <string.h>
|
# include <string.h>
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
# if defined(HAVE_NEWSTR)
|
# if defined(HAVE_NEWSTR)
|
||||||
extern void *memcpy();
|
E_FUNC void *memcpy();
|
||||||
extern void *memset();
|
E_FUNC void *memset();
|
||||||
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
||||||
extern size_t strlen();
|
E_FUNC size_t strlen();
|
||||||
# else
|
# else
|
||||||
extern long strlen();
|
E_FUNC long strlen();
|
||||||
# endif
|
# endif
|
||||||
# else /* HAVE_NEWSTR */
|
# else /* HAVE_NEWSTR */
|
||||||
extern void bcopy();
|
E_FUNC void bcopy();
|
||||||
extern void bfill();
|
E_FUNC void bfill();
|
||||||
extern char *index();
|
E_FUNC char *index();
|
||||||
# endif /* HAVE_NEWSTR */
|
# endif /* HAVE_NEWSTR */
|
||||||
extern char *strchr();
|
E_FUNC char *strchr();
|
||||||
extern char *strcpy();
|
E_FUNC char *strcpy();
|
||||||
extern char *strncpy();
|
E_FUNC char *strncpy();
|
||||||
extern char *strcat();
|
E_FUNC char *strcat();
|
||||||
extern int strcmp();
|
E_FUNC int strcmp();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -94,13 +78,13 @@ extern int strcmp();
|
|||||||
#endif /* HAVE_NEWSTR */
|
#endif /* HAVE_NEWSTR */
|
||||||
|
|
||||||
#if !defined(HAVE_MEMMOVE)
|
#if !defined(HAVE_MEMMOVE)
|
||||||
# undef CALC_SIZE_T
|
# undef MEMMOVE_SIZE_T
|
||||||
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
||||||
# define CALC_SIZE_T size_t
|
# define MEMMOVE_SIZE_T size_t
|
||||||
# else
|
# else
|
||||||
# define CALC_SIZE_T long
|
# define MEMMOVE_SIZE_T long
|
||||||
# endif
|
# endif
|
||||||
extern void *memmove(void *s1, const void *s2, CALC_SIZE_T n);
|
E_FUNC void *memmove(void *s1, CONST void *s2, MEMMOVE_SIZE_T n);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* !__ALLOC_H__ */
|
#endif /* !__ALLOC_H__ */
|
||||||
|
26
assocfunc.c
26
assocfunc.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* assocfunc - association table routines
|
* assocfunc - association table routines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell
|
* Copyright (C) 1999-2007 David I. Bell
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: assocfunc.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: assocfunc.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/assocfunc.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/assocfunc.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1993/07/20 23:04:27
|
* Under source code control: 1993/07/20 23:04:27
|
||||||
@@ -46,10 +46,10 @@
|
|||||||
#define ELEMSIZE(n) (sizeof(ASSOCELEM) + (sizeof(VALUE) * ((n) - 1)))
|
#define ELEMSIZE(n) (sizeof(ASSOCELEM) + (sizeof(VALUE) * ((n) - 1)))
|
||||||
|
|
||||||
|
|
||||||
static ASSOCELEM *elemindex(ASSOC *ap, long index);
|
S_FUNC ASSOCELEM *elemindex(ASSOC *ap, long index);
|
||||||
static BOOL compareindices(VALUE *v1, VALUE *v2, long dim);
|
S_FUNC BOOL compareindices(VALUE *v1, VALUE *v2, long dim);
|
||||||
static void resize(ASSOC *ap, long newsize);
|
S_FUNC void resize(ASSOC *ap, long newsize);
|
||||||
static void assoc_elemfree(ASSOCELEM *ep);
|
S_FUNC void assoc_elemfree(ASSOCELEM *ep);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -69,7 +69,7 @@ associndex(ASSOC *ap, BOOL create, long dim, VALUE *indices)
|
|||||||
{
|
{
|
||||||
ASSOCELEM **listhead;
|
ASSOCELEM **listhead;
|
||||||
ASSOCELEM *ep;
|
ASSOCELEM *ep;
|
||||||
static VALUE val;
|
STATIC VALUE val;
|
||||||
QCKHASH hash;
|
QCKHASH hash;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ assocrsearch(ASSOC *ap, VALUE *vp, long i, long j, ZVALUE *index)
|
|||||||
* ap association to index into
|
* ap association to index into
|
||||||
* index index of desired element
|
* index index of desired element
|
||||||
*/
|
*/
|
||||||
static ASSOCELEM *
|
S_FUNC ASSOCELEM *
|
||||||
elemindex(ASSOC *ap, long index)
|
elemindex(ASSOC *ap, long index)
|
||||||
{
|
{
|
||||||
ASSOCELEM *ep;
|
ASSOCELEM *ep;
|
||||||
@@ -356,7 +356,7 @@ assoccopy(ASSOC *oldap)
|
|||||||
* This is only actually done if the growth from the previous size is
|
* This is only actually done if the growth from the previous size is
|
||||||
* enough to make this worthwhile.
|
* enough to make this worthwhile.
|
||||||
*/
|
*/
|
||||||
static void
|
S_FUNC void
|
||||||
resize(ASSOC *ap, long newsize)
|
resize(ASSOC *ap, long newsize)
|
||||||
{
|
{
|
||||||
ASSOCELEM **oldtable;
|
ASSOCELEM **oldtable;
|
||||||
@@ -400,7 +400,7 @@ resize(ASSOC *ap, long newsize)
|
|||||||
/*
|
/*
|
||||||
* Free an association element, along with any contained values.
|
* Free an association element, along with any contained values.
|
||||||
*/
|
*/
|
||||||
static void
|
S_FUNC void
|
||||||
assoc_elemfree(ASSOCELEM *ep)
|
assoc_elemfree(ASSOCELEM *ep)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -520,7 +520,7 @@ assocprint(ASSOC *ap, long max_print)
|
|||||||
* Compare two lists of index values to see if they are identical.
|
* Compare two lists of index values to see if they are identical.
|
||||||
* Returns TRUE if they are the same.
|
* Returns TRUE if they are the same.
|
||||||
*/
|
*/
|
||||||
static BOOL
|
S_FUNC BOOL
|
||||||
compareindices(VALUE *v1, VALUE *v2, long dim)
|
compareindices(VALUE *v1, VALUE *v2, long dim)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
150
blkcpy.c
150
blkcpy.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* blkcpy - general values and related routines used by the calculator
|
* blkcpy - general values and related routines used by the calculator
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen
|
* Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: Landon Curt Noll
|
* Primary author: Landon Curt Noll
|
||||||
*
|
*
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: blkcpy.c,v 29.4 2004/02/23 07:47:31 chongo Exp $
|
* @(#) $Id: blkcpy.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/04/18 20:41:26
|
* Under source code control: 1997/04/18 20:41:26
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
#include "value.h"
|
#include "value.h"
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
#include "blkcpy.h"
|
#include "blkcpy.h"
|
||||||
#include "string.h"
|
#include "str.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -73,51 +73,51 @@ copystod(VALUE *svp, long ssi, long num, VALUE *dvp, long dsi)
|
|||||||
* determine/check source type
|
* determine/check source type
|
||||||
*/
|
*/
|
||||||
switch(svp->v_type) {
|
switch(svp->v_type) {
|
||||||
case V_NBLOCK:
|
case V_NBLOCK:
|
||||||
if (svp->v_nblock->subtype & V_NOCOPYFROM)
|
if (svp->v_nblock->subtype & V_NOCOPYFROM)
|
||||||
return E_COPY15;
|
return E_COPY15;
|
||||||
sblk = svp->v_nblock->blk;
|
sblk = svp->v_nblock->blk;
|
||||||
if (sblk->data == NULL)
|
if (sblk->data == NULL)
|
||||||
return E_COPY8;
|
return E_COPY8;
|
||||||
break;
|
break;
|
||||||
case V_BLOCK:
|
case V_BLOCK:
|
||||||
sblk = svp->v_block;
|
sblk = svp->v_block;
|
||||||
break;
|
break;
|
||||||
case V_STR:
|
case V_STR:
|
||||||
case V_OCTET:
|
case V_OCTET:
|
||||||
case V_NUM:
|
case V_NUM:
|
||||||
case V_FILE:
|
case V_FILE:
|
||||||
case V_MAT:
|
case V_MAT:
|
||||||
case V_LIST:
|
case V_LIST:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return E_COPY9;
|
return E_COPY9;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* determine/check destination type
|
* determine/check destination type
|
||||||
*/
|
*/
|
||||||
switch(dvp->v_type) {
|
switch(dvp->v_type) {
|
||||||
case V_NBLOCK:
|
case V_NBLOCK:
|
||||||
if (dvp->v_nblock->subtype & V_NOCOPYTO)
|
if (dvp->v_nblock->subtype & V_NOCOPYTO)
|
||||||
return E_COPY16;
|
return E_COPY16;
|
||||||
noreloc |=((dvp->v_nblock->subtype & V_NOREALLOC) != 0);
|
noreloc |=((dvp->v_nblock->subtype & V_NOREALLOC) != 0);
|
||||||
dblk = dvp->v_nblock->blk;
|
dblk = dvp->v_nblock->blk;
|
||||||
if (dblk->data == NULL)
|
if (dblk->data == NULL)
|
||||||
return E_COPY10;
|
return E_COPY10;
|
||||||
break;
|
break;
|
||||||
case V_BLOCK:
|
case V_BLOCK:
|
||||||
noreloc = ((dvp->v_subtype & V_NOREALLOC) != 0);
|
noreloc = ((dvp->v_subtype & V_NOREALLOC) != 0);
|
||||||
dblk = dvp->v_block;
|
dblk = dvp->v_block;
|
||||||
break;
|
break;
|
||||||
case V_STR:
|
case V_STR:
|
||||||
case V_NUM:
|
case V_NUM:
|
||||||
case V_FILE:
|
case V_FILE:
|
||||||
case V_MAT:
|
case V_MAT:
|
||||||
case V_LIST:
|
case V_LIST:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return E_COPY11;
|
return E_COPY11;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -280,7 +280,7 @@ copymat2mat(MATRIX *smat, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
VALUE *vp;
|
VALUE *vp;
|
||||||
VALUE *vq;
|
VALUE *vq;
|
||||||
VALUE *vtemp;
|
VALUE *vtemp;
|
||||||
short subtype;
|
unsigned short subtype;
|
||||||
|
|
||||||
if (ssi > smat->m_size)
|
if (ssi > smat->m_size)
|
||||||
return E_COPY2;
|
return E_COPY2;
|
||||||
@@ -311,7 +311,7 @@ copymat2mat(MATRIX *smat, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
subtype = vq->v_subtype;
|
subtype = vq->v_subtype;
|
||||||
freevalue(vq);
|
freevalue(vq);
|
||||||
*vq = *vp;
|
*vq = *vp;
|
||||||
vq->v_subtype = subtype;
|
vq->v_subtype |= subtype;
|
||||||
}
|
}
|
||||||
free(vtemp);
|
free(vtemp);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -329,7 +329,7 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
VALUE *vq;
|
VALUE *vq;
|
||||||
VALUE *vtemp;
|
VALUE *vtemp;
|
||||||
long i;
|
long i;
|
||||||
short subtype;
|
unsigned short subtype;
|
||||||
|
|
||||||
if (ssi > blk->datalen)
|
if (ssi > blk->datalen)
|
||||||
return E_COPY2;
|
return E_COPY2;
|
||||||
@@ -363,7 +363,7 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
subtype = vq->v_subtype;
|
subtype = vq->v_subtype;
|
||||||
freevalue(vq);
|
freevalue(vq);
|
||||||
*vq = *vp;
|
*vq = *vp;
|
||||||
vq->v_subtype = subtype;
|
vq->v_subtype |= subtype;
|
||||||
}
|
}
|
||||||
free(vtemp);
|
free(vtemp);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -429,6 +429,7 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
|
|||||||
LISTELEM *ep;
|
LISTELEM *ep;
|
||||||
VALUE *vtemp;
|
VALUE *vtemp;
|
||||||
long i;
|
long i;
|
||||||
|
unsigned short subtype;
|
||||||
|
|
||||||
if (ssi > smat->m_size)
|
if (ssi > smat->m_size)
|
||||||
return E_COPY2;
|
return E_COPY2;
|
||||||
@@ -456,8 +457,10 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
|
|||||||
ep = listelement(lp, (long) dsi);
|
ep = listelement(lp, (long) dsi);
|
||||||
i = num;
|
i = num;
|
||||||
while (i-- > 0) {
|
while (i-- > 0) {
|
||||||
|
subtype = ep->e_value.v_subtype;
|
||||||
freevalue(&ep->e_value);
|
freevalue(&ep->e_value);
|
||||||
ep->e_value = *vq++;
|
ep->e_value = *vq++;
|
||||||
|
ep->e_value.v_subtype |= subtype;
|
||||||
ep = ep->e_next;
|
ep = ep->e_next;
|
||||||
}
|
}
|
||||||
free(vtemp);
|
free(vtemp);
|
||||||
@@ -476,7 +479,7 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
LISTELEM *ep;
|
LISTELEM *ep;
|
||||||
VALUE *vtemp;
|
VALUE *vtemp;
|
||||||
long i;
|
long i;
|
||||||
short subtype;
|
unsigned short subtype;
|
||||||
|
|
||||||
if (ssi > lp->l_count)
|
if (ssi > lp->l_count)
|
||||||
return E_COPY2;
|
return E_COPY2;
|
||||||
@@ -508,7 +511,7 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
subtype = vq->v_subtype;
|
subtype = vq->v_subtype;
|
||||||
freevalue(vq);
|
freevalue(vq);
|
||||||
*vq = *vp;
|
*vq = *vp;
|
||||||
vq->v_subtype = subtype;
|
vq->v_subtype |= subtype;
|
||||||
}
|
}
|
||||||
free(vtemp);
|
free(vtemp);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -526,6 +529,7 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
|
|||||||
LISTELEM *dep;
|
LISTELEM *dep;
|
||||||
VALUE *vtemp;
|
VALUE *vtemp;
|
||||||
VALUE *vp;
|
VALUE *vp;
|
||||||
|
unsigned short subtype;
|
||||||
|
|
||||||
if (ssi > slp->l_count)
|
if (ssi > slp->l_count)
|
||||||
return E_COPY2;
|
return E_COPY2;
|
||||||
@@ -555,8 +559,10 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
|
|||||||
vp = vtemp;
|
vp = vtemp;
|
||||||
i = num;
|
i = num;
|
||||||
while (i-- > 0) {
|
while (i-- > 0) {
|
||||||
|
subtype = dep->e_value.v_subtype;
|
||||||
freevalue(&dep->e_value);
|
freevalue(&dep->e_value);
|
||||||
dep->e_value = *vp++;
|
dep->e_value = *vp++;
|
||||||
|
dep->e_value.v_subtype |= subtype;
|
||||||
dep = dep->e_next;
|
dep = dep->e_next;
|
||||||
}
|
}
|
||||||
free(vtemp);
|
free(vtemp);
|
||||||
@@ -806,13 +812,13 @@ copystr2str(STRING *sstr, long ssi, long num, STRING *dstr, long dsi)
|
|||||||
{
|
{
|
||||||
char *c, *c1;
|
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;
|
num = sstr->s_len - ssi;
|
||||||
if (num <= 0)
|
if (num <= 0)
|
||||||
return 0; /* Nothing to be copied */
|
return 0; /* Nothing to be copied */
|
||||||
if (dsi < 0) /* default destination index */
|
if (dsi < 0) /* default destination index */
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if (dsi + num > dstr->s_len)
|
if ((size_t)(dsi + num) > dstr->s_len)
|
||||||
num = dstr->s_len - dsi;
|
num = dstr->s_len - dsi;
|
||||||
c1 = sstr->s_str + ssi;
|
c1 = sstr->s_str + ssi;
|
||||||
c = dstr->s_str + dsi;
|
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 */
|
return 0; /* Nothing to be copied */
|
||||||
if (dsi < 0) /* default destination index */
|
if (dsi < 0) /* default destination index */
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if (dsi + num > dstr->s_len)
|
if ((size_t)(dsi + num) > dstr->s_len)
|
||||||
num = dstr->s_len - dsi;
|
num = dstr->s_len - dsi;
|
||||||
c1 = sblk->data + ssi;
|
c1 = sblk->data + ssi;
|
||||||
c = (USB8 *)dstr->s_str + dsi;
|
c = (USB8 *)dstr->s_str + dsi;
|
||||||
@@ -852,18 +858,18 @@ copyblk2str(BLOCK *sblk, long ssi, long num, STRING *dstr, long dsi)
|
|||||||
int
|
int
|
||||||
copyostr2str(char *sstr, long ssi, long num, STRING *dstr, long dsi)
|
copyostr2str(char *sstr, long ssi, long num, STRING *dstr, long dsi)
|
||||||
{
|
{
|
||||||
long len;
|
size_t len;
|
||||||
char *c, *c1;
|
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;
|
num = len - ssi;
|
||||||
if (num <= 0) /* Nothing to be copied */
|
if (num <= 0) /* Nothing to be copied */
|
||||||
return 0;
|
return 0;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = 0; /* Default destination index */
|
dsi = 0; /* Default destination index */
|
||||||
if (dsi + num > dstr->s_len)
|
if ((size_t)(dsi + num) > dstr->s_len)
|
||||||
num = dstr->s_len - dsi;
|
num = dstr->s_len - dsi;
|
||||||
c1 = sstr + ssi;
|
c1 = sstr + ssi;
|
||||||
c = dstr->s_str + dsi;
|
c = dstr->s_str + dsi;
|
||||||
@@ -879,16 +885,16 @@ copyostr2str(char *sstr, long ssi, long num, STRING *dstr, long dsi)
|
|||||||
int
|
int
|
||||||
copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
||||||
{
|
{
|
||||||
int len;
|
size_t len;
|
||||||
int newlen;
|
size_t newlen;
|
||||||
int newsize;
|
size_t newsize;
|
||||||
USB8 *newdata;
|
USB8 *newdata;
|
||||||
|
|
||||||
len = strlen(str) + 1;
|
len = strlen(str) + 1;
|
||||||
|
|
||||||
if (ssi > len)
|
if (ssi > 0 && (size_t)ssi > len)
|
||||||
return E_COPY2;
|
return E_COPY2;
|
||||||
if (num < 0 || ssi + num > len)
|
if (num < 0 || (size_t)(ssi + num) > len)
|
||||||
num = len - ssi;
|
num = len - ssi;
|
||||||
if (num <= 0) /* Nothing to be copied */
|
if (num <= 0) /* Nothing to be copied */
|
||||||
return 0;
|
return 0;
|
||||||
@@ -897,7 +903,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
|||||||
newlen = dsi + num;
|
newlen = dsi + num;
|
||||||
if (newlen <= 0)
|
if (newlen <= 0)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
if (newlen >= dblk->maxsize) {
|
if (newlen >= (size_t)dblk->maxsize) {
|
||||||
if (noreloc)
|
if (noreloc)
|
||||||
return E_COPY17;
|
return E_COPY17;
|
||||||
newsize = (1 + newlen/dblk->blkchunk) * dblk->blkchunk;
|
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;
|
dblk->maxsize = newsize;
|
||||||
}
|
}
|
||||||
memmove(dblk->data + dsi, str + ssi, num);
|
memmove(dblk->data + dsi, str + ssi, num);
|
||||||
if (newlen > dblk->datalen)
|
if (newlen > (size_t)dblk->datalen)
|
||||||
dblk->datalen = newlen;
|
dblk->datalen = newlen;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -929,7 +935,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
|||||||
* s1
|
* s1
|
||||||
*/
|
*/
|
||||||
void *
|
void *
|
||||||
memmove(void *s1, const void *s2, CALC_SIZE_T n)
|
memmove(void *s1, CONST void *s2, MEMMOVE_SIZE_T n)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* firewall
|
* firewall
|
||||||
@@ -978,8 +984,8 @@ memmove(void *s1, const void *s2, CALC_SIZE_T n)
|
|||||||
int
|
int
|
||||||
copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
|
copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
|
||||||
{
|
{
|
||||||
long newlen;
|
size_t newlen;
|
||||||
long newsize;
|
size_t newsize;
|
||||||
USB8 *newdata;
|
USB8 *newdata;
|
||||||
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
||||||
ZVALUE *swnum; /* byte swapped numerator */
|
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;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = dblk->datalen;
|
dsi = dblk->datalen;
|
||||||
newlen = dsi + (long)(num*sizeof(HALF));
|
newlen = dsi + (num*sizeof(HALF));
|
||||||
if (newlen <= 0)
|
if (newlen <= 0)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
if (newlen >= dblk->maxsize) {
|
if (newlen >= (size_t)dblk->maxsize) {
|
||||||
if (noreloc)
|
if (noreloc)
|
||||||
return E_COPY17;
|
return E_COPY17;
|
||||||
newsize = (1 + newlen/dblk->blkchunk) * dblk->blkchunk;
|
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));
|
memmove(dblk->data+dsi, (char *)(swnum->v+ssi), num*sizeof(HALF));
|
||||||
zfree(*swnum);
|
zfree(*swnum);
|
||||||
#endif
|
#endif
|
||||||
if (newlen > dblk->datalen)
|
if (newlen > (size_t)dblk->datalen)
|
||||||
dblk->datalen = newlen;
|
dblk->datalen = newlen;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -1029,7 +1035,7 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
|
|||||||
int
|
int
|
||||||
copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi, NUMBER **res)
|
copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi, NUMBER **res)
|
||||||
{
|
{
|
||||||
long newlen;
|
size_t newlen;
|
||||||
NUMBER *ret; /* cloned and modified numerator */
|
NUMBER *ret; /* cloned and modified numerator */
|
||||||
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
||||||
HALF *swapped; /* byte swapped input data */
|
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;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = dnum->num.len;
|
dsi = dnum->num.len;
|
||||||
newlen = dsi + (long)((num+sizeof(HALF)-1)/sizeof(HALF));
|
newlen = dsi + ((num+sizeof(HALF)-1)/sizeof(HALF));
|
||||||
if (newlen <= 0)
|
if (newlen <= 0)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
|
|
||||||
|
44
blkcpy.h
44
blkcpy.h
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* blkcpy - general values and related routines used by the calculator
|
* blkcpy - general values and related routines used by the calculator
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen
|
* Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: Landon Curt Noll
|
* Primary author: Landon Curt Noll
|
||||||
*
|
*
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: blkcpy.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: blkcpy.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/04/18 20:41:25
|
* Under source code control: 1997/04/18 20:41:25
|
||||||
@@ -36,27 +36,27 @@
|
|||||||
/*
|
/*
|
||||||
* the main copy gateway function
|
* the main copy gateway function
|
||||||
*/
|
*/
|
||||||
extern int copystod(VALUE *, long, long, VALUE *, long);
|
E_FUNC int copystod(VALUE *, long, long, VALUE *, long);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* specific copy functions
|
* specific copy functions
|
||||||
*/
|
*/
|
||||||
extern int copyblk2blk(BLOCK *, long, long, BLOCK *, long, BOOL);
|
E_FUNC int copyblk2blk(BLOCK *, long, long, BLOCK *, long, BOOL);
|
||||||
extern int copyblk2file(BLOCK *, long, long, FILEID, long);
|
E_FUNC int copyblk2file(BLOCK *, long, long, FILEID, long);
|
||||||
extern int copyblk2mat(BLOCK *, long, long, MATRIX *, long);
|
E_FUNC int copyblk2mat(BLOCK *, long, long, MATRIX *, long);
|
||||||
extern int copyblk2num(BLOCK *, long, long, NUMBER *, long, NUMBER **);
|
E_FUNC int copyblk2num(BLOCK *, long, long, NUMBER *, long, NUMBER **);
|
||||||
extern int copyblk2str(BLOCK *, long, long, STRING *, long);
|
E_FUNC int copyblk2str(BLOCK *, long, long, STRING *, long);
|
||||||
extern int copyfile2blk(FILEID, long, long, BLOCK *, long, BOOL);
|
E_FUNC int copyfile2blk(FILEID, long, long, BLOCK *, long, BOOL);
|
||||||
extern int copylist2list(LIST *, long, long, LIST *, long);
|
E_FUNC int copylist2list(LIST *, long, long, LIST *, long);
|
||||||
extern int copylist2mat(LIST *, long, long, MATRIX *, long);
|
E_FUNC int copylist2mat(LIST *, long, long, MATRIX *, long);
|
||||||
extern int copymat2blk(MATRIX *, long, long, BLOCK *, long, BOOL);
|
E_FUNC int copymat2blk(MATRIX *, long, long, BLOCK *, long, BOOL);
|
||||||
extern int copymat2list(MATRIX *, long, long, LIST *, long);
|
E_FUNC int copymat2list(MATRIX *, long, long, LIST *, long);
|
||||||
extern int copymat2mat(MATRIX *, long, long, MATRIX *, long);
|
E_FUNC int copymat2mat(MATRIX *, long, long, MATRIX *, long);
|
||||||
extern int copynum2blk(NUMBER *, long, long, BLOCK *, long, BOOL);
|
E_FUNC int copynum2blk(NUMBER *, long, long, BLOCK *, long, BOOL);
|
||||||
extern int copyostr2blk(char *, long, long, BLOCK *, long, BOOL);
|
E_FUNC int copyostr2blk(char *, long, long, BLOCK *, long, BOOL);
|
||||||
extern int copyostr2str(char *, long, long, STRING *, long);
|
E_FUNC int copyostr2str(char *, long, long, STRING *, long);
|
||||||
extern int copystr2blk(STRING *, long, long, BLOCK *, long, BOOL);
|
E_FUNC int copystr2blk(STRING *, long, long, BLOCK *, long, BOOL);
|
||||||
extern int copystr2file(STRING *, long, long, FILEID, long);
|
E_FUNC int copystr2file(STRING *, long, long, FILEID, long);
|
||||||
extern int copystr2str(STRING *, long, long, STRING *, long);
|
E_FUNC int copystr2str(STRING *, long, long, STRING *, long);
|
||||||
|
|
||||||
#endif /* !__BLKCPY_H__ */
|
#endif /* !__BLKCPY_H__ */
|
||||||
|
24
block.c
24
block.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* block - fixed, dynamic, fifo and circular memory blocks
|
* block - fixed, dynamic, fifo and circular memory blocks
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen
|
* Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: Landon Curt Noll
|
* Primary author: Landon Curt Noll
|
||||||
*
|
*
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: block.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: block.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/02/27 00:29:40
|
* Under source code control: 1997/02/27 00:29:40
|
||||||
@@ -37,19 +37,19 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "block.h"
|
#include "block.h"
|
||||||
#include "nametype.h"
|
#include "nametype.h"
|
||||||
#include "string.h"
|
#include "str.h"
|
||||||
#include "calcerr.h"
|
#include "calcerr.h"
|
||||||
|
|
||||||
#define NBLOCKCHUNK 16
|
#define NBLOCKCHUNK 16
|
||||||
|
|
||||||
static long nblockcount = 0;
|
STATIC long nblockcount = 0;
|
||||||
static long maxnblockcount = 0;
|
STATIC long maxnblockcount = 0;
|
||||||
static STRINGHEAD nblocknames;
|
STATIC STRINGHEAD nblocknames;
|
||||||
static NBLOCK **nblocks;
|
STATIC NBLOCK **nblocks;
|
||||||
|
|
||||||
|
|
||||||
/* forward declarations */
|
/* forward declarations */
|
||||||
static void blkchk(BLOCK*);
|
S_FUNC void blkchk(BLOCK*);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -57,7 +57,7 @@ static void blkchk(BLOCK*);
|
|||||||
*
|
*
|
||||||
* given:
|
* given:
|
||||||
* len - initial memory length of the block
|
* len - initial memory length of the block
|
||||||
* type - BLK_TYPE_XXX
|
* type - BLK_TYPE_XYZ
|
||||||
* chunk - allocation chunk size
|
* chunk - allocation chunk size
|
||||||
*
|
*
|
||||||
* returns:
|
* returns:
|
||||||
@@ -154,7 +154,7 @@ blk_free(BLOCK *blk)
|
|||||||
* if all is ok, otherwise math_error() is called and this
|
* if all is ok, otherwise math_error() is called and this
|
||||||
* function does not return
|
* function does not return
|
||||||
*/
|
*/
|
||||||
static void
|
S_FUNC void
|
||||||
blkchk(BLOCK *blk)
|
blkchk(BLOCK *blk)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
42
block.h
42
block.h
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* block - fixed, dynamic, fifo and circular memory blocks
|
* block - fixed, dynamic, fifo and circular memory blocks
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen
|
* Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: Landon Curt Noll
|
* Primary author: Landon Curt Noll
|
||||||
*
|
*
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: block.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: block.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/02/21 05:03:39
|
* Under source code control: 1997/02/21 05:03:39
|
||||||
@@ -160,7 +160,7 @@ typedef struct nblock NBLOCK;
|
|||||||
/*
|
/*
|
||||||
* block debug
|
* block debug
|
||||||
*/
|
*/
|
||||||
extern int blk_debug; /* 0 => debug off */
|
EXTERN int blk_debug; /* 0 => debug off */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -204,22 +204,22 @@ typedef USB8 OCTET;
|
|||||||
/*
|
/*
|
||||||
* external functions
|
* external functions
|
||||||
*/
|
*/
|
||||||
extern BLOCK *blkalloc(int, int);
|
E_FUNC BLOCK *blkalloc(int, int);
|
||||||
extern void blk_free(BLOCK*);
|
E_FUNC void blk_free(BLOCK*);
|
||||||
extern BLOCK *blkrealloc(BLOCK*, int, int);
|
E_FUNC BLOCK *blkrealloc(BLOCK*, int, int);
|
||||||
extern void blktrunc(BLOCK*);
|
E_FUNC void blktrunc(BLOCK*);
|
||||||
extern BLOCK *blk_copy(BLOCK*);
|
E_FUNC BLOCK *blk_copy(BLOCK*);
|
||||||
extern int blk_cmp(BLOCK*, BLOCK*);
|
E_FUNC int blk_cmp(BLOCK*, BLOCK*);
|
||||||
extern void blk_print(BLOCK*);
|
E_FUNC void blk_print(BLOCK*);
|
||||||
extern void nblock_print(NBLOCK *);
|
E_FUNC void nblock_print(NBLOCK *);
|
||||||
extern NBLOCK *createnblock(char *, int, int);
|
E_FUNC NBLOCK *createnblock(char *, int, int);
|
||||||
extern NBLOCK *reallocnblock(int, int, int);
|
E_FUNC NBLOCK *reallocnblock(int, int, int);
|
||||||
extern int removenblock(int);
|
E_FUNC int removenblock(int);
|
||||||
extern int findnblockid(char *);
|
E_FUNC int findnblockid(char *);
|
||||||
extern NBLOCK *findnblock(int);
|
E_FUNC NBLOCK *findnblock(int);
|
||||||
extern BLOCK *copyrealloc(BLOCK*, int, int);
|
E_FUNC BLOCK *copyrealloc(BLOCK*, int, int);
|
||||||
extern int countnblocks(void);
|
E_FUNC int countnblocks(void);
|
||||||
extern void shownblocks(void);
|
E_FUNC void shownblocks(void);
|
||||||
|
|
||||||
|
|
||||||
#endif /* !__BLOCK_H__ */
|
#endif /* !__BLOCK_H__ */
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: byteswap.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: byteswap.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/10/11 04:44:01
|
* Under source code control: 1995/10/11 04:44:01
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: byteswap.h,v 29.4 2001/06/08 21:00:58 chongo Exp $
|
* @(#) $Id: byteswap.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/10/11 04:44:01
|
* Under source code control: 1995/10/11 04:44:01
|
||||||
|
147
cal/Makefile
147
cal/Makefile
@@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# cal - makefile for calc standard resource files
|
# cal - makefile for calc standard resource files
|
||||||
#
|
#
|
||||||
# Copyright (C) 1999 Landon Curt Noll
|
# Copyright (C) 1999-2006 Landon Curt Noll
|
||||||
#
|
#
|
||||||
# Calc is open software; you can redistribute it and/or modify it under
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -16,10 +16,10 @@
|
|||||||
# A copy of version 2.1 of the GNU Lesser General Public License is
|
# 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
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.15 $
|
# @(#) $Revision: 30.2 $
|
||||||
# @(#) $Id: Makefile,v 29.15 2003/01/05 08:10:56 chongo Exp $
|
# @(#) $Id: Makefile,v 30.2 2007/03/22 07:34:47 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1991/07/21 05:00:54
|
# Under source code control: 1991/07/21 05:00:54
|
||||||
@@ -33,14 +33,31 @@
|
|||||||
|
|
||||||
# required vars
|
# required vars
|
||||||
#
|
#
|
||||||
SHELL = /bin/sh
|
SHELL= /bin/sh
|
||||||
MAKE_FILE = Makefile
|
|
||||||
|
|
||||||
####
|
####
|
||||||
# Normally, the upper level makefile will set these values. We provide
|
# Normally, the upper level makefile will set these values. We provide
|
||||||
# a default here just in case you want to build from this directory.
|
# a default here just in case you want to build from this directory.
|
||||||
####
|
####
|
||||||
|
|
||||||
|
# Normally certain files depend on the Makefile. If the Makefile is
|
||||||
|
# changed, then certain steps should be redone. If MAKE_FILE is
|
||||||
|
# set to Makefile, then these files will depend on Makefile. If
|
||||||
|
# MAKE_FILE is empty, then they wont.
|
||||||
|
#
|
||||||
|
# If in doubt, set MAKE_FILE to Makefile
|
||||||
|
#
|
||||||
|
MAKE_FILE= Makefile
|
||||||
|
|
||||||
|
# Controlling file makefile basename (without the path)
|
||||||
|
#
|
||||||
|
# This is the basename same of the makefile that may/does/will drive
|
||||||
|
# this makefile.
|
||||||
|
#
|
||||||
|
# If in doubt, set TOP_MAKE_FILE to Makefile
|
||||||
|
#
|
||||||
|
TOP_MAKE_FILE= Makefile
|
||||||
|
|
||||||
# Where the system include (.h) files are kept
|
# Where the system include (.h) files are kept
|
||||||
#
|
#
|
||||||
# For DJGPP, select:
|
# For DJGPP, select:
|
||||||
@@ -62,9 +79,9 @@ INCDIR= /usr/include
|
|||||||
# ${LIBDIR} where calc link library (*.a) files are installed
|
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||||
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
|
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
|
||||||
#
|
#
|
||||||
# NOTE: The install rule prepends installation paths with $T, which
|
# NOTE: The install rule prepends installation paths with ${T}, which
|
||||||
# by default is empty. If $T is non-empty, then installation
|
# by default is empty. If ${T} is non-empty, then installation
|
||||||
# locations will be relative to the $T directory.
|
# locations will be relative to the ${T} directory.
|
||||||
#
|
#
|
||||||
# For DJGPP, select:
|
# For DJGPP, select:
|
||||||
#
|
#
|
||||||
@@ -96,12 +113,12 @@ CALC_SHAREDIR= /usr/share/calc
|
|||||||
# ${CALC_INCDIR} where the calc include files are installed
|
# ${CALC_INCDIR} where the calc include files are installed
|
||||||
# ${CUSTOMCALDIR} where custom *.cal files are installed
|
# ${CUSTOMCALDIR} where custom *.cal files are installed
|
||||||
# ${CUSTOMHELPDIR} where custom help files are installed
|
# ${CUSTOMHELPDIR} where custom help files are installed
|
||||||
# ${CUSTOMINCPDIR} where custom .h files are installed
|
# ${CUSTOMINCDIR} where custom .h files are installed
|
||||||
# ${SCRIPTDIR} where calc shell scripts are installed
|
# ${SCRIPTDIR} where calc shell scripts are installed
|
||||||
#
|
#
|
||||||
# NOTE: The install rule prepends installation paths with $T, which
|
# NOTE: The install rule prepends installation paths with ${T}, which
|
||||||
# by default is empty. If $T is non-empty, then installation
|
# by default is empty. If ${T} is non-empty, then installation
|
||||||
# locations will be relative to the $T directory.
|
# locations will be relative to the ${T} directory.
|
||||||
#
|
#
|
||||||
# If in doubt, set:
|
# If in doubt, set:
|
||||||
#
|
#
|
||||||
@@ -121,8 +138,8 @@ SCRIPTDIR= ${BINDIR}/cscript
|
|||||||
|
|
||||||
# T - top level directory under which calc will be installed
|
# T - top level directory under which calc will be installed
|
||||||
#
|
#
|
||||||
# The calc install is performed under $T, the calc build is
|
# The calc install is performed under ${T}, the calc build is
|
||||||
# performed under /. The purpose for $T is to allow someone
|
# performed under /. The purpose for ${T} is to allow someone
|
||||||
# to install calc somewhere other than into the system area.
|
# to install calc somewhere other than into the system area.
|
||||||
#
|
#
|
||||||
# For example, if:
|
# For example, if:
|
||||||
@@ -142,10 +159,10 @@ SCRIPTDIR= ${BINDIR}/cscript
|
|||||||
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||||
# ... etc ... /var/tmp/testing/...
|
# ... etc ... /var/tmp/testing/...
|
||||||
#
|
#
|
||||||
# If $T is empty, calc is installed under /, which is the same
|
# If ${T} is empty, calc is installed under /, which is the same
|
||||||
# top of tree for which it was built. If $T is non-empty, then
|
# top of tree for which it was built. If ${T} is non-empty, then
|
||||||
# calc is installed under $T, as if one had to chroot under
|
# calc is installed under ${T}, as if one had to chroot under
|
||||||
# $T for calc to operate.
|
# ${T} for calc to operate.
|
||||||
#
|
#
|
||||||
# If in doubt, use T=
|
# If in doubt, use T=
|
||||||
#
|
#
|
||||||
@@ -163,6 +180,14 @@ Q=@
|
|||||||
#
|
#
|
||||||
CHMOD= chmod
|
CHMOD= chmod
|
||||||
CMP= cmp
|
CMP= cmp
|
||||||
|
RM= rm
|
||||||
|
MKDIR= mkdir
|
||||||
|
RMDIR= rmdir
|
||||||
|
CP= cp
|
||||||
|
MV= mv
|
||||||
|
CO= co
|
||||||
|
TRUE= true
|
||||||
|
TOUCH= touch
|
||||||
|
|
||||||
# The calc files to install
|
# The calc files to install
|
||||||
#
|
#
|
||||||
@@ -170,13 +195,14 @@ CALC_FILES= README bigprime.cal deg.cal ellip.cal lucas.cal lucas_chk.cal \
|
|||||||
lucas_tbl.cal mersenne.cal mod.cal pell.cal pi.cal pix.cal \
|
lucas_tbl.cal mersenne.cal mod.cal pell.cal pi.cal pix.cal \
|
||||||
pollard.cal poly.cal psqrt.cal quat.cal regress.cal solve.cal \
|
pollard.cal poly.cal psqrt.cal quat.cal regress.cal solve.cal \
|
||||||
sumsq.cal surd.cal unitfrac.cal varargs.cal chrem.cal mfactor.cal \
|
sumsq.cal surd.cal unitfrac.cal varargs.cal chrem.cal mfactor.cal \
|
||||||
bindings randmprime.cal test1700.cal randrun.cal \
|
bindings randmprime.cal test1700.cal randrun.cal linear.cal \
|
||||||
randbitrun.cal bernoulli.cal test2300.cal test2600.cal \
|
randbitrun.cal bernoulli.cal test2300.cal test2600.cal \
|
||||||
test2700.cal test3100.cal test3300.cal test3400.cal prompt.cal \
|
test2700.cal test3100.cal test3300.cal test3400.cal prompt.cal \
|
||||||
test3500.cal seedrandom.cal test4000.cal test4100.cal test4600.cal \
|
test3500.cal seedrandom.cal test4000.cal test4100.cal test4600.cal \
|
||||||
beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
|
beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
|
||||||
randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.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 alg_config.cal sumtimes.cal
|
||||||
|
|
||||||
# These files are found (but not built) in the distribution
|
# These files are found (but not built) in the distribution
|
||||||
#
|
#
|
||||||
@@ -191,8 +217,8 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
|
|||||||
# used by the upper level Makefile to determine of we have done all
|
# used by the upper level Makefile to determine of we have done all
|
||||||
#
|
#
|
||||||
.all:
|
.all:
|
||||||
rm -f .all
|
${RM} -f .all
|
||||||
touch .all
|
${TOUCH} .all
|
||||||
|
|
||||||
##
|
##
|
||||||
#
|
#
|
||||||
@@ -208,17 +234,17 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
|
|||||||
##
|
##
|
||||||
|
|
||||||
distlist: ${DISTLIST}
|
distlist: ${DISTLIST}
|
||||||
${Q}for i in ${DISTLIST} /dev/null; do \
|
${Q} for i in ${DISTLIST} /dev/null; do \
|
||||||
if [ X"$$i" != X"/dev/null" ]; then \
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo cal/$$i; \
|
echo cal/$$i; \
|
||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
distdir:
|
distdir:
|
||||||
${Q}echo cal
|
${Q} echo cal
|
||||||
|
|
||||||
calcliblist:
|
calcliblist:
|
||||||
${Q}for i in ${CALCLIBLIST} /dev/null; do \
|
${Q} for i in ${CALCLIBLIST} /dev/null; do \
|
||||||
if [ X"$$i" != X"/dev/null" ]; then \
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo cal/$$i; \
|
echo cal/$$i; \
|
||||||
fi; \
|
fi; \
|
||||||
@@ -231,7 +257,7 @@ calcliblist:
|
|||||||
##
|
##
|
||||||
|
|
||||||
echo_inst_files:
|
echo_inst_files:
|
||||||
${Q}for i in ${CALC_FILES} /dev/null; do \
|
${Q} for i in ${CALC_FILES} /dev/null; do \
|
||||||
if [ X"$$i" != X"/dev/null" ]; then \
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo __file__ ${CALC_SHAREDIR}/$$i; \
|
echo __file__ ${CALC_SHAREDIR}/$$i; \
|
||||||
fi; \
|
fi; \
|
||||||
@@ -245,33 +271,62 @@ echo_inst_files:
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|
||||||
clobber:
|
clobber: clean
|
||||||
rm -f .all
|
${RM} -f .all
|
||||||
|
|
||||||
|
# install everything
|
||||||
|
#
|
||||||
|
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||||
|
#
|
||||||
install: all
|
install: all
|
||||||
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \
|
-${Q} if [ ! -d ${T}${CALC_SHAREDIR} ]; then \
|
||||||
echo mkdir $T${CALC_SHAREDIR}; \
|
echo ${MKDIR} ${T}${CALC_SHAREDIR}; \
|
||||||
mkdir $T${CALC_SHAREDIR}; \
|
${MKDIR} ${T}${CALC_SHAREDIR}; \
|
||||||
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \
|
if [ ! -d "${T}${CALC_SHAREDIR}" ]; then \
|
||||||
echo mkdir -p "$T${CALC_SHAREDIR}"; \
|
echo ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
|
||||||
mkdir -p "$T${CALC_SHAREDIR}"; \
|
${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
|
||||||
fi; \
|
fi; \
|
||||||
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \
|
echo ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
|
||||||
${CHMOD} 0755 $T${CALC_SHAREDIR}; \
|
${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
${TRUE}; \
|
||||||
fi
|
fi
|
||||||
${Q}for i in ${CALC_FILES} /dev/null; do \
|
${Q} for i in ${CALC_FILES} /dev/null; do \
|
||||||
if [ "$$i" = "/dev/null" ]; then \
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
continue; \
|
continue; \
|
||||||
fi; \
|
fi; \
|
||||||
if ${CMP} -s $$i $T${CALC_SHAREDIR}/$$i; then \
|
if ${CMP} -s $$i ${T}${CALC_SHAREDIR}/$$i; then \
|
||||||
true; \
|
${TRUE}; \
|
||||||
else \
|
else \
|
||||||
rm -f $T${CALC_SHAREDIR}/$$i.new; \
|
${RM} -f ${T}${CALC_SHAREDIR}/$$i.new; \
|
||||||
cp -f $$i $T${CALC_SHAREDIR}/$$i.new; \
|
${CP} -f $$i ${T}${CALC_SHAREDIR}/$$i.new; \
|
||||||
${CHMOD} 0444 $T${CALC_SHAREDIR}/$$i.new; \
|
${CHMOD} 0444 ${T}${CALC_SHAREDIR}/$$i.new; \
|
||||||
mv -f $T${CALC_SHAREDIR}/$$i.new $T${CALC_SHAREDIR}/$$i; \
|
${MV} -f ${T}${CALC_SHAREDIR}/$$i.new ${T}${CALC_SHAREDIR}/$$i; \
|
||||||
echo "installed $T${CALC_SHAREDIR}/$$i"; \
|
echo "installed ${T}${CALC_SHAREDIR}/$$i"; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
# Try to remove everything that was installed
|
||||||
|
#
|
||||||
|
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||||
|
#
|
||||||
|
uninstall:
|
||||||
|
-${Q} for i in ${CALC_FILES} /dev/null; do \
|
||||||
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
|
continue; \
|
||||||
|
fi; \
|
||||||
|
if [ -f "${T}${CALC_SHAREDIR}/$$i" ]; then \
|
||||||
|
${RM} -f "${T}${CALC_SHAREDIR}/$$i"; \
|
||||||
|
if [ -f "${T}${CALC_SHAREDIR}/$$i" ]; then \
|
||||||
|
echo "cannot uninstall ${T}${CALC_SHAREDIR}/$$i"; \
|
||||||
|
else \
|
||||||
|
echo "uninstalled ${T}${CALC_SHAREDIR}/$$i"; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
-${Q} for i in ${CALC_SHAREDIR}; do \
|
||||||
|
if [ -d "${T}$$i" ]; then \
|
||||||
|
${RMDIR} "${T}$$i" 2>/dev/null; \
|
||||||
|
echo "cleaned up ${T}$$i"; \
|
||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
|
211
cal/README
211
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.
|
most resource files will print out a short message when they are read.
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
> read lucas
|
; read lucas
|
||||||
lucas(h,n) defined
|
lucas(h,n) defined
|
||||||
gen_u0(h,n,v1) defined
|
gen_u0(h,n,v1) defined
|
||||||
gen_v1(h,n) 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 resource file will cause several functions to be defined.
|
||||||
Executing the lucas function:
|
Executing the lucas function:
|
||||||
|
|
||||||
> lucas(149,60)
|
; lucas(149,60)
|
||||||
1
|
1
|
||||||
> lucas(146,61)
|
; lucas(146,61)
|
||||||
0
|
0
|
||||||
|
|
||||||
shows that 149*2^60-1 is prime whereas 146*2^61-1 is not.
|
shows that 149*2^60-1 is prime whereas 146*2^61-1 is not.
|
||||||
@@ -75,7 +75,7 @@ have meanings are as follows:
|
|||||||
is displayed.
|
is displayed.
|
||||||
|
|
||||||
2 Show func will display more information about a functions
|
2 Show func will display more information about a functions
|
||||||
arguments as well as more argument sdummary information.
|
arguments as well as more argument summary information.
|
||||||
|
|
||||||
3 During execution, allow calc standard resource files
|
3 During execution, allow calc standard resource files
|
||||||
to output additional debugging information.
|
to output additional debugging information.
|
||||||
@@ -103,7 +103,7 @@ either of the bottom 2 bits set:
|
|||||||
print "funcB(size, mass, ...) defined";
|
print "funcB(size, mass, ...) defined";
|
||||||
}
|
}
|
||||||
|
|
||||||
If your the resource file needs to output special debugging informatin,
|
If your the resource file needs to output special debugging information,
|
||||||
we recommend that you check for bit 3 of the config("resource_debug")
|
we recommend that you check for bit 3 of the config("resource_debug")
|
||||||
before printing the debug statement:
|
before printing the debug statement:
|
||||||
|
|
||||||
@@ -117,12 +117,68 @@ The following is a brief description of some of the calc resource files
|
|||||||
that are shipped with calc. See above for example of how to read in
|
that are shipped with calc. See above for example of how to read in
|
||||||
and execute these files.
|
and execute these files.
|
||||||
|
|
||||||
|
alg_config.cal
|
||||||
|
|
||||||
|
global test_time
|
||||||
|
mul_loop(repeat,x) defined
|
||||||
|
mul_ratio(len) defined
|
||||||
|
best_mul2() defined
|
||||||
|
sq_loop(repeat,x) defined
|
||||||
|
sq_ratio(len) defined
|
||||||
|
best_sq2() defined
|
||||||
|
pow_loop(repeat,x,ex) defined
|
||||||
|
pow_ratio(len) defined
|
||||||
|
best_pow2() defined
|
||||||
|
|
||||||
|
These functions search for an optimal value of config("mul2"),
|
||||||
|
config("sq2"), and config("pow2"). The calc default values of these
|
||||||
|
configuration values were set by running this resource file on a
|
||||||
|
1.8GHz AMD 32-bit CPU of ~3406 BogoMIPS.
|
||||||
|
|
||||||
|
The best_mul2() function returns the optimal value of config("mul2").
|
||||||
|
The best_sq2() function returns the optimal value of config("sq2").
|
||||||
|
The best_pow2() function returns the optimal value of config("pow2").
|
||||||
|
The other functions are just support functions.
|
||||||
|
|
||||||
|
By design, best_mul2(), best_sq2(), and best_pow2() take a few
|
||||||
|
minutes to run. These functions increase the number of times a
|
||||||
|
given computational loop is executed until a minimum amount of CPU
|
||||||
|
time is consumed. To watch these functions progress, one can set
|
||||||
|
the config("user_debug") value.
|
||||||
|
|
||||||
|
Here is a suggested way to use this resource file:
|
||||||
|
|
||||||
|
; read alg_config
|
||||||
|
; config("user_debug",2),;
|
||||||
|
; best_mul2(); best_sq2(); best_pow2();
|
||||||
|
; best_mul2(); best_sq2(); best_pow2();
|
||||||
|
; best_mul2(); best_sq2(); best_pow2();
|
||||||
|
|
||||||
|
NOTE: It is perfectly normal for the optimal value returned to differ
|
||||||
|
slightly from run to run. Slight variations due to inaccuracy in
|
||||||
|
CPU timings will cause the best value returned to differ slightly
|
||||||
|
from run to run.
|
||||||
|
|
||||||
|
One can use a calc startup file to change the initial values of
|
||||||
|
config("mul2"), config("sq2"), and config("pow2"). For example one
|
||||||
|
can place into ~/.calcrc these lines:
|
||||||
|
|
||||||
|
config("mul2", 1780),;
|
||||||
|
config("sq2", 3388),;
|
||||||
|
config("pow2", 176),;
|
||||||
|
|
||||||
|
to automatically and silently change these config values.
|
||||||
|
See help/config and CALCRC in help/environment for more information.
|
||||||
|
|
||||||
|
|
||||||
beer.cal
|
beer.cal
|
||||||
|
|
||||||
Calc's contribution to the 99 Bottles of Beer web page:
|
Calc's contribution to the 99 Bottles of Beer web page:
|
||||||
|
|
||||||
http://www.ionet.net/~timtroyr/funhouse/beer.html#calc
|
http://www.ionet.net/~timtroyr/funhouse/beer.html#calc
|
||||||
|
|
||||||
|
NOTE: This resource produces a lot of output. :-)
|
||||||
|
|
||||||
|
|
||||||
bernoulli.cal
|
bernoulli.cal
|
||||||
|
|
||||||
@@ -132,7 +188,7 @@ bernoulli.cal
|
|||||||
|
|
||||||
NOTE: There is now a bernoulli() builtin function. This file is
|
NOTE: There is now a bernoulli() builtin function. This file is
|
||||||
left here for backward compatibility and now simply returns
|
left here for backward compatibility and now simply returns
|
||||||
the buildin function.
|
the builtin function.
|
||||||
|
|
||||||
|
|
||||||
bigprime.cal
|
bigprime.cal
|
||||||
@@ -153,9 +209,9 @@ chi.cal
|
|||||||
|
|
||||||
The chi_prob() function does not work well with odd degrees of freedom.
|
The chi_prob() function does not work well with odd degrees of freedom.
|
||||||
It is reasonable with even degrees of freedom, although one must give
|
It is reasonable with even degrees of freedom, although one must give
|
||||||
a sifficently small error term as the degress gets large (>100).
|
a sufficiently small error term as the degrees gets large (>100).
|
||||||
|
|
||||||
The Z(x) and P(x) are internal statistical funcions.
|
The Z(x) and P(x) are internal statistical functions.
|
||||||
|
|
||||||
eps is an optional epsilon() like error term.
|
eps is an optional epsilon() like error term.
|
||||||
|
|
||||||
@@ -180,6 +236,38 @@ deg.cal
|
|||||||
Calculate in degrees, minutes, and seconds.
|
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
|
ellip.cal
|
||||||
|
|
||||||
efactor(iN, ia, B, force)
|
efactor(iN, ia, B, force)
|
||||||
@@ -194,6 +282,8 @@ hello.cal
|
|||||||
http://www.latech.edu/~acm/HelloWorld.shtml
|
http://www.latech.edu/~acm/HelloWorld.shtml
|
||||||
http://www.latech.edu/~acm/helloworld/calc.html
|
http://www.latech.edu/~acm/helloworld/calc.html
|
||||||
|
|
||||||
|
NOTE: This resource produces a lot of output. :-)
|
||||||
|
|
||||||
|
|
||||||
intfile.cal
|
intfile.cal
|
||||||
|
|
||||||
@@ -222,6 +312,14 @@ intfile.cal
|
|||||||
of the integer become the last octets of the file.
|
of the integer become the last octets of the file.
|
||||||
|
|
||||||
|
|
||||||
|
linear.cal
|
||||||
|
|
||||||
|
linear(x0, y0, x1, y1, x)
|
||||||
|
|
||||||
|
Returns the value y such that (x,y) in on the line (x0,y0), (x1,y1).
|
||||||
|
Requires x0 != y0.
|
||||||
|
|
||||||
|
|
||||||
lucas.cal
|
lucas.cal
|
||||||
|
|
||||||
lucas(h, n)
|
lucas(h, n)
|
||||||
@@ -497,6 +595,58 @@ regress.cal
|
|||||||
Errors are reported with '****' messages, or worse. :-)
|
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.cal
|
||||||
|
|
||||||
seedrandom(seed1, seed2, bitsize [,trials])
|
seedrandom(seed1, seed2, bitsize [,trials])
|
||||||
@@ -515,6 +665,24 @@ seedrandom.cal
|
|||||||
Blum primes for the modulus.
|
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.cal
|
||||||
|
|
||||||
solve(low, high, epsilon)
|
solve(low, high, epsilon)
|
||||||
@@ -533,6 +701,27 @@ sumsq.cal
|
|||||||
4N+1, and always impossible for primes of the form 4N-1.
|
4N+1, and always impossible for primes of the form 4N-1.
|
||||||
|
|
||||||
|
|
||||||
|
sumtimes.cal
|
||||||
|
|
||||||
|
timematsum(N)
|
||||||
|
timelistsum(N)
|
||||||
|
timematsort(N)
|
||||||
|
timelistsort(N)
|
||||||
|
timematreverse(N)
|
||||||
|
timelistreverse(N)
|
||||||
|
timematssq(N)
|
||||||
|
timelistssq(N)
|
||||||
|
timehmean(N,M)
|
||||||
|
doalltimes(N)
|
||||||
|
|
||||||
|
Give the user CPU time for various ways of evaluating sums, sums of
|
||||||
|
squares, etc, for large lists and matrices. N is the size of
|
||||||
|
the list or matrix to use. The doalltimes() function will run
|
||||||
|
all fo the sumtimes tests. For example:
|
||||||
|
|
||||||
|
doalltimes(1e6);
|
||||||
|
|
||||||
|
|
||||||
surd.cal
|
surd.cal
|
||||||
|
|
||||||
surd(a, b)
|
surd(a, b)
|
||||||
@@ -823,10 +1012,10 @@ xx_print.cal
|
|||||||
## A copy of version 2.1 of the GNU Lesser General Public License is
|
## 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
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.9 $
|
## @(#) $Revision: 30.1 $
|
||||||
## @(#) $Id: README,v 29.9 2003/01/05 08:10:56 chongo Exp $
|
## @(#) $Id: README,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1990/02/15 01:50:32
|
## Under source code control: 1990/02/15 01:50:32
|
||||||
|
1253
cal/alg_config.cal
Normal file
1253
cal/alg_config.cal
Normal file
File diff suppressed because it is too large
Load Diff
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: beer.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: beer.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/beer.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/beer.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/11/13 13:21:05
|
* Under source code control: 1996/11/13 13:21:05
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.3 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: bernoulli.cal,v 29.3 2000/12/17 12:26:04 chongo Exp $
|
* @(#) $Id: bernoulli.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bernoulli.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bernoulli.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/09/30 11:18:41
|
* Under source code control: 1991/09/30 11:18:41
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: bigprime.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: bigprime.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bigprime.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bigprime.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/05/22 21:56:32
|
* Under source code control: 1991/05/22 21:56:32
|
||||||
|
@@ -14,10 +14,10 @@
|
|||||||
# A copy of version 2.1 of the GNU Lesser General Public License is
|
# 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
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.2 $
|
# @(#) $Revision: 30.1 $
|
||||||
# @(#) $Id: bindings,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
# @(#) $Id: bindings,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bindings,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bindings,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1993/05/02 20:09:19
|
# Under source code control: 1993/05/02 20:09:19
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: chi.cal,v 29.2 2001/04/08 10:21:23 chongo Exp $
|
* @(#) $Id: chi.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/chi.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/chi.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 2001/03/27 14:10:11
|
* Under source code control: 2001/03/27 14:10:11
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: chrem.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: chrem.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/chrem.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/chrem.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1992/09/26 01:00:47
|
* Under source code control: 1992/09/26 01:00:47
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: deg.cal,v 29.4 2003/01/26 19:32:41 chongo Exp $
|
* @(#) $Id: deg.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/deg.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/deg.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:33
|
* Under source code control: 1990/02/15 01:50:33
|
||||||
|
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: 30.2 $
|
||||||
|
* @(#) $Id: dotest.cal,v 30.2 2007/03/16 11:09:54 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;
|
||||||
|
}
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: ellip.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: ellip.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:33
|
* Under source code control: 1990/02/15 01:50:33
|
||||||
@@ -28,16 +28,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Attempt to factor numbers using elliptic functions.
|
* Attempt to factor numbers using elliptic functions:
|
||||||
* y^2 = x^3 + a*x + b (mod N).
|
|
||||||
*
|
*
|
||||||
* Many points (x,y) (mod N) are found that solve the above equation,
|
* y^2 = x^3 + a*x + b (mod ellip_N).
|
||||||
|
*
|
||||||
|
* Many points (x,y) (mod ellip_N) are found that solve the above equation,
|
||||||
* starting from a trivial solution and 'multiplying' that point together
|
* starting from a trivial solution and 'multiplying' that point together
|
||||||
* to generate high powers of the point, looking for such a point whose
|
* to generate high powers of the point, looking for such a point whose
|
||||||
* order contains a common factor with N. The order of the group of points
|
* order contains a common factor with ellip_N. The order of the group of
|
||||||
* varies almost randomly within a certain interval for each choice of a
|
* points varies almost randomly within a certain interval for each choice of
|
||||||
* and b, and thus each choice provides an independent opportunity to
|
* a and b, and thus each choice provides an independent opportunity to
|
||||||
* factor N. To generate a trivial solution, a is chosen and then b is
|
* factor ellip_N. To generate a trivial solution, a is chosen and then b is
|
||||||
* selected so that (1,1) is a solution. The multiplication is done using
|
* selected so that (1,1) is a solution. The multiplication is done using
|
||||||
* the basic fact that the equation is a cubic, and so if a line hits the
|
* the basic fact that the equation is a cubic, and so if a line hits the
|
||||||
* curve in two rational points, then the third intersection point must
|
* curve in two rational points, then the third intersection point must
|
||||||
@@ -45,9 +46,9 @@
|
|||||||
* the number of rational solutions can be made very large. When modular
|
* the number of rational solutions can be made very large. When modular
|
||||||
* arithmetic is used, solving for the third point requires the taking of a
|
* arithmetic is used, solving for the third point requires the taking of a
|
||||||
* modular inverse (instead of division), and if this fails, then the GCD
|
* modular inverse (instead of division), and if this fails, then the GCD
|
||||||
* of the failing value and N provides a factor of N. This description is
|
* of the failing value and ellip_N provides a factor of ellip_N.
|
||||||
* only an approximation, read "A Course in Number Theory and Cryptography"
|
* This description is only an approximation, read "A Course in Number
|
||||||
* by Neal Koblitz for a good explanation.
|
* Theory and Cryptography" by Neal Koblitz for a good explanation.
|
||||||
*
|
*
|
||||||
* efactor(iN, ia, B, force)
|
* efactor(iN, ia, B, force)
|
||||||
* iN is the number to be factored.
|
* iN is the number to be factored.
|
||||||
@@ -81,15 +82,15 @@
|
|||||||
*
|
*
|
||||||
* If a factor is found, it is returned and is also saved in the global
|
* If a factor is found, it is returned and is also saved in the global
|
||||||
* variable f. The number being factored is also saved in the global
|
* variable f. The number being factored is also saved in the global
|
||||||
* variable N.
|
* variable ellip_N.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
obj point {x, y};
|
obj point {x, y};
|
||||||
global N; /* number to factor */
|
global ellip_N; /* number to factor */
|
||||||
global a; /* first coefficient */
|
global ellip_a; /* first coefficient */
|
||||||
global b; /* second coefficient */
|
global ellip_b; /* second coefficient */
|
||||||
global f; /* found factor */
|
global ellip_f; /* found factor */
|
||||||
|
|
||||||
|
|
||||||
define efactor(iN, ia, B, force)
|
define efactor(iN, ia, B, force)
|
||||||
@@ -103,28 +104,28 @@ define efactor(iN, ia, B, force)
|
|||||||
if (isnull(ia))
|
if (isnull(ia))
|
||||||
ia = 1;
|
ia = 1;
|
||||||
obj point x;
|
obj point x;
|
||||||
a = ia;
|
ellip_a = ia;
|
||||||
b = -ia;
|
ellip_b = -ia;
|
||||||
N = iN;
|
ellip_N = iN;
|
||||||
C = isqrt(N);
|
C = isqrt(ellip_N);
|
||||||
C = 2 * C + 2 * isqrt(C) + 1;
|
C = 2 * C + 2 * isqrt(C) + 1;
|
||||||
f = 0;
|
ellip_f = 0;
|
||||||
while (f == 0) {
|
while (ellip_f == 0) {
|
||||||
print "A =", a;
|
print "A =", ellip_a;
|
||||||
x.x = 1;
|
x.x = 1;
|
||||||
x.y = 1;
|
x.y = 1;
|
||||||
print 2, x;
|
print 2, x;
|
||||||
x = x ^ (2 ^ (highbit(C) + 1));
|
x = x ^ (2 ^ (highbit(C) + 1));
|
||||||
for (p = 3; ((p < B) && (f == 0)); p += 2) {
|
for (p = 3; ((p < B) && (ellip_f == 0)); p += 2) {
|
||||||
if (!ptest(p, 1))
|
if (!ptest(p, 1))
|
||||||
continue;
|
continue;
|
||||||
print p, x;
|
print p, x;
|
||||||
x = x ^ (p ^ ((highbit(C) // highbit(p)) + 1));
|
x = x ^ (p ^ ((highbit(C) // highbit(p)) + 1));
|
||||||
}
|
}
|
||||||
a++;
|
ellip_a++;
|
||||||
b--;
|
ellip_b--;
|
||||||
}
|
}
|
||||||
return f;
|
return ellip_f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -141,18 +142,18 @@ define point_mul(p1, p2)
|
|||||||
if (p2 == 1)
|
if (p2 == 1)
|
||||||
return p1;
|
return p1;
|
||||||
if (p1 == p2)
|
if (p1 == p2)
|
||||||
return point_square(&p1);
|
return point_square(`p1);
|
||||||
obj point r;
|
obj point r;
|
||||||
m = (minv(p2.x - p1.x, N) * (p2.y - p1.y)) % N;
|
m = (minv(p2.x - p1.x, ellip_N) * (p2.y - p1.y)) % ellip_N;
|
||||||
if (m == 0) {
|
if (m == 0) {
|
||||||
if (f == 0)
|
if (ellip_f == 0)
|
||||||
f = gcd(p2.x - p1.x, N);
|
ellip_f = gcd(p2.x - p1.x, ellip_N);
|
||||||
r.x = 1;
|
r.x = 1;
|
||||||
r.y = 1;
|
r.y = 1;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
r.x = (m^2 - p1.x - p2.x) % N;
|
r.x = (m^2 - p1.x - p2.x) % ellip_N;
|
||||||
r.y = ((m * (p1.x - r.x)) - p1.y) % N;
|
r.y = ((m * (p1.x - r.x)) - p1.y) % ellip_N;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,16 +163,16 @@ define point_square(p)
|
|||||||
local r, m;
|
local r, m;
|
||||||
|
|
||||||
obj point r;
|
obj point r;
|
||||||
m = ((3 * p.x^2 + a) * minv(p.y << 1, N)) % N;
|
m = ((3 * p.x^2 + ellip_a) * minv(p.y << 1, ellip_N)) % ellip_N;
|
||||||
if (m == 0) {
|
if (m == 0) {
|
||||||
if (f == 0)
|
if (ellip_f == 0)
|
||||||
f = gcd(p.y << 1, N);
|
ellip_f = gcd(p.y << 1, ellip_N);
|
||||||
r.x = 1;
|
r.x = 1;
|
||||||
r.y = 1;
|
r.y = 1;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
r.x = (m^2 - p.x - p.x) % N;
|
r.x = (m^2 - p.x - p.x) % ellip_N;
|
||||||
r.y = ((m * (p.x - r.x)) - p.y) % N;
|
r.y = ((m * (p.x - r.x)) - p.y) % ellip_N;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,10 +185,10 @@ define point_pow(p, pow)
|
|||||||
if (isodd(pow))
|
if (isodd(pow))
|
||||||
r = p;
|
r = p;
|
||||||
t = p;
|
t = p;
|
||||||
for (bit = 2; ((bit <= pow) && (f == 0)); bit <<= 1) {
|
for (bit = 2; ((bit <= pow) && (ellip_f == 0)); bit <<= 1) {
|
||||||
t = point_square(&t);
|
t = point_square(`t);
|
||||||
if (bit & pow)
|
if (bit & pow)
|
||||||
r = point_mul(&t, &r);
|
r = point_mul(`t, `r);
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: hello.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: hello.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/hello.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/hello.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/11/13 13:25:43
|
* Under source code control: 1996/11/13 13:25:43
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.5 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: intfile.cal,v 29.5 2001/04/10 22:09:34 chongo Exp $
|
* @(#) $Id: intfile.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/intfile.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/intfile.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 2001/03/31 08:13:11
|
* Under source code control: 2001/03/31 08:13:11
|
||||||
|
56
cal/linear.cal
Normal file
56
cal/linear.cal
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* linear - perform a simple two point 2D linear interpolation
|
||||||
|
*
|
||||||
|
* Copyright (C) 2005-2007 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.
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 30.2 $
|
||||||
|
* @(#) $Id: linear.cal,v 30.2 2007/03/17 05:57:42 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/linear.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2005/12/12 06:41:50
|
||||||
|
* File existed as early as: 2005
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* linear - perform a simple two point 2D linear interpolation
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* x0, y0 first known point on the line
|
||||||
|
* x1, y1 second knonw point on the line
|
||||||
|
* x a given point to interpolate on
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* y such that (x,y) is on the line defined by (x0,y0) and (x1,y1)
|
||||||
|
*
|
||||||
|
* NOTE: The line cannot be vertical. So x0 != y0.
|
||||||
|
*/
|
||||||
|
define linear(x0, y0, x1, y1, x)
|
||||||
|
{
|
||||||
|
/* firewall */
|
||||||
|
if (!isnum(x0) || ! isnum(y0) || !isnum(x1) || ! isnum(y1) || !isnum(x)) {
|
||||||
|
quit "non-numeric argument passed to linear";
|
||||||
|
}
|
||||||
|
if (x0 == x1) {
|
||||||
|
quit "linear given a line with an infinite slope";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* return y = y0 + (delta_Y/delta_X) * (x - x0) */
|
||||||
|
return y0 + (((y1-y0)/(x1-x0)) * (x - x0));
|
||||||
|
}
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.6 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: lucas.cal,v 29.6 2002/07/10 09:43:46 chongo Exp $
|
* @(#) $Id: lucas.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/05/03 16:49:51
|
* Under source code control: 1990/05/03 16:49:51
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.3 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: lucas_chk.cal,v 29.3 2001/03/31 13:31:34 chongo Exp $
|
* @(#) $Id: lucas_chk.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_chk.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_chk.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/01/11 05:41:43
|
* Under source code control: 1991/01/11 05:41:43
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: lucas_tbl.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: lucas_tbl.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_tbl.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_tbl.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/01/26 02:43:43
|
* Under source code control: 1991/01/26 02:43:43
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: mersenne.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: mersenne.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mersenne.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mersenne.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/05/22 21:56:36
|
* Under source code control: 1991/05/22 21:56:36
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: mfactor.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: mfactor.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mfactor.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mfactor.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/07/06 06:09:40
|
* Under source code control: 1996/07/06 06:09:40
|
||||||
@@ -261,7 +261,7 @@ define mfactor(n, start_k, rept_loop, p_elim)
|
|||||||
} else {
|
} else {
|
||||||
/* report this loop */
|
/* report this loop */
|
||||||
printf("at 2*%d*%d+1, cpu: %f\n",
|
printf("at 2*%d*%d+1, cpu: %f\n",
|
||||||
(q-1)/(2*n), n, runtime());
|
(q-1)/(2*n), n, usertime());
|
||||||
fflush(files(1));
|
fflush(files(1));
|
||||||
loop = 0;
|
loop = 0;
|
||||||
}
|
}
|
||||||
@@ -274,7 +274,7 @@ define mfactor(n, start_k, rept_loop, p_elim)
|
|||||||
if (rept_loop <= ++loop) {
|
if (rept_loop <= ++loop) {
|
||||||
/* report this loop */
|
/* report this loop */
|
||||||
printf("at 2*%d*%d+1, cpu: %f\n",
|
printf("at 2*%d*%d+1, cpu: %f\n",
|
||||||
(q-1)/(2*n), n, runtime());
|
(q-1)/(2*n), n, usertime());
|
||||||
fflush(files(1));
|
fflush(files(1));
|
||||||
loop = 0;
|
loop = 0;
|
||||||
}
|
}
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: mod.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: mod.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mod.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mod.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:34
|
* Under source code control: 1990/02/15 01:50:34
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: natnumset.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: natnumset.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/natnumset.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/natnumset.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/09/07 23:53:51
|
* 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)
|
define interval(a, b)
|
||||||
{
|
{
|
||||||
local i, j, s;
|
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))
|
if (!isint(a) || !isint(b))
|
||||||
quit "Non-integer argument for interval";
|
quit "Non-integer argument for interval";
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: pell.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: pell.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pell.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pell.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:34
|
* Under source code control: 1990/02/15 01:50:34
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* pi - various routines to calculate pi
|
* pi - various routines to calculate pi
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell
|
* Copyright (C) 1999-2004 David I. Bell
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: pi.cal,v 29.4 2004/02/23 13:06:31 chongo Exp $
|
* @(#) $Id: pi.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pi.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pi.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/05/22 21:56:37
|
* Under source code control: 1991/05/22 21:56:37
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: pix.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: pix.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pix.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pix.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/07/09 03:14:14
|
* Under source code control: 1996/07/09 03:14:14
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: pollard.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: pollard.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pollard.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pollard.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/05/22 21:56:37
|
* Under source code control: 1991/05/22 21:56:37
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: poly.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: poly.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/poly.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/poly.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:35
|
* Under source code control: 1990/02/15 01:50:35
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: prompt.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: prompt.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/prompt.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/prompt.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/12/18 04:43:25
|
* Under source code control: 1995/12/18 04:43:25
|
||||||
@@ -101,7 +101,7 @@ define adder() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
global x;
|
global prompt_x;
|
||||||
|
|
||||||
define showvalues(str) {
|
define showvalues(str) {
|
||||||
local s;
|
local s;
|
||||||
@@ -109,8 +109,8 @@ define showvalues(str) {
|
|||||||
s = prompt("? ");
|
s = prompt("? ");
|
||||||
if (s == "end")
|
if (s == "end")
|
||||||
break;
|
break;
|
||||||
x = eval(s);
|
prompt_x = eval(s);
|
||||||
if (!isnum(x)) {
|
if (!isnum(prompt_x)) {
|
||||||
print "Please enter a number";
|
print "Please enter a number";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: psqrt.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: psqrt.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/psqrt.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/psqrt.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:35
|
* Under source code control: 1990/02/15 01:50:35
|
||||||
|
@@ -18,10 +18,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: qtime.cal,v 29.4 2000/12/18 10:18:40 chongo Exp $
|
* @(#) $Id: qtime.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/qtime.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/qtime.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1999/10/13 04:10:33
|
* Under source code control: 1999/10/13 04:10:33
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: quat.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: quat.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/quat.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/quat.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:35
|
* Under source code control: 1990/02/15 01:50:35
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: randbitrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: randbitrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randbitrun.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randbitrun.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/02/13 03:43:11
|
* Under source code control: 1995/02/13 03:43:11
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: randmprime.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: randmprime.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randmprime.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randmprime.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1994/03/14 23:11:21
|
* Under source code control: 1994/03/14 23:11:21
|
||||||
@@ -88,8 +88,8 @@ randmprime(bits, seed, dbg)
|
|||||||
* loop until we find a prime
|
* loop until we find a prime
|
||||||
*/
|
*/
|
||||||
if (dbg >= 1) {
|
if (dbg >= 1) {
|
||||||
start = runtime();
|
start = usertime();
|
||||||
init = runtime();
|
init = usertime();
|
||||||
plush = 0;
|
plush = 0;
|
||||||
print "DEBUG1: testing (h+" : plush : ")*2^" : n : "-1";
|
print "DEBUG1: testing (h+" : plush : ")*2^" : n : "-1";
|
||||||
}
|
}
|
||||||
@@ -97,7 +97,7 @@ randmprime(bits, seed, dbg)
|
|||||||
|
|
||||||
/* bump h, and n if needed */
|
/* bump h, and n if needed */
|
||||||
if (dbg >= 2) {
|
if (dbg >= 2) {
|
||||||
stop = runtime();
|
stop = usertime();
|
||||||
print "DEBUG2: last test:", stop-start, " total time:", stop-init;
|
print "DEBUG2: last test:", stop-start, " total time:", stop-init;
|
||||||
}
|
}
|
||||||
if (dbg >= 1) {
|
if (dbg >= 1) {
|
||||||
@@ -116,7 +116,7 @@ randmprime(bits, seed, dbg)
|
|||||||
|
|
||||||
/* found a prime */
|
/* found a prime */
|
||||||
if (dbg >= 2) {
|
if (dbg >= 2) {
|
||||||
stop = runtime();
|
stop = usertime();
|
||||||
print "DEBUG2: last test:", stop-start, " total time:", stop-init;
|
print "DEBUG2: last test:", stop-start, " total time:", stop-init;
|
||||||
print "DEBUG3: " : h : "*2^" : n : "-1 is prime";
|
print "DEBUG3: " : h : "*2^" : n : "-1 is prime";
|
||||||
}
|
}
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: randombitrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: randombitrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randombitrun.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randombitrun.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/02/13 03:43:11
|
* Under source code control: 1995/02/13 03:43:11
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: randomrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: randomrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randomrun.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randomrun.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/02/19 03:35:59
|
* Under source code control: 1997/02/19 03:35:59
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: randrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: randrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randrun.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randrun.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/02/12 20:00:06
|
* Under source code control: 1995/02/12 20:00:06
|
||||||
|
695
cal/regress.cal
695
cal/regress.cal
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* regress - calc regression and correctness test suite
|
* regress - calc regression and correctness test suite
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999-2003 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
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.18 $
|
* @(#) $Revision: 30.3 $
|
||||||
* @(#) $Id: regress.cal,v 29.18 2004/02/23 05:58:45 chongo Exp $
|
* @(#) $Id: regress.cal,v 30.3 2007/07/11 22:58:26 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:36
|
* Under source code control: 1990/02/15 01:50:36
|
||||||
@@ -201,7 +201,6 @@ define test_variables()
|
|||||||
local x1, x2, x3;
|
local x1, x2, x3;
|
||||||
global g1, g2;
|
global g1, g2;
|
||||||
local t;
|
local t;
|
||||||
global globalvar;
|
|
||||||
local x;
|
local x;
|
||||||
|
|
||||||
print '350: Beginning test_variables';
|
print '350: Beginning test_variables';
|
||||||
@@ -404,14 +403,14 @@ define test_config()
|
|||||||
'512: config("trace") == 0');
|
'512: config("trace") == 0');
|
||||||
vrfy(config("maxprint") == 16,
|
vrfy(config("maxprint") == 16,
|
||||||
'513: config("maxprint") == 16');
|
'513: config("maxprint") == 16');
|
||||||
vrfy(config("mul2") == 20,
|
vrfy(config("mul2") == 1780,
|
||||||
'514: config("mul2") == 20');
|
'514: config("mul2") == 1780');
|
||||||
vrfy(config("sq2") == 20,
|
vrfy(config("sq2") == 3388,
|
||||||
'515: config("sq2") == 20');
|
'515: config("sq2") == 3388');
|
||||||
vrfy(config("pow2") == 40,
|
vrfy(config("pow2") == 176,
|
||||||
'516: config("pow2") == 40');
|
'516: config("pow2") == 176');
|
||||||
vrfy(config("redc2") == 50,
|
vrfy(config("redc2") == 220,
|
||||||
'517: config("redc2") == 50');
|
'517: config("redc2") == 220');
|
||||||
vrfy(config("tilde"),
|
vrfy(config("tilde"),
|
||||||
'518: config("tilde")');
|
'518: config("tilde")');
|
||||||
vrfy(config("tab"),
|
vrfy(config("tab"),
|
||||||
@@ -498,7 +497,33 @@ define test_config()
|
|||||||
vrfy(config("mode2") == "off",
|
vrfy(config("mode2") == "off",
|
||||||
'556: config("mode2") == "off"');
|
'556: config("mode2") == "off"');
|
||||||
|
|
||||||
print '557: Ending test_config';
|
/* hz is numeric */
|
||||||
|
vrfy(isint(config("hz")), '557: isint(config("hz"))');
|
||||||
|
|
||||||
|
/* compile_custom is simple */
|
||||||
|
vrfy(issimple(config("compile_custom")),
|
||||||
|
'558: issimple(config("compile_custom"))');
|
||||||
|
|
||||||
|
/* allow_custom is simple */
|
||||||
|
vrfy(issimple(config("allow_custom")),
|
||||||
|
'559: issimple(config("allow_custom"))');
|
||||||
|
|
||||||
|
/* allow_custom is simple */
|
||||||
|
vrfy(issimple(config("allow_custom")),
|
||||||
|
'559: issimple(config("allow_custom"))');
|
||||||
|
|
||||||
|
/* baseb is numeric */
|
||||||
|
vrfy(isint(config("baseb")), '560: isint(config("baseb"))');
|
||||||
|
|
||||||
|
/* redecl_warn is simple */
|
||||||
|
vrfy(issimple(config("redecl_warn")),
|
||||||
|
'561: issimple(config("redecl_warn"))');
|
||||||
|
|
||||||
|
/* dupvar_warn is simple */
|
||||||
|
vrfy(issimple(config("dupvar_warn")),
|
||||||
|
'562: issimple(config("rdupvar_warn"))');
|
||||||
|
|
||||||
|
print '563: Ending test_config';
|
||||||
}
|
}
|
||||||
print '010: parsed test_config()';
|
print '010: parsed test_config()';
|
||||||
|
|
||||||
@@ -571,12 +596,18 @@ print '012: parsed squarecheck(a, b, str)';
|
|||||||
define powercheck(a, p1, p2, str)
|
define powercheck(a, p1, p2, str)
|
||||||
{
|
{
|
||||||
local a1, a2, a3;
|
local a1, a2, a3;
|
||||||
|
local b1, b2, b3;
|
||||||
|
|
||||||
a1 = (a^p1)^p2;
|
a1 = (a^p1)^p2;
|
||||||
a2 = (a^p2)^p1;
|
a2 = (a^p2)^p1;
|
||||||
a3 = a^(p1*p2);
|
a3 = a^(p1*p2);
|
||||||
|
b1 = (a**p1)**p2;
|
||||||
|
b2 = (a**p2)**p1;
|
||||||
|
b3 = a**(p1*p2);
|
||||||
if (a1 != a2) {print '**** (a^p1)^p2 != (a^p2)^p1:', str; ++prob;}
|
if (a1 != a2) {print '**** (a^p1)^p2 != (a^p2)^p1:', str; ++prob;}
|
||||||
if (a1 != a3) {print '**** (a^p1)^p2 != a^(p1*p2):', str; ++prob;}
|
if (a1 != a3) {print '**** (a^p1)^p2 != a^(p1*p2):', str; ++prob;}
|
||||||
|
if (b1 != b2) {print '**** (b^p1)^p2 != (b^p2)^p1:', str; ++prob;}
|
||||||
|
if (b1 != b3) {print '**** (b^p1)^p2 != b^(p1*p2):', str; ++prob;}
|
||||||
print str;
|
print str;
|
||||||
}
|
}
|
||||||
print '013: parsed powercheck(a, p1, p2, str)';
|
print '013: parsed powercheck(a, p1, p2, str)';
|
||||||
@@ -744,6 +775,7 @@ define test_functions()
|
|||||||
local pi;
|
local pi;
|
||||||
local h, n, r, m, v;
|
local h, n, r, m, v;
|
||||||
local n2, m2, v2;
|
local n2, m2, v2;
|
||||||
|
local t;
|
||||||
|
|
||||||
print '700: Beginning test_functions';
|
print '700: Beginning test_functions';
|
||||||
|
|
||||||
@@ -1310,9 +1342,77 @@ define test_functions()
|
|||||||
* verify sleep
|
* verify sleep
|
||||||
*/
|
*/
|
||||||
vrfy(sleep(1/5) == null(), '1153: sleep(1/5) == null()');
|
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())');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ssq use of lists
|
||||||
|
*/
|
||||||
|
vrfy(ssq(1,2, list(3,4,list(5,6)), list(), 7, 8) == 204,
|
||||||
|
'1156: ssq(1,2, list(3,4,list(5,6)), list(), 7, 8) == 204');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* quomod 5th argument rounding tests
|
||||||
|
*/
|
||||||
|
vrfy(quomod(10,-3,a,b,0) == 1, '1157: vrfy(quomod(10,-3,a,b,0) == 1');
|
||||||
|
vrfy(a == -4, '1158: a == -4');
|
||||||
|
vrfy(b == -2, '1159: b == -2');
|
||||||
|
vrfy(quomod(-10,-3,a,b,1) == 1, '1160: vrfy(quomod(-10,-3,a,b,1) == 1');
|
||||||
|
vrfy(a == 4, '1161: a == 4');
|
||||||
|
vrfy(b == 2, '1162: b == 2');
|
||||||
|
vrfy(quomod(10,3,a,b,2) == 1, '1163: vrfy(quomod(10,3,a,b,2) == 1');
|
||||||
|
vrfy(a == 3, '1164: a == 3');
|
||||||
|
vrfy(b == 1, '1165: b == 1');
|
||||||
|
vrfy(quomod(-10,3,a,b,3) == 1, '1166: vrfy(quomod(-10,3,a,b,3) == 1');
|
||||||
|
vrfy(a == -4, '1167: a == -4');
|
||||||
|
vrfy(b == 2, '1168: b == 2');
|
||||||
|
vrfy(quomod(10,-3,a,b,4) == 1, '1169: vrfy(quomod(10,-3,a,b,4) == 1');
|
||||||
|
vrfy(a == -3, '1170: a == -3');
|
||||||
|
vrfy(b == 1, '1171: b == 1');
|
||||||
|
vrfy(quomod(-10,-3,a,b,5) == 1, '1172: vrfy(quomod(-10,-3,a,b,5) == 1');
|
||||||
|
vrfy(a == 3, '1173: a == 3');
|
||||||
|
vrfy(b == -1, '1174: b == -1');
|
||||||
|
vrfy(quomod(10,3,a,b,6) == 1, '1175: vrfy(quomod(10,3,a,b,6) == 1');
|
||||||
|
vrfy(a == 3, '1176: a == 3');
|
||||||
|
vrfy(b == 1, '1177: b == 1');
|
||||||
|
vrfy(quomod(-10,3,a,b,7) == 1, '1178: vrfy(quomod(-10,3,a,b,7) == 1');
|
||||||
|
vrfy(a == -4, '1179: a == -4');
|
||||||
|
vrfy(b == 2, '1180: b == 2');
|
||||||
|
vrfy(quomod(10,-3,a,b,8) == 1, '1181: vrfy(quomod(10,-3,a,b,8) == 1');
|
||||||
|
vrfy(a == -4, '1182: a == -4');
|
||||||
|
vrfy(b == -2, '1183: b == -2');
|
||||||
|
vrfy(quomod(-10,-3,a,b,9) == 1, '1184: vrfy(quomod(-10,-3,a,b,9) == 1');
|
||||||
|
vrfy(a == 3, '1185: a == 3');
|
||||||
|
vrfy(b == -1, '1186: b == -1');
|
||||||
|
vrfy(quomod(10,3,a,b,10) == 1, '1187: vrfy(quomod(10,3,a,b,10) == 1');
|
||||||
|
vrfy(a == 4, '1188: a == 4');
|
||||||
|
vrfy(b == -2, '1189: b == -2');
|
||||||
|
vrfy(quomod(-10,3,a,b,11) == 1, '1190: vrfy(quomod(-10,3,a,b,11) == 1');
|
||||||
|
vrfy(a == -4, '1191: a == -4');
|
||||||
|
vrfy(b == 2, '1192: b == 2');
|
||||||
|
vrfy(quomod(10,-3,a,b,12) == 1, '1193: vrfy(quomod(10,-3,a,b,12) == 1');
|
||||||
|
vrfy(a == -3, '1194: a == -3');
|
||||||
|
vrfy(b == 1, '1195: b == 1');
|
||||||
|
vrfy(quomod(-10,-3,a,b,13) == 1,'1196: vrfy(quomod(-10,-3,a,b,13) == 1');
|
||||||
|
vrfy(a == 4, '1197: a == 4');
|
||||||
|
vrfy(b == 2, '1198: b == 2');
|
||||||
|
vrfy(quomod(10,3,a,b,14) == 1, '1199: vrfy(quomod(10,3,a,b,14) == 1');
|
||||||
|
vrfy(a == 4, '1200: a == 4');
|
||||||
|
vrfy(b == -2, '1201: b == -2');
|
||||||
|
vrfy(quomod(-10,3,a,b,15) == 1, '1202: vrfy(quomod(-10,3,a,b,15) == 1');
|
||||||
|
vrfy(a == -4, '1203: a == -4');
|
||||||
|
vrfy(b == 2, '1204: b == 2');
|
||||||
|
|
||||||
|
/* runtime(), systime(), usertime() return numeric values */
|
||||||
|
vrfy(isnum(runtime()), '1205: isnum(runtime())');
|
||||||
|
vrfy(isnum(systime()), '1206: isnum(systime())');
|
||||||
|
vrfy(isnum(usertime()), '1207: isnum(usertime())');
|
||||||
|
|
||||||
|
print '1208: Ending test_functions';
|
||||||
}
|
}
|
||||||
print '017: parsed test_functions()';
|
print '017: parsed test_functions()';
|
||||||
|
|
||||||
@@ -1329,14 +1429,14 @@ define _test_underscore()
|
|||||||
local _a = 27;
|
local _a = 27;
|
||||||
local __a = 23209;
|
local __a = 23209;
|
||||||
|
|
||||||
print "1200: Beginning _test_underscore";
|
print "1290: Beginning _test_underscore";
|
||||||
|
|
||||||
vrfy(_a == 27, '1201: _a == 27');
|
vrfy(_a == 27, '1291: _a == 27');
|
||||||
vrfy(_ == 49, '1202: _ == 49');
|
vrfy(_ == 49, '1292: _ == 49');
|
||||||
vrfy(__ == 63, '1203: __ == 63');
|
vrfy(__ == 63, '1293: __ == 63');
|
||||||
vrfy(__a == 23209, '1204: __a == 23209');
|
vrfy(__a == 23209, '1294: __a == 23209');
|
||||||
|
|
||||||
print "1205: Ending _test_underscore";
|
print "1295: Ending _test_underscore";
|
||||||
}
|
}
|
||||||
print '020: parsed _test_underscore';
|
print '020: parsed _test_underscore';
|
||||||
|
|
||||||
@@ -2571,6 +2671,49 @@ define test_2600()
|
|||||||
i = config("sqrt", i);
|
i = config("sqrt", i);
|
||||||
print tnum++: ': i = config("sqrt", i)';
|
print tnum++: ': i = config("sqrt", i)';
|
||||||
|
|
||||||
|
i = epsilon(1e-100),;
|
||||||
|
print tnum++: ': i = epsilon(1e-100),;';
|
||||||
|
vrfy(ln(exp(6)) == 6,
|
||||||
|
strcat(str(tnum++), ': ln(exp(6)) == 6'));
|
||||||
|
vrfy(ln(exp(4)^4) == 16,
|
||||||
|
strcat(str(tnum++), ': ln(exp(4)^4) == 16'));
|
||||||
|
vrfy(ln(exp(6.5)^8) == 52,
|
||||||
|
strcat(str(tnum++), ': ln(exp(6.5)^8) == 52'));
|
||||||
|
vrfy(ln(exp(5)^16) == 80,
|
||||||
|
strcat(str(tnum++), ': ln(exp(5)^16) == 80'));
|
||||||
|
vrfy(ln(exp(4.5)^4) == 18,
|
||||||
|
strcat(str(tnum++), ': ln(exp(4.5)^4) == 18'));
|
||||||
|
vrfy(ln(exp(4)^8) == 32,
|
||||||
|
strcat(str(tnum++), ': ln(exp(4)^8) == 32'));
|
||||||
|
vrfy(ln(exp(60/11)^11) == 60,
|
||||||
|
strcat(str(tnum++), ': ln(exp(60/11)^11) == 60'));
|
||||||
|
vrfy(ln(exp(6)^15) == 90,
|
||||||
|
strcat(str(tnum++), ': ln(exp(6)^11) == 90'));
|
||||||
|
vrfy(ln(exp(80/17)^17) == 80,
|
||||||
|
strcat(str(tnum++), ': ln(exp(80/17)^17) == 80'));
|
||||||
|
vrfy(ln(exp(6)^15) == 90,
|
||||||
|
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),;';
|
||||||
|
|
||||||
print tnum: ': Ending extensive numeric function test';
|
print tnum: ': Ending extensive numeric function test';
|
||||||
}
|
}
|
||||||
print '037: parsed test_2600()';
|
print '037: parsed test_2600()';
|
||||||
@@ -3122,7 +3265,7 @@ define test_error()
|
|||||||
'3654: scale(3,2^31) == error(10034)');
|
'3654: scale(3,2^31) == error(10034)');
|
||||||
vrfy("x" ^ 3 == error(10035), '3655: "x" ^ 3 == error(10035)');
|
vrfy("x" ^ 3 == error(10035), '3655: "x" ^ 3 == error(10035)');
|
||||||
vrfy(2 ^ "x" == error(10036), '3656: 2 ^ "x" == error(10036)');
|
vrfy(2 ^ "x" == error(10036), '3656: 2 ^ "x" == error(10036)');
|
||||||
vrfy(2 ^ 2.5 == error(10036), '3657: 2 ^ 2.5 == error(10036)');
|
vrfy(2 ^ "2" == error(10036), '3657: 2 ^ "2" == error(10036)');
|
||||||
vrfy(power("x",2.1) == error(10037),
|
vrfy(power("x",2.1) == error(10037),
|
||||||
'3658: power("x",2.1) == error(10037)');
|
'3658: power("x",2.1) == error(10037)');
|
||||||
vrfy(power(2,"x") == error(10038),
|
vrfy(power(2,"x") == error(10038),
|
||||||
@@ -3356,11 +3499,12 @@ print '070: parsed test_redc()';
|
|||||||
*/
|
*/
|
||||||
define test_fileops()
|
define test_fileops()
|
||||||
{
|
{
|
||||||
local a, b, c, f, m, n, x, y, z;
|
local a, b, c, f, m, n, p, r, s, x, y, z;
|
||||||
local L = "Landon";
|
local L = "Landon";
|
||||||
local C = "Curt";
|
local C = "Curt";
|
||||||
local N = "Noll";
|
local N = "Noll";
|
||||||
local LCN = "Landon\nCurt\nNoll\n";
|
local LCN = "Landon\nCurt\nNoll\n";
|
||||||
|
local long = "0123456789abcdef0123456789abcdef";
|
||||||
|
|
||||||
print '4200: Beginning test_fileops';
|
print '4200: Beginning test_fileops';
|
||||||
|
|
||||||
@@ -3458,13 +3602,60 @@ define test_fileops()
|
|||||||
vrfy(y == "Noll", '4258: y == "Noll"');
|
vrfy(y == "Noll", '4258: y == "Noll"');
|
||||||
vrfy(isnull(fclose(f)), '4259: isnull(fclose(f))');
|
vrfy(isnull(fclose(f)), '4259: isnull(fclose(f))');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fpathopen tests
|
||||||
|
*/
|
||||||
|
vrfy(!iserror(p=fpathopen("junk4200","r",".")),
|
||||||
|
'4260: !iserror(p=fparhopen("junk4200","r","."))');
|
||||||
|
vrfy(!iserror(fclose(p)), '4261: !iserror(fclose(p))');
|
||||||
|
vrfy(!iserror(r=fpathopen("regress.cal","r")),
|
||||||
|
'4262: !iserror(r=fparhopen("regress.cal","r","."))');
|
||||||
|
vrfy(!iserror(fclose(r)), '4263: !iserror(fclose(r))');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* verify non-stack overflow on long filenames
|
||||||
|
*/
|
||||||
|
long = long + long + long + long;
|
||||||
|
print '4264: long = long + long + long + long;';
|
||||||
|
long = long + long + long + long;
|
||||||
|
print '4265: long = long + long + long + long;';
|
||||||
|
vrfy(strlen(long) == 512, '4266: strlen(long) == 512');
|
||||||
|
/* bump ecnt up by 1 */
|
||||||
|
++ecnt;
|
||||||
|
print '4267: ++ecnt;';
|
||||||
|
vrfy(isfile(p=fopen(long,"r")) == 0,
|
||||||
|
'4268: isfile(p=fopen(long,"r")) == 0');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* test fgetfile() and fgetline()
|
||||||
|
*/
|
||||||
|
vrfy(!iserror(p=fopen("tmp4200","w")),
|
||||||
|
'4269: !iserror(p=fopen("tmp4200","w"))');
|
||||||
|
vrfy(!iserror(fputs(p,"chongo\n")),
|
||||||
|
'4270: !iserror(fputs(p,"chongo\n"))');
|
||||||
|
vrfy(!iserror(fputs(p,"w\0a\0s\n")),
|
||||||
|
'4271: !iserror(fputs(p,"w\0a\0s\n"))');
|
||||||
|
vrfy(!iserror(fputs(p,"here\n")),
|
||||||
|
'4272: !iserror(fputs(p,"here\n"))');
|
||||||
|
vrfy(!iserror(fclose(p)), '4273: !iserror(fclose(p))');
|
||||||
|
vrfy(!iserror(p=fopen("tmp4200","r")),
|
||||||
|
'4274: !iserror(p=fopen("tmp4200","r"))');
|
||||||
|
vrfy(!iserror(s=fgetline(p)), '4275: !iserror(s=fgetline(p))');
|
||||||
|
vrfy(strcmp(s,"chongo") == 0, '4276: strcmp(s,"chongo") == 0');
|
||||||
|
vrfy(!iserror(s=fgetfile(p)), '4277: !iserror(s=fgetfile(p))');
|
||||||
|
vrfy(strcmp(s,"w\0a\0s\nhere\n") == 0,
|
||||||
|
'4278: strcmp(s,"w\0a\0s\nhere\n") == 0');
|
||||||
|
vrfy(!iserror(fclose(p)), '4279: !iserror(fclose(p))');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cleanup
|
* cleanup
|
||||||
*/
|
*/
|
||||||
x = rm("junk4200");
|
x = rm("junk4200");
|
||||||
print '4260: x = rm("junk4200")';
|
print '4280: x = rm("junk4200")';
|
||||||
|
x = rm("tmp4200");
|
||||||
|
print '4281: x = rm("tmp4200")';
|
||||||
|
|
||||||
print '4261: Ending test_fileops';
|
print '4282: Ending test_fileops';
|
||||||
}
|
}
|
||||||
print '071: parsed test_fileops()';
|
print '071: parsed test_fileops()';
|
||||||
|
|
||||||
@@ -3899,7 +4090,7 @@ print '088: parsed test_fileop()';
|
|||||||
/*
|
/*
|
||||||
* global and static assignment tests
|
* global and static assignment tests
|
||||||
*/
|
*/
|
||||||
global a = 10, b, c d = 20, e, f;
|
global a = 10, b, c d = 20, e;
|
||||||
print '089: global a = 10, b, c d = 20, e, f';
|
print '089: global a = 10, b, c d = 20, e, f';
|
||||||
vrfy(a == 10, '090: a == 10');
|
vrfy(a == 10, '090: a == 10');
|
||||||
vrfy(b == 0, '091: b == 0');
|
vrfy(b == 0, '091: b == 0');
|
||||||
@@ -4599,13 +4790,11 @@ print '137: parsed test_random()';
|
|||||||
/*
|
/*
|
||||||
* test_newsyn - test new command completion syntax and scope rules
|
* test_newsyn - test new command completion syntax and scope rules
|
||||||
*/
|
*/
|
||||||
for (s5500 = 0, i = 0; i < 5; i++)
|
for (s5500 = 0, i = 0; i < 5; i++) s5500 += i;
|
||||||
s5500 += i;
|
|
||||||
print "138: for (s5500 = 0, i = 0; i < 5; i++) s5500 += i;";
|
print "138: for (s5500 = 0, i = 0; i < 5; i++) s5500 += i;";
|
||||||
vrfy(s5500 == 10, '139: s5500 == 10');
|
vrfy(s5500 == 10, '139: s5500 == 10');
|
||||||
vrfy(i == 5, '140: i == 5');
|
vrfy(i == 5, '140: i == 5');
|
||||||
for (s5500 = 0, i = 0; i < 9; i++)
|
for (s5500 = 0, i = 0; i < 9; i++) {
|
||||||
{
|
|
||||||
s5500 += i;
|
s5500 += i;
|
||||||
}
|
}
|
||||||
print "141: for (s5500 = 0, i = 0; i < 9; i++) { s5500 += i; }";
|
print "141: for (s5500 = 0, i = 0; i < 9; i++) { s5500 += i; }";
|
||||||
@@ -4653,7 +4842,6 @@ define test_newsyn()
|
|||||||
vrfy(i == 3, '5509: i == 3');
|
vrfy(i == 3, '5509: i == 3');
|
||||||
/**/
|
/**/
|
||||||
{
|
{
|
||||||
local i;
|
|
||||||
for (s5500 = 0, i = 0; i < 11; i++)
|
for (s5500 = 0, i = 0; i < 11; i++)
|
||||||
s5500 += i;
|
s5500 += i;
|
||||||
vrfy(s5500 == 55, '5510: s5500 == 45');
|
vrfy(s5500 == 55, '5510: s5500 == 45');
|
||||||
@@ -5065,8 +5253,6 @@ print '156: parsed test_size()';
|
|||||||
/*
|
/*
|
||||||
* test_assign - test assignment of constants and variables
|
* test_assign - test assignment of constants and variables
|
||||||
*/
|
*/
|
||||||
global A, B; /* A, B for "constants" */
|
|
||||||
print '157: global A, B';
|
|
||||||
global X5800, Y5800; /* X5800, Y5800 for "variables" */
|
global X5800, Y5800; /* X5800, Y5800 for "variables" */
|
||||||
print '158: global X5800, Y5800';
|
print '158: global X5800, Y5800';
|
||||||
obj xy5800 {x, y};
|
obj xy5800 {x, y};
|
||||||
@@ -5088,7 +5274,7 @@ define test_assign(base, work)
|
|||||||
Y5800 = base+4;
|
Y5800 = base+4;
|
||||||
print base+4: ': Y5800 = base+4';
|
print base+4: ': Y5800 = base+4';
|
||||||
obj xy5800 A={1,2}, obj xy5800 B={3,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
|
* test assignment
|
||||||
@@ -5140,7 +5326,7 @@ define test_is()
|
|||||||
local nerr; /* new error value */
|
local nerr; /* new error value */
|
||||||
local odd; /* odd integer */
|
local odd; /* odd integer */
|
||||||
local even; /* even integer that is 10 times odd */
|
local even; /* even integer that is 10 times odd */
|
||||||
local hash; /* sha hash value */
|
local hash; /* sha1 hash value */
|
||||||
local id; /* identity matrix */
|
local id; /* identity matrix */
|
||||||
local list; /* list value */
|
local list; /* list value */
|
||||||
local matrix; /* non-identity matrix */
|
local matrix; /* non-identity matrix */
|
||||||
@@ -5153,6 +5339,11 @@ define test_is()
|
|||||||
local square; /* square of an odd prime */
|
local square; /* square of an odd prime */
|
||||||
local string; /* string */
|
local string; /* string */
|
||||||
local com; /* complex value */
|
local com; /* complex value */
|
||||||
|
local rndint; /* a random integer */
|
||||||
|
local rndexp; /* a random exponent */
|
||||||
|
local rndval; /* rndint ^ rndexp */
|
||||||
|
local i; /* integer value */
|
||||||
|
local ok; /* 1 ==> issq() tests were OK, 0 ==> failure */
|
||||||
|
|
||||||
print '5900: Beginning test_is';
|
print '5900: Beginning test_is';
|
||||||
|
|
||||||
@@ -5190,8 +5381,8 @@ define test_is()
|
|||||||
print '5911: odd = 23209';
|
print '5911: odd = 23209';
|
||||||
even = odd*10;
|
even = odd*10;
|
||||||
print '5912: even = odd*10';
|
print '5912: even = odd*10';
|
||||||
hash = sha();
|
hash = sha1();
|
||||||
print '5913: hash = sha()';
|
print '5913: hash = sha1()';
|
||||||
mat id[3,3] = {1,0,0,0,1,0,0,0,1};
|
mat id[3,3] = {1,0,0,0,1,0,0,0,1};
|
||||||
print '5914: id[3,3] = {1,0,0,0,1,0,0,0,1}';
|
print '5914: id[3,3] = {1,0,0,0,1,0,0,0,1}';
|
||||||
list = list(2,3,4);
|
list = list(2,3,4);
|
||||||
@@ -5211,7 +5402,7 @@ define test_is()
|
|||||||
prime = 3217;
|
prime = 3217;
|
||||||
print '5922: prime = 3217';
|
print '5922: prime = 3217';
|
||||||
square = prime^2;
|
square = prime^2;
|
||||||
print '5923: square = prine^2';
|
print '5923: square = prime^2';
|
||||||
string = "a string";
|
string = "a string";
|
||||||
print '5924: string = "a string"';
|
print '5924: string = "a string"';
|
||||||
com = 3+4i;
|
com = 3+4i;
|
||||||
@@ -5514,7 +5705,7 @@ define test_is()
|
|||||||
vrfy(ishash(nerr) == 0, '6178: ishash(nerr) == 0');
|
vrfy(ishash(nerr) == 0, '6178: ishash(nerr) == 0');
|
||||||
vrfy(ishash(odd) == 0, '6179: ishash(odd) == 0');
|
vrfy(ishash(odd) == 0, '6179: ishash(odd) == 0');
|
||||||
vrfy(ishash(even) == 0, '6180: ishash(even) == 0');
|
vrfy(ishash(even) == 0, '6180: ishash(even) == 0');
|
||||||
vrfy(ishash(hash) == 1, '6181: ishash(hash) == 1');
|
vrfy(ishash(hash) == 2, '6181: ishash(hash) == 2');
|
||||||
vrfy(ishash(id) == 0, '6182: ishash(id) == 0');
|
vrfy(ishash(id) == 0, '6182: ishash(id) == 0');
|
||||||
vrfy(ishash(list) == 0, '6183: ishash(list) == 0');
|
vrfy(ishash(list) == 0, '6183: ishash(list) == 0');
|
||||||
vrfy(ishash(matrix) == 0, '6184: ishash(matrix) == 0');
|
vrfy(ishash(matrix) == 0, '6184: ishash(matrix) == 0');
|
||||||
@@ -6090,15 +6281,75 @@ define test_is()
|
|||||||
vrfy(istype(matrix,odd) == 0, '6661: istype(matrix,odd) == 0');
|
vrfy(istype(matrix,odd) == 0, '6661: istype(matrix,odd) == 0');
|
||||||
vrfy(istype(a,odd) == 0, '6662: istype(a,odd) == 0');
|
vrfy(istype(a,odd) == 0, '6662: istype(a,odd) == 0');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* perform more extensive issq() testing
|
||||||
|
*/
|
||||||
|
ok = 1;
|
||||||
|
for (i=0; i < 256; ++i) {
|
||||||
|
/* rndval will be a square - even powers>0 of x>1 */
|
||||||
|
rndexp = random(1, 16) * 2;
|
||||||
|
rndint = random(2, 4294967296);
|
||||||
|
if (issq(rndint)) {
|
||||||
|
++rndint;
|
||||||
|
}
|
||||||
|
rndval = rndint ^ rndexp;
|
||||||
|
if (issq(rndval) == 0) {
|
||||||
|
prob(strprintf("issq(%d^%d) returned 0",
|
||||||
|
rndint, rndexp));
|
||||||
|
ok = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ok) {
|
||||||
|
print '6663: issq() on 256 squares';
|
||||||
|
} else {
|
||||||
|
print '****: failure(s): 6663: faiissq() on 256 squares';
|
||||||
|
}
|
||||||
|
for (i=0; i < 256; ++i) {
|
||||||
|
/* rndval will not be a square - 1 + even powers>0 of x>1 */
|
||||||
|
rndexp = random(1, 16) * 2;
|
||||||
|
rndint = random(2, 4294967296);
|
||||||
|
rndval = rndint ^ rndexp;
|
||||||
|
if (issq(rndval+1) != 0) {
|
||||||
|
prob(strprintf("issq(%d^%d)+1 returned non-zero",
|
||||||
|
rndint, rndexp));
|
||||||
|
ok = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ok) {
|
||||||
|
print '6664: issq() on 256 squares+1';
|
||||||
|
} else {
|
||||||
|
print '****: failure(s): 6664: issq() on 256 squares+1';
|
||||||
|
}
|
||||||
|
print '6664: issq() on 256 squares+1';
|
||||||
|
for (i=0; i < 256; ++i) {
|
||||||
|
/* rndval will not be a square - odd powers>0 of x>1 */
|
||||||
|
rndexp = (random(1, 16) * 2) + 1;
|
||||||
|
rndint = random(2, 4294967296);
|
||||||
|
if (issq(rndint)) {
|
||||||
|
++rndint;
|
||||||
|
}
|
||||||
|
rndval = rndint ^ rndexp;
|
||||||
|
if (issq(rndval) != 0) {
|
||||||
|
prob(strprintf("issq(%d^%d) returned non-zero",
|
||||||
|
rndint, rndexp));
|
||||||
|
ok = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ok) {
|
||||||
|
print '6665: issq() on 256 non-squares';
|
||||||
|
} else {
|
||||||
|
print '****: failure(s): 6665: issq() on 256 non-squares';
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cleanup
|
* cleanup
|
||||||
*/
|
*/
|
||||||
blkfree("blk5900");
|
blkfree("blk5900");
|
||||||
print '6663: blkfree("blk5900")';
|
print '6666: blkfree("blk5900")';
|
||||||
fclose(ofd);
|
fclose(ofd);
|
||||||
print '6664: fclose(ofd)';
|
print '6667: fclose(ofd)';
|
||||||
|
|
||||||
print '6665: Ending test_is';
|
print '6668: Ending test_is';
|
||||||
}
|
}
|
||||||
print '168: test_is()';
|
print '168: test_is()';
|
||||||
|
|
||||||
@@ -6210,7 +6461,7 @@ define test_blk()
|
|||||||
/* A second named block */
|
/* A second named block */
|
||||||
|
|
||||||
B1 = blk("+++6700", 15, 10) = {1,2,3,4,5};
|
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(size(B1) == 15, '6747: size(B1) == 15');
|
||||||
vrfy(sizeof(B1) == 20, '6748: sizeof(B1) == 20');
|
vrfy(sizeof(B1) == 20, '6748: sizeof(B1) == 20');
|
||||||
vrfy(test(B1) == 1, '6749: test(B1) == 1');
|
vrfy(test(B1) == 1, '6749: test(B1) == 1');
|
||||||
@@ -6547,108 +6798,6 @@ define test_blkprintf()
|
|||||||
print '172: parsed test_blkprintf()';
|
print '172: parsed test_blkprintf()';
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* test_sha - test the sha hash
|
|
||||||
*/
|
|
||||||
define test_sha()
|
|
||||||
{
|
|
||||||
local a, b, c, d, e, f, x, y, z, L, M, B1, B2, B;
|
|
||||||
|
|
||||||
print '7100: Beginning test_sha';
|
|
||||||
y = sha();
|
|
||||||
print '7101: y = sha();';
|
|
||||||
z = sha();
|
|
||||||
print '7102: z = sha();';
|
|
||||||
vrfy(y == z, '7103: y == z');
|
|
||||||
vrfy(sha("") == y, '7104: sha("") == y');
|
|
||||||
y = sha(y,1);
|
|
||||||
print '7105: y = sha(y,1);';
|
|
||||||
vrfy(y == sha(1), '7106: y == sha(1)');
|
|
||||||
vrfy(sha(y,2) == sha(1,2), '7107: sha(y,2) == sha(1,2)');
|
|
||||||
|
|
||||||
vrfy(sha(sha()) == 0xf96cea198ad1dd5617ac084a3d92c6107708c0ef,
|
|
||||||
'7108: sha(sha()) == 0xf96cea198ad1dd5617ac084a3d92c6107708c0ef');
|
|
||||||
|
|
||||||
vrfy(sha(sha("a"))==0x37f297772fae4cb1ba39b6cf9cf0381180bd62f2,
|
|
||||||
'7109: sha(sha("a"))==0x37f297772fae4cb1ba39b6cf9cf0381180bd62f2');
|
|
||||||
|
|
||||||
vrfy(sha(sha("ab"))==0x488373d362684af3d3f7a6a408b59dfe85419e09,
|
|
||||||
'7110: sha(sha("ab"))==0x488373d362684af3d3f7a6a408b59dfe85419e09');
|
|
||||||
vrfy(sha(sha("abc"))==0x0164b8a914cd2a5e74c4f7ff082c4d97f1edf880,
|
|
||||||
'7111: sha(sha("abc"))==0x0164b8a914cd2a5e74c4f7ff082c4d97f1edf880');
|
|
||||||
vrfy(sha(sha("abcd"))==0x082c73b06f71185d840fb4b28eb3abade67714bc,
|
|
||||||
'7112: sha(sha("abcd"))==0x082c73b06f71185d840fb4b28eb3abade67714bc');
|
|
||||||
vrfy(sha(sha("abcde"))==0xd624e34951bb800f0acae773001df8cffe781ba8,
|
|
||||||
'7113: sha(sha("abcde"))==0xd624e34951bb800f0acae773001df8cffe781ba8');
|
|
||||||
vrfy(sha(sha("abcdef"))==0x2a589f7750598dc0ea0a608719e04327f609279a,
|
|
||||||
'7114: sha(sha("abcdef"))==0x2a589f7750598dc0ea0a608719e04327f609279a');
|
|
||||||
vrfy(sha(sha("abcdefg"))==0x5bdf01f9298e9d19d3f8d15520fd74eed600b497,
|
|
||||||
'7115: sha(sha("abcdefg"))==0x5bdf01f9298e9d19d3f8d15520fd74eed600b497');
|
|
||||||
vrfy(sha(sha("abcdefgh"))==0x734ba8b31975d0dbae4d6e249f4e8da270796c94,
|
|
||||||
'7116: sha(sha("abcdefgh"))==0x734ba8b31975d0dbae4d6e249f4e8da270796c94');
|
|
||||||
|
|
||||||
vrfy(sha(sha(1)) == 0x864c8d09e828c7c31d62693736a5a9302c282777,
|
|
||||||
'7117: sha(sha(1)) == 0x864c8d09e828c7c31d62693736a5a9302c282777');
|
|
||||||
|
|
||||||
vrfy(sha(sha(2)) == 0x2c0b59c512cb20fad6bb0883b69c9f5a46545808,
|
|
||||||
'7118: sha(sha(2)) == 0x2c0b59c512cb20fad6bb0883b69c9f5a46545808');
|
|
||||||
|
|
||||||
vrfy(sha(sha(22/7))==0x7ddb7f8a7e9d70757f157744fddea7a6c6a6bcc6,
|
|
||||||
'7119: sha(sha(22/7)==0x7ddb7f8a7e9d70757f157744fddea7a6c6a6bcc6');
|
|
||||||
vrfy(sha(sha(isqrt(2e1000))) ==
|
|
||||||
0x6db8d9cf0b018b8f9cbbf5aa1edb8066d19e1bb0,
|
|
||||||
'7120: sha(sha(isqrt(2e1000)==0x6db8d9cf0b018b8f9cbbf5aa1edb8066d19e1bb0');
|
|
||||||
vrfy(sha("x", "y", "z") == sha("xyz"),
|
|
||||||
'7121: sha("x", "y", "z") == sha("xyz")');
|
|
||||||
|
|
||||||
vrfy(sha(sha("this is", 7^19-8, "a composit", 3i+4.5, "hash")) ==
|
|
||||||
0x21e42319a26787046c2b28b7ae70f1b54bf0ba2a,
|
|
||||||
'7122: sha(sha("this is", 7^19-8, ..., "hash")) == 0x21e4...');
|
|
||||||
|
|
||||||
z = sha(list(1,2,3), "curds and whey", 2^21701-1, pi());
|
|
||||||
print '7123: z = sha(list(1,2,3), "curds and whey", 2^21701-1, pi());';
|
|
||||||
vrfy(sha(z) == 0x36dcca3e51865c30a2cf738023cda446f1368340,
|
|
||||||
'7124: sha(z) == 0x36dcca3e51865c30a2cf738023cda446f1368340');
|
|
||||||
|
|
||||||
y = sha();
|
|
||||||
print '7125: y = sha()';
|
|
||||||
y = sha(y, list(1,2,3), "curds and whey");
|
|
||||||
print '7126: y = sha(y, list(1,2,3), "curds and whey")';
|
|
||||||
y = sha(y, 2^21701-1);
|
|
||||||
print '7127: y = sha(y, 2^21701-1)';
|
|
||||||
y = sha(y, pi());
|
|
||||||
print '7128: y = sha(y, pi())';
|
|
||||||
vrfy(y == z, '7129: y == z');
|
|
||||||
|
|
||||||
B = blk() = {"a", "b", "c"};
|
|
||||||
print '7130: B = blk() = {"a", "b", "c"};';
|
|
||||||
vrfy(sha(B) == sha("abc"), '7131: sha(B) == sha("abc")');
|
|
||||||
|
|
||||||
B1 = blk() = {1,2,3,4};
|
|
||||||
print '7132: B1 = blk() = {1,2,3,4};';
|
|
||||||
B2 = blk() = {5,6,7,8};
|
|
||||||
print '7133: B2 = blk() = {5,6,7,8};';
|
|
||||||
B = blk() = {1,2,3,4,5,6,7,8};
|
|
||||||
print '7134: B = blk() = {1,2,3,4,5,6,7,8};';
|
|
||||||
|
|
||||||
vrfy(sha(B1, B2) == sha(B), '7135: sha(B1, B2) == sha(B)');
|
|
||||||
vrfy(sha(B[1], B[3], B[5]) == sha("\02\04\06"),
|
|
||||||
'7136: sha(B[1], B[3], B[5]) == sha("\02\04\06")');
|
|
||||||
|
|
||||||
L = list(1,2,3);
|
|
||||||
print '7137: L = list(1,2,3)';
|
|
||||||
mat M[3] = {4,5,6};
|
|
||||||
print '7138: mat M[3] = {4,5,6}';
|
|
||||||
vrfy(sha(sha(L), M, B) == sha(L, M, B),
|
|
||||||
'7139: sha(sha(L), M, B) == sha(L, M, B)');
|
|
||||||
vrfy(sha(sha(L,M), B) == sha(L, M, B),
|
|
||||||
'7140: sha(sha(L, M), B) == sha(L, M, B)');
|
|
||||||
|
|
||||||
print '7141: Ending test_sha';
|
|
||||||
}
|
|
||||||
print '173: parsed test_sha()';
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* test_sha1 - test the sha1 hash
|
* test_sha1 - test the sha1 hash
|
||||||
*/
|
*/
|
||||||
@@ -6676,10 +6825,10 @@ define test_sha1()
|
|||||||
'7209: sha1(sha1("this is",7^19-8,"a composit",3i+4.5,"hash")) == ...');
|
'7209: sha1(sha1("this is",7^19-8,"a composit",3i+4.5,"hash")) == ...');
|
||||||
|
|
||||||
|
|
||||||
z = sha1(list(1,2,3), "curds and whey", 2^21701-1, pi());
|
z = sha1(list(1,2,3), "curds and whey", 2^21701-1, pi(1e-100));
|
||||||
print '7210: z = sha1(list(1,2,3), "curds and whey", 2^21701-1, pi());';
|
print '7210: z = sha1(list(1,2,3), "curds and whey", 2^21701-1, pi(1e-100));';
|
||||||
vrfy(sha1(z) == 0xc19e7317675dbf71e293b4c41e117169e9da5b6f,
|
vrfy(sha1(z) == 0x158cc87deeb9dd478ca14e3ab359205b0fb15b83,
|
||||||
'7211: sha1(z) == 0xc19e7317675dbf71e293b4c41e117169e9da5b6f');
|
'7211: sha1(z) == 0x158cc87deeb9dd478ca14e3ab359205b0fb15b83');
|
||||||
|
|
||||||
y = sha1();
|
y = sha1();
|
||||||
print '7212: y = sha1();';
|
print '7212: y = sha1();';
|
||||||
@@ -6687,8 +6836,8 @@ define test_sha1()
|
|||||||
print '7213: y = sha1(y, list(1,2,3), "curds and whey");';
|
print '7213: y = sha1(y, list(1,2,3), "curds and whey");';
|
||||||
y = sha1(y, 2^21701-1);
|
y = sha1(y, 2^21701-1);
|
||||||
print '7214: y = sha1(y, 2^21701-1);';
|
print '7214: y = sha1(y, 2^21701-1);';
|
||||||
y = sha1(y, pi());
|
y = sha1(y, pi(1e-100));
|
||||||
print '7215: y = sha1(y, pi());';
|
print '7215: y = sha1(y, pi(1e-100));';
|
||||||
vrfy(y == z, '7216: y == z');
|
vrfy(y == z, '7216: y == z');
|
||||||
|
|
||||||
vrfy(sha1(sha1("a"))==0x86f7e437faa5a7fce15d1ddcb9eaeaea377667b8,
|
vrfy(sha1(sha1("a"))==0x86f7e437faa5a7fce15d1ddcb9eaeaea377667b8,
|
||||||
@@ -6734,88 +6883,6 @@ define test_sha1()
|
|||||||
print '174: parsed test_sha1()';
|
print '174: parsed test_sha1()';
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* test_md5 - test the md5 hash
|
|
||||||
*/
|
|
||||||
define test_md5()
|
|
||||||
{
|
|
||||||
local a, b, c, d, e, f, x, y, z, L, M, B;
|
|
||||||
|
|
||||||
print '7300: Beginning test_md5';
|
|
||||||
y = md5();
|
|
||||||
print '7301: y = md5();';
|
|
||||||
z = md5();
|
|
||||||
print '7302: z = md5();';
|
|
||||||
vrfy(y == z, '7303: y == z');
|
|
||||||
y = md5(y,1);
|
|
||||||
print '7304: y = md5(y,1);';
|
|
||||||
z = md5(1);
|
|
||||||
print '7305: z = md5(1);';
|
|
||||||
vrfy(y == z, '7306: y == z');
|
|
||||||
vrfy(md5(z,2) == md5(1,2), '7307: md5(z,2) == md5(1,2)');
|
|
||||||
|
|
||||||
vrfy(md5(md5()) == 0xd41d8cd98f00b204e9800998ecf8427e,
|
|
||||||
'7308: md5(md5()) == 0xd41d8cd98f00b204e9800998ecf8427e');
|
|
||||||
vrfy(md5("x", "y", "z") == md5("xyz"),
|
|
||||||
'7309: md5("x", "y", "z") == md5("xyz")');
|
|
||||||
|
|
||||||
vrfy(md5(md5("this is", 7^19-8, "a composit", 3i+4.5, "hash")) ==
|
|
||||||
0x39a5a8e24a2eb65a51af462c8bdd5e3,
|
|
||||||
'7310: md5(md5("this is", 7^19-8, "a composit", 3i+4.5, "hash")) == ...');
|
|
||||||
|
|
||||||
|
|
||||||
z = md5(list(1,2,3), "curds and whey", 2^21701-1, pi());
|
|
||||||
print '7311: z = md5(list(1,2,3), "curds and whey", 2^21701-1, pi());';
|
|
||||||
vrfy(md5(z) == 0x63d2b2fccae2de265227c30b05abb6b5,
|
|
||||||
'7312: md5(z) == 0x63d2b2fccae2de265227c30b05abb6b5');
|
|
||||||
y = md5();
|
|
||||||
print '7313: y = md5();';
|
|
||||||
y = md5(y, list(1,2,3), "curds and whey");
|
|
||||||
print '7314: y = md5(y, list(1,2,3), "curds and whey")';
|
|
||||||
y = md5(y, 2^21701-1);
|
|
||||||
print '7315: y = md5(y, 2^21701-1);';
|
|
||||||
y = md5(y, pi());
|
|
||||||
print '7316: y = md5(y, pi());';
|
|
||||||
vrfy(y == z, '7317: y == z');
|
|
||||||
|
|
||||||
vrfy(md5(md5("a")) == 0x0cc175b9c0f1b6a831c399e269772661,
|
|
||||||
'7318: md5(md5("a")) == 0x0cc175b9c0f1b6a831c399e269772661');
|
|
||||||
vrfy(md5(md5("ab")) == 0x187ef4436122d1cc2f40dc2b92f0eba0,
|
|
||||||
'7319: md5(md5("ab")) == 0x187ef4436122d1cc2f40dc2b92f0eba0');
|
|
||||||
vrfy(md5(md5("abc")) == 0x900150983cd24fb0d6963f7d28e17f72,
|
|
||||||
'7320: md5(md5("abc")) == 0x900150983cd24fb0d6963f7d28e17f72');
|
|
||||||
vrfy(md5(md5("abcd")) == 0xe2fc714c4727ee9395f324cd2e7f331f,
|
|
||||||
'7321: md5(md5("abcd")) == 0xe2fc714c4727ee9395f324cd2e7f331f');
|
|
||||||
vrfy(md5(md5("abcde")) == 0xab56b4d92b40713acc5af89985d4b786,
|
|
||||||
'7322: md5(md5("abcde")) == 0xab56b4d92b40713acc5af89985d4b786');
|
|
||||||
vrfy(md5(md5("abcdef")) == 0xe80b5017098950fc58aad83c8c14978e,
|
|
||||||
'7323: md5(md5("abcdef")) == 0xe80b5017098950fc58aad83c8c14978e');
|
|
||||||
vrfy(md5(md5("abcdefg")) == 0x7ac66c0f148de9519b8bd264312c4d64,
|
|
||||||
'7324: md5(md5("abcdefg")) == 0x7ac66c0f148de9519b8bd264312c4d64');
|
|
||||||
vrfy(md5(md5("abcdefgh")) == 0xe8dc4081b13434b45189a720b77b6818,
|
|
||||||
'7325: md5(md5("abcdefgh")) == 0xe8dc4081b13434b45189a720b77b6818');
|
|
||||||
vrfy(md5(md5(1)) == 0x44fe7987067ac45311c88772038f60d1,
|
|
||||||
'7326: md5(md5(1)) == 0x44fe7987067ac45311c88772038f60d1');
|
|
||||||
vrfy(md5(md5(22/7)) == 0x9274b951e1dfb9cba22af1c127daa8e7,
|
|
||||||
'7327: md5(md5(22/7) == 0x9274b951e1dfb9cba22af1c127daa8e7');
|
|
||||||
vrfy(md5(md5(isqrt(2e1000))) == 0xe56ac4b8cad869e738a04fedc97058f3,
|
|
||||||
'7328: md5(md5(isqrt(2e1000))) == 0xe56ac4b8cad869e738a04fedc97058f3');
|
|
||||||
L = list(1,2,3);
|
|
||||||
print '7329: L = list(1,2,3)';
|
|
||||||
mat M[3] = {4,5,6};
|
|
||||||
print '7330: mat M[3] = {4,5,6}';
|
|
||||||
B = blk() = {7,8,9};
|
|
||||||
print '7331: B = blk() = {7,8,9}';
|
|
||||||
vrfy(md5(md5(L), M, B) == md5(L, M, B),
|
|
||||||
'7332: md5(md5(L), M, B) == md5(L, M, B)');
|
|
||||||
vrfy(md5(md5(L,M), B) == md5(L, M, B),
|
|
||||||
'7333: md5(md5(L, M), B) == md5(L, M, B)');
|
|
||||||
|
|
||||||
print '7334: Ending test_md5';
|
|
||||||
}
|
|
||||||
print '175: parsed test_md5()';
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The 7400's contain tests for saveval and dot. These tests are
|
* The 7400's contain tests for saveval and dot. These tests are
|
||||||
* done inline near the bottom.
|
* done inline near the bottom.
|
||||||
@@ -7312,7 +7379,7 @@ define test_somenew()
|
|||||||
vrfy(size(char(0)) == 1, '8203: size(char(0)) == 1');
|
vrfy(size(char(0)) == 1, '8203: size(char(0)) == 1');
|
||||||
vrfy(strlen(char(0)) == 0, '8204: strlen(char(0)) == 0');
|
vrfy(strlen(char(0)) == 0, '8204: strlen(char(0)) == 0');
|
||||||
vrfy(char(0) != "", '8205: char(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"');
|
vrfy(str("abc") == "abc", '8207: str("abc") == "abc"');
|
||||||
|
|
||||||
@@ -7348,6 +7415,85 @@ define test_somenew()
|
|||||||
print '190: parsed test_somenew()';
|
print '190: parsed test_somenew()';
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* test_exponentiation - test new exponentiation functionaltiy
|
||||||
|
*/
|
||||||
|
define test_exponentiation()
|
||||||
|
{
|
||||||
|
local a;
|
||||||
|
|
||||||
|
print '8800: Starting test_somenew';
|
||||||
|
|
||||||
|
/* unexpected help file cases */
|
||||||
|
vrfy(2^3 == 8, '8801: 2^3 == 8');
|
||||||
|
vrfy(2.5 ^ 3.5 == power(2.5, 3.5),
|
||||||
|
'8802: 2.5 ^ 3.5 == power(2.5, 3.5)');
|
||||||
|
vrfy(2.5 ^ 2.718i == power(2.5, 2.718i),
|
||||||
|
'8803: 2.5 ^ 2.718i == power(2.5, 2.718i)');
|
||||||
|
vrfy(3i^4 == 81, '8804: 3i^4 == 81');
|
||||||
|
vrfy(0.5i ^ 0.25 == power(0.5i, 0.25),
|
||||||
|
'8804: 0.5i ^ 0.25 == power(0.5i, 0.25)');
|
||||||
|
vrfy(3.13145i^0.30103i == power(3.13145i, 0.30103i),
|
||||||
|
'8806: 3.13145i^0.30103i == power(3.13145i, 0.30103i)');
|
||||||
|
|
||||||
|
/* deal with some corner error cases */
|
||||||
|
ecnt += 12;
|
||||||
|
print '8807: ecnt += 2';
|
||||||
|
vrfy((1/0) ^ -1 == 0, '8808: (1/0) ^ -1 == 0');
|
||||||
|
vrfy((1/0) ^ -2 == 0, '8809: (1/0) ^ -2 == 0');
|
||||||
|
vrfy((1/0) ^ 0 == error(10001), '8810: (1/0) ^ 0 == error(10001)');
|
||||||
|
vrfy((1/0) ^ 3 == error(10001), '8811: (1/0) ^ 3 == error(10001)');
|
||||||
|
vrfy(0 ^ -2 == error(10001), '8812: 0 ^ -2 == error(10001)');
|
||||||
|
vrfy((1/0) ^ 1i == error(10001),'8813: (1/0) ^ 1i == error(10001)');
|
||||||
|
vrfy((1/0) ^ 0i == error(10001),'8814: (1/0) ^ 0i == error(10001)');
|
||||||
|
|
||||||
|
/* real ^ real */
|
||||||
|
vrfy(5^6 == 15625, '8815: 5^6 == 15625');
|
||||||
|
vrfy(10^31 == 1e31, '8816: 10^31 == 1e31');
|
||||||
|
vrfy(10 ^ (127/31) == power(10, 127/31),
|
||||||
|
'8817: 10 ^ (127/31) == power(10, 127/31)');
|
||||||
|
vrfy((10^31) ^ 10 == 1e310, '8818: (10^31) ^ 10 == 1e310');
|
||||||
|
|
||||||
|
/* complex ^ real */
|
||||||
|
vrfy(10i ^ 10 == -1e10, '8819: 10i ^ 10 == -1e10');
|
||||||
|
vrfy((-10i) ^ 10 == -1e10, '8820: (-10i) ^ 10 == -1e10');
|
||||||
|
vrfy((1+1i) ^ 4 == -4, '8821: (1+1i) ^ 4 == -4');
|
||||||
|
vrfy((1+1i) ^ 65536 == 2^32768, '8822: (1+1i) ^ 65536 == 2^32768');
|
||||||
|
vrfy((1+1i) ^ (2^20) == 2^(2^19),
|
||||||
|
'8823: (1+1i) ^ (2^20) == 2^(2^19)');
|
||||||
|
vrfy((31+17i) ^ pi() == power(31+17i, pi()),
|
||||||
|
'8824: (31+17i) ^ pi() == power(31+17i, pi()');
|
||||||
|
vrfy((5+7i) ^ exp(5) == power(5+7i, exp(5)),
|
||||||
|
'8825: (5+7i) ^ exp(5) == power(5+7i, exp(5))');
|
||||||
|
|
||||||
|
/* real ^ complex */
|
||||||
|
vrfy(10 ^ 1i == power(10, 1i), '8826: 10 ^ 1i == power(10, 1i)');
|
||||||
|
vrfy(10 ^ (2+3i) == power(10, 2+3i),
|
||||||
|
'8827: 10 ^ (2+3i) == power(10, 2+3i)');
|
||||||
|
vrfy(pi() ^ (2+3i) == power(pi(), 2+3i),
|
||||||
|
'8828: pi() ^ (2+3i) == power(pi(), 2+3i)');
|
||||||
|
vrfy(exp(64) ^ (2+3i) == power(exp(64), 2+3i),
|
||||||
|
'8828: exp(64) ^ (2+3i) == power(exp(64), 2+3i)');
|
||||||
|
vrfy(pi() ^ (257+127i) == power(pi(), 257+127i),
|
||||||
|
'8829: pi() ^ (257+127i) == power(pi(), 257+127i)');
|
||||||
|
vrfy(pi() ^ asin(-2) == power(pi(), asin(-2)),
|
||||||
|
'8830: pi() ^ asin(-2) == power(pi(), asin(-2)');
|
||||||
|
|
||||||
|
/* complex ^ complex */
|
||||||
|
vrfy((3+4i) ^ (2+3i) == power(3+4i, 2+3i),
|
||||||
|
'8831: (3+4i) ^ (2+3i) == power(3+4i, 2+3i)');
|
||||||
|
vrfy(ln(-10) ^ (2+3i) == power(ln(-10), 2+3i),
|
||||||
|
'8832: ln(-10) ^ (2+3i) == power(ln(-10), 2+3i)');
|
||||||
|
vrfy((pi()*1i) ^ asin(-2) == power(pi()*1i, asin(-2)),
|
||||||
|
'8833: (pi()*1i) ^ asin(-2) == power(pi()*1i, asin(-2))');
|
||||||
|
vrfy((exp(1)+pi()*1i) ^ asin(-2) == power(exp(1)+pi()*1i, asin(-2)),
|
||||||
|
'8834: (exp(1)+pi()*1i) ^ asin(-2) == power(exp(1)+pi()*1i, asin(-2))');
|
||||||
|
|
||||||
|
print '8835: Ending test_somenew';
|
||||||
|
}
|
||||||
|
print '191: parsed test_exponentiation()';
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* test_quit - test the QUIT functionality
|
* test_quit - test the QUIT functionality
|
||||||
*/
|
*/
|
||||||
@@ -7575,12 +7721,8 @@ return test_name();
|
|||||||
print;
|
print;
|
||||||
return test_blkprintf();
|
return test_blkprintf();
|
||||||
print;
|
print;
|
||||||
return test_sha();
|
|
||||||
print;
|
|
||||||
return test_sha1();
|
return test_sha1();
|
||||||
print;
|
print;
|
||||||
return test_md5();
|
|
||||||
print;
|
|
||||||
|
|
||||||
print '7400: Beginning test_savedot';
|
print '7400: Beginning test_savedot';
|
||||||
print '7401: saveval(1);';
|
print '7401: saveval(1);';
|
||||||
@@ -7669,18 +7811,62 @@ print '8406: Ending test_quit';
|
|||||||
* test_divmod - psuedo-random tests on the // and % with various rounding modes
|
* test_divmod - psuedo-random tests on the // and % with various rounding modes
|
||||||
*/
|
*/
|
||||||
print;
|
print;
|
||||||
print '8500: Starting test_divmod'
|
print '8500: Starting test of divmod'
|
||||||
read -once "test8500";
|
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
|
* test_maxargs - test up to 1024 args being passed to a builtin function
|
||||||
*/
|
*/
|
||||||
print;
|
print;
|
||||||
print '8600: Starting test_1024args'
|
print '8600: Starting test of up to 1024 args'
|
||||||
read -once "test8600";
|
read -once "test8600";
|
||||||
/* 86xx: Ending test_1024args is printed by test8600.cal */
|
/* 860x: Ending test of up to 1024 args is printed by test8600.cal */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* dupvar_warn and redecl_warn testing
|
||||||
|
*/
|
||||||
|
print;
|
||||||
|
print '8650: Starting test of dupvar_warn and redecl_warn config parameters';
|
||||||
|
vrfy(config("redecl_warn",0), '8651: config("redecl_warn",0)');
|
||||||
|
vrfy(config("dupvar_warn",0), '8652: config("dupvar_warn",0)');
|
||||||
|
vrfy(u_glob == 6, '8653: u_glob == 6');
|
||||||
|
global u_glob = 555;
|
||||||
|
print '8654: reclare u_glob';
|
||||||
|
vrfy(u_glob == 555, '8655: u_glob == 555');
|
||||||
|
define func_8650(u_glob) { local u_glob; return u_glob; }
|
||||||
|
print '8656: u_glob as both local and parameter';
|
||||||
|
define func_8650a(u_glob) { static u_glob; return u_glob; }
|
||||||
|
print '8657: u_glob as both static and parameter';
|
||||||
|
vrfy(config("redecl_warn",1)==0, '8658: config("redecl_warn",1)==0');
|
||||||
|
vrfy(config("dupvar_warn",1)==0, '8659: config("dupvar_warn",1)==0');
|
||||||
|
/* 865x: 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;
|
||||||
|
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 */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* new exponentiation functionaltiy
|
||||||
|
*/
|
||||||
|
print;
|
||||||
|
return test_exponentiation();
|
||||||
|
/* 88xx: test exponentiation */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -7760,7 +7946,28 @@ read -once varargs;
|
|||||||
print '9827: read -once varargs';
|
print '9827: read -once varargs';
|
||||||
read -once qtime;
|
read -once qtime;
|
||||||
print '9828: read -once qtime';
|
print '9828: read -once qtime';
|
||||||
print '9829: Ending read of selected calc resource files';
|
read -once chi;
|
||||||
|
print '9829: read -once chi';
|
||||||
|
read -once intfile;
|
||||||
|
print '9830: read -once intfile';
|
||||||
|
read -once lucas;
|
||||||
|
print '9831: read -once lucas';
|
||||||
|
read -once lucas_tbl;
|
||||||
|
print '9832: read -once lucas_tbl';
|
||||||
|
read -once natnumset;
|
||||||
|
print '9833: read -once natnumset';
|
||||||
|
read -once repeat;
|
||||||
|
print '9834: read -once repeat';
|
||||||
|
read -once screen;
|
||||||
|
print '9835: read -once screen';
|
||||||
|
read -once linear;
|
||||||
|
print '9836: read -once linear';
|
||||||
|
print '9837: skipping read -once beer.cal because it is an infinite loop';
|
||||||
|
print '9838: skipping read -once hello.cal because it is an infinite loop';
|
||||||
|
print '9839: skipping read -once xx_print.cal because it is a printing demo';
|
||||||
|
read -once sumtimes;
|
||||||
|
print '9840: read -once sumtimes';
|
||||||
|
print '9841: Ending read of selected calc resource files';
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: repeat.cal,v 29.4 2003/01/26 19:42:03 chongo Exp $
|
* @(#) $Id: repeat.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/repeat.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/repeat.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 2003/01/05 00:00:01
|
* Under source code control: 2003/01/05 00:00:01
|
||||||
|
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: 30.2 $
|
||||||
|
* @(#) $Id: screen.cal,v 30.2 2007/03/16 11:09:54 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";
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.3 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: seedrandom.cal,v 29.3 2001/03/31 13:31:34 chongo Exp $
|
* @(#) $Id: seedrandom.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/seedrandom.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/seedrandom.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/01/01 08:21:00
|
* Under source code control: 1996/01/01 08:21:00
|
||||||
|
77
cal/set8700.cal
Normal file
77
cal/set8700.cal
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 30.1 $
|
||||||
|
* @(#) $Id: set8700.cal,v 30.1 2007/03/16 11:09:54 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
|
||||||
|
}
|
||||||
|
|
||||||
|
global mat set8700_c[] = { 1, 2+3i, -5+4i, 5i+6, -7i };
|
||||||
|
|
||||||
|
global mat set8700_e[] = { 0, 1, 0, 0, 2, -3/2, 2, -1/2,
|
||||||
|
-3, 0.5, -1.0, 0.5, 1.0, 0.0, 0.0, 0.0 };
|
429
cal/set8700.line
Normal file
429
cal/set8700.line
Normal file
@@ -0,0 +1,429 @@
|
|||||||
|
##
|
||||||
|
## 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.
|
||||||
|
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
##
|
||||||
|
## @(#) $Revision: 30.1 $
|
||||||
|
## @(#) $Id: set8700.line,v 30.1 2007/03/16 11:09:54 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
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
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})
|
||||||
|
|
||||||
|
## Testing quomod
|
||||||
|
quomod(14,5,3,4) == error(10374)
|
||||||
|
global set8700_a,set8700_b; quomod("abc", 4, set8700_a, set8700_b) == error(10375)
|
||||||
|
quomod(14,5,set8700_a,set8700_b,0) == 1 && set8700_a == 2 && set8700_b == 4
|
||||||
|
quomod(14,5,set8700_a,set8700_b,1) == 1 && set8700_a == 3 && set8700_b == -1
|
||||||
|
quomod("abc",2,set8700_a,set8700_b) == error(10375)
|
||||||
|
set8700_a = "abc"; quomod(14,5,set8700_a,set8700_b) == error(10375)
|
||||||
|
set8700_a = null(); quomod(14,5,set8700_a,set8700_b,24) == 1; set8700_a == 3 && set8700_b == -1
|
||||||
|
quomod(14,5,set8700_a,set8700_a) == error(10374)
|
||||||
|
quomod(14,5,set8700_a,set8700_b,-1) == error(10375)
|
||||||
|
protect(set8700_a,1); quomod(17,2,set8700_a,set8700_b) == error(10376)
|
||||||
|
protect(set8700_a,0); quomod(17,2,set8700_a,set8700_b); set8700_a == 8 && set8700_b == 1
|
||||||
|
set8700_p = &set8700_a, set8700_q = &set8700_b; quomod(14,5,*set8700_p,*set8700_q); *set8700_p == 2 && *set8700_q == 4
|
||||||
|
|
||||||
|
## Testing estr
|
||||||
|
base(1/3) == 10
|
||||||
|
strcmp(estr(null()), "\"\"") == 0
|
||||||
|
strcmp(estr(bernoulli(48)), "-5609403368997817686249127547/46410") == 0
|
||||||
|
strcmp(estr(sin(3i)), "1001787492740990189897i/100000000000000000000") == 0
|
||||||
|
base(10) == 1/3
|
||||||
|
strcmp(estr("fizzbin"), "\"fizzbin\"") == 0
|
||||||
|
strcmp(estr(set8700_c), "mat[5]={1,2+3i,-5+4i,6+5i,-7i}") == 0
|
||||||
|
strcmp(estr(set8700_e), "mat[16]={0,1,0,0,2,-3/2,2,-1/2,-3,1/2,-1,1/2,1,0,0,0}") == 0
|
||||||
|
strcmp(estr(list(2,3,5)), "list(2,3,5)") == 0
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: solve.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: solve.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/solve.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/solve.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:37
|
* Under source code control: 1990/02/15 01:50:37
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: sumsq.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: sumsq.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/sumsq.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/sumsq.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:37
|
* Under source code control: 1990/02/15 01:50:37
|
||||||
|
186
cal/sumtimes.cal
Normal file
186
cal/sumtimes.cal
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
/*
|
||||||
|
* sumtimes - runtimes evaluating sums & squares of large lists and mats
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Ernest Bowen
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 30.1 $
|
||||||
|
* @(#) $Id: sumtimes.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/sumtimes.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2006/06/22 17:29
|
||||||
|
* File existed as early as: 2006
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
global sumtimes_t0, sumtimes_t1, sumtimes_t2, sumtimes_t3;
|
||||||
|
global sumtimes_A, sumtimes_B;
|
||||||
|
config("tilde", 0),;
|
||||||
|
|
||||||
|
define timematsum(N) {
|
||||||
|
local n, s, p, ptop;
|
||||||
|
|
||||||
|
sumtimes_A = mat[N];
|
||||||
|
|
||||||
|
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||||
|
|
||||||
|
ptop = &sumtimes_A[n-1];
|
||||||
|
sumtimes_t0 = usertime();
|
||||||
|
for (s = n = 0; n < N; n++) s += sumtimes_A[n];
|
||||||
|
sumtimes_t1 = usertime();
|
||||||
|
for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += *p;
|
||||||
|
sumtimes_t2 = usertime();
|
||||||
|
s = matsum(sumtimes_A);
|
||||||
|
sumtimes_t3 = usertime();
|
||||||
|
|
||||||
|
print "Matrix sum runtimes";
|
||||||
|
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||||
|
printf('\t"For" loop using pointers:\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
|
||||||
|
printf('\tUsing builtin "matsum":\t\t%.4f\n', sumtimes_t3 - sumtimes_t2);
|
||||||
|
}
|
||||||
|
|
||||||
|
define timelistsum(N) {
|
||||||
|
local n, s;
|
||||||
|
|
||||||
|
sumtimes_A = makelist(N);
|
||||||
|
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||||
|
|
||||||
|
sumtimes_t0 = usertime();
|
||||||
|
for (s = n = 0; n < N; n++) s += sumtimes_A[n];
|
||||||
|
sumtimes_t1 = usertime();
|
||||||
|
s = sum(sumtimes_A);
|
||||||
|
sumtimes_t2 = usertime();
|
||||||
|
print "List sum runtimes";
|
||||||
|
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||||
|
printf('\tUsing builtin "sum":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
define timematsort(N) {
|
||||||
|
local n;
|
||||||
|
|
||||||
|
sumtimes_A = mat[N];
|
||||||
|
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||||
|
sumtimes_t0 = usertime();
|
||||||
|
sort(sumtimes_A);
|
||||||
|
sumtimes_t1 = usertime();
|
||||||
|
printf('\tMatrix sort runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
define timelistsort(N) {
|
||||||
|
local n;
|
||||||
|
|
||||||
|
sumtimes_A = makelist(N);
|
||||||
|
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||||
|
sumtimes_t0 = usertime();
|
||||||
|
sort(sumtimes_A);
|
||||||
|
sumtimes_t1 = usertime();
|
||||||
|
printf('\tList sort runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||||
|
}
|
||||||
|
|
||||||
|
define timematreverse(N) {
|
||||||
|
local n;
|
||||||
|
|
||||||
|
sumtimes_A = mat[N];
|
||||||
|
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||||
|
sumtimes_t0 = usertime();
|
||||||
|
reverse(sumtimes_A);
|
||||||
|
sumtimes_t1 = usertime();
|
||||||
|
printf('\tMatrix reverse runtime %.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||||
|
}
|
||||||
|
|
||||||
|
define timelistreverse(N) {
|
||||||
|
local n;
|
||||||
|
|
||||||
|
sumtimes_A = makelist(N);
|
||||||
|
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||||
|
sumtimes_t0 = usertime();
|
||||||
|
reverse(sumtimes_A);
|
||||||
|
sumtimes_t1 = usertime();
|
||||||
|
printf('\tList reverse runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||||
|
}
|
||||||
|
|
||||||
|
define timematssq(N) {
|
||||||
|
local n, s, p, ptop;
|
||||||
|
|
||||||
|
sumtimes_A = mat[N];
|
||||||
|
|
||||||
|
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||||
|
|
||||||
|
ptop = &sumtimes_A[n-1];
|
||||||
|
sumtimes_t0 = usertime();
|
||||||
|
for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2;
|
||||||
|
sumtimes_t1 = usertime();
|
||||||
|
for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += (*p)^2;
|
||||||
|
sumtimes_t2 = usertime();
|
||||||
|
|
||||||
|
print "Matrix sum of squares runtimes";
|
||||||
|
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||||
|
printf('\t"For" loop using pointers:\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
|
||||||
|
}
|
||||||
|
|
||||||
|
define timelistssq(N) {
|
||||||
|
local n, s;
|
||||||
|
|
||||||
|
sumtimes_A = makelist(N);
|
||||||
|
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||||
|
|
||||||
|
sumtimes_t0 = usertime();
|
||||||
|
for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2;
|
||||||
|
sumtimes_t1 = usertime();
|
||||||
|
s = ssq(sumtimes_A);
|
||||||
|
sumtimes_t2 = usertime();
|
||||||
|
print "List sum of squares runtimes";
|
||||||
|
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||||
|
printf('\tUsing builtin "ssq":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
|
||||||
|
}
|
||||||
|
|
||||||
|
define timehmean(N, M = 10) {
|
||||||
|
local n, s, v1, v2;
|
||||||
|
|
||||||
|
sumtimes_A = makelist(N);
|
||||||
|
for (n = 0; n < N; n++) sumtimes_A[n] = rand(1, M);
|
||||||
|
|
||||||
|
sumtimes_t0 = usertime();
|
||||||
|
for (s = n = 0; n < N; n++) s += 1/sumtimes_A[n];
|
||||||
|
v1 = N/s;
|
||||||
|
sumtimes_t1 = usertime();
|
||||||
|
v2 = hmean(sumtimes_A);
|
||||||
|
sumtimes_t2 = usertime();
|
||||||
|
print v1, v2;
|
||||||
|
print "List harmonic meanruntimes";
|
||||||
|
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||||
|
printf('\tUsing builtin "hmean":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
|
||||||
|
}
|
||||||
|
|
||||||
|
define doalltimes(N) {
|
||||||
|
timematsum(N);
|
||||||
|
print;
|
||||||
|
timelistsum(N);
|
||||||
|
print;
|
||||||
|
timematssq(N);
|
||||||
|
print;
|
||||||
|
timelistssq(N);
|
||||||
|
print;
|
||||||
|
timematsort(N);
|
||||||
|
timelistsort(N);
|
||||||
|
timematreverse(N);
|
||||||
|
timelistreverse(N);
|
||||||
|
print;
|
||||||
|
}
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: surd.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: surd.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/surd.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/surd.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:38
|
* Under source code control: 1990/02/15 01:50:38
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test1700.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test1700.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test1700.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test1700.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1994/03/14 23:12:51
|
* Under source code control: 1994/03/14 23:12:51
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test2300.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test2300.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2300.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2300.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/07/09 06:12:13
|
* Under source code control: 1995/07/09 06:12:13
|
||||||
|
103
cal/test2600.cal
103
cal/test2600.cal
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.2 $
|
||||||
* @(#) $Id: test2600.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test2600.cal,v 30.2 2007/07/11 22:57:23 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2600.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2600.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/10/13 00:13:14
|
* Under source code control: 1995/10/13 00:13:14
|
||||||
@@ -313,6 +313,102 @@ define testpower(str, n, b, eps, verbose)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
define testpower2(str, n, eps, verbose)
|
||||||
|
{
|
||||||
|
local i, a, c, m, min, max;
|
||||||
|
local b;
|
||||||
|
local num;
|
||||||
|
local c2;
|
||||||
|
local oldeps;
|
||||||
|
|
||||||
|
if (isnull(verbose)) verbose = 2;
|
||||||
|
if (verbose > 0) {
|
||||||
|
print str:":",:;
|
||||||
|
}
|
||||||
|
if (isnull(eps))
|
||||||
|
eps = epsilon();
|
||||||
|
oldeps = epsilon(eps);
|
||||||
|
epsilon(eps),;
|
||||||
|
if (!isnum(b))
|
||||||
|
quit "Second argument (exponent) to be a number";
|
||||||
|
min = 1000;
|
||||||
|
max = -1000;
|
||||||
|
for (i = 1; i <= n; i++) {
|
||||||
|
if (verbose > 2) print i,:;
|
||||||
|
|
||||||
|
/* real ^ real */
|
||||||
|
a = rand(1,1e20);
|
||||||
|
a = a / (int(a/2)+rand(1,1e20));
|
||||||
|
b = rand(1,1e20);
|
||||||
|
b = b / (int(b/2)+rand(1,1e20));
|
||||||
|
c = a ^ b;
|
||||||
|
c2 = power(a, b);
|
||||||
|
if (c != c2) {
|
||||||
|
m++;
|
||||||
|
if (verbose > 1) {
|
||||||
|
printf("*** real^real failure for a = %d\n", a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* complex ^ real */
|
||||||
|
a = rand(1,1e20);
|
||||||
|
a = a / (int(a/2)+rand(1,1e20));
|
||||||
|
b = rand(1,1e20);
|
||||||
|
b = b / (int(b/2)+rand(1,1e20));
|
||||||
|
c = (a*1i) ^ b;
|
||||||
|
c2 = power(a*1i, b);
|
||||||
|
if (c != c2) {
|
||||||
|
m++;
|
||||||
|
if (verbose > 1) {
|
||||||
|
printf("*** comp^real failure for a = %d\n", a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* real ^ complex */
|
||||||
|
a = rand(1,1e20);
|
||||||
|
a = a / (int(a/2)+rand(1,1e20));
|
||||||
|
b = rand(1,1e20);
|
||||||
|
b = b / (int(b/2)+rand(1,1e20));
|
||||||
|
c = a ^ (b*1i);
|
||||||
|
c2 = power(a, b*1i);
|
||||||
|
if (c != c2) {
|
||||||
|
m++;
|
||||||
|
if (verbose > 1) {
|
||||||
|
printf("*** real^comp failure for a = %d\n", a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* complex ^ complex */
|
||||||
|
a = rand(1,1e20);
|
||||||
|
a = a / (int(a/2)+rand(1,1e20));
|
||||||
|
b = rand(1,1e20);
|
||||||
|
b = b / (int(b/2)+rand(1,1e20));
|
||||||
|
c = (a*1i) ^ (b*1i);
|
||||||
|
c2 = power(a*1i, b*1i);
|
||||||
|
if (c != c2) {
|
||||||
|
m++;
|
||||||
|
if (verbose > 1) {
|
||||||
|
printf("*** comp^comp failure for a = %d\n", a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
epsilon(oldeps),;
|
||||||
|
if (verbose > 0) {
|
||||||
|
if (m) {
|
||||||
|
printf("*** %d error(s)\n", m);
|
||||||
|
printf(" %s: rem/eps min=%d, max=%d\n",
|
||||||
|
str, min, max);
|
||||||
|
} else {
|
||||||
|
printf("no errors\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (verbose > 1) {
|
||||||
|
printf(" %s: rem/eps min=%0.4d, max=%0.4d\n", str, min, max);
|
||||||
|
}
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
define cpow(a, b, eps) /* Find rem/eps for power(a,b,eps) */
|
define cpow(a, b, eps) /* Find rem/eps for power(a,b,eps) */
|
||||||
{
|
{
|
||||||
local v, v1, c, n, d, h;
|
local v, v1, c, n, d, h;
|
||||||
@@ -504,6 +600,7 @@ define test2600(verbose, tnum)
|
|||||||
err += testsqrt(strcat(str(tnum++),": sqrt",str(i)), n*10,
|
err += testsqrt(strcat(str(tnum++),": sqrt",str(i)), n*10,
|
||||||
ep, verbose);
|
ep, verbose);
|
||||||
}
|
}
|
||||||
|
err += testpower2(strcat(str(tnum++),": power"), n*4, ep, verbose);
|
||||||
if (verbose > 1) {
|
if (verbose > 1) {
|
||||||
if (err) {
|
if (err) {
|
||||||
print "***", err, "error(s) found in test2600";
|
print "***", err, "error(s) found in test2600";
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test2700.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test2700.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2700.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2700.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/11/01 22:52:25
|
* Under source code control: 1995/11/01 22:52:25
|
||||||
@@ -41,8 +41,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1;
|
defaultverbose = 1;
|
||||||
global err;
|
|
||||||
|
|
||||||
define mknonnegreal() {
|
define mknonnegreal() {
|
||||||
switch(rand(8)) {
|
switch(rand(8)) {
|
||||||
@@ -89,11 +88,11 @@ define mkfrac() = rand(2) ? mkposfrac() : -mkposfrac();
|
|||||||
define mksquarereal() = mknonnegreal()^2;
|
define mksquarereal() = mknonnegreal()^2;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXX - Should be able to do better than the following. For nonsquare
|
* We might be able to do better than the following. For nonsquare
|
||||||
* positive integer less than 1e6, could use
|
* positive integer less than 1e6, could use:
|
||||||
* x = rand(1, 1000);
|
* x = rand(1, 1000);
|
||||||
* return rand(x^2 + 1, (x + 1)^2);
|
* return rand(x^2 + 1, (x + 1)^2);
|
||||||
* Maybe could do
|
* Maybe could do:
|
||||||
* do
|
* do
|
||||||
* x = mkreal_2700();
|
* x = mkreal_2700();
|
||||||
* while
|
* while
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test3100.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test3100.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3100.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3100.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/11/28 11:56:57
|
* Under source code control: 1995/11/28 11:56:57
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test3300.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test3300.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3300.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3300.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/12/02 04:27:41
|
* Under source code control: 1995/12/02 04:27:41
|
||||||
@@ -30,8 +30,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
|
||||||
|
|
||||||
define testi(str, n, N, verbose)
|
define testi(str, n, N, verbose)
|
||||||
{
|
{
|
||||||
@@ -82,9 +81,9 @@ define testr(str, n, N, verbose)
|
|||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
for (j = 0; j < n; j++)
|
for (j = 0; j < n; j++)
|
||||||
A[i,j] = rand(-(N^2), N^2)/rand(1, N);
|
A[i,j] = rand(-(N^2), N^2)/rand(1, N);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
d1 = det(A);
|
d1 = det(A);
|
||||||
t = runtime() - t;
|
t = usertime() - t;
|
||||||
d2 = det(A^2);
|
d2 = det(A^2);
|
||||||
if (d2 != d1^2) {
|
if (d2 != d1^2) {
|
||||||
if (verbose > 0) {
|
if (verbose > 0) {
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test3400.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test3400.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3400.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3400.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/12/02 05:20:11
|
* Under source code control: 1995/12/02 05:20:11
|
||||||
@@ -54,8 +54,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
|
||||||
|
|
||||||
global pi1k = pi(1e-1000);
|
global pi1k = pi(1e-1000);
|
||||||
|
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test3500.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test3500.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3500.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3500.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/12/18 22:50:46
|
* Under source code control: 1995/12/18 22:50:46
|
||||||
@@ -53,8 +53,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
|
||||||
|
|
||||||
define testfrem(x,y,verbose)
|
define testfrem(x,y,verbose)
|
||||||
{
|
{
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test4000.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test4000.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4000.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4000.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/03/13 02:38:45
|
* Under source code control: 1996/03/13 02:38:45
|
||||||
@@ -75,8 +75,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* test defaults
|
* test defaults
|
||||||
@@ -146,7 +145,7 @@ define ptimes(str, N, n, count, skip, verbose)
|
|||||||
mat A[n];
|
mat A[n];
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
A[i] = plen(N);
|
A[i] = plen(N);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
p = ptest(A[i], count, skip);
|
p = ptest(A[i], count, skip);
|
||||||
if (!p) {
|
if (!p) {
|
||||||
@@ -160,7 +159,7 @@ define ptimes(str, N, n, count, skip, verbose)
|
|||||||
if (m) {
|
if (m) {
|
||||||
printf("*** %d error(s)\n", m);
|
printf("*** %d error(s)\n", m);
|
||||||
} else {
|
} else {
|
||||||
t = round(runtime() - t, 4);
|
t = round(usertime() - t, 4);
|
||||||
if (verbose > 1) {
|
if (verbose > 1) {
|
||||||
printf("%d probable primes: time = %d\n", n, t);
|
printf("%d probable primes: time = %d\n", n, t);
|
||||||
} else {
|
} else {
|
||||||
@@ -195,7 +194,7 @@ define ctimes(str, N, n, count, skip, verbose)
|
|||||||
mat A[n];
|
mat A[n];
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
A[i] = clen(N);
|
A[i] = clen(N);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
p = ptest(A[i], count, skip);
|
p = ptest(A[i], count, skip);
|
||||||
if (p) {
|
if (p) {
|
||||||
@@ -209,7 +208,7 @@ define ctimes(str, N, n, count, skip, verbose)
|
|||||||
if (m) {
|
if (m) {
|
||||||
printf("*** %d error(s)\n", m);
|
printf("*** %d error(s)\n", m);
|
||||||
} else {
|
} else {
|
||||||
t = round(runtime() - t, 4);
|
t = round(usertime() - t, 4);
|
||||||
if (verbose > 1) {
|
if (verbose > 1) {
|
||||||
printf("%d probable primes: time = %d\n", n, t);
|
printf("%d probable primes: time = %d\n", n, t);
|
||||||
} else {
|
} else {
|
||||||
@@ -243,7 +242,7 @@ define crtimes(str, a, b, n, count, skip, verbose)
|
|||||||
A[i] = rand(a,b);
|
A[i] = rand(a,b);
|
||||||
P[i] = ptest(A[i], 20, 0);
|
P[i] = ptest(A[i], 20, 0);
|
||||||
}
|
}
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
p = ptest(A[i], count, skip);
|
p = ptest(A[i], count, skip);
|
||||||
if (p != P[i]) {
|
if (p != P[i]) {
|
||||||
@@ -258,7 +257,7 @@ define crtimes(str, a, b, n, count, skip, verbose)
|
|||||||
if (m) {
|
if (m) {
|
||||||
printf("*** %d error(s)?\n", m);
|
printf("*** %d error(s)?\n", m);
|
||||||
} else {
|
} else {
|
||||||
t = round(runtime() - t, 4);
|
t = round(usertime() - t, 4);
|
||||||
if (verbose > 1) {
|
if (verbose > 1) {
|
||||||
printf("%d probable primes: time = %d\n", n, t);
|
printf("%d probable primes: time = %d\n", n, t);
|
||||||
} else {
|
} else {
|
||||||
@@ -296,16 +295,16 @@ define ntimes(str, N, n, count, skip, residue, modulus, verbose)
|
|||||||
mat A[n];
|
mat A[n];
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
A[i] = rlen(N);
|
A[i] = rlen(N);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
p = nextcand(A[i], count, skip, residue, modulus);
|
p = nextcand(A[i], count, skip, residue, modulus);
|
||||||
}
|
}
|
||||||
tnext = round(runtime() - t, 4);
|
tnext = round(usertime() - t, 4);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
p = prevcand(A[i], count, skip, residue, modulus);
|
p = prevcand(A[i], count, skip, residue, modulus);
|
||||||
}
|
}
|
||||||
tprev = round(runtime() - t, 4);
|
tprev = round(usertime() - t, 4);
|
||||||
if (verbose > 0) {
|
if (verbose > 0) {
|
||||||
printf("%d evaluations, nextcand: %d, prevcand: %d\n", n, tnext, tprev);
|
printf("%d evaluations, nextcand: %d, prevcand: %d\n", n, tnext, tprev);
|
||||||
}
|
}
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test4100.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test4100.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4100.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4100.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/03/13 03:53:22
|
* Under source code control: 1996/03/13 03:53:22
|
||||||
@@ -70,18 +70,16 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* test defaults
|
* test defaults
|
||||||
*/
|
*/
|
||||||
global K1 = 2^17;
|
global test4100_K1 = 2^17;
|
||||||
global K2 = 2^12;
|
global test4100_K2 = 2^12;
|
||||||
global BASEB = 16;
|
global test4100_BASE = 2^config("baseb");
|
||||||
global BASE = 2^BASEB;
|
|
||||||
|
|
||||||
define rlen_4100(N) = rand(BASE^(N-1), BASE^N);
|
define rlen_4100(N) = rand(test4100_BASE^(N-1), test4100_BASE^N);
|
||||||
|
|
||||||
define olen(N)
|
define olen(N)
|
||||||
{
|
{
|
||||||
@@ -234,7 +232,7 @@ define times(str,N,n,verbose)
|
|||||||
m = olen(N);
|
m = olen(N);
|
||||||
m2 = m^2;
|
m2 = m^2;
|
||||||
if (isnull(n)) {
|
if (isnull(n)) {
|
||||||
n = ceil(K1/power(N,1.585));
|
n = ceil(test4100_K1/power(N,1.585));
|
||||||
if (verbose > 1)
|
if (verbose > 1)
|
||||||
printf("n = %d\n", n);
|
printf("n = %d\n", n);
|
||||||
}
|
}
|
||||||
@@ -247,38 +245,38 @@ define times(str,N,n,verbose)
|
|||||||
C[i] = rand(m2);
|
C[i] = rand(m2);
|
||||||
}
|
}
|
||||||
z = rcin(0,m); /* to initialize redc and maybe lastmod information */
|
z = rcin(0,m); /* to initialize redc and maybe lastmod information */
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z = rcin(A[i],m);
|
z = rcin(A[i],m);
|
||||||
trcin = round(runtime() - t, 3);
|
trcin = round(usertime() - t, 3);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z = rcout(A[i],m);
|
z = rcout(A[i],m);
|
||||||
trcout = round(runtime() - t, 3);
|
trcout = round(usertime() - t, 3);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z = rcmul(A[i],B[i],m);
|
z = rcmul(A[i],B[i],m);
|
||||||
trcmul = round(runtime() - t, 3);
|
trcmul = round(usertime() - t, 3);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z = rcsq(A[i],m);
|
z = rcsq(A[i],m);
|
||||||
trcsq = round(runtime() - t, 3);
|
trcsq = round(usertime() - t, 3);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z = A[i] * B[i];
|
z = A[i] * B[i];
|
||||||
tmul = round(runtime() - t, 3);
|
tmul = round(usertime() - t, 3);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z = A[i]^2;
|
z = A[i]^2;
|
||||||
tsq = round(runtime() - t, 3);
|
tsq = round(usertime() - t, 3);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z = C[i] % A[i];
|
z = C[i] % A[i];
|
||||||
tmod = round(runtime() - t, 3);
|
tmod = round(usertime() - t, 3);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
quomod(C[i], A[i], x, y);
|
quomod(C[i], A[i], x, y);
|
||||||
tquomod = round(runtime() - t,3);
|
tquomod = round(usertime() - t,3);
|
||||||
|
|
||||||
if (verbose > 1) {
|
if (verbose > 1) {
|
||||||
printf("rcin: %d, rcout: %d, rcmul: %d, rcsq: %d\n",
|
printf("rcin: %d, rcout: %d, rcmul: %d, rcsq: %d\n",
|
||||||
@@ -308,7 +306,7 @@ define powtimes(str, N1, N2, n, verbose)
|
|||||||
N2 = 1;
|
N2 = 1;
|
||||||
|
|
||||||
if (isnull(n)) {
|
if (isnull(n)) {
|
||||||
n = ceil(K2/power(N1, 1.585)/N2);
|
n = ceil(test4100_K2/power(N1, 1.585)/N2);
|
||||||
printf ("n = %d\n", n);
|
printf ("n = %d\n", n);
|
||||||
}
|
}
|
||||||
mat A[n];
|
mat A[n];
|
||||||
@@ -316,8 +314,8 @@ define powtimes(str, N1, N2, n, verbose)
|
|||||||
mat B[n];
|
mat B[n];
|
||||||
v = olen(N1);
|
v = olen(N1);
|
||||||
|
|
||||||
cp = config("pow2", 1);
|
cp = config("pow2", 2);
|
||||||
crc = config("redc2", 1);
|
crc = config("redc2", 2);
|
||||||
|
|
||||||
/* initialize redc and lastmod info */
|
/* initialize redc and lastmod info */
|
||||||
|
|
||||||
@@ -328,29 +326,29 @@ define powtimes(str, N1, N2, n, verbose)
|
|||||||
Ar[i] = rcin(A[i], v);
|
Ar[i] = rcin(A[i], v);
|
||||||
B[i] = rlen_4100(N2);
|
B[i] = rlen_4100(N2);
|
||||||
}
|
}
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z1 += pmod(A[i], B[i], v);
|
z1 += pmod(A[i], B[i], v);
|
||||||
tbignum = round(runtime() - t, 4);
|
tbignum = round(usertime() - t, 4);
|
||||||
config("pow2", 1e6);
|
config("pow2", 1e6);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z2 += pmod(A[i], B[i], v);
|
z2 += pmod(A[i], B[i], v);
|
||||||
tnormal = round(runtime() - t, 4);
|
tnormal = round(usertime() - t, 4);
|
||||||
config("redc2",1e6);
|
config("redc2",1e6);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z3 += pmod(A[i], B[i], v);
|
z3 += pmod(A[i], B[i], v);
|
||||||
tsmall = round(runtime() - t, 4);
|
tsmall = round(usertime() - t, 4);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z4 += rcpow(Ar[i], B[i], v);
|
z4 += rcpow(Ar[i], B[i], v);
|
||||||
trcsmall = round(runtime() - t, 4);
|
trcsmall = round(usertime() - t, 4);
|
||||||
config("redc2", 1);
|
config("redc2", 2);
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
z5 += rcpow(Ar[i], B[i], v);
|
z5 += rcpow(Ar[i], B[i], v);
|
||||||
trcbig = round(runtime() - t, 4);
|
trcbig = round(usertime() - t, 4);
|
||||||
|
|
||||||
if (z1 != z2) {
|
if (z1 != z2) {
|
||||||
++m;
|
++m;
|
||||||
@@ -408,7 +406,7 @@ define inittimes(str,N,n,verbose)
|
|||||||
}
|
}
|
||||||
m = 0;
|
m = 0;
|
||||||
if (isnull(n)) {
|
if (isnull(n)) {
|
||||||
n = ceil(K1/N^2);
|
n = ceil(test4100_K1/N^2);
|
||||||
if (verbose > 1) {
|
if (verbose > 1) {
|
||||||
printf ("n = %d\n", n);
|
printf ("n = %d\n", n);
|
||||||
}
|
}
|
||||||
@@ -421,13 +419,13 @@ define inittimes(str,N,n,verbose)
|
|||||||
M[i] = olen(N);
|
M[i] = olen(N);
|
||||||
A[i] = rand(M[i]);
|
A[i] = rand(M[i]);
|
||||||
}
|
}
|
||||||
t = runtime();
|
t = usertime();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
R[i] = rcin(A[i], M[i]);
|
R[i] = rcin(A[i], M[i]);
|
||||||
trcin = round(runtime() - t, 4);
|
trcin = round(usertime() - t, 4);
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
B[i] = rcout(R[i], M[i]);
|
B[i] = rcout(R[i], M[i]);
|
||||||
trcout = round(runtime() - t, 4);
|
trcout = round(usertime() - t, 4);
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
if (B[i] != A[i]) {
|
if (B[i] != A[i]) {
|
||||||
++m;
|
++m;
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test4600.cal,v 29.4 2001/04/10 22:09:02 chongo Exp $
|
* @(#) $Id: test4600.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4600.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4600.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/07/02 20:04:40
|
* Under source code control: 1996/07/02 20:04:40
|
||||||
@@ -30,8 +30,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1 /* default verbose value */
|
defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* test globals
|
* test globals
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test5100.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test5100.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5100.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5100.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/12/02 23:57:10
|
* Under source code control: 1996/12/02 23:57:10
|
||||||
@@ -30,8 +30,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We test the new code generator declaration scope and order.
|
* We test the new code generator declaration scope and order.
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test5200.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test5200.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5200.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5200.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/02/07 02:48:10
|
* Under source code control: 1997/02/07 02:48:10
|
||||||
@@ -30,8 +30,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* test the fix of a global/static bug
|
* test the fix of a global/static bug
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test8400.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test8400.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8400.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8400.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1999/10/31 01:00:03
|
* Under source code control: 1999/10/31 01:00:03
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test8500.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test8500.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8500.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8500.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1999/11/12 20:59:59
|
* Under source code control: 1999/11/12 20:59:59
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: test8600.cal,v 29.1 2000/12/04 19:57:02 chongo Exp $
|
* @(#) $Id: test8600.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8600.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8600.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 2000/12/04 19:57:02
|
* Under source code control: 2000/12/04 19:57:02
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: unitfrac.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: unitfrac.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/unitfrac.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/unitfrac.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:38
|
* Under source code control: 1990/02/15 01:50:38
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: varargs.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: varargs.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/varargs.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/varargs.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/05/22 21:56:34
|
* Under source code control: 1991/05/22 21:56:34
|
||||||
|
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: xx_print.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: xx_print.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/xx_print.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/xx_print.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/04/17 00:08:50
|
* Under source code control: 1997/04/17 00:08:50
|
||||||
|
126
calc.c
126
calc.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* calc - arbitrary precision calculator
|
* calc - arbitrary precision calculator
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell, Landon Curt Noll and Ernest Bowen
|
* Copyright (C) 1999-2007 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.10 $
|
* @(#) $Revision: 30.3 $
|
||||||
* @(#) $Id: calc.c,v 29.10 2004/02/23 09:21:35 chongo Exp $
|
* @(#) $Id: calc.c,v 30.3 2007/07/15 02:03:42 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:11
|
* Under source code control: 1990/02/15 01:48:11
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
#include "have_uid_t.h"
|
#include "have_uid_t.h"
|
||||||
#include "have_const.h"
|
#include "have_const.h"
|
||||||
#include "custom.h"
|
#include "custom.h"
|
||||||
#include "math_error.h"
|
#include "lib_calc.h"
|
||||||
#include "args.h"
|
#include "args.h"
|
||||||
#include "zmath.h"
|
#include "zmath.h"
|
||||||
|
|
||||||
@@ -87,11 +87,12 @@
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* static definitions and functions
|
* S_FUNC definitions and functions
|
||||||
*/
|
*/
|
||||||
static void intint(int arg); /* interrupt routine */
|
S_FUNC void intint(int arg); /* interrupt routine */
|
||||||
static int nextcp(char **cpp, int *ip, int argc, char **argv, BOOL haveendstr);
|
S_FUNC void calc_interrupt(char *fmt, ...);
|
||||||
static void set_run_state(run state);
|
S_FUNC int nextcp(char **cpp, int *ip, int argc, char **argv, BOOL haveendstr);
|
||||||
|
S_FUNC void set_run_state(run state);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Top level calculator routine.
|
* Top level calculator routine.
|
||||||
@@ -111,7 +112,7 @@ main(int argc, char **argv)
|
|||||||
BOOL done = FALSE;
|
BOOL done = FALSE;
|
||||||
BOOL havearg;
|
BOOL havearg;
|
||||||
BOOL haveendstr;
|
BOOL haveendstr;
|
||||||
int len;
|
size_t len;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* parse args
|
* parse args
|
||||||
@@ -188,7 +189,7 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"-m expects"
|
"-m expects"
|
||||||
" argument");
|
" argument");
|
||||||
exit (1);
|
exit(2);
|
||||||
}
|
}
|
||||||
cp = argv[index];
|
cp = argv[index];
|
||||||
}
|
}
|
||||||
@@ -203,7 +204,7 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: unknown -m arg\n",
|
"%s: unknown -m arg\n",
|
||||||
program);
|
program);
|
||||||
exit(1);
|
exit(3);
|
||||||
}
|
}
|
||||||
allow_read = (((*cp-'0') & 04) > 0);
|
allow_read = (((*cp-'0') & 04) > 0);
|
||||||
allow_write = (((*cp-'0') & 02) > 0);
|
allow_write = (((*cp-'0') & 02) > 0);
|
||||||
@@ -211,7 +212,7 @@ main(int argc, char **argv)
|
|||||||
cp++;
|
cp++;
|
||||||
if (*cp != ' ' && *cp != '\0') {
|
if (*cp != ' ' && *cp != '\0') {
|
||||||
fprintf(stderr, "??? m-arg");
|
fprintf(stderr, "??? m-arg");
|
||||||
exit(1);
|
exit(4);
|
||||||
}
|
}
|
||||||
havearg = TRUE;
|
havearg = TRUE;
|
||||||
break;
|
break;
|
||||||
@@ -245,8 +246,13 @@ main(int argc, char **argv)
|
|||||||
* call libcalc_call_me_last() -
|
* call libcalc_call_me_last() -
|
||||||
* nothing to cleanup
|
* nothing to cleanup
|
||||||
*/
|
*/
|
||||||
printf("%s (version %s)\n",
|
fputs(CALC_TITLE, stdout);
|
||||||
CALC_TITLE, version());
|
#if defined(CUSTOM)
|
||||||
|
fputs(" w/custom functions", stdout);
|
||||||
|
#else
|
||||||
|
fputs(" w/o custom functions", stdout);
|
||||||
|
#endif /* CUSTOM */
|
||||||
|
printf(" (version %s)\n", version());
|
||||||
exit(0);
|
exit(0);
|
||||||
case 'D':
|
case 'D':
|
||||||
/*
|
/*
|
||||||
@@ -262,7 +268,7 @@ main(int argc, char **argv)
|
|||||||
FALSE)) {
|
FALSE)) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"-D expects argument\n");
|
"-D expects argument\n");
|
||||||
exit (1);
|
exit(5);
|
||||||
}
|
}
|
||||||
havearg = TRUE;
|
havearg = TRUE;
|
||||||
if (*cp != ':') {
|
if (*cp != ':') {
|
||||||
@@ -270,7 +276,7 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"-D expects"
|
"-D expects"
|
||||||
" integer\n");
|
" integer\n");
|
||||||
exit (1);
|
exit(6);
|
||||||
}
|
}
|
||||||
calc_debug = cp;
|
calc_debug = cp;
|
||||||
(void) strtol(cp, &endcp, 10);
|
(void) strtol(cp, &endcp, 10);
|
||||||
@@ -280,7 +286,7 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Bad syntax im -D"
|
"Bad syntax im -D"
|
||||||
" arg\n");
|
" arg\n");
|
||||||
exit (1);
|
exit(7);
|
||||||
}
|
}
|
||||||
if (*cp != ':') {
|
if (*cp != ':') {
|
||||||
if (nextcp(&cp, &index,
|
if (nextcp(&cp, &index,
|
||||||
@@ -295,14 +301,14 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"-D : expects"
|
"-D : expects"
|
||||||
" argument\n");
|
" argument\n");
|
||||||
exit (1);
|
exit(8);
|
||||||
}
|
}
|
||||||
if (*cp != ':') {
|
if (*cp != ':') {
|
||||||
if (*cp < '0' || *cp > '9') {
|
if (*cp < '0' || *cp > '9') {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"-D : expects"
|
"-D : expects"
|
||||||
" integer\n");
|
" integer\n");
|
||||||
exit (1);
|
exit(9);
|
||||||
}
|
}
|
||||||
resource_debug = cp;
|
resource_debug = cp;
|
||||||
(void) strtol(cp, &endcp, 10);
|
(void) strtol(cp, &endcp, 10);
|
||||||
@@ -312,7 +318,7 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Bad syntax im -D"
|
"Bad syntax im -D"
|
||||||
" : arg\n");
|
" : arg\n");
|
||||||
exit (1);
|
exit(10);
|
||||||
}
|
}
|
||||||
if (*cp != ':') {
|
if (*cp != ':') {
|
||||||
if (nextcp(&cp, &index,
|
if (nextcp(&cp, &index,
|
||||||
@@ -327,12 +333,12 @@ main(int argc, char **argv)
|
|||||||
FALSE)) {
|
FALSE)) {
|
||||||
fprintf(stderr, "-D : : expects"
|
fprintf(stderr, "-D : : expects"
|
||||||
" argument\n");
|
" argument\n");
|
||||||
exit (1);
|
exit(11);
|
||||||
}
|
}
|
||||||
if (*cp < '0' || *cp > '9') {
|
if (*cp < '0' || *cp > '9') {
|
||||||
fprintf(stderr, "-D :: expects"
|
fprintf(stderr, "-D :: expects"
|
||||||
" integer\n");
|
" integer\n");
|
||||||
exit (1);
|
exit(12);
|
||||||
}
|
}
|
||||||
user_debug = cp;
|
user_debug = cp;
|
||||||
(void) strtol(cp, &endcp, 10);
|
(void) strtol(cp, &endcp, 10);
|
||||||
@@ -340,7 +346,7 @@ main(int argc, char **argv)
|
|||||||
if (*cp != '\0' && *cp != ' ') {
|
if (*cp != '\0' && *cp != ' ') {
|
||||||
fprintf(stderr, "Bad syntax in"
|
fprintf(stderr, "Bad syntax in"
|
||||||
" -D : : arg\n");
|
" -D : : arg\n");
|
||||||
exit (1);
|
exit(13);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
@@ -349,13 +355,13 @@ main(int argc, char **argv)
|
|||||||
haveendstr)) {
|
haveendstr)) {
|
||||||
fprintf(stderr, "-f expects"
|
fprintf(stderr, "-f expects"
|
||||||
" filename\n");
|
" filename\n");
|
||||||
exit (1);
|
exit(14);
|
||||||
}
|
}
|
||||||
if (*cp == ';') {
|
if (*cp == ';') {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"-f expects"
|
"-f expects"
|
||||||
" filename\n");
|
" filename\n");
|
||||||
exit (1);
|
exit(15);
|
||||||
}
|
}
|
||||||
havearg = TRUE;
|
havearg = TRUE;
|
||||||
if (cmdlen > 0)
|
if (cmdlen > 0)
|
||||||
@@ -373,7 +379,7 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr, "-f -once"
|
fprintf(stderr, "-f -once"
|
||||||
" expects"
|
" expects"
|
||||||
" filename\n");
|
" filename\n");
|
||||||
exit (1);
|
exit(16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bp = cmdbuf + cmdlen;
|
bp = cmdbuf + cmdlen;
|
||||||
@@ -383,17 +389,17 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Null"
|
"Null"
|
||||||
" filename!");
|
" filename!");
|
||||||
exit (1);
|
exit(17);
|
||||||
}
|
}
|
||||||
if (cmdlen + len + 2 > MAXCMD) {
|
if (cmdlen + len + 2 > MAXCMD) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Commands too"
|
"Commands too"
|
||||||
" long");
|
" long");
|
||||||
exit (1);
|
exit(18);
|
||||||
}
|
}
|
||||||
/* XXX What if *cp = '\''? */
|
/* XXX What if *cp = '\''? */
|
||||||
*bp++ = '\'';
|
*bp++ = '\'';
|
||||||
strcpy(bp, cp);
|
strncpy(bp, cp, len+1);
|
||||||
bp += len;
|
bp += len;
|
||||||
*bp++ = '\'';
|
*bp++ = '\'';
|
||||||
cp += len;
|
cp += len;
|
||||||
@@ -404,7 +410,7 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Commands"
|
"Commands"
|
||||||
" too long");
|
" too long");
|
||||||
exit (1);
|
exit(19);
|
||||||
}
|
}
|
||||||
*bp++ = *cp++;
|
*bp++ = *cp++;
|
||||||
cmdlen++;
|
cmdlen++;
|
||||||
@@ -416,6 +422,7 @@ main(int argc, char **argv)
|
|||||||
cp++;
|
cp++;
|
||||||
*bp++ = ';';
|
*bp++ = ';';
|
||||||
cmdlen++;
|
cmdlen++;
|
||||||
|
s_flag = TRUE; /* -f implies -s */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
@@ -431,12 +438,14 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr, "Illegal option -%c\n",
|
fprintf(stderr, "Illegal option -%c\n",
|
||||||
c);
|
c);
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"usage: %s [-a] [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]\n"
|
"usage: %s [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]\n"
|
||||||
"\t[-D calc_debug[:resource_debug[:user_debug]]]\n"
|
"\t[-D calc_debug[:resource_debug[:user_debug]]]\n"
|
||||||
"\t[-O] [-p] [-q] [-u] [-v] "
|
"\t[-O] [-p] [-q] [-s] [-u] [-v] "
|
||||||
"[--] [calc_cmd ...]\n",
|
"[--] [calc_cmd ...]\n"
|
||||||
program);
|
"usage: %s ... -f filename\n"
|
||||||
exit(1);
|
"1st cscript line: #/path/to/calc ... -f\n",
|
||||||
|
program, program);
|
||||||
|
exit(20);
|
||||||
}
|
}
|
||||||
if (havearg)
|
if (havearg)
|
||||||
break;
|
break;
|
||||||
@@ -452,16 +461,19 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (index < maxindex) {
|
while (index < maxindex) {
|
||||||
|
size_t cplen;
|
||||||
|
|
||||||
if (cmdlen > 0)
|
if (cmdlen > 0)
|
||||||
cmdbuf[cmdlen++] = ' ';
|
cmdbuf[cmdlen++] = ' ';
|
||||||
newcmdlen = cmdlen + strlen(cp);
|
cplen = strlen(cp);
|
||||||
|
newcmdlen = cmdlen + cplen;
|
||||||
if (newcmdlen > MAXCMD) {
|
if (newcmdlen > MAXCMD) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: commands too long\n",
|
"%s: commands too long\n",
|
||||||
program);
|
program);
|
||||||
exit(1);
|
exit(21);
|
||||||
}
|
}
|
||||||
strcpy(cmdbuf + cmdlen, cp);
|
strncpy(cmdbuf + cmdlen, cp, cplen+1);
|
||||||
cmdlen = newcmdlen;
|
cmdlen = newcmdlen;
|
||||||
index++;
|
index++;
|
||||||
if (index < maxindex)
|
if (index < maxindex)
|
||||||
@@ -530,14 +542,13 @@ main(int argc, char **argv)
|
|||||||
/*
|
/*
|
||||||
* establish error longjump point with initial conditions
|
* establish error longjump point with initial conditions
|
||||||
*/
|
*/
|
||||||
if (setjmp(jmpbuf) == 0) {
|
if (setjmp(calc_scanerr_jmpbuf) == 0) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* reset/initialize the computing environment
|
* reset/initialize the computing environment
|
||||||
*/
|
*/
|
||||||
if (post_init)
|
initialize();
|
||||||
initialize();
|
calc_use_scanerr_jmpbuf = 1;
|
||||||
post_init = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -579,7 +590,7 @@ main(int argc, char **argv)
|
|||||||
if (run_state == RUN_PRE_CMD_ARGS) {
|
if (run_state == RUN_PRE_CMD_ARGS) {
|
||||||
if (havecommands) {
|
if (havecommands) {
|
||||||
set_run_state(RUN_CMD_ARGS);
|
set_run_state(RUN_CMD_ARGS);
|
||||||
(void) openstring(cmdbuf, (long) strlen(cmdbuf));
|
(void) openstring(cmdbuf, strlen(cmdbuf));
|
||||||
getcommands(FALSE);
|
getcommands(FALSE);
|
||||||
closeinput();
|
closeinput();
|
||||||
}
|
}
|
||||||
@@ -707,12 +718,12 @@ main(int argc, char **argv)
|
|||||||
* arg to keep ANSI C happy
|
* arg to keep ANSI C happy
|
||||||
*/
|
*/
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
static void
|
S_FUNC void
|
||||||
intint(int UNUSED arg)
|
intint(int UNUSED arg)
|
||||||
{
|
{
|
||||||
(void) signal(SIGINT, intint);
|
(void) signal(SIGINT, intint);
|
||||||
if (inputwait || (++abortlevel >= ABORT_NOW)) {
|
if (inputwait || (++abortlevel >= ABORT_NOW)) {
|
||||||
math_error("\nABORT");
|
calc_interrupt("\nABORT");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
if (abortlevel >= ABORT_MATH)
|
if (abortlevel >= ABORT_MATH)
|
||||||
@@ -722,14 +733,12 @@ intint(int UNUSED arg)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Routine called on any runtime error, to complain about it (with possible
|
* report an interrupt
|
||||||
* arguments), and then longjump back to the top level command scanner.
|
|
||||||
*/
|
*/
|
||||||
void
|
static void
|
||||||
math_error(char *fmt, ...)
|
calc_interrupt(char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
char buf[MAXERROR+1];
|
|
||||||
|
|
||||||
if (funcname && (*funcname != '*'))
|
if (funcname && (*funcname != '*'))
|
||||||
fprintf(stderr, "\"%s\": ", funcname);
|
fprintf(stderr, "\"%s\": ", funcname);
|
||||||
@@ -737,12 +746,13 @@ math_error(char *fmt, ...)
|
|||||||
!inputisterminal()))
|
!inputisterminal()))
|
||||||
fprintf(stderr, "line %ld: ", funcline);
|
fprintf(stderr, "line %ld: ", funcline);
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
vsprintf(buf, fmt, ap);
|
vsnprintf(calc_err_msg, MAXERROR, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
fprintf(stderr, "%s\n", buf);
|
calc_err_msg[MAXERROR] = '\0';
|
||||||
|
fprintf(stderr, "%s\n\n", calc_err_msg);
|
||||||
funcname = NULL;
|
funcname = NULL;
|
||||||
if (post_init) {
|
if (calc_use_scanerr_jmpbuf != 0) {
|
||||||
longjmp(jmpbuf, 1);
|
longjmp(calc_scanerr_jmpbuf, 22);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "It is too early provide a command line prompt "
|
fprintf(stderr, "It is too early provide a command line prompt "
|
||||||
"so we must simply exit. Sorry!\n");
|
"so we must simply exit. Sorry!\n");
|
||||||
@@ -750,11 +760,11 @@ math_error(char *fmt, ...)
|
|||||||
* don't call libcalc_call_me_last() -- we might loop
|
* don't call libcalc_call_me_last() -- we might loop
|
||||||
* and besides ... this is an unusual internal error case
|
* and besides ... this is an unusual internal error case
|
||||||
*/
|
*/
|
||||||
exit(3);
|
exit(22);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
S_FUNC int
|
||||||
nextcp(char **cpp, int *ip, int argc, char **argv, BOOL haveendstr)
|
nextcp(char **cpp, int *ip, int argc, char **argv, BOOL haveendstr)
|
||||||
{
|
{
|
||||||
char *cp;
|
char *cp;
|
||||||
@@ -793,7 +803,7 @@ nextcp(char **cpp, int *ip, int argc, char **argv, BOOL haveendstr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
S_FUNC void
|
||||||
set_run_state(run state)
|
set_run_state(run state)
|
||||||
{
|
{
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
|
240
calc.h
240
calc.h
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* calc - definitions for calculator program
|
* calc - definitions for calculator program
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell
|
* Copyright (C) 1999-2007 David I. Bell
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.11 $
|
* @(#) $Revision: 30.2 $
|
||||||
* @(#) $Id: calc.h,v 29.11 2003/08/26 04:36:10 chongo Exp $
|
* @(#) $Id: calc.h,v 30.2 2007/07/10 17:44:52 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:31
|
* Under source code control: 1990/02/15 01:48:31
|
||||||
@@ -33,11 +33,11 @@
|
|||||||
|
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
# include "win32dll.h"
|
# include "decl.h"
|
||||||
# include "value.h"
|
# include "value.h"
|
||||||
# include "have_const.h"
|
# include "have_const.h"
|
||||||
#else
|
#else
|
||||||
# include <calc/win32dll.h>
|
# include <calc/decl.h>
|
||||||
# include <calc/value.h>
|
# include <calc/value.h>
|
||||||
# include <calc/have_const.h>
|
# include <calc/have_const.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -66,7 +66,6 @@
|
|||||||
#define LISTCHAR ':' /* char which separates paths in a list */
|
#define LISTCHAR ':' /* char which separates paths in a list */
|
||||||
#endif
|
#endif
|
||||||
#define MAXCMD 16384 /* maximum length of command invocation */
|
#define MAXCMD 16384 /* maximum length of command invocation */
|
||||||
#define MAXERROR 512 /* maximum length of error message string */
|
|
||||||
|
|
||||||
#define SYMBOLSIZE 256 /* maximum symbol name size */
|
#define SYMBOLSIZE 256 /* maximum symbol name size */
|
||||||
#define MAXLABELS 100 /* maximum number of user labels in function */
|
#define MAXLABELS 100 /* maximum number of user labels in function */
|
||||||
@@ -91,6 +90,7 @@
|
|||||||
#define ABORT_NOW 4 /* abort right away */
|
#define ABORT_NOW 4 /* abort right away */
|
||||||
|
|
||||||
#define ERRMAX 20 /* default errmax value */
|
#define ERRMAX 20 /* default errmax value */
|
||||||
|
#define E_OK 0 /* no error */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* File ids corresponding to standard in, out, error, and when not in use.
|
* File ids corresponding to standard in, out, error, and when not in use.
|
||||||
@@ -98,145 +98,143 @@
|
|||||||
#define FILEID_STDIN ((FILEID) 0)
|
#define FILEID_STDIN ((FILEID) 0)
|
||||||
#define FILEID_STDOUT ((FILEID) 1)
|
#define FILEID_STDOUT ((FILEID) 1)
|
||||||
#define FILEID_STDERR ((FILEID) 2)
|
#define FILEID_STDERR ((FILEID) 2)
|
||||||
#define FILEID_NONE ((FILEID) -1)
|
#define FILEID_NONE ((FILEID) -1) /* must be < 0 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* File I/O routines.
|
* File I/O routines.
|
||||||
*/
|
*/
|
||||||
extern DLL FILEID openid(char *name, char *mode);
|
E_FUNC FILEID openid(char *name, char *mode);
|
||||||
extern DLL FILEID indexid(long index);
|
E_FUNC FILEID openpathid(char *name, char *mode, char *pathlist);
|
||||||
extern DLL BOOL validid(FILEID id);
|
E_FUNC FILEID indexid(long index);
|
||||||
extern DLL BOOL errorid(FILEID id);
|
E_FUNC BOOL validid(FILEID id);
|
||||||
extern DLL BOOL eofid(FILEID id);
|
E_FUNC BOOL errorid(FILEID id);
|
||||||
extern DLL int closeid(FILEID id);
|
E_FUNC BOOL eofid(FILEID id);
|
||||||
extern DLL int getcharid(FILEID id);
|
E_FUNC int closeid(FILEID id);
|
||||||
extern DLL int idprintf(FILEID id, char *fmt, int count, VALUE **vals);
|
E_FUNC int getcharid(FILEID id);
|
||||||
extern DLL int idfputc(FILEID id, int ch);
|
E_FUNC int idprintf(FILEID id, char *fmt, int count, VALUE **vals);
|
||||||
extern DLL int idfputs(FILEID id, char *str);
|
E_FUNC int idfputc(FILEID id, int ch);
|
||||||
extern DLL int printid(FILEID id, int flags);
|
E_FUNC int idfputs(FILEID id, STRING *str);
|
||||||
extern DLL int flushid(FILEID id);
|
E_FUNC int printid(FILEID id, int flags);
|
||||||
extern DLL int readid(FILEID id, int flags, char **retptr);
|
E_FUNC int flushid(FILEID id);
|
||||||
extern DLL int getloc(FILEID id, ZVALUE *loc);
|
E_FUNC int readid(FILEID id, int flags, STRING **retptr);
|
||||||
extern DLL int setloc(FILEID id, ZVALUE zpos);
|
E_FUNC int getloc(FILEID id, ZVALUE *loc);
|
||||||
extern DLL int getsize(FILEID id, ZVALUE *size);
|
E_FUNC int setloc(FILEID id, ZVALUE zpos);
|
||||||
extern DLL int get_device(FILEID id, ZVALUE *dev);
|
E_FUNC int getsize(FILEID id, ZVALUE *size);
|
||||||
extern DLL int get_inode(FILEID id, ZVALUE *ino);
|
E_FUNC int get_device(FILEID id, ZVALUE *dev);
|
||||||
extern DLL FILEID reopenid(FILEID id, char *mode, char *name);
|
E_FUNC int get_inode(FILEID id, ZVALUE *ino);
|
||||||
extern DLL int closeall(void);
|
E_FUNC FILEID reopenid(FILEID id, char *mode, char *name);
|
||||||
|
E_FUNC int closeall(void);
|
||||||
|
|
||||||
#if !defined(_WIN32)
|
#if !defined(_WIN32)
|
||||||
extern DLL int flushall(void);
|
E_FUNC int flushall(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern DLL int idfputstr(FILEID id, char *str);
|
E_FUNC int idfputstr(FILEID id, char *str);
|
||||||
extern DLL int rewindid(FILEID id);
|
E_FUNC int rewindid(FILEID id);
|
||||||
extern DLL void rewindall(void);
|
E_FUNC void rewindall(void);
|
||||||
extern DLL ZVALUE zfilesize(FILEID id);
|
E_FUNC ZVALUE zfilesize(FILEID id);
|
||||||
extern DLL void showfiles(void);
|
E_FUNC void showfiles(void);
|
||||||
extern DLL int fscanfid(FILEID id, char *fmt, int count, VALUE **vals);
|
E_FUNC int fscanfid(FILEID id, char *fmt, int count, VALUE **vals);
|
||||||
extern DLL int scanfstr(char *str, char *fmt, int count, VALUE **vals);
|
E_FUNC int scanfstr(char *str, char *fmt, int count, VALUE **vals);
|
||||||
extern DLL int ftellid(FILEID id, ZVALUE *res);
|
E_FUNC int ftellid(FILEID id, ZVALUE *res);
|
||||||
extern DLL int fseekid(FILEID id, ZVALUE offset, int whence);
|
E_FUNC int fseekid(FILEID id, ZVALUE offset, int whence);
|
||||||
extern DLL int isattyid(FILEID id);
|
E_FUNC int isattyid(FILEID id);
|
||||||
extern DLL int fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res);
|
E_FUNC int fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res);
|
||||||
extern DLL int frsearch(FILEID id, char *str, ZVALUE first, ZVALUE last, ZVALUE *res);
|
E_FUNC int frsearch(FILEID id, char *str, ZVALUE first, ZVALUE last, ZVALUE *res);
|
||||||
extern DLL void showconstants(void);
|
E_FUNC void showconstants(void);
|
||||||
extern DLL void freeconstant(unsigned long);
|
E_FUNC void freeconstant(unsigned long);
|
||||||
extern DLL void freestringconstant(long);
|
E_FUNC void freestringconstant(long);
|
||||||
extern DLL void trimconstants(void);
|
E_FUNC void trimconstants(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Input routines.
|
* Input routines.
|
||||||
*/
|
*/
|
||||||
extern DLL int openstring(char *str, long num);
|
E_FUNC int openstring(char *str, size_t num);
|
||||||
extern DLL int openterminal(void);
|
E_FUNC int openterminal(void);
|
||||||
extern DLL int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
|
E_FUNC int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
|
||||||
extern DLL char *nextline(void);
|
E_FUNC char *nextline(void);
|
||||||
extern DLL int nextchar(void);
|
E_FUNC int nextchar(void);
|
||||||
extern DLL void reread(void);
|
E_FUNC void reread(void);
|
||||||
extern DLL void resetinput(void);
|
E_FUNC void resetinput(void);
|
||||||
extern DLL void setprompt(char *);
|
E_FUNC void setprompt(char *);
|
||||||
extern DLL BOOL inputisterminal(void);
|
E_FUNC BOOL inputisterminal(void);
|
||||||
extern DLL int inputlevel(void);
|
E_FUNC int inputlevel(void);
|
||||||
extern DLL long calclevel(void);
|
E_FUNC long calclevel(void);
|
||||||
extern DLL char *inputname(void);
|
E_FUNC char *inputname(void);
|
||||||
extern DLL long linenumber(void);
|
E_FUNC long linenumber(void);
|
||||||
extern DLL void runrcfiles(void);
|
E_FUNC void runrcfiles(void);
|
||||||
extern DLL void closeinput(void);
|
E_FUNC void closeinput(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Other routines.
|
* Other routines.
|
||||||
*/
|
*/
|
||||||
extern DLL NUMBER *constvalue(unsigned long index);
|
E_FUNC NUMBER *constvalue(unsigned long index);
|
||||||
extern DLL long addnumber(char *str);
|
E_FUNC long addnumber(char *str);
|
||||||
extern DLL long addqconstant(NUMBER *q);
|
E_FUNC long addqconstant(NUMBER *q);
|
||||||
extern DLL void initstack(void);
|
E_FUNC void initstack(void);
|
||||||
extern DLL void getcommands(BOOL toplevel);
|
E_FUNC void getcommands(BOOL toplevel);
|
||||||
extern DLL void givehelp(char *type);
|
E_FUNC void givehelp(char *type);
|
||||||
extern DLL void libcalc_call_me_first(void);
|
E_FUNC void libcalc_call_me_first(void);
|
||||||
extern DLL void libcalc_call_me_last(void);
|
E_FUNC void libcalc_call_me_last(void);
|
||||||
extern DLL BOOL calc_tty(int fd);
|
E_FUNC BOOL calc_tty(int fd);
|
||||||
extern DLL BOOL orig_tty(int fd);
|
E_FUNC BOOL orig_tty(int fd);
|
||||||
extern DLL void showerrors(void);
|
E_FUNC void showerrors(void);
|
||||||
extern DLL char *calc_strdup(CONST char *);
|
E_FUNC char *calc_strdup(CONST char *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialization
|
* Initialization
|
||||||
*/
|
*/
|
||||||
extern DLL void initialize(void);
|
E_FUNC void initialize(void);
|
||||||
extern DLL void reinitialize(void);
|
E_FUNC void reinitialize(void);
|
||||||
#if !defined (_WIN32)
|
#if !defined (_WIN32)
|
||||||
extern DLL int isatty(int tty); /* TRUE if fd is a tty */
|
E_FUNC int isatty(int tty); /* TRUE if fd is a tty */
|
||||||
#endif
|
#endif
|
||||||
extern DLL char *version(void); /* return version string */
|
E_FUNC char *version(void); /* return version string */
|
||||||
extern DLL int post_init; /* TRUE => math_error setjmp is ready */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* global flags and definitions
|
* global flags and definitions
|
||||||
*/
|
*/
|
||||||
extern DLL int abortlevel; /* current level of aborts */
|
EXTERN int abortlevel; /* current level of aborts */
|
||||||
extern DLL BOOL inputwait; /* TRUE if in a terminal input wait */
|
EXTERN BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||||
extern DLL jmp_buf jmpbuf; /* for errors */
|
|
||||||
|
|
||||||
extern DLL int p_flag; /* TRUE => pipe mode */
|
EXTERN int p_flag; /* TRUE => pipe mode */
|
||||||
extern DLL int q_flag; /* TRUE => don't execute rc files */
|
EXTERN int q_flag; /* TRUE => don't execute rc files */
|
||||||
extern DLL int u_flag; /* TRUE => unbuffer stdin and stdout */
|
EXTERN int u_flag; /* TRUE => unbuffer stdin and stdout */
|
||||||
extern DLL int d_flag; /* TRUE => disable heading, resource_debug */
|
EXTERN int d_flag; /* TRUE => disable heading, resource_debug */
|
||||||
extern DLL int c_flag; /* TRUE => continue after error if permitted */
|
EXTERN int c_flag; /* TRUE => continue after error if permitted */
|
||||||
extern DLL int i_flag; /* TRUE => try to go interactive after error */
|
EXTERN int i_flag; /* TRUE => try to go interactive after error */
|
||||||
extern DLL int s_flag; /* TRUE => keep args as strings for argv() */
|
E_FUNC int s_flag; /* TRUE => keep args as strings for argv() */
|
||||||
extern DLL int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
EXTERN long stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
||||||
extern DLL BOOL abort_now; /* TRUE => try to go interactive */
|
EXTERN BOOL abort_now; /* TRUE => try to go interactive */
|
||||||
|
|
||||||
extern DLL int argc_value; /* count of argv[] strings for argv() builtin */
|
E_FUNC int argc_value; /* count of argv[] strings for argv() builtin */
|
||||||
extern DLL char **argv_value; /* argv[] strings for argv() builtin */
|
E_FUNC char **argv_value; /* argv[] strings for argv() builtin */
|
||||||
|
|
||||||
extern DLL char *pager; /* $PAGER or default */
|
EXTERN char *pager; /* $PAGER or default */
|
||||||
extern DLL int stdin_tty; /* TRUE if stdin is a tty */
|
EXTERN int stdin_tty; /* TRUE if stdin is a tty */
|
||||||
extern DLL int havecommands; /* TRUE if have cmd args) */
|
EXTERN int havecommands; /* TRUE if have cmd args) */
|
||||||
extern DLL char *program; /* our name */
|
EXTERN char *program; /* our name */
|
||||||
extern DLL char *base_name; /* basename of our name */
|
EXTERN char *base_name; /* basename of our name */
|
||||||
extern DLL char cmdbuf[]; /* command line expression */
|
EXTERN char cmdbuf[]; /* command line expression */
|
||||||
|
|
||||||
extern DLL int abortlevel; /* current level of aborts */
|
EXTERN int abortlevel; /* current level of aborts */
|
||||||
extern DLL BOOL inputwait; /* TRUE if in a terminal input wait */
|
EXTERN BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||||
extern DLL VALUE *stack; /* execution stack */
|
EXTERN VALUE *stack; /* execution stack */
|
||||||
extern DLL int dumpnames; /* TRUE => dump names rather than indices */
|
EXTERN int dumpnames; /* TRUE => dump names rather than indices */
|
||||||
|
|
||||||
extern DLL char *calcpath; /* $CALCPATH or default */
|
EXTERN char *calcpath; /* $CALCPATH or default */
|
||||||
extern DLL char *calcrc; /* $CALCRC or default */
|
EXTERN char *calcrc; /* $CALCRC or default */
|
||||||
extern DLL char *calcbindings; /* $CALCBINDINGS or default */
|
EXTERN char *calcbindings; /* $CALCBINDINGS or default */
|
||||||
extern DLL char *home; /* $HOME or default */
|
EXTERN char *home; /* $HOME or default */
|
||||||
extern DLL char *shell; /* $SHELL or default */
|
EXTERN 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 int no_env; /* TRUE (-e) => ignore env vars on startup */
|
||||||
extern DLL int errmax; /* if >= 0, error when errcount exceeds errmax */
|
EXTERN long errmax; /* if >= 0, error when errcount exceeds errmax */
|
||||||
extern DLL int use_old_std; /* TRUE (-O) => use classic configuration */
|
EXTERN int use_old_std; /* TRUE (-O) => use classic configuration */
|
||||||
|
|
||||||
extern DLL int allow_read; /* FALSE => dont open any files for reading */
|
EXTERN int allow_read; /* FALSE => dont open any files for reading */
|
||||||
extern DLL int allow_write; /* FALSE => dont open any files for writing */
|
EXTERN int allow_write; /* FALSE => dont open any files for writing */
|
||||||
extern DLL int allow_exec; /* FALSE => may not execute any commands */
|
EXTERN int allow_exec; /* FALSE => may not execute any commands */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* calc startup and run state
|
* calc startup and run state
|
||||||
@@ -252,19 +250,19 @@ typedef enum {
|
|||||||
RUN_EXIT, /* normal exit from calc */
|
RUN_EXIT, /* normal exit from calc */
|
||||||
RUN_EXIT_WITH_ERROR /* exit with error */
|
RUN_EXIT_WITH_ERROR /* exit with error */
|
||||||
} run;
|
} run;
|
||||||
extern DLL run run_state;
|
EXTERN run run_state;
|
||||||
extern DLL char *run_state_name(run state);
|
E_FUNC char *run_state_name(run state);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* calc version information
|
* calc version information
|
||||||
*/
|
*/
|
||||||
#define CALC_TITLE "C-style arbitrary precision calculator"
|
#define CALC_TITLE "C-style arbitrary precision calculator"
|
||||||
extern int calc_major_ver;
|
EXTERN int calc_major_ver;
|
||||||
extern int calc_minor_ver;
|
EXTERN int calc_minor_ver;
|
||||||
extern int calc_major_patch;
|
EXTERN int calc_major_patch;
|
||||||
extern int calc_minor_patch;
|
EXTERN int calc_minor_patch;
|
||||||
extern char *Copyright;
|
EXTERN char *Copyright;
|
||||||
extern DLL char *version(void);
|
E_FUNC char *version(void);
|
||||||
|
|
||||||
|
|
||||||
#endif /* !__CALC_H__ */
|
#endif /* !__CALC_H__ */
|
||||||
|
168
calc.man
168
calc.man
@@ -1,5 +1,5 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" Copyright (C) 1999 Landon Curt Noll
|
.\" Copyright (C) 1999-2007 Landon Curt Noll
|
||||||
.\"
|
.\"
|
||||||
.\" Calc is open software; you can redistribute it and/or modify it under
|
.\" Calc is open software; you can redistribute it and/or modify it under
|
||||||
.\" the terms of the version 2.1 of the GNU Lesser General Public License
|
.\" the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -13,10 +13,10 @@
|
|||||||
.\" A copy of version 2.1 of the GNU Lesser General Public License is
|
.\" 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
|
.\" distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
.\" received a copy with calc; if not, write to Free Software Foundation, Inc.
|
.\" received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
.\" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
.\"
|
.\"
|
||||||
.\" @(#) $Revision: 29.12 $
|
.\" @(#) $Revision: 30.2 $
|
||||||
.\" @(#) $Id: calc.man,v 29.12 2004/02/23 05:21:24 chongo Exp $
|
.\" @(#) $Id: calc.man,v 30.2 2007/08/18 17:28:29 chongo Exp $
|
||||||
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
|
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
|
||||||
.\"
|
.\"
|
||||||
.\" Under source code control: 1991/07/23 05:48:26
|
.\" Under source code control: 1991/07/23 05:48:26
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
.\" calculator by David I. Bell
|
.\" calculator by David I. Bell
|
||||||
.\" man page by Landon Noll
|
.\" man page by Landon Noll
|
||||||
.\"
|
.\"
|
||||||
.TH calc 1 "^..^" "1999-11-30"
|
.TH calc 1 "^..^" "2007-02-06"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
calc \- arbitrary precision calculator
|
calc \- arbitrary precision calculator
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -51,10 +51,10 @@ calc \- arbitrary precision calculator
|
|||||||
.RB [ \-s ]
|
.RB [ \-s ]
|
||||||
.RB [ \-u ]
|
.RB [ \-u ]
|
||||||
.RB [ \-v ]
|
.RB [ \-v ]
|
||||||
.RB [ calc_cmd\ \&.\|.\|. ]
|
.RB [ [\-\-]\ calc_cmd\ \&.\|.\|. ]
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp
|
.sp
|
||||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP\
|
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
@@ -63,8 +63,11 @@ CALC OPTIONS
|
|||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-c
|
.B \-c
|
||||||
Continue reading command lines even after an execution
|
Continue reading command lines even after a scan/parse
|
||||||
error has caused the abandonment of a line.
|
error has caused the abandonment of a line.
|
||||||
|
Note that this option only deals with scanning and
|
||||||
|
parsing of the calc language.
|
||||||
|
It does not deal with execution or run-time errors.
|
||||||
.sp 1
|
.sp 1
|
||||||
For example:
|
For example:
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -76,7 +79,7 @@ calc read many_errors.cal
|
|||||||
.sp 1
|
.sp 1
|
||||||
will cause
|
will cause
|
||||||
.B calc
|
.B calc
|
||||||
to abort on the first error, whereas:
|
to abort on the first syntax error, whereas:
|
||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
@@ -88,7 +91,7 @@ will
|
|||||||
cause
|
cause
|
||||||
.B calc
|
.B calc
|
||||||
to try to process each line being read
|
to try to process each line being read
|
||||||
despite the errors that it encounters.
|
despite the scan/parse errors that it encounters.
|
||||||
.sp 1
|
.sp 1
|
||||||
By default, calc startup resource files are silently
|
By default, calc startup resource files are silently
|
||||||
ignored if not found.
|
ignored if not found.
|
||||||
@@ -119,7 +122,7 @@ as if \fBconfig("resource_debug", 0)\fP had been executed.
|
|||||||
For example:
|
For example:
|
||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
calc 'read qtime; qtime(2)'
|
calc "read qtime; qtime(2)"
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
will output something like:
|
will output something like:
|
||||||
@@ -135,7 +138,7 @@ whereas:
|
|||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
calc -d 'read qtime; qtime(2)'
|
calc -d "read qtime; qtime(2)"
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -183,6 +186,80 @@ help config
|
|||||||
Ignore any environment variables on startup.
|
Ignore any environment variables on startup.
|
||||||
The getenv() builtin will still return values, however.
|
The getenv() builtin will still return values, however.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-f
|
||||||
|
This flag is required when using calc in
|
||||||
|
.BR "shell script mode" .
|
||||||
|
It must be at the end of the initial
|
||||||
|
.B #!
|
||||||
|
line of the script.
|
||||||
|
.sp 1
|
||||||
|
This flag is normally only at the end of a calc shell script.
|
||||||
|
If the first line of an executable file begins
|
||||||
|
.B #!
|
||||||
|
followed by the absolute pathname of the
|
||||||
|
.B calc
|
||||||
|
program and the flag
|
||||||
|
.B \-f
|
||||||
|
as in:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
the rest of the file will be processed in
|
||||||
|
.BR "shell script mode" .
|
||||||
|
See
|
||||||
|
.B "SHELL SCRIPT MODE"
|
||||||
|
section of this man page
|
||||||
|
below for details.
|
||||||
|
.sp 1
|
||||||
|
The actual form of this flag is:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.B \-f
|
||||||
|
filename
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
On systems that treat an executable that begins with
|
||||||
|
.B #!
|
||||||
|
as a script, the path of the executable is appended by the kernel
|
||||||
|
as the final argument to the exec() system call.
|
||||||
|
This is why the
|
||||||
|
.B \-f
|
||||||
|
flag at the very end of the
|
||||||
|
.B #!
|
||||||
|
line.
|
||||||
|
.sp 1
|
||||||
|
It is possible use
|
||||||
|
.B \-f\ filename
|
||||||
|
on the command line:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
\fIcalc\fP\ [other_flags\ \&...] \fB\-f\fP filename
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
This will cause calc to process lines in
|
||||||
|
.B filename
|
||||||
|
in
|
||||||
|
.BR "shell script mode" .
|
||||||
|
.sp 1
|
||||||
|
Use of
|
||||||
|
.B \-f
|
||||||
|
implies
|
||||||
|
.BR \-s .
|
||||||
|
In addition,
|
||||||
|
.B \-d
|
||||||
|
and
|
||||||
|
.B \-p
|
||||||
|
are implied if
|
||||||
|
.B \-i
|
||||||
|
is not given.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-h
|
.B \-h
|
||||||
Print a help message. This option implies
|
Print a help message. This option implies
|
||||||
@@ -327,7 +404,7 @@ For example:
|
|||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
calc -p '2^21701-1' | fizzbin
|
calc -p "2^21701-1" | fizzbin
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -361,6 +438,21 @@ Disable buffering of stdin and stdout.
|
|||||||
Print the
|
Print the
|
||||||
.B calc
|
.B calc
|
||||||
version number and exit.
|
version number and exit.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-\-
|
||||||
|
The double dash indicates to calc that no more option follow.
|
||||||
|
Thus calc will ignore a later argument on the command line
|
||||||
|
even if it starts with a dash.
|
||||||
|
This is useful when entering negative values on the command line as in:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
calc \-p \-\- \-1 - -7
|
||||||
|
.sp 1
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
|
||||||
.PP
|
.PP
|
||||||
|
|
||||||
\&
|
\&
|
||||||
@@ -403,32 +495,50 @@ calc 23 + 47
|
|||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
should respond with display of 70, but
|
will print 70.
|
||||||
|
However, command lines will have problems:
|
||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
calc 23 * 47
|
calc 23 * 47
|
||||||
|
.sp 1
|
||||||
|
calc -23 + 47
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
may fail.
|
The first example above fails because the shell interprets the '*'
|
||||||
Such cases can usually be made to work as expected by
|
as a file glob.
|
||||||
enclosing the command between single marks as in:
|
The second example fails because '\-23' is viewed as a calc option
|
||||||
|
(which it is not) and do calc objects to that it thinks of as an unknown option.
|
||||||
|
These cases can usually be made to work as expected by
|
||||||
|
enclosing the command between quotes:
|
||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
calc '23 * 47'
|
calc '23 * 47'
|
||||||
|
.sp 1
|
||||||
|
calc "print sqrt(2), exp(1)"
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
and
|
or in parentheses and quotes to avoid leading \-'s as in:
|
||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
calc 'print sqrt(2), exp(1)'
|
calc '(-23 + 47)'
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp
|
.sp 1
|
||||||
|
One may also use a double dash to denote that calc options have ended as in:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
calc -- -23 + 47
|
||||||
|
.sp 1
|
||||||
|
calc -q -- -23 + 47
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
If '!' is to be used to indicate the factorial function, for
|
If '!' is to be used to indicate the factorial function, for
|
||||||
shells like
|
shells like
|
||||||
.BI csh (1)
|
.BI csh (1)
|
||||||
@@ -578,7 +688,7 @@ help config
|
|||||||
.br
|
.br
|
||||||
SHELL SCRIPT MODE
|
SHELL SCRIPT MODE
|
||||||
.PP
|
.PP
|
||||||
If first line of an executable file begins
|
If the first line of an executable file begins
|
||||||
.B #!
|
.B #!
|
||||||
followed by the absolute pathname of the
|
followed by the absolute pathname of the
|
||||||
.B calc
|
.B calc
|
||||||
@@ -588,7 +698,7 @@ as in:
|
|||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP\
|
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -596,10 +706,10 @@ the rest of the file will be processed in
|
|||||||
.BR "shell script mode" .
|
.BR "shell script mode" .
|
||||||
Note that
|
Note that
|
||||||
.B \-f
|
.B \-f
|
||||||
must be the first \-flag on the ``#!'' line.
|
must at the end of the initial ``#!'' line.
|
||||||
Any other optional
|
Any other optional
|
||||||
.B "other_flags"
|
.B "other_flags"
|
||||||
must come after
|
must come before
|
||||||
the
|
the
|
||||||
.BR \-f .
|
.BR \-f .
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -617,8 +727,6 @@ the later lines within the script itself.
|
|||||||
In
|
In
|
||||||
.BR "shell script mode" ,
|
.BR "shell script mode" ,
|
||||||
.B \-s
|
.B \-s
|
||||||
(lower case
|
|
||||||
.BR \-s )
|
|
||||||
is always assumed.
|
is always assumed.
|
||||||
In addition,
|
In addition,
|
||||||
.B \-d
|
.B \-d
|
||||||
@@ -634,7 +742,7 @@ the file
|
|||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
\fI#!${BINDIR}/calc\fP\ \&\fB\-q\fP \fB\-f\fP\
|
\fI#!${BINDIR}/calc\fP\ \&\fB\-q\fP \fB\-f\fP
|
||||||
#
|
#
|
||||||
# mersenne - an example of a calc \fBshell script file\fP
|
# mersenne - an example of a calc \fBshell script file\fP
|
||||||
|
|
||||||
@@ -970,9 +1078,9 @@ If you do not have these files, write to:
|
|||||||
.in +0.5i
|
.in +0.5i
|
||||||
.nf
|
.nf
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
59 Temple Place
|
51 Franklin Street
|
||||||
Suite 330
|
Fifth Floor
|
||||||
Boston, MA 02111-1307
|
Boston, MA 02110-1301
|
||||||
USA
|
USA
|
||||||
.fi
|
.fi
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
|
83
calc.spec.in
83
calc.spec.in
@@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# calc.spec.in - template specfile for calc
|
# calc.spec.in - template specfile for calc
|
||||||
#
|
#
|
||||||
# Copyright (C) 2003 Petteri Kettunen and Landon Curt Noll
|
# Copyright (C) 2003-2007 Petteri Kettunen and Landon Curt Noll
|
||||||
#
|
#
|
||||||
# Calc is open software; you can redistribute it and/or modify it under
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -16,10 +16,10 @@
|
|||||||
# A copy of version 2.1 of the GNU Lesser General Public License is
|
# 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
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.12 $
|
# @(#) $Revision: 30.4 $
|
||||||
# @(#) $Id: calc.spec.in,v 29.12 2003/04/15 03:37:59 chongo Exp $
|
# @(#) $Id: calc.spec.in,v 30.4 2007/09/02 05:38:34 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.spec.in,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.spec.in,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 2003/02/16 20:21:39
|
# Under source code control: 2003/02/16 20:21:39
|
||||||
@@ -30,15 +30,15 @@
|
|||||||
|
|
||||||
# BUGS
|
# BUGS
|
||||||
# - Uninstalling calc and calc-devel leaves empty dirs /usr/include/calc
|
# - Uninstalling calc and calc-devel leaves empty dirs /usr/include/calc
|
||||||
# and /usr/share/calc and its subdird. In case e.g. %{_includedir}/calc
|
# and /usr/share/calc and its subdirs. In case e.g. %{_includedir}/calc
|
||||||
# is defined in `%files devel' section, then rpmbuild complains that
|
# is defined in `%files devel' section, then rpmbuild complains that
|
||||||
# header files are defined twice - rpmbuild bug or bug in specfile conf???
|
# header files are defined twice - rpmbuild bug or bug in specfile conf???
|
||||||
|
|
||||||
Summary: Arbitrary precision calculator.
|
Summary: Arbitrary precision calculator.
|
||||||
Name: calc
|
Name: calc
|
||||||
Version: <<<PROJECT_VERSION>>>
|
Version: <<<PROJECT_VERSION>>>
|
||||||
Release: 0
|
Release: 1.0
|
||||||
Copyright: LGPL
|
License: LGPL
|
||||||
Group: Applications/Engineering
|
Group: Applications/Engineering
|
||||||
Source: %{name}-%{version}.tar.gz
|
Source: %{name}-%{version}.tar.gz
|
||||||
URL: http://www.isthe.com/chongo/tech/comp/calc/index.html
|
URL: http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
@@ -48,11 +48,11 @@ BuildRoot: %{_tmppath}/%{name}-root
|
|||||||
|
|
||||||
%description
|
%description
|
||||||
Calc is arbitrary precision C-like arithmetic system that is a
|
Calc is arbitrary precision C-like arithmetic system that is a
|
||||||
calculator, an algorithm prototyper and mathematical research
|
calculator, an algorithm prototype and mathematical research
|
||||||
tool. Calc comes with a rich set of builtin mathematical and
|
tool. Calc comes with a rich set of builtin mathematical and
|
||||||
programmatic functions.
|
programmatic functions.
|
||||||
|
|
||||||
For the latest calc release, see the project home page:
|
For the latest calc release, see the calc project home page:
|
||||||
|
|
||||||
http://www.isthe.com/chongo/tech/comp/calc/index.html
|
http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
|
||||||
@@ -73,12 +73,40 @@ For the latest calc release, see the project home page:
|
|||||||
%setup -q
|
%setup -q
|
||||||
|
|
||||||
%build
|
%build
|
||||||
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 all chk
|
echo '-=- calc.spec beginning make clobber -=-'
|
||||||
|
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ clobber
|
||||||
|
echo '-=- calc.spec ending make clobber -=-'
|
||||||
|
echo '-=- calc.spec beginning make calc-static-only -=-'
|
||||||
|
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ calc-static-only BLD_TYPE=calc-static-only
|
||||||
|
echo '-=- calc.spec ending make calc-static-only -=-'
|
||||||
|
echo '-=- calc.spec beginning make rpm-hide-static -=-'
|
||||||
|
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ rpm-hide-static
|
||||||
|
echo '-=- calc.spec ending make rpm-hide-static -=-'
|
||||||
|
echo '-=- calc.spec beginning make clobber (again) -=-'
|
||||||
|
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ clobber
|
||||||
|
echo '-=- calc.spec ending make clobber (again) -=-'
|
||||||
|
echo '-=- calc.spec beginning make calc-dynamic-only -=-'
|
||||||
|
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ calc-dynamic-only BLD_TYPE=calc-dynamic-only
|
||||||
|
echo '-=- calc.spec ending make calc-dynamic-only -=-'
|
||||||
|
echo '-=- calc.spec beginning make chk -=-'
|
||||||
|
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ chk
|
||||||
|
echo '-=- calc.spec ending make chk -=-'
|
||||||
|
echo '-=- calc.spec beginning make rpm-unhide-static -=-'
|
||||||
|
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ rpm-unhide-static
|
||||||
|
echo '-=- calc.spec ending make rpm-unhide-static -=-'
|
||||||
|
echo '-=- calc.spec beginning make rpm-clean-static -=-'
|
||||||
|
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ rpm-clean-static
|
||||||
|
echo '-=- calc.spec ending make rpm-clean-static -=-'
|
||||||
|
echo '-=- calc.spec beginning make rpm-chk-static -=-'
|
||||||
|
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ rpm-chk-static
|
||||||
|
echo '-=- calc.spec ending make rpm-chk-static -=-'
|
||||||
|
|
||||||
%install
|
%install
|
||||||
rm -rf %{buildroot}
|
rm -rf %{buildroot}
|
||||||
mkdir -p %{buildroot}
|
mkdir -p %{buildroot}
|
||||||
make T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 install
|
echo '-=- calc.spec beginning make install -=-'
|
||||||
|
make T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ install
|
||||||
|
echo '-=- calc.spec ending make install -=-'
|
||||||
|
|
||||||
%clean
|
%clean
|
||||||
rm -rf %{buildroot}
|
rm -rf %{buildroot}
|
||||||
@@ -86,20 +114,39 @@ rm -rf %{buildroot}
|
|||||||
%files
|
%files
|
||||||
%defattr(-, root, root)
|
%defattr(-, root, root)
|
||||||
%doc BUGS CHANGES COPYING COPYING-LGPL
|
%doc BUGS CHANGES COPYING COPYING-LGPL
|
||||||
%{_bindir}/*
|
%attr(755, root, root) %{_bindir}/calc
|
||||||
%{_mandir}/man1/*
|
%attr(755, root, root) %{_bindir}/cscript/*
|
||||||
%{_datadir}/%{name}/*/*
|
%attr(644, root, root) %{_mandir}/man1/calc.1.gz
|
||||||
%{_datadir}/%{name}/bindings
|
%attr(644, root, root) %{_datadir}/%{name}/README
|
||||||
%{_datadir}/%{name}/README
|
%attr(644, root, root) %{_datadir}/%{name}/bindings
|
||||||
%{_datadir}/%{name}/*.cal
|
%attr(644, root, root) %{_datadir}/%{name}/custhelp/*
|
||||||
|
%attr(644, root, root) %{_datadir}/%{name}/custom/*.cal
|
||||||
|
%attr(644, root, root) %{_datadir}/%{name}/help/*
|
||||||
|
%attr(644, root, root) %{_datadir}/%{name}/*.cal
|
||||||
|
%attr(644, root, root) %{_datadir}/%{name}/*.line
|
||||||
|
%attr(644, root, root) %{_libdir}/libcalc.so.%{version}
|
||||||
|
%attr(644, root, root) %{_libdir}/libcustcalc.so.%{version}
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%defattr(-, root, root)
|
%defattr(-, root, root)
|
||||||
%doc BUGS COPYING COPYING-LGPL LIBRARY
|
%doc BUGS COPYING COPYING-LGPL LIBRARY
|
||||||
|
%attr(755, root, root) %{_bindir}/calc-static
|
||||||
%attr(644, root, root) %{_includedir}/calc/*
|
%attr(644, root, root) %{_includedir}/calc/*
|
||||||
%attr(644, root, root) %{_libdir}/*.a
|
%attr(644, root, root) %{_libdir}/libcalc.a
|
||||||
|
%attr(644, root, root) %{_libdir}/libcustcalc.a
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Sep 01 2007 Landon Curt Noll http://www.isthe.com/chongo
|
||||||
|
- Release of calc-2.12.2
|
||||||
|
- Calc builds with shared libraries
|
||||||
|
* Sun Jun 25 2006 Landon Curt Noll http://www.isthe.com/chongo
|
||||||
|
- Changed Copyright to License as per new rpm v4.4 syntax
|
||||||
|
* 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
|
* Wed Feb 26 2003 Landon Curt Noll http://www.isthe.com/chongo
|
||||||
- Release of calc-2.11.7-2
|
- Release of calc-2.11.7-2
|
||||||
- Fixed attributes on include and lib calc-devel files
|
- Fixed attributes on include and lib calc-devel files
|
||||||
|
72
calcerr.tbl
72
calcerr.tbl
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# calcerr - error codes and messages
|
# calcerr - error codes and messages
|
||||||
#
|
#
|
||||||
# Copyright (C) 1999 Ernest Bowen
|
# Copyright (C) 1999-2006 Ernest Bowen
|
||||||
#
|
#
|
||||||
# Calc is open software; you can redistribute it and/or modify it under
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -15,10 +15,10 @@
|
|||||||
# A copy of version 2.1 of the GNU Lesser General Public License is
|
# 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
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.4 $
|
# @(#) $Revision: 30.1 $
|
||||||
# @(#) $Id: calcerr.tbl,v 29.4 2001/04/10 22:06:46 chongo Exp $
|
# @(#) $Id: calcerr.tbl,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1996/05/23 17:38:44
|
# 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_RSEARCH4 Bad fourth argument for rsearch
|
||||||
E_RSEARCH5 Cannot find fsize or fpos for rsearch
|
E_RSEARCH5 Cannot find fsize or fpos for rsearch
|
||||||
E_RSEARCH6 File not readable 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_REWIND2 Attempt to rewind a file that is not open
|
||||||
E_STRERROR1 Bad argument type for strerror
|
E_STRERROR1 Bad argument type for strerror
|
||||||
E_STRERROR2 Index out of range 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_COPY14 No-copy-to destination variable
|
||||||
E_COPY15 No-copy-from source named block
|
E_COPY15 No-copy-from source named block
|
||||||
E_COPY16 No-copy-to destination 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_COPYF1 File not open for copy
|
||||||
E_COPYF2 fseek or fsize failure for copy
|
E_COPYF2 fseek or fsize failure for copy
|
||||||
E_COPYF3 fwrite error for copy
|
E_COPYF3 fwrite error for copy
|
||||||
E_COPYF4 fread error for copy
|
E_COPYF4 fread error for copy
|
||||||
E_PROTECT1 Non-variable first argument for protect
|
E_PROTECT1 Non-variable first argument for protect
|
||||||
E_PROTECT2 Non-integer second argument for protect
|
E_PROTECT2 Bad second argument for protect
|
||||||
E_PROTECT3 Out-of-range second argument for protect
|
E_PROTECT3 Bad third argument for protect
|
||||||
E_MATFILL3 No-copy-to destination for matfill
|
E_MATFILL3 No-copy-to destination for matfill
|
||||||
E_MATFILL4 No-assign-from source for matfill
|
E_MATFILL4 No-assign-from source for matfill
|
||||||
E_MATTRACE1 Non-matrix argument for mattrace
|
E_MATTRACE1 Non-matrix argument for mattrace
|
||||||
@@ -393,3 +393,59 @@ E_BERN Bad argument for bern
|
|||||||
E_EULER Bad argument for euler
|
E_EULER Bad argument for euler
|
||||||
E_SLEEP Bad argument for sleep
|
E_SLEEP Bad argument for sleep
|
||||||
E_TTY calc_tty failure
|
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-lvalue argument for swap
|
||||||
|
E_QUOMOD1 Non-lvalue argument 3 or 4 for quomod
|
||||||
|
E_QUOMOD2 Non-real-number arg 1 or 2 or bad arg 5 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
|
||||||
|
E_FGETFILE1 Non-file argument for fgetfile
|
||||||
|
E_FGETFILE2 File argument for fgetfile not open for reading
|
||||||
|
E_FGETFILE3 Unable to set file position in fgetfile
|
||||||
|
E_ESTR Non-representable type for estr
|
||||||
|
@@ -16,10 +16,10 @@
|
|||||||
# A copy of version 2.1 of the GNU Lesser General Public License is
|
# 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
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.2 $
|
# @(#) $Revision: 30.1 $
|
||||||
# @(#) $Id: calcerr_c.awk,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
# @(#) $Id: calcerr_c.awk,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_c.awk,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_c.awk,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1996/05/24 03:15:35
|
# Under source code control: 1996/05/24 03:15:35
|
||||||
|
@@ -16,10 +16,10 @@
|
|||||||
# A copy of version 2.1 of the GNU Lesser General Public License is
|
# 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
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.2 $
|
# @(#) $Revision: 30.1 $
|
||||||
# @(#) $Id: calcerr_c.sed,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
# @(#) $Id: calcerr_c.sed,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_c.sed,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_c.sed,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1996/05/24 03:15:35
|
# Under source code control: 1996/05/24 03:15:35
|
||||||
|
@@ -16,10 +16,10 @@
|
|||||||
# A copy of version 2.1 of the GNU Lesser General Public License is
|
# 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
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.2 $
|
# @(#) $Revision: 30.1 $
|
||||||
# @(#) $Id: calcerr_h.awk,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
# @(#) $Id: calcerr_h.awk,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_h.awk,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_h.awk,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1996/05/23 17:38:44
|
# Under source code control: 1996/05/23 17:38:44
|
||||||
|
@@ -16,10 +16,10 @@
|
|||||||
# A copy of version 2.1 of the GNU Lesser General Public License is
|
# 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
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.2 $
|
# @(#) $Revision: 30.1 $
|
||||||
# @(#) $Id: calcerr_h.sed,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
# @(#) $Id: calcerr_h.sed,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_h.sed,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_h.sed,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1996/05/23 17:38:44
|
# Under source code control: 1996/05/23 17:38:44
|
||||||
|
10
check.awk
10
check.awk
@@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# check - check the regression output for problems
|
# 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
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -16,10 +16,10 @@
|
|||||||
# A copy of version 2.1 of the GNU Lesser General Public License is
|
# 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
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.2 $
|
# @(#) $Revision: 30.1 $
|
||||||
# @(#) $Id: check.awk,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
# @(#) $Id: check.awk,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1996/05/25 22:07:58
|
# Under source code control: 1996/05/25 22:07:58
|
||||||
@@ -64,7 +64,7 @@ NF == 0 {
|
|||||||
end_seen = 1;
|
end_seen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$1 ~ /^[0-9]+:/ {
|
$1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ || $1 ~ /^"\)\)$/ {
|
||||||
if (error > 0) {
|
if (error > 0) {
|
||||||
if (havebuf2) {
|
if (havebuf2) {
|
||||||
print buf2;
|
print buf2;
|
||||||
|
119
cmath.h
119
cmath.h
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* cmath - data structures for extended precision complex arithmetic
|
* cmath - data structures for extended precision complex arithmetic
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell
|
* Copyright (C) 1999-2007 David I. Bell
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.6 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: cmath.h,v 29.6 2002/03/12 09:38:26 chongo Exp $
|
* @(#) $Id: cmath.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/cmath.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/cmath.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1993/07/30 19:42:45
|
* Under source code control: 1993/07/30 19:42:45
|
||||||
@@ -52,83 +52,84 @@ typedef struct {
|
|||||||
/*
|
/*
|
||||||
* Input, output, and conversion routines.
|
* Input, output, and conversion routines.
|
||||||
*/
|
*/
|
||||||
extern COMPLEX *comalloc(void);
|
E_FUNC COMPLEX *comalloc(void);
|
||||||
extern COMPLEX *qqtoc(NUMBER *q1, NUMBER *q2);
|
E_FUNC COMPLEX *qqtoc(NUMBER *q1, NUMBER *q2);
|
||||||
extern void comfree(COMPLEX *c);
|
E_FUNC void comfree(COMPLEX *c);
|
||||||
extern void comprint(COMPLEX *c);
|
E_FUNC void comprint(COMPLEX *c);
|
||||||
extern void cprintfr(COMPLEX *c);
|
E_FUNC void cprintfr(COMPLEX *c);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Basic numeric routines.
|
* Basic numeric routines.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern COMPLEX *cadd(COMPLEX *c1, COMPLEX *c2);
|
E_FUNC COMPLEX *c_add(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *csub(COMPLEX *c1, COMPLEX *c2);
|
E_FUNC COMPLEX *c_sub(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *cmul(COMPLEX *c1, COMPLEX *c2);
|
E_FUNC COMPLEX *c_mul(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *cdiv(COMPLEX *c1, COMPLEX *c2);
|
E_FUNC COMPLEX *c_div(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *caddq(COMPLEX *c, NUMBER *q);
|
E_FUNC COMPLEX *c_addq(COMPLEX *c, NUMBER *q);
|
||||||
extern COMPLEX *csubq(COMPLEX *c, NUMBER *q);
|
E_FUNC COMPLEX *c_subq(COMPLEX *c, NUMBER *q);
|
||||||
extern COMPLEX *cmulq(COMPLEX *c, NUMBER *q);
|
E_FUNC COMPLEX *c_mulq(COMPLEX *c, NUMBER *q);
|
||||||
extern COMPLEX *cdivq(COMPLEX *c, NUMBER *q);
|
E_FUNC COMPLEX *c_divq(COMPLEX *c, NUMBER *q);
|
||||||
extern COMPLEX *cscale(COMPLEX *c, long i);
|
E_FUNC COMPLEX *c_scale(COMPLEX *c, long i);
|
||||||
extern COMPLEX *cshift(COMPLEX *c, long i);
|
E_FUNC COMPLEX *c_shift(COMPLEX *c, long i);
|
||||||
extern COMPLEX *csquare(COMPLEX *c);
|
E_FUNC COMPLEX *c_square(COMPLEX *c);
|
||||||
extern COMPLEX *cconj(COMPLEX *c);
|
E_FUNC COMPLEX *c_conj(COMPLEX *c);
|
||||||
extern COMPLEX *c_real(COMPLEX *c);
|
E_FUNC COMPLEX *c_real(COMPLEX *c);
|
||||||
extern COMPLEX *c_imag(COMPLEX *c);
|
E_FUNC COMPLEX *c_imag(COMPLEX *c);
|
||||||
extern COMPLEX *cneg(COMPLEX *c);
|
E_FUNC COMPLEX *c_neg(COMPLEX *c);
|
||||||
extern COMPLEX *cinv(COMPLEX *c);
|
E_FUNC COMPLEX *c_inv(COMPLEX *c);
|
||||||
extern COMPLEX *cint(COMPLEX *c);
|
E_FUNC COMPLEX *c_int(COMPLEX *c);
|
||||||
extern COMPLEX *cfrac(COMPLEX *c);
|
E_FUNC COMPLEX *c_frac(COMPLEX *c);
|
||||||
extern BOOL ccmp(COMPLEX *c1, COMPLEX *c2);
|
E_FUNC BOOL c_cmp(COMPLEX *c1, COMPLEX *c2);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* More complicated functions.
|
* More complicated functions.
|
||||||
*/
|
*/
|
||||||
extern COMPLEX *cpowi(COMPLEX *c, NUMBER *q);
|
E_FUNC COMPLEX *c_powi(COMPLEX *c, NUMBER *q);
|
||||||
extern NUMBER *cilog(COMPLEX *c, ZVALUE base);
|
E_FUNC NUMBER *c_ilog(COMPLEX *c, ZVALUE base);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Transcendental routines. These all take an epsilon argument to
|
* Transcendental routines. These all take an epsilon argument to
|
||||||
* specify how accurately these are to be calculated.
|
* specify how accurately these are to be calculated.
|
||||||
*/
|
*/
|
||||||
extern COMPLEX *cpower(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_power(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon);
|
||||||
extern COMPLEX *csqrt(COMPLEX *c, NUMBER *epsilon, long R);
|
E_FUNC COMPLEX *c_sqrt(COMPLEX *c, NUMBER *epsilon, long R);
|
||||||
extern COMPLEX *croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_root(COMPLEX *c, NUMBER *q, NUMBER *epsilon);
|
||||||
extern COMPLEX *cexp(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_exp(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cln(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_ln(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *ccos(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_log(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *csin(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_cos(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *ccosh(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_sin(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *csinh(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_cosh(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cpolar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_sinh(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *crel(COMPLEX *c1, COMPLEX *c2);
|
E_FUNC COMPLEX *c_polar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon);
|
||||||
extern COMPLEX *casin(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_rel(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *cacos(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_asin(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *catan(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_acos(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cacot(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_atan(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *casec(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_acot(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cacsc(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_asec(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *casinh(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_acsc(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cacosh(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_asinh(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *catanh(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_acosh(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cacoth(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_atanh(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *casech(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_acoth(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cacsch(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_asech(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cgd(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_acsch(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cagd(COMPLEX *c, NUMBER *epsilon);
|
E_FUNC COMPLEX *c_gd(COMPLEX *c, NUMBER *epsilon);
|
||||||
|
E_FUNC COMPLEX *c_agd(COMPLEX *c, NUMBER *epsilon);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* external functions
|
* external functions
|
||||||
*/
|
*/
|
||||||
extern COMPLEX *swap_b8_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all);
|
E_FUNC COMPLEX *swap_b8_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all);
|
||||||
extern COMPLEX *swap_b16_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all);
|
E_FUNC COMPLEX *swap_b16_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all);
|
||||||
extern COMPLEX *swap_HALF_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all);
|
E_FUNC COMPLEX *swap_HALF_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -152,7 +153,7 @@ extern COMPLEX *swap_HALF_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all);
|
|||||||
/*
|
/*
|
||||||
* Pre-defined values.
|
* Pre-defined values.
|
||||||
*/
|
*/
|
||||||
extern COMPLEX _czero_, _cone_, _conei_;
|
EXTERN COMPLEX _czero_, _cone_, _conei_;
|
||||||
|
|
||||||
|
|
||||||
#endif /* !__CMATH_H__ */
|
#endif /* !__CMATH_H__ */
|
||||||
|
364
comfunc.c
364
comfunc.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* comfunc - extended precision complex arithmetic non-primitive routines
|
* comfunc - extended precision complex arithmetic non-primitive routines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell and Ernest Bowen
|
* Copyright (C) 1999-2007 David I. Bell and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.3 $
|
* @(#) $Revision: 30.2 $
|
||||||
* @(#) $Id: comfunc.c,v 29.3 2000/07/17 15:35:49 chongo Exp $
|
* @(#) $Id: comfunc.c,v 30.2 2007/07/11 23:05:49 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/comfunc.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/comfunc.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:13
|
* Under source code control: 1990/02/15 01:48:13
|
||||||
@@ -33,6 +33,16 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "cmath.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.
|
* Compute the result of raising a complex number to an integer power.
|
||||||
*
|
*
|
||||||
@@ -41,7 +51,7 @@
|
|||||||
* q power to raise it to
|
* q power to raise it to
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cpowi(COMPLEX *c, NUMBER *q)
|
c_powi(COMPLEX *c, NUMBER *q)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp, *res; /* temporary values */
|
COMPLEX *tmp, *res; /* temporary values */
|
||||||
long power; /* power to raise to */
|
long power; /* power to raise to */
|
||||||
@@ -69,29 +79,29 @@ cpowi(COMPLEX *c, NUMBER *q)
|
|||||||
*/
|
*/
|
||||||
if (power <= 4) {
|
if (power <= 4) {
|
||||||
switch ((int) (power * sign)) {
|
switch ((int) (power * sign)) {
|
||||||
case 0:
|
case 0:
|
||||||
return clink(&_cone_);
|
return clink(&_cone_);
|
||||||
case 1:
|
case 1:
|
||||||
return clink(c);
|
return clink(c);
|
||||||
case -1:
|
case -1:
|
||||||
return cinv(c);
|
return c_inv(c);
|
||||||
case 2:
|
case 2:
|
||||||
return csquare(c);
|
return c_square(c);
|
||||||
case -2:
|
case -2:
|
||||||
tmp = csquare(c);
|
tmp = c_square(c);
|
||||||
res = cinv(tmp);
|
res = c_inv(tmp);
|
||||||
comfree(tmp);
|
comfree(tmp);
|
||||||
return res;
|
return res;
|
||||||
case 3:
|
case 3:
|
||||||
tmp = csquare(c);
|
tmp = c_square(c);
|
||||||
res = cmul(c, tmp);
|
res = c_mul(c, tmp);
|
||||||
comfree(tmp);
|
comfree(tmp);
|
||||||
return res;
|
return res;
|
||||||
case 4:
|
case 4:
|
||||||
tmp = csquare(c);
|
tmp = c_square(c);
|
||||||
res = csquare(tmp);
|
res = c_square(tmp);
|
||||||
comfree(tmp);
|
comfree(tmp);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@@ -102,26 +112,26 @@ cpowi(COMPLEX *c, NUMBER *q)
|
|||||||
while ((bit & power) == 0)
|
while ((bit & power) == 0)
|
||||||
bit >>= 1L;
|
bit >>= 1L;
|
||||||
bit >>= 1L;
|
bit >>= 1L;
|
||||||
res = csquare(c);
|
res = c_square(c);
|
||||||
if (bit & power) {
|
if (bit & power) {
|
||||||
tmp = cmul(res, c);
|
tmp = c_mul(res, c);
|
||||||
comfree(res);
|
comfree(res);
|
||||||
res = tmp;
|
res = tmp;
|
||||||
}
|
}
|
||||||
bit >>= 1L;
|
bit >>= 1L;
|
||||||
while (bit) {
|
while (bit) {
|
||||||
tmp = csquare(res);
|
tmp = c_square(res);
|
||||||
comfree(res);
|
comfree(res);
|
||||||
res = tmp;
|
res = tmp;
|
||||||
if (bit & power) {
|
if (bit & power) {
|
||||||
tmp = cmul(res, c);
|
tmp = c_mul(res, c);
|
||||||
comfree(res);
|
comfree(res);
|
||||||
res = tmp;
|
res = tmp;
|
||||||
}
|
}
|
||||||
bit >>= 1L;
|
bit >>= 1L;
|
||||||
}
|
}
|
||||||
if (sign < 0) {
|
if (sign < 0) {
|
||||||
tmp = cinv(res);
|
tmp = c_inv(res);
|
||||||
comfree(res);
|
comfree(res);
|
||||||
res = tmp;
|
res = tmp;
|
||||||
}
|
}
|
||||||
@@ -134,7 +144,7 @@ cpowi(COMPLEX *c, NUMBER *q)
|
|||||||
* Type of rounding of each component specified by R as for qsqrt().
|
* Type of rounding of each component specified by R as for qsqrt().
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
csqrt(COMPLEX *c, NUMBER *epsilon, long R)
|
c_sqrt(COMPLEX *c, NUMBER *epsilon, long R)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
NUMBER *es, *aes, *bes, *u, *v, qtemp;
|
NUMBER *es, *aes, *bes, *u, *v, qtemp;
|
||||||
@@ -363,7 +373,7 @@ csqrt(COMPLEX *c, NUMBER *epsilon, long R)
|
|||||||
* Each component of the result is within the specified error.
|
* Each component of the result is within the specified error.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
c_root(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
NUMBER *a2pb2, *root, *tmp1, *tmp2, *epsilon2;
|
NUMBER *a2pb2, *root, *tmp1, *tmp2, *epsilon2;
|
||||||
@@ -376,7 +386,7 @@ croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
|||||||
if (cisone(c) || qisone(q))
|
if (cisone(c) || qisone(q))
|
||||||
return clink(c);
|
return clink(c);
|
||||||
if (qistwo(q))
|
if (qistwo(q))
|
||||||
return csqrt(c, epsilon, 24L);
|
return c_sqrt(c, epsilon, 24L);
|
||||||
if (cisreal(c) && !qisneg(c->real)) {
|
if (cisreal(c) && !qisneg(c->real)) {
|
||||||
tmp1 = qroot(c->real, q, epsilon);
|
tmp1 = qroot(c->real, q, epsilon);
|
||||||
if (tmp1 == NULL)
|
if (tmp1 == NULL)
|
||||||
@@ -388,8 +398,8 @@ croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
|||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Calculate the root using the formula:
|
* Calculate the root using the formula:
|
||||||
* croot(a + bi, n) =
|
* c_root(a + bi, n) =
|
||||||
* cpolar(qroot(a^2 + b^2, 2 * n), qatan2(b, a) / n).
|
* c_polar(qroot(a^2 + b^2, 2 * n), qatan2(b, a) / n).
|
||||||
*/
|
*/
|
||||||
n = qilog2(epsilon);
|
n = qilog2(epsilon);
|
||||||
epsilon2 = qbitvalue(n - 4);
|
epsilon2 = qbitvalue(n - 4);
|
||||||
@@ -415,7 +425,7 @@ croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
|||||||
qfree(epsilon2);
|
qfree(epsilon2);
|
||||||
tmp2 = qqdiv(tmp1, q);
|
tmp2 = qqdiv(tmp1, q);
|
||||||
qfree(tmp1);
|
qfree(tmp1);
|
||||||
r = cpolar(root, tmp2, epsilon);
|
r = c_polar(root, tmp2, epsilon);
|
||||||
qfree(root);
|
qfree(root);
|
||||||
qfree(tmp2);
|
qfree(tmp2);
|
||||||
return r;
|
return r;
|
||||||
@@ -428,7 +438,7 @@ croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
|||||||
* exp(a + bi) = exp(a) * (cos(b) + i * sin(b)).
|
* exp(a + bi) = exp(a) * (cos(b) + i * sin(b)).
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cexp(COMPLEX *c, NUMBER *epsilon)
|
c_exp(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
NUMBER *sin, *cos, *tmp1, *tmp2, *epsilon1;
|
NUMBER *sin, *cos, *tmp1, *tmp2, *epsilon1;
|
||||||
@@ -485,13 +495,13 @@ cexp(COMPLEX *c, NUMBER *epsilon)
|
|||||||
* ln(a + bi) = ln(a^2 + b^2) / 2 + i * atan2(b, a).
|
* ln(a + bi) = ln(a^2 + b^2) / 2 + i * atan2(b, a).
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cln(COMPLEX *c, NUMBER *epsilon)
|
c_ln(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
NUMBER *a2b2, *tmp1, *tmp2, *epsilon1;
|
NUMBER *a2b2, *tmp1, *tmp2, *epsilon1;
|
||||||
|
|
||||||
if (ciszero(c)) {
|
if (ciszero(c)) {
|
||||||
math_error("Logarithm of zero");
|
math_error("logarithm of zero");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
if (cisone(c))
|
if (cisone(c))
|
||||||
@@ -519,6 +529,60 @@ cln(COMPLEX *c, NUMBER *epsilon)
|
|||||||
return r;
|
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.
|
* Calculate the complex cosine within the specified accuracy.
|
||||||
@@ -526,7 +590,7 @@ cln(COMPLEX *c, NUMBER *epsilon)
|
|||||||
* cos(x) = (exp(1i * x) + exp(-1i * x))/2;
|
* cos(x) = (exp(1i * x) + exp(-1i * x))/2;
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
ccos(COMPLEX *c, NUMBER *epsilon)
|
c_cos(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *r, *ctmp1, *ctmp2, *ctmp3;
|
COMPLEX *r, *ctmp1, *ctmp2, *ctmp3;
|
||||||
NUMBER *epsilon1;
|
NUMBER *epsilon1;
|
||||||
@@ -545,7 +609,7 @@ ccos(COMPLEX *c, NUMBER *epsilon)
|
|||||||
ctmp1->real = neg ? qneg(c->imag) : qlink(c->imag);
|
ctmp1->real = neg ? qneg(c->imag) : qlink(c->imag);
|
||||||
ctmp1->imag = neg ? qlink(c->real) : qneg(c->real);
|
ctmp1->imag = neg ? qlink(c->real) : qneg(c->real);
|
||||||
epsilon1 = qbitvalue(n - 2);
|
epsilon1 = qbitvalue(n - 2);
|
||||||
ctmp2 = cexp(ctmp1, epsilon1);
|
ctmp2 = c_exp(ctmp1, epsilon1);
|
||||||
comfree(ctmp1);
|
comfree(ctmp1);
|
||||||
qfree(epsilon1);
|
qfree(epsilon1);
|
||||||
if (ctmp2 == NULL)
|
if (ctmp2 == NULL)
|
||||||
@@ -554,11 +618,11 @@ ccos(COMPLEX *c, NUMBER *epsilon)
|
|||||||
comfree(ctmp2);
|
comfree(ctmp2);
|
||||||
return clink(&_czero_);
|
return clink(&_czero_);
|
||||||
}
|
}
|
||||||
ctmp1 = cinv(ctmp2);
|
ctmp1 = c_inv(ctmp2);
|
||||||
ctmp3 = cadd(ctmp2, ctmp1);
|
ctmp3 = c_add(ctmp2, ctmp1);
|
||||||
comfree(ctmp1);
|
comfree(ctmp1);
|
||||||
comfree(ctmp2);
|
comfree(ctmp2);
|
||||||
ctmp1 = cscale(ctmp3, -1);
|
ctmp1 = c_scale(ctmp3, -1);
|
||||||
comfree(ctmp3);
|
comfree(ctmp3);
|
||||||
r = comalloc();
|
r = comalloc();
|
||||||
qfree(r->real);
|
qfree(r->real);
|
||||||
@@ -576,7 +640,7 @@ ccos(COMPLEX *c, NUMBER *epsilon)
|
|||||||
* sin(x) = (exp(1i * x) - exp(-i1*x))/(2i).
|
* sin(x) = (exp(1i * x) - exp(-i1*x))/(2i).
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
csin(COMPLEX *c, NUMBER *epsilon)
|
c_sin(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *r, *ctmp1, *ctmp2, *ctmp3;
|
COMPLEX *r, *ctmp1, *ctmp2, *ctmp3;
|
||||||
NUMBER *qtmp, *epsilon1;
|
NUMBER *qtmp, *epsilon1;
|
||||||
@@ -597,7 +661,7 @@ csin(COMPLEX *c, NUMBER *epsilon)
|
|||||||
ctmp1->real = neg ? qneg(c->imag) : qlink(c->imag);
|
ctmp1->real = neg ? qneg(c->imag) : qlink(c->imag);
|
||||||
ctmp1->imag = neg ? qlink(c->real) : qneg(c->real);
|
ctmp1->imag = neg ? qlink(c->real) : qneg(c->real);
|
||||||
epsilon1 = qbitvalue(n - 2);
|
epsilon1 = qbitvalue(n - 2);
|
||||||
ctmp2 = cexp(ctmp1, epsilon1);
|
ctmp2 = c_exp(ctmp1, epsilon1);
|
||||||
comfree(ctmp1);
|
comfree(ctmp1);
|
||||||
qfree(epsilon1);
|
qfree(epsilon1);
|
||||||
if (ctmp2 == NULL)
|
if (ctmp2 == NULL)
|
||||||
@@ -606,11 +670,11 @@ csin(COMPLEX *c, NUMBER *epsilon)
|
|||||||
comfree(ctmp2);
|
comfree(ctmp2);
|
||||||
return clink(&_czero_);
|
return clink(&_czero_);
|
||||||
}
|
}
|
||||||
ctmp1 = cinv(ctmp2);
|
ctmp1 = c_inv(ctmp2);
|
||||||
ctmp3 = csub(ctmp2, ctmp1);
|
ctmp3 = c_sub(ctmp2, ctmp1);
|
||||||
comfree(ctmp1);
|
comfree(ctmp1);
|
||||||
comfree(ctmp2);
|
comfree(ctmp2);
|
||||||
ctmp1 = cscale(ctmp3, -1);
|
ctmp1 = c_scale(ctmp3, -1);
|
||||||
comfree(ctmp3);
|
comfree(ctmp3);
|
||||||
r = comalloc();
|
r = comalloc();
|
||||||
qtmp = neg ? qlink(ctmp1->imag) : qneg(ctmp1->imag);
|
qtmp = neg ? qlink(ctmp1->imag) : qneg(ctmp1->imag);
|
||||||
@@ -627,105 +691,105 @@ csin(COMPLEX *c, NUMBER *epsilon)
|
|||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
ccosh(COMPLEX *c, NUMBER *epsilon)
|
c_cosh(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||||
|
|
||||||
tmp1 = cexp(c, epsilon);
|
tmp1 = c_exp(c, epsilon);
|
||||||
if (tmp1 == NULL)
|
if (tmp1 == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
tmp2 = cneg(c);
|
tmp2 = c_neg(c);
|
||||||
tmp3 = cexp(tmp2, epsilon);
|
tmp3 = c_exp(tmp2, epsilon);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
if (tmp3 == NULL)
|
if (tmp3 == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
tmp2 = cadd(tmp1, tmp3);
|
tmp2 = c_add(tmp1, tmp3);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
tmp1 = cscale(tmp2, -1);
|
tmp1 = c_scale(tmp2, -1);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
return tmp1;
|
return tmp1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
csinh(COMPLEX *c, NUMBER *epsilon)
|
c_sinh(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||||
|
|
||||||
tmp1 = cexp(c, epsilon);
|
tmp1 = c_exp(c, epsilon);
|
||||||
if (tmp1 == NULL)
|
if (tmp1 == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
tmp2 = cneg(c);
|
tmp2 = c_neg(c);
|
||||||
tmp3 = cexp(tmp2, epsilon);
|
tmp3 = c_exp(tmp2, epsilon);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
if (tmp3 == NULL)
|
if (tmp3 == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
tmp2 = csub(tmp1, tmp3);
|
tmp2 = c_sub(tmp1, tmp3);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
tmp1 = cscale(tmp2, -1);
|
tmp1 = c_scale(tmp2, -1);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
return tmp1;
|
return tmp1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
casin(COMPLEX *c, NUMBER *epsilon)
|
c_asin(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2;
|
COMPLEX *tmp1, *tmp2;
|
||||||
|
|
||||||
tmp1 = cmul(&_conei_, c);
|
tmp1 = c_mul(&_conei_, c);
|
||||||
tmp2 = casinh(tmp1, epsilon);
|
tmp2 = c_asinh(tmp1, epsilon);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
tmp1 = cdiv(tmp2, &_conei_);
|
tmp1 = c_div(tmp2, &_conei_);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
return tmp1;
|
return tmp1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cacos(COMPLEX *c, NUMBER *epsilon)
|
c_acos(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2;
|
COMPLEX *tmp1, *tmp2;
|
||||||
|
|
||||||
tmp1 = csquare(c);
|
tmp1 = c_square(c);
|
||||||
tmp2 = csub(&_cone_, tmp1);
|
tmp2 = c_sub(&_cone_, tmp1);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
tmp1 = csqrt(tmp2, epsilon, 24);
|
tmp1 = c_sqrt(tmp2, epsilon, 24);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
tmp2 = cmul(&_conei_, tmp1);
|
tmp2 = c_mul(&_conei_, tmp1);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
tmp1 = cadd(c, tmp2);
|
tmp1 = c_add(c, tmp2);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
tmp2 = cln(tmp1, epsilon);
|
tmp2 = c_ln(tmp1, epsilon);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
tmp1 = cdiv(tmp2, &_conei_);
|
tmp1 = c_div(tmp2, &_conei_);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
return tmp1;
|
return tmp1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
casinh(COMPLEX *c, NUMBER *epsilon)
|
c_asinh(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||||
BOOL neg;
|
BOOL neg;
|
||||||
|
|
||||||
neg = qisneg(c->real);
|
neg = qisneg(c->real);
|
||||||
tmp1 = neg ? cneg(c) : clink(c);
|
tmp1 = neg ? c_neg(c) : clink(c);
|
||||||
tmp2 = csquare(tmp1);
|
tmp2 = c_square(tmp1);
|
||||||
tmp3 = cadd(&_cone_, tmp2);
|
tmp3 = c_add(&_cone_, tmp2);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
tmp2 = csqrt(tmp3, epsilon, 24);
|
tmp2 = c_sqrt(tmp3, epsilon, 24);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
tmp3 = cadd(tmp2, tmp1);
|
tmp3 = c_add(tmp2, tmp1);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
tmp1 = cln(tmp3, epsilon);
|
tmp1 = c_ln(tmp3, epsilon);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
if (neg) {
|
if (neg) {
|
||||||
tmp2 = cneg(tmp1);
|
tmp2 = c_neg(tmp1);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
return tmp2;
|
return tmp2;
|
||||||
}
|
}
|
||||||
@@ -734,153 +798,153 @@ casinh(COMPLEX *c, NUMBER *epsilon)
|
|||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cacosh(COMPLEX *c, NUMBER *epsilon)
|
c_acosh(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2;
|
COMPLEX *tmp1, *tmp2;
|
||||||
|
|
||||||
tmp1 = csquare(c);
|
tmp1 = c_square(c);
|
||||||
tmp2 = csub(tmp1, &_cone_);
|
tmp2 = c_sub(tmp1, &_cone_);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
tmp1 = csqrt(tmp2, epsilon, 24);
|
tmp1 = c_sqrt(tmp2, epsilon, 24);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
tmp2 = cadd(c, tmp1);
|
tmp2 = c_add(c, tmp1);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
tmp1 = cln(tmp2, epsilon);
|
tmp1 = c_ln(tmp2, epsilon);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
return tmp1;
|
return tmp1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
catan(COMPLEX *c, NUMBER *epsilon)
|
c_atan(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||||
|
|
||||||
if (qiszero(c->real) && qisunit(c->imag))
|
if (qiszero(c->real) && qisunit(c->imag))
|
||||||
return NULL;
|
return NULL;
|
||||||
tmp1 = csub(&_conei_, c);
|
tmp1 = c_sub(&_conei_, c);
|
||||||
tmp2 = cadd(&_conei_, c);
|
tmp2 = c_add(&_conei_, c);
|
||||||
tmp3 = cdiv(tmp1, tmp2);
|
tmp3 = c_div(tmp1, tmp2);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
tmp1 = cln(tmp3, epsilon);
|
tmp1 = c_ln(tmp3, epsilon);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
tmp2 = cscale(tmp1, -1);
|
tmp2 = c_scale(tmp1, -1);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
tmp1 = cdiv(tmp2, &_conei_);
|
tmp1 = c_div(tmp2, &_conei_);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
return tmp1;
|
return tmp1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cacot(COMPLEX *c, NUMBER *epsilon)
|
c_acot(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||||
|
|
||||||
if (qiszero(c->real) && qisunit(c->imag))
|
if (qiszero(c->real) && qisunit(c->imag))
|
||||||
return NULL;
|
return NULL;
|
||||||
tmp1 = cadd(c, &_conei_);
|
tmp1 = c_add(c, &_conei_);
|
||||||
tmp2 = csub(c, &_conei_);
|
tmp2 = c_sub(c, &_conei_);
|
||||||
tmp3 = cdiv(tmp1, tmp2);
|
tmp3 = c_div(tmp1, tmp2);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
tmp1 = cln(tmp3, epsilon);
|
tmp1 = c_ln(tmp3, epsilon);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
tmp2 = cscale(tmp1, -1);
|
tmp2 = c_scale(tmp1, -1);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
tmp1 = cdiv(tmp2, &_conei_);
|
tmp1 = c_div(tmp2, &_conei_);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
return tmp1;
|
return tmp1;
|
||||||
}
|
}
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
casec(COMPLEX *c, NUMBER *epsilon)
|
c_asec(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2;
|
COMPLEX *tmp1, *tmp2;
|
||||||
|
|
||||||
tmp1 = cinv(c);
|
tmp1 = c_inv(c);
|
||||||
tmp2 = cacos(tmp1, epsilon);
|
tmp2 = c_acos(tmp1, epsilon);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
return tmp2;
|
return tmp2;
|
||||||
}
|
}
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cacsc(COMPLEX *c, NUMBER *epsilon)
|
c_acsc(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2;
|
COMPLEX *tmp1, *tmp2;
|
||||||
|
|
||||||
tmp1 = cinv(c);
|
tmp1 = c_inv(c);
|
||||||
tmp2 = casin(tmp1, epsilon);
|
tmp2 = c_asin(tmp1, epsilon);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
return tmp2;
|
return tmp2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
catanh(COMPLEX *c, NUMBER *epsilon)
|
c_atanh(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||||
|
|
||||||
if (qiszero(c->imag) && qisunit(c->real))
|
if (qiszero(c->imag) && qisunit(c->real))
|
||||||
return NULL;
|
return NULL;
|
||||||
tmp1 = cadd(&_cone_, c);
|
tmp1 = c_add(&_cone_, c);
|
||||||
tmp2 = csub(&_cone_, c);
|
tmp2 = c_sub(&_cone_, c);
|
||||||
tmp3 = cdiv(tmp1, tmp2);
|
tmp3 = c_div(tmp1, tmp2);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
tmp1 = cln(tmp3, epsilon);
|
tmp1 = c_ln(tmp3, epsilon);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
tmp2 = cscale(tmp1, -1);
|
tmp2 = c_scale(tmp1, -1);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
return tmp2;
|
return tmp2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cacoth(COMPLEX *c, NUMBER *epsilon)
|
c_acoth(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||||
|
|
||||||
if (qiszero(c->imag) && qisunit(c->real))
|
if (qiszero(c->imag) && qisunit(c->real))
|
||||||
return NULL;
|
return NULL;
|
||||||
tmp1 = cadd(c, &_cone_);
|
tmp1 = c_add(c, &_cone_);
|
||||||
tmp2 = csub(c, &_cone_);
|
tmp2 = c_sub(c, &_cone_);
|
||||||
tmp3 = cdiv(tmp1, tmp2);
|
tmp3 = c_div(tmp1, tmp2);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
tmp1 = cln(tmp3, epsilon);
|
tmp1 = c_ln(tmp3, epsilon);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
tmp2 = cscale(tmp1, -1);
|
tmp2 = c_scale(tmp1, -1);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
return tmp2;
|
return tmp2;
|
||||||
}
|
}
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
casech(COMPLEX *c, NUMBER *epsilon)
|
c_asech(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2;
|
COMPLEX *tmp1, *tmp2;
|
||||||
|
|
||||||
tmp1 = cinv(c);
|
tmp1 = c_inv(c);
|
||||||
tmp2 = cacosh(tmp1, epsilon);
|
tmp2 = c_acosh(tmp1, epsilon);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
return tmp2;
|
return tmp2;
|
||||||
}
|
}
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cacsch(COMPLEX *c, NUMBER *epsilon)
|
c_acsch(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2;
|
COMPLEX *tmp1, *tmp2;
|
||||||
|
|
||||||
tmp1 = cinv(c);
|
tmp1 = c_inv(c);
|
||||||
tmp2 = casinh(tmp1, epsilon);
|
tmp2 = c_asinh(tmp1, epsilon);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
return tmp2;
|
return tmp2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cgd(COMPLEX *c, NUMBER *epsilon)
|
c_gd(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||||
NUMBER *q1, *q2;
|
NUMBER *q1, *q2;
|
||||||
@@ -947,30 +1011,30 @@ cgd(COMPLEX *c, NUMBER *epsilon)
|
|||||||
return tmp1;
|
return tmp1;
|
||||||
}
|
}
|
||||||
neg = qisneg(c->real);
|
neg = qisneg(c->real);
|
||||||
tmp1 = neg ? cneg(c) : clink(c);
|
tmp1 = neg ? c_neg(c) : clink(c);
|
||||||
tmp2 = cexp(tmp1, epsilon);
|
tmp2 = c_exp(tmp1, epsilon);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
if (tmp2 == NULL)
|
if (tmp2 == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
tmp1 = cmul(&_conei_, tmp2);
|
tmp1 = c_mul(&_conei_, tmp2);
|
||||||
tmp3 = cadd(&_conei_, tmp2);
|
tmp3 = c_add(&_conei_, tmp2);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
tmp2 = cadd(tmp1, &_cone_);
|
tmp2 = c_add(tmp1, &_cone_);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
if (ciszero(tmp2) || ciszero(tmp3)) {
|
if (ciszero(tmp2) || ciszero(tmp3)) {
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
tmp1 = cdiv(tmp2, tmp3);
|
tmp1 = c_div(tmp2, tmp3);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
tmp2 = cln(tmp1, epsilon);
|
tmp2 = c_ln(tmp1, epsilon);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
tmp1 = cdiv(tmp2, &_conei_);
|
tmp1 = c_div(tmp2, &_conei_);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
if (neg) {
|
if (neg) {
|
||||||
tmp2 = cneg(tmp1);
|
tmp2 = c_neg(tmp1);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
return tmp2;
|
return tmp2;
|
||||||
}
|
}
|
||||||
@@ -979,16 +1043,16 @@ cgd(COMPLEX *c, NUMBER *epsilon)
|
|||||||
|
|
||||||
|
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cagd(COMPLEX *c, NUMBER *epsilon)
|
c_agd(COMPLEX *c, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *tmp1, *tmp2;
|
COMPLEX *tmp1, *tmp2;
|
||||||
|
|
||||||
tmp1 = cmul(&_conei_, c);
|
tmp1 = c_mul(&_conei_, c);
|
||||||
tmp2 = cgd(tmp1, epsilon);
|
tmp2 = c_gd(tmp1, epsilon);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
if (tmp2 == NULL)
|
if (tmp2 == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
tmp1 = cdiv(tmp2, &_conei_);
|
tmp1 = c_div(tmp2, &_conei_);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
return tmp1;
|
return tmp1;
|
||||||
}
|
}
|
||||||
@@ -1000,7 +1064,7 @@ cagd(COMPLEX *c, NUMBER *epsilon)
|
|||||||
* q1 * cos(q2) + q1 * sin(q2) * i.
|
* q1 * cos(q2) + q1 * sin(q2) * i.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cpolar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon)
|
c_polar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
NUMBER *tmp, *cos, *sin;
|
NUMBER *tmp, *cos, *sin;
|
||||||
@@ -1042,7 +1106,7 @@ cpolar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon)
|
|||||||
* specified error.
|
* specified error.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cpower(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon)
|
c_power(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon)
|
||||||
{
|
{
|
||||||
COMPLEX *ctmp1, *ctmp2;
|
COMPLEX *ctmp1, *ctmp2;
|
||||||
long k1, k2, k, m1, m2, m, n;
|
long k1, k2, k, m1, m2, m, n;
|
||||||
@@ -1053,8 +1117,8 @@ cpower(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon)
|
|||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
if (ciszero(c1)) {
|
if (ciszero(c1)) {
|
||||||
if (qisneg(c2->real) || qiszero(c2->real)) {
|
if (cisreal(c2) && qisneg(c2->real)) {
|
||||||
math_error ("Non-positive exponent of zero");
|
math_error ("Non-positive real exponent of zero");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
return clink(&_czero_);
|
return clink(&_czero_);
|
||||||
@@ -1099,11 +1163,11 @@ cpower(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon)
|
|||||||
if (k < n)
|
if (k < n)
|
||||||
return clink(&_czero_);
|
return clink(&_czero_);
|
||||||
epsilon1 = qbitvalue(n - k - m - 2);
|
epsilon1 = qbitvalue(n - k - m - 2);
|
||||||
ctmp1 = cln(c1, epsilon1);
|
ctmp1 = c_ln(c1, epsilon1);
|
||||||
qfree(epsilon1);
|
qfree(epsilon1);
|
||||||
ctmp2 = cmul(ctmp1, c2);
|
ctmp2 = c_mul(ctmp1, c2);
|
||||||
comfree(ctmp1);
|
comfree(ctmp1);
|
||||||
ctmp1 = cexp(ctmp2, epsilon);
|
ctmp1 = c_exp(ctmp2, epsilon);
|
||||||
comfree(ctmp2);
|
comfree(ctmp2);
|
||||||
return ctmp1;
|
return ctmp1;
|
||||||
}
|
}
|
||||||
@@ -1165,7 +1229,7 @@ cprintfr(COMPLEX *c)
|
|||||||
|
|
||||||
|
|
||||||
NUMBER *
|
NUMBER *
|
||||||
cilog(COMPLEX *c, ZVALUE base)
|
c_ilog(COMPLEX *c, ZVALUE base)
|
||||||
{
|
{
|
||||||
NUMBER *qr, *qi;
|
NUMBER *qr, *qi;
|
||||||
|
|
||||||
|
54
commath.c
54
commath.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* commath - extended precision complex arithmetic primitive routines
|
* commath - extended precision complex arithmetic primitive routines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell
|
* Copyright (C) 1999-2007 David I. Bell
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -15,10 +15,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.3 $
|
* @(#) $Revision: 30.1 $
|
||||||
* @(#) $Id: commath.c,v 29.3 2002/03/12 09:38:26 chongo Exp $
|
* @(#) $Id: commath.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/commath.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/commath.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:10
|
* Under source code control: 1990/02/15 01:48:10
|
||||||
@@ -35,14 +35,14 @@ COMPLEX _czero_ = { &_qzero_, &_qzero_, 1 };
|
|||||||
COMPLEX _cone_ = { &_qone_, &_qzero_, 1 };
|
COMPLEX _cone_ = { &_qone_, &_qzero_, 1 };
|
||||||
COMPLEX _conei_ = { &_qzero_, &_qone_, 1 };
|
COMPLEX _conei_ = { &_qzero_, &_qone_, 1 };
|
||||||
|
|
||||||
static COMPLEX _cnegone_ = { &_qnegone_, &_qzero_, 1 };
|
STATIC COMPLEX _cnegone_ = { &_qnegone_, &_qzero_, 1 };
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add two complex numbers.
|
* Add two complex numbers.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cadd(COMPLEX *c1, COMPLEX *c2)
|
c_add(COMPLEX *c1, COMPLEX *c2)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ cadd(COMPLEX *c1, COMPLEX *c2)
|
|||||||
* Subtract two complex numbers.
|
* Subtract two complex numbers.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
csub(COMPLEX *c1, COMPLEX *c2)
|
c_sub(COMPLEX *c1, COMPLEX *c2)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ csub(COMPLEX *c1, COMPLEX *c2)
|
|||||||
* Then (a+bi) * (c+di) = (q2 - q3) + (q1 - q2 - q3)i.
|
* Then (a+bi) * (c+di) = (q2 - q3) + (q1 - q2 - q3)i.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cmul(COMPLEX *c1, COMPLEX *c2)
|
c_mul(COMPLEX *c1, COMPLEX *c2)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
NUMBER *q1, *q2, *q3, *q4;
|
NUMBER *q1, *q2, *q3, *q4;
|
||||||
@@ -110,9 +110,9 @@ cmul(COMPLEX *c1, COMPLEX *c2)
|
|||||||
if (cisone(c2))
|
if (cisone(c2))
|
||||||
return clink(c1);
|
return clink(c1);
|
||||||
if (cisreal(c2))
|
if (cisreal(c2))
|
||||||
return cmulq(c1, c2->real);
|
return c_mulq(c1, c2->real);
|
||||||
if (cisreal(c1))
|
if (cisreal(c1))
|
||||||
return cmulq(c2, c1->real);
|
return c_mulq(c2, c1->real);
|
||||||
/*
|
/*
|
||||||
* Need to do the full calculation.
|
* Need to do the full calculation.
|
||||||
*/
|
*/
|
||||||
@@ -141,7 +141,7 @@ cmul(COMPLEX *c1, COMPLEX *c2)
|
|||||||
* Square a complex number.
|
* Square a complex number.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
csquare(COMPLEX *c)
|
c_square(COMPLEX *c)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
NUMBER *q1, *q2;
|
NUMBER *q1, *q2;
|
||||||
@@ -183,7 +183,7 @@ csquare(COMPLEX *c)
|
|||||||
* Divide two complex numbers.
|
* Divide two complex numbers.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cdiv(COMPLEX *c1, COMPLEX *c2)
|
c_div(COMPLEX *c1, COMPLEX *c2)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
NUMBER *q1, *q2, *q3, *den;
|
NUMBER *q1, *q2, *q3, *den;
|
||||||
@@ -254,7 +254,7 @@ cdiv(COMPLEX *c1, COMPLEX *c2)
|
|||||||
* Invert a complex number.
|
* Invert a complex number.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cinv(COMPLEX *c)
|
c_inv(COMPLEX *c)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
NUMBER *q1, *q2, *den;
|
NUMBER *q1, *q2, *den;
|
||||||
@@ -296,7 +296,7 @@ cinv(COMPLEX *c)
|
|||||||
* Negate a complex number.
|
* Negate a complex number.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cneg(COMPLEX *c)
|
c_neg(COMPLEX *c)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -320,7 +320,7 @@ cneg(COMPLEX *c)
|
|||||||
* This means take the integer part of both components.
|
* This means take the integer part of both components.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cint(COMPLEX *c)
|
c_int(COMPLEX *c)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -340,7 +340,7 @@ cint(COMPLEX *c)
|
|||||||
* This means take the fractional part of both components.
|
* This means take the fractional part of both components.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cfrac(COMPLEX *c)
|
c_frac(COMPLEX *c)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -360,7 +360,7 @@ cfrac(COMPLEX *c)
|
|||||||
* This negates the complex part.
|
* This negates the complex part.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cconj(COMPLEX *c)
|
c_conj(COMPLEX *c)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -417,7 +417,7 @@ c_imag(COMPLEX *c)
|
|||||||
* Add a real number to a complex number.
|
* Add a real number to a complex number.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
caddq(COMPLEX *c, NUMBER *q)
|
c_addq(COMPLEX *c, NUMBER *q)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -436,7 +436,7 @@ caddq(COMPLEX *c, NUMBER *q)
|
|||||||
* Subtract a real number from a complex number.
|
* Subtract a real number from a complex number.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
csubq(COMPLEX *c, NUMBER *q)
|
c_subq(COMPLEX *c, NUMBER *q)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -456,7 +456,7 @@ csubq(COMPLEX *c, NUMBER *q)
|
|||||||
* number of bits. Negative values shift to the right.
|
* number of bits. Negative values shift to the right.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cshift(COMPLEX *c, long n)
|
c_shift(COMPLEX *c, long n)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -475,7 +475,7 @@ cshift(COMPLEX *c, long n)
|
|||||||
* Scale a complex number by a power of two.
|
* Scale a complex number by a power of two.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cscale(COMPLEX *c, long n)
|
c_scale(COMPLEX *c, long n)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -494,7 +494,7 @@ cscale(COMPLEX *c, long n)
|
|||||||
* Multiply a complex number by a real number.
|
* Multiply a complex number by a real number.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cmulq(COMPLEX *c, NUMBER *q)
|
c_mulq(COMPLEX *c, NUMBER *q)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -503,7 +503,7 @@ cmulq(COMPLEX *c, NUMBER *q)
|
|||||||
if (qisone(q))
|
if (qisone(q))
|
||||||
return clink(c);
|
return clink(c);
|
||||||
if (qisnegone(q))
|
if (qisnegone(q))
|
||||||
return cneg(c);
|
return c_neg(c);
|
||||||
r = comalloc();
|
r = comalloc();
|
||||||
qfree(r->real);
|
qfree(r->real);
|
||||||
qfree(r->imag);
|
qfree(r->imag);
|
||||||
@@ -517,7 +517,7 @@ cmulq(COMPLEX *c, NUMBER *q)
|
|||||||
* Divide a complex number by a real number.
|
* Divide a complex number by a real number.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cdivq(COMPLEX *c, NUMBER *q)
|
c_divq(COMPLEX *c, NUMBER *q)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -528,7 +528,7 @@ cdivq(COMPLEX *c, NUMBER *q)
|
|||||||
if (qisone(q))
|
if (qisone(q))
|
||||||
return clink(c);
|
return clink(c);
|
||||||
if (qisnegone(q))
|
if (qisnegone(q))
|
||||||
return cneg(c);
|
return c_neg(c);
|
||||||
r = comalloc();
|
r = comalloc();
|
||||||
qfree(r->real);
|
qfree(r->real);
|
||||||
qfree(r->imag);
|
qfree(r->imag);
|
||||||
@@ -564,7 +564,7 @@ qqtoc(NUMBER *q1, NUMBER *q2)
|
|||||||
* and TRUE if they differ.
|
* and TRUE if they differ.
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
ccmp(COMPLEX *c1, COMPLEX *c2)
|
c_cmp(COMPLEX *c1, COMPLEX *c2)
|
||||||
{
|
{
|
||||||
BOOL i;
|
BOOL i;
|
||||||
|
|
||||||
@@ -581,7 +581,7 @@ ccmp(COMPLEX *c1, COMPLEX *c2)
|
|||||||
* imaginary parts of the two numbers.
|
* imaginary parts of the two numbers.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
crel(COMPLEX *c1, COMPLEX *c2)
|
c_rel(COMPLEX *c1, COMPLEX *c2)
|
||||||
{
|
{
|
||||||
COMPLEX *c;
|
COMPLEX *c;
|
||||||
|
|
||||||
|
261
config.c
261
config.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* config - configuration routines
|
* config - configuration routines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999-2002 David I. Bell and Landon Curt Noll
|
* Copyright (C) 1999-2007 David I. Bell and Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
* 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
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.12 $
|
* @(#) $Revision: 30.2 $
|
||||||
* @(#) $Id: config.c,v 29.12 2004/02/23 05:59:50 chongo Exp $
|
* @(#) $Id: config.c,v 30.2 2007/07/05 13:30:38 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/07/20 00:21:56
|
* Under source code control: 1991/07/20 00:21:56
|
||||||
@@ -31,19 +31,47 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "have_times.h"
|
||||||
|
#if defined(HAVE_TIME_H)
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_TIMES_H)
|
||||||
|
#include <times.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_SYS_TIME_H)
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_SYS_TIMES_H)
|
||||||
|
#include <sys/times.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
#include "token.h"
|
#include "token.h"
|
||||||
#include "zrand.h"
|
#include "zrand.h"
|
||||||
#include "block.h"
|
#include "block.h"
|
||||||
#include "nametype.h"
|
#include "nametype.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "string.h"
|
#include "str.h"
|
||||||
|
#include "custom.h"
|
||||||
|
|
||||||
#include "have_strdup.h"
|
#include "have_strdup.h"
|
||||||
#if !defined(HAVE_STRDUP)
|
#if !defined(HAVE_STRDUP)
|
||||||
# define strdup(x) calc_strdup((CONST char *)(x))
|
# define strdup(x) calc_strdup((CONST char *)(x))
|
||||||
#endif /* HAVE_STRDUP */
|
#endif /* HAVE_STRDUP */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* deal with systems that lack a defined CLK_TCK
|
||||||
|
*/
|
||||||
|
#if defined(CLK_TCK)
|
||||||
|
# define CALC_HZ ((long)(CLK_TCK))
|
||||||
|
#else
|
||||||
|
# define CALC_HZ (0L) /* no defined clock tick rate */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Table of configuration types that can be set or read.
|
* Table of configuration types that can be set or read.
|
||||||
@@ -93,7 +121,13 @@ NAMETYPE configs[] = {
|
|||||||
{"basename", CONFIG_BASENAME},
|
{"basename", CONFIG_BASENAME},
|
||||||
{"windows", CONFIG_WINDOWS},
|
{"windows", CONFIG_WINDOWS},
|
||||||
{"cygwin", CONFIG_CYGWIN},
|
{"cygwin", CONFIG_CYGWIN},
|
||||||
|
{"compile_custom", CONFIG_COMPILE_CUSTOM},
|
||||||
|
{"allow_custom", CONFIG_ALLOW_CUSTOM},
|
||||||
{"version", CONFIG_VERSION},
|
{"version", CONFIG_VERSION},
|
||||||
|
{"baseb", CONFIG_BASEB},
|
||||||
|
{"redecl_warn", CONFIG_REDECL_WARN},
|
||||||
|
{"dupvar_warn", CONFIG_DUPVAR_WARN},
|
||||||
|
{"hz", CONFIG_HZ},
|
||||||
{NULL, 0}
|
{NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -150,7 +184,16 @@ CONFIG oldstd = { /* backward compatible standard configuration */
|
|||||||
#else
|
#else
|
||||||
FALSE, /* not compiled with cygwin */
|
FALSE, /* not compiled with cygwin */
|
||||||
#endif
|
#endif
|
||||||
NULL /* version */
|
#if defined(CUSTOM)
|
||||||
|
TRUE, /* compiled with -DCUSTOM */
|
||||||
|
#else
|
||||||
|
FALSE, /* compiled without -DCUSTOM */
|
||||||
|
#endif
|
||||||
|
&allow_custom, /* *TRUE=> custom functions are enabled */
|
||||||
|
NULL, /* version */
|
||||||
|
BASEB, /* base for calculations */
|
||||||
|
TRUE, /* warn when redeclaring */
|
||||||
|
TRUE, /* warn when variable names collide */
|
||||||
};
|
};
|
||||||
CONFIG newstd = { /* new non-backward compatible configuration */
|
CONFIG newstd = { /* new non-backward compatible configuration */
|
||||||
MODE_INITIAL, /* current output mode */
|
MODE_INITIAL, /* current output mode */
|
||||||
@@ -201,7 +244,16 @@ CONFIG newstd = { /* new non-backward compatible configuration */
|
|||||||
#else
|
#else
|
||||||
FALSE, /* not compiled with cygwin */
|
FALSE, /* not compiled with cygwin */
|
||||||
#endif
|
#endif
|
||||||
NULL /* version */
|
#if defined(CUSTOM)
|
||||||
|
TRUE, /* compiled with -DCUSTOM */
|
||||||
|
#else
|
||||||
|
FALSE, /* compiled without -DCUSTOM */
|
||||||
|
#endif
|
||||||
|
&allow_custom, /* *TRUE=> custom functions are enabled */
|
||||||
|
NULL, /* version */
|
||||||
|
BASEB, /* base for calculations */
|
||||||
|
TRUE, /* warn when redeclaring */
|
||||||
|
TRUE, /* warn when variable names collide */
|
||||||
};
|
};
|
||||||
CONFIG *conf = NULL; /* loaded in at startup - current configuration */
|
CONFIG *conf = NULL; /* loaded in at startup - current configuration */
|
||||||
|
|
||||||
@@ -209,7 +261,7 @@ CONFIG *conf = NULL; /* loaded in at startup - current configuration */
|
|||||||
/*
|
/*
|
||||||
* Possible output modes.
|
* Possible output modes.
|
||||||
*/
|
*/
|
||||||
static NAMETYPE modes[] = {
|
STATIC NAMETYPE modes[] = {
|
||||||
{"fraction", MODE_FRAC},
|
{"fraction", MODE_FRAC},
|
||||||
{"frac", MODE_FRAC},
|
{"frac", MODE_FRAC},
|
||||||
{"integer", MODE_INT},
|
{"integer", MODE_INT},
|
||||||
@@ -234,7 +286,7 @@ static NAMETYPE modes[] = {
|
|||||||
/*
|
/*
|
||||||
* Possible block base output modes
|
* Possible block base output modes
|
||||||
*/
|
*/
|
||||||
static NAMETYPE blk_base[] = {
|
STATIC NAMETYPE blk_base[] = {
|
||||||
{"hexadecimal", BLK_BASE_HEX},
|
{"hexadecimal", BLK_BASE_HEX},
|
||||||
{"hex", BLK_BASE_HEX},
|
{"hex", BLK_BASE_HEX},
|
||||||
{"default", BLK_BASE_HEX},
|
{"default", BLK_BASE_HEX},
|
||||||
@@ -253,7 +305,7 @@ static NAMETYPE blk_base[] = {
|
|||||||
/*
|
/*
|
||||||
* Possible block output formats
|
* Possible block output formats
|
||||||
*/
|
*/
|
||||||
static NAMETYPE blk_fmt[] = {
|
STATIC NAMETYPE blk_fmt[] = {
|
||||||
{"lines", BLK_FMT_LINE},
|
{"lines", BLK_FMT_LINE},
|
||||||
{"line", BLK_FMT_LINE},
|
{"line", BLK_FMT_LINE},
|
||||||
{"strings", BLK_FMT_STRING},
|
{"strings", BLK_FMT_STRING},
|
||||||
@@ -273,7 +325,7 @@ static NAMETYPE blk_fmt[] = {
|
|||||||
/*
|
/*
|
||||||
* Possible ctrl_d styles
|
* Possible ctrl_d styles
|
||||||
*/
|
*/
|
||||||
static NAMETYPE ctrl_d[] = {
|
STATIC NAMETYPE ctrl_d[] = {
|
||||||
{"virgin_eof", CTRL_D_VIRGIN_EOF},
|
{"virgin_eof", CTRL_D_VIRGIN_EOF},
|
||||||
{"virgineof", CTRL_D_VIRGIN_EOF},
|
{"virgineof", CTRL_D_VIRGIN_EOF},
|
||||||
{"virgin", CTRL_D_VIRGIN_EOF},
|
{"virgin", CTRL_D_VIRGIN_EOF},
|
||||||
@@ -293,7 +345,7 @@ static NAMETYPE ctrl_d[] = {
|
|||||||
*/
|
*/
|
||||||
#define TRUE_STRING "true"
|
#define TRUE_STRING "true"
|
||||||
#define FALSE_STRING "false"
|
#define FALSE_STRING "false"
|
||||||
static NAMETYPE truth[] = {
|
STATIC NAMETYPE truth[] = {
|
||||||
{TRUE_STRING, TRUE},
|
{TRUE_STRING, TRUE},
|
||||||
{"t", TRUE},
|
{"t", TRUE},
|
||||||
{"on", TRUE},
|
{"on", TRUE},
|
||||||
@@ -315,9 +367,9 @@ static NAMETYPE truth[] = {
|
|||||||
/*
|
/*
|
||||||
* declare static functions
|
* declare static functions
|
||||||
*/
|
*/
|
||||||
static long lookup_long(NAMETYPE *set, char *name);
|
S_FUNC long lookup_long(NAMETYPE *set, char *name);
|
||||||
static char *lookup_name(NAMETYPE *set, long val);
|
S_FUNC char *lookup_name(NAMETYPE *set, long val);
|
||||||
static int getlen(VALUE *vp, LEN *lp);
|
S_FUNC int getlen(VALUE *vp, LEN *lp);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -351,7 +403,7 @@ configtype(char *name)
|
|||||||
* returns:
|
* returns:
|
||||||
* numeric value of the name or -1 if not found
|
* numeric value of the name or -1 if not found
|
||||||
*/
|
*/
|
||||||
static long
|
S_FUNC long
|
||||||
lookup_long(NAMETYPE *set, char *name)
|
lookup_long(NAMETYPE *set, char *name)
|
||||||
{
|
{
|
||||||
NAMETYPE *cp; /* current config pointer */
|
NAMETYPE *cp; /* current config pointer */
|
||||||
@@ -374,7 +426,7 @@ lookup_long(NAMETYPE *set, char *name)
|
|||||||
* returns:
|
* returns:
|
||||||
* name of the value found of NULL
|
* name of the value found of NULL
|
||||||
*/
|
*/
|
||||||
static char *
|
S_FUNC char *
|
||||||
lookup_name(NAMETYPE *set, long val)
|
lookup_name(NAMETYPE *set, long val)
|
||||||
{
|
{
|
||||||
NAMETYPE *cp; /* current config pointer */
|
NAMETYPE *cp; /* current config pointer */
|
||||||
@@ -390,10 +442,11 @@ lookup_name(NAMETYPE *set, long val)
|
|||||||
/*
|
/*
|
||||||
* Check whether VALUE at vp is a LEN (32-bit signed integer) and if so,
|
* Check whether VALUE at vp is a LEN (32-bit signed integer) and if so,
|
||||||
* copy that integer to lp.
|
* copy that integer to lp.
|
||||||
* Return: 1, 2, 0, or -1 XXX
|
*
|
||||||
|
* Return: 1 ==> not an integer, 2 ==> int > 2^31, 0 ==> OK, -1 ==> error
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int
|
S_FUNC int
|
||||||
getlen(VALUE *vp, LEN *lp)
|
getlen(VALUE *vp, LEN *lp)
|
||||||
{
|
{
|
||||||
if (vp->v_type != V_NUM || !qisint(vp->v_num))
|
if (vp->v_type != V_NUM || !qisint(vp->v_num))
|
||||||
@@ -417,7 +470,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
NUMBER *q;
|
NUMBER *q;
|
||||||
CONFIG *newconf; /* new configuration to set */
|
CONFIG *newconf; /* new configuration to set */
|
||||||
long temp;
|
long temp;
|
||||||
LEN len;
|
LEN len = 0;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@@ -476,7 +529,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
}
|
}
|
||||||
temp = lookup_long(modes, vp->v_str->s_str);
|
temp = lookup_long(modes, vp->v_str->s_str);
|
||||||
if (temp < 0) {
|
if (temp < 0) {
|
||||||
math_error("Unknown mode \"%s\"", vp->v_str);
|
math_error("Unknown mode \"%s\"", vp->v_str->s_str);
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
math_setmode((int) temp);
|
math_setmode((int) temp);
|
||||||
@@ -489,7 +542,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
}
|
}
|
||||||
temp = lookup_long(modes, vp->v_str->s_str);
|
temp = lookup_long(modes, vp->v_str->s_str);
|
||||||
if (temp < 0) {
|
if (temp < 0) {
|
||||||
math_error("Unknown mode \"%s\"", vp->v_str);
|
math_error("Unknown mode \"%s\"", vp->v_str->s_str);
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
math_setmode2((int) temp);
|
math_setmode2((int) temp);
|
||||||
@@ -512,7 +565,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_MUL2:
|
case CONFIG_MUL2:
|
||||||
if (getlen(vp, &len)) {
|
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||||
math_error("Bad value for mul2");
|
math_error("Bad value for mul2");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
@@ -522,7 +575,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_SQ2:
|
case CONFIG_SQ2:
|
||||||
if (getlen(vp, &len)) {
|
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||||
math_error("Bad value for sq2");
|
math_error("Bad value for sq2");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
@@ -532,7 +585,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_POW2:
|
case CONFIG_POW2:
|
||||||
if (getlen(vp, &len)) {
|
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||||
math_error("Bad value for pow2");
|
math_error("Bad value for pow2");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
@@ -542,7 +595,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_REDC2:
|
case CONFIG_REDC2:
|
||||||
if (getlen(vp, &len)) {
|
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||||
math_error("Bad value for redc2");
|
math_error("Bad value for redc2");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
@@ -707,7 +760,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
math_error("Cannot duplicate new prompt");
|
math_error("Cannot duplicate new prompt");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
strcpy(p, vp->v_str->s_str);
|
strncpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||||
free(conf->prompt1);
|
free(conf->prompt1);
|
||||||
conf->prompt1 = p;
|
conf->prompt1 = p;
|
||||||
break;
|
break;
|
||||||
@@ -722,7 +775,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
math_error("Cannot duplicate new more prompt");
|
math_error("Cannot duplicate new more prompt");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
strcpy(p, vp->v_str->s_str);
|
strncpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||||
free(conf->prompt2);
|
free(conf->prompt2);
|
||||||
conf->prompt2 = p;
|
conf->prompt2 = p;
|
||||||
break;
|
break;
|
||||||
@@ -872,10 +925,54 @@ setconfig(int type, VALUE *vp)
|
|||||||
math_error("The cygwin config parameter is read-only");
|
math_error("The cygwin config parameter is read-only");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_COMPILE_CUSTOM:
|
||||||
|
math_error("The custom config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_ALLOW_CUSTOM:
|
||||||
|
math_error("The allow_custom config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
case CONFIG_VERSION:
|
case CONFIG_VERSION:
|
||||||
math_error("The version config parameter is read-only");
|
math_error("The version config parameter is read-only");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_BASEB:
|
||||||
|
math_error("The baseb config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_REDECL_WARN:
|
||||||
|
if (vp->v_type == V_NUM) {
|
||||||
|
q = vp->v_num;
|
||||||
|
conf->redecl_warn = !qiszero(q);
|
||||||
|
} else if (vp->v_type == V_STR) {
|
||||||
|
temp = lookup_long(truth, vp->v_str->s_str);
|
||||||
|
if (temp < 0) {
|
||||||
|
math_error("Illegal truth value for redecl_warn");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
conf->redecl_warn = (int)temp;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_DUPVAR_WARN:
|
||||||
|
if (vp->v_type == V_NUM) {
|
||||||
|
q = vp->v_num;
|
||||||
|
conf->dupvar_warn = !qiszero(q);
|
||||||
|
} else if (vp->v_type == V_STR) {
|
||||||
|
temp = lookup_long(truth, vp->v_str->s_str);
|
||||||
|
if (temp < 0) {
|
||||||
|
math_error("Illegal truth value for dupvar_warn");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
conf->dupvar_warn = (int)temp;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_HZ:
|
||||||
|
math_error("The clock tick rate config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
default:
|
default:
|
||||||
math_error("Setting illegal config parameter");
|
math_error("Setting illegal config parameter");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
@@ -936,6 +1033,7 @@ config_copy(CONFIG *src)
|
|||||||
} else {
|
} else {
|
||||||
dest->base_name = strdup(src->base_name);
|
dest->base_name = strdup(src->base_name);
|
||||||
}
|
}
|
||||||
|
/* NOTE: allow_custom points to a global variable, so do not clone it */
|
||||||
if (src->version == NULL) {
|
if (src->version == NULL) {
|
||||||
dest->version = strdup(version());
|
dest->version = strdup(version());
|
||||||
} else {
|
} else {
|
||||||
@@ -983,6 +1081,7 @@ config_free(CONFIG *cfg)
|
|||||||
if (cfg->base_name != NULL) {
|
if (cfg->base_name != NULL) {
|
||||||
free(cfg->base_name);
|
free(cfg->base_name);
|
||||||
}
|
}
|
||||||
|
/* NOTE: allow_custom points to a global variable, so do not free it */
|
||||||
if (cfg->version != NULL) {
|
if (cfg->version != NULL) {
|
||||||
free(cfg->version);
|
free(cfg->version);
|
||||||
}
|
}
|
||||||
@@ -1085,20 +1184,12 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_TILDE:
|
case CONFIG_TILDE:
|
||||||
if (cfg->tilde_ok) {
|
i = (cfg->tilde_ok ? 1 : 0);
|
||||||
vp->v_num = itoq(1);
|
break;
|
||||||
} else {
|
|
||||||
vp->v_num = itoq(0);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
case CONFIG_TAB:
|
case CONFIG_TAB:
|
||||||
if (cfg->tab_ok) {
|
i = (cfg->tab_ok ? 1 : 0);
|
||||||
vp->v_num = itoq(1);
|
break;
|
||||||
} else {
|
|
||||||
vp->v_num = itoq(0);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
case CONFIG_QUOMOD:
|
case CONFIG_QUOMOD:
|
||||||
i = cfg->quomod;
|
i = cfg->quomod;
|
||||||
@@ -1137,20 +1228,12 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_LEADZERO:
|
case CONFIG_LEADZERO:
|
||||||
if (cfg->leadzero) {
|
i = (cfg->leadzero ? 1 : 0);
|
||||||
vp->v_num = itoq(1);
|
break;
|
||||||
} else {
|
|
||||||
vp->v_num = itoq(0);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
case CONFIG_FULLZERO:
|
case CONFIG_FULLZERO:
|
||||||
if (cfg->fullzero) {
|
i = (cfg->fullzero ? 1 : 0);
|
||||||
vp->v_num = itoq(1);
|
break;
|
||||||
} else {
|
|
||||||
vp->v_num = itoq(0);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
case CONFIG_MAXSCAN:
|
case CONFIG_MAXSCAN:
|
||||||
i = cfg->maxscancount;
|
i = cfg->maxscancount;
|
||||||
@@ -1171,12 +1254,8 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_BLKVERBOSE:
|
case CONFIG_BLKVERBOSE:
|
||||||
if (cfg->blkverbose) {
|
i = (cfg->blkverbose ? 1 : 0);
|
||||||
vp->v_num = itoq(1);
|
break;
|
||||||
} else {
|
|
||||||
vp->v_num = itoq(0);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
case CONFIG_BLKBASE:
|
case CONFIG_BLKBASE:
|
||||||
vp->v_type = V_STR;
|
vp->v_type = V_STR;
|
||||||
@@ -1211,12 +1290,8 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_VERBOSE_QUIT:
|
case CONFIG_VERBOSE_QUIT:
|
||||||
if (cfg->verbose_quit) {
|
i = (cfg->verbose_quit ? 1 : 0);
|
||||||
vp->v_num = itoq(1);
|
break;
|
||||||
} else {
|
|
||||||
vp->v_num = itoq(0);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
case CONFIG_CTRL_D:
|
case CONFIG_CTRL_D:
|
||||||
vp->v_type = V_STR;
|
vp->v_type = V_STR;
|
||||||
@@ -1247,20 +1322,24 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case CONFIG_WINDOWS:
|
case CONFIG_WINDOWS:
|
||||||
if (cfg->windows) {
|
i = (cfg->windows ? 1 : 0);
|
||||||
vp->v_num = itoq(1);
|
break;
|
||||||
} else {
|
|
||||||
vp->v_num = itoq(0);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
case CONFIG_CYGWIN:
|
case CONFIG_CYGWIN:
|
||||||
if (cfg->cygwin) {
|
i = (cfg->cygwin ? 1 : 0);
|
||||||
vp->v_num = itoq(1);
|
break;
|
||||||
} else {
|
|
||||||
vp->v_num = itoq(0);
|
case CONFIG_COMPILE_CUSTOM:
|
||||||
|
i = (cfg->compile_custom ? 1 : 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_ALLOW_CUSTOM:
|
||||||
|
/* firewall */
|
||||||
|
if (cfg->allow_custom == NULL) {
|
||||||
|
cfg->allow_custom = &allow_custom;
|
||||||
}
|
}
|
||||||
return;
|
i = (*(cfg->allow_custom) ? 1 : 0);
|
||||||
|
break;
|
||||||
|
|
||||||
case CONFIG_VERSION:
|
case CONFIG_VERSION:
|
||||||
vp->v_type = V_STR;
|
vp->v_type = V_STR;
|
||||||
@@ -1271,6 +1350,22 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case CONFIG_BASEB:
|
||||||
|
i = BASEB;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_REDECL_WARN:
|
||||||
|
i = (cfg->redecl_warn ? 1 : 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_DUPVAR_WARN:
|
||||||
|
i = (cfg->dupvar_warn ? 1 : 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_HZ:
|
||||||
|
i = CALC_HZ;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
math_error("Getting illegal CONFIG element");
|
math_error("Getting illegal CONFIG element");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
@@ -1361,9 +1456,21 @@ config_cmp(CONFIG *cfg1, CONFIG *cfg2)
|
|||||||
(cfg1->base_name != NULL && cfg2->base_name != NULL &&
|
(cfg1->base_name != NULL && cfg2->base_name != NULL &&
|
||||||
strcmp(cfg1->base_name, cfg2->base_name) != 0) ||
|
strcmp(cfg1->base_name, cfg2->base_name) != 0) ||
|
||||||
|
|
||||||
|
cfg1->windows != cfg2->windows ||
|
||||||
|
|
||||||
|
cfg1->cygwin != cfg2->cygwin ||
|
||||||
|
|
||||||
|
cfg1->compile_custom != cfg2->compile_custom ||
|
||||||
|
|
||||||
|
(cfg1->allow_custom == NULL && cfg2->allow_custom != NULL) ||
|
||||||
|
(cfg1->allow_custom != NULL && cfg2->allow_custom == NULL) ||
|
||||||
|
(cfg1->allow_custom != NULL && cfg2->allow_custom != NULL &&
|
||||||
|
*(cfg1->allow_custom) != *(cfg2->allow_custom)) ||
|
||||||
|
|
||||||
(cfg1->version == NULL && cfg2->version != NULL) ||
|
(cfg1->version == NULL && cfg2->version != NULL) ||
|
||||||
(cfg1->version != NULL && cfg2->version == NULL) ||
|
(cfg1->version != NULL && cfg2->version == NULL) ||
|
||||||
cfg1->windows != cfg2->windows ||
|
|
||||||
(cfg1->version != NULL && cfg2->version != NULL &&
|
(cfg1->version != NULL && cfg2->version != NULL &&
|
||||||
strcmp(cfg1->version, cfg2->version) != 0);
|
strcmp(cfg1->version, cfg2->version) != 0) ||
|
||||||
|
|
||||||
|
cfg1->baseb != cfg2->baseb;
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user