mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Compare commits
42 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
9d62873a02 | ||
|
23a5fc3ede | ||
|
58d94b08d8 | ||
|
7165fa17c7 | ||
|
64a732b678 | ||
|
a6a37f9cad | ||
|
42b089a87c | ||
|
8c5e9e62fa | ||
|
29e956819c | ||
|
66c3d26611 | ||
|
b4952bd44f | ||
|
0d06d90751 | ||
|
e1a3dfda0b | ||
|
8db4e7af47 | ||
|
bb5c624382 | ||
|
8aedcf801a | ||
|
b60eec99bb | ||
|
383290a844 | ||
|
7e40db44e3 | ||
|
a57ee19ca5 | ||
|
a6e226fa80 | ||
|
86e0f98c8f | ||
|
e4dcbf7ecf | ||
|
10c0bd2d95 | ||
|
ad44f1e3ab | ||
|
fd436d7c15 | ||
|
d2cb9c81d5 | ||
|
a0aba073a6 | ||
|
59837e385c | ||
|
bea726fc16 | ||
|
fc0a3dd183 | ||
|
63d9b22067 | ||
|
fc85ac3791 | ||
|
3d55811205 | ||
|
296aa50ac7 | ||
|
5e098d2adf | ||
|
ae2a752314 | ||
|
61dd47526f | ||
|
417ffb6ab5 | ||
|
121b8f72c6 | ||
|
9968a69f50 | ||
|
1ea579d929 |
179
BUGS
179
BUGS
@@ -20,26 +20,34 @@ configuration, try backing them out and see if things get better.
|
|||||||
|
|
||||||
To be sure that your version of calc is up to date, check out:
|
To be sure that your version of calc is up to date, check out:
|
||||||
|
|
||||||
http://reality.sgi.com/chongo/tech/comp/calc/calc-download.html
|
http://www.isthe.com/chongo/tech/comp/calc/calc-download.html
|
||||||
|
|
||||||
The calc web site is located at:
|
The calc web site is located at:
|
||||||
|
|
||||||
http://reality.sgi.com/chongo/tech/comp/calc/index.html
|
http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
If you have tried all of the above and things still are not right,
|
If you have tried all of the above and things still are not right,
|
||||||
then it may be time to send in a bug report. You can send bug reports to:
|
then it may be time to send in a bug report. You can send bug
|
||||||
|
and bug fixes reports to:
|
||||||
|
|
||||||
calc-bugs at postofc dot corp dot sgi dot com
|
calc-bugs at asthe dot com
|
||||||
|
|
||||||
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
[[ NOTE: The EMail address uses 'asthe', the web site URL uses 'isthe' ]]
|
||||||
|
|
||||||
|
Your subject must contain the words:
|
||||||
|
|
||||||
|
calc bug report
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
When you send your report, please include the following information:
|
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
|
||||||
@@ -53,86 +61,103 @@ When you send your report, please include the following information:
|
|||||||
|
|
||||||
Stack traces from core dumps are useful to send as well.
|
Stack traces from core dumps are useful to send as well.
|
||||||
|
|
||||||
=-=
|
Fell free to use the above address to send in big fixes (in the form
|
||||||
|
of a context diff patch).
|
||||||
Send any comments, compiler warning messages, suggestions and most
|
|
||||||
importantly, fixes (in the form of a context diff patch) to:
|
|
||||||
|
|
||||||
calc-tester at postofc dot corp dot sgi dot com
|
|
||||||
|
|
||||||
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
|
||||||
|
|
||||||
You should use the above calc-bugs address for bug reports, if you are
|
|
||||||
not currently a member of the calc-tester mailing list.
|
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
Known bugs:
|
Known bugs:
|
||||||
|
|
||||||
|
The stoponerror() facility does not seem to work, or perhaps
|
||||||
|
the stoponerror help file is incorrect. The stoponerror help file
|
||||||
|
lacks examples because of this problem.
|
||||||
|
|
||||||
We are sure some more bugs exist. When you find them, please let
|
We are sure some more bugs exist. When you find them, please let
|
||||||
us know! See the above for details on how to report and were to
|
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:
|
mis-features in calc:
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
* The chi.cal resource file does not work well with odd degrees
|
||||||
|
of freedom. Can someone improve this algorithm?
|
||||||
|
|
||||||
|
* The intfile.cal resource file reads and writes big or little Endian
|
||||||
|
integers to/from files the hard way. It does NOT use blkcpy. The
|
||||||
|
following code:
|
||||||
|
|
||||||
|
i = (ord("\n") << 16) | (ord("i") << 8) | ord("H")
|
||||||
|
b = blk()
|
||||||
|
copy(i, b)
|
||||||
|
fd = fopen("file", "w")
|
||||||
|
copy(b, fd);
|
||||||
|
fclose(fd)
|
||||||
|
|
||||||
|
will write an extra NUL octet to the file. Where as:
|
||||||
|
|
||||||
|
read intfile
|
||||||
|
i = (ord("\n") << 16) | (ord("i") << 8) | ord("H")
|
||||||
|
be2file(i, "file2")
|
||||||
|
|
||||||
|
will not.
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
Problems with old systems that have known work-a-rounds:
|
||||||
|
|
||||||
* There is a bug in gcc-2.95 that causes calc, when compiled with -O2,
|
* 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
|
to fail the regression test. The work-a-round is to compile with -O
|
||||||
or to use gcc-2.96 or later.
|
or to use gcc-2.96 or later.
|
||||||
|
|
||||||
* Solaris cc somtimes barfs while compiling zrand.c. In particular, calc
|
This bug has been observed on the Sparc and the PowerPC machine.
|
||||||
barfs on on the SVAL macro. The work-a-round is to use the Solaric cc
|
|
||||||
Makefile set sets -DFORCE_STDC. I.e,:
|
|
||||||
|
|
||||||
CCWARN=
|
On the PowerPC with gcc-2.95 when compiled with -O2, the following
|
||||||
CCOPT= ${DEBUG} ${NO_SHARED}
|
patch seems to help:
|
||||||
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
|
*** zfunc.c.orig Fri Feb 23 18:18:39 2001
|
||||||
where the following:
|
--- 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;
|
||||||
|
|
||||||
#include <stdio.h>
|
if (n < 0) n = 0;
|
||||||
#define SVAL(a,b) (unsigned long)(0x ## a ## b ## ULL)
|
z.sign = 0;
|
||||||
main(){SVAL(b8a8aeb0,8168eadc);}
|
--- 1608,1614 ----
|
||||||
|
void
|
||||||
|
zbitvalue(long n, ZVALUE *res)
|
||||||
|
{
|
||||||
|
! volatile ZVALUE z;
|
||||||
|
|
||||||
fails because it puts a space inside the concatenated hex. Calc
|
if (n < 0) n = 0;
|
||||||
has code that is affected by this bug. This bug has been reported
|
z.sign = 0;
|
||||||
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
|
* There are problems compiling calc on the sparcv9 under 64 bit
|
||||||
Solaris. On that platform, gcc-2.96 is able to compile calc, but
|
Solaris. On that platform, gcc-2.96 is able to compile calc, but
|
||||||
@@ -149,19 +174,7 @@ Problems with known work-a-rounds:
|
|||||||
CCWARN="-DFORCE_STDC -w"
|
CCWARN="-DFORCE_STDC -w"
|
||||||
DEBUG="-fast -xarch=v9"
|
DEBUG="-fast -xarch=v9"
|
||||||
|
|
||||||
* Under BSDI v4, the warnings of the form:
|
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||||
|
|
||||||
/usr/include/ctype.h:147: warning: `__runetype' defined but not used
|
|
||||||
/usr/include/ctype.h:161: warning: `__isctype' defined but not used
|
|
||||||
/usr/include/ctype.h:170: warning: `toupper' defined but not used
|
|
||||||
/usr/include/ctype.h:177: warning: `tolower' defined but not used
|
|
||||||
|
|
||||||
are seen. These warnings are the result of mis-features in BSDI
|
|
||||||
include files. They do not have an impact on the operation
|
|
||||||
or performance. The work-a-round is to ignore these warnings
|
|
||||||
under BSDI.
|
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
|
||||||
##
|
##
|
||||||
## 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
|
||||||
@@ -177,12 +190,12 @@ Problems with known work-a-rounds:
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.4 $
|
## @(#) $Revision: 29.24 $
|
||||||
## @(#) $Id: BUGS,v 29.4 1999/12/15 09:13:29 chongo Exp $
|
## @(#) $Id: BUGS,v 29.24 2006/05/21 07:54:13 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
|
||||||
## File existed as early as: 1994
|
## File existed as early as: 1994
|
||||||
##
|
##
|
||||||
## chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
## Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
65
COPYING
65
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.1 $
|
# @(#) $Revision: 29.8 $
|
||||||
# @(#) $Id: COPYING,v 29.1 1999/12/14 09:15:29 chongo Exp $
|
# @(#) $Id: COPYING,v 29.8 2006/05/01 19:16:57 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
@@ -55,16 +55,43 @@ Calc is covered by the GNU Lesser General Public License
|
|||||||
|
|
||||||
The contact addresses for calc is as follows:
|
The contact addresses for calc is as follows:
|
||||||
|
|
||||||
Web: http://reality.sgi.com/chongo/tech/comp/calc/index.html
|
Web: http://www.isthe.com/chongo/tech/comp/calc/email.html
|
||||||
http://www.isthe.com/chongo/tech/comp/calc/index.html
|
|
||||||
|
|
||||||
EMail: calc-tester at postofc dot corp dot sgi dot com
|
To join the low volume calc mailing list. Send a EMail message to:
|
||||||
calc-tester at isthe dot com
|
|
||||||
|
|
||||||
[[ Replace 'at' with @, 'dot' is with . and remove spaces ]]
|
calc-tester-request at asthe dot com
|
||||||
|
|
||||||
The 2nd address set is provided in case the 1st address set no
|
Your subject must contain the words:
|
||||||
longer functions.
|
|
||||||
|
calc mailing list subscription
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
|
Your message body (not the subject) should consist of:
|
||||||
|
|
||||||
|
subscribe calc-tester address
|
||||||
|
end
|
||||||
|
name your_full_name
|
||||||
|
|
||||||
|
where ``address'' is your EMail address and ``your_full_name'' is
|
||||||
|
your full name.
|
||||||
|
|
||||||
|
Feel free to follow the name line with additional EMail text as desired.
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
Calc bug reports and calc bug fixes should be sent to:
|
||||||
|
|
||||||
|
calc-bugs at asthe dot com
|
||||||
|
|
||||||
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||||
|
|
||||||
|
Your subject must contain the words:
|
||||||
|
|
||||||
|
calc bug report
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
@@ -128,7 +155,7 @@ Calc copyrights and exception files
|
|||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
With the exception of the files listed below, Calc is covered under
|
With the exception of the files listed below, Calc is covered under
|
||||||
the following Copyrights:
|
the following GNU Lesser General Public License Copyrights:
|
||||||
|
|
||||||
Copyright (C) year David I. Bell
|
Copyright (C) year David I. Bell
|
||||||
Copyright (C) year David I. Bell and Landon Curt Noll
|
Copyright (C) year David I. Bell and Landon Curt Noll
|
||||||
@@ -137,13 +164,13 @@ Calc copyrights and exception files
|
|||||||
Copyright (C) year Landon Curt Noll
|
Copyright (C) year Landon Curt Noll
|
||||||
Copyright (C) year Ernest Bowen and Landon Curt Noll
|
Copyright (C) year Ernest Bowen and Landon Curt Noll
|
||||||
Copyright (C) year Ernest Bowen
|
Copyright (C) year Ernest Bowen
|
||||||
|
Copyright (C) year Petteri Kettunen and Landon Curt Noll
|
||||||
|
|
||||||
A few files are not covered under the GNU Lesser General Public
|
These files are not covered under one of the Copyrights listed above:
|
||||||
License. The source files not covered are:
|
|
||||||
|
|
||||||
shs1.c shs1.h shs.c shs.h
|
shs1.c shs1.h shs.c shs.h
|
||||||
md5.c md5.h lib/qtime.cal COPYING
|
md5.c md5.h COPYING COPYING-LGPL
|
||||||
COPYING-LGPL
|
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
|
||||||
@@ -155,6 +182,14 @@ 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
|
||||||
|
exception files have non-LGPL Copyrights. Other files are under a
|
||||||
|
LGPL Copyright but have different authors.
|
||||||
|
|
||||||
|
In all cases one may use and distribute these exception files freely.
|
||||||
|
And because one may freely distribute the LGPL covered files, the
|
||||||
|
entire calc source may be freely used and distributed.
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
General Copyleft and License info
|
General Copyleft and License info
|
||||||
|
153
HOWTO.INSTALL
153
HOWTO.INSTALL
@@ -1,34 +1,130 @@
|
|||||||
Installing calc in 4 easy steps:
|
Installing calc from the gziped tarball in 4 easy steps:
|
||||||
|
|
||||||
1) Look at the makefile, and adjust it to suit your needs.
|
0) If your platform supports i686 RPMs, you may want to go to:
|
||||||
|
|
||||||
Here are some Makefile hints:
|
http://www.isthe.com/chongo/src/calc/
|
||||||
|
|
||||||
Select a compiler set by commenting in the appropriate set
|
and use these RPMs:
|
||||||
of cc options. As shipped the Makefile assumes a gcc-like
|
|
||||||
environment such as Linux. If a more appropriate cc set if
|
|
||||||
found below, comment out the Linux set and comment in that
|
|
||||||
set or edit the gcc set or the common cc set as needed.
|
|
||||||
|
|
||||||
You may or may not need RANLIB when building libraries.
|
* calc*.i686.rpm
|
||||||
As shipped the Makefile assumes RANLIB is needed.
|
- all that is needed if you just want to use calc
|
||||||
Comment the in/out the RANLIB value if ranlib does
|
|
||||||
not work or does not exist.
|
|
||||||
|
|
||||||
You may want to change the default pager used by calc.
|
* calc-devel-*.i686.rpm
|
||||||
As shipped the Makefile assumes 'more'. On your system
|
- calc *.h header and *.a lib files for use in other programs
|
||||||
you may find 'less' to be a better pager.
|
|
||||||
|
|
||||||
Set TOPDIR to be the place under which help files, calc,
|
* calc.*.src.rpm
|
||||||
include files and calc libs are to be installed. As shipped
|
- calc source in RPM package form
|
||||||
the Makefile assumes a TOPDIR of /usr/local/lib.
|
|
||||||
|
|
||||||
Set BINDIR to the place where calc is installed. As shipped
|
The following 4 steps apply to calc source tree that comes from either:
|
||||||
the Makefile assumes a BINDIR /usr/local/bin.
|
|
||||||
|
gunzip -c calc-*.tar.gz | tar -xvf -
|
||||||
|
|
||||||
|
or from:
|
||||||
|
|
||||||
|
rpm -ivh calc-*.src.rpm
|
||||||
|
cd /var/tmp
|
||||||
|
gunzip -c /usr/src/redhat/SOURCES/calc-*.tar.gz | tar -xvf -
|
||||||
|
|
||||||
|
1) Look at the makefile, and adjust it to suit your needs.
|
||||||
|
|
||||||
|
The Makefile, as shipped, is suitable for installation under
|
||||||
|
Linux and Un*x-like environments. For the most part, the default
|
||||||
|
values should work. If in doubt, follow the 'When in doubt'
|
||||||
|
suggestion.
|
||||||
|
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
! If you are building under Windoz or a Windoz-like environment !
|
||||||
|
! (such as Cygwin or DJGPP), read the README.WINDOWS file. !
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
You should determine if these Makefile variables are reasonable:
|
||||||
|
|
||||||
|
INCDIR Where the system include (.h) files are kept.
|
||||||
|
BINDIR Where to install calc binary files.
|
||||||
|
LIBDIR Where to install calc link library (*.a) files.
|
||||||
|
CALC_SHAREDIR Where to install calc help, .cal, startup, and
|
||||||
|
config files.
|
||||||
|
|
||||||
|
You may want to change the default installation locations for
|
||||||
|
these values, which are based on the 4 values listed above:
|
||||||
|
|
||||||
|
HELPDIR where the help directory is installed
|
||||||
|
CALC_INCDIR where the calc include files are installed
|
||||||
|
CUSTOMCALDIR where custom *.cal files are installed
|
||||||
|
CUSTOMHELPDIR where custom help files are installed
|
||||||
|
CUSTOMINCPDIR where custom .h files are installed
|
||||||
|
SCRIPTDIR where calc shell scripts are installed
|
||||||
|
|
||||||
|
If you want to install calc files under a top level directory,
|
||||||
|
then set the T value:
|
||||||
|
|
||||||
|
The calc install is performed under $T, the calc build is
|
||||||
|
performed under /. The purpose for $T is to allow someone
|
||||||
|
to install calc somewhere other than into the system area.
|
||||||
|
|
||||||
|
For example, if:
|
||||||
|
|
||||||
|
BINDIR= /usr/bin
|
||||||
|
LIBDIR= /usr/lib
|
||||||
|
CALC_SHAREDIR= /usr/share/calc
|
||||||
|
|
||||||
|
and if:
|
||||||
|
|
||||||
|
T= /var/tmp/testing
|
||||||
|
|
||||||
|
Then the installation locations will be:
|
||||||
|
|
||||||
|
calc binary files: /var/tmp/testing/usr/bin
|
||||||
|
calc link library: /var/tmp/testing/usr/lib
|
||||||
|
calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||||
|
... etc ... /var/tmp/testing/...
|
||||||
|
|
||||||
|
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
|
||||||
|
calc is installed under $T, as if one had to chroot under
|
||||||
|
$T for calc to operate.
|
||||||
|
|
||||||
|
Look for the section that starts:
|
||||||
|
|
||||||
|
################
|
||||||
|
# compiler set #
|
||||||
|
################
|
||||||
|
|
||||||
|
Select a compiler set by commenting in the appropriate set
|
||||||
|
of cc options. As shipped the Makefile assumes a gcc-like
|
||||||
|
environment such as Linux. If a more appropriate cc set if
|
||||||
|
found below, comment out the Linux set and comment in that
|
||||||
|
set or edit the gcc set or the common cc set as needed.
|
||||||
|
|
||||||
|
You may want to change these Makrfile variables from their defaults:
|
||||||
|
|
||||||
|
RANLIB
|
||||||
|
|
||||||
|
You may or may not need RANLIB when building libraries.
|
||||||
|
As shipped the Makefile assumes RANLIB is needed.
|
||||||
|
Comment the in/out the RANLIB value if ranlib does
|
||||||
|
not work or does not exist.
|
||||||
|
|
||||||
|
CALCPAGER
|
||||||
|
|
||||||
|
You may want to change the default pager used by calc.
|
||||||
|
As shipped the Makefile assumes 'more'. On your system
|
||||||
|
you may find 'less' to be a better pager.
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
|
||||||
|
Some compilers (to put it mildly) have bugs. Sometimes the
|
||||||
|
DEBUG Makefile variable causes the compiler / optimizer to
|
||||||
|
produce bad code. Other compilers do just fine.
|
||||||
|
|
||||||
|
If possible try to use DEBUG=-O3 -g3 (maximum optimization
|
||||||
|
and debug symbols). If the calc test fails (see step 3),
|
||||||
|
try lowering either the -O value and/or the -g3. Also try
|
||||||
|
using -Osomething without -g.
|
||||||
|
|
||||||
Adjust other Makefile variables as needed.
|
Adjust other Makefile variables as needed.
|
||||||
|
|
||||||
2) build calc:
|
2) build calc:
|
||||||
|
|
||||||
make all
|
make all
|
||||||
|
|
||||||
@@ -36,13 +132,14 @@ Installing calc in 4 easy steps:
|
|||||||
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.
|
||||||
|
|
||||||
3) test calc:
|
3) test calc:
|
||||||
|
|
||||||
make check
|
make check
|
||||||
|
|
||||||
==> If you run into problems, follow the BUGS file instructions.
|
==> If you run into problems, read the BUGS file and follow
|
||||||
|
the instructions found in there.
|
||||||
|
|
||||||
4) install calc:
|
4) install calc:
|
||||||
|
|
||||||
make install
|
make install
|
||||||
|
|
||||||
@@ -65,12 +162,12 @@ the calc help subsystem. See the README file for details.
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.1 $
|
## @(#) $Revision: 29.7 $
|
||||||
## @(#) $Id: HOWTO.INSTALL,v 29.1 1999/12/14 09:15:29 chongo Exp $
|
## @(#) $Id: HOWTO.INSTALL,v 29.7 2003/04/15 03:38:34 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
|
||||||
## File existed as early as: 1999
|
## File existed as early as: 1999
|
||||||
##
|
##
|
||||||
## chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
## Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
32
LIBRARY
32
LIBRARY
@@ -48,12 +48,30 @@ convenient for outside use. So you should read the source for a routine
|
|||||||
to see if it really does what you think it does. I won't guarantee that
|
to see if it really does what you think it does. I won't guarantee that
|
||||||
obscure internal routines won't change or disappear in future releases!
|
obscure internal routines won't change or disappear in future releases!
|
||||||
|
|
||||||
When calc is installed, all of the include files needed to build
|
When calc is installed, all of libraries are installed into ${LIBDIR}.
|
||||||
libcalc.a along with the link library itself are installed into ${LIBDIR}.
|
All of the calc header files are installed under ${INCDIRCALC}.
|
||||||
|
|
||||||
|
If CALC_SRC is defined, then the calc header files will assume that
|
||||||
|
they are in or under the current directory. However, most external
|
||||||
|
programs most likely will not be located under calc'c source tree.
|
||||||
|
External programs most likely want to use the installed calc header
|
||||||
|
files under ${INCDIRCALC}. External programs most likely NOT want
|
||||||
|
to define CALC_SRC.
|
||||||
|
|
||||||
External programs may want to compile with:
|
External programs may want to compile with:
|
||||||
|
|
||||||
-I${LIBDIR} -L${LIBDIR} -lcalc
|
-L${LIBDIR} -lcalc
|
||||||
|
|
||||||
|
If custom functions are also used, they may want to compile with:
|
||||||
|
|
||||||
|
-L${LIBDIR} -lcalc -lcustcalc
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
-UCALC_SRC
|
||||||
|
|
||||||
|
as well.
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
ERROR HANDLING
|
ERROR HANDLING
|
||||||
@@ -471,12 +489,12 @@ need call libcalc_call_me_last() only once.
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.1 $
|
## @(#) $Revision: 29.5 $
|
||||||
## @(#) $Id: LIBRARY,v 29.1 1999/12/14 09:15:29 chongo Exp $
|
## @(#) $Id: LIBRARY,v 29.5 2001/06/08 22:57:35 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
|
||||||
## File existed as early as: 1993
|
## File existed as early as: 1993
|
||||||
##
|
##
|
||||||
## chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
## Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
42
README
42
README
@@ -4,7 +4,7 @@ See the HOWTO.INSTALL file for information on how to build and install calc.
|
|||||||
|
|
||||||
To be sure that your version of calc is up to date, check out:
|
To be sure that your version of calc is up to date, check out:
|
||||||
|
|
||||||
http://reality.sgi.com/chongo/tech/comp/calc/calc-download.html
|
http://www.isthe.com/chongo/tech/comp/calc/calc-download.html
|
||||||
|
|
||||||
We are interested in any/all feedback on recent versions of calc.
|
We are interested in any/all feedback on recent versions of calc.
|
||||||
In particular we would like to hear about:
|
In particular we would like to hear about:
|
||||||
@@ -73,11 +73,18 @@ for a wish/todo list. Code contributions are welcome.
|
|||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
To join the calc-tester mailing list. Send a request to:
|
To join the calc-tester mailing list. Send an EMail message to:
|
||||||
|
|
||||||
calc-tester-request at postofc dot corp dot sgi dot com
|
calc-tester-request at asthe dot com
|
||||||
|
|
||||||
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||||
|
|
||||||
|
Your subject must contain the words:
|
||||||
|
|
||||||
|
calc mailing list subscription
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
Your message body (not the subject) should consist of:
|
Your message body (not the subject) should consist of:
|
||||||
|
|
||||||
@@ -88,17 +95,28 @@ Your message body (not the subject) should consist of:
|
|||||||
where ``address'' is your EMail address and ``your_full_name'' is
|
where ``address'' is your EMail address and ``your_full_name'' is
|
||||||
your full name.
|
your full name.
|
||||||
|
|
||||||
Calc bug reports, however should be sent to:
|
Feel free to follow the name line with additional EMail text as desired.
|
||||||
|
|
||||||
calc-bugs at postofc dot corp dot sgi dot com
|
=-=
|
||||||
|
|
||||||
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
Send Calc bug and bug fixes to:
|
||||||
|
|
||||||
|
calc-bugs at asthe dot com
|
||||||
|
|
||||||
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||||
|
|
||||||
but see the BUGS file first.
|
but see the BUGS file first.
|
||||||
|
|
||||||
|
Your subject must contain the words:
|
||||||
|
|
||||||
|
calc bug report
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
The calc web site is located at:
|
The calc web site is located at:
|
||||||
|
|
||||||
http://reality.sgi.com/chongo/tech/comp/calc/
|
http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999 Landon Curt Noll
|
||||||
##
|
##
|
||||||
@@ -116,12 +134,12 @@ The calc web site is located at:
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.1 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: README,v 29.1 1999/12/14 09:15:29 chongo Exp $
|
## @(#) $Id: README,v 29.3 2001/06/01 11:26:53 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
|
||||||
## File existed as early as: 1995
|
## File existed as early as: 1995
|
||||||
##
|
##
|
||||||
## chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
## Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
169
README.WINDOWS
Normal file
169
README.WINDOWS
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
Dear calc user on a Windoz based system,
|
||||||
|
|
||||||
|
See the HOWTO.INSTALL file for information on how to build and install calc.
|
||||||
|
See also the README file.
|
||||||
|
|
||||||
|
NOTE: The main developers do not have access to a Windoz based platform.
|
||||||
|
While we will make an effort to not break calc Windoz based system,
|
||||||
|
our lack of a Windoz test environment will mean we will make mistakes
|
||||||
|
from time to time. Hopefully Windowz users can overcome these mistakes.
|
||||||
|
Of course you are welcome to send us any patches that fix your
|
||||||
|
Windoz build environment.
|
||||||
|
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
=-= compiling under DJGPP =-=
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
|
||||||
|
You might want to try using the DJGPP system to compile calc. See:
|
||||||
|
|
||||||
|
http://www.delorie.com/djgpp/
|
||||||
|
|
||||||
|
for DJGPP details and availability.
|
||||||
|
|
||||||
|
To compile with DJGPP, one needs to select a number of Makefile
|
||||||
|
variable changes. Eli Zaretskii <eliz at is dot elta dot co dot il>
|
||||||
|
recommends the following settings:
|
||||||
|
|
||||||
|
TERMCONTROL= -DUSE_TERMIOS
|
||||||
|
BYTE_ORDER= -DLITTLE_ENDIAN
|
||||||
|
LONG_BITS= 32
|
||||||
|
HAVE_FPOS_POS= -DHAVE_NO_FPOS_POS
|
||||||
|
FPOS_BITS= 32
|
||||||
|
OFF_T_BITS= 32
|
||||||
|
DEV_BITS= 32
|
||||||
|
INODE_BITS= 32
|
||||||
|
HAVE_USTAT= -DHAVE_NO_USTAT
|
||||||
|
HAVE_GETSID= -DHAVE_NO_GETSID
|
||||||
|
HAVE_GETPGID= -DHAVE_NO_GETPGID
|
||||||
|
HAVE_GETTIME= -DHAVE_NO_GETTIME
|
||||||
|
HAVE_GETPRID= -DHAVE_NO_GETPRID
|
||||||
|
HAVE_URANDOM_H= NO
|
||||||
|
ALIGN32= -UMUST_ALIGN32
|
||||||
|
HAVE_MALLOC_H= YES
|
||||||
|
HAVE_STDLIB_H= YES
|
||||||
|
HAVE_STRING_H= YES
|
||||||
|
HAVE_TIMES_H= NO
|
||||||
|
HAVE_SYS_TIMES_H= YES
|
||||||
|
HAVE_TIME_H= YES
|
||||||
|
HAVE_SYS_TIME_H= YES
|
||||||
|
HAVE_UNISTD_H= YES
|
||||||
|
BINDIR= /dev/env/DJDIR/bin
|
||||||
|
INCDIR= /dev/env/DJDIR/include
|
||||||
|
LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
MANDIR= /dev/env/DJDIR/man/man1
|
||||||
|
CATDIR= /dev/env/DJDIR/man/cat1
|
||||||
|
NROFF= groff
|
||||||
|
CALCPATH= .;./cal;~/.cal;${CALC_SHAREDIR};${CUSTOMCALDIR}
|
||||||
|
CALCRC= ${CALC_SHAREDIR}/startup;~/.calcrc;./.calcinit
|
||||||
|
CALCPAGER= less.exe -ci
|
||||||
|
DEBUG= -O2 -gstabs+
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Look for Makefile comments of the form:
|
||||||
|
|
||||||
|
# Select ...something... for DJGPP.
|
||||||
|
|
||||||
|
Follow those recommendations. In cases where they conflict with
|
||||||
|
the above Makefile list, follow the recommendation in the Makefile.
|
||||||
|
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
=-= compiling with Cygwin =-=
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
|
||||||
|
An effort is being made to allow windows users to compile calc using the
|
||||||
|
Cygwin project (http://sources.redhat.com/cygwin/) with the GCC compiler
|
||||||
|
and Un*x tools for Windows.
|
||||||
|
|
||||||
|
The major porting work was performed by Thomas Jones-Low
|
||||||
|
(tjoneslo at softstart dot com). He said:
|
||||||
|
|
||||||
|
I had previous stated to this group that I have successfully managed
|
||||||
|
to port a version of Calc to Windows, and promised some point to
|
||||||
|
post what was required, so here it is.
|
||||||
|
|
||||||
|
One obvious manner of doing this port is to get the latest version
|
||||||
|
of the Cygwin project (http://sources.redhat.com/cygwin/) with the
|
||||||
|
GCC compiler and Un*x tools for Windows and recompile.
|
||||||
|
|
||||||
|
I built my working version using Calc ... I am using Visual C++
|
||||||
|
version 7.0, which is an older version of the Microsoft development
|
||||||
|
tools. The make file provided with Calc is not compatible with
|
||||||
|
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
|
||||||
|
library, and calc.exe which is the command line interface.
|
||||||
|
|
||||||
|
He recommended that you generate by hand all of the header files that
|
||||||
|
by the Makefile. This has been done for you via the makefile rule:
|
||||||
|
|
||||||
|
make win32_hsrc
|
||||||
|
|
||||||
|
which uses the Makefile variables in win32.mkdef to form these header
|
||||||
|
files under win32 directory.
|
||||||
|
|
||||||
|
You will find generated versions of these files located in the win32
|
||||||
|
sub-directory. These files may be appropriate for your Cygwin building
|
||||||
|
needs.
|
||||||
|
|
||||||
|
In particular:
|
||||||
|
|
||||||
|
Just copy the win32/*.[ch] files up into the top level calc
|
||||||
|
source directory, edit them (if needed) and build using the
|
||||||
|
Cygwin GCC compiler and Cygwin build environment.
|
||||||
|
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
=-=-= calc maintenance folk =-=-=
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
|
||||||
|
People who maintain calc need to keep in mind the following:
|
||||||
|
|
||||||
|
The following was added to opcodes.h, config.h, zmath.h and value.h:
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#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
|
||||||
|
##
|
||||||
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
## as published by the Free Software Foundation.
|
||||||
|
##
|
||||||
|
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
## Public License for more details.
|
||||||
|
##
|
||||||
|
## A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
##
|
||||||
|
## @(#) $Revision: 29.12 $
|
||||||
|
## @(#) $Id: README.WINDOWS,v 29.12 2004/07/28 12:52:01 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README.WINDOWS,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 2001/02/25 14:00:05
|
||||||
|
## File existed as early as: 2001
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
248
addop.c
248
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-2006 David I. Bell and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.12 $
|
||||||
* @(#) $Id: addop.c,v 29.1 1999/12/14 09:15:29 chongo Exp $
|
* @(#) $Id: addop.c,v 29.12 2006/06/03 22:47:28 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:10
|
* Under source code control: 1990/02/15 01:48:10
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
#define OPCODEALLOCSIZE 100 /* reallocate size for opcodes in functions */
|
#define OPCODEALLOCSIZE 100 /* reallocate size for opcodes in functions */
|
||||||
|
|
||||||
|
|
||||||
static 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 */
|
||||||
@@ -184,8 +184,8 @@ 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 */
|
||||||
long index;
|
unsigned long index;
|
||||||
|
|
||||||
if (oldop != OP_RETURN) {
|
if (oldop != OP_RETURN) {
|
||||||
addop(OP_UNDEF);
|
addop(OP_UNDEF);
|
||||||
@@ -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);
|
||||||
@@ -208,10 +208,10 @@ endfunc(void)
|
|||||||
memcpy((char *) fp, (char *) curfunc, size);
|
memcpy((char *) fp, (char *) curfunc, size);
|
||||||
if (curfunc != functemplate)
|
if (curfunc != functemplate)
|
||||||
free(curfunc);
|
free(curfunc);
|
||||||
if (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,8 +280,9 @@ rmuserfunc(char *name)
|
|||||||
|
|
||||||
index = findstr(&funcnames, name);
|
index = findstr(&funcnames, name);
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
fprintf(stderr, "%s() has never been defined\n",
|
errorcount--;
|
||||||
name);
|
scanerror(T_NULL,
|
||||||
|
"Attempt to undefine an undefined function\n\t\"%s\"", name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (functions[index] == NULL)
|
if (functions[index] == NULL)
|
||||||
@@ -302,7 +303,7 @@ void
|
|||||||
freefunc(FUNC *fp)
|
freefunc(FUNC *fp)
|
||||||
{
|
{
|
||||||
long index;
|
long index;
|
||||||
long i;
|
unsigned long i;
|
||||||
|
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return;
|
return;
|
||||||
@@ -318,7 +319,7 @@ freefunc(FUNC *fp)
|
|||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (conf->traceflags & TRACE_FNCODES) {
|
if (newname[0] != '*' && (conf->traceflags & TRACE_FNCODES)) {
|
||||||
printf("Freeing function \"%s\"\n",namestr(&funcnames,index));
|
printf("Freeing function \"%s\"\n",namestr(&funcnames,index));
|
||||||
dumpnames = FALSE;
|
dumpnames = FALSE;
|
||||||
for (i = 0; i < fp->f_opcodecount; ) {
|
for (i = 0; i < fp->f_opcodecount; ) {
|
||||||
@@ -383,7 +384,7 @@ clearopt(void)
|
|||||||
FUNC *
|
FUNC *
|
||||||
findfunc(long index)
|
findfunc(long index)
|
||||||
{
|
{
|
||||||
if ((unsigned long) index >= funccount) {
|
if (index >= funccount) {
|
||||||
math_error("Undefined function");
|
math_error("Undefined function");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
@@ -451,124 +452,123 @@ 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;
|
||||||
|
errorcount--;
|
||||||
|
scanerror(T_NULL, "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);
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: align32.c,v 29.1 1999/12/14 09:15:29 chongo Exp $
|
* @(#) $Id: align32.c,v 29.2 2000/06/07 14:02:13 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
21
alloc.h
21
alloc.h
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: alloc.h,v 29.1 1999/12/14 09:15:29 chongo Exp $
|
* @(#) $Id: alloc.h,v 29.4 2001/06/08 21:00:58 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -32,10 +32,17 @@
|
|||||||
#define __ALLOC_H__
|
#define __ALLOC_H__
|
||||||
|
|
||||||
|
|
||||||
#include "have_malloc.h"
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
#include "have_newstr.h"
|
# include "have_malloc.h"
|
||||||
#include "have_string.h"
|
# include "have_newstr.h"
|
||||||
#include "have_memmv.h"
|
# include "have_string.h"
|
||||||
|
# include "have_memmv.h"
|
||||||
|
#else
|
||||||
|
# include <calc/have_malloc.h>
|
||||||
|
# include <calc/have_newstr.h>
|
||||||
|
# include <calc/have_string.h>
|
||||||
|
# include <calc/have_memmv.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_MALLOC_H
|
#ifdef HAVE_MALLOC_H
|
||||||
# include <malloc.h>
|
# include <malloc.h>
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: assocfunc.c,v 29.1 1999/12/14 09:15:29 chongo Exp $
|
* @(#) $Id: assocfunc.c,v 29.2 2000/06/07 14:02:13 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
|
||||||
* File existed as early as: 1993
|
* File existed as early as: 1993
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
190
blkcpy.c
190
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-2006 Landon Curt Noll and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: Landon Curt Noll
|
* Primary author: Landon Curt Noll
|
||||||
*
|
*
|
||||||
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.9 $
|
||||||
* @(#) $Id: blkcpy.c,v 29.1 1999/12/14 09:15:29 chongo Exp $
|
* @(#) $Id: blkcpy.c,v 29.9 2006/05/20 08:43:55 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
|
||||||
* File existed as early as: 1997
|
* File existed as early as: 1997
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -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,20 +280,20 @@ 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;
|
||||||
|
|
||||||
if (num < 0)
|
if (num < 0)
|
||||||
num = smat->m_size - ssi;
|
num = smat->m_size - ssi;
|
||||||
if ((USB32) ssi + num > smat->m_size)
|
if (ssi + num > smat->m_size)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if ((USB32) dsi + num > dmat->m_size)
|
if (dsi + num > dmat->m_size)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||||
if (vtemp == NULL) {
|
if (vtemp == NULL) {
|
||||||
@@ -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,19 +329,19 @@ 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;
|
||||||
if (num < 0)
|
if (num < 0)
|
||||||
num = blk->datalen - ssi;
|
num = blk->datalen - ssi;
|
||||||
if ((USB32) ssi + num > blk->datalen)
|
if (ssi + num > blk->datalen)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if ((USB32) dsi + num > dmat->m_size)
|
if (dsi + num > dmat->m_size)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
op = blk->data + ssi;
|
op = blk->data + ssi;
|
||||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||||
@@ -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;
|
||||||
@@ -389,7 +389,7 @@ copymat2blk(MATRIX *smat, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
|
|||||||
num = smat->m_size - ssi;
|
num = smat->m_size - ssi;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if ((USB32) ssi + num > smat->m_size)
|
if (ssi + num > smat->m_size)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = dblk->datalen;
|
dsi = dblk->datalen;
|
||||||
@@ -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;
|
||||||
@@ -436,11 +437,11 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
|
|||||||
num = smat->m_size - ssi;
|
num = smat->m_size - ssi;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if ((USB32) ssi + num > smat->m_size)
|
if (ssi + num > smat->m_size)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if ((USB32) dsi + num > lp->l_count)
|
if (dsi + num > lp->l_count)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||||
if (vtemp == NULL) {
|
if (vtemp == NULL) {
|
||||||
@@ -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;
|
||||||
@@ -484,11 +487,11 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
num = lp->l_count - ssi;
|
num = lp->l_count - ssi;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if ((USB32) ssi + num > lp->l_count)
|
if (ssi + num > lp->l_count)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if ((USB32) dsi + num > dmat->m_size)
|
if (dsi + num > dmat->m_size)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||||
if (vtemp == NULL) {
|
if (vtemp == NULL) {
|
||||||
@@ -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;
|
||||||
@@ -533,11 +537,11 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
|
|||||||
num = slp->l_count - ssi;
|
num = slp->l_count - ssi;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if ((USB32) ssi + num > slp->l_count)
|
if (ssi + num > slp->l_count)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if ((USB32) dsi + num > dlp->l_count)
|
if (dsi + num > dlp->l_count)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||||
if (vtemp == NULL) {
|
if (vtemp == NULL) {
|
||||||
@@ -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);
|
||||||
@@ -572,7 +578,7 @@ copyblk2file(BLOCK *sblk, long ssi, long num, FILEID id, long dsi)
|
|||||||
{
|
{
|
||||||
FILEIO *fiop;
|
FILEIO *fiop;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
unsigned int numw;
|
long numw;
|
||||||
|
|
||||||
if (ssi > sblk->datalen)
|
if (ssi > sblk->datalen)
|
||||||
return E_COPY2;
|
return E_COPY2;
|
||||||
@@ -581,7 +587,7 @@ copyblk2file(BLOCK *sblk, long ssi, long num, FILEID id, long dsi)
|
|||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fiop = findid(id, 'w');
|
fiop = findid(id, TRUE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return E_COPYF1;
|
return E_COPYF1;
|
||||||
fp = fiop->fp;
|
fp = fiop->fp;
|
||||||
@@ -609,7 +615,7 @@ copyfile2blk(FILEID id, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
|
|||||||
{
|
{
|
||||||
FILEIO *fiop;
|
FILEIO *fiop;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
unsigned int numw;
|
long numw;
|
||||||
ZVALUE fsize;
|
ZVALUE fsize;
|
||||||
long filelen;
|
long filelen;
|
||||||
long newlen;
|
long newlen;
|
||||||
@@ -618,7 +624,7 @@ copyfile2blk(FILEID id, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
|
|||||||
|
|
||||||
if (id < 3) /* excludes copying from stdin */
|
if (id < 3) /* excludes copying from stdin */
|
||||||
return E_COPYF1;
|
return E_COPYF1;
|
||||||
fiop = findid(id, 'r');
|
fiop = findid(id, FALSE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return E_COPYF1;
|
return E_COPYF1;
|
||||||
|
|
||||||
@@ -639,7 +645,7 @@ copyfile2blk(FILEID id, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
|
|||||||
num = filelen - ssi;
|
num = filelen - ssi;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if ((USB32) ssi + num > filelen)
|
if (ssi + num > filelen)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (fseek(fp, ssi, 0)) /* using system fseek XXX */
|
if (fseek(fp, ssi, 0)) /* using system fseek XXX */
|
||||||
return E_COPYF2;
|
return E_COPYF2;
|
||||||
@@ -677,7 +683,7 @@ copystr2file(STRING *str, long ssi, long num, FILEID id, long dsi)
|
|||||||
{
|
{
|
||||||
long len;
|
long len;
|
||||||
FILEIO *fiop;
|
FILEIO *fiop;
|
||||||
unsigned int numw;
|
long numw;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
len = str->s_len;
|
len = str->s_len;
|
||||||
@@ -688,9 +694,9 @@ copystr2file(STRING *str, long ssi, long num, FILEID id, long dsi)
|
|||||||
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 ((USB32) ssi + num > len)
|
if (ssi + num > len)
|
||||||
return E_COPY5; /* Insufficient memory in str */
|
return E_COPY5; /* Insufficient memory in str */
|
||||||
fiop = findid(id, 'w');
|
fiop = findid(id, TRUE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return E_COPYF1;
|
return E_COPYF1;
|
||||||
fp = fiop->fp;
|
fp = fiop->fp;
|
||||||
@@ -726,7 +732,7 @@ copyblk2blk(BLOCK *sblk, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc
|
|||||||
num = sblk->datalen - ssi;
|
num = sblk->datalen - ssi;
|
||||||
if (num == 0) /* Nothing to be copied */
|
if (num == 0) /* Nothing to be copied */
|
||||||
return 0;
|
return 0;
|
||||||
if ((unsigned int) ssi + num > sblk->datalen)
|
if (ssi + num > sblk->datalen)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = dblk->datalen;
|
dsi = dblk->datalen;
|
||||||
@@ -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 || (unsigned long) 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;
|
||||||
}
|
}
|
||||||
@@ -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 */
|
||||||
@@ -991,14 +997,14 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
|
|||||||
num = snum->num.len - ssi;
|
num = snum->num.len - ssi;
|
||||||
if (num == 0) /* Nothing to be copied */
|
if (num == 0) /* Nothing to be copied */
|
||||||
return 0;
|
return 0;
|
||||||
if ((unsigned long) ssi + num > snum->num.len)
|
if (ssi + num > snum->num.len)
|
||||||
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 */
|
||||||
@@ -1044,11 +1050,11 @@ copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi, NUMBER **re
|
|||||||
num = sblk->datalen - ssi;
|
num = sblk->datalen - ssi;
|
||||||
if (num == 0) /* Nothing to be copied */
|
if (num == 0) /* Nothing to be copied */
|
||||||
return 0;
|
return 0;
|
||||||
if ((unsigned long) ssi + num > sblk->datalen)
|
if (ssi + num > sblk->datalen)
|
||||||
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;
|
||||||
|
|
||||||
|
6
blkcpy.h
6
blkcpy.h
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: blkcpy.h,v 29.1 1999/12/14 09:15:29 chongo Exp $
|
* @(#) $Id: blkcpy.h,v 29.2 2000/06/07 14:02:13 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
|
||||||
* File existed as early as: 1997
|
* File existed as early as: 1997
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
10
block.c
10
block.c
@@ -19,15 +19,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: block.c,v 29.1 1999/12/14 09:15:29 chongo Exp $
|
* @(#) $Id: block.c,v 29.3 2006/05/01 19:16:57 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
|
||||||
* File existed as early as: 1997
|
* File existed as early as: 1997
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -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:
|
||||||
|
8
block.h
8
block.h
@@ -19,15 +19,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: block.h,v 29.1 1999/12/14 09:15:30 chongo Exp $
|
* @(#) $Id: block.h,v 29.2 2000/06/07 14:02:13 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
|
||||||
* File existed as early as: 1997
|
* File existed as early as: 1997
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: byteswap.c,v 29.1 1999/12/14 09:15:30 chongo Exp $
|
* @(#) $Id: byteswap.c,v 29.2 2000/06/07 14:02:13 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
14
byteswap.h
14
byteswap.h
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: byteswap.h,v 29.1 1999/12/14 09:15:30 chongo Exp $
|
* @(#) $Id: byteswap.h,v 29.4 2001/06/08 21:00:58 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -33,7 +33,11 @@
|
|||||||
#define __BYTESWAP_H__
|
#define __BYTESWAP_H__
|
||||||
|
|
||||||
|
|
||||||
#include "longbits.h"
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
|
# include "longbits.h"
|
||||||
|
#else
|
||||||
|
# include <calc/longbits.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
199
cal/Makefile
199
cal/Makefile
@@ -18,15 +18,15 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.1 $
|
# @(#) $Revision: 29.18 $
|
||||||
# @(#) $Id: Makefile,v 29.1 1999/12/14 09:15:30 chongo Exp $
|
# @(#) $Id: Makefile,v 29.18 2006/05/20 19:32:40 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
|
||||||
# File existed as early as: 1991
|
# File existed as early as: 1991
|
||||||
#
|
#
|
||||||
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
#
|
#
|
||||||
# calculator by David I. Bell with help/mods from others
|
# calculator by David I. Bell with help/mods from others
|
||||||
# Makefile by Landon Curt Noll
|
# Makefile by Landon Curt Noll
|
||||||
@@ -36,15 +36,120 @@
|
|||||||
SHELL = /bin/sh
|
SHELL = /bin/sh
|
||||||
MAKE_FILE = Makefile
|
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.
|
||||||
#
|
####
|
||||||
# where to install things
|
|
||||||
TOPDIR= /usr/local/lib
|
|
||||||
#TOPDIR= /usr/lib
|
|
||||||
#TOPDIR= /usr/libdata
|
|
||||||
|
|
||||||
LIBDIR= ${TOPDIR}/calc
|
# Where the system include (.h) files are kept
|
||||||
|
#
|
||||||
|
# For DJGPP, select:
|
||||||
|
#
|
||||||
|
# INCDIR= /dev/env/DJDIR/include
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# INCDIR= /usr/include
|
||||||
|
#
|
||||||
|
|
||||||
|
#INCDIR= /usr/local/include
|
||||||
|
#INCDIR= /dev/env/DJDIR/include
|
||||||
|
INCDIR= /usr/include
|
||||||
|
|
||||||
|
# where to install calc realted things
|
||||||
|
#
|
||||||
|
# ${BINDIR} where to install calc binary files
|
||||||
|
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||||
|
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# For DJGPP, select:
|
||||||
|
#
|
||||||
|
# BINDIR= /dev/env/DJDIR/bin
|
||||||
|
# LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
# CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
#BINDIR= /usr/local/bin
|
||||||
|
#BINDIR= /dev/env/DJDIR/bin
|
||||||
|
BINDIR= /usr/bin
|
||||||
|
|
||||||
|
#LIBDIR= /usr/local/lib
|
||||||
|
#LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
LIBDIR= /usr/lib
|
||||||
|
|
||||||
|
#CALC_SHAREDIR= /usr/local/lib/calc
|
||||||
|
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
CALC_SHAREDIR= /usr/share/calc
|
||||||
|
|
||||||
|
# By default, these values are based CALC_SHAREDIR, INCDIR, BINDIR
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# ${HELPDIR} where the help directory is installed
|
||||||
|
# ${CALC_INCDIR} where the calc include files are installed
|
||||||
|
# ${CUSTOMCALDIR} where custom *.cal files are installed
|
||||||
|
# ${CUSTOMHELPDIR} where custom help files are installed
|
||||||
|
# ${CUSTOMINCPDIR} where custom .h files are installed
|
||||||
|
# ${SCRIPTDIR} where calc shell scripts are installed
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
# CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
# CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
# CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
# CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
|
# SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
#
|
||||||
|
HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
|
SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
|
||||||
|
# T - top level directory under which calc will be installed
|
||||||
|
#
|
||||||
|
# The calc install is performed under $T, the calc build is
|
||||||
|
# performed under /. The purpose for $T is to allow someone
|
||||||
|
# to install calc somewhere other than into the system area.
|
||||||
|
#
|
||||||
|
# For example, if:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
# and if:
|
||||||
|
#
|
||||||
|
# T= /var/tmp/testing
|
||||||
|
#
|
||||||
|
# Then the installation locations will be:
|
||||||
|
#
|
||||||
|
# calc binary files: /var/tmp/testing/usr/bin
|
||||||
|
# calc link library: /var/tmp/testing/usr/lib
|
||||||
|
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||||
|
# ... etc ... /var/tmp/testing/...
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
# calc is installed under $T, as if one had to chroot under
|
||||||
|
# $T for calc to operate.
|
||||||
|
#
|
||||||
|
# If in doubt, use T=
|
||||||
|
#
|
||||||
|
T=
|
||||||
|
|
||||||
# Makefile debug
|
# Makefile debug
|
||||||
#
|
#
|
||||||
@@ -57,6 +162,7 @@ Q=@
|
|||||||
# standard tools
|
# standard tools
|
||||||
#
|
#
|
||||||
CHMOD= chmod
|
CHMOD= chmod
|
||||||
|
CMP= cmp
|
||||||
|
|
||||||
# The calc files to install
|
# The calc files to install
|
||||||
#
|
#
|
||||||
@@ -64,13 +170,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 xx_print.cal natnumset.cal qtime.cal test8400.cal \
|
randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.cal \
|
||||||
test8500.cal
|
test8400.cal test8500.cal test8600.cal chi.cal intfile.cal screen.cal \
|
||||||
|
dotest.cal set8700.cal set8700.line
|
||||||
|
|
||||||
# These files are found (but not built) in the distribution
|
# These files are found (but not built) in the distribution
|
||||||
#
|
#
|
||||||
@@ -102,8 +209,10 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
|
|||||||
##
|
##
|
||||||
|
|
||||||
distlist: ${DISTLIST}
|
distlist: ${DISTLIST}
|
||||||
${Q}for i in ${DISTLIST}; do \
|
${Q}for i in ${DISTLIST} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo cal/$$i; \
|
echo cal/$$i; \
|
||||||
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
distdir:
|
distdir:
|
||||||
@@ -116,34 +225,54 @@ calcliblist:
|
|||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# rpm rules
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
echo_inst_files:
|
||||||
|
${Q}for i in ${CALC_FILES} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
|
echo __file__ ${CALC_SHAREDIR}/$$i; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# Utility rules
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|
||||||
clobber:
|
clobber:
|
||||||
rm -f .all
|
rm -f .all
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
-${Q}if [ ! -d ${TOPDIR} ]; then \
|
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \
|
||||||
echo mkdir ${TOPDIR}; \
|
echo mkdir $T${CALC_SHAREDIR}; \
|
||||||
mkdir ${TOPDIR}; \
|
mkdir $T${CALC_SHAREDIR}; \
|
||||||
|
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${CALC_SHAREDIR}"; \
|
||||||
|
mkdir -p "$T${CALC_SHAREDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \
|
||||||
|
${CHMOD} 0755 $T${CALC_SHAREDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
-${Q}if [ ! -d ${LIBDIR} ]; then \
|
${Q}for i in ${CALC_FILES} /dev/null; do \
|
||||||
echo mkdir ${LIBDIR}; \
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
mkdir ${LIBDIR}; \
|
continue; \
|
||||||
else \
|
fi; \
|
||||||
true; \
|
if ${CMP} -s $$i $T${CALC_SHAREDIR}/$$i; then \
|
||||||
fi
|
true; \
|
||||||
${Q}for i in ${CALC_FILES}; do \
|
else \
|
||||||
echo rm -f ${LIBDIR}/$$i; \
|
rm -f $T${CALC_SHAREDIR}/$$i.new; \
|
||||||
rm -f ${LIBDIR}/$$i; \
|
cp -f $$i $T${CALC_SHAREDIR}/$$i.new; \
|
||||||
echo cp $$i ${LIBDIR}; \
|
${CHMOD} 0444 $T${CALC_SHAREDIR}/$$i.new; \
|
||||||
cp $$i ${LIBDIR}; \
|
mv -f $T${CALC_SHAREDIR}/$$i.new $T${CALC_SHAREDIR}/$$i; \
|
||||||
echo ${CHMOD} 0444 ${LIBDIR}/$$i; \
|
echo "installed $T${CALC_SHAREDIR}/$$i"; \
|
||||||
${CHMOD} 0444 ${LIBDIR}/$$i; \
|
fi; \
|
||||||
done
|
done
|
||||||
${Q}echo remove files that are obsolete
|
|
||||||
-rm -f nextprime.cal nextprim.cal
|
|
||||||
-rm -f test1000.cal test2000.cal ${LIBDIR}/test2000.cal
|
|
||||||
-rm -f ${LIBDIR}/nextprime.cal ${LIBDIR}/nextprim.cal
|
|
||||||
-rm -f ${LIBDIR}/test1000.cal ${LIBDIR}/cryrand.cal
|
|
||||||
|
255
cal/README
255
cal/README
@@ -1,7 +1,7 @@
|
|||||||
Calc standard resource files
|
Calc standard resource files
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
To load a reosurce file, try:
|
To load a resource file, try:
|
||||||
|
|
||||||
read filename
|
read filename
|
||||||
|
|
||||||
@@ -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.
|
||||||
@@ -37,9 +37,10 @@ be useful!
|
|||||||
|
|
||||||
If you write something that you think is useful, please send it to:
|
If you write something that you think is useful, please send it to:
|
||||||
|
|
||||||
calc-tester at postofc dot corp dot sgi dot com
|
calc-contrib at asthe dot com
|
||||||
|
|
||||||
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||||
|
|
||||||
By convention, a resource file only defines and/or initializes functions,
|
By convention, a resource file only defines and/or initializes functions,
|
||||||
objects and variables. (The regress.cal and testxxx.cal regression test
|
objects and variables. (The regress.cal and testxxx.cal regression test
|
||||||
@@ -58,12 +59,12 @@ files have already been read, the read -once will act as a noop.
|
|||||||
|
|
||||||
The "resource_debug" parameter is intended for controlling the possible
|
The "resource_debug" parameter is intended for controlling the possible
|
||||||
display of special information relating to functions, objects, and
|
display of special information relating to functions, objects, and
|
||||||
other structures created by instructions in calc resoure files.
|
other structures created by instructions in calc resource files.
|
||||||
Zero value of config("resource_debug") means that no such information
|
Zero value of config("resource_debug") means that no such information
|
||||||
is displayed. For other values, the non-zero bits which currently
|
is displayed. For other values, the non-zero bits which currently
|
||||||
have meanings are as follows:
|
have meanings are as follows:
|
||||||
|
|
||||||
n Meaning of bit n of config("resource_debug")
|
n Meaning of bit n of config("resource_debug")
|
||||||
|
|
||||||
0 When a function is defined, redefined or undefined at
|
0 When a function is defined, redefined or undefined at
|
||||||
interactive level, a message saying what has been done
|
interactive level, a message saying what has been done
|
||||||
@@ -73,6 +74,12 @@ have meanings are as follows:
|
|||||||
the reading of a file, a message saying what has been done
|
the reading of a file, a message saying what has been done
|
||||||
is displayed.
|
is displayed.
|
||||||
|
|
||||||
|
2 Show func will display more information about a functions
|
||||||
|
arguments as well as more argument sdummary information.
|
||||||
|
|
||||||
|
3 During execution, allow calc standard resource files
|
||||||
|
to output additional debugging information.
|
||||||
|
|
||||||
The value for config("resource_debug") in both oldstd and newstd is 3,
|
The value for config("resource_debug") in both oldstd and newstd is 3,
|
||||||
but if calc is invoked with the -d flag, its initial value is zero.
|
but if calc is invoked with the -d flag, its initial value is zero.
|
||||||
Thus, if calc is started without the -d flag, until config("resource_debug")
|
Thus, if calc is started without the -d flag, until config("resource_debug")
|
||||||
@@ -96,6 +103,14 @@ 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,
|
||||||
|
we recommend that you check for bit 3 of the config("resource_debug")
|
||||||
|
before printing the debug statement:
|
||||||
|
|
||||||
|
if (config("resource_debug") & 8) {
|
||||||
|
print "DEBUG: This a sample debug statement";
|
||||||
|
}
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
The following is a brief description of some of the calc resource files
|
The following is a brief description of some of the calc resource files
|
||||||
@@ -115,6 +130,10 @@ bernoulli.cal
|
|||||||
|
|
||||||
Calculate the nth Bernoulli number.
|
Calculate the nth Bernoulli number.
|
||||||
|
|
||||||
|
NOTE: There is now a bernoulli() builtin function. This file is
|
||||||
|
left here for backward compatibility and now simply returns
|
||||||
|
the buildin function.
|
||||||
|
|
||||||
|
|
||||||
bigprime.cal
|
bigprime.cal
|
||||||
|
|
||||||
@@ -123,6 +142,24 @@ bigprime.cal
|
|||||||
A prime test, base a, on p*2^x+1 for even x>m.
|
A prime test, base a, on p*2^x+1 for even x>m.
|
||||||
|
|
||||||
|
|
||||||
|
chi.cal
|
||||||
|
|
||||||
|
Z(x[, eps])
|
||||||
|
P(x[, eps])
|
||||||
|
chi_prob(chi_sq, v[, eps])
|
||||||
|
|
||||||
|
Computes the Probability, given the Null Hypothesis, that a given
|
||||||
|
Chi squared values >= chi_sq with v 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
|
||||||
|
a sifficently small error term as the degress gets large (>100).
|
||||||
|
|
||||||
|
The Z(x) and P(x) are internal statistical funcions.
|
||||||
|
|
||||||
|
eps is an optional epsilon() like error term.
|
||||||
|
|
||||||
|
|
||||||
chrem.cal
|
chrem.cal
|
||||||
|
|
||||||
chrem(r1,m1 [,r2,m2, ...])
|
chrem(r1,m1 [,r2,m2, ...])
|
||||||
@@ -143,6 +180,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)
|
||||||
@@ -158,6 +227,41 @@ hello.cal
|
|||||||
http://www.latech.edu/~acm/helloworld/calc.html
|
http://www.latech.edu/~acm/helloworld/calc.html
|
||||||
|
|
||||||
|
|
||||||
|
intfile.cal
|
||||||
|
|
||||||
|
file2be(filename)
|
||||||
|
|
||||||
|
Read filename and return an integer that is built from the
|
||||||
|
octets in that file in Big Endian order. The first octets
|
||||||
|
of the file become the most significant bits of the integer.
|
||||||
|
|
||||||
|
file2le(filename)
|
||||||
|
|
||||||
|
Read filename and return an integer that is built from the
|
||||||
|
octets in that file in Little Endian order. The first octets
|
||||||
|
of the file become the most significant bits of the integer.
|
||||||
|
|
||||||
|
be2file(v, filename)
|
||||||
|
|
||||||
|
Write the absolute value of v into filename in Big Endian order.
|
||||||
|
The v argument must be on integer. The most significant bits
|
||||||
|
of the integer become the first octets of the file.
|
||||||
|
|
||||||
|
le2file(v, filename)
|
||||||
|
|
||||||
|
Write the absolute value of v into filename in Little Endian order.
|
||||||
|
The v argument must be on integer. The least significant bits
|
||||||
|
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)
|
||||||
@@ -273,7 +377,7 @@ pell.cal
|
|||||||
pell(D)
|
pell(D)
|
||||||
|
|
||||||
Solve Pell's equation; Returns the solution X to: X^2 - D * Y^2 = 1.
|
Solve Pell's equation; Returns the solution X to: X^2 - D * Y^2 = 1.
|
||||||
Type the solution to pells equation for a particular D.
|
Type the solution to Pell's equation for a particular D.
|
||||||
|
|
||||||
|
|
||||||
pi.cal
|
pi.cal
|
||||||
@@ -287,7 +391,7 @@ pi.cal
|
|||||||
The piforever() prints digits of pi, nicely formatted, for as long
|
The piforever() prints digits of pi, nicely formatted, for as long
|
||||||
as your free memory space and system up time allows.
|
as your free memory space and system up time allows.
|
||||||
|
|
||||||
The piforever() funcion (written by Klaus Alexander Seistrup
|
The piforever() function (written by Klaus Alexander Seistrup
|
||||||
<klaus@seistrup.dk>) was inspired by an algorithm conceived by
|
<klaus@seistrup.dk>) was inspired by an algorithm conceived by
|
||||||
Lambert Meertens. See also the ABC Programmer's Handbook, by Geurts,
|
Lambert Meertens. See also the ABC Programmer's Handbook, by Geurts,
|
||||||
Meertens & Pemberton, published by Prentice-Hall (UK) Ltd., 1990.
|
Meertens & Pemberton, published by Prentice-Hall (UK) Ltd., 1990.
|
||||||
@@ -355,7 +459,7 @@ quat.cal
|
|||||||
quat_shift(a, b)
|
quat_shift(a, b)
|
||||||
|
|
||||||
Calculate using quaternions of the form: a + bi + cj + dk. In these
|
Calculate using quaternions of the form: a + bi + cj + dk. In these
|
||||||
functions, quaternians are manipulated in the form: s + v, where
|
functions, quaternions are manipulated in the form: s + v, where
|
||||||
s is a scalar and v is a vector of size 3.
|
s is a scalar and v is a vector of size 3.
|
||||||
|
|
||||||
|
|
||||||
@@ -385,7 +489,7 @@ randombitrun.cal
|
|||||||
randombitrun([run_cnt])
|
randombitrun([run_cnt])
|
||||||
|
|
||||||
Using randombit(1) to generate a sequence of random bits, determine if
|
Using randombit(1) to generate a sequence of random bits, determine if
|
||||||
the number and kength of identical bits runs match what is expected.
|
the number and length of identical bits runs match what is expected.
|
||||||
By default, run_cnt is to test the next 65536 random values.
|
By default, run_cnt is to test the next 65536 random values.
|
||||||
|
|
||||||
This tests the Blum-Blum-Shub generator.
|
This tests the Blum-Blum-Shub generator.
|
||||||
@@ -416,6 +520,16 @@ randrun.cal
|
|||||||
|
|
||||||
This tests the a55 generator.
|
This tests the a55 generator.
|
||||||
|
|
||||||
|
repeat.cal
|
||||||
|
|
||||||
|
repeat(digit_set, repeat_count)
|
||||||
|
|
||||||
|
Return the value of the digit_set repeated repeat_count times.
|
||||||
|
Both digit_set and repeat_count must be integers > 0.
|
||||||
|
|
||||||
|
For example repeat(423,5) returns the value 423423423423423,
|
||||||
|
which is the digit_set 423 repeated 5 times.
|
||||||
|
|
||||||
|
|
||||||
regress.cal
|
regress.cal
|
||||||
|
|
||||||
@@ -423,6 +537,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])
|
||||||
@@ -441,6 +607,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)
|
||||||
@@ -488,7 +672,7 @@ test1700.cal
|
|||||||
|
|
||||||
value
|
value
|
||||||
|
|
||||||
This resoure files is used by regress.cal to test the read and use keywords.
|
This resource files is used by regress.cal to test the read and use keywords.
|
||||||
|
|
||||||
|
|
||||||
test2600.cal
|
test2600.cal
|
||||||
@@ -513,7 +697,7 @@ test2600.cal
|
|||||||
checkresult(x, y, z, a)
|
checkresult(x, y, z, a)
|
||||||
test2600(verbose, tnum)
|
test2600(verbose, tnum)
|
||||||
|
|
||||||
This resoure files is used by regress.cal to test some of builtin functions
|
This resource files is used by regress.cal to test some of builtin functions
|
||||||
in terms of accuracy and roundoff.
|
in terms of accuracy and roundoff.
|
||||||
|
|
||||||
|
|
||||||
@@ -536,7 +720,7 @@ test2700.cal
|
|||||||
iscomsq(x)
|
iscomsq(x)
|
||||||
test2700(verbose, tnum)
|
test2700(verbose, tnum)
|
||||||
|
|
||||||
This resoure files is used by regress.cal to test sqrt() for real and
|
This resource files is used by regress.cal to test sqrt() for real and
|
||||||
complex values.
|
complex values.
|
||||||
|
|
||||||
|
|
||||||
@@ -624,7 +808,7 @@ test4000.cal
|
|||||||
test4000(verbose, tnum) defined
|
test4000(verbose, tnum) defined
|
||||||
|
|
||||||
This resource file is used by regress.cal to test ptest, nextcand and
|
This resource file is used by regress.cal to test ptest, nextcand and
|
||||||
prevcand buildins.
|
prevcand builtins.
|
||||||
|
|
||||||
test4100.cal
|
test4100.cal
|
||||||
|
|
||||||
@@ -676,6 +860,35 @@ test5200.cal
|
|||||||
This resource file is used by regress.cal to test the fix of a
|
This resource file is used by regress.cal to test the fix of a
|
||||||
global/static bug.
|
global/static bug.
|
||||||
|
|
||||||
|
test8400.cal
|
||||||
|
|
||||||
|
test8400() defined
|
||||||
|
|
||||||
|
This resource file is used by regress.cal to check for quit-based
|
||||||
|
memory leaks.
|
||||||
|
|
||||||
|
test8500.cal
|
||||||
|
|
||||||
|
global err_8500
|
||||||
|
global L_8500
|
||||||
|
global ver_8500
|
||||||
|
global old_seed_8500
|
||||||
|
global cfg_8500
|
||||||
|
onetest_8500(a,b,rnd) defined
|
||||||
|
divmod_8500(N, M1, M2, testnum) defined
|
||||||
|
|
||||||
|
This resource file is used by regress.cal to the // and % operators.
|
||||||
|
|
||||||
|
test8600.cal
|
||||||
|
|
||||||
|
global min_8600
|
||||||
|
global max_8600
|
||||||
|
global hash_8600
|
||||||
|
global hmean_8600
|
||||||
|
|
||||||
|
This resource file is used by regress.cal to test a change of
|
||||||
|
allowing up to 1024 args to be passed to a builtin function.
|
||||||
|
|
||||||
unitfrac.cal
|
unitfrac.cal
|
||||||
|
|
||||||
unitfrac(x)
|
unitfrac(x)
|
||||||
@@ -704,7 +917,7 @@ xx_print.cal
|
|||||||
|
|
||||||
Demo for the xx_print object routines.
|
Demo for the xx_print object routines.
|
||||||
|
|
||||||
## Copyright (C) 1999 David I. Bell and Landon Curt Noll
|
## Copyright (C) 2000 David I. Bell and Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Primary author: Landon Curt Noll
|
## Primary author: Landon Curt Noll
|
||||||
##
|
##
|
||||||
@@ -722,12 +935,12 @@ xx_print.cal
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.1 $
|
## @(#) $Revision: 29.12 $
|
||||||
## @(#) $Id: README,v 29.1 1999/12/14 09:15:30 chongo Exp $
|
## @(#) $Id: README,v 29.12 2006/05/21 04:41:09 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
|
||||||
## File existed as early as: before 1990
|
## File existed as early as: before 1990
|
||||||
##
|
##
|
||||||
## chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
## Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: beer.cal,v 29.1 1999/12/14 09:15:30 chongo Exp $
|
* @(#) $Id: beer.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1996
|
* File existed as early as: 1996
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* bernoulli - clculate the Nth Bernoulli number B(n)
|
* bernoulli - clculate the Nth Bernoulli number B(n)
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell
|
* Copyright (C) 2000 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
|
||||||
@@ -17,24 +17,28 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: bernoulli.cal,v 29.1 1999/12/14 09:15:30 chongo Exp $
|
* @(#) $Id: bernoulli.cal,v 29.3 2000/12/17 12:26:04 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
|
||||||
* File existed as early as: 1991
|
* File existed as early as: 1991
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calculate the Nth Bernoulli number B(n).
|
* Calculate the Nth Bernoulli number B(n).
|
||||||
* This uses the following symbolic formula to calculate B(n):
|
*
|
||||||
|
* NOTE: This is now a bulitin function.
|
||||||
|
*
|
||||||
|
* The non-buildin code used the following symbolic formula to calculate B(n):
|
||||||
*
|
*
|
||||||
* (b+1)^(n+1) - b^(n+1) = 0
|
* (b+1)^(n+1) - b^(n+1) = 0
|
||||||
*
|
*
|
||||||
* where b is a dummy value, and each power b^i gets replaced by B(i).
|
* where b is a dummy value, and each power b^i gets replaced by B(i).
|
||||||
* For example, for n = 3:
|
* For example, for n = 3:
|
||||||
|
*
|
||||||
* (b+1)^4 - b^4 = 0
|
* (b+1)^4 - b^4 = 0
|
||||||
* b^4 + 4*b^3 + 6*b^2 + 4*b + 1 - b^4 = 0
|
* b^4 + 4*b^3 + 6*b^2 + 4*b + 1 - b^4 = 0
|
||||||
* 4*b^3 + 6*b^2 + 4*b + 1 = 0
|
* 4*b^3 + 6*b^2 + 4*b + 1 = 0
|
||||||
@@ -48,11 +52,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
static Bnmax;
|
static Bnmax;
|
||||||
static mat Bn[1001];
|
static mat Bn[1001];
|
||||||
|
*/
|
||||||
|
|
||||||
define B(n)
|
define B(n)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
local nn, np1, i, sum, mulval, divval, combval;
|
local nn, np1, i, sum, mulval, divval, combval;
|
||||||
|
|
||||||
if (!isint(n) || (n < 0))
|
if (!isint(n) || (n < 0))
|
||||||
@@ -85,4 +92,6 @@ define B(n)
|
|||||||
}
|
}
|
||||||
Bnmax = n;
|
Bnmax = n;
|
||||||
return Bn[n];
|
return Bn[n];
|
||||||
|
*/
|
||||||
|
return bernoulli(n);
|
||||||
}
|
}
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: bigprime.cal,v 29.1 1999/12/14 09:15:30 chongo Exp $
|
* @(#) $Id: bigprime.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1991
|
* File existed as early as: 1991
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -16,14 +16,14 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.1 $
|
# @(#) $Revision: 29.2 $
|
||||||
# @(#) $Id: bindings,v 29.1 1999/12/14 09:15:30 chongo Exp $
|
# @(#) $Id: bindings,v 29.2 2000/06/07 14:02:25 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
|
||||||
# File existed as early as: 1993
|
# File existed as early as: 1993
|
||||||
#
|
#
|
||||||
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
|
||||||
# NOTE: This facility is ignored if calc was compiled with GNU-readline.
|
# NOTE: This facility is ignored if calc was compiled with GNU-readline.
|
||||||
# In that case, the standard readline mechanisms (see readline(3))
|
# In that case, the standard readline mechanisms (see readline(3))
|
||||||
|
251
cal/chi.cal
Normal file
251
cal/chi.cal
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
/*
|
||||||
|
* chi - chi^2 probabilities with degrees of freedom for null hypothesis
|
||||||
|
*
|
||||||
|
* Copyright (C) 2001 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.2 $
|
||||||
|
* @(#) $Id: chi.cal,v 29.2 2001/04/08 10:21:23 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/chi.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2001/03/27 14:10:11
|
||||||
|
* File existed as early as: 2001
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Z(x)
|
||||||
|
*
|
||||||
|
* From Handbook of Mathematical Functions
|
||||||
|
* 10th printing, Dec 1972 with corrections
|
||||||
|
* National Bureau of Standards
|
||||||
|
*
|
||||||
|
* Section 26.2.1, p931.
|
||||||
|
*/
|
||||||
|
define Z(x, eps_term)
|
||||||
|
{
|
||||||
|
local eps; /* error term */
|
||||||
|
|
||||||
|
/* obtain the error term */
|
||||||
|
if (isnull(eps_term)) {
|
||||||
|
eps = epsilon();
|
||||||
|
} else {
|
||||||
|
eps = eps_term;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* compute Z(x) value */
|
||||||
|
return exp(-x*x/2, eps) / sqrt(2*pi(eps), eps);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* P(x[, eps]) asymtotic P(x) expansion for x>0 to an given epsilon error term
|
||||||
|
*
|
||||||
|
* NOTE: If eps is omitted, the stored epsilon value is used.
|
||||||
|
*
|
||||||
|
* From Handbook of Mathematical Functions
|
||||||
|
* 10th printing, Dec 1972 with corrections
|
||||||
|
* National Bureau of Standards
|
||||||
|
*
|
||||||
|
* 26.2.11, p932:
|
||||||
|
*
|
||||||
|
* P(x) = 1/2 + Z(x) * sum(n=0; n < infinity){x^(2*n+1)/(1*3*5*...(2*n+1)};
|
||||||
|
*
|
||||||
|
* We continue the fraction until it is less than epsilon error term.
|
||||||
|
*
|
||||||
|
* Also note 26.2.5:
|
||||||
|
*
|
||||||
|
* P(x) + Q(x) = 1
|
||||||
|
*/
|
||||||
|
define P(x, eps_term)
|
||||||
|
{
|
||||||
|
local eps; /* error term */
|
||||||
|
local s; /* sum */
|
||||||
|
local x2; /* x^2 */
|
||||||
|
local x_term; /* x^(2*r+1) */
|
||||||
|
local odd_prod; /* 1*3*5* ... */
|
||||||
|
local odd_term; /* next odd value to multiply into odd_prod */
|
||||||
|
local term; /* the recent term added to the sum */
|
||||||
|
|
||||||
|
/* obtain the error term */
|
||||||
|
if (isnull(eps_term)) {
|
||||||
|
eps = epsilon();
|
||||||
|
} else {
|
||||||
|
eps = eps_term;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* firewall */
|
||||||
|
if (x <= 0) {
|
||||||
|
if (x == 0) {
|
||||||
|
return 0; /* hack */
|
||||||
|
} else {
|
||||||
|
quit "Q(x[,eps]) 1st argument must be >= 0";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (eps <= 0) {
|
||||||
|
quit "Q(x[,eps]) 2nd argument must be > 0";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* aproximate sum(n=0; n < infinity){x^(2*n+1)/(1*3*5*...(2*n+1)}
|
||||||
|
*/
|
||||||
|
x2 = x*x;
|
||||||
|
x_term = x;
|
||||||
|
s = x_term; /* 1st term */
|
||||||
|
odd_term = 1;
|
||||||
|
odd_prod = 1;
|
||||||
|
do {
|
||||||
|
|
||||||
|
/* compute the term */
|
||||||
|
odd_term += 2;
|
||||||
|
odd_prod *= odd_term;
|
||||||
|
x_term *= x2;
|
||||||
|
term = x_term / odd_prod;
|
||||||
|
s += term;
|
||||||
|
|
||||||
|
} while (term >= eps);
|
||||||
|
|
||||||
|
/* apply term and factor */
|
||||||
|
return 0.5 + Z(x,eps)*s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* chi_prob(chi_sq, v[, eps]) - Prob of >= chi^2 with v degrees of freedom
|
||||||
|
*
|
||||||
|
* Computes the Probability, given the Null Hypothesis, that a given
|
||||||
|
* Chi squared values >= chi_sq with v 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
|
||||||
|
* a sifficently small error term as the degress gets large (>100).
|
||||||
|
*
|
||||||
|
* NOTE: This function does not work well with odd degrees of freedom.
|
||||||
|
* Can somebody help / find a bug / provide a better method of
|
||||||
|
* this odd degrees of freedom case?
|
||||||
|
*
|
||||||
|
* NOTE: This function works well with even degrees of freedom. However
|
||||||
|
* when the even degrees gets large (say, as you approach 100), you
|
||||||
|
* need to increase your error term.
|
||||||
|
*
|
||||||
|
* From Handbook of Mathematical Functions
|
||||||
|
* 10th printing, Dec 1972 with corrections
|
||||||
|
* National Bureau of Standards
|
||||||
|
*
|
||||||
|
* Section 26.4.4, p941:
|
||||||
|
*
|
||||||
|
* For odd v:
|
||||||
|
*
|
||||||
|
* Q(chi_sq, v) = 2*Q(chi) + 2*Z(chi) * (
|
||||||
|
* sum(r=1, r<=(r-1)/2) {(chi_sq^r/chi) / (1*3*5*...(2*r-1)});
|
||||||
|
*
|
||||||
|
* chi = sqrt(chi_sq)
|
||||||
|
*
|
||||||
|
* NOTE: Q(x) = 1-P(x)
|
||||||
|
*
|
||||||
|
* Section 26.4.5, p941.
|
||||||
|
*
|
||||||
|
* For even v:
|
||||||
|
*
|
||||||
|
* Q(chi_sq, v) = sqrt(2*pi()) * Z(chi) * ( 1 +
|
||||||
|
* sum(r=1, r=((v-2)/2)) { chi_sq^r / (2*4*...*(2r)) } );
|
||||||
|
*
|
||||||
|
* chi = sqrt(chi_sq)
|
||||||
|
*
|
||||||
|
* Observe that:
|
||||||
|
*
|
||||||
|
* Z(x) = exp(-x*x/2) / sqrt(2*pi()); (Section 26.2.1, p931)
|
||||||
|
*
|
||||||
|
* and thus:
|
||||||
|
*
|
||||||
|
* sqrt(2*pi()) * Z(chi) =
|
||||||
|
* sqrt(2*pi()) * Z(sqrt(chi_sq)) =
|
||||||
|
* sqrt(2*pi()) * exp(-sqrt(chi_sq)*sqrt(chi_sq)/2) / sqrt(2*pi()) =
|
||||||
|
* exp(-sqrt(chi_sq)*sqrt(chi_sq)/2) =
|
||||||
|
* exp(-sqrt(-chi_sq/2)
|
||||||
|
*
|
||||||
|
* So:
|
||||||
|
*
|
||||||
|
* Q(chi_sq, v) = exp(-sqrt(-chi_sq/2) * ( 1 + sum(....){...} );
|
||||||
|
*/
|
||||||
|
define chi_prob(chi_sq, v, eps_term)
|
||||||
|
{
|
||||||
|
local eps; /* error term */
|
||||||
|
local r; /* index in finite sum */
|
||||||
|
local r_lim; /* limit value for r */
|
||||||
|
local s; /* sum */
|
||||||
|
local d; /* demoninator (2*4*6*... or 1*3*5...) */
|
||||||
|
local chi_term; /* chi_sq^r */
|
||||||
|
local ret; /* return value */
|
||||||
|
|
||||||
|
/* obtain the error term */
|
||||||
|
if (isnull(eps_term)) {
|
||||||
|
eps = epsilon();
|
||||||
|
} else {
|
||||||
|
eps = eps_term;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* odd degrees of freedom
|
||||||
|
*/
|
||||||
|
if (isodd(v)) {
|
||||||
|
|
||||||
|
local chi; /* sqrt(chi_sq) */
|
||||||
|
|
||||||
|
/* setup for sum */
|
||||||
|
s = 1;
|
||||||
|
d = 1;
|
||||||
|
chi = sqrt(abs(chi_sq), eps);
|
||||||
|
chi_term = chi;
|
||||||
|
r_lim = (v-1)/2;
|
||||||
|
|
||||||
|
/* compute sum(r=1, r=((v-1)/2)) {(chi_sq^r/chi) / (1*3*5...*(2r-1))} */
|
||||||
|
for (r=2; r <= r_lim; ++r) {
|
||||||
|
chi_term *= chi_sq;
|
||||||
|
d *= (2*r)-1;
|
||||||
|
s += chi_term/d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* apply term and factor, Q(x) = 1-P(x) */
|
||||||
|
ret = 2*(1-P(chi)) + 2*Z(chi)*s;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* even degrees of freedom
|
||||||
|
*/
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* setup for sum */
|
||||||
|
s =1;
|
||||||
|
d = 1;
|
||||||
|
chi_term = 1;
|
||||||
|
r_lim = (v-2)/2;
|
||||||
|
|
||||||
|
/* compute sum(r=1, r=((v-2)/2)) { chi_sq^r / (2*4*...*(2r)) } */
|
||||||
|
for (r=1; r <= r_lim; ++r) {
|
||||||
|
chi_term *= chi_sq;
|
||||||
|
d *= r*2;
|
||||||
|
s += chi_term/d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* apply factor - see observation in the main comment above */
|
||||||
|
ret = exp(-chi_sq/2, eps) * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: chrem.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: chrem.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1992
|
* File existed as early as: 1992
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
18
cal/deg.cal
18
cal/deg.cal
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: deg.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: deg.cal,v 29.4 2003/01/26 19:32:41 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ define dms(deg, min, sec)
|
|||||||
ans.deg = deg;
|
ans.deg = deg;
|
||||||
ans.min = min;
|
ans.min = min;
|
||||||
ans.sec = sec;
|
ans.sec = sec;
|
||||||
fixdms(&ans);
|
fixdms(ans);
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ define dms_add(a, b)
|
|||||||
ans.sec += b.sec;
|
ans.sec += b.sec;
|
||||||
} else
|
} else
|
||||||
ans.deg += b;
|
ans.deg += b;
|
||||||
fixdms(&ans);
|
fixdms(ans);
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,9 +75,9 @@ define dms_neg(a)
|
|||||||
{
|
{
|
||||||
local obj dms ans;
|
local obj dms ans;
|
||||||
|
|
||||||
ans.deg = -ans.deg;
|
ans.deg = -a.deg;
|
||||||
ans.min = -ans.min;
|
ans.min = -a.min;
|
||||||
ans.sec = -ans.sec;
|
ans.sec = -a.sec;
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ define dms_mul(a, b)
|
|||||||
ans.min = b.min * a;
|
ans.min = b.min * a;
|
||||||
ans.sec = b.sec * a;
|
ans.sec = b.sec * a;
|
||||||
}
|
}
|
||||||
fixdms(&ans);
|
fixdms(ans);
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
193
cal/dotest.cal
Normal file
193
cal/dotest.cal
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
/*
|
||||||
|
* dotest - test truth statements found in line tests of dotest_testline file
|
||||||
|
*
|
||||||
|
* This file was created by Ernest Bowen <ebowen at une dot edu dot au>
|
||||||
|
* and modified by Landon Curt Noll.
|
||||||
|
*
|
||||||
|
* This dotest_code has been placed in the public domain. Please do not
|
||||||
|
* copyright this dotest_code.
|
||||||
|
*
|
||||||
|
* ERNEST BOWEN AND LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||||||
|
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MER-
|
||||||
|
* CHANTABILITY AND FITNESS. IN NO EVENT SHALL LANDON CURT
|
||||||
|
* NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
||||||
|
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||||
|
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.2 $
|
||||||
|
* @(#) $Id: dotest.cal,v 29.2 2006/05/21 00:55:27 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/dotest.cal,v $
|
||||||
|
*
|
||||||
|
* This file is not covered under version 2.1 of the GNU LGPL.
|
||||||
|
*
|
||||||
|
* Under source dotest_code control: 2006/03/08 05:54:09
|
||||||
|
* File existed as early as: 2006
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* dotest - perform tests from dotest_testline file
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* dotest_file filename containing single test lines
|
||||||
|
* dotest_code regress.cal test number to use (def: 0)
|
||||||
|
* dotest_maxcond max error conditions allowed (def: <0 ==> 2^31-1)
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* number of line test failures
|
||||||
|
*
|
||||||
|
* NOTE: All variables used by the dotest() function start with "dotest_".
|
||||||
|
* The dotest_file and dotest_read should not use any variable
|
||||||
|
* that starts with "dotest_".
|
||||||
|
*/
|
||||||
|
define dotest(dotest_file, dotest_code = 0, dotest_maxcond = -1)
|
||||||
|
{
|
||||||
|
local dotest_f_file; /* open file containing test lines */
|
||||||
|
local dotest_testline; /* test line */
|
||||||
|
local dotest_testeval; /* eval value from dotest_testline test line */
|
||||||
|
local dotest_tmperrcnt; /* temp error count after line test */
|
||||||
|
local dotest_errcnt; /* total number of errors */
|
||||||
|
local dotest_failcnt; /* number of line tests failed */
|
||||||
|
local dotest_testnum; /* number of test lines evaluated */
|
||||||
|
local dotest_linenum; /* test line number */
|
||||||
|
local dotest_old_errmax; /* value of errmax() prior to calling */
|
||||||
|
local dotest_old_errcount; /* value of errcount() prior to calling */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* preserve calling stats
|
||||||
|
*/
|
||||||
|
dotest_old_errmax = errmax();
|
||||||
|
dotest_old_errcount = errcount(0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* initialize test accounting
|
||||||
|
*/
|
||||||
|
dotest_errcnt = errcount();
|
||||||
|
dotest_failcnt = 0;
|
||||||
|
dotest_testnum = 0;
|
||||||
|
dotest_linenum = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* setup error accounting for dotest
|
||||||
|
*/
|
||||||
|
if (dotest_maxcond >= 0 && dotest_maxcond < 2147483647) {
|
||||||
|
errmax(dotest_maxcond + dotest_old_errcount + 1),;
|
||||||
|
} else {
|
||||||
|
errmax(2147483647),;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open the test line file
|
||||||
|
*/
|
||||||
|
printf("%d-: opening line file: %d", dotest_code, dotest_file);
|
||||||
|
dotest_f_file = fpathopen(dotest_file, "r");
|
||||||
|
if (!isfile(dotest_f_file)) {
|
||||||
|
printf("**** Unable to file or open file \"%s\"\n",
|
||||||
|
dotest_file);
|
||||||
|
quit;
|
||||||
|
}
|
||||||
|
printf('%d: testing "%s"\n', dotest_code, dotest_file);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* perform dotest_testline test on each line of the file
|
||||||
|
*/
|
||||||
|
for (;;) {
|
||||||
|
|
||||||
|
/* get the next test line */
|
||||||
|
dotest_testline = fgets(dotest_f_file);
|
||||||
|
++dotest_linenum;
|
||||||
|
if (iserror(dotest_testline)) {
|
||||||
|
quit "**** Error while reading file";
|
||||||
|
} else if (isnull(dotest_testline)) {
|
||||||
|
/* EOF - end of test file */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* skip empty lines */
|
||||||
|
if (dotest_testline == "\n") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* evaluate the test line */
|
||||||
|
dotest_testeval = eval(dotest_testline);
|
||||||
|
|
||||||
|
/* ignore white space or comment lines */
|
||||||
|
if (isnull(dotest_testeval)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* look for test line parse errors */
|
||||||
|
if (iserror(dotest_testeval)) {
|
||||||
|
printf("**** evaluation error: ");
|
||||||
|
++dotest_failcnt;
|
||||||
|
|
||||||
|
/* look for test line dotest_failcnt */
|
||||||
|
} else if (dotest_testeval != 1) {
|
||||||
|
printf("**** did not return 1: ");
|
||||||
|
++dotest_failcnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* show the test line we just performed */
|
||||||
|
printf("%d-%d: %s", dotest_code, dotest_linenum, dotest_testline);
|
||||||
|
|
||||||
|
/* error accounting */
|
||||||
|
dotest_tmperrcnt = errcount() - dotest_errcnt;
|
||||||
|
if (dotest_tmperrcnt > 0) {
|
||||||
|
|
||||||
|
/* report any other errors */
|
||||||
|
if (dotest_tmperrcnt > 1) {
|
||||||
|
printf("%d-%d: NOTE: %d error conditions(s): %s\n",
|
||||||
|
dotest_code, dotest_linenum, dotest_tmperrcnt);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* report the calc error string */
|
||||||
|
printf("%d-%d: NOTE: last error string: %s\n",
|
||||||
|
dotest_code, dotest_linenum, strerror());
|
||||||
|
|
||||||
|
/* new error count level */
|
||||||
|
dotest_errcnt = errcount();
|
||||||
|
if (dotest_maxcond >= 0 &&
|
||||||
|
dotest_old_errcount-dotest_errcnt > dotest_maxcond) {
|
||||||
|
printf("%d-%d: total error conditions: %d > %d\n",
|
||||||
|
dotest_code, dotest_linenum,
|
||||||
|
dotest_maxcond, dotest_old_errcount-dotest_errcnt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* test the close of the line file
|
||||||
|
*/
|
||||||
|
printf("%d-: detected %d error condition(s), many of which may be OK\n",
|
||||||
|
dotest_code, dotest_old_errcount-dotest_errcnt);
|
||||||
|
printf("%d-: closing line file: %d\n", dotest_code, dotest_file);
|
||||||
|
fclose(dotest_f_file);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* test line file accounting
|
||||||
|
*/
|
||||||
|
if (dotest_failcnt > 0) {
|
||||||
|
printf("**** %d-: %d test failure(s) in %d line(s)\n",
|
||||||
|
dotest_code, dotest_failcnt, dotest_linenum);
|
||||||
|
} else {
|
||||||
|
printf("%d-: no failure(s) in %d line(s)\n",
|
||||||
|
dotest_code, dotest_linenum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* preppare to return to the caller environment
|
||||||
|
*
|
||||||
|
* We increase the caller's error count by the number
|
||||||
|
* of line tests that failed, not the number of internal
|
||||||
|
* errors that were noted.
|
||||||
|
*/
|
||||||
|
errmax(dotest_old_errmax),;
|
||||||
|
errcount(dotest_old_errcount + dotest_failcnt),;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* All Done!!! -- Jessica Noll, Age 2
|
||||||
|
*/
|
||||||
|
return dotest_failcnt;
|
||||||
|
}
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: ellip.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: ellip.cal,v 29.3 2006/03/07 22:16:25 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
|
* @(#) $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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -141,7 +141,7 @@ 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, N) * (p2.y - p1.y)) % N;
|
||||||
if (m == 0) {
|
if (m == 0) {
|
||||||
@@ -185,9 +185,9 @@ define point_pow(p, pow)
|
|||||||
r = p;
|
r = p;
|
||||||
t = p;
|
t = p;
|
||||||
for (bit = 2; ((bit <= pow) && (f == 0)); bit <<= 1) {
|
for (bit = 2; ((bit <= pow) && (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;
|
||||||
}
|
}
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: hello.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: hello.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1996
|
* File existed as early as: 1996
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
222
cal/intfile.cal
Normal file
222
cal/intfile.cal
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
/*
|
||||||
|
* intfile - integer to file and file to integer conversion
|
||||||
|
*
|
||||||
|
* Copyright (C) 2001 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.5 $
|
||||||
|
* @(#) $Id: intfile.cal,v 29.5 2001/04/10 22:09:34 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/intfile.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2001/03/31 08:13:11
|
||||||
|
* File existed as early as: 2001
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: Because leading HALF values are trimmed from integer, a file
|
||||||
|
* that begins with lots of 0 bits (in the case of big endian)
|
||||||
|
* or that ends with lots of 0 bits (in the case of little endian)
|
||||||
|
* will be changed when the subsequent integer is written back.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* file2be - convert a file into an big endian integer
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* filename filename to read
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* integer read from its contents on big endian order
|
||||||
|
*/
|
||||||
|
define file2be(filename)
|
||||||
|
{
|
||||||
|
local fd; /* open file */
|
||||||
|
local ret; /* integer to return */
|
||||||
|
local c; /* character read from the file */
|
||||||
|
local i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open the file for reading
|
||||||
|
*/
|
||||||
|
fd = fopen(filename, "rb");
|
||||||
|
if (!isfile(fd)) quit "file2be: cannot open file for reading";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* read the contents of the file
|
||||||
|
*
|
||||||
|
* The first octets become the most significant bits of the integer.
|
||||||
|
*/
|
||||||
|
ret = 0;
|
||||||
|
while (! isnull(c = fgetc(fd))) {
|
||||||
|
ret <<= 8;
|
||||||
|
ret += ord(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cleanup and return the integer
|
||||||
|
*/
|
||||||
|
fclose(fd);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* file2le - convert a file into an little endian integer
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* filename filename to read
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* integer read from its contents on little endian order
|
||||||
|
*/
|
||||||
|
define file2le(filename)
|
||||||
|
{
|
||||||
|
local fd; /* open file */
|
||||||
|
local ret; /* integer to return */
|
||||||
|
local c; /* character read from the file */
|
||||||
|
local shft; /* bit shift for the c value */
|
||||||
|
local i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open the file for reading
|
||||||
|
*/
|
||||||
|
fd = fopen(filename, "rb");
|
||||||
|
if (!isfile(fd)) quit "file2le: cannot open file for reading";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* read the contents of the file into a string
|
||||||
|
*
|
||||||
|
* The first octets become are the least significant bits of the integer.
|
||||||
|
*/
|
||||||
|
ret = 0;
|
||||||
|
shft = 0;
|
||||||
|
while (! isnull(c = fgetc(fd))) {
|
||||||
|
ret |= (ord(c) << shft);
|
||||||
|
shft += 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cleanup and return the integer
|
||||||
|
*/
|
||||||
|
fclose(fd);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* be2file - convert a big endian integer into a file
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* v integer to write to the file
|
||||||
|
* filename filename to write
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* The number of octets written to the file.
|
||||||
|
*
|
||||||
|
* NOTE: The absolute value of the integer is written to the file.
|
||||||
|
*/
|
||||||
|
define be2file(v, filename)
|
||||||
|
{
|
||||||
|
local fd; /* open file */
|
||||||
|
local octlen; /* length of v in octets */
|
||||||
|
local i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* firewall
|
||||||
|
*/
|
||||||
|
if (!isint(v)) {
|
||||||
|
quit "be2file: 1st arg not an integer";
|
||||||
|
}
|
||||||
|
v = abs(v);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open the file for writing
|
||||||
|
*/
|
||||||
|
fd = fopen(filename, "wb");
|
||||||
|
if (!isfile(fd)) quit "be2file: cannot open file for writing";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* write the octets to the file
|
||||||
|
*
|
||||||
|
* The most significant bits of the integer become the first file octets.
|
||||||
|
*/
|
||||||
|
octlen = int((highbit(v)+8) / 8);
|
||||||
|
for (i=octlen-1; i >= 0; --i) {
|
||||||
|
fputc(fd, char(v >> (i*8)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cleanup
|
||||||
|
*/
|
||||||
|
fclose(fd);
|
||||||
|
return octlen;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* le2file - convert a little endian integer into a file
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* v integer to write to the file
|
||||||
|
* filename filename to write
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* The number of octets written to the file.
|
||||||
|
*
|
||||||
|
* NOTE: The absolute value of the integer is written to the file.
|
||||||
|
*/
|
||||||
|
define le2file(v, filename)
|
||||||
|
{
|
||||||
|
local fd; /* open file */
|
||||||
|
local cnt; /* octets written */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* firewall
|
||||||
|
*/
|
||||||
|
if (!isint(v)) {
|
||||||
|
quit "be2file: 1st arg not an integer";
|
||||||
|
}
|
||||||
|
v = abs(v);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open the file for writing
|
||||||
|
*/
|
||||||
|
fd = fopen(filename, "wb");
|
||||||
|
if (!isfile(fd)) quit "le2file: cannot open file for writing";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write the octets to the file.
|
||||||
|
*
|
||||||
|
* The least significant bits of the integer become the first file octets.
|
||||||
|
*/
|
||||||
|
cnt = 0;
|
||||||
|
while (v > 0) {
|
||||||
|
fputc(fd, char(v));
|
||||||
|
v >>= 8;
|
||||||
|
++cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cleanup
|
||||||
|
*/
|
||||||
|
fclose(fd);
|
||||||
|
return cnt;
|
||||||
|
}
|
26
cal/linear.cal
Normal file
26
cal/linear.cal
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* 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));
|
||||||
|
}
|
@@ -17,15 +17,25 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.6 $
|
||||||
* @(#) $Id: lucas.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: lucas.cal,v 29.6 2002/07/10 09:43:46 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
|
||||||
* File existed as early as: 1990
|
* File existed as early as: 1990
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: This is a standard calc resource file. For information on calc see:
|
||||||
|
*
|
||||||
|
* http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
*
|
||||||
|
* To obtain your own copy of calc, see:
|
||||||
|
*
|
||||||
|
* http://www.isthe.com/chongo/tech/comp/calc/calc-download.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -52,12 +62,19 @@
|
|||||||
*
|
*
|
||||||
* At the time of discovery, this was the largest known twin prime pair.
|
* At the time of discovery, this was the largest known twin prime pair.
|
||||||
*
|
*
|
||||||
|
* See:
|
||||||
|
*
|
||||||
|
* http://www.isthe.com/chongo/tech/math/prime/amdahl6.html
|
||||||
|
*
|
||||||
|
* for more information on the Amdahl 6 group.
|
||||||
|
*
|
||||||
* NOTE: Both largest known and largest known twin prime records have been
|
* NOTE: Both largest known and largest known twin prime records have been
|
||||||
* broken. Rather than update this file each time, I'll just
|
* broken. Rather than update this file each time, I'll just
|
||||||
* congratulate the finders and encourage others to try for
|
* congratulate the finders and encourage others to try for
|
||||||
* larger finds. Records were made to be broken afterall!
|
* larger finds. Records were made to be broken afterall!
|
||||||
*
|
*/
|
||||||
* ON GAINING A WORLD RECORD:
|
|
||||||
|
/* ON GAINING A WORLD RECORD:
|
||||||
*
|
*
|
||||||
* The routines in calc were designed to be portable, and to work on
|
* The routines in calc were designed to be portable, and to work on
|
||||||
* numbers of 'sane' size. The Amdahl 6 team used a 'ultra-high speed
|
* numbers of 'sane' size. The Amdahl 6 team used a 'ultra-high speed
|
||||||
@@ -73,7 +90,7 @@
|
|||||||
*
|
*
|
||||||
* test numbers of the form h*2^n-1
|
* test numbers of the form h*2^n-1
|
||||||
* fix a value of n and vary the value h
|
* fix a value of n and vary the value h
|
||||||
* n mod 128 == 0
|
* n mod 2^x == 0 for some value of x, say > 7 or more
|
||||||
* h*2^n-1 is not divisible by any small prime < 2^40
|
* h*2^n-1 is not divisible by any small prime < 2^40
|
||||||
* 0 < h < 2^39
|
* 0 < h < 2^39
|
||||||
* h*2^n+1 is not divisible by any small prime < 2^40
|
* h*2^n+1 is not divisible by any small prime < 2^40
|
||||||
@@ -1030,7 +1047,7 @@ gen_v1(h, n)
|
|||||||
define
|
define
|
||||||
ldebug(funct, str)
|
ldebug(funct, str)
|
||||||
{
|
{
|
||||||
if (config("resource_debug") & 3) {
|
if (config("resource_debug") & 8) {
|
||||||
print "DEBUG:", funct:":", str;
|
print "DEBUG:", funct:":", str;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: lucas_chk.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: lucas_chk.cal,v 29.3 2001/03/31 13:31:34 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
|
||||||
* File existed as early as: 1991
|
* File existed as early as: 1991
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -336,7 +336,7 @@ lucas_chk(high_n, quiet)
|
|||||||
|
|
||||||
/* skip primes where h>=2^n */
|
/* skip primes where h>=2^n */
|
||||||
if (highbit(h_p[i]) >= n_p[i]) {
|
if (highbit(h_p[i]) >= n_p[i]) {
|
||||||
if (config("resource_debug") & 3) {
|
if (config("resource_debug") & 8) {
|
||||||
print "h>=2^n skip:", h_p[i]:"*2^":n_p[i]:"-1";
|
print "h>=2^n skip:", h_p[i]:"*2^":n_p[i]:"-1";
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: lucas_tbl.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: lucas_tbl.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1991
|
* File existed as early as: 1991
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: mersenne.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: mersenne.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1991
|
* File existed as early as: 1991
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: mfactor.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: mfactor.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1996
|
* File existed as early as: 1996
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: mod.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: mod.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: natnumset.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: natnumset.cal,v 29.3 2006/05/01 19:19:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/natnumset.cal,v $
|
* @(#) $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
|
||||||
* File existed as early as: 1997
|
* File existed as early as: 1997
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -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";
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: pell.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: pell.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
12
cal/pi.cal
12
cal/pi.cal
@@ -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
|
||||||
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.5 $
|
||||||
* @(#) $Id: pi.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: pi.cal,v 29.5 2004/02/23 14:04:01 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
|
||||||
* File existed as early as: 1991
|
* File existed as early as: 1991
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -61,7 +61,7 @@ define qpi(epsilon)
|
|||||||
yn = sqrt2 - 1;
|
yn = sqrt2 - 1;
|
||||||
an = 6 - 4 * sqrt2;
|
an = 6 - 4 * sqrt2;
|
||||||
tn = 2;
|
tn = 2;
|
||||||
for (count = 0; count < niter; count++) {
|
for (count = 0; count < niter; ++count) {
|
||||||
ym = yn;
|
ym = yn;
|
||||||
am = an;
|
am = an;
|
||||||
tn *= 4;
|
tn *= 4;
|
||||||
@@ -104,7 +104,7 @@ define piforever()
|
|||||||
* Next approximation
|
* Next approximation
|
||||||
*/
|
*/
|
||||||
p = k * k;
|
p = k * k;
|
||||||
q = k + k++;
|
q = k + ++k;
|
||||||
|
|
||||||
a2 = a;
|
a2 = a;
|
||||||
b2 = b;
|
b2 = b;
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: pix.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: pix.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1996
|
* File existed as early as: 1996
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: pollard.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: pollard.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1991
|
* File existed as early as: 1991
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: poly.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
|
* @(#) $Id: poly.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: prompt.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
|
* @(#) $Id: prompt.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: psqrt.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
|
* @(#) $Id: psqrt.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -1,24 +1,46 @@
|
|||||||
/*
|
/*
|
||||||
* qtime - Display time as English sentence
|
* qtime - Display time as English sentence
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 Klaus Alexander Seistrup and Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Written by: Klaus Alexander Seistrup <kseis@magnetic-ink.dk>
|
||||||
|
* With mods by: Landon Curt Noll <http://www.isthe.com/chongo/>
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.4 $
|
||||||
|
* @(#) $Id: qtime.cal,v 29.4 2000/12/18 10:18:40 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/qtime.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1999/10/13 04:10:33
|
||||||
|
* File existed as early as: 1999
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* usage:
|
* usage:
|
||||||
* qtime(utc_hr_offset)
|
* qtime(utc_hr_offset)
|
||||||
*
|
*
|
||||||
* utc_hr_offset Offset from UTC in hours.
|
* utc_hr_offset Offset from UTC in hours.
|
||||||
*
|
*
|
||||||
* Written by: Klaus Alexander Seistrup <kseis@magnetic-ink.dk>
|
|
||||||
* With minor mods by: Landon Curt Noll <http://reality.sgi.com/chongo/>
|
|
||||||
*
|
|
||||||
* See:
|
* See:
|
||||||
* http://www.magnetic-ink.dk/download/qtime.html
|
* http://www.magnetic-ink.dk/download/qtime.html
|
||||||
*
|
*
|
||||||
* for examples of qtime() written on other languages.
|
* for examples of qtime() written on other languages.
|
||||||
*
|
|
||||||
* @(#) $Revision: 29.1 $
|
|
||||||
* @(#) $Id: qtime.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
|
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/qtime.cal,v $
|
|
||||||
*
|
|
||||||
* This file is not covered under version 2.1 of the GNU LGPL.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: quat.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
|
* @(#) $Id: quat.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: randbitrun.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
|
* @(#) $Id: randbitrun.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: randmprime.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
|
* @(#) $Id: randmprime.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1994
|
* File existed as early as: 1994
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: randombitrun.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
|
* @(#) $Id: randombitrun.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: randomrun.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
|
* @(#) $Id: randomrun.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1997
|
* File existed as early as: 1997
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: randrun.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
|
* @(#) $Id: randrun.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
557
cal/regress.cal
557
cal/regress.cal
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* regress - calc regression and correctness test suite
|
* regress - calc regression and correctness test suite
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell
|
* 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
|
||||||
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.26 $
|
||||||
* @(#) $Id: regress.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
|
* @(#) $Id: regress.cal,v 29.26 2006/06/02 09:49:13 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:36
|
* Under source code control: 1990/02/15 01:50:36
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -52,7 +52,8 @@ errmax(-1),; /* prevent errcount from abouting */
|
|||||||
global ecnt; /* expected value of errcount() */
|
global ecnt; /* expected value of errcount() */
|
||||||
ecnt = 0; /* clear expected errcount() value */
|
ecnt = 0; /* clear expected errcount() value */
|
||||||
|
|
||||||
initcfg = config("all", "oldstd"); /* set config to startup default */
|
initcfg = config("all", "newstd"); /* set config to startup default */
|
||||||
|
defcfg = config("all"); /* capture the default config */
|
||||||
config("resource_debug", 0),; /* disable resource startup messages */
|
config("resource_debug", 0),; /* disable resource startup messages */
|
||||||
config("calc_debug", 0),; /* disable internal debugging */
|
config("calc_debug", 0),; /* disable internal debugging */
|
||||||
config("verbose_quit", 0),; /* disable quit messages */
|
config("verbose_quit", 0),; /* disable quit messages */
|
||||||
@@ -380,19 +381,19 @@ define test_config()
|
|||||||
/* check the set and return of all config */
|
/* check the set and return of all config */
|
||||||
callcfg = config("all");
|
callcfg = config("all");
|
||||||
print '501: callcfg = config("all")';
|
print '501: callcfg = config("all")';
|
||||||
|
vrfy(callcfg == startcfg, '502: callcfg == startcfg');
|
||||||
|
|
||||||
callcfg = config("all", "oldstd");
|
callcfg = config("all", "oldstd");
|
||||||
print '502: callcfg = config("all","oldstd")';
|
print '503: callcfg = config("all","oldstd")';
|
||||||
oldcfg = config("all", "newstd");
|
|
||||||
print '503: oldcfg = config("all","newstd")';
|
|
||||||
vrfy(callcfg == startcfg, '504: callcfg == startcfg');
|
vrfy(callcfg == startcfg, '504: callcfg == startcfg');
|
||||||
newcfg = config("all");
|
oldcfg = config("all");
|
||||||
print '505: newcfg = config("all")';
|
print '505: oldcfg = config("all");';
|
||||||
vrfy(config("all") == newcfg, '506: config("all") == newcfg');
|
vrfy(config("all") == oldcfg, '506: config("all") == oldcfg');
|
||||||
vrfy(config("all", oldcfg) == newcfg,
|
vrfy(oldcfg==config("all","newstd"),
|
||||||
'507: config("all", oldcfg) == newcfg');
|
'507: oldcfg==config("all","newstd")');
|
||||||
|
vrfy(defcfg == config("all"), '508: defcfg == config("all")');
|
||||||
|
|
||||||
/* vrfy the state of the default config */
|
/* vrfy the state of the default config */
|
||||||
vrfy(config("all") == oldcfg, '508: config("all") == oldcfg');
|
|
||||||
vrfy(config("mode") == "real",
|
vrfy(config("mode") == "real",
|
||||||
'509: config("mode") == "real"');
|
'509: config("mode") == "real"');
|
||||||
vrfy(config("display") == 20,
|
vrfy(config("display") == 20,
|
||||||
@@ -411,10 +412,10 @@ define test_config()
|
|||||||
'516: config("pow2") == 40');
|
'516: config("pow2") == 40');
|
||||||
vrfy(config("redc2") == 50,
|
vrfy(config("redc2") == 50,
|
||||||
'517: config("redc2") == 50');
|
'517: config("redc2") == 50');
|
||||||
vrfy(config("tilde") == "true",
|
vrfy(config("tilde"),
|
||||||
'518: config("tilde") == "true"');
|
'518: config("tilde")');
|
||||||
vrfy(config("tab") == "true",
|
vrfy(config("tab"),
|
||||||
'519: config("tab") == "true"');
|
'519: config("tab")');
|
||||||
vrfy(config("quomod") == 0,
|
vrfy(config("quomod") == 0,
|
||||||
'520: config("quomod") == 0');
|
'520: config("quomod") == 0');
|
||||||
vrfy(config("quo") == 2,
|
vrfy(config("quo") == 2,
|
||||||
@@ -429,58 +430,59 @@ define test_config()
|
|||||||
'525: config("cfappr") == 0');
|
'525: config("cfappr") == 0');
|
||||||
vrfy(config("cfsim") == 8,
|
vrfy(config("cfsim") == 8,
|
||||||
'526: config("cfsim") == 8');
|
'526: config("cfsim") == 8');
|
||||||
vrfy(config("outround") == 2,
|
vrfy(config("outround") == 24,
|
||||||
'527: config("outround") == 2');
|
'527: config("outround") == 24');
|
||||||
vrfy(config("round") == 24,
|
vrfy(config("round") == 24,
|
||||||
'528: config("round") == 24');
|
'528: config("round") == 24');
|
||||||
vrfy(config("leadzero") == "false",
|
vrfy(config("leadzero") == 1,
|
||||||
'529: config("leadzero") == "false"');
|
'529: config("leadzero") == 1');
|
||||||
vrfy(config("fullzero") == "false",
|
vrfy(config("fullzero") == 0,
|
||||||
'530: config("fullzero") == "false"');
|
'530: config("fullzero") == 0');
|
||||||
vrfy(config("maxscan") == 20,
|
vrfy(config("maxscan") == 20,
|
||||||
'531: config("maxscan") == 20');
|
'531: config("maxscan") == 20');
|
||||||
vrfy(config("prompt") == "> ",
|
vrfy(config("prompt") == "; ",
|
||||||
'532: config("prompt") == "> "');
|
'532: config("prompt") == "; "');
|
||||||
vrfy(config("more") == ">> ",
|
vrfy(config("more") == ";; ",
|
||||||
'533: config("more") == ">> "');
|
'533: config("more") == ";; "');
|
||||||
|
|
||||||
/* convert to "newstd" config by individual changes */
|
/* convert to "oldstd" config by individual changes */
|
||||||
vrfy(config("display", 10) == 20,
|
print '534: test unused';
|
||||||
'534: config("display") == 20');
|
vrfy(config("outround", 2) == 24,
|
||||||
vrfy(config("epsilon",1e-10)==1e-20,
|
'535: config("outround", 2) == 24');
|
||||||
'535: config("epsilon",1e-10)==1e-20');
|
vrfy(config("leadzero","n") == 1,
|
||||||
vrfy(config("quo", 0) == 2, '536: config("quo", 0) == 2');
|
'536: config("leadzero","n") == 1');
|
||||||
vrfy(config("outround", 24) == 2,
|
print '537: test unused';
|
||||||
'537: config("outround", 24) == 2');
|
vrfy(config("prompt", "> ") == "; ",
|
||||||
vrfy(config("leadzero","y") == "false",
|
'538: config("prompt", "> ") == "; "');
|
||||||
'538: config("leadzero","y") == "false"');
|
vrfy(config("more", ">> ") == ";; ",
|
||||||
vrfy(config("fullzero", 1) == "false",
|
'539: config("more", ">> ") == ";; "');
|
||||||
'539: config("fullzero", 1) == "false"');
|
vrfy(config("all") == oldcfg, '540: config("all") == oldcfg');
|
||||||
vrfy(config("prompt", "; ") == "> ",
|
|
||||||
'540: config("prompt", "; ") == "> "');
|
|
||||||
vrfy(config("more", ";; ") == ">> ",
|
|
||||||
'541: config("more", ";; ") == ">> "');
|
|
||||||
vrfy(config("all") == newcfg, '542: config("all") == newcfg');
|
|
||||||
|
|
||||||
/* check on the new config("fullzero") effect */
|
/* restore the configation at the start of this function */
|
||||||
vrfy(config("all","oldstd") == newcfg,
|
vrfy(config("all",callcfg) == oldcfg,
|
||||||
'543: config("all",callcfg) == newcfg');
|
'541: config("all",callcfg) == oldcfg');
|
||||||
|
|
||||||
|
/* display and fullzero tests */
|
||||||
vrfy(config("display",2) == 20,
|
vrfy(config("display",2) == 20,
|
||||||
'544: config("display",2) == 20');
|
'542: config("display",2) == 20');
|
||||||
vrfy(config("fullzero",1) == "false",
|
vrfy(config("leadzero",0) == 1,
|
||||||
'545: config("fullzero",1) == "false"');
|
'543: config("leadzero",0) == 1');
|
||||||
|
vrfy(config("fullzero",1) == 0,
|
||||||
|
'544: config("fullzero",1) == 0');
|
||||||
vrfy(strprintf("%d %d %d", 0, 1, 2) == ".00 1.00 2.00",
|
vrfy(strprintf("%d %d %d", 0, 1, 2) == ".00 1.00 2.00",
|
||||||
'546: strprintf("%d %d %d", 0, 1, 2) == ".00 1.00 2.00"');
|
'545: strprintf("%d %d %d", 0, 1, 2) == ".00 1.00 2.00"');
|
||||||
vrfy(config("display",20) == 2,
|
vrfy(config("display",20) == 2,
|
||||||
'547: config("display",20) == 2');
|
'546: config("display",20) == 2');
|
||||||
vrfy(config("fullzero",0) == "true",
|
vrfy(config("leadzero",1) == 0,
|
||||||
'548: config("fullzero",0) == "true"');
|
'547: config("leadzero",1) == 0');
|
||||||
|
vrfy(config("fullzero",0) == 1,
|
||||||
|
'548: config("fullzero",0) == 1');
|
||||||
vrfy(strprintf("%d %d %d", 0, 1, 2) == "0 1 2",
|
vrfy(strprintf("%d %d %d", 0, 1, 2) == "0 1 2",
|
||||||
'549: strprintf("%d %d %d", 0, 1, 2) == "0 1 2"');
|
'549: strprintf("%d %d %d", 0, 1, 2) == "0 1 2"');
|
||||||
|
|
||||||
/* restore calling config */
|
/* restore calling config */
|
||||||
vrfy(config("all",callcfg) == oldcfg,
|
vrfy(config("all",callcfg) == startcfg,
|
||||||
'550: config("all",callcfg) == oldcfg');
|
'550: config("all",callcfg) == startcfg');
|
||||||
vrfy(config("all") == callcfg, '551: config("all") == callcfg');
|
vrfy(config("all") == callcfg, '551: config("all") == callcfg');
|
||||||
vrfy(config("all") == startcfg, '552: config("all") == startcfg');
|
vrfy(config("all") == startcfg, '552: config("all") == startcfg');
|
||||||
|
|
||||||
@@ -492,7 +494,11 @@ define test_config()
|
|||||||
vrfy(strlen(config("version")) > 0,
|
vrfy(strlen(config("version")) > 0,
|
||||||
'555: strlen(config("version")) > 0');
|
'555: strlen(config("version")) > 0');
|
||||||
|
|
||||||
print '556: Ending test_config';
|
/* mode2 is off by default */
|
||||||
|
vrfy(config("mode2") == "off",
|
||||||
|
'556: config("mode2") == "off"');
|
||||||
|
|
||||||
|
print '557: Ending test_config';
|
||||||
}
|
}
|
||||||
print '010: parsed test_config()';
|
print '010: parsed test_config()';
|
||||||
|
|
||||||
@@ -996,8 +1002,13 @@ define test_functions()
|
|||||||
vrfy(strpos(a, "abc") == 1, '946: strpos(a, "abc") == 1');
|
vrfy(strpos(a, "abc") == 1, '946: strpos(a, "abc") == 1');
|
||||||
vrfy(strpos(a, "xyz") == 0, '947: strpos(a, "xyz") == 0');
|
vrfy(strpos(a, "xyz") == 0, '947: strpos(a, "xyz") == 0');
|
||||||
vrfy(strpos(a, a) == 1, '948: strpos(a, a) == 1');
|
vrfy(strpos(a, a) == 1, '948: strpos(a, a) == 1');
|
||||||
vrfy(system("") == 0, '949: system("") == 0');
|
if (config("windows") || config("cygwin")) {
|
||||||
vrfy(system("true") == 0, '950: system("true") == 0');
|
print '949: test skipped for windows or cygwin systems';
|
||||||
|
print '950: test skipped for windows or cygwin systems';
|
||||||
|
} else {
|
||||||
|
vrfy(system("") == 0, '949: system("") == 0');
|
||||||
|
vrfy(system("true") == 0, '950: system("true") == 0');
|
||||||
|
}
|
||||||
print '951: test disabled due to stdin dependency';
|
print '951: test disabled due to stdin dependency';
|
||||||
print '952: test removed';
|
print '952: test removed';
|
||||||
print '953: test removed';
|
print '953: test removed';
|
||||||
@@ -1223,7 +1234,90 @@ define test_functions()
|
|||||||
vrfy(hnrmod(21<<500+7,3,500,-1) == (21<<500+7)%(3<<500-1),
|
vrfy(hnrmod(21<<500+7,3,500,-1) == (21<<500+7)%(3<<500-1),
|
||||||
'1112: hnrmod(21<<500+7,3,500,-1) == (21<<500+7)%(3<<500-1)');
|
'1112: hnrmod(21<<500+7,3,500,-1) == (21<<500+7)%(3<<500-1)');
|
||||||
|
|
||||||
print '1113: Ending test_functions';
|
/*
|
||||||
|
* catalan testing
|
||||||
|
*/
|
||||||
|
vrfy(catalan(2) == 2, '1113: catalan(2) == 2');
|
||||||
|
vrfy(catalan(3) == 5, '1114: catalan(3) == 5');
|
||||||
|
vrfy(catalan(4) == 14, '1115: catalan(4) == 14');
|
||||||
|
vrfy(catalan(20) == 6564120420, '1116: catalan(20) == 6564120420');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* bernoulli builtin function testing
|
||||||
|
*/
|
||||||
|
vrfy(bernoulli(0) == 1, '1117: bernoulli(0) == 1');
|
||||||
|
vrfy(bernoulli(1) == -1/2, '1118: bernoulli(1) == -1/2');
|
||||||
|
vrfy(bernoulli(2) == 1/6, '1119: bernoulli(2) == 1/6');
|
||||||
|
vrfy(bernoulli(3) == 0, '1120: bernoulli(3) == 0');
|
||||||
|
vrfy(bernoulli(4) == -1/30, '1121: bernoulli(4) == -1/30');
|
||||||
|
vrfy(bernoulli(5) == 0, '1122: bernoulli(5) == 0');
|
||||||
|
vrfy(bernoulli(6) == 1/42, '1123: bernoulli(6) == 1/42');
|
||||||
|
vrfy(bernoulli(32) == -7709321041217/510,
|
||||||
|
'1124: bernoulli(32) == -7709321041217/510');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* euler function testing
|
||||||
|
*/
|
||||||
|
vrfy(euler(0) == 1, '1125: euler(0) == 1');
|
||||||
|
vrfy(euler(1) == 0, '1126: euler(1) == 0');
|
||||||
|
vrfy(euler(2) == -1, '1127: euler(2) == -1');
|
||||||
|
vrfy(euler(3) == 0, '1128: euler(3) == 0');
|
||||||
|
vrfy(freeeuler() == null(), '1129: freeeuler() == null()');
|
||||||
|
vrfy(euler(4) == 5, '1130: euler(4) == 5');
|
||||||
|
vrfy(euler(5) == 0, '1131: euler(5) == 0');
|
||||||
|
vrfy(euler(6) == -61, '1132: euler(6) == -61');
|
||||||
|
vrfy(euler(32) == 177519391579539289436664789665,
|
||||||
|
'1130: euler(32) == 177519391579539289436664789665');
|
||||||
|
vrfy(freeeuler() == null(), '1133: freeeuler() == null()');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* digit with non-10 base
|
||||||
|
*/
|
||||||
|
a = 123456.789;
|
||||||
|
print '1134: a = 123456.789';
|
||||||
|
vrfy(digit(a, 6, 100) == 0, '1135: digit(a, 6, 100) == 0');
|
||||||
|
vrfy(digit(a, 5, 100) == 0, '1136: digit(a, 5, 100) == 0');
|
||||||
|
vrfy(digit(a, 4, 100) == 0, '1137: digit(a, 4, 100) == 0');
|
||||||
|
vrfy(digit(a, 3, 100) == 0, '1138: digit(a, 3, 100) == 0');
|
||||||
|
vrfy(digit(a, 2, 100) == 12, '1139: digit(a, 2, 100) == 12');
|
||||||
|
vrfy(digit(a, 1, 100) == 34, '1140: digit(a, 1, 100) == 34');
|
||||||
|
vrfy(digit(a, 0, 100) == 56, '1141: digit(a, 0, 100) == 56');
|
||||||
|
vrfy(digit(a, -1, 100) == 78, '1142: digit(a, -1, 100) == 78');
|
||||||
|
vrfy(digit(a, -2, 100) == 90, '1143: digit(a, -2, 100) == 90');
|
||||||
|
vrfy(digit(a, -3, 100) == 0, '1144: digit(a, -3, 100) == 0');
|
||||||
|
vrfy(digit(a, -4, 100) == 0, '1145: digit(a, -4, 100) == 0');
|
||||||
|
vrfy(digit(a, -5, 100) == 0, '1146: digit(a, -5, 100) == 0');
|
||||||
|
vrfy(digit(a, -6, 100) == 0, '1146: digit(a, -6, 100) == 0');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* digits with a non-10 base
|
||||||
|
*/
|
||||||
|
vrfy(digits(a, 100) == 3, '1147: digits(a, 100) == 3');
|
||||||
|
vrfy(digits(2^256-1, 256) == 32,'1148: digits(2^256-1, 256) == 32');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* places with a non-10 base
|
||||||
|
*/
|
||||||
|
vrfy(places(0.0123, 2) == -1, '1149: places(0.0123, 2) == -1');
|
||||||
|
vrfy(places(0.625, 2) == 3, '1150: places(0.625, 2) == 3');
|
||||||
|
vrfy(places(0.625, 8) == 1, '1151: places(0.625, 8) == 1');
|
||||||
|
vrfy(places(171/2^712, 2) == 712,
|
||||||
|
'1152: places(171/2^7120.625, 2) == 712');
|
||||||
|
vrfy(places(171/2^712, 64) == 119,
|
||||||
|
'1152: places(171/2^7120.625, 64) == 119');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* verify sleep
|
||||||
|
*/
|
||||||
|
vrfy(sleep(1/5) == null(), '1153: sleep(1/5) == null()');
|
||||||
|
vrfy(sleep(1/100) == null(), '1154: sleep(1/100) == null()');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* verify calcpath
|
||||||
|
*/
|
||||||
|
vrfy(isstr(calcpath()), '1155: isstr(calcpath())');
|
||||||
|
|
||||||
|
print '1156: Ending test_functions';
|
||||||
}
|
}
|
||||||
print '017: parsed test_functions()';
|
print '017: parsed test_functions()';
|
||||||
|
|
||||||
@@ -1484,31 +1578,31 @@ define test_rand()
|
|||||||
/* test the additive 55 shuffle generator */
|
/* test the additive 55 shuffle generator */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1505: tmp = srand(0)';
|
print '1505: tmp = srand(0)';
|
||||||
vrfy(rand() == 0xc79ef743e2e6849c, \
|
vrfy(rand() == 0x1fe5b46fba7e069d, \
|
||||||
'1506: rand() == 0xc79ef743e2e6849c');
|
'1506: rand() == 0x1fe5b46fba7e069d');
|
||||||
vrfy(rand() == 0x8d2dcb2bed321284, \
|
vrfy(rand() == 0x308d32d9bdf2dc6f, \
|
||||||
'1507: rand() == 0x8d2dcb2bed321284');
|
'1507: rand() == 0x308d32d9bdf2dc6f');
|
||||||
tmp = srand(init);
|
tmp = srand(init);
|
||||||
print '1508: tmp = srand(init)';
|
print '1508: tmp = srand(init)';
|
||||||
vrfy(rand() == 0xc79ef743e2e6849c, \
|
vrfy(rand() == 0x1fe5b46fba7e069d, \
|
||||||
'1509: rand() == 0xc79ef743e2e6849c');
|
'1509: rand() == 0x1fe5b46fba7e069d');
|
||||||
vrfy(rand() == 0x8d2dcb2bed321284, \
|
vrfy(rand() == 0x308d32d9bdf2dc6f, \
|
||||||
'1510: rand() == 0x8d2dcb2bed321284');
|
'1510: rand() == 0x308d32d9bdf2dc6f');
|
||||||
|
|
||||||
/* test range interface */
|
/* test range interface */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1511: tmp = srand(0)';
|
print '1511: tmp = srand(0)';
|
||||||
vrfy(rand(12345678901234567890) == 0x8d2dcb2bed321284, \
|
vrfy(rand(12345678901234567890) == 0x1fe5b46fba7e069d, \
|
||||||
'1512: rand(12345678901234567890) == 0x8d2dcb2bed321284');
|
'1512: rand(12345678901234567890) == 0x1fe5b46fba7e069d');
|
||||||
vrfy(rand(216091) == 0x13d2b, '1513: rand(216091) == 0x13d2b');
|
vrfy(rand(216091) == 0xc234, '1513: rand(216091) == 0xc234');
|
||||||
vrfy(rand(100) == 0x26, '1514: rand(100) == 0x26');
|
vrfy(rand(100) == 0x59, '1514: rand(100) == 0x59');
|
||||||
vrfy(rand(-46,46) == -0xf, '1515: rand(-46,46) == -0xf');
|
vrfy(rand(-46,46) == 0x2d, '1515: rand(-46,46) == 0x2d');
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1516: tmp = srand(0)';
|
print '1516: tmp = srand(0)';
|
||||||
vrfy(rand(2^64) == 0xc79ef743e2e6849c, \
|
vrfy(rand(2^64) == 0x1fe5b46fba7e069d, \
|
||||||
'1517: rand(2^64) == 0xc79ef743e2e6849c');
|
'1517: rand(2^64) == 0x1fe5b46fba7e069d');
|
||||||
vrfy(rand(0,2^64) == 0x8d2dcb2bed321284, \
|
vrfy(rand(0,2^64) == 0x308d32d9bdf2dc6f, \
|
||||||
'1518: rand(0,2^64) == 0x8d2dcb2bed321284');
|
'1518: rand(0,2^64) == 0x308d32d9bdf2dc6f');
|
||||||
|
|
||||||
/* test different forms of seeding the initial state */
|
/* test different forms of seeding the initial state */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
@@ -1516,7 +1610,7 @@ define test_rand()
|
|||||||
vrfy(srand() == init, '1520: srand() == init');
|
vrfy(srand() == init, '1520: srand() == init');
|
||||||
tmp = srand(0x87e6ec938ff55aa5<<64);
|
tmp = srand(0x87e6ec938ff55aa5<<64);
|
||||||
print '1521: tmp = srand(0x87e6ec938ff55aa5<<64)';
|
print '1521: tmp = srand(0x87e6ec938ff55aa5<<64)';
|
||||||
vrfy(srand() == init, '1522: srand() == init');
|
print '1522: test disabled';
|
||||||
tmp = srand(state0);
|
tmp = srand(state0);
|
||||||
print '1523: tmp = srand(state0)';
|
print '1523: tmp = srand(state0)';
|
||||||
vrfy(srand() == init, '1524: srand() == init');
|
vrfy(srand() == init, '1524: srand() == init');
|
||||||
@@ -1528,35 +1622,35 @@ define test_rand()
|
|||||||
/* test the bit length interface */
|
/* test the bit length interface */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1528: tmp = srand(0)';
|
print '1528: tmp = srand(0)';
|
||||||
vrfy(randbit(64) == 0xc79ef743e2e6849c, \
|
vrfy(randbit(64) == 0x1fe5b46fba7e069d, \
|
||||||
'1529: randbit(64) == 0xc79ef743e2e6849c');
|
'1529: randbit(64) == 0x1fe5b46fba7e069d');
|
||||||
vrfy(randbit(128) == 0x8d2dcb2bed3212844f4ad31f3818af34, \
|
vrfy(randbit(128) == 0x308d32d9bdf2dc6f45d3e3b3361b79e4, \
|
||||||
'1530: randbit(128) == 0x8d2dcb2bed3212844f4ad31f3818af34');
|
'1530: randbit(128) == 0x308d32d9bdf2dc6f45d3e3b3361b79e4');
|
||||||
vrfy(randbit(64) == 0x23a252f60bae4907, \
|
vrfy(randbit(64) == 0xd4ef1e3336022d81, \
|
||||||
'1531: randbit(64) == 0x23a252f60bae4907');
|
'1531: randbit(64) == 0xd4ef1e3336022d81');
|
||||||
vrfy(randbit(128) == 0xa8ed5b6203e2b1da32848cd9b3f1e3fa, \
|
vrfy(randbit(128) == 0x66b086e6c34e42124a1fc5d4e5c6f598, \
|
||||||
'1532: randbit(128) == 0xa8ed5b6203e2b1da32848cd9b3f1e3fa');
|
'1532: randbit(128) == 0x66b086e6c34e42124a1fc5d4e5c6f598');
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1533: tmp = srand(0)';
|
print '1533: tmp = srand(0)';
|
||||||
vrfy(randbit(32) == 0xc79ef743, '1534: randbit(32) == 0xc79ef743');
|
vrfy(randbit(32) == 0x1fe5b46f, '1534: randbit(32) == 0x1fe5b46f');
|
||||||
vrfy(randbit(32) == 0xe2e6849c, '1535: randbit(32) == 0xe2e6849c');
|
vrfy(randbit(32) == 0xba7e069d, '1535: randbit(32) == 0xba7e069d');
|
||||||
vrfy(randbit(1) == 0x1, '1536: randbit(1) == 0x1');
|
vrfy(randbit(1) == 0x0, '1536: randbit(1) == 0x0');
|
||||||
vrfy(randbit(5) == 0x3, '1537: randbit(5) == 0x3');
|
vrfy(randbit(5) == 0xc, '1537: randbit(5) == 0xc');
|
||||||
vrfy(randbit(33) == 0x96e595f6, '1538: randbit(33) == 0x96e595f6');
|
vrfy(randbit(33) == 0x46996cde, '1538: randbit(33) == 0x46996cde');
|
||||||
vrfy(randbit(25) == 0x1321284, '1539: randbit(25) == 0x1321284');
|
vrfy(randbit(25) == 0x1f2dc6f, '1539: randbit(25) == 0x1f2dc6f');
|
||||||
vrfy(randbit(2) == 0x1, '1540: randbit(2) == 0x1');
|
vrfy(randbit(2) == 0x1, '1540: randbit(2) == 0x1');
|
||||||
vrfy(randbit(13) == 0x7a5, '1541: randbit(13) == 0x7a5');
|
vrfy(randbit(13) == 0x2e9, '1541: randbit(13) == 0x2e9');
|
||||||
vrfy(randbit(18) == 0x1a63e, '1542: randbit(18) == 0x1a63e');
|
vrfy(randbit(18) == 0x3c766, '1542: randbit(18) == 0x3c766');
|
||||||
vrfy(randbit(8) == 0x70, '1543: randbit(8) == 0x70');
|
vrfy(randbit(8) == 0x6c, '1543: randbit(8) == 0x6c');
|
||||||
vrfy(randbit(9) == 0x62, '1544: randbit(9) == 0x62');
|
vrfy(randbit(9) == 0x6d, '1544: randbit(9) == 0x6d');
|
||||||
vrfy(randbit(70) == 0x2f3423a252f60bae49, \
|
vrfy(randbit(70) == 0x39e4d4ef1e3336022d, \
|
||||||
'1545: randbit(70) == 0x2f3423a252f60bae49');
|
'1545: randbit(70) == 0x39e4d4ef1e3336022d');
|
||||||
print '1546: test unused';
|
print '1546: test unused';
|
||||||
vrfy(randbit(8) == 0x7, '1547: randbit(8) == 0x7');
|
vrfy(randbit(8) == 0x81, '1547: randbit(8) == 0x81');
|
||||||
vrfy(randbit(65) == 0x151dab6c407c563b4, \
|
vrfy(randbit(65) == 0xcd610dcd869c8424, \
|
||||||
'1548: randbit(65) == 0x151dab6c407c563b4');
|
'1548: randbit(65) == 0xcd610dcd869c8424');
|
||||||
vrfy(randbit(63) == 0x32848cd9b3f1e3fa, \
|
vrfy(randbit(63) == 0x4a1fc5d4e5c6f598, \
|
||||||
'1549: randbit(63) == 0x32848cd9b3f1e3fa');
|
'1549: randbit(63) == 0x4a1fc5d4e5c6f598');
|
||||||
|
|
||||||
/* check to be sure that the srand(1) bug was fixed */
|
/* check to be sure that the srand(1) bug was fixed */
|
||||||
tmp = srand(1);
|
tmp = srand(1);
|
||||||
@@ -1565,36 +1659,36 @@ define test_rand()
|
|||||||
print '1551: n = 1';
|
print '1551: n = 1';
|
||||||
vrfy(num(n), '1552: num(n)');
|
vrfy(num(n), '1552: num(n)');
|
||||||
vrfy(den(n), '1553: den(n)');
|
vrfy(den(n), '1553: den(n)');
|
||||||
vrfy(randbit(64) == 0x4280429f8069cb27, \
|
vrfy(randbit(64) == 0xbf989a4c504a541d, \
|
||||||
'1554: randbit(64) == 0x4280429f8069cb27');
|
'1554: randbit(64) == 0xbf989a4c504a541d');
|
||||||
|
|
||||||
/* test randbit skip interface */
|
/* test randbit skip interface */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1555: tmp = srand(0)';
|
print '1555: tmp = srand(0)';
|
||||||
vrfy(randbit(20) == 817647, '1556: randbit(20) == 817647');
|
vrfy(randbit(20) == 0x1fe5b, '1556: randbit(20) == 0x1fe5b');
|
||||||
vrfy(randbit(20) == 476130, '1557: randbit(20) == 476130');
|
vrfy(randbit(20) == 0x46fba, '1557: randbit(20) == 0x46fba');
|
||||||
vrfy(randbit(20) == 944201, '1558: randbit(20) == 944201');
|
vrfy(randbit(20) == 0x7e069, '1558: randbit(20) == 0x7e069');
|
||||||
vrfy(randbit(20) == 822573, '1559: randbit(20) == 822573');
|
vrfy(randbit(20) == 0xd308d, '1559: randbit(20) == 0xd308d');
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1560: tmp = srand(0)';
|
print '1560: tmp = srand(0)';
|
||||||
vrfy(randbit(-20) == 20, '1561: randbit(-20) == 20');
|
vrfy(randbit(-20) == 20, '1561: randbit(-20) == 20');
|
||||||
vrfy(randbit(20) == 476130, '1562: randbit(20) == 476130');
|
vrfy(randbit(20) == 290746, '1562: randbit(20) == 290746');
|
||||||
vrfy(randbit(-20) == 20, '1563: randbit(-20) == 20');
|
vrfy(randbit(-20) == 20, '1563: randbit(-20) == 20');
|
||||||
vrfy(randbit(20) == 822573, '1564: randbit(20) == 822573');
|
vrfy(randbit(20) == 864397, '1564: randbit(20) == 864397');
|
||||||
|
|
||||||
/* test randbit without and arg */
|
/* test randbit without and arg */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1565: tmp = srand(0)';
|
print '1565: tmp = srand(0)';
|
||||||
vrfy(randbit() == 1, '1566: randbit() == 1');
|
vrfy(randbit() == 0, '1566: randbit() == 0');
|
||||||
vrfy(randbit() == 1, '1567: randbit() == 1');
|
vrfy(randbit() == 0, '1567: randbit() == 0');
|
||||||
vrfy(randbit() == 0, '1568: randbit() == 0');
|
vrfy(randbit() == 0, '1568: randbit() == 0');
|
||||||
|
vrfy(randbit() == 1, '1569: randbit() == 1');
|
||||||
|
|
||||||
/* test seed() as best as we can */
|
/* test seed() as best as we can */
|
||||||
vrfy(seed() >= 0, '1569: seed() >= 0');
|
vrfy(seed() >= 0, '1570: seed() >= 0');
|
||||||
vrfy(seed() < 2^64, '1570: seed() < 2^64');
|
vrfy(seed() < 2^64, '1571: seed() < 2^64');
|
||||||
vrfy(isrand(srand(seed())), '1571: isrand(srand(seed()))');
|
vrfy(isrand(srand(seed())), '1572: isrand(srand(seed()))');
|
||||||
|
|
||||||
print '1572: Ending rand test';
|
print '1573: Ending rand test';
|
||||||
}
|
}
|
||||||
print '025: parsed test_rand()';
|
print '025: parsed test_rand()';
|
||||||
|
|
||||||
@@ -1710,7 +1804,23 @@ define test_mode()
|
|||||||
vrfy(str(3e9) == "3000000000", \
|
vrfy(str(3e9) == "3000000000", \
|
||||||
'1650: str(3e9) == \"3000000000\"');
|
'1650: str(3e9) == \"3000000000\"');
|
||||||
|
|
||||||
print '1651: Ending mode/base test';
|
/* test base2() functionality */
|
||||||
|
vrfy(base2() == 0, '1651: base2() == 0');
|
||||||
|
vrfy(base2(0) == 0, '1652: base2(0) == 0');
|
||||||
|
vrfy(base2() == 0, '1653: base2() == 0');
|
||||||
|
vrfy(base2(16) == 0, '1654: base2(16) == 0');
|
||||||
|
vrfy(base2() == 16, '1655: base2() == 16');
|
||||||
|
vrfy(str(3e9) == "3000000000 /* 0xb2d05e00 */",
|
||||||
|
'1656: str(3e9) == "3000000000 /* 0xb2d05e00 */"');
|
||||||
|
vrfy(base2(1/3) == 16, '1657: base2(16) == 16');
|
||||||
|
vrfy(str(23209) == "23209 /* 23209 */",
|
||||||
|
'1658: str(23209) == "23209 /* 23209 */"');
|
||||||
|
vrfy(str(3/2) == "1.5 /* 3/2 */",
|
||||||
|
'1659: str(3/2) == "1.5 /* 3/2 */"');
|
||||||
|
vrfy(base() == 10, '1660: base() == 10');
|
||||||
|
vrfy(base2(0) == 1/3, '1661: base2(0) == 1/3');
|
||||||
|
|
||||||
|
print '1662: Ending mode/base test';
|
||||||
}
|
}
|
||||||
print '026: parsed test_mode()';
|
print '026: parsed test_mode()';
|
||||||
|
|
||||||
@@ -2105,6 +2215,7 @@ print '033: read -once test2300';
|
|||||||
define test_xx_incdec()
|
define test_xx_incdec()
|
||||||
{
|
{
|
||||||
local A, B;
|
local A, B;
|
||||||
|
local n;
|
||||||
|
|
||||||
print '2300: Beginning object increment/decrement test';
|
print '2300: Beginning object increment/decrement test';
|
||||||
|
|
||||||
@@ -2137,6 +2248,20 @@ define test_xx_incdec()
|
|||||||
vrfy(ckmat(B,1,2,3) == 1,
|
vrfy(ckmat(B,1,2,3) == 1,
|
||||||
'2314: ckmat(B,1,2,3) == 1');
|
'2314: ckmat(B,1,2,3) == 1');
|
||||||
|
|
||||||
|
n = 1;
|
||||||
|
print '2315: n = 1';
|
||||||
|
vrfy(n + n + n + n++ == 4,
|
||||||
|
'2316: n + n + n + n++ == 4');
|
||||||
|
vrfy(n == 2, '2317: n == 2');
|
||||||
|
n = 1;
|
||||||
|
print '2318: n = 1';
|
||||||
|
vrfy(n + n + n++ == 3, '2319: n + n + n++ == 3');
|
||||||
|
vrfy(n == 2, '2320: n == 2');
|
||||||
|
n = 1;
|
||||||
|
print '2321: n = 1';
|
||||||
|
vrfy(n + n++ == 2, '2322: n + n++ == 3');
|
||||||
|
vrfy(n == 2, '2323: n == 2');
|
||||||
|
|
||||||
print '2315: Ending object increment/decrement test';
|
print '2315: Ending object increment/decrement test';
|
||||||
}
|
}
|
||||||
print '034: parsed test_xx_incdec()';
|
print '034: parsed test_xx_incdec()';
|
||||||
@@ -2451,6 +2576,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()';
|
||||||
@@ -2987,7 +3155,7 @@ define test_error()
|
|||||||
vrfy(root(3,2,0) == error(10029),
|
vrfy(root(3,2,0) == error(10029),
|
||||||
'3644: root(3,2,0) == error(10029)');
|
'3644: root(3,2,0) == error(10029)');
|
||||||
vrfy(norm("x") == error(10030), '3645: norm("x") == error(10030)');
|
vrfy(norm("x") == error(10030), '3645: norm("x") == error(10030)');
|
||||||
vrfy(null() << 2 == error(10031),'3646: null() << 2 == error(10031)');
|
vrfy(list() << 2 == error(10031),'3646: list() << 2 == error(10031)');
|
||||||
vrfy(1.5 << 2 == error(10031), '3647: 1.5 << 2 == error(10031)');
|
vrfy(1.5 << 2 == error(10031), '3647: 1.5 << 2 == error(10031)');
|
||||||
vrfy(3 << "x" == error(10032), '3648: 3 << "x" == error(10032)');
|
vrfy(3 << "x" == error(10032), '3648: 3 << "x" == error(10032)');
|
||||||
vrfy(3 << 1.5 == error(10032), '3649: 3 << 1.5 == error(10032)');
|
vrfy(3 << 1.5 == error(10032), '3649: 3 << 1.5 == error(10032)');
|
||||||
@@ -3085,8 +3253,7 @@ define test_error()
|
|||||||
print '3712: e9999 = error(9999)';
|
print '3712: e9999 = error(9999)';
|
||||||
vrfy(errno() == 9999, '3713: errno() == 9999');
|
vrfy(errno() == 9999, '3713: errno() == 9999');
|
||||||
vrfy(error() == e9999, '3714: error() == e9999');
|
vrfy(error() == e9999, '3714: error() == e9999');
|
||||||
vrfy(substr(strerror(), strpos(strerror(),"9999"), 4) == "9999",
|
/* test 3715 removed due to non-portable strerror() output */
|
||||||
'3715: substr(strerror(), strpos(strerror(),"9999"), 4) == "9999"');
|
|
||||||
x = newerror("Alpha");
|
x = newerror("Alpha");
|
||||||
print '3716: x = newerror("Alpha")';
|
print '3716: x = newerror("Alpha")';
|
||||||
n = iserror(x);
|
n = iserror(x);
|
||||||
@@ -3097,16 +3264,14 @@ define test_error()
|
|||||||
vrfy(errno(9999) == n, '3721: errno() == n');
|
vrfy(errno(9999) == n, '3721: errno() == n');
|
||||||
vrfy(errno() == 9999, '3722: errno() == 9999');
|
vrfy(errno() == 9999, '3722: errno() == 9999');
|
||||||
vrfy(error() == e9999, '3723: error() == e9999');
|
vrfy(error() == e9999, '3723: error() == e9999');
|
||||||
vrfy(substr(strerror(), strpos(strerror(),"9999"), 4) == "9999",
|
/* test 3724 removed due to non-portable strerror() output */
|
||||||
'3724: substr(strerror(), strpos(strerror(),"9999"), 4) == "9999"');
|
|
||||||
a = 1/0;
|
a = 1/0;
|
||||||
print '3725: a = 1/0';
|
print '3725: a = 1/0';
|
||||||
vrfy(strerror() == "Division by zero",
|
vrfy(strerror() == "Division by zero",
|
||||||
'3726: strerror() == "Division by zero"');
|
'3726: strerror() == "Division by zero"');
|
||||||
n = 8191;
|
n = 8191;
|
||||||
print '3727: n = 8191';
|
print '3727: n = 8191';
|
||||||
vrfy(substr(strerror(8191),strpos(strerror(n),"8191"), 4) == "8191",
|
/* test 3728 removed due to non-portable strerror() output */
|
||||||
'3728: substr(strerror(n),strpos(strerror(n),"8191"),4) == "8191"');
|
|
||||||
|
|
||||||
/* errmax and errcount should be bumped up the 148 errors above */
|
/* errmax and errcount should be bumped up the 148 errors above */
|
||||||
vrfy(errcount() == ecnt, '3729: errcount() == ecnt');
|
vrfy(errcount() == ecnt, '3729: errcount() == ecnt');
|
||||||
@@ -3239,11 +3404,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, 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';
|
||||||
|
|
||||||
@@ -3341,13 +3507,37 @@ 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');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cleanup
|
* cleanup
|
||||||
*/
|
*/
|
||||||
x = rm("junk4200");
|
x = rm("junk4200");
|
||||||
print '4260: x = rm("junk4200")';
|
print '4269: x = rm("junk4200")';
|
||||||
|
|
||||||
print '4261: Ending test_fileops';
|
print '4270: Ending test_fileops';
|
||||||
}
|
}
|
||||||
print '071: parsed test_fileops()';
|
print '071: parsed test_fileops()';
|
||||||
|
|
||||||
@@ -4467,7 +4657,14 @@ define test_random()
|
|||||||
vrfy(seed() < 2^64, '5465: seed() < 2^64');
|
vrfy(seed() < 2^64, '5465: seed() < 2^64');
|
||||||
vrfy(israndom(srandom(seed())), '5466: israndom(srandom(seed()))');
|
vrfy(israndom(srandom(seed())), '5466: israndom(srandom(seed()))');
|
||||||
|
|
||||||
print '5467: Ending test_random';
|
/* verify random(10,11) double bug fix */
|
||||||
|
vrfy(random(10,11) == 10, '5467: random(10,11) == 10');
|
||||||
|
vrfy(random(10,11) == 10, '5468: random(10,11) == 10');
|
||||||
|
vrfy(random(10,11) == 10, '5469: random(10,11) == 10');
|
||||||
|
vrfy(random(0,1) == 0, '5470: random(0,1) == 0');
|
||||||
|
vrfy(random(0,1) == 0, '5471: random(0,1) == 0');
|
||||||
|
|
||||||
|
print '5472: Ending test_random';
|
||||||
}
|
}
|
||||||
print '137: parsed test_random()';
|
print '137: parsed test_random()';
|
||||||
|
|
||||||
@@ -4964,7 +5161,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
|
||||||
@@ -5037,10 +5234,17 @@ define test_is()
|
|||||||
*/
|
*/
|
||||||
a = assoc();
|
a = assoc();
|
||||||
print '5901: a = assoc()';
|
print '5901: a = assoc()';
|
||||||
ofd = fopen("/dev/null", "r");
|
if (config("windows")) {
|
||||||
print '5902: ofd = fopen("/dev/null", "r")';
|
ofd = fopen("NUL:", "rb");
|
||||||
cfd = fopen("/dev/null", "r");
|
print '5902: ofd = fopen("NUL:", "rb")';
|
||||||
print '5903: cfd = fopen("/dev/null", "r")';
|
cfd = fopen("NUL:", "rb");
|
||||||
|
print '5903: cfd = fopen("NUL:", "rb")';
|
||||||
|
} else {
|
||||||
|
ofd = fopen("/dev/null","rb");
|
||||||
|
print '5902: ofd = fopen("/dev/null","rb")';
|
||||||
|
cfd = fopen("/dev/null","rb");
|
||||||
|
print '5903: cfd = fopen("/dev/null","rb")';
|
||||||
|
}
|
||||||
fclose(cfd);
|
fclose(cfd);
|
||||||
print '5904: fclose(cfd)';
|
print '5904: fclose(cfd)';
|
||||||
blk = blk();
|
blk = blk();
|
||||||
@@ -5080,7 +5284,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;
|
||||||
@@ -6079,7 +6283,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');
|
||||||
@@ -6218,8 +6422,8 @@ define test_blkcpy()
|
|||||||
|
|
||||||
/* blkcpy the last 5 octets of B1 to a new block C */
|
/* blkcpy the last 5 octets of B1 to a new block C */
|
||||||
|
|
||||||
blkcpy(C = blk(), B1, 5, ,100);
|
blkcpy(C = blk(), B1,5,,100);
|
||||||
print '6821: blkcpy(C = blk(), B1, 5, ,100);';
|
print '6821: blkcpy(C = blk(), B1,5,,100);';
|
||||||
vrfy(C == A, '6822: C == A');
|
vrfy(C == A, '6822: C == A');
|
||||||
|
|
||||||
/* blkcpy to and from a file */
|
/* blkcpy to and from a file */
|
||||||
@@ -6235,8 +6439,8 @@ define test_blkcpy()
|
|||||||
blkcpy(fs, A, ,100);
|
blkcpy(fs, A, ,100);
|
||||||
print '6828: blkcpy(fs, A, ,100);';
|
print '6828: blkcpy(fs, A, ,100);';
|
||||||
vrfy(size(fs) == 105, '6829: size(f) == 105');
|
vrfy(size(fs) == 105, '6829: size(f) == 105');
|
||||||
blkcpy(C = blk(), fs, 2, ,100);
|
blkcpy(C = blk(), fs,2,,100);
|
||||||
print '6830: blkcpy(C = blk(), fs, 2, ,100)';
|
print '6830: blkcpy(C = blk(), fs,2,,100)';
|
||||||
vrfy(C == (blk() = {1,2}), '6831: C == (blk() = {1,2}');
|
vrfy(C == (blk() = {1,2}), '6831: C == (blk() = {1,2}');
|
||||||
|
|
||||||
/* blkcpy string to a block */
|
/* blkcpy string to a block */
|
||||||
@@ -6474,10 +6678,10 @@ define test_sha()
|
|||||||
0x21e42319a26787046c2b28b7ae70f1b54bf0ba2a,
|
0x21e42319a26787046c2b28b7ae70f1b54bf0ba2a,
|
||||||
'7122: sha(sha("this is", 7^19-8, ..., "hash")) == 0x21e4...');
|
'7122: sha(sha("this is", 7^19-8, ..., "hash")) == 0x21e4...');
|
||||||
|
|
||||||
z = sha(list(1,2,3), "curds and whey", 2^21701-1, pi());
|
z = sha(list(1,2,3), "curds and whey", 2^21701-1, pi(1e-100));
|
||||||
print '7123: 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(1e-100));';
|
||||||
vrfy(sha(z) == 0x36dcca3e51865c30a2cf738023cda446f1368340,
|
vrfy(sha(z) == 257075527903934749824451356785709876382198951165,
|
||||||
'7124: sha(z) == 0x36dcca3e51865c30a2cf738023cda446f1368340');
|
'7124: sha(z) == 257075527903934749824451356785709876382198951165');
|
||||||
|
|
||||||
y = sha();
|
y = sha();
|
||||||
print '7125: y = sha()';
|
print '7125: y = sha()';
|
||||||
@@ -6485,8 +6689,8 @@ define test_sha()
|
|||||||
print '7126: 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);
|
y = sha(y, 2^21701-1);
|
||||||
print '7127: y = sha(y, 2^21701-1)';
|
print '7127: y = sha(y, 2^21701-1)';
|
||||||
y = sha(y, pi());
|
y = sha(y, pi(1e-100));
|
||||||
print '7128: y = sha(y, pi())';
|
print '7128: y = sha(y, pi(1e-100))';
|
||||||
vrfy(y == z, '7129: y == z');
|
vrfy(y == z, '7129: y == z');
|
||||||
|
|
||||||
B = blk() = {"a", "b", "c"};
|
B = blk() = {"a", "b", "c"};
|
||||||
@@ -6545,10 +6749,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();';
|
||||||
@@ -6556,8 +6760,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,
|
||||||
@@ -6633,18 +6837,18 @@ define test_md5()
|
|||||||
'7310: md5(md5("this is", 7^19-8, "a composit", 3i+4.5, "hash")) == ...');
|
'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());
|
z = md5(list(1,2,3), "curds and whey", 2^21701-1, pi(1e-100));
|
||||||
print '7311: 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(1e-100));';
|
||||||
vrfy(md5(z) == 0x63d2b2fccae2de265227c30b05abb6b5,
|
vrfy(md5(z) == 0x487462e577eabef0302dd13af6632546,
|
||||||
'7312: md5(z) == 0x63d2b2fccae2de265227c30b05abb6b5');
|
'7312: md5(z) == 0x487462e577eabef0302dd13af6632546');
|
||||||
y = md5();
|
y = md5();
|
||||||
print '7313: y = md5();';
|
print '7313: y = md5();';
|
||||||
y = md5(y, list(1,2,3), "curds and whey");
|
y = md5(y, list(1,2,3), "curds and whey");
|
||||||
print '7314: 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);
|
y = md5(y, 2^21701-1);
|
||||||
print '7315: y = md5(y, 2^21701-1);';
|
print '7315: y = md5(y, 2^21701-1);';
|
||||||
y = md5(y, pi());
|
y = md5(y, pi(1e-100));
|
||||||
print '7316: y = md5(y, pi());';
|
print '7316: y = md5(y, pi(1e-100));';
|
||||||
vrfy(y == z, '7317: y == z');
|
vrfy(y == z, '7317: y == z');
|
||||||
|
|
||||||
vrfy(md5(md5("a")) == 0x0cc175b9c0f1b6a831c399e269772661,
|
vrfy(md5(md5("a")) == 0x0cc175b9c0f1b6a831c399e269772661,
|
||||||
@@ -7181,7 +7385,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"');
|
||||||
|
|
||||||
@@ -7518,7 +7722,9 @@ vrfy(j8300(10) == 11, '8307: j8300(10) == 11');
|
|||||||
{static k8300 = 5} define l8300(x) = k8300 + x;
|
{static k8300 = 5} define l8300(x) = k8300 + x;
|
||||||
print '8308: {static k8300 = 5} define l8300(x) = k8300 + x;';
|
print '8308: {static k8300 = 5} define l8300(x) = k8300 + x;';
|
||||||
vrfy(l8300(10) == 15, '8309: l8300(10) == 15');
|
vrfy(l8300(10) == 15, '8309: l8300(10) == 15');
|
||||||
print '8310: Ending define tests';
|
static a8300 = 1, b8300;
|
||||||
|
vrfy(a8300 == 1, '8310: a8300 == 1');
|
||||||
|
print '8311: Ending define tests';
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -7536,11 +7742,34 @@ 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
|
||||||
|
*/
|
||||||
|
print;
|
||||||
|
print '8600: Starting test of up to 1024 args'
|
||||||
|
read -once "test8600";
|
||||||
|
/* 86xx: Ending test of up to 1024 args is printed by test8600.cal */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* dotest scripts
|
||||||
|
*
|
||||||
|
* We use the dotest driver to evaluate test-97xx data files.
|
||||||
|
*/
|
||||||
|
print '8700: Starting dotest runs'
|
||||||
|
print '8701: read -once "dotest"';
|
||||||
|
read -once "dotest";
|
||||||
|
print '8702: read -once "set8700"';
|
||||||
|
read -once "set8700";
|
||||||
|
vrfy(dotest("set8700.line", 8703) == 0,
|
||||||
|
'8703: dotest("set8700.line", 8703) == 0');
|
||||||
|
/* 87xx: Ending dotest runs is printed by set8700.test */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* read various calc resource files
|
* read various calc resource files
|
||||||
*
|
*
|
||||||
|
53
cal/repeat.cal
Normal file
53
cal/repeat.cal
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* repeat - return the value of a repeated set of digits
|
||||||
|
*
|
||||||
|
* Copyright (C) 2003 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.4 $
|
||||||
|
* @(#) $Id: repeat.cal,v 29.4 2003/01/26 19:42:03 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/repeat.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2003/01/05 00:00:01
|
||||||
|
* File existed as early as: 2003
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* repeat - return the value of a repeated set of digits
|
||||||
|
*
|
||||||
|
* usage:
|
||||||
|
* repeat(digit_set, repeat_count)
|
||||||
|
*/
|
||||||
|
define repeat(digit_set, repeat_count)
|
||||||
|
{
|
||||||
|
local digit_count; /* digits in the digit_set */
|
||||||
|
|
||||||
|
/* firewall */
|
||||||
|
if (!isint(digit_set) || digit_set <= 0) {
|
||||||
|
quit "digit set must be an integer > 0";
|
||||||
|
}
|
||||||
|
if (!isint(repeat_count) || repeat_count <= 0) {
|
||||||
|
quit "repeat count must be an integer > 0";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* return repeated set of digits */
|
||||||
|
digit_count = digits(digit_set);
|
||||||
|
return digit_set * (10^(digit_count*repeat_count)-1) / (10^digit_count-1);
|
||||||
|
}
|
61
cal/screen.cal
Normal file
61
cal/screen.cal
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* screen - ANSI control sequences
|
||||||
|
*
|
||||||
|
* This file was created by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||||
|
*
|
||||||
|
* This code has been placed in the public domain. Please do not
|
||||||
|
* copyright this code.
|
||||||
|
*
|
||||||
|
* ERNEST BOWEN DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||||||
|
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MER-
|
||||||
|
* CHANTABILITY AND FITNESS. IN NO EVENT SHALL LANDON CURT
|
||||||
|
* NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
||||||
|
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||||
|
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.2 $
|
||||||
|
* @(#) $Id: screen.cal,v 29.2 2006/05/01 19:21:18 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/screen.cal,v $
|
||||||
|
*
|
||||||
|
* This file is not covered under version 2.1 of the GNU LGPL.
|
||||||
|
*
|
||||||
|
* Under source code control: 2006/03/08 05:54:09
|
||||||
|
* File existed as early as: 2006
|
||||||
|
*/
|
||||||
|
|
||||||
|
up = CUU ="\e[A";
|
||||||
|
down = CUD = "\e[B}";
|
||||||
|
forward = CUF = "\e[C";
|
||||||
|
back = CUB = "\e[D";
|
||||||
|
save = SCP = "\e[s";
|
||||||
|
restore = RCP = "\e[u";
|
||||||
|
cls = "\e[2J";
|
||||||
|
home = "\e[F";
|
||||||
|
eraseline = "\e[K";
|
||||||
|
off = "\e[0m";
|
||||||
|
bold = "\e[1m";
|
||||||
|
faint = "\e[2m";
|
||||||
|
italic = "\e[3m";
|
||||||
|
blink = "\e[5m";
|
||||||
|
rapidblink = "\e[6m";
|
||||||
|
reverse = "\e[7m";
|
||||||
|
concealed = "\e[8m";
|
||||||
|
/* Lowercase indicates foreground, uppercase background" */
|
||||||
|
black = "\e[30m";
|
||||||
|
red = "\e[31m";
|
||||||
|
green = "\e[32m";
|
||||||
|
yellow = "\e[33m";
|
||||||
|
blue = "\e[34m";
|
||||||
|
magenta = "\e[35m";
|
||||||
|
cyan = "\e[36m";
|
||||||
|
white = "\e[37m";
|
||||||
|
Black = "\e[40m";
|
||||||
|
Red = "\e[41m";
|
||||||
|
Green = "\e[42m";
|
||||||
|
Yellow = "\e[43m";
|
||||||
|
Blue = "\e[44m";
|
||||||
|
Magenta = "\e[45m";
|
||||||
|
Cyan = "\e[46m";
|
||||||
|
White = "\e[47m";
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: seedrandom.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
|
* @(#) $Id: seedrandom.cal,v 29.3 2001/03/31 13:31:34 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
|
||||||
* File existed as early as: 1996
|
* File existed as early as: 1996
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -115,7 +115,7 @@ define seedrandom(seed1, seed2, size, trials)
|
|||||||
p = 2*fp+1;
|
p = 2*fp+1;
|
||||||
} while (ptest(p,1,0) == 0);
|
} while (ptest(p,1,0) == 0);
|
||||||
} while(ptest(p, trials) == 0 || ptest(fp, trials) == 0);
|
} while(ptest(p, trials) == 0 || ptest(fp, trials) == 0);
|
||||||
if (config("resource_debug") & 3) {
|
if (config("resource_debug") & 8) {
|
||||||
print "/* 1st Blum prime */ p=", p;
|
print "/* 1st Blum prime */ p=", p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@ define seedrandom(seed1, seed2, size, trials)
|
|||||||
q = 2*fq+1;
|
q = 2*fq+1;
|
||||||
} while (ptest(q,1,0) == 0);
|
} while (ptest(q,1,0) == 0);
|
||||||
} while(ptest(q, trials) == 0 || ptest(fq, trials) == 0);
|
} while(ptest(q, trials) == 0 || ptest(fq, trials) == 0);
|
||||||
if (config("resource_debug") & 3) {
|
if (config("resource_debug") & 8) {
|
||||||
print "/* 2nd Blum prime */ q=", q;
|
print "/* 2nd Blum prime */ q=", q;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@ define seedrandom(seed1, seed2, size, trials)
|
|||||||
n = p*q; /* the Blum modulus */
|
n = p*q; /* the Blum modulus */
|
||||||
binsize = highbit(n)+1; /* smallest power of 2 > p*q */
|
binsize = highbit(n)+1; /* smallest power of 2 > p*q */
|
||||||
r = pmod(rand(1<<ceil(binsize*4/5), 1<<(binsize-2)), 2, n);
|
r = pmod(rand(1<<ceil(binsize*4/5), 1<<(binsize-2)), 2, n);
|
||||||
if (config("resource_debug") & 3) {
|
if (config("resource_debug") & 8) {
|
||||||
print "/* seed quadratic residue */ r=", r;
|
print "/* seed quadratic residue */ r=", r;
|
||||||
print "/* newn", binsize, "bit quadratic residue*/ newn=", n;
|
print "/* newn", binsize, "bit quadratic residue*/ newn=", n;
|
||||||
}
|
}
|
||||||
|
72
cal/set8700.cal
Normal file
72
cal/set8700.cal
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* set8700 - environment for dotest line tests for the 8700 set of regress.cal
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Ernest Bowen and Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.1 $
|
||||||
|
* @(#) $Id: set8700.cal,v 29.1 2006/05/20 19:35:33 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2006/05/20 14:10:11
|
||||||
|
* File existed as early as: 2006
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* setup global variables for dotest() to use with set8700.set
|
||||||
|
*/
|
||||||
|
|
||||||
|
global set8700_A;
|
||||||
|
global set8700_B;
|
||||||
|
global set8700_M;
|
||||||
|
global set8700_M1;
|
||||||
|
global set8700_M2;
|
||||||
|
global set8700_L;
|
||||||
|
global set8700_L1;
|
||||||
|
global set8700_L2;
|
||||||
|
global set8700_O;
|
||||||
|
global set8700_P;
|
||||||
|
global set8700_P1;
|
||||||
|
global set8700_P2;
|
||||||
|
global set8700_Q;
|
||||||
|
global set8700_R;
|
||||||
|
global set8700_S;
|
||||||
|
global set8700_X;
|
||||||
|
global set8700_Y;
|
||||||
|
global set8700_x;
|
||||||
|
global set8700_y;
|
||||||
|
|
||||||
|
define set8700_getA1() = set8700_A;
|
||||||
|
|
||||||
|
define set8700_getA2() { return set8700_A; }
|
||||||
|
|
||||||
|
define set8700_getvar() {local a = 42; protect(a,256); return a;}
|
||||||
|
|
||||||
|
define set8700_f(set8700_x) = set8700_x^2;
|
||||||
|
|
||||||
|
define set8700_g(set8700_x)
|
||||||
|
{
|
||||||
|
if (isodd(set8700_x)) protect(set8700_x, 256);
|
||||||
|
return set8700_x;
|
||||||
|
}
|
||||||
|
|
||||||
|
obj set8700_point {
|
||||||
|
set8700_x, set8700_y, set8700_z
|
||||||
|
}
|
405
cal/set8700.line
Normal file
405
cal/set8700.line
Normal file
@@ -0,0 +1,405 @@
|
|||||||
|
##
|
||||||
|
## set8700 - dotest line tests for the 8700 set of regress.cal
|
||||||
|
##
|
||||||
|
## Copyright (C) 2006 Ernest Bowen and Landon Curt Noll
|
||||||
|
##
|
||||||
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
## as published by the Free Software Foundation.
|
||||||
|
##
|
||||||
|
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
## Public License for more details.
|
||||||
|
##
|
||||||
|
## A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
##
|
||||||
|
## @(#) $Revision: 29.1 $
|
||||||
|
## @(#) $Id: set8700.line,v 29.1 2006/05/20 19:35:33 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.line,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 2006/05/20 14:10:11
|
||||||
|
## File existed as early as: 2006
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
|
||||||
|
|
||||||
|
strcpy("", "") == ""
|
||||||
|
strcpy("", "xyz") == ""
|
||||||
|
strcpy("a", "xyz") == "x"
|
||||||
|
strcpy("ab", "xyz") == "xy"
|
||||||
|
strcpy("abc", "xyz") == "xyz"
|
||||||
|
strcpy("abcd", "xyz") == "xyz\0" ## Result will print as "xyz"
|
||||||
|
strcpy("abcde", "xyz") == "xyz\0e"
|
||||||
|
strcpy("abcdef", "xyz") == "xyz\0ef"
|
||||||
|
strcpy("abcdef", "x\0z") == "x\0z\0ef" ## Note z is copied
|
||||||
|
strcpy("abc", "") == "\0bc"
|
||||||
|
|
||||||
|
strncpy("abcdef", "xyz", 0) == "abcdef" ## No characters copied
|
||||||
|
strncpy("abcdef", "xyz", 1) == "xbcdef" ## One character copied, no '\0'
|
||||||
|
strncpy("abcdef", "xyz", 2) == "xycdef"
|
||||||
|
strncpy("abcdef", "xyz", 3) == "xyzdef"
|
||||||
|
strncpy("abcdef", "xyz", 4) == "xyz\0ef"
|
||||||
|
strncpy("abcdef", "xyz", 5) == "xyz\0\0f" ## Two nulls as in C
|
||||||
|
strncpy("abcdef", "xyz", 6) == "xyz\0\0\0"
|
||||||
|
strncpy("abcdef", "xyz", 7) == "xyz\0\0\0" ## Size of first string unchanged
|
||||||
|
strncpy("a\0cdef", "\0yz", 4) == "\0yz\0ef"
|
||||||
|
strncpy("ab", "xyz", 3) == "xy"
|
||||||
|
|
||||||
|
strcmp("", "") == 0
|
||||||
|
strcmp("", "a") == -1
|
||||||
|
strcmp("\n", "\n") == 0
|
||||||
|
strcmp("\0", "") == 1 ## '\0' treated like other characters
|
||||||
|
strcmp("ab", "") == 1
|
||||||
|
strcmp("ab", "a") == 1
|
||||||
|
strcmp("ab", "ab") == 0
|
||||||
|
strcmp("ab", "abc") == -1
|
||||||
|
strcmp("abc", "abb") == 1
|
||||||
|
strcmp("abc", "abc") == 0
|
||||||
|
strcmp("abc", "abd") == -1
|
||||||
|
strcmp("abc\0", "abc") == 1
|
||||||
|
|
||||||
|
strncmp("abc", "xyz", 0) == 0
|
||||||
|
strncmp("abc", "xyz", 1) == -1
|
||||||
|
strncmp("abc", "", 1) == 1
|
||||||
|
strncmp("abc", "a", 1) == 0
|
||||||
|
strncmp("", "", 2) == 0
|
||||||
|
strncmp("a", "a", 2) == 0
|
||||||
|
strncmp("a", "b", 2) == -1
|
||||||
|
strncmp("ab", "ab", 2) == 0
|
||||||
|
strncmp("ab", "ac", 2) == -1
|
||||||
|
strncmp("\0ac", "\0b", 2) == -1
|
||||||
|
strncmp("ab", "abc", 2) == 0
|
||||||
|
strncmp("abc", "abd", 2) == 0
|
||||||
|
strncmp("a", "a\0", 2) == -1
|
||||||
|
strncmp("a", "a", 3) == 0
|
||||||
|
strncmp("abc", "abd", 3) == -1
|
||||||
|
strncmp("\0\0\n", "\0\0\t", 3) == 1
|
||||||
|
|
||||||
|
str("abc") == "abc"
|
||||||
|
str("ab\0") == "ab"
|
||||||
|
str("a\0c") == "a"
|
||||||
|
str("\0bc") == ""
|
||||||
|
|
||||||
|
size("") == 0
|
||||||
|
size("a") == 1
|
||||||
|
size("\0") == 1
|
||||||
|
size("a\0") == 2
|
||||||
|
size("a\0b") == 3
|
||||||
|
|
||||||
|
strlen("\0") == 0
|
||||||
|
strlen("a\0") == 1
|
||||||
|
strlen("a\0b") == 1
|
||||||
|
|
||||||
|
0 * "abc" == ""
|
||||||
|
1 * "abc" == "abc"
|
||||||
|
2 * "abc" == "abcabc"
|
||||||
|
3 * "abc" == "abcabcabc"
|
||||||
|
1 * "" == ""
|
||||||
|
-1 * "abc" == "cba"
|
||||||
|
-2 * "abc" == "cbacba"
|
||||||
|
"abc" + "xyz" == "abcxyz"
|
||||||
|
"abc" - "xyz" == "abczyx"
|
||||||
|
|
||||||
|
|
||||||
|
substr("abcd",0,0) == ""
|
||||||
|
substr("abcd",0,1) == "a"
|
||||||
|
substr("abcd",0,2) == "ab"
|
||||||
|
substr("abcd",1,0) == ""
|
||||||
|
substr("abcd",1,1) == "a"
|
||||||
|
substr("abcd",1,2) == "ab"
|
||||||
|
substr("abcd",2,0) == ""
|
||||||
|
substr("abcd",2,1) == "b"
|
||||||
|
substr("abcd",2,2) == "bc";
|
||||||
|
substr("abcd",2,3) == "bcd";
|
||||||
|
substr("abcd",2,4) == "bcd";
|
||||||
|
substr("abcd",2,5) == "bcd"; ## substr stops at end of string
|
||||||
|
substr("abcd",4,0) == ""
|
||||||
|
substr("abcd",4,1) == "d"
|
||||||
|
substr("abcd",4,2) == "d"
|
||||||
|
substr("abcd",4,3) == "d"
|
||||||
|
substr("abcd",5,0) == ""
|
||||||
|
substr("abcd",5,1) == ""
|
||||||
|
substr("a\0c\0",2,2) == "\0c" ## '\0' treated like other characters
|
||||||
|
substr("a\0c\0",2,3) == "\0c\0"
|
||||||
|
|
||||||
|
#"" == 0 ## # operator counts number of bits
|
||||||
|
#"\0" == 0
|
||||||
|
# "a" == 3
|
||||||
|
# "ab" == 6 ## white space ignored
|
||||||
|
# "abc" == 10
|
||||||
|
# 27 == 4
|
||||||
|
# 0b1010111011 == 7
|
||||||
|
|
||||||
|
7 # 9 == 2 ## 7 # 9 = abs(7 - 9)
|
||||||
|
3/4 # 2/3 == 1/12
|
||||||
|
|
||||||
|
a = 5, a #= 2, a == 3
|
||||||
|
a #= 4, a == 1
|
||||||
|
|
||||||
|
## Binary # operator not defined for strings
|
||||||
|
|
||||||
|
global set8700_A; protect(set8700_A) == 0
|
||||||
|
## Testing with one lvalue
|
||||||
|
isnull(protect(set8700_A,65))
|
||||||
|
protect(set8700_A) == 65
|
||||||
|
isnull(protect(set8700_A, -1))
|
||||||
|
protect(set8700_A) == 64
|
||||||
|
protect(set8700_A,-2), protect(set8700_A) == 64
|
||||||
|
protect(set8700_A,5), protect(set8700_A) == 69
|
||||||
|
protect(set8700_A,-4), protect(set8700_A) == 65
|
||||||
|
protect(set8700_A,0), protect(set8700_A) == 0
|
||||||
|
protect(set8700_A,1234), protect(set8700_A) == 1234
|
||||||
|
protect(set8700_A,-1234), protect(set8700_A) == 0
|
||||||
|
protect(set8700_A,65535), protect(set8700_A) == 65535
|
||||||
|
protect(set8700_A,-65535), protect(set8700_A) == 0
|
||||||
|
|
||||||
|
## Simple assignments
|
||||||
|
set8700_A = 42, protect(set8700_A,1024), set8700_B = set8700_A, protect(set8700_B) == 1024
|
||||||
|
set8700_A = 6 * 7, protect(set8700_A) == 1024
|
||||||
|
set8700_A == set8700_B
|
||||||
|
|
||||||
|
## Testing matrix protectioon
|
||||||
|
set8700_A = mat [3] = {1, 2, list(3,4)}; 1
|
||||||
|
protect(set8700_A, 65, 1), protect(set8700_A) == 1089
|
||||||
|
protect(set8700_A[0]) == 65
|
||||||
|
protect(set8700_A[2]) == 65
|
||||||
|
protect(set8700_A[2][1]) == 0
|
||||||
|
protect(set8700_A, 65, 2), protect(set8700_A[2][1]) == 65
|
||||||
|
protect(set8700_A,-1024), protect(set8700_A) == 65
|
||||||
|
protect(set8700_A, -1, 1), protect(set8700_A) == 64
|
||||||
|
protect(set8700_A[1]) == 64
|
||||||
|
protect(set8700_A[2]) == 64
|
||||||
|
protect(set8700_A[2][0]) == 65
|
||||||
|
protect(set8700_A,0), protect(set8700_A) == 0
|
||||||
|
protect(set8700_A[1]) == 64
|
||||||
|
protect(set8700_A, 0, 2), protect(set8700_A) == 0
|
||||||
|
protect(set8700_A[1]) == 0
|
||||||
|
protect(set8700_A[2][1]) == 0
|
||||||
|
protect(set8700_A,1024, 2), protect(set8700_A) == 1024
|
||||||
|
protect(set8700_A[2]) == 1024
|
||||||
|
protect(set8700_A[2][0], 512), protect(set8700_A[2][0]) == 1536
|
||||||
|
|
||||||
|
## Testing simple assignment of matrix
|
||||||
|
set8700_B = set8700_A, protect(set8700_B) == 1024 ## protect(set8700_A) copied
|
||||||
|
protect(set8700_B[2]) == 1024 ## protect(set8700_A[2]) copied
|
||||||
|
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||||
|
|
||||||
|
## copying matrix to list
|
||||||
|
set8700_B = list(5,6,7), protect(set8700_B) == 1024
|
||||||
|
protect(set8700_B[0]) == 0
|
||||||
|
protect(set8700_B[2]) == 0
|
||||||
|
protect(set8700_A,0), protect(set8700_A) == 0
|
||||||
|
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||||
|
set8700_B[2] == list(3,4)
|
||||||
|
protect(set8700_B) == 1024 ## protect(set8700_A) not copied
|
||||||
|
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||||
|
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||||
|
|
||||||
|
## copying matrix to matrix
|
||||||
|
set8700_B = mat[3], protect(set8700_B) == 1024
|
||||||
|
protect(set8700_B[2]) == 0
|
||||||
|
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||||
|
set8700_B[2] == list(3,4)
|
||||||
|
protect(set8700_B) == 1024 ## protect(set8700_A) not copied
|
||||||
|
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||||
|
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||||
|
|
||||||
|
## Testing list protection
|
||||||
|
set8700_A = list(1, 2, list(3,4)), 1
|
||||||
|
protect(set8700_A,1024, 2), protect(set8700_A) == 1024
|
||||||
|
protect(set8700_A[2]) == 1024
|
||||||
|
protect(set8700_A[2][0], 512), protect(set8700_A[2][0]) == 1536
|
||||||
|
|
||||||
|
## Simple assignment of list
|
||||||
|
set8700_B = set8700_A, protect(set8700_B) == 1024 ## protect(set8700_A) copied
|
||||||
|
protect(set8700_B[2]) == 1024 ## protect(set8700_A[2]) copied
|
||||||
|
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||||
|
|
||||||
|
## Copying list to list
|
||||||
|
set8700_B = list(5,6,7), protect(set8700_B) == 1024
|
||||||
|
protect(set8700_B[2]) == 0
|
||||||
|
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||||
|
set8700_B[2] == list(3,4)
|
||||||
|
protect(set8700_B) == 1024 ## protect(set8700_A) not copied
|
||||||
|
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||||
|
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||||
|
|
||||||
|
## Copying list to matrix
|
||||||
|
set8700_B = mat[3], protect(set8700_B) == 1024
|
||||||
|
protect(set8700_B[2]) == 0
|
||||||
|
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||||
|
set8700_B[2] == list(3,4)
|
||||||
|
protect(set8700_B) == 1024
|
||||||
|
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||||
|
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||||
|
|
||||||
|
## Protecting one element of a list
|
||||||
|
set8700_A = list(1,4,3,2), protect(set8700_A[1]) == 0
|
||||||
|
protect(set8700_A[1], 1024), protect(set8700_A[1]) == 1024
|
||||||
|
|
||||||
|
## Testing sort
|
||||||
|
set8700_A = sort(set8700_A), set8700_A == list(1,2,3,4)
|
||||||
|
protect(set8700_A[1]) == 0
|
||||||
|
protect(set8700_A[3]) == 1024 ## status of 4
|
||||||
|
|
||||||
|
## Testings reverse
|
||||||
|
set8700_A = reverse(set8700_A), set8700_A == list(4,3,2,1)
|
||||||
|
protect(set8700_A[0]) == 1024 ## status of 4
|
||||||
|
|
||||||
|
## Testing swap
|
||||||
|
swap(set8700_A[0], set8700_A[1]), set8700_A == list(3,4,2,1)
|
||||||
|
protect(set8700_A[0]) == 0 ## status moved
|
||||||
|
protect(set8700_A[1]) == 1024 ## 4 retains protection
|
||||||
|
|
||||||
|
## Testing list with protected list argument
|
||||||
|
protect(set8700_A, 0), protect(set8700_A) == 0
|
||||||
|
protect(set8700_A, 512), protect(set8700_A) == 512
|
||||||
|
protect(set8700_A[1]) == 1024
|
||||||
|
set8700_L = list(1,set8700_A,3), protect(set8700_L) == 0
|
||||||
|
protect(set8700_L[0]) == 0
|
||||||
|
protect(set8700_L[1]) == 512 ## protect(set8700_A) copied
|
||||||
|
protect(set8700_L[1][1]) == 1024 ## protect(set8700_A[1]) copied
|
||||||
|
|
||||||
|
## Testing list with "intialization"
|
||||||
|
set8700_L = list(1,2,3), protect(set8700_L) == 0
|
||||||
|
protect(set8700_L[0]) | protect(set8700_L[1]) | protect(set8700_L[2]) == 0 ## All zero
|
||||||
|
set8700_L = {1,set8700_A}, set8700_L[1] == set8700_A
|
||||||
|
protect(set8700_L[1]) == 512 ## protect(set8700_A) copied
|
||||||
|
protect(set8700_L[1][1]) == 1024 ## protect(set8700_A[1]) copied
|
||||||
|
set8700_L[1] = 2, protect(set8700_L[1]) == 512 ## Not changed
|
||||||
|
|
||||||
|
## Testing matrix with "initialization"
|
||||||
|
set8700_M = mat[3] = {1,set8700_A}, protect(set8700_M) == 0
|
||||||
|
protect(set8700_M[0]) == 0
|
||||||
|
protect(set8700_M[1]) == 512 ## protect(set8700_A) copied
|
||||||
|
protect(set8700_M[2]) == 0
|
||||||
|
protect(set8700_M[1][1]) == 1024 ## protect(set8700_A[1]) copied
|
||||||
|
|
||||||
|
## Testing push, pop, append, remove
|
||||||
|
set8700_A = list(1,2), protect(set8700_A,0,1), protect(set8700_A[0]) == 0
|
||||||
|
protect(set8700_A[0], 256), protect(set8700_A[0]) == 256
|
||||||
|
protect(set8700_A[1]) == 0
|
||||||
|
append(set8700_A, pop(set8700_A)), protect(set8700_A[0]) == 0
|
||||||
|
protect(set8700_A[1]) == 256
|
||||||
|
push(set8700_A, remove(set8700_A)), protect(set8700_A[0]) == 256
|
||||||
|
protect(set8700_A[1]) == 0
|
||||||
|
|
||||||
|
## Testing operation-assignments
|
||||||
|
set8700_A = 5, protect(set8700_A,1024), protect(set8700_A) == 1024
|
||||||
|
protect(set8700_A, 1024), set8700_A = 7, protect(set8700_A) == 1024
|
||||||
|
protect(set8700_A,1024), set8700_A += 2, protect(set8700_A) == 1024
|
||||||
|
protect(set8700_A,1024), set8700_A *= 2, protect(set8700_A) == 1024
|
||||||
|
protect(set8700_A,1024), set8700_A |= 2, protect(set8700_A) == 1024
|
||||||
|
protect(set8700_A,1024), set8700_A &= 2, protect(set8700_A) == 1024
|
||||||
|
protect(set8700_A,1024), set8700_A ^= 2, protect(set8700_A) == 1024
|
||||||
|
|
||||||
|
protect(set8700_B,0), set8700_B = set8700_getA1(), protect(set8700_B) == 1024
|
||||||
|
protect(set8700_B,0), set8700_B = set8700_getA2(), protect(set8700_B) == 1024
|
||||||
|
set8700_B = set8700_getvar(), protect(set8700_B) == 1024 + 256
|
||||||
|
|
||||||
|
global set8700_x, set8700_y; set8700_x = 7, protect(set8700_x) == 0
|
||||||
|
protect(7,2) == error(10234)
|
||||||
|
protect(set8700_x,2.5) == error(10235)
|
||||||
|
protect(set8700_x,"abc") == error(10235)
|
||||||
|
protect(set8700_x, 1e6) == error(10235)
|
||||||
|
protect(set8700_x,1), (set8700_x = 2) == error(10366)
|
||||||
|
(set8700_x = 3 + 4) == error(10366)
|
||||||
|
|
||||||
|
protect(set8700_x,2), protect(set8700_x) == 3
|
||||||
|
protect(set8700_x,-1), protect(set8700_x) == 2
|
||||||
|
(set8700_x = 2) == error(10368)
|
||||||
|
(set8700_x = 3 + 4) == 7
|
||||||
|
protect(set8700_x,2), ++set8700_x == error(10379)
|
||||||
|
set8700_x == 7
|
||||||
|
--set8700_x == error(10382)
|
||||||
|
set8700_x == 7
|
||||||
|
set8700_x++ == error(10385)
|
||||||
|
set8700_x == 7
|
||||||
|
set8700_x-- == error(10388)
|
||||||
|
|
||||||
|
global set8700_A, set8700_B; 1
|
||||||
|
protect(set8700_A,0), protect(set8700_A,16), 1
|
||||||
|
set8700_A = "abcdef", protect(set8700_A) == 16 ## No copy to set8700_A
|
||||||
|
protect(set8700_B,0), set8700_B = "xyz", protect(set8700_B) == 0
|
||||||
|
copy(set8700_B, set8700_A) == error(10226)
|
||||||
|
set8700_A == "abcdef" ## set8700_A not changed
|
||||||
|
protect(set8700_A,0), copy(set8700_B,set8700_A), set8700_A == "xyzdef"
|
||||||
|
protect(set8700_B,128), protect(set8700_B) == 128 ## No copy from set8700_B
|
||||||
|
copy(set8700_B,set8700_A,,,3) == error(10225)
|
||||||
|
set8700_A == "xyzdef"
|
||||||
|
protect(set8700_B,0), copy(set8700_B,set8700_A,,,3), set8700_A == "xyzxyz"
|
||||||
|
|
||||||
|
set8700_A = "abcdef", protect(set8700_A, 16), swap(set8700_A[0], set8700_A[5]) == error(10371)
|
||||||
|
set8700_A == "abcdef"
|
||||||
|
protect(set8700_A,0), isnull(swap(set8700_A[0], set8700_A[5]))
|
||||||
|
set8700_A == "fbcdea"
|
||||||
|
protect(set8700_A,2), ++set8700_A[0] == error(10377)
|
||||||
|
--set8700_A[1] == error(10380)
|
||||||
|
set8700_A[2]++ == error(10383)
|
||||||
|
set8700_A[3]-- == error(10386)
|
||||||
|
set8700_A == "fbcdea"
|
||||||
|
protect(set8700_A,0), ++set8700_A[0] == 'g'
|
||||||
|
--set8700_A[1] == 'a'
|
||||||
|
set8700_A[2]++ == ord('c')
|
||||||
|
set8700_A[3]-- == ord('d')
|
||||||
|
set8700_A == "gadcea"
|
||||||
|
|
||||||
|
protect(set8700_x,0), protect(set8700_y,0), protect(set8700_x,256), protect(set8700_y,512),1
|
||||||
|
quomod(11,4,set8700_x,set8700_y), set8700_x == 2 && set8700_y == 3
|
||||||
|
protect(set8700_x) == 256
|
||||||
|
protect(set8700_y) == 512
|
||||||
|
|
||||||
|
set8700_A = mat[3]; protect(set8700_A[0], 1024); protect(set8700_A[0]) == 1024
|
||||||
|
set8700_x = 7, protect(set8700_x,0), protect(set8700_x, 512), 1
|
||||||
|
set8700_A = {set8700_x,,set8700_x}, protect(set8700_A[0]) == 1536
|
||||||
|
protect(set8700_A[1]) == 0
|
||||||
|
protect(set8700_A[2]) == 512
|
||||||
|
protect(set8700_A,16), protect(set8700_A) == 16 ## No copy to
|
||||||
|
set8700_A == (mat[3] = {7,0,7})
|
||||||
|
set8700_A = {1,2,3}, errno() == 10390;
|
||||||
|
set8700_A == (mat[3] = {7,0,7})
|
||||||
|
|
||||||
|
protect(set8700_A,0), set8700_A = {1,2,3}, set8700_A == (mat[3] = {1,2,3})
|
||||||
|
protect(set8700_A[1],1), protect(set8700_A[1]) == 1
|
||||||
|
set8700_A = {4,5,6}, errno() == 10394
|
||||||
|
set8700_A == (mat[3] = {4,2,6})
|
||||||
|
modify(7, "set8700_f") == error(10405)
|
||||||
|
set8700_A = list(2,3,5), modify(set8700_A, 7) == error(10406)
|
||||||
|
protect(set8700_A,2), modify(set8700_A, "set8700_f") == error(10407)
|
||||||
|
protect(set8700_A,0), modify(set8700_A, "h") == error(10408)
|
||||||
|
set8700_B = 42, protect(set8700_B,0), modify(set8700_B, "set8700_f") == error(10409)
|
||||||
|
set8700_A == list(2,3,5) ## set8700_A not affected by failures
|
||||||
|
protect(set8700_A,0,1), modify(set8700_A, "set8700_f") == null()
|
||||||
|
set8700_A == list(4,9,25)
|
||||||
|
modify(set8700_A,"set8700_g") == null()
|
||||||
|
protect(set8700_A[0]) == 0
|
||||||
|
protect(set8700_A[1]) == 256 && protect(set8700_A[2]) == 256
|
||||||
|
|
||||||
|
set8700_A = 0, protect(set8700_A,0), set8700_A = pop(2), set8700_A == error(10181)
|
||||||
|
set8700_A = pop(list(1,2,3)), set8700_A == error(10181)
|
||||||
|
set8700_B = set8700_A = pop(2), set8700_B == error(10181)
|
||||||
|
set8700_A = 32, protect(set8700_A,8), (set8700_A = pop(2)) == error(10370)
|
||||||
|
set8700_A == 32
|
||||||
|
set8700_B = set8700_A = pop(2), set8700_B == error(10370)
|
||||||
|
## Testing copying of protected elements and initialization
|
||||||
|
set8700_M1 = mat[3], protect(set8700_M1,0), protect(set8700_M1[1],1), protect(set8700_M1[1]) == 1
|
||||||
|
set8700_M2 = mat[3], protect(set8700_M2,0), protect(set8700_M2[2],4), protect(set8700_M2[2]) == 4
|
||||||
|
set8700_L = list(set8700_M1, set8700_M2), protect(set8700_L[0][1]) == 1 && protect(set8700_L[1][2]) == 4
|
||||||
|
set8700_L = {{1,2,3},{'a','b','c'}}, set8700_L[0] == (mat[3] = {1,0,3})
|
||||||
|
set8700_L[1] == (mat[3] = {'a','b',0})
|
||||||
|
set8700_M = mat[2], protect(set8700_M,0), set8700_M = {1,2,3,4}, set8700_M == (mat[2] = {1,2})
|
||||||
|
set8700_x = 5, set8700_M = {set8700_x++, set8700_x++, set8700_x++, set8700_x++, set8700_x++}, set8700_M == (mat[2] = {5,6})
|
||||||
|
set8700_x == 10 ## All initialization terms evaluated
|
||||||
|
set8700_S = " ", set8700_S = {'a','b','c','d'}, set8700_S == "abc"
|
||||||
|
|
||||||
|
set8700_P = obj set8700_point = {1,2,3,4}, set8700_P.set8700_x == 1 && set8700_P.set8700_y == 2 && set8700_P.set8700_z == 3
|
||||||
|
protect(set8700_P,16), set8700_Q = set8700_P, set8700_Q = {5,6,7}, set8700_Q == set8700_P
|
||||||
|
set8700_P == (obj set8700_point = {1,2,3})
|
||||||
|
set8700_L = list(mat[1] = {set8700_P}), protect(set8700_L[0][0]) == 16
|
||||||
|
set8700_L = {{{4,5,6}}}, set8700_L[0][0] == set8700_P
|
||||||
|
protect(set8700_L,0,2), set8700_L = {{{4,5,6}}}, set8700_L[0][0] == (obj set8700_point = {4,5,6})
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: solve.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
|
* @(#) $Id: solve.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: sumsq.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
|
* @(#) $Id: sumsq.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: surd.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
|
* @(#) $Id: surd.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test1700.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
|
* @(#) $Id: test1700.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1994
|
* File existed as early as: 1994
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test2300.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
|
* @(#) $Id: test2300.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test2600.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
|
* @(#) $Id: test2600.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test2700.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
|
* @(#) $Id: test2700.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test3100.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
|
* @(#) $Id: test3100.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test3300.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
|
* @(#) $Id: test3300.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test3400.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: test3400.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test3500.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: test3500.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test4000.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: test4000.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1996
|
* File existed as early as: 1996
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test4100.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: test4100.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1996
|
* File existed as early as: 1996
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: test4600.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: test4600.cal,v 29.4 2001/04/10 22:09:02 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
|
||||||
* File existed as early as: 1996
|
* File existed as early as: 1996
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -53,10 +53,10 @@ define stest(str, verbose)
|
|||||||
/*
|
/*
|
||||||
* do file operations
|
* do file operations
|
||||||
*/
|
*/
|
||||||
f = fopen("junk4600", "w");
|
f = fopen("junk4600", "wb");
|
||||||
if (iserror(f)) {
|
if (iserror(f)) {
|
||||||
print 'failed';
|
print 'failed';
|
||||||
print '**** fopen("junk4600", "w") failed';
|
print '**** fopen("junk4600", "wb") failed';
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (iserror(fputs(f,
|
if (iserror(fputs(f,
|
||||||
@@ -67,9 +67,9 @@ define stest(str, verbose)
|
|||||||
print '**** fputs(f, "Fourscore ... failed';
|
print '**** fputs(f, "Fourscore ... failed';
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (iserror(freopen(f, "r"))) {
|
if (iserror(freopen(f, "rb"))) {
|
||||||
print 'failed';
|
print 'failed';
|
||||||
print '**** iserror(freopen(f, "r")) failed';
|
print '**** iserror(freopen(f, "rb")) failed';
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (iserror(rewind(f))) {
|
if (iserror(rewind(f))) {
|
||||||
@@ -173,7 +173,7 @@ define ttest(str, m, n, verbose)
|
|||||||
print str:":",:;
|
print str:":",:;
|
||||||
}
|
}
|
||||||
i = rm("-f", "junk4600");
|
i = rm("-f", "junk4600");
|
||||||
f = fopen("junk4600", "w");
|
f = fopen("junk4600", "wb");
|
||||||
|
|
||||||
if (isnull(n))
|
if (isnull(n))
|
||||||
n = 4;
|
n = 4;
|
||||||
@@ -198,7 +198,7 @@ define ttest(str, m, n, verbose)
|
|||||||
fflush(f);
|
fflush(f);
|
||||||
if (verbose > 1)
|
if (verbose > 1)
|
||||||
printf("File has size %d\n", pos[i]);
|
printf("File has size %d\n", pos[i]);
|
||||||
freopen(f, "r");
|
freopen(f, "rb");
|
||||||
if (size(f) != pos[i]) {
|
if (size(f) != pos[i]) {
|
||||||
print 'failed';
|
print 'failed';
|
||||||
printf("**** Failure 1 for file size\n");
|
printf("**** Failure 1 for file size\n");
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test5100.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: test5100.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1996
|
* File existed as early as: 1996
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test5200.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: test5200.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1997
|
* File existed as early as: 1997
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -17,15 +17,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test8400.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: test8400.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1999
|
* File existed as early as: 1999
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: test8500.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: test8500.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1999
|
* File existed as early as: 1999
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
1406
cal/test8600.cal
Normal file
1406
cal/test8600.cal
Normal file
File diff suppressed because it is too large
Load Diff
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: unitfrac.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: unitfrac.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: varargs.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: varargs.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1991
|
* File existed as early as: 1991
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: xx_print.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
|
* @(#) $Id: xx_print.cal,v 29.2 2000/06/07 14:02:25 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
|
||||||
* File existed as early as: 1997
|
* File existed as early as: 1997
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
274
calc.h
274
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-2006 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
|
||||||
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.18 $
|
||||||
* @(#) $Id: calc.h,v 29.2 1999/12/14 19:37:46 chongo Exp $
|
* @(#) $Id: calc.h,v 29.18 2006/05/21 07:28:54 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -32,10 +32,15 @@
|
|||||||
#define __CALC_H__
|
#define __CALC_H__
|
||||||
|
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
#include "value.h"
|
# include "win32dll.h"
|
||||||
|
# include "value.h"
|
||||||
#include "have_const.h"
|
# include "have_const.h"
|
||||||
|
#else
|
||||||
|
# include <calc/win32dll.h>
|
||||||
|
# include <calc/value.h>
|
||||||
|
# include <calc/have_const.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -55,15 +60,18 @@
|
|||||||
#define HOMECHAR '~' /* char which indicates home directory */
|
#define HOMECHAR '~' /* char which indicates home directory */
|
||||||
#define DOTCHAR '.' /* char which indicates current directory */
|
#define DOTCHAR '.' /* char which indicates current directory */
|
||||||
#define PATHCHAR '/' /* char which separates path components */
|
#define PATHCHAR '/' /* char which separates path components */
|
||||||
|
#if defined(__MSDOS__) || defined(__WIN32)
|
||||||
|
#define LISTCHAR ';' /* char which separates paths in a list */
|
||||||
|
#else
|
||||||
#define LISTCHAR ':' /* char which separates paths in a list */
|
#define LISTCHAR ':' /* char which separates paths in a list */
|
||||||
|
#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 MAXERROR 512 /* maximum length of error message string */
|
||||||
|
|
||||||
#define SYMBOLSIZE 256 /* maximum symbol name size */
|
#define SYMBOLSIZE 256 /* maximum symbol name size */
|
||||||
#define MAXINDICES 20 /* maximum number of indices for objects */
|
|
||||||
#define MAXLABELS 100 /* maximum number of user labels in function */
|
#define MAXLABELS 100 /* maximum number of user labels in function */
|
||||||
#define MAXSTRING 1024 /* maximum size of string constant */
|
#define MAXSTRING 1024 /* maximum size of string constant */
|
||||||
#define MAXSTACK 1000 /* maximum depth of evaluation stack */
|
#define MAXSTACK 2048 /* maximum depth of evaluation stack */
|
||||||
#define MAXFILES 20 /* maximum number of opened files */
|
#define MAXFILES 20 /* maximum number of opened files */
|
||||||
#define PROMPT1 "> " /* default normal prompt*/
|
#define PROMPT1 "> " /* default normal prompt*/
|
||||||
#define PROMPT2 ">> " /* default prompt inside multi-line input */
|
#define PROMPT2 ">> " /* default prompt inside multi-line input */
|
||||||
@@ -90,157 +98,163 @@
|
|||||||
#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 FILEID openid(char *name, char *mode);
|
extern DLL FILEID openid(char *name, char *mode);
|
||||||
extern FILEID indexid(long index);
|
extern DLL FILEID openpathid(char *name, char *mode, char *pathlist);
|
||||||
extern BOOL validid(FILEID id);
|
extern DLL FILEID indexid(long index);
|
||||||
extern BOOL errorid(FILEID id);
|
extern DLL BOOL validid(FILEID id);
|
||||||
extern BOOL eofid(FILEID id);
|
extern DLL BOOL errorid(FILEID id);
|
||||||
extern int closeid(FILEID id);
|
extern DLL BOOL eofid(FILEID id);
|
||||||
extern int getcharid(FILEID id);
|
extern DLL int closeid(FILEID id);
|
||||||
extern int idprintf(FILEID id, char *fmt, int count, VALUE **vals);
|
extern DLL int getcharid(FILEID id);
|
||||||
extern int idfputc(FILEID id, int ch);
|
extern DLL int idprintf(FILEID id, char *fmt, int count, VALUE **vals);
|
||||||
extern int idfputs(FILEID id, char *str);
|
extern DLL int idfputc(FILEID id, int ch);
|
||||||
extern int printid(FILEID id, int flags);
|
extern DLL int idfputs(FILEID id, char *str);
|
||||||
extern int flushid(FILEID id);
|
extern DLL int printid(FILEID id, int flags);
|
||||||
extern int readid(FILEID id, int flags, char **retptr);
|
extern DLL int flushid(FILEID id);
|
||||||
extern int getloc(FILEID id, ZVALUE *loc);
|
extern DLL int readid(FILEID id, int flags, char **retptr);
|
||||||
extern int setloc(FILEID id, ZVALUE zpos);
|
extern DLL int getloc(FILEID id, ZVALUE *loc);
|
||||||
extern int getsize(FILEID id, ZVALUE *size);
|
extern DLL int setloc(FILEID id, ZVALUE zpos);
|
||||||
extern int get_device(FILEID id, ZVALUE *dev);
|
extern DLL int getsize(FILEID id, ZVALUE *size);
|
||||||
extern int get_inode(FILEID id, ZVALUE *ino);
|
extern DLL int get_device(FILEID id, ZVALUE *dev);
|
||||||
extern FILEID reopenid(FILEID id, char *mode, char *name);
|
extern DLL int get_inode(FILEID id, ZVALUE *ino);
|
||||||
extern int closeall(void);
|
extern DLL FILEID reopenid(FILEID id, char *mode, char *name);
|
||||||
extern int flushall(void);
|
extern DLL int closeall(void);
|
||||||
extern int idfputstr(FILEID id, char *str);
|
|
||||||
extern int rewindid(FILEID id);
|
#if !defined(_WIN32)
|
||||||
extern void rewindall(void);
|
extern DLL int flushall(void);
|
||||||
extern ZVALUE zfilesize(FILEID id);
|
#endif
|
||||||
extern void showfiles(void);
|
|
||||||
extern int fscanfid(FILEID id, char *fmt, int count, VALUE **vals);
|
extern DLL int idfputstr(FILEID id, char *str);
|
||||||
extern int scanfstr(char *str, char *fmt, int count, VALUE **vals);
|
extern DLL int rewindid(FILEID id);
|
||||||
extern int ftellid(FILEID id, ZVALUE *res);
|
extern DLL void rewindall(void);
|
||||||
extern int fseekid(FILEID id, ZVALUE offset, int whence);
|
extern DLL ZVALUE zfilesize(FILEID id);
|
||||||
extern int isattyid(FILEID id);
|
extern DLL void showfiles(void);
|
||||||
extern int fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res);
|
extern DLL int fscanfid(FILEID id, char *fmt, int count, VALUE **vals);
|
||||||
extern int frsearch(FILEID id, char *str, ZVALUE first, ZVALUE last, ZVALUE *res);
|
extern DLL int scanfstr(char *str, char *fmt, int count, VALUE **vals);
|
||||||
extern void showconstants(void);
|
extern DLL int ftellid(FILEID id, ZVALUE *res);
|
||||||
extern void freeconstant(unsigned long);
|
extern DLL int fseekid(FILEID id, ZVALUE offset, int whence);
|
||||||
extern void freestringconstant(long);
|
extern DLL int isattyid(FILEID id);
|
||||||
extern void trimconstants(void);
|
extern DLL 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);
|
||||||
|
extern DLL void showconstants(void);
|
||||||
|
extern DLL void freeconstant(unsigned long);
|
||||||
|
extern DLL void freestringconstant(long);
|
||||||
|
extern DLL void trimconstants(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Input routines.
|
* Input routines.
|
||||||
*/
|
*/
|
||||||
extern int openstring(char *str, long num);
|
extern DLL int openstring(char *str, size_t num);
|
||||||
extern int openterminal(void);
|
extern DLL int openterminal(void);
|
||||||
extern int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
|
extern DLL int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
|
||||||
extern char *nextline(void);
|
extern DLL char *nextline(void);
|
||||||
extern int nextchar(void);
|
extern DLL int nextchar(void);
|
||||||
extern void reread(void);
|
extern DLL void reread(void);
|
||||||
extern void resetinput(void);
|
extern DLL void resetinput(void);
|
||||||
extern void setprompt(char *);
|
extern DLL void setprompt(char *);
|
||||||
extern BOOL inputisterminal(void);
|
extern DLL BOOL inputisterminal(void);
|
||||||
extern int inputlevel(void);
|
extern DLL int inputlevel(void);
|
||||||
extern long calclevel(void);
|
extern DLL long calclevel(void);
|
||||||
extern char *inputname(void);
|
extern DLL char *inputname(void);
|
||||||
extern long linenumber(void);
|
extern DLL long linenumber(void);
|
||||||
extern void runrcfiles(void);
|
extern DLL void runrcfiles(void);
|
||||||
extern void closeinput(void);
|
extern DLL void closeinput(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Other routines.
|
* Other routines.
|
||||||
*/
|
*/
|
||||||
extern NUMBER *constvalue(unsigned long index);
|
extern DLL NUMBER *constvalue(unsigned long index);
|
||||||
extern long addnumber(char *str);
|
extern DLL long addnumber(char *str);
|
||||||
extern long addqconstant(NUMBER *q);
|
extern DLL long addqconstant(NUMBER *q);
|
||||||
extern void initstack(void);
|
extern DLL void initstack(void);
|
||||||
extern void getcommands(BOOL toplevel);
|
extern DLL void getcommands(BOOL toplevel);
|
||||||
extern void givehelp(char *type);
|
extern DLL void givehelp(char *type);
|
||||||
extern void libcalc_call_me_first(void);
|
extern DLL void libcalc_call_me_first(void);
|
||||||
extern void libcalc_call_me_last(void);
|
extern DLL void libcalc_call_me_last(void);
|
||||||
extern BOOL calc_tty(int fd);
|
extern DLL BOOL calc_tty(int fd);
|
||||||
extern BOOL orig_tty(int fd);
|
extern DLL BOOL orig_tty(int fd);
|
||||||
extern void showerrors(void);
|
extern DLL void showerrors(void);
|
||||||
extern char *calc_strdup(CONST char *);
|
extern DLL char *calc_strdup(CONST char *);
|
||||||
extern void getshellfile(char *shellfile);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialization
|
* Initialization
|
||||||
*/
|
*/
|
||||||
extern void initialize(void);
|
extern DLL void initialize(void);
|
||||||
extern void reinitialize(void);
|
extern DLL void reinitialize(void);
|
||||||
extern int isatty(int tty); /* TRUE if fd is a tty */
|
#if !defined (_WIN32)
|
||||||
extern char *version(void); /* return version string */
|
extern DLL int isatty(int tty); /* TRUE if fd is a tty */
|
||||||
extern int post_init; /* TRUE => setjmp for math_error is ready */
|
#endif
|
||||||
|
extern DLL 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 int abortlevel; /* current level of aborts */
|
extern DLL int abortlevel; /* current level of aborts */
|
||||||
extern BOOL inputwait; /* TRUE if in a terminal input wait */
|
extern DLL BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||||
extern jmp_buf jmpbuf; /* for errors */
|
extern DLL jmp_buf jmpbuf; /* for errors */
|
||||||
|
|
||||||
extern int p_flag; /* TRUE => pipe mode */
|
extern DLL int p_flag; /* TRUE => pipe mode */
|
||||||
extern int q_flag; /* TRUE => don't execute rc files */
|
extern DLL int q_flag; /* TRUE => don't execute rc files */
|
||||||
extern int u_flag; /* TRUE => unbuffer stdin and stdout */
|
extern DLL int u_flag; /* TRUE => unbuffer stdin and stdout */
|
||||||
extern int d_flag; /* TRUE => disable heading, resource_debug */
|
extern DLL int d_flag; /* TRUE => disable heading, resource_debug */
|
||||||
extern int c_flag; /* TRUE => continue after error if permitted */
|
extern DLL int c_flag; /* TRUE => continue after error if permitted */
|
||||||
extern int i_flag; /* TRUE => try to go interactive after error */
|
extern DLL int i_flag; /* TRUE => try to go interactive after error */
|
||||||
extern int s_flag; /* TRUE => keep args as strings for argv() */
|
extern DLL int s_flag; /* TRUE => keep args as strings for argv() */
|
||||||
extern int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
extern DLL long stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
||||||
extern BOOL abort_now; /* TRUE => try to go interactive */
|
extern DLL BOOL abort_now; /* TRUE => try to go interactive */
|
||||||
|
|
||||||
extern int argc_value; /* count of argv[] strings for argv() builtin */
|
extern DLL int argc_value; /* count of argv[] strings for argv() builtin */
|
||||||
extern char **argv_value; /* argv[] strings for argv() builtin */
|
extern DLL char **argv_value; /* argv[] strings for argv() builtin */
|
||||||
|
|
||||||
extern char *pager; /* $PAGER or default */
|
extern DLL char *pager; /* $PAGER or default */
|
||||||
extern int stdin_tty; /* TRUE if stdin is a tty */
|
extern DLL int stdin_tty; /* TRUE if stdin is a tty */
|
||||||
extern int havecommands; /* TRUE if have cmd args) */
|
extern DLL int havecommands; /* TRUE if have cmd args) */
|
||||||
extern char *program; /* our name */
|
extern DLL char *program; /* our name */
|
||||||
extern char *base_name; /* basename of our name */
|
extern DLL char *base_name; /* basename of our name */
|
||||||
extern char cmdbuf[]; /* command line expression */
|
extern DLL char cmdbuf[]; /* command line expression */
|
||||||
|
|
||||||
extern int abortlevel; /* current level of aborts */
|
extern DLL int abortlevel; /* current level of aborts */
|
||||||
extern BOOL inputwait; /* TRUE if in a terminal input wait */
|
extern DLL BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||||
extern VALUE *stack; /* execution stack */
|
extern DLL VALUE *stack; /* execution stack */
|
||||||
extern int dumpnames; /* TRUE => dump names rather than indices */
|
extern DLL int dumpnames; /* TRUE => dump names rather than indices */
|
||||||
|
|
||||||
extern char *calcpath; /* $CALCPATH or default */
|
extern DLL char *calcpath; /* $CALCPATH or default */
|
||||||
extern char *calcrc; /* $CALCRC or default */
|
extern DLL char *calcrc; /* $CALCRC or default */
|
||||||
extern char *calcbindings; /* $CALCBINDINGS or default */
|
extern DLL char *calcbindings; /* $CALCBINDINGS or default */
|
||||||
extern char *home; /* $HOME or default */
|
extern DLL char *home; /* $HOME or default */
|
||||||
extern char *shell; /* $SHELL or default */
|
extern DLL char *shell; /* $SHELL or default */
|
||||||
extern char *program; /* our name (argv[0]) */
|
extern DLL char *program; /* our name (argv[0]) */
|
||||||
|
|
||||||
extern int no_env; /* TRUE (-e) => ignore env vars on startup */
|
extern DLL int no_env; /* TRUE (-e) => ignore env vars on startup */
|
||||||
extern int errmax; /* if >= 0, error when errcount exceeds errmax */
|
extern DLL long errmax; /* if >= 0, error when errcount exceeds errmax */
|
||||||
extern int new_std; /* TRUE (-n) => use newstd configuration */
|
extern DLL int use_old_std; /* TRUE (-O) => use classic configuration */
|
||||||
|
|
||||||
extern int allow_read; /* FALSE => may not open any files for reading */
|
extern DLL int allow_read; /* FALSE => dont open any files for reading */
|
||||||
extern int allow_write; /* FALSE => may not open any files for writing */
|
extern DLL int allow_write; /* FALSE => dont open any files for writing */
|
||||||
extern int allow_exec; /* FALSE => may not execute any commands */
|
extern DLL int allow_exec; /* FALSE => may not execute any commands */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* calc startup and run state
|
* calc startup and run state
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
RUN_UNKNOWN = -1, /* unknown or unset start state */
|
RUN_ZERO, /* unknown or unset start state */
|
||||||
RUN_BEGIN = 0, /* calc execution starts */
|
RUN_BEGIN, /* calc execution starts */
|
||||||
RUN_RCFILES = 1, /* rc files being evaluated */
|
RUN_RCFILES, /* rc files being evaluated */
|
||||||
RUN_PRE_CMD_ARGS = 2, /* prepare to evaluate cmd args */
|
RUN_PRE_CMD_ARGS, /* prepare to evaluate cmd args */
|
||||||
RUN_CMD_ARGS = 3, /* cmd args being evaluated */
|
RUN_CMD_ARGS, /* cmd args being evaluated */
|
||||||
RUN_PRE_TOP_LEVEL = 4, /* prepare to start top level activity */
|
RUN_PRE_TOP_LEVEL, /* prepare to start top level activity */
|
||||||
RUN_TOP_LEVEL = 5, /* running at top level */
|
RUN_TOP_LEVEL, /* running at top level */
|
||||||
RUN_EXIT = 6, /* normal exit from calc */
|
RUN_EXIT, /* normal exit from calc */
|
||||||
RUN_EXIT_WITH_ERROR = 7 /* exit with error */
|
RUN_EXIT_WITH_ERROR /* exit with error */
|
||||||
} run;
|
} run;
|
||||||
extern run run_state;
|
extern DLL run run_state;
|
||||||
extern char *run_state_name(run state);
|
extern DLL char *run_state_name(run state);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* calc version information
|
* calc version information
|
||||||
@@ -249,9 +263,9 @@ extern char *run_state_name(run state);
|
|||||||
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 char *calc_minor_patch;
|
extern int calc_minor_patch;
|
||||||
extern char *Copyright;
|
extern char *Copyright;
|
||||||
extern char *version(void);
|
extern DLL char *version(void);
|
||||||
|
|
||||||
|
|
||||||
#endif /* !__CALC_H__ */
|
#endif /* !__CALC_H__ */
|
||||||
|
301
calc.man
301
calc.man
@@ -1,5 +1,5 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" Copyright (C) 1999 Landon Curt Noll
|
.\" Copyright (C) 1999-2004 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,15 +15,15 @@
|
|||||||
.\" received a copy with calc; if not, write to Free Software Foundation, Inc.
|
.\" received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
.\"
|
.\"
|
||||||
.\" @(#) $Revision: 29.4 $
|
.\" @(#) $Revision: 29.20 $
|
||||||
.\" @(#) $Id: calc.man,v 29.4 1999/12/17 10:06:31 chongo Exp $
|
.\" @(#) $Id: calc.man,v 29.20 2006/06/01 12:04:16 chongo Exp $
|
||||||
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
|
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
|
||||||
.\"
|
.\"
|
||||||
.\" Under source code control: 1991/07/23 05:48:26
|
.\" Under source code control: 1991/07/23 05:48:26
|
||||||
.\" File existed as early as: 1991
|
.\" File existed as early as: 1991
|
||||||
.\"
|
.\"
|
||||||
.\" chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
.\" chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
.\" Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
.\" Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
.\"
|
.\"
|
||||||
.\" calculator by David I. Bell
|
.\" calculator by David I. Bell
|
||||||
.\" man page by Landon Noll
|
.\" man page by Landon Noll
|
||||||
@@ -36,24 +36,25 @@ calc \- arbitrary precision calculator
|
|||||||
.RB [ \-c ]
|
.RB [ \-c ]
|
||||||
.RB [ \-C ]
|
.RB [ \-C ]
|
||||||
.RB [ \-d ]
|
.RB [ \-d ]
|
||||||
.RB [ -D\ \&calc_debug[:resource_debug[:user_debug]] ]
|
|
||||||
.br
|
.br
|
||||||
.in +5n
|
.in +5n
|
||||||
|
.RB [ -D\ \&calc_debug[:resource_debug[:user_debug]] ]
|
||||||
|
.br
|
||||||
.RB [ \-e ]
|
.RB [ \-e ]
|
||||||
.RB [ \-h ]
|
.RB [ \-h ]
|
||||||
.RB [ \-i ]
|
.RB [ \-i ]
|
||||||
.RB [ \-m\ \&mode ]
|
.RB [ \-m\ \&mode ]
|
||||||
.RB [ \-n ]
|
.RB [ \-O ]
|
||||||
|
.br
|
||||||
.RB [ \-p ]
|
.RB [ \-p ]
|
||||||
.RB [ \-q ]
|
.RB [ \-q ]
|
||||||
.RB [ \-s ]
|
.RB [ \-s ]
|
||||||
.RB [ \-u ]
|
.RB [ \-u ]
|
||||||
.RB [ \-v ]
|
.RB [ \-v ]
|
||||||
.br
|
.RB [ [\-\-]\ calc_cmd\ \&.\|.\|. ]
|
||||||
.RB [ calc_cmd\ \&.\|.\|. ]
|
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp
|
.sp
|
||||||
\fI#!${BINDIR}/calc\fP\ \fB\-S\fP\ [other_flags\ \&...]
|
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
@@ -62,8 +63,11 @@ CALC OPTIONS
|
|||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-c
|
.B \-c
|
||||||
Continue reading command lines even after an execution
|
Continue reading command lines even after an scan/parse
|
||||||
error has caused the abandonment of a line.
|
error has caused the abandonment of a line.
|
||||||
|
Note that this option only deals with scanning and
|
||||||
|
parsing of the calc language.
|
||||||
|
It does not deal with execution or run-time errors.
|
||||||
.sp 1
|
.sp 1
|
||||||
For example:
|
For example:
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -75,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
|
||||||
@@ -87,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.
|
||||||
@@ -118,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:
|
||||||
@@ -134,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
|
||||||
@@ -182,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 execurable 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
|
||||||
@@ -301,11 +379,22 @@ The reading of key bindings is also disabled
|
|||||||
when the mode disables opening of files for reading.
|
when the mode disables opening of files for reading.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-n
|
.B \-O
|
||||||
Use the new configuration defaults instead of the old
|
Use the old classic defaults instead of the
|
||||||
default classic defaults.
|
default configuration.
|
||||||
This flag as the same effect
|
This flag as the same effect
|
||||||
as executing \fBconfig("all", "newcfg")\fP at startup time.
|
as executing \fBconfig("all", "oldcfg")\fP at startup time.
|
||||||
|
.sp 1
|
||||||
|
NOTE: Older versions of calc used
|
||||||
|
.B \-n
|
||||||
|
to setup a modified form of the default calc configuration.
|
||||||
|
The
|
||||||
|
.B \-n
|
||||||
|
flag currently does nothing.
|
||||||
|
Use of the
|
||||||
|
.B \-n
|
||||||
|
flag is now deprecated and may be used for
|
||||||
|
something else in the future.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-p
|
.B \-p
|
||||||
@@ -315,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
|
||||||
@@ -349,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
|
||||||
|
|
||||||
\&
|
\&
|
||||||
@@ -391,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)
|
||||||
@@ -513,8 +635,8 @@ searches in succession:
|
|||||||
./myfile.cal
|
./myfile.cal
|
||||||
${LIBDIR}/myfile
|
${LIBDIR}/myfile
|
||||||
${LIBDIR}/myfile.cal
|
${LIBDIR}/myfile.cal
|
||||||
${CUSTOMLIBDIR}/myfile
|
${CUSTOMCALDIR}/myfile
|
||||||
${CUSTOMLIBDIR}/myfile.cal
|
${CUSTOMCALDIR}/myfile.cal
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -566,32 +688,30 @@ 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
|
||||||
program and the flag
|
program and the flag
|
||||||
.B \-S
|
.B \-f
|
||||||
as in:
|
as in:
|
||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
\fI#!${BINDIR}/calc\fP\ \fB\-S\fP\ [other_flags\ \&...]
|
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
the rest of the file will be processed in
|
the rest of the file will be processed in
|
||||||
.BR "shell script mode" .
|
.BR "shell script mode" .
|
||||||
Note that
|
Note that
|
||||||
.B \-S
|
.B \-f
|
||||||
(UPPER CASE
|
must at the end of the intiial ``#!'' line.
|
||||||
.BR \-S )
|
|
||||||
must be the first \-flag on the ``#!'' line.
|
|
||||||
Any other optional
|
Any other optional
|
||||||
.B "other_flags"
|
.B "other_flags"
|
||||||
must come after
|
must come before
|
||||||
the
|
the
|
||||||
.BR \-S .
|
.BR \-f .
|
||||||
.sp 1
|
.sp 1
|
||||||
In
|
In
|
||||||
.B "shell script mode"
|
.B "shell script mode"
|
||||||
@@ -607,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
|
||||||
@@ -624,7 +742,7 @@ the file
|
|||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
\fI#!${BINDIR}/calc\fP\ \fB\-S\fP\ \&\fB\-q\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
|
||||||
|
|
||||||
@@ -838,7 +956,7 @@ ${LIBDIR}/bindings
|
|||||||
non-GNU-readline command line editor bindings
|
non-GNU-readline command line editor bindings
|
||||||
.sp 1
|
.sp 1
|
||||||
.TP 5
|
.TP 5
|
||||||
${INCDIRCALC}/*.h
|
${CALC_INCDIR}/*.h
|
||||||
include files for C interface use
|
include files for C interface use
|
||||||
.sp 1
|
.sp 1
|
||||||
.TP 5
|
.TP 5
|
||||||
@@ -850,7 +968,7 @@ ${LIBDIR}/libcustcalc.a
|
|||||||
custom binary link library
|
custom binary link library
|
||||||
.sp 1
|
.sp 1
|
||||||
.TP 5
|
.TP 5
|
||||||
${CUSTOMLIBDIR}/*.cal
|
${CUSTOMCALDIR}/*.cal
|
||||||
custom resource files
|
custom resource files
|
||||||
.sp 1
|
.sp 1
|
||||||
.TP 5
|
.TP 5
|
||||||
@@ -993,36 +1111,78 @@ Copyright (C) 1999 Landon Curt Noll
|
|||||||
and is covered under version 2.1 GNU Lesser General
|
and is covered under version 2.1 GNU Lesser General
|
||||||
Public License.
|
Public License.
|
||||||
.sp
|
.sp
|
||||||
.SH "BUG REPORTS / BUG FIXES / ENHANCEMENTS"
|
.SH "CALC MAILING LIST / CALC UPDATES / ENHANCEMENTS"
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
.sp
|
.sp
|
||||||
Send comments, suggestions, bug fixes, enhancements
|
To contribute comments, suggestions, enhancements
|
||||||
and interesting
|
and interesting
|
||||||
.B calc
|
.B calc
|
||||||
resource files,
|
resource files, and
|
||||||
.B calc
|
shell scripts please join the low volume calc mailing list.
|
||||||
shell scripts that you would like you see included
|
.sp
|
||||||
in future distributions to:
|
To join the low volume calc mailing list, send EMail to:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
.nf
|
.nf
|
||||||
calc-tester at postofc dot corp dot sgi dot com
|
calc-tester-request at asthe dot com
|
||||||
|
|
||||||
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
|
||||||
.fi
|
.fi
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
Bug reports are sent to:
|
Your subject must contain the words:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
.nf
|
.nf
|
||||||
calc-bugs at postofc dot corp dot sgi dot com
|
calc mailing list subscription
|
||||||
|
|
||||||
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
|
||||||
.fi
|
.fi
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
.sp
|
||||||
|
Your message body must contain:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
subscribe calc-tester address
|
||||||
|
end
|
||||||
|
name your_full_name
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
where
|
||||||
|
.B address
|
||||||
|
s your EMail address and
|
||||||
|
.B your_full_name
|
||||||
|
is your full name.
|
||||||
|
Feel free to follow the
|
||||||
|
.B name
|
||||||
|
line with additional EMail text as desired.
|
||||||
|
.sp
|
||||||
|
.SH "BUG REPORTS / BUG FIXES"
|
||||||
|
\&
|
||||||
|
.br
|
||||||
|
.sp
|
||||||
|
Send bug reports and bug fixes to:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
calc-bugs at asthe dot com
|
||||||
|
|
||||||
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
Your subject must contain the words:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
calc bug report
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
.sp
|
||||||
See the
|
See the
|
||||||
.I BUGS
|
.I BUGS
|
||||||
source file or use the
|
source file or use the
|
||||||
@@ -1037,7 +1197,7 @@ help bugs
|
|||||||
.sp
|
.sp
|
||||||
for more information about bug reporting.
|
for more information about bug reporting.
|
||||||
.sp
|
.sp
|
||||||
.SH "CALC WEB SITE / MAILING LIST"
|
.SH "CALC WEB SITE"
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
Landon Noll maintains the the
|
Landon Noll maintains the the
|
||||||
@@ -1045,32 +1205,7 @@ Landon Noll maintains the the
|
|||||||
web site is located at:
|
web site is located at:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
http://reality.sgi.com/chongo/tech/comp/calc/
|
www.isthe.com/chongo/tech/comp/calc/
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
One may join the
|
|
||||||
.B calc
|
|
||||||
testing group by sending a request to:
|
|
||||||
.sp
|
|
||||||
.in +0.5i
|
|
||||||
.nf
|
|
||||||
calc-tester-request at postofc dot corp dot sgi dot com
|
|
||||||
|
|
||||||
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
|
||||||
.fi
|
|
||||||
.in -0.5i
|
|
||||||
.sp
|
|
||||||
Your message body (not the subject) should consist of:
|
|
||||||
.sp
|
|
||||||
.in +0.5i
|
|
||||||
.nf
|
|
||||||
subscribe calc-tester address
|
|
||||||
end
|
|
||||||
name your_full_name
|
|
||||||
.fi
|
|
||||||
.in -0.5i
|
|
||||||
.sp
|
|
||||||
where "address" is your EMail address and "your_full_name"
|
|
||||||
is your full name.
|
|
||||||
.sp
|
|
||||||
Share and Enjoy! :\-)
|
Share and Enjoy! :\-)
|
||||||
|
123
calc.spec.in
Normal file
123
calc.spec.in
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
#****h* calc/calc.spec.in
|
||||||
|
#
|
||||||
|
# calc.spec.in - template specfile for calc
|
||||||
|
#
|
||||||
|
# Copyright (C) 2003-2005 Petteri Kettunen and Landon Curt Noll
|
||||||
|
#
|
||||||
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
# as published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
# Public License for more details.
|
||||||
|
#
|
||||||
|
# A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# @(#) $Revision: 29.15 $
|
||||||
|
# @(#) $Id: calc.spec.in,v 29.15 2006/05/21 06:26:00 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.spec.in,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 2003/02/16 20:21:39
|
||||||
|
# File existed as early as: 2003
|
||||||
|
#
|
||||||
|
# calculator by David I. Bell with help/mods from others
|
||||||
|
# Makefile by Petteri Kettunen with modifications from Landon Curt Noll
|
||||||
|
|
||||||
|
# BUGS
|
||||||
|
# - Uninstalling calc and calc-devel leaves empty dirs /usr/include/calc
|
||||||
|
# and /usr/share/calc and its subdirs. In case e.g. %{_includedir}/calc
|
||||||
|
# is defined in `%files devel' section, then rpmbuild complains that
|
||||||
|
# header files are defined twice - rpmbuild bug or bug in specfile conf???
|
||||||
|
|
||||||
|
Summary: Arbitrary precision calculator.
|
||||||
|
Name: calc
|
||||||
|
Version: <<<PROJECT_VERSION>>>
|
||||||
|
Release: 0
|
||||||
|
Copyright: LGPL
|
||||||
|
Group: Applications/Engineering
|
||||||
|
Source: %{name}-%{version}.tar.gz
|
||||||
|
URL: http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
Requires: ncurses >= 5.2-26, readline >= 4.2, less >= 358
|
||||||
|
BuildRequires: ncurses-devel >= 5.2-26, readline-devel >= 4.2
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-root
|
||||||
|
|
||||||
|
%description
|
||||||
|
Calc is arbitrary precision C-like arithmetic system that is a
|
||||||
|
calculator, an algorithm prototype and mathematical research
|
||||||
|
tool. Calc comes with a rich set of builtin mathematical and
|
||||||
|
programmatic functions.
|
||||||
|
|
||||||
|
For the latest calc release, see the calc project home page:
|
||||||
|
|
||||||
|
http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: Development files and documentation for calc.
|
||||||
|
Group: Development/Libraries
|
||||||
|
PreReq: %{name} = %{version}-%{release}
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
This package contains the header files and static libraries for developing
|
||||||
|
calc (arbitrary precision calculator).
|
||||||
|
|
||||||
|
For the latest calc release, see the project home page:
|
||||||
|
|
||||||
|
http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
%build
|
||||||
|
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 all chk
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
mkdir -p %{buildroot}
|
||||||
|
make T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 install
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%doc BUGS CHANGES COPYING COPYING-LGPL
|
||||||
|
%{_bindir}/*
|
||||||
|
%{_mandir}/man1/*
|
||||||
|
%{_datadir}/%{name}/*/*
|
||||||
|
%{_datadir}/%{name}/bindings
|
||||||
|
%{_datadir}/%{name}/README
|
||||||
|
%{_datadir}/%{name}/*.cal
|
||||||
|
%{_datadir}/%{name}/*.line
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%doc BUGS COPYING COPYING-LGPL LIBRARY
|
||||||
|
%attr(644, root, root) %{_includedir}/calc/*
|
||||||
|
%attr(644, root, root) %{_libdir}/*.a
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* 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
|
||||||
|
- Release of calc-2.11.7-2
|
||||||
|
- Fixed attributes on include and lib calc-devel files
|
||||||
|
- Added BUGS to calc-devel as well as calc
|
||||||
|
* Tue Feb 25 2003 Landon Curt Noll http://www.isthe.com/chongo
|
||||||
|
- Release of calc-2.11.7-1
|
||||||
|
- Require ncurses, readline and less to install.
|
||||||
|
- Require ncurses-devel and readline-devel to build.
|
||||||
|
* Tue Feb 18 2003 Landon Curt Noll http://www.isthe.com/chongo
|
||||||
|
- Misc changes to fit local directory setup
|
||||||
|
* Sun Feb 16 2003 Petteri Kettunen <petterik@users.sourceforge.net>
|
||||||
|
- initial RPM build
|
||||||
|
|
||||||
|
#****
|
88
calcerr.tbl
88
calcerr.tbl
@@ -17,14 +17,14 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.1 $
|
# @(#) $Revision: 29.8 $
|
||||||
# @(#) $Id: calcerr.tbl,v 29.1 1999/12/14 09:15:35 chongo Exp $
|
# @(#) $Id: calcerr.tbl,v 29.8 2006/05/19 15:12:57 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
|
||||||
# File existed as early as: 1996
|
# File existed as early as: 1996
|
||||||
#
|
#
|
||||||
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
|
||||||
# This file is used to build calcerr.h include file.
|
# This file is used to build calcerr.h include file.
|
||||||
#
|
#
|
||||||
@@ -108,8 +108,8 @@ E_FGETSTR1 Non-file first argument for fgetstr
|
|||||||
E_FGETSTR2 File not open for reading for fgetstr
|
E_FGETSTR2 File not open for reading for fgetstr
|
||||||
E_FGETLINE1 Non-file argument for fgetline
|
E_FGETLINE1 Non-file argument for fgetline
|
||||||
E_FGETLINE2 File not open for reading for fgetline
|
E_FGETLINE2 File not open for reading for fgetline
|
||||||
E_FGETWORD1 Non-file argument for fgetword
|
E_FGETFIELD1 Non-file argument for fgetfield
|
||||||
E_FGETWORD2 File not open for reading for fgetword
|
E_FGETFIELD2 File not open for reading for fgetfield
|
||||||
E_REWIND1 Non-file argument for rewind
|
E_REWIND1 Non-file argument for rewind
|
||||||
E_FILES Non-integer argument for files
|
E_FILES Non-integer argument for files
|
||||||
E_PRINTF1 Non-string fmt argument for fprint
|
E_PRINTF1 Non-string fmt argument for fprint
|
||||||
@@ -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
|
||||||
@@ -375,3 +375,73 @@ E_GD3 Infinite or too-large result for gd
|
|||||||
E_AGD3 Infinite or too-large result for agd
|
E_AGD3 Infinite or too-large result for agd
|
||||||
E_POWER4 Too-large value for power
|
E_POWER4 Too-large value for power
|
||||||
E_ROOT4 Too-large value for root
|
E_ROOT4 Too-large value for root
|
||||||
|
E_DGT1 Non-real first arg for digit
|
||||||
|
E_DGT2 Non-integral second arg for digit
|
||||||
|
E_DGT3 Bad third arg for digit
|
||||||
|
E_PLCS1 Bad first argument for places
|
||||||
|
E_PLCS2 Bad second argument for places
|
||||||
|
E_DGTS1 Bad first argument for digits
|
||||||
|
E_DGTS2 Bad second argument for digits
|
||||||
|
E_ILOG Bad first argument for ilog
|
||||||
|
E_ILOGB Bad second argument for ilog
|
||||||
|
E_ILOG10 Bad argument for ilog10
|
||||||
|
E_ILOG2 Bad argument for ilog2
|
||||||
|
E_COMB1 Non-integer second arg for comb
|
||||||
|
E_COMB2 Too-large second arg for comb
|
||||||
|
E_CTLN Bad argument for catalan
|
||||||
|
E_BERN Bad argument for bern
|
||||||
|
E_EULER Bad argument for euler
|
||||||
|
E_SLEEP Bad argument for sleep
|
||||||
|
E_TTY calc_tty failure
|
||||||
|
E_ASSIGN1 No-copy-to destination for octet assign
|
||||||
|
E_ASSIGN2 No-copy-from source for octet assign
|
||||||
|
E_ASSIGN3 No-change destination for octet assign
|
||||||
|
E_ASSIGN4 Non-variable destination for assign
|
||||||
|
E_ASSIGN5 No-assign-to destination for assign
|
||||||
|
E_ASSIGN6 No-assign-from source for assign
|
||||||
|
E_ASSIGN7 No-change destination for assign
|
||||||
|
E_ASSIGN8 No-type-change destination for assign
|
||||||
|
E_ASSIGN9 No-error-value destination for assign
|
||||||
|
E_SWAP1 No-copy argument for octet swap
|
||||||
|
E_SWAP2 No-assign-to-or-from argument for swap
|
||||||
|
E_SWAP3 Non-variable argument for swap
|
||||||
|
E_QUOMOD1 Non-variable argument 4 or 4 for quomod
|
||||||
|
E_QUOMOD2 Non-real-number argument 1 or 2 for quomod
|
||||||
|
E_QUOMOD3 No-assign-to argument 3 or 4 for quomod
|
||||||
|
E_PREINC1 No-copy-to or no-change argument for octet preinc
|
||||||
|
E_PREINC2 Non-variable argument for preinc
|
||||||
|
E_PREINC3 No-assign-to or no-change argument for preinc
|
||||||
|
E_PREDEC1 No-copy-to or no-change argument for octet predec
|
||||||
|
E_PREDEC2 Non-variable argument for predec
|
||||||
|
E_PREDEC3 No-assign-to or no-change argument for predec
|
||||||
|
E_POSTINC1 No-copy-to or no-change argument for octet postinc
|
||||||
|
E_POSTINC2 Non-variable argument for postinc
|
||||||
|
E_POSTINC3 No-assign-to or no-change argument for postinc
|
||||||
|
E_POSTDEC1 No-copy-to or no-change argument for octet postdec
|
||||||
|
E_POSTDEC2 Non-variable argument for postdec
|
||||||
|
E_POSTDEC3 No-assign-to or no-change argument for postdec
|
||||||
|
E_INIT1 Error-type structure for initialization
|
||||||
|
E_INIT2 No-copy-to structure for initialization
|
||||||
|
E_INIT3 Too many initializer values
|
||||||
|
E_INIT4 Attempt to initialize freed named block
|
||||||
|
E_INIT5 Bad structure type for initialization
|
||||||
|
E_INIT6 No-assign-to element for initialization
|
||||||
|
E_INIT7 No-change element for initialization
|
||||||
|
E_INIT8 No-type-change element for initialization
|
||||||
|
E_INIT9 No-error-value element for initialization
|
||||||
|
E_INIT10 No-assign-or-copy-from source for initialization
|
||||||
|
E_LIST1 No-relocate for list insert
|
||||||
|
E_LIST2 No-relocate for list delete
|
||||||
|
E_LIST3 No-relocate for list push
|
||||||
|
E_LIST4 No-relocate for list append
|
||||||
|
E_LIST5 No-relocate for list pop
|
||||||
|
E_LIST6 No-relocate for list remove
|
||||||
|
E_MODIFY1 Non-variable first argument for modify
|
||||||
|
E_MODIFY2 Non-string second argument for modify
|
||||||
|
E_MODIFY3 No-change first argument for modify
|
||||||
|
E_MODIFY4 Undefined function for modify
|
||||||
|
E_MODIFY5 Unacceptable type first argument for modify
|
||||||
|
E_FPATHOPEN1 Non-string arguments for fpathopen
|
||||||
|
E_FPATHOPEN2 Unrecognized mode for fpathopen
|
||||||
|
E_LOG1 Bad epsilon argument for log
|
||||||
|
E_LOG2 Non-numeric first argument for log
|
||||||
|
@@ -18,15 +18,15 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.1 $
|
# @(#) $Revision: 29.2 $
|
||||||
# @(#) $Id: calcerr_c.awk,v 29.1 1999/12/14 09:15:35 chongo Exp $
|
# @(#) $Id: calcerr_c.awk,v 29.2 2000/06/07 14:02:13 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
|
||||||
# File existed as early as: 1996
|
# File existed as early as: 1996
|
||||||
#
|
#
|
||||||
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
#
|
#
|
||||||
BEGIN {
|
BEGIN {
|
||||||
printf("#include <stdio.h>\n");
|
printf("#include <stdio.h>\n");
|
||||||
|
@@ -18,15 +18,15 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.1 $
|
# @(#) $Revision: 29.2 $
|
||||||
# @(#) $Id: calcerr_c.sed,v 29.1 1999/12/14 09:15:35 chongo Exp $
|
# @(#) $Id: calcerr_c.sed,v 29.2 2000/06/07 14:02:13 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
|
||||||
# File existed as early as: 1996
|
# File existed as early as: 1996
|
||||||
#
|
#
|
||||||
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
#
|
#
|
||||||
s/#.*//
|
s/#.*//
|
||||||
s/[ ][ ]*$//
|
s/[ ][ ]*$//
|
||||||
|
@@ -18,15 +18,15 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.1 $
|
# @(#) $Revision: 29.2 $
|
||||||
# @(#) $Id: calcerr_h.awk,v 29.1 1999/12/14 09:15:35 chongo Exp $
|
# @(#) $Id: calcerr_h.awk,v 29.2 2000/06/07 14:02:13 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
|
||||||
# File existed as early as: 1996
|
# File existed as early as: 1996
|
||||||
#
|
#
|
||||||
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
#
|
#
|
||||||
BEGIN {
|
BEGIN {
|
||||||
ebase = 10000;
|
ebase = 10000;
|
||||||
|
@@ -18,15 +18,15 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.1 $
|
# @(#) $Revision: 29.2 $
|
||||||
# @(#) $Id: calcerr_h.sed,v 29.1 1999/12/14 09:15:35 chongo Exp $
|
# @(#) $Id: calcerr_h.sed,v 29.2 2000/06/07 14:02:13 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
|
||||||
# File existed as early as: 1996
|
# File existed as early as: 1996
|
||||||
#
|
#
|
||||||
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
#
|
#
|
||||||
s/#.*//
|
s/#.*//
|
||||||
s/[ ][ ]*$//
|
s/[ ][ ]*$//
|
||||||
|
12
check.awk
12
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
|
||||||
@@ -18,15 +18,15 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.1 $
|
# @(#) $Revision: 29.3 $
|
||||||
# @(#) $Id: check.awk,v 29.1 1999/12/14 09:15:35 chongo Exp $
|
# @(#) $Id: check.awk,v 29.3 2006/05/20 19:43:39 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
|
||||||
# File existed as early as: 1996
|
# File existed as early as: 1996
|
||||||
#
|
#
|
||||||
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
#
|
#
|
||||||
# This awk script will print 3 lines before and after any non-blank line that
|
# This awk script will print 3 lines before and after any non-blank line that
|
||||||
# does not begin with a number. This allows the 'make debug' rule to remove
|
# does not begin with a number. This allows the 'make debug' rule to remove
|
||||||
@@ -64,7 +64,7 @@ NF == 0 {
|
|||||||
end_seen = 1;
|
end_seen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$1 ~ /^[0-9]+:/ {
|
$1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ {
|
||||||
if (error > 0) {
|
if (error > 0) {
|
||||||
if (havebuf2) {
|
if (havebuf2) {
|
||||||
print buf2;
|
print buf2;
|
||||||
|
105
cmath.h
105
cmath.h
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.7 $
|
||||||
* @(#) $Id: cmath.h,v 29.1 1999/12/14 09:15:35 chongo Exp $
|
* @(#) $Id: cmath.h,v 29.7 2005/10/18 10:43:49 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
|
||||||
* File existed as early as: 1993
|
* File existed as early as: 1993
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -32,7 +32,11 @@
|
|||||||
#define __CMATH_H__
|
#define __CMATH_H__
|
||||||
|
|
||||||
|
|
||||||
#include "qmath.h"
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
|
# include "qmath.h"
|
||||||
|
#else
|
||||||
|
# include <calc/qmath.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -58,62 +62,65 @@ extern void cprintfr(COMPLEX *c);
|
|||||||
/*
|
/*
|
||||||
* Basic numeric routines.
|
* Basic numeric routines.
|
||||||
*/
|
*/
|
||||||
extern COMPLEX *cadd(COMPLEX *c1, COMPLEX *c2);
|
|
||||||
extern COMPLEX *csub(COMPLEX *c1, COMPLEX *c2);
|
extern COMPLEX *c_add(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *cmul(COMPLEX *c1, COMPLEX *c2);
|
extern COMPLEX *c_sub(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *cdiv(COMPLEX *c1, COMPLEX *c2);
|
extern COMPLEX *c_mul(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *caddq(COMPLEX *c, NUMBER *q);
|
extern COMPLEX *c_div(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *csubq(COMPLEX *c, NUMBER *q);
|
extern COMPLEX *c_addq(COMPLEX *c, NUMBER *q);
|
||||||
extern COMPLEX *cmulq(COMPLEX *c, NUMBER *q);
|
extern COMPLEX *c_subq(COMPLEX *c, NUMBER *q);
|
||||||
extern COMPLEX *cdivq(COMPLEX *c, NUMBER *q);
|
extern COMPLEX *c_mulq(COMPLEX *c, NUMBER *q);
|
||||||
extern COMPLEX *cscale(COMPLEX *c, long i);
|
extern COMPLEX *c_divq(COMPLEX *c, NUMBER *q);
|
||||||
extern COMPLEX *cshift(COMPLEX *c, long i);
|
extern COMPLEX *c_scale(COMPLEX *c, long i);
|
||||||
extern COMPLEX *csquare(COMPLEX *c);
|
extern COMPLEX *c_shift(COMPLEX *c, long i);
|
||||||
extern COMPLEX *cconj(COMPLEX *c);
|
extern COMPLEX *c_square(COMPLEX *c);
|
||||||
extern COMPLEX *creal(COMPLEX *c);
|
extern COMPLEX *c_conj(COMPLEX *c);
|
||||||
extern COMPLEX *cimag(COMPLEX *c);
|
extern COMPLEX *c_real(COMPLEX *c);
|
||||||
extern COMPLEX *cneg(COMPLEX *c);
|
extern COMPLEX *c_imag(COMPLEX *c);
|
||||||
extern COMPLEX *cinv(COMPLEX *c);
|
extern COMPLEX *c_neg(COMPLEX *c);
|
||||||
extern COMPLEX *cint(COMPLEX *c);
|
extern COMPLEX *c_inv(COMPLEX *c);
|
||||||
extern COMPLEX *cfrac(COMPLEX *c);
|
extern COMPLEX *c_int(COMPLEX *c);
|
||||||
extern BOOL ccmp(COMPLEX *c1, COMPLEX *c2);
|
extern COMPLEX *c_frac(COMPLEX *c);
|
||||||
|
extern BOOL c_cmp(COMPLEX *c1, COMPLEX *c2);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* More complicated functions.
|
* More complicated functions.
|
||||||
*/
|
*/
|
||||||
extern COMPLEX *cpowi(COMPLEX *c, NUMBER *q);
|
extern COMPLEX *c_powi(COMPLEX *c, NUMBER *q);
|
||||||
|
extern 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);
|
extern COMPLEX *c_power(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon);
|
||||||
extern COMPLEX *csqrt(COMPLEX *c, NUMBER *epsilon, long R);
|
extern COMPLEX *c_sqrt(COMPLEX *c, NUMBER *epsilon, long R);
|
||||||
extern COMPLEX *croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon);
|
extern COMPLEX *c_root(COMPLEX *c, NUMBER *q, NUMBER *epsilon);
|
||||||
extern COMPLEX *cexp(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_exp(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cln(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_ln(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *ccos(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_log(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *csin(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_cos(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *ccosh(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_sin(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *csinh(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_cosh(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cpolar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon);
|
extern COMPLEX *c_sinh(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *crel(COMPLEX *c1, COMPLEX *c2);
|
extern COMPLEX *c_polar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon);
|
||||||
extern COMPLEX *casin(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_rel(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *cacos(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_asin(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *catan(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_acos(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cacot(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_atan(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *casec(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_acot(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cacsc(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_asec(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *casinh(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_acsc(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cacosh(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_asinh(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *catanh(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_acosh(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cacoth(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_atanh(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *casech(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_acoth(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cacsch(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_asech(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cgd(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_acsch(COMPLEX *c, NUMBER *epsilon);
|
||||||
extern COMPLEX *cagd(COMPLEX *c, NUMBER *epsilon);
|
extern COMPLEX *c_gd(COMPLEX *c, NUMBER *epsilon);
|
||||||
|
extern COMPLEX *c_agd(COMPLEX *c, NUMBER *epsilon);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
382
comfunc.c
382
comfunc.c
@@ -19,20 +19,30 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.6 $
|
||||||
* @(#) $Id: comfunc.c,v 29.1 1999/12/14 09:15:35 chongo Exp $
|
* @(#) $Id: comfunc.c,v 29.6 2006/05/20 08:43:55 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#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,14 +1064,14 @@ 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;
|
||||||
long m, n;
|
long m, n;
|
||||||
|
|
||||||
if (qiszero(epsilon)) {
|
if (qiszero(epsilon)) {
|
||||||
math_error("Zero epsilson for cpolar");
|
math_error("Zero epsilon for cpolar");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
if (qiszero(q1))
|
if (qiszero(q1))
|
||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
@@ -1162,3 +1226,27 @@ cprintfr(COMPLEX *c)
|
|||||||
zprintval(i->den, 0L, 0L);
|
zprintval(i->den, 0L, 0L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NUMBER *
|
||||||
|
c_ilog(COMPLEX *c, ZVALUE base)
|
||||||
|
{
|
||||||
|
NUMBER *qr, *qi;
|
||||||
|
|
||||||
|
qr = qilog(c->real, base);
|
||||||
|
qi = qilog(c->imag, base);
|
||||||
|
|
||||||
|
if (qr == NULL) {
|
||||||
|
if (qi == NULL)
|
||||||
|
return NULL;
|
||||||
|
return qi;
|
||||||
|
}
|
||||||
|
if (qi == NULL)
|
||||||
|
return qr;
|
||||||
|
if (qrel(qr, qi) >= 0) {
|
||||||
|
qfree(qi);
|
||||||
|
return qr;
|
||||||
|
}
|
||||||
|
qfree(qr);
|
||||||
|
return qi;
|
||||||
|
}
|
||||||
|
54
commath.c
54
commath.c
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: commath.c,v 29.1 1999/12/14 09:15:35 chongo Exp $
|
* @(#) $Id: commath.c,v 29.4 2005/10/18 10:43:49 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
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ 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;
|
||||||
|
|
||||||
@@ -381,7 +381,7 @@ cconj(COMPLEX *c)
|
|||||||
* Return the real part of a complex number.
|
* Return the real part of a complex number.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
creal(COMPLEX *c)
|
c_real(COMPLEX *c)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -400,7 +400,7 @@ creal(COMPLEX *c)
|
|||||||
* Return the imaginary part of a complex number as a real.
|
* Return the imaginary part of a complex number as a real.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cimag(COMPLEX *c)
|
c_imag(COMPLEX *c)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -417,7 +417,7 @@ cimag(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;
|
||||||
|
|
||||||
|
426
config.c
426
config.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* config - configuration routines
|
* config - configuration routines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell and Landon Curt Noll
|
* Copyright (C) 1999-2006 David I. Bell and Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -19,14 +19,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.17 $
|
||||||
* @(#) $Id: config.c,v 29.2 1999/12/14 19:37:46 chongo Exp $
|
* @(#) $Id: config.c,v 29.17 2006/05/19 15:26:10 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
|
||||||
* File existed as early as: 1991
|
* File existed as early as: 1991
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
#include "nametype.h"
|
#include "nametype.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
#include "custom.h"
|
||||||
|
|
||||||
#include "have_strdup.h"
|
#include "have_strdup.h"
|
||||||
#if !defined(HAVE_STRDUP)
|
#if !defined(HAVE_STRDUP)
|
||||||
@@ -51,6 +52,7 @@
|
|||||||
NAMETYPE configs[] = {
|
NAMETYPE configs[] = {
|
||||||
{"all", CONFIG_ALL},
|
{"all", CONFIG_ALL},
|
||||||
{"mode", CONFIG_MODE},
|
{"mode", CONFIG_MODE},
|
||||||
|
{"mode2", CONFIG_MODE2},
|
||||||
{"display", CONFIG_DISPLAY},
|
{"display", CONFIG_DISPLAY},
|
||||||
{"epsilon", CONFIG_EPSILON},
|
{"epsilon", CONFIG_EPSILON},
|
||||||
/*epsilonprec -- tied to epsilon not a configuration type*/
|
/*epsilonprec -- tied to epsilon not a configuration type*/
|
||||||
@@ -90,6 +92,10 @@ NAMETYPE configs[] = {
|
|||||||
{"ctrl-d", CONFIG_CTRL_D}, /* alias for ctrl_d */
|
{"ctrl-d", CONFIG_CTRL_D}, /* alias for ctrl_d */
|
||||||
{"program", CONFIG_PROGRAM},
|
{"program", CONFIG_PROGRAM},
|
||||||
{"basename", CONFIG_BASENAME},
|
{"basename", CONFIG_BASENAME},
|
||||||
|
{"windows", CONFIG_WINDOWS},
|
||||||
|
{"cygwin", CONFIG_CYGWIN},
|
||||||
|
{"compile_custom", CONFIG_COMPILE_CUSTOM},
|
||||||
|
{"allow_custom", CONFIG_ALLOW_CUSTOM},
|
||||||
{"version", CONFIG_VERSION},
|
{"version", CONFIG_VERSION},
|
||||||
{NULL, 0}
|
{NULL, 0}
|
||||||
};
|
};
|
||||||
@@ -100,6 +106,7 @@ NAMETYPE configs[] = {
|
|||||||
*/
|
*/
|
||||||
CONFIG oldstd = { /* backward compatible standard configuration */
|
CONFIG oldstd = { /* backward compatible standard configuration */
|
||||||
MODE_INITIAL, /* current output mode */
|
MODE_INITIAL, /* current output mode */
|
||||||
|
MODE2_INITIAL, /* current secondary output mode */
|
||||||
20, /* current output digits for float or exp */
|
20, /* current output digits for float or exp */
|
||||||
NULL, /* loaded in at startup - default error for real functions */
|
NULL, /* loaded in at startup - default error for real functions */
|
||||||
EPSILONPREC_DEFAULT, /* binary precision of epsilon */
|
EPSILONPREC_DEFAULT, /* binary precision of epsilon */
|
||||||
@@ -109,10 +116,10 @@ CONFIG oldstd = { /* backward compatible standard configuration */
|
|||||||
SQ_ALG2, /* size of number to use square alg 2 */
|
SQ_ALG2, /* size of number to use square alg 2 */
|
||||||
POW_ALG2, /* size of modulus to use REDC for powers */
|
POW_ALG2, /* size of modulus to use REDC for powers */
|
||||||
REDC_ALG2, /* size of modulus to use REDC algorithm 2 */
|
REDC_ALG2, /* size of modulus to use REDC algorithm 2 */
|
||||||
TRUE, /* ok to print a tilde on aproximations */
|
TRUE, /* ok to print a tilde on approximations */
|
||||||
TRUE, /* ok to print tab before numeric values */
|
TRUE, /* ok to print tab before numeric values */
|
||||||
0, /* quomod() default rounding mode */
|
0, /* quomod() default rounding mode */
|
||||||
2, /* quotent // default rounding mode */
|
2, /* quotient // default rounding mode */
|
||||||
0, /* mod % default rounding mode */
|
0, /* mod % default rounding mode */
|
||||||
24, /* sqrt() default rounding mode */
|
24, /* sqrt() default rounding mode */
|
||||||
24, /* appr() default rounding mode */
|
24, /* appr() default rounding mode */
|
||||||
@@ -132,27 +139,44 @@ CONFIG oldstd = { /* backward compatible standard configuration */
|
|||||||
0, /* internal calc debug level */
|
0, /* internal calc debug level */
|
||||||
3, /* calc resource file debug level */
|
3, /* calc resource file debug level */
|
||||||
0, /* user defined debug level */
|
0, /* user defined debug level */
|
||||||
TRUE, /* print Quit or abort executed messages */
|
FALSE, /* print Quit or abort executed messages */
|
||||||
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
||||||
NULL, /* our name */
|
NULL, /* our name */
|
||||||
NULL, /* basename of our name */
|
NULL, /* basename of our name */
|
||||||
|
#if defined(_WIN32)
|
||||||
|
TRUE, /* running under windows */
|
||||||
|
#else
|
||||||
|
FALSE, /* congrats, you are not using windows */
|
||||||
|
#endif
|
||||||
|
#if defined(__CYGWIN__)
|
||||||
|
TRUE, /* compiled under cygwin */
|
||||||
|
#else
|
||||||
|
FALSE, /* not compiled with cygwin */
|
||||||
|
#endif
|
||||||
|
#if defined(CUSTOM)
|
||||||
|
TRUE, /* compiled with -DCUSTOM */
|
||||||
|
#else
|
||||||
|
FALSE, /* compiled without -DCUSTOM */
|
||||||
|
#endif
|
||||||
|
&allow_custom, /* *TRUE=> custom functions are enabled */
|
||||||
NULL /* version */
|
NULL /* version */
|
||||||
};
|
};
|
||||||
CONFIG newstd = { /* new non-backward compatible configuration */
|
CONFIG newstd = { /* new non-backward compatible configuration */
|
||||||
MODE_INITIAL, /* current output mode */
|
MODE_INITIAL, /* current output mode */
|
||||||
10, /* current output digits for float or exp */
|
MODE2_INITIAL, /* current output mode */
|
||||||
|
20, /* current output digits for float or exp */
|
||||||
NULL, /* loaded in at startup - default error for real functions */
|
NULL, /* loaded in at startup - default error for real functions */
|
||||||
NEW_EPSILONPREC_DEFAULT, /* binary precision of epsilon */
|
EPSILONPREC_DEFAULT, /* binary precision of epsilon */
|
||||||
FALSE, /* tracing flags */
|
FALSE, /* tracing flags */
|
||||||
MAXPRINT_DEFAULT, /* number of elements to print */
|
MAXPRINT_DEFAULT, /* number of elements to print */
|
||||||
MUL_ALG2, /* size of number to use multiply alg 2 */
|
MUL_ALG2, /* size of number to use multiply alg 2 */
|
||||||
SQ_ALG2, /* size of number to use square alg 2 */
|
SQ_ALG2, /* size of number to use square alg 2 */
|
||||||
POW_ALG2, /* size of modulus to use REDC for powers */
|
POW_ALG2, /* size of modulus to use REDC for powers */
|
||||||
REDC_ALG2, /* size of modulus to use REDC algorithm 2 */
|
REDC_ALG2, /* size of modulus to use REDC algorithm 2 */
|
||||||
TRUE, /* ok to print a tilde on aproximations */
|
TRUE, /* ok to print a tilde on approximations */
|
||||||
TRUE, /* ok to print tab before numeric values */
|
TRUE, /* ok to print tab before numeric values */
|
||||||
0, /* quomod() default rounding mode */
|
0, /* quomod() default rounding mode */
|
||||||
0, /* quotent // default rounding mode */
|
2, /* quotient // default rounding mode */
|
||||||
0, /* mod % default rounding mode */
|
0, /* mod % default rounding mode */
|
||||||
24, /* sqrt() default rounding mode */
|
24, /* sqrt() default rounding mode */
|
||||||
24, /* appr() default rounding mode */
|
24, /* appr() default rounding mode */
|
||||||
@@ -161,7 +185,7 @@ CONFIG newstd = { /* new non-backward compatible configuration */
|
|||||||
24, /* output default rounding mode */
|
24, /* output default rounding mode */
|
||||||
24, /* round()/bround() default rounding mode */
|
24, /* round()/bround() default rounding mode */
|
||||||
TRUE, /* ok to print leading 0 before decimal pt */
|
TRUE, /* ok to print leading 0 before decimal pt */
|
||||||
1, /* ok to print trailing 0's */
|
0, /* ok to print trailing 0's */
|
||||||
MAXSCANCOUNT, /* max scan errors before abort */
|
MAXSCANCOUNT, /* max scan errors before abort */
|
||||||
"; ", /* normal prompt */
|
"; ", /* normal prompt */
|
||||||
";; ", /* prompt when inside multi-line input */
|
";; ", /* prompt when inside multi-line input */
|
||||||
@@ -172,10 +196,26 @@ CONFIG newstd = { /* new non-backward compatible configuration */
|
|||||||
0, /* internal calc debug level */
|
0, /* internal calc debug level */
|
||||||
3, /* calc resource file debug level */
|
3, /* calc resource file debug level */
|
||||||
0, /* user defined debug level */
|
0, /* user defined debug level */
|
||||||
TRUE, /* print Quit or abort executed messages */
|
FALSE, /* print Quit or abort executed messages */
|
||||||
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
||||||
NULL, /* our name */
|
NULL, /* our name */
|
||||||
NULL, /* basename of our name */
|
NULL, /* basename of our name */
|
||||||
|
#if defined(_WIN32)
|
||||||
|
TRUE, /* running under windows */
|
||||||
|
#else
|
||||||
|
FALSE, /* congrats, you are not using windows */
|
||||||
|
#endif
|
||||||
|
#if defined(__CYGWIN__)
|
||||||
|
TRUE, /* compiled under cygwin */
|
||||||
|
#else
|
||||||
|
FALSE, /* not compiled with cygwin */
|
||||||
|
#endif
|
||||||
|
#if defined(CUSTOM)
|
||||||
|
TRUE, /* compiled with -DCUSTOM */
|
||||||
|
#else
|
||||||
|
FALSE, /* compiled without -DCUSTOM */
|
||||||
|
#endif
|
||||||
|
&allow_custom, /* *TRUE=> custom functions are enabled */
|
||||||
NULL /* version */
|
NULL /* version */
|
||||||
};
|
};
|
||||||
CONFIG *conf = NULL; /* loaded in at startup - current configuration */
|
CONFIG *conf = NULL; /* loaded in at startup - current configuration */
|
||||||
@@ -201,6 +241,7 @@ static NAMETYPE modes[] = {
|
|||||||
{"oct", MODE_OCTAL},
|
{"oct", MODE_OCTAL},
|
||||||
{"binary", MODE_BINARY},
|
{"binary", MODE_BINARY},
|
||||||
{"bin", MODE_BINARY},
|
{"bin", MODE_BINARY},
|
||||||
|
{"off", MODE2_OFF},
|
||||||
{NULL, 0}
|
{NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -287,10 +328,11 @@ static NAMETYPE truth[] = {
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* declate static functions
|
* declare static functions
|
||||||
*/
|
*/
|
||||||
static long lookup_long(NAMETYPE *set, char *name);
|
static long lookup_long(NAMETYPE *set, char *name);
|
||||||
static char *lookup_name(NAMETYPE *set, long val);
|
static char *lookup_name(NAMETYPE *set, long val);
|
||||||
|
static int getlen(VALUE *vp, LEN *lp);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -360,6 +402,26 @@ lookup_name(NAMETYPE *set, long val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check whether VALUE at vp is a LEN (32-bit signed integer) and if so,
|
||||||
|
* copy that integer to lp.
|
||||||
|
* Return: 1, 2, 0, or -1 XXX
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int
|
||||||
|
getlen(VALUE *vp, LEN *lp)
|
||||||
|
{
|
||||||
|
if (vp->v_type != V_NUM || !qisint(vp->v_num))
|
||||||
|
return 1;
|
||||||
|
if (zge31b(vp->v_num->num))
|
||||||
|
return 2;
|
||||||
|
*lp = ztoi(vp->v_num->num);
|
||||||
|
if (*lp < 0)
|
||||||
|
return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the specified configuration type to the specified value.
|
* Set the specified configuration type to the specified value.
|
||||||
* An error is generated if the type number or value is illegal.
|
* An error is generated if the type number or value is illegal.
|
||||||
@@ -370,6 +432,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 = 0;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@@ -414,15 +477,11 @@ setconfig(int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_DISPLAY:
|
case CONFIG_DISPLAY:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non-numeric for display");
|
math_error("Bad value for display");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
math_setdigits(len);
|
||||||
temp = qtoi(q);
|
|
||||||
if (qisfrac(q) || qisneg(q) || !zistiny(q->num))
|
|
||||||
temp = -1;
|
|
||||||
math_setdigits(temp);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_MODE:
|
case CONFIG_MODE:
|
||||||
@@ -438,6 +497,19 @@ setconfig(int type, VALUE *vp)
|
|||||||
math_setmode((int) temp);
|
math_setmode((int) temp);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CONFIG_MODE2:
|
||||||
|
if (vp->v_type != V_STR) {
|
||||||
|
math_error("Non-string for mode");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
temp = lookup_long(modes, vp->v_str->s_str);
|
||||||
|
if (temp < 0) {
|
||||||
|
math_error("Unknown mode \"%s\"", vp->v_str);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
math_setmode2((int) temp);
|
||||||
|
break;
|
||||||
|
|
||||||
case CONFIG_EPSILON:
|
case CONFIG_EPSILON:
|
||||||
if (vp->v_type != V_NUM) {
|
if (vp->v_type != V_NUM) {
|
||||||
math_error("Non-numeric for epsilon");
|
math_error("Non-numeric for epsilon");
|
||||||
@@ -447,91 +519,51 @@ setconfig(int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_MAXPRINT:
|
case CONFIG_MAXPRINT:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non-numeric for maxprint");
|
math_error("Bad value for maxprint");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
conf->maxprint = len;
|
||||||
temp = qtoi(q);
|
|
||||||
if (qisfrac(q) || qisneg(q) || !zistiny(q->num))
|
|
||||||
temp = -1;
|
|
||||||
if (temp < 0) {
|
|
||||||
math_error("Maxprint value is out of range");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->maxprint = temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_MUL2:
|
case CONFIG_MUL2:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non-numeric for mul2");
|
math_error("Bad value for mul2");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
if (len == 0)
|
||||||
temp = qtoi(q);
|
len = MUL_ALG2;
|
||||||
if (qisfrac(q) || qisneg(q))
|
conf->mul2 = len;
|
||||||
temp = -1;
|
|
||||||
if (temp == 0)
|
|
||||||
temp = MUL_ALG2;
|
|
||||||
if (temp < 2) {
|
|
||||||
math_error("Illegal mul2 value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->mul2 = (int)temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_SQ2:
|
case CONFIG_SQ2:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non-numeric for sq2");
|
math_error("Bad value for sq2");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
if (len == 0)
|
||||||
temp = qtoi(q);
|
len = SQ_ALG2;
|
||||||
if (qisfrac(q) || qisneg(q))
|
conf->sq2 = len;
|
||||||
temp = -1;
|
|
||||||
if (temp == 0)
|
|
||||||
temp = SQ_ALG2;
|
|
||||||
if (temp < 2) {
|
|
||||||
math_error("Illegal sq2 value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->sq2 = (int)temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_POW2:
|
case CONFIG_POW2:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non-numeric for pow2");
|
math_error("Bad value for pow2");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
if (len == 0)
|
||||||
temp = qtoi(q);
|
len = POW_ALG2;
|
||||||
if (qisfrac(q) || qisneg(q))
|
conf->pow2 = len;
|
||||||
temp = -1;
|
|
||||||
if (temp == 0)
|
|
||||||
temp = POW_ALG2;
|
|
||||||
if (temp < 1) {
|
|
||||||
math_error("Illegal pow2 value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->pow2 = (int)temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_REDC2:
|
case CONFIG_REDC2:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non-numeric for redc2");
|
math_error("Bad value for redc2");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
if (len == 0)
|
||||||
temp = qtoi(q);
|
len = REDC_ALG2;
|
||||||
if (qisfrac(q) || qisneg(q))
|
conf->redc2 = len;
|
||||||
temp = -1;
|
|
||||||
if (temp == 0)
|
|
||||||
temp = REDC_ALG2;
|
|
||||||
if (temp < 1) {
|
|
||||||
math_error("Illegal redc2 value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->redc2 = (int)temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_TILDE:
|
case CONFIG_TILDE:
|
||||||
@@ -563,129 +595,75 @@ setconfig(int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_QUOMOD:
|
case CONFIG_QUOMOD:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non numeric for quomod");
|
math_error("Illegal value for quomod");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
conf->quomod = len;
|
||||||
temp = qtoi(q);
|
|
||||||
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
|
|
||||||
math_error("Illegal quomod parameter value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->quomod = temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_QUO:
|
case CONFIG_QUO:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non numeric for quo");
|
math_error("Illegal value for quo");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
conf->quo = len;
|
||||||
temp = qtoi(q);
|
|
||||||
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
|
|
||||||
math_error("Illegal quo parameter value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->quo = temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_MOD:
|
case CONFIG_MOD:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non numeric for mod");
|
math_error("Illegal value for mod");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
conf->mod = len;
|
||||||
temp = qtoi(q);
|
|
||||||
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
|
|
||||||
math_error("Illegal mod parameter value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->mod = temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_SQRT:
|
case CONFIG_SQRT:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non numeric for sqrt");
|
math_error("Illegal value for sqrt");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
conf->sqrt = len;
|
||||||
temp = qtoi(q);
|
|
||||||
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
|
|
||||||
math_error("Illegal sqrt parameter value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->sqrt = temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_APPR:
|
case CONFIG_APPR:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non numeric for appr");
|
math_error("Illegal value for appr");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
conf->appr = len;
|
||||||
temp = qtoi(q);
|
|
||||||
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
|
|
||||||
math_error("Illegal appr parameter value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->appr = temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_CFAPPR:
|
case CONFIG_CFAPPR:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non numeric for cfappr");
|
math_error("Illegal value for cfappr");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
conf->cfappr = len;
|
||||||
temp = qtoi(q);
|
|
||||||
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
|
|
||||||
math_error("Illegal cfappr parameter value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->cfappr = temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_CFSIM:
|
case CONFIG_CFSIM:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non numeric for cfsim");
|
math_error("Illegal value for cfsim");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
conf->cfsim = len;
|
||||||
temp = qtoi(q);
|
|
||||||
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
|
|
||||||
math_error("Illegal cfsim parameter value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->cfsim = temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_OUTROUND:
|
case CONFIG_OUTROUND:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non numeric for outround");
|
math_error("Illegal value for outround");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
conf->outround = len;
|
||||||
temp = qtoi(q);
|
|
||||||
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
|
|
||||||
math_error("Illegal output parameter value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->outround = temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_ROUND:
|
case CONFIG_ROUND:
|
||||||
if (vp->v_type != V_NUM) {
|
if (getlen(vp, &len)) {
|
||||||
math_error("Non numeric for round");
|
math_error("Illegal value for round");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
conf->round = len;
|
||||||
temp = qtoi(q);
|
|
||||||
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
|
|
||||||
math_error("Illegal output parameter value");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
|
||||||
conf->round = temp;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_LEADZERO:
|
case CONFIG_LEADZERO:
|
||||||
@@ -744,7 +722,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;
|
||||||
@@ -759,7 +737,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;
|
||||||
@@ -898,11 +876,27 @@ setconfig(int type, VALUE *vp)
|
|||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
|
||||||
case CONFIG_BASENAME:
|
case CONFIG_BASENAME:
|
||||||
math_error("The program config parameter is read-only");
|
math_error("The basename config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_WINDOWS:
|
||||||
|
math_error("The windows config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_CYGWIN:
|
||||||
|
math_error("The cygwin config parameter is read-only");
|
||||||
|
/*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*/
|
/*NOTREACHED*/
|
||||||
|
|
||||||
case CONFIG_VERSION:
|
case CONFIG_VERSION:
|
||||||
math_error("The program config parameter is read-only");
|
math_error("The version config parameter is read-only");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -965,6 +959,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 {
|
||||||
@@ -1012,6 +1007,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);
|
||||||
}
|
}
|
||||||
@@ -1079,6 +1075,16 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
vp->v_str = makenewstring(p);
|
vp->v_str = makenewstring(p);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case CONFIG_MODE2:
|
||||||
|
vp->v_type = V_STR;
|
||||||
|
p = lookup_name(modes, cfg->outmode2);
|
||||||
|
if (p == NULL) {
|
||||||
|
math_error("invalid secondary output mode: %d", cfg->outmode2);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
vp->v_str = makenewstring(p);
|
||||||
|
return;
|
||||||
|
|
||||||
case CONFIG_EPSILON:
|
case CONFIG_EPSILON:
|
||||||
vp->v_num = qlink(cfg->epsilon);
|
vp->v_num = qlink(cfg->epsilon);
|
||||||
return;
|
return;
|
||||||
@@ -1104,20 +1110,18 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_TILDE:
|
case CONFIG_TILDE:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->tilde_ok) {
|
if (cfg->tilde_ok) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case CONFIG_TAB:
|
case CONFIG_TAB:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->tab_ok) {
|
if (cfg->tab_ok) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1158,20 +1162,18 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_LEADZERO:
|
case CONFIG_LEADZERO:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->leadzero) {
|
if (cfg->leadzero) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case CONFIG_FULLZERO:
|
case CONFIG_FULLZERO:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->fullzero) {
|
if (cfg->fullzero) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1194,11 +1196,10 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_BLKVERBOSE:
|
case CONFIG_BLKVERBOSE:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->blkverbose) {
|
if (cfg->blkverbose) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1235,11 +1236,10 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_VERBOSE_QUIT:
|
case CONFIG_VERBOSE_QUIT:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->verbose_quit) {
|
if (cfg->verbose_quit) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1271,6 +1271,42 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case CONFIG_WINDOWS:
|
||||||
|
if (cfg->windows) {
|
||||||
|
vp->v_num = itoq(1);
|
||||||
|
} else {
|
||||||
|
vp->v_num = itoq(0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
case CONFIG_CYGWIN:
|
||||||
|
if (cfg->cygwin) {
|
||||||
|
vp->v_num = itoq(1);
|
||||||
|
} else {
|
||||||
|
vp->v_num = itoq(0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
case CONFIG_COMPILE_CUSTOM:
|
||||||
|
if (cfg->compile_custom) {
|
||||||
|
vp->v_num = itoq(1);
|
||||||
|
} else {
|
||||||
|
vp->v_num = itoq(0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
case CONFIG_ALLOW_CUSTOM:
|
||||||
|
/* firewall */
|
||||||
|
if (cfg->allow_custom == NULL) {
|
||||||
|
cfg->allow_custom = &allow_custom;
|
||||||
|
}
|
||||||
|
if (*(cfg->allow_custom)) {
|
||||||
|
vp->v_num = itoq(1);
|
||||||
|
} else {
|
||||||
|
vp->v_num = itoq(0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
case CONFIG_VERSION:
|
case CONFIG_VERSION:
|
||||||
vp->v_type = V_STR;
|
vp->v_type = V_STR;
|
||||||
if (cfg->version == NULL) {
|
if (cfg->version == NULL) {
|
||||||
@@ -1311,12 +1347,12 @@ config_cmp(CONFIG *cfg1, CONFIG *cfg2)
|
|||||||
*/
|
*/
|
||||||
if (cfg1 == NULL || cfg1->epsilon == NULL || cfg1->prompt1 == NULL ||
|
if (cfg1 == NULL || cfg1->epsilon == NULL || cfg1->prompt1 == NULL ||
|
||||||
cfg1->prompt2 == NULL) {
|
cfg1->prompt2 == NULL) {
|
||||||
math_error("CONFIG #1 value is invaid");
|
math_error("CONFIG #1 value is invalid");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
if (cfg2 == NULL || cfg2->epsilon == NULL || cfg2->prompt1 == NULL ||
|
if (cfg2 == NULL || cfg2->epsilon == NULL || cfg2->prompt1 == NULL ||
|
||||||
cfg2->prompt2 == NULL) {
|
cfg2->prompt2 == NULL) {
|
||||||
math_error("CONFIG #2 value is invaid");
|
math_error("CONFIG #2 value is invalid");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1326,6 +1362,7 @@ config_cmp(CONFIG *cfg1, CONFIG *cfg2)
|
|||||||
return cfg1->traceflags != cfg2->traceflags ||
|
return cfg1->traceflags != cfg2->traceflags ||
|
||||||
cfg1->outdigits != cfg2->outdigits ||
|
cfg1->outdigits != cfg2->outdigits ||
|
||||||
cfg1->outmode != cfg2->outmode ||
|
cfg1->outmode != cfg2->outmode ||
|
||||||
|
cfg1->outmode2 != cfg2->outmode2 ||
|
||||||
qcmp(cfg1->epsilon, cfg2->epsilon) ||
|
qcmp(cfg1->epsilon, cfg2->epsilon) ||
|
||||||
cfg1->epsilonprec != cfg2->epsilonprec ||
|
cfg1->epsilonprec != cfg2->epsilonprec ||
|
||||||
cfg1->maxprint != cfg2->maxprint ||
|
cfg1->maxprint != cfg2->maxprint ||
|
||||||
@@ -1369,6 +1406,17 @@ 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->version != NULL && cfg2->version != NULL &&
|
(cfg1->version != NULL && cfg2->version != NULL &&
|
||||||
|
97
config.h
97
config.h
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* config - configuration routines
|
* config - configuration routines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll and David I. Bell
|
* Copyright (C) 1999-2004 Landon Curt Noll and David I. Bell
|
||||||
*
|
*
|
||||||
* Primary author: Landon Curt Noll
|
* Primary author: Landon Curt Noll
|
||||||
*
|
*
|
||||||
@@ -19,15 +19,15 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.17 $
|
||||||
* @(#) $Id: config.h,v 29.2 1999/12/14 19:37:46 chongo Exp $
|
* @(#) $Id: config.h,v 29.17 2004/02/25 23:56:13 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/11/01 22:20:17
|
* Under source code control: 1995/11/01 22:20:17
|
||||||
* File existed as early as: 1995
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -35,8 +35,15 @@
|
|||||||
#define __CONFIG_H__
|
#define __CONFIG_H__
|
||||||
|
|
||||||
|
|
||||||
#include "nametype.h"
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
#include "qmath.h"
|
# include "win32dll.h"
|
||||||
|
# include "nametype.h"
|
||||||
|
# include "qmath.h"
|
||||||
|
#else
|
||||||
|
# include <calc/win32dll.h>
|
||||||
|
# include <calc/nametype.h>
|
||||||
|
# include <calc/qmath.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -71,17 +78,22 @@
|
|||||||
#define CONFIG_MORE 25
|
#define CONFIG_MORE 25
|
||||||
#define CONFIG_BLKMAXPRINT 26
|
#define CONFIG_BLKMAXPRINT 26
|
||||||
#define CONFIG_BLKVERBOSE 27
|
#define CONFIG_BLKVERBOSE 27
|
||||||
#define CONFIG_BLKBASE 28
|
#define CONFIG_BLKBASE 28
|
||||||
#define CONFIG_BLKFMT 29
|
#define CONFIG_BLKFMT 29
|
||||||
#define CONFIG_RESOURCE_DEBUG 30
|
#define CONFIG_RESOURCE_DEBUG 30
|
||||||
#define CONFIG_LIB_DEBUG CONFIG_RESOURCE_DEBUG
|
#define CONFIG_LIB_DEBUG CONFIG_RESOURCE_DEBUG
|
||||||
#define CONFIG_CALC_DEBUG 31
|
#define CONFIG_CALC_DEBUG 31
|
||||||
#define CONFIG_USER_DEBUG 32
|
#define CONFIG_USER_DEBUG 32
|
||||||
#define CONFIG_VERBOSE_QUIT 33
|
#define CONFIG_VERBOSE_QUIT 33
|
||||||
#define CONFIG_CTRL_D 34
|
#define CONFIG_CTRL_D 34
|
||||||
#define CONFIG_PROGRAM 35
|
#define CONFIG_PROGRAM 35
|
||||||
#define CONFIG_BASENAME 36
|
#define CONFIG_BASENAME 36
|
||||||
#define CONFIG_VERSION 37
|
#define CONFIG_VERSION 37
|
||||||
|
#define CONFIG_WINDOWS 38
|
||||||
|
#define CONFIG_MODE2 39
|
||||||
|
#define CONFIG_CYGWIN 40
|
||||||
|
#define CONFIG_COMPILE_CUSTOM 41
|
||||||
|
#define CONFIG_ALLOW_CUSTOM 42
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -90,8 +102,6 @@
|
|||||||
#define DISPLAY_DEFAULT 20 /* default digits for float display */
|
#define DISPLAY_DEFAULT 20 /* default digits for float display */
|
||||||
#define EPSILON_DEFAULT "1e-20" /* allowed error for float calculations */
|
#define EPSILON_DEFAULT "1e-20" /* allowed error for float calculations */
|
||||||
#define EPSILONPREC_DEFAULT 67 /* 67 ==> 2^-67 <= EPSILON_DEFAULT < 2^-66 */
|
#define EPSILONPREC_DEFAULT 67 /* 67 ==> 2^-67 <= EPSILON_DEFAULT < 2^-66 */
|
||||||
#define NEW_EPSILON_DEFAULT "1e-10" /* newstd EPSILON_DEFAULT */
|
|
||||||
#define NEW_EPSILONPREC_DEFAULT 34 /* 34 ==> 2^-34 <= 1e-10 < 2^-33 */
|
|
||||||
#define MAXPRINT_DEFAULT 16 /* default number of elements printed */
|
#define MAXPRINT_DEFAULT 16 /* default number of elements printed */
|
||||||
#define MAXSCANCOUNT 20 /* default max scan errors before an abort */
|
#define MAXSCANCOUNT 20 /* default max scan errors before an abort */
|
||||||
|
|
||||||
@@ -110,26 +120,27 @@
|
|||||||
*/
|
*/
|
||||||
struct config {
|
struct config {
|
||||||
int outmode; /* current output mode */
|
int outmode; /* current output mode */
|
||||||
long outdigits; /* current output digits for float or exp */
|
int outmode2; /* current secondary output mode */
|
||||||
|
LEN outdigits; /* current output digits for float or exp */
|
||||||
NUMBER *epsilon; /* default error for real functions */
|
NUMBER *epsilon; /* default error for real functions */
|
||||||
long epsilonprec; /* epsilon binary precision (tied to epsilon) */
|
long epsilonprec; /* epsilon binary precision (tied to epsilon) */
|
||||||
FLAG traceflags; /* tracing flags */
|
FLAG traceflags; /* tracing flags */
|
||||||
long maxprint; /* number of elements to print */
|
LEN maxprint; /* number of elements to print */
|
||||||
LEN mul2; /* size of number to use multiply algorithm 2 */
|
LEN mul2; /* size of number to use multiply algorithm 2 */
|
||||||
LEN sq2; /* size of number to use square algorithm 2 */
|
LEN sq2; /* size of number to use square algorithm 2 */
|
||||||
LEN pow2; /* size of modulus to use REDC for powers */
|
LEN pow2; /* size of modulus to use REDC for powers */
|
||||||
LEN redc2; /* size of modulus to use REDC algorithm 2 */
|
LEN redc2; /* size of modulus to use REDC algorithm 2 */
|
||||||
BOOL tilde_ok; /* ok to print a tilde on aproximations */
|
BOOL tilde_ok; /* ok to print a tilde on aproximations */
|
||||||
BOOL tab_ok; /* ok to print tab before numeric values */
|
BOOL tab_ok; /* ok to print tab before numeric values */
|
||||||
long quomod; /* quomod() default rounding mode */
|
LEN quomod; /* quomod() default rounding mode */
|
||||||
long quo; /* quotent // default rounding mode */
|
LEN quo; /* quotient // default rounding mode */
|
||||||
long mod; /* mod % default rounding mode */
|
LEN mod; /* mod % default rounding mode */
|
||||||
long sqrt; /* sqrt() default rounding mode */
|
LEN sqrt; /* sqrt() default rounding mode */
|
||||||
long appr; /* appr() default rounding mode */
|
LEN appr; /* appr() default rounding mode */
|
||||||
long cfappr; /* cfappr() default rounding mode */
|
LEN cfappr; /* cfappr() default rounding mode */
|
||||||
long cfsim; /* cfsim() default rounding mode */
|
LEN cfsim; /* cfsim() default rounding mode */
|
||||||
long outround; /* output default rounding mode */
|
LEN outround; /* output default rounding mode */
|
||||||
long round; /* round()/bround() default rounding mode */
|
LEN round; /* round()/bround() default rounding mode */
|
||||||
BOOL leadzero; /* ok to print leading 0 before decimal pt */
|
BOOL leadzero; /* ok to print leading 0 before decimal pt */
|
||||||
BOOL fullzero; /* ok to print trailing 0's */
|
BOOL fullzero; /* ok to print trailing 0's */
|
||||||
long maxscancount; /* max scan errors before abort */
|
long maxscancount; /* max scan errors before abort */
|
||||||
@@ -146,6 +157,10 @@ struct config {
|
|||||||
int ctrl_d; /* see CTRL_D_xyz below */
|
int ctrl_d; /* see CTRL_D_xyz below */
|
||||||
char *program; /* our name */
|
char *program; /* our name */
|
||||||
char *base_name; /* basename of our name */
|
char *base_name; /* basename of our name */
|
||||||
|
BOOL windows; /* TRUE => running under MS windows */
|
||||||
|
BOOL cygwin; /* TRUE => compiled with cygwin */
|
||||||
|
BOOL compile_custom; /* TRUE => compiled with -DCUSTOM */
|
||||||
|
BOOL *allow_custom; /* ptr to if custom functions are allowed */
|
||||||
char *version; /* calc version string */
|
char *version; /* calc version string */
|
||||||
};
|
};
|
||||||
typedef struct config CONFIG;
|
typedef struct config CONFIG;
|
||||||
@@ -157,7 +172,8 @@ typedef struct config CONFIG;
|
|||||||
#define RSCDBG_STDIN_FUNC (0x00000001) /* interactive func define debug */
|
#define RSCDBG_STDIN_FUNC (0x00000001) /* interactive func define debug */
|
||||||
#define RSCDBG_FILE_FUNC (0x00000002) /* file read func define debug */
|
#define RSCDBG_FILE_FUNC (0x00000002) /* file read func define debug */
|
||||||
#define RSCDBG_FUNC_INFO (0x00000004) /* print extra info for show func */
|
#define RSCDBG_FUNC_INFO (0x00000004) /* print extra info for show func */
|
||||||
#define RSCDBG_MASK (0x00000007)
|
#define RSCDBG_PRINT_DBG (0x00000008) /* print debug messages */
|
||||||
|
#define RSCDBG_MASK (0x0000000f)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -169,7 +185,8 @@ typedef struct config CONFIG;
|
|||||||
#define CALCDBG_BLOCK (0x00000008) /* block debug */
|
#define CALCDBG_BLOCK (0x00000008) /* block debug */
|
||||||
#define CALCDBG_TTY (0x00000010) /* report TTY state changes */
|
#define CALCDBG_TTY (0x00000010) /* report TTY state changes */
|
||||||
#define CALCDBG_RUNSTATE (0x00000020) /* report run_state changes */
|
#define CALCDBG_RUNSTATE (0x00000020) /* report run_state changes */
|
||||||
#define CALCDBG_MASK (0x0000003f)
|
#define CALCDBG_RAND (0x00000040) /* report rand() activity */
|
||||||
|
#define CALCDBG_MASK (0x0000007f)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ctrl-d meanings
|
* ctrl-d meanings
|
||||||
@@ -182,23 +199,23 @@ typedef struct config CONFIG;
|
|||||||
/*
|
/*
|
||||||
* global configuration states and aliases
|
* global configuration states and aliases
|
||||||
*/
|
*/
|
||||||
extern CONFIG *conf; /* current configuration */
|
extern DLL CONFIG *conf; /* current configuration */
|
||||||
extern CONFIG oldstd; /* backward compatible standard configuration */
|
extern DLL CONFIG oldstd; /* old classic standard configuration */
|
||||||
extern CONFIG newstd; /* new non-backward compatible configuration */
|
extern DLL CONFIG newstd; /* default compatible configuration */
|
||||||
extern char *calc_debug; /* !=NULL => value of config("calc_debug") */
|
extern DLL char *calc_debug; /* !=NULL => value of config("calc_debug") */
|
||||||
extern char *resource_debug; /* !=NULL => config("resource_debug") value */
|
extern DLL char *resource_debug; /* !=NULL => config("resource_debug") value */
|
||||||
extern char *user_debug; /* !=NULL => value of config("user_debug") */
|
extern DLL char *user_debug; /* !=NULL => value of config("user_debug") */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* configuration externals
|
* configuration externals
|
||||||
*/
|
*/
|
||||||
extern CONFIG *config_copy(CONFIG *src);
|
extern DLL CONFIG *config_copy(CONFIG *src);
|
||||||
extern void config_free(CONFIG *cfg);
|
extern DLL void config_free(CONFIG *cfg);
|
||||||
extern void config_print(CONFIG *cfg);
|
extern DLL void config_print(CONFIG *cfg);
|
||||||
extern int configtype(char*);
|
extern DLL int configtype(char*);
|
||||||
extern void config_print(CONFIG*);
|
extern DLL void config_print(CONFIG*);
|
||||||
extern BOOL config_cmp(CONFIG*, CONFIG*);
|
extern DLL BOOL config_cmp(CONFIG*, CONFIG*);
|
||||||
|
|
||||||
|
|
||||||
#endif /* !__CONFIG_H__ */
|
#endif /* !__CONFIG_H__ */
|
||||||
|
14
const.c
14
const.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* const - constant number storage module
|
* const - constant number storage module
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -17,14 +17,14 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: const.c,v 29.1 1999/12/14 09:15:35 chongo Exp $
|
* @(#) $Id: const.c,v 29.4 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/const.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/const.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:14
|
* Under source code control: 1990/02/15 01:48:14
|
||||||
* File existed as early as: before 1990
|
* File existed as early as: before 1990
|
||||||
*
|
*
|
||||||
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
#define CONSTALLOCSIZE 400 /* number of constants to allocate */
|
#define CONSTALLOCSIZE 400 /* number of constants to allocate */
|
||||||
|
|
||||||
static long constcount; /* number of constants defined */
|
static unsigned long constcount;/* number of constants defined */
|
||||||
static long constavail; /* number of constants available */
|
static long constavail; /* number of constants available */
|
||||||
static NUMBER **consttable; /* table of constants */
|
static NUMBER **consttable; /* table of constants */
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ addqconstant(NUMBER *q)
|
|||||||
{
|
{
|
||||||
register NUMBER **tp; /* pointer to current number */
|
register NUMBER **tp; /* pointer to current number */
|
||||||
register NUMBER *t; /* number being tested */
|
register NUMBER *t; /* number being tested */
|
||||||
long index; /* index into constant table */
|
unsigned long index; /* index into constant table */
|
||||||
long numlen; /* numerator length */
|
long numlen; /* numerator length */
|
||||||
long denlen; /* denominator length */
|
long denlen; /* denominator length */
|
||||||
HALF numlow; /* bottom value of numerator */
|
HALF numlow; /* bottom value of numerator */
|
||||||
@@ -221,7 +221,7 @@ trimconstants(void)
|
|||||||
void
|
void
|
||||||
showconstants(void)
|
showconstants(void)
|
||||||
{
|
{
|
||||||
long index;
|
unsigned long index;
|
||||||
NUMBER **qp;
|
NUMBER **qp;
|
||||||
long count;
|
long count;
|
||||||
|
|
||||||
|
320
cscript/4dsphere.calc
Normal file
320
cscript/4dsphere.calc
Normal file
@@ -0,0 +1,320 @@
|
|||||||
|
#!/usr/local/src/cmd/calc/calc -q -s -f
|
||||||
|
/*
|
||||||
|
* 4dsphere - determine if 6 points lie on the surface of a sphere in R^4
|
||||||
|
*
|
||||||
|
* usage:
|
||||||
|
* 4dsphere x0 y0 z0 w0 x1 y1 z1 w1 ... x5 y5 z5 w5
|
||||||
|
*
|
||||||
|
* x0 y0 z0 w0 point 0 in R^4
|
||||||
|
* x1 y1 z1 w1 point 1 in R^4
|
||||||
|
* ... ...
|
||||||
|
* x5 y5 z5 w5 point 5 in R^4
|
||||||
|
*
|
||||||
|
* Copyright (C) 2001 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 1.3 $
|
||||||
|
* @(#) $Id: 4dsphere.calc,v 1.3 2001/06/06 09:06:29 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/4dsphere.calc,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2001/05/03 19:02:03
|
||||||
|
* File existed as early as: 2001
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* parse args
|
||||||
|
*/
|
||||||
|
argc = argv();
|
||||||
|
if (argc != 25) {
|
||||||
|
fprintf(files(2), "usage: %s x0 y0 z0 w0 x1 y1 z1 w1 ... x5 y5 z5 w5\n",
|
||||||
|
argv(0));
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
x0 = eval(argv(1));
|
||||||
|
y0 = eval(argv(2));
|
||||||
|
z0 = eval(argv(3));
|
||||||
|
w0 = eval(argv(4));
|
||||||
|
x1 = eval(argv(5));
|
||||||
|
y1 = eval(argv(6));
|
||||||
|
z1 = eval(argv(7));
|
||||||
|
w1 = eval(argv(8));
|
||||||
|
x2 = eval(argv(9));
|
||||||
|
y2 = eval(argv(10));
|
||||||
|
z2 = eval(argv(11));
|
||||||
|
w2 = eval(argv(12));
|
||||||
|
x3 = eval(argv(13));
|
||||||
|
y3 = eval(argv(14));
|
||||||
|
z3 = eval(argv(15));
|
||||||
|
w3 = eval(argv(16));
|
||||||
|
x4 = eval(argv(17));
|
||||||
|
y4 = eval(argv(18));
|
||||||
|
z4 = eval(argv(19));
|
||||||
|
w4 = eval(argv(20));
|
||||||
|
x5 = eval(argv(21));
|
||||||
|
y5 = eval(argv(22));
|
||||||
|
z5 = eval(argv(23));
|
||||||
|
w5 = eval(argv(24));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* verbose output setup
|
||||||
|
*/
|
||||||
|
print "(":x0:",":y0:",":z0:",":w0:") ":;
|
||||||
|
print "(":x1:",":y1:",":z1:",":w1:") ":;
|
||||||
|
print "(":x2:",":y2:",":z2:",":w2:") ":;
|
||||||
|
print "(":x3:",":y3:",":z3:",":w3:") ":;
|
||||||
|
print "(":x4:",":y4:",":z4:",":w4:") ":;
|
||||||
|
print "(":x5:",":y5:",":z5:",":w5:") ":;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Given the 5 points:
|
||||||
|
*
|
||||||
|
* (x0,y1,z1,w1)
|
||||||
|
* (x1,y1,z1,w1)
|
||||||
|
* (x2,y2,z2,w2)
|
||||||
|
* (x3,y3,z3,w3)
|
||||||
|
* (x4,y4,z4,w4)
|
||||||
|
* (x5,y5,z5,w5)
|
||||||
|
*
|
||||||
|
* we can determine if they lie in the surface of 4D sphere in R^4 if the
|
||||||
|
* following matrix is 0:
|
||||||
|
*
|
||||||
|
* | x0^2+y0^2+z0^2+w0^2 x0 y0 z0 w0 1 |
|
||||||
|
* | x1^2+y1^2+z1^2+w1^2 x1 y1 z1 w1 1 |
|
||||||
|
* | x2^2+y2^2+z2^2+w2^2 x2 y2 z2 w2 1 | = 0
|
||||||
|
* | x3^2+y3^2+z3^2+w3^2 x3 y3 z3 w3 1 |
|
||||||
|
* | x4^2+y4^2+z4^2+w4^2 x4 y4 z4 w4 1 |
|
||||||
|
* | x5^2+y5^2+z5^2+w5^2 x5 y5 z5 w5 1 |
|
||||||
|
*/
|
||||||
|
if ((w0*(-x1*(-y2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
+y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+y5*(z4^2+y4^2+x4^2+w4^2) + (y4-y5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z2^2+y2^2+x2^2+w2^2)*(y4*z5+y3*(z4-z5) -y5*z4- (y4-y5)*z3) -
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4)) +y1*(-x2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
+x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (x4-x5)*(z3^2+y3^2+x3^2+w3^2)) -z3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) + (z2^2+y2^2+x2^2+w2^2)*(x4*z5+x3*(z4-z5)
|
||||||
|
-x5*z4- (x4-x5)*z3) - (z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4))
|
||||||
|
-x2*(-y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4))
|
||||||
|
+y2*(-x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4)) -z1*(-x2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (y4-y5)*(z3^2+y3^2+x3^2+w3^2)) +x3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) +y2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+x5*(z4^2+y4^2+x4^2+w4^2) + (x4-x5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-y3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) -
|
||||||
|
(x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2) + (x4*y5+x3*(y4-y5) -x5*y4-
|
||||||
|
(x4-x5)*y3)*(z2^2+y2^2+x2^2+w2^2)) -z2*(-x3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) +y3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) + (x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+ (z1^2+y1^2+x1^2+w1^2)*(x2*(y4*z5+y3*(z4-z5) -y5*z4-
|
||||||
|
(y4-y5)*z3) -x3*(y4*z5-y5*z4) -y2*(x4*z5+x3*(z4-z5) -x5*z4-
|
||||||
|
(x4-x5)*z3) +y3*(x4*z5-x5*z4) - (x4*y5-x5*y4)*z3+
|
||||||
|
(x4*y5+x3*(y4-y5) -x5*y4- (x4-x5)*y3)*z2) +
|
||||||
|
(z2^2+y2^2+x2^2+w2^2)*(x3*(y4*z5-y5*z4) -y3*(x4*z5-x5*z4) +
|
||||||
|
(x4*y5-x5*y4)*z3)) -x0*(-w1*(-y2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
+y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+y5*(z4^2+y4^2+x4^2+w4^2) + (y4-y5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z2^2+y2^2+x2^2+w2^2)*(y4*z5+y3*(z4-z5) -y5*z4- (y4-y5)*z3) -
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4)) -y1*(w2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
-w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (w4-w5)*(z3^2+y3^2+x3^2+w3^2)) +z3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (z2^2+y2^2+x2^2+w2^2)*(-w4*z5-w3*(z4-z5)
|
||||||
|
+w5*z4+ (w4-w5)*z3) - (z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5))
|
||||||
|
-w2*(-y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4))
|
||||||
|
-y2*(w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5)) +z1*(w2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (y4-y5)*(z3^2+y3^2+x3^2+w3^2)) -w3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) -y2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+w5*(z4^2+y4^2+x4^2+w4^2) + (w4-w5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+y3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) -
|
||||||
|
(w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2) + (-w4*y5-w3*(y4-y5) +w5*y4+
|
||||||
|
(w4-w5)*y3)*(z2^2+y2^2+x2^2+w2^2)) +z2*(w3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) -y3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+ (z1^2+y1^2+x1^2+w1^2)*(w2*(y4*z5+y3*(z4-z5) -y5*z4-
|
||||||
|
(y4-y5)*z3) -w3*(y4*z5-y5*z4) +y2*(-w4*z5-w3*(z4-z5)
|
||||||
|
+w5*z4+ (w4-w5)*z3) -y3*(w5*z4-w4*z5) + (w5*y4-w4*y5)*z3-
|
||||||
|
(-w4*y5-w3*(y4-y5) +w5*y4+ (w4-w5)*y3)*z2) +
|
||||||
|
(z2^2+y2^2+x2^2+w2^2)*(w3*(y4*z5-y5*z4) +y3*(w5*z4-w4*z5) -
|
||||||
|
(w5*y4-w4*y5)*z3)) +y0*(-w1*(-x2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
+x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+x5*(z4^2+y4^2+x4^2+w4^2) + (x4-x5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-z3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z2^2+y2^2+x2^2+w2^2)*(x4*z5+x3*(z4-z5) -x5*z4- (x4-x5)*z3) -
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4)) -x1*(w2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
-w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (w4-w5)*(z3^2+y3^2+x3^2+w3^2)) +z3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (z2^2+y2^2+x2^2+w2^2)*(-w4*z5-w3*(z4-z5)
|
||||||
|
+w5*z4+ (w4-w5)*z3) - (z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5))
|
||||||
|
-w2*(-x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4))
|
||||||
|
-x2*(w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5)) +z1*(w2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (x4-x5)*(z3^2+y3^2+x3^2+w3^2)) -w3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) -x2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+w5*(z4^2+y4^2+x4^2+w4^2) + (w4-w5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+x3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) -
|
||||||
|
(w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2) + (-w4*x5-w3*(x4-x5) +w5*x4+
|
||||||
|
(w4-w5)*x3)*(z2^2+y2^2+x2^2+w2^2)) +z2*(w3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) -x3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2)) +
|
||||||
|
(z1^2+y1^2+x1^2+w1^2)*(w2*(x4*z5+x3*(z4-z5) -x5*z4- (x4-x5)*z3)
|
||||||
|
-w3*(x4*z5-x5*z4) +x2*(-w4*z5-w3*(z4-z5) +w5*z4+ (w4-w5)*z3)
|
||||||
|
-x3*(w5*z4-w4*z5) + (w5*x4-w4*x5)*z3- (-w4*x5-w3*(x4-x5) +w5*x4+
|
||||||
|
(w4-w5)*x3)*z2) + (z2^2+y2^2+x2^2+w2^2)*(w3*(x4*z5-x5*z4)
|
||||||
|
+x3*(w5*z4-w4*z5) - (w5*x4-w4*x5)*z3))
|
||||||
|
-w1*(-x2*(-y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4))
|
||||||
|
+y2*(-x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4)) -z2*(-x3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) +y3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) + (x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+ (z2^2+y2^2+x2^2+w2^2)*(x3*(y4*z5-y5*z4)
|
||||||
|
-y3*(x4*z5-x5*z4) + (x4*y5-x5*y4)*z3))
|
||||||
|
+x1*(-w2*(-y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4))
|
||||||
|
-y2*(w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5)) +z2*(w3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) -y3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+ (z2^2+y2^2+x2^2+w2^2)*(w3*(y4*z5-y5*z4)
|
||||||
|
+y3*(w5*z4-w4*z5) - (w5*y4-w4*y5)*z3))
|
||||||
|
-y1*(-w2*(-x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4))
|
||||||
|
-x2*(w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5)) +z2*(w3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) -x3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+ (z2^2+y2^2+x2^2+w2^2)*(w3*(x4*z5-x5*z4) +x3*(w5*z4-w4*z5)
|
||||||
|
- (w5*x4-w4*x5)*z3)) -z0*(-w1*(-x2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (y4-y5)*(z3^2+y3^2+x3^2+w3^2)) +x3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) +y2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+x5*(z4^2+y4^2+x4^2+w4^2) + (x4-x5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-y3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) -
|
||||||
|
(x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2) + (x4*y5+x3*(y4-y5) -x5*y4-
|
||||||
|
(x4-x5)*y3)*(z2^2+y2^2+x2^2+w2^2)) -x1*(w2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (y4-y5)*(z3^2+y3^2+x3^2+w3^2)) -w3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) -y2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+w5*(z4^2+y4^2+x4^2+w4^2) + (w4-w5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+y3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) -
|
||||||
|
(w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2) + (-w4*y5-w3*(y4-y5) +w5*y4+
|
||||||
|
(w4-w5)*y3)*(z2^2+y2^2+x2^2+w2^2)) -w2*(-x3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) +y3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) + (x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-x2*(w3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-y3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2)) +y1*(w2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (x4-x5)*(z3^2+y3^2+x3^2+w3^2)) -w3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) -x2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (w4-w5)*(z3^2+y3^2+x3^2+w3^2)) +x3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) - (w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2)
|
||||||
|
+ (-w4*x5-w3*(x4-x5) +w5*x4+ (w4-w5)*x3)*(z2^2+y2^2+x2^2+w2^2))
|
||||||
|
+y2*(w3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-x3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2)) + (w3*(x4*y5-x5*y4) +x3*(w5*y4-w4*y5)
|
||||||
|
- (w5*x4-w4*x5)*y3)*(z2^2+y2^2+x2^2+w2^2) + (w2*(x4*y5+x3*(y4-y5)
|
||||||
|
-x5*y4- (x4-x5)*y3) -w3*(x4*y5-x5*y4) +x2*(-w4*y5-w3*(y4-y5)
|
||||||
|
+w5*y4+ (w4-w5)*y3) -x3*(w5*y4-w4*y5) + (w5*x4-w4*x5)*y3-
|
||||||
|
(-w4*x5-w3*(x4-x5) +w5*x4+ (w4-w5)*x3)*y2)*(z1^2+y1^2+x1^2+w1^2))
|
||||||
|
+z1*(-w2*(-x3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+y3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2)) -x2*(w3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) -y3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+y2*(w3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-x3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2)) + (w3*(x4*y5-x5*y4)
|
||||||
|
+x3*(w5*y4-w4*y5) - (w5*x4-w4*x5)*y3)*(z2^2+y2^2+x2^2+w2^2)) +
|
||||||
|
(z0^2+y0^2+x0^2+w0^2)*(-w1*(x2*(y4*z5+y3*(z4-z5) -y5*z4- (y4-y5)*z3)
|
||||||
|
-x3*(y4*z5-y5*z4) -y2*(x4*z5+x3*(z4-z5) -x5*z4- (x4-x5)*z3)
|
||||||
|
+y3*(x4*z5-x5*z4) - (x4*y5-x5*y4)*z3+ (x4*y5+x3*(y4-y5) -x5*y4-
|
||||||
|
(x4-x5)*y3)*z2) +x1*(w2*(y4*z5+y3*(z4-z5) -y5*z4- (y4-y5)*z3)
|
||||||
|
-w3*(y4*z5-y5*z4) +y2*(-w4*z5-w3*(z4-z5) +w5*z4+ (w4-w5)*z3)
|
||||||
|
-y3*(w5*z4-w4*z5) + (w5*y4-w4*y5)*z3- (-w4*y5-w3*(y4-y5) +w5*y4+
|
||||||
|
(w4-w5)*y3)*z2) -w2*(x3*(y4*z5-y5*z4) -y3*(x4*z5-x5*z4) +
|
||||||
|
(x4*y5-x5*y4)*z3) +x2*(w3*(y4*z5-y5*z4) +y3*(w5*z4-w4*z5) -
|
||||||
|
(w5*y4-w4*y5)*z3) -y1*(w2*(x4*z5+x3*(z4-z5) -x5*z4- (x4-x5)*z3)
|
||||||
|
-w3*(x4*z5-x5*z4) +x2*(-w4*z5-w3*(z4-z5) +w5*z4+ (w4-w5)*z3)
|
||||||
|
-x3*(w5*z4-w4*z5) + (w5*x4-w4*x5)*z3- (-w4*x5-w3*(x4-x5) +w5*x4+
|
||||||
|
(w4-w5)*x3)*z2) -y2*(w3*(x4*z5-x5*z4) +x3*(w5*z4-w4*z5) -
|
||||||
|
(w5*x4-w4*x5)*z3) + (w3*(x4*y5-x5*y4) +x3*(w5*y4-w4*y5) -
|
||||||
|
(w5*x4-w4*x5)*y3)*z2+ (w2*(x4*y5+x3*(y4-y5) -x5*y4- (x4-x5)*y3)
|
||||||
|
-w3*(x4*y5-x5*y4) +x2*(-w4*y5-w3*(y4-y5) +w5*y4+ (w4-w5)*y3)
|
||||||
|
-x3*(w5*y4-w4*y5) + (w5*x4-w4*x5)*y3- (-w4*x5-w3*(x4-x5) +w5*x4+
|
||||||
|
(w4-w5)*x3)*y2)*z1) - (z1^2+y1^2+x1^2+w1^2)*(-w2*(x3*(y4*z5-y5*z4)
|
||||||
|
-y3*(x4*z5-x5*z4) + (x4*y5-x5*y4)*z3) +x2*(w3*(y4*z5-y5*z4)
|
||||||
|
+y3*(w5*z4-w4*z5) - (w5*y4-w4*y5)*z3) -y2*(w3*(x4*z5-x5*z4)
|
||||||
|
+x3*(w5*z4-w4*z5) - (w5*x4-w4*x5)*z3) + (w3*(x4*y5-x5*y4)
|
||||||
|
+x3*(w5*y4-w4*y5) - (w5*x4-w4*x5)*y3)*z2)) == 0) {
|
||||||
|
print "are in the surface of a 4D sphere";
|
||||||
|
} else {
|
||||||
|
print "are NOT on a 4D sphere surface";
|
||||||
|
}
|
282
cscript/Makefile
282
cscript/Makefile
@@ -17,15 +17,15 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.3 $
|
# @(#) $Revision: 29.23 $
|
||||||
# @(#) $Id: Makefile,v 29.3 1999/12/14 19:30:19 chongo Exp $
|
# @(#) $Id: Makefile,v 29.23 2003/01/14 01:58:18 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/Makefile,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/Makefile,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1999/11/29 11:10:26
|
# Under source code control: 1999/11/29 11:10:26
|
||||||
# File existed as early as: 1999
|
# File existed as early as: 1999
|
||||||
#
|
#
|
||||||
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
#
|
#
|
||||||
# calculator by David I. Bell with help/mods from others
|
# calculator by David I. Bell with help/mods from others
|
||||||
# Makefile by Landon Curt Noll
|
# Makefile by Landon Curt Noll
|
||||||
@@ -36,15 +36,121 @@
|
|||||||
SHELL= /bin/sh
|
SHELL= /bin/sh
|
||||||
MAKE_FILE = Makefile
|
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.
|
||||||
|
####
|
||||||
|
|
||||||
|
# Where the system include (.h) files are kept
|
||||||
#
|
#
|
||||||
BINDIR= /usr/local/bin
|
# For DJGPP, select:
|
||||||
#BINDIR= /usr/bin
|
|
||||||
#BINDIR= /usr/contrib/bin
|
|
||||||
#
|
#
|
||||||
|
# INCDIR= /dev/env/DJDIR/include
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# INCDIR= /usr/include
|
||||||
|
#
|
||||||
|
|
||||||
|
#INCDIR= /usr/local/include
|
||||||
|
#INCDIR= /dev/env/DJDIR/include
|
||||||
|
INCDIR= /usr/include
|
||||||
|
|
||||||
|
# where to install calc realted things
|
||||||
|
#
|
||||||
|
# ${BINDIR} where to install calc binary files
|
||||||
|
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||||
|
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# For DJGPP, select:
|
||||||
|
#
|
||||||
|
# BINDIR= /dev/env/DJDIR/bin
|
||||||
|
# LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
# CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
#BINDIR= /usr/local/bin
|
||||||
|
#BINDIR= /dev/env/DJDIR/bin
|
||||||
|
BINDIR= /usr/bin
|
||||||
|
|
||||||
|
#LIBDIR= /usr/local/lib
|
||||||
|
#LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
LIBDIR= /usr/lib
|
||||||
|
|
||||||
|
#CALC_SHAREDIR= /usr/local/lib/calc
|
||||||
|
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
CALC_SHAREDIR= /usr/share/calc
|
||||||
|
|
||||||
|
# By default, these values are based CALC_SHAREDIR, INCDIR, BINDIR
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# ${HELPDIR} where the help directory is installed
|
||||||
|
# ${CALC_INCDIR} where the calc include files are installed
|
||||||
|
# ${CUSTOMCALDIR} where custom *.cal files are installed
|
||||||
|
# ${CUSTOMHELPDIR} where custom help files are installed
|
||||||
|
# ${CUSTOMINCPDIR} where custom .h files are installed
|
||||||
|
# ${SCRIPTDIR} where calc shell scripts are installed
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
# CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
# CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
# CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
# CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
|
# SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
#
|
||||||
|
HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
SCRIPTDIR= ${BINDIR}/cscript
|
SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
|
||||||
|
# T - top level directory under which calc will be installed
|
||||||
|
#
|
||||||
|
# The calc install is performed under $T, the calc build is
|
||||||
|
# performed under /. The purpose for $T is to allow someone
|
||||||
|
# to install calc somewhere other than into the system area.
|
||||||
|
#
|
||||||
|
# For example, if:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
# and if:
|
||||||
|
#
|
||||||
|
# T= /var/tmp/testing
|
||||||
|
#
|
||||||
|
# Then the installation locations will be:
|
||||||
|
#
|
||||||
|
# calc binary files: /var/tmp/testing/usr/bin
|
||||||
|
# calc link library: /var/tmp/testing/usr/lib
|
||||||
|
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||||
|
# ... etc ... /var/tmp/testing/...
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
# calc is installed under $T, as if one had to chroot under
|
||||||
|
# $T for calc to operate.
|
||||||
|
#
|
||||||
|
# If in doubt, use T=
|
||||||
|
#
|
||||||
|
T=
|
||||||
|
|
||||||
# Makefile debug
|
# Makefile debug
|
||||||
#
|
#
|
||||||
# Q=@ do not echo internal makefile actions (quiet mode)
|
# Q=@ do not echo internal makefile actions (quiet mode)
|
||||||
@@ -59,13 +165,14 @@ CHMOD= chmod
|
|||||||
SED= sed
|
SED= sed
|
||||||
SORT= sort
|
SORT= sort
|
||||||
FMT= fmt
|
FMT= fmt
|
||||||
|
CMP= cmp
|
||||||
|
|
||||||
# The ${SCRIPT} list is the list of calc shell script files (without the .calc
|
# The ${SCRIPT} list is the list of calc shell script files (without the .calc
|
||||||
# extension) which will be installed.
|
# extension) which will be installed.
|
||||||
#
|
#
|
||||||
# The ${SCRIPT_SRC} is built from ${SCRIPT} and has the .calc extensions.
|
# The ${SCRIPT_SRC} is built from ${SCRIPT} and has the .calc extensions.
|
||||||
#
|
#
|
||||||
# This list is prodiced by the detaillist rule when no WARNINGS are detected.
|
# This list is produced by the detaillist rule when no WARNINGS are detected.
|
||||||
# To add a script:
|
# To add a script:
|
||||||
#
|
#
|
||||||
# 1) Name the file with a .calc filename extension
|
# 1) Name the file with a .calc filename extension
|
||||||
@@ -76,26 +183,36 @@ FMT= fmt
|
|||||||
#
|
#
|
||||||
# make detaillist
|
# make detaillist
|
||||||
#
|
#
|
||||||
SCRIPT= mersenne piforever plus simple
|
SCRIPT= 4dsphere fproduct mersenne piforever plus powerterm \
|
||||||
|
simple square
|
||||||
|
|
||||||
SCRIPT_SRC= mersenne.calc piforever.calc plus.calc simple.calc
|
SCRIPT_SRC= 4dsphere.calc fproduct.calc mersenne.calc \
|
||||||
|
piforever.calc plus.calc powerterm.calc simple.calc square.calc
|
||||||
|
|
||||||
# These files are found (but not built) in the distribution
|
# These files are found (but not built) in the distribution
|
||||||
#
|
#
|
||||||
DISTLIST= ${SCRIPT_SRC} ${MAKE_FILE}
|
DISTLIST= ${SCRIPT_SRC} ${MAKE_FILE} README
|
||||||
|
|
||||||
# These files are used to make (but not built) a calc .a library
|
# These files are used to make (but not build) a calc .a library
|
||||||
#
|
#
|
||||||
CALCLIBLIST=
|
CALCLIBLIST=
|
||||||
|
|
||||||
|
# complete list of targets
|
||||||
|
#
|
||||||
|
# NOTE: This list MUST be co-ordinated with the ${CSCRIPT_TARGETS} variable
|
||||||
|
# in the upper level ../Makefile
|
||||||
|
#
|
||||||
|
CSCRIPT_TARGETS= ${SCRIPT}
|
||||||
|
TARGETS= ${CSCRIPT_TARGETS}
|
||||||
|
|
||||||
# The reason for this Makefile
|
# The reason for this Makefile
|
||||||
#
|
#
|
||||||
all: ${SCRIPT} ${SCRIPT_SRC} .all
|
all: ${TARGETS} .all
|
||||||
|
|
||||||
# used by the upper level Makefile to determine of we have done all
|
# used by the upper level Makefile to determine if we have done all
|
||||||
#
|
#
|
||||||
# NOTE: Due to bogus shells found on one common system we must have
|
# NOTE: Due to bogus shells found on one common system we must have
|
||||||
# an non-emoty else clause for every if condition. *sigh*
|
# a non-empty else clause for every if condition. *sigh*
|
||||||
#
|
#
|
||||||
.all:
|
.all:
|
||||||
rm -f .all
|
rm -f .all
|
||||||
@@ -112,9 +229,11 @@ all: ${SCRIPT} ${SCRIPT_SRC} .all
|
|||||||
##
|
##
|
||||||
|
|
||||||
distlist: ${DISTLIST}
|
distlist: ${DISTLIST}
|
||||||
${Q}for i in ${DISTLIST}; do \
|
${Q}for i in ${DISTLIST} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo cscript/$$i; \
|
echo cscript/$$i; \
|
||||||
done | ${SORT}
|
fi; \
|
||||||
|
done | LANG=C ${SORT}
|
||||||
|
|
||||||
distdir:
|
distdir:
|
||||||
${Q}echo cscript
|
${Q}echo cscript
|
||||||
@@ -125,24 +244,28 @@ calcliblist:
|
|||||||
#
|
#
|
||||||
detaillist:
|
detaillist:
|
||||||
${Q}-(echo "xxxxxxx"; \
|
${Q}-(echo "xxxxxxx"; \
|
||||||
for i in ${SCRIPT}; do \
|
for i in ${SCRIPT} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
if [ ! -f RCS/$$i.calc,v ]; then \
|
if [ ! -f RCS/$$i.calc,v ]; then \
|
||||||
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
||||||
else \
|
else \
|
||||||
echo $$i; \
|
echo $$i; \
|
||||||
fi; \
|
fi; \
|
||||||
done | ${SORT}) | ${FMT} -70 | \
|
fi; \
|
||||||
|
done | LANG=C ${SORT}) | ${FMT} -70 | \
|
||||||
${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \
|
${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \
|
||||||
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
||||||
${Q}echo
|
${Q}echo
|
||||||
${Q}-(echo "xxxxxxxxxxx"; \
|
${Q}-(echo "xxxxxxxxxxx"; \
|
||||||
for i in ${SCRIPT}; do \
|
for i in ${SCRIPT} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
if [ ! -f RCS/$$i.calc,v ]; then \
|
if [ ! -f RCS/$$i.calc,v ]; then \
|
||||||
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
||||||
else \
|
else \
|
||||||
echo $$i.calc; \
|
echo $$i.calc; \
|
||||||
fi; \
|
fi; \
|
||||||
done | ${SORT}) | ${FMT} -70 | \
|
fi; \
|
||||||
|
done | LANG=C ${SORT}) | ${FMT} -70 | \
|
||||||
${SED} -e '1s/xxxxxxxxxxx/SCRIPT_SRC=/' -e '2,$$s/^/ /' \
|
${SED} -e '1s/xxxxxxxxxxx/SCRIPT_SRC=/' -e '2,$$s/^/ /' \
|
||||||
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
||||||
|
|
||||||
@@ -170,11 +293,13 @@ depend:
|
|||||||
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
|
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
|
||||||
makedep.out
|
makedep.out
|
||||||
${Q}echo "" >> makedep.out
|
${Q}echo "" >> makedep.out
|
||||||
${Q}for i in ${SCRIPT}; do \
|
${Q}for i in ${SCRIPT} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo "$$i: $$i.calc"; \
|
echo "$$i: $$i.calc"; \
|
||||||
echo ' rm -f $$@'; \
|
echo ' @rm -f $$@'; \
|
||||||
echo ' $${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \
|
echo ' @$${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \
|
||||||
echo ' $${CHMOD} +x $$@'; \
|
echo ' @$${CHMOD} +x $$@'; \
|
||||||
|
fi; \
|
||||||
done >> makedep.out
|
done >> makedep.out
|
||||||
${Q}echo sample dependency list formed
|
${Q}echo sample dependency list formed
|
||||||
${Q}echo forming new cscript/Makefile
|
${Q}echo forming new cscript/Makefile
|
||||||
@@ -184,7 +309,7 @@ depend:
|
|||||||
${Q}echo "" >> Makefile
|
${Q}echo "" >> Makefile
|
||||||
${Q}${SED} -n '3,$$p' makedep.out >> Makefile
|
${Q}${SED} -n '3,$$p' makedep.out >> Makefile
|
||||||
-${Q}rm -f makedep.out
|
-${Q}rm -f makedep.out
|
||||||
-${Q}if cmp -s Makefile.bak Makefile; then \
|
-${Q}if ${CMP} -s Makefile.bak Makefile; then \
|
||||||
echo 'sample Makefile was already up to date'; \
|
echo 'sample Makefile was already up to date'; \
|
||||||
mv -f Makefile.bak Makefile; \
|
mv -f Makefile.bak Makefile; \
|
||||||
else \
|
else \
|
||||||
@@ -199,49 +324,102 @@ depend:
|
|||||||
fi; \
|
fi; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# rpm rules
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
echo_inst_files:
|
||||||
|
${Q}for i in ${SCRIPT} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
|
echo __file__ ${SCRIPTDIR}/$$i; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# Utility rules
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
-rm -f makedep.out
|
-rm -f makedep.out
|
||||||
|
|
||||||
clobber:
|
clobber:
|
||||||
-rm -f ${SCRIPT}
|
-rm -f ${TARGETS}
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
-${Q}if [ ! -d ${BINDIR} ]; then \
|
-${Q}if [ ! -d $T${BINDIR} ]; then \
|
||||||
echo mkdir ${BINDIR}; \
|
echo mkdir $T${BINDIR}; \
|
||||||
mkdir ${BINDIR}; \
|
mkdir $T${BINDIR}; \
|
||||||
|
if [ ! -d "$T${BINDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${BINDIR}"; \
|
||||||
|
mkdir -p "$T${BINDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${BINDIR}; \
|
||||||
|
${CHMOD} 0755 $T${BINDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
-${Q}if [ ! -d ${SCRIPTDIR} ]; then \
|
-${Q}if [ ! -d $T${SCRIPTDIR} ]; then \
|
||||||
echo mkdir ${SCRIPTDIR}; \
|
echo mkdir $T${SCRIPTDIR}; \
|
||||||
mkdir ${SCRIPTDIR}; \
|
mkdir $T${SCRIPTDIR}; \
|
||||||
|
if [ ! -d "$T${SCRIPTDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${SCRIPTDIR}"; \
|
||||||
|
mkdir -p "$T${SCRIPTDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${SCRIPTDIR}; \
|
||||||
|
${CHMOD} 0755 $T${SCRIPTDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
${Q}for i in ${SCRIPT}; do \
|
${Q}for i in ${SCRIPT} /dev/null; do \
|
||||||
echo rm -f ${SCRIPTDIR}/$$i; \
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
rm -f ${SCRIPTDIR}/$$i; \
|
continue; \
|
||||||
echo cp $$i ${SCRIPTDIR}; \
|
fi; \
|
||||||
cp $$i ${SCRIPTDIR}; \
|
if ${CMP} -s $$i $T${SCRIPTDIR}/$$i; then \
|
||||||
echo ${CHMOD} 0555 ${SCRIPTDIR}/$$i; \
|
true; \
|
||||||
${CHMOD} 0555 ${SCRIPTDIR}/$$i; \
|
else \
|
||||||
|
rm -f $T${SCRIPTDIR}/$$i.new; \
|
||||||
|
cp -f $$i $T${SCRIPTDIR}/$$i.new; \
|
||||||
|
${CHMOD} 0555 $T${SCRIPTDIR}/$$i.new; \
|
||||||
|
mv -f $T${SCRIPTDIR}/$$i.new $T${SCRIPTDIR}/$$i; \
|
||||||
|
echo "installed $T${SCRIPTDIR}/$$i"; \
|
||||||
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
4dsphere: 4dsphere.calc
|
||||||
|
@rm -f $@
|
||||||
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
|
@${CHMOD} +x $@
|
||||||
|
fproduct: fproduct.calc
|
||||||
|
@rm -f $@
|
||||||
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
|
@${CHMOD} +x $@
|
||||||
mersenne: mersenne.calc
|
mersenne: mersenne.calc
|
||||||
rm -f $@
|
@rm -f $@
|
||||||
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
${CHMOD} +x $@
|
@${CHMOD} +x $@
|
||||||
piforever: piforever.calc
|
piforever: piforever.calc
|
||||||
rm -f $@
|
@rm -f $@
|
||||||
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
${CHMOD} +x $@
|
@${CHMOD} +x $@
|
||||||
plus: plus.calc
|
plus: plus.calc
|
||||||
rm -f $@
|
@rm -f $@
|
||||||
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
${CHMOD} +x $@
|
@${CHMOD} +x $@
|
||||||
|
powerterm: powerterm.calc
|
||||||
|
@rm -f $@
|
||||||
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
|
@${CHMOD} +x $@
|
||||||
simple: simple.calc
|
simple: simple.calc
|
||||||
rm -f $@
|
@rm -f $@
|
||||||
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
${CHMOD} +x $@
|
@${CHMOD} +x $@
|
||||||
|
square: square.calc
|
||||||
|
@rm -f $@
|
||||||
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
|
@${CHMOD} +x $@
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user