Compare commits

..

32 Commits

Author SHA1 Message Date
Landon Curt Noll
8c5e9e62fa Release calc version 2.11.9.2 2017-05-21 15:38:44 -07:00
Landon Curt Noll
29e956819c Release calc version 2.11.9.1 2017-05-21 15:38:44 -07:00
Landon Curt Noll
66c3d26611 Release calc version 2.11.9 2017-05-21 15:38:44 -07:00
Landon Curt Noll
b4952bd44f Release calc version 2.11.8.1 2017-05-21 15:38:44 -07:00
Landon Curt Noll
0d06d90751 Release calc version 2.11.8 2017-05-21 15:38:43 -07:00
Landon Curt Noll
e1a3dfda0b Release calc version 2.11.7 2017-05-21 15:38:43 -07:00
Landon Curt Noll
8db4e7af47 Release calc version 2.11.6.3 2017-05-21 15:38:43 -07:00
Landon Curt Noll
bb5c624382 Release calc version 2.11.6.1 2017-05-21 15:38:43 -07:00
Landon Curt Noll
8aedcf801a Release calc version 2.11.6.2 2017-05-21 15:38:43 -07:00
Landon Curt Noll
b60eec99bb Release calc version 2.11.6 2017-05-21 15:38:42 -07:00
Landon Curt Noll
383290a844 Release calc version 2.11.5.8 2017-05-21 15:38:42 -07:00
Landon Curt Noll
7e40db44e3 Release calc version 2.11.5.7 2017-05-21 15:38:42 -07:00
Landon Curt Noll
a57ee19ca5 Release calc version 2.11.5.6 2017-05-21 15:38:42 -07:00
Landon Curt Noll
a6e226fa80 Release calc version 2.11.5.5 2017-05-21 15:38:42 -07:00
Landon Curt Noll
86e0f98c8f Release calc version 2.11.5t4.5 2017-05-21 15:38:41 -07:00
Landon Curt Noll
e4dcbf7ecf Release calc version 2.11.5t4.4 2017-05-21 15:38:41 -07:00
Landon Curt Noll
10c0bd2d95 Release calc version 2.11.5t4.3 2017-05-21 15:38:41 -07:00
Landon Curt Noll
ad44f1e3ab Release calc version 2.11.5t4.2 2017-05-21 15:38:41 -07:00
Landon Curt Noll
fd436d7c15 Release calc version 2.11.5t4.1 2017-05-21 15:38:40 -07:00
Landon Curt Noll
d2cb9c81d5 Release calc version 2.11.5t4 2017-05-21 15:38:40 -07:00
Landon Curt Noll
a0aba073a6 Release calc version 2.11.5t3 2017-05-21 15:38:40 -07:00
Landon Curt Noll
59837e385c Release calc version 2.11.5t2.1 2017-05-21 15:38:40 -07:00
Landon Curt Noll
bea726fc16 Release calc version 2.11.5t2 2017-05-21 15:38:40 -07:00
Landon Curt Noll
fc0a3dd183 Release calc version 2.11.5t1.1 2017-05-21 15:38:39 -07:00
Landon Curt Noll
63d9b22067 Release calc version 2.11.5t1.0 2017-05-21 15:38:39 -07:00
Landon Curt Noll
fc85ac3791 Release calc version 2.11.5t0 2017-05-21 15:38:39 -07:00
Landon Curt Noll
3d55811205 Release calc version 2.11.4t2 2017-05-21 15:38:39 -07:00
Landon Curt Noll
296aa50ac7 Release calc version 2.11.2t1 2017-05-21 15:38:38 -07:00
Landon Curt Noll
5e098d2adf Release calc version 2.11.4t1 2017-05-21 15:38:38 -07:00
Landon Curt Noll
ae2a752314 Release calc version 2.11.3t0 2017-05-21 15:38:38 -07:00
Landon Curt Noll
61dd47526f Release calc version 2.11.2t1.0 2017-05-21 15:38:38 -07:00
Landon Curt Noll
417ffb6ab5 Release calc version 2.11.1t2.1 2017-05-21 15:38:37 -07:00
555 changed files with 17024 additions and 6089 deletions

155
BUGS
View File

@@ -20,20 +20,28 @@ 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:
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:
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,
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:
@@ -53,17 +61,8 @@ When you send your report, please include the following information:
Stack traces from core dumps are useful to send as well.
=-=
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.
Fell free to use the above address to send in big fixes (in the form
of a context diff patch).
=-=
@@ -73,14 +72,104 @@ Known bugs:
us know! See the above for details on how to report and were to
EMail your bug reports and hopefully patches to fix them.
=-=
Problems with known work-a-rounds:
* The gcc as shipped with Redhat 7 perhaps other Linux distributions
has a bug causes calc to dump core on startup when calc is:
compiled optimized (-O, -O1, -O2 or -O3)
AND
compiled with debugging (-g or -g3)
AND
when calc is compiled with readline (see USE_READLINE,
READLINE_LIB and READLINE_INCLUDE in the Makefile)
On Redhat, the gcc -v which has this problem is:
gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-85)
there may be other gcc versions that also suffer this fate.
The readlines associated with problem are:
readline-4.1-5
readline2.2.1-2.2.1-2
readline-devel-4.1-5
One work-a-round is to compile calc WITHOUT readline. In the
Makefile be sure that:
USE_READLINE=
READLINE_LIB=
READLINE_INCLUDE=
i.e., these Makefile vars are empty.
If you must use readline, then an alternate work-a-round is to
change the DEBUG Makefile variable to either:
compile for speed: -O3 (or -O2 if you do not have -O3)
compile to debug: -g3 (or -g if you do not have -g3)
but not both.
See RH bug #57889 for details:
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=57889
* There is a bug in gcc-2.95 that causes calc, when compiled with -O2,
to fail the regression test. The work-a-round is to compile with -O
or to use gcc-2.96 or later.
This bug has been observed on the Sparc and the PowerPC machine.
On the PowerPC with gcc-2.95 when compiled with -O2, the following
patch seems to help:
*** zfunc.c.orig Fri Feb 23 18:18:39 2001
--- zfunc.c Fri Feb 23 18:39:33 2001
***************
*** 1481,1487 ****
{
HALF *a, *A, *b, *a0, u;
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
! FULL d, e, f, g, h, s, t, x, topbit;
int remsign;
BOOL up, onebit;
ZVALUE sqrt;
--- 1481,1488 ----
{
HALF *a, *A, *b, *a0, u;
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
! volatile FULL d;
! FULL e, f, g, h, s, t, x, topbit;
int remsign;
BOOL up, onebit;
ZVALUE sqrt;
*** zmath.c 2000/06/07 14:02:13 29.2
--- zmath.c 2001/03/13 19:47:03
***************
*** 1608,1614 ****
void
zbitvalue(long n, ZVALUE *res)
{
! ZVALUE z;
if (n < 0) n = 0;
z.sign = 0;
--- 1608,1614 ----
void
zbitvalue(long n, ZVALUE *res)
{
! volatile ZVALUE z;
if (n < 0) n = 0;
z.sign = 0;
* Solaris cc somtimes barfs while compiling zrand.c. In particular, calc
barfs on on the SVAL macro. The work-a-round is to use the Solaric cc
Makefile set sets -DFORCE_STDC. I.e,:
@@ -161,6 +250,28 @@ Problems with known work-a-rounds:
or performance. The work-a-round is to ignore these warnings
under BSDI.
* The chi.cal resource file does not work well with odd degrees
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.
## Copyright (C) 1999 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
@@ -177,12 +288,12 @@ Problems with known work-a-rounds:
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.4 $
## @(#) $Id: BUGS,v 29.4 1999/12/15 09:13:29 chongo Exp $
## @(#) $Revision: 29.17 $
## @(#) $Id: BUGS,v 29.17 2001/12/31 22:12:35 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
##
## Under source code control: 1994/03/18 14:06:13
## File existed as early as: 1994
##
## chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
## Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/

1382
CHANGES

File diff suppressed because it is too large Load Diff

65
COPYING
View File

@@ -12,8 +12,8 @@ This file is Copyrighted
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
# @(#) $Revision: 29.1 $
# @(#) $Id: COPYING,v 29.1 1999/12/14 09:15:29 chongo Exp $
# @(#) $Revision: 29.7 $
# @(#) $Id: COPYING,v 29.7 2003/02/26 16:54:59 chongo Exp $
# @(#) $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:
Web: http://reality.sgi.com/chongo/tech/comp/calc/index.html
http://www.isthe.com/chongo/tech/comp/calc/index.html
Web: http://www.isthe.com/chongo/tech/comp/calc/email.html
EMail: calc-tester at postofc dot corp dot sgi dot com
calc-tester at isthe dot com
To join the low volume calc mailing list. Send a EMail message to:
[[ 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
longer functions.
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:
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
the following Copyrights:
the following GNU Lesser General Public License Copyrights:
Copyright (C) year David I. Bell
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 Ernest Bowen and Landon Curt Noll
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
License. The source files not covered are:
These files are not covered under one of the Copyrights listed above:
shs1.c shs1.h shs.c shs.h
md5.c md5.h lib/qtime.cal COPYING
COPYING-LGPL
shs1.c shs1.h shs.c shs.h
md5.c md5.h COPYING COPYING-LGPL
cal/qtime.cal
The file COPYING-LGPL, which contains a copy of the version 2.1
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
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

View File

@@ -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
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.
and use these RPMs:
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.
* calc*.i686.rpm
- all that is needed if you just want to use calc
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.
* calc-devel-*.i686.rpm
- calc *.h header and *.a lib files for use in other programs
Set TOPDIR to be the place under which help files, calc,
include files and calc libs are to be installed. As shipped
the Makefile assumes a TOPDIR of /usr/local/lib.
* calc.*.src.rpm
- calc source in RPM package form
Set BINDIR to the place where calc is installed. As shipped
the Makefile assumes a BINDIR /usr/local/bin.
The following 4 steps apply to calc source tree that comes from either:
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.
2) build calc:
2) build calc:
make all
@@ -36,13 +132,14 @@ Installing calc in 4 easy steps:
you may find. See the BUGS file if you find any compiler
warning or errors.
3) test calc:
3) test calc:
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
@@ -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.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.1 $
## @(#) $Id: HOWTO.INSTALL,v 29.1 1999/12/14 09:15:29 chongo Exp $
## @(#) $Revision: 29.7 $
## @(#) $Id: HOWTO.INSTALL,v 29.7 2003/04/15 03:38:34 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/HOWTO.INSTALL,v $
##
## Under source code control: 1999/09/27 20:48:44
## File existed as early as: 1999
##
## chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
## Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/

32
LIBRARY
View File

@@ -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
obscure internal routines won't change or disappear in future releases!
When calc is installed, all of the include files needed to build
libcalc.a along with the link library itself are installed into ${LIBDIR}.
When calc is installed, all of libraries 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:
-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
@@ -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.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.1 $
## @(#) $Id: LIBRARY,v 29.1 1999/12/14 09:15:29 chongo Exp $
## @(#) $Revision: 29.5 $
## @(#) $Id: LIBRARY,v 29.5 2001/06/08 22:57:35 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/LIBRARY,v $
##
## Under source code control: 1993/07/30 19:44:49
## File existed as early as: 1993
##
## chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
## Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/

1905
Makefile

File diff suppressed because it is too large Load Diff

42
README
View File

@@ -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:
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.
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:
@@ -88,17 +95,28 @@ Your message body (not the subject) should consist of:
where ``address'' is your EMail address and ``your_full_name'' is
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.
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:
http://reality.sgi.com/chongo/tech/comp/calc/
http://www.isthe.com/chongo/tech/comp/calc/
## 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.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.1 $
## @(#) $Id: README,v 29.1 1999/12/14 09:15:29 chongo Exp $
## @(#) $Revision: 29.3 $
## @(#) $Id: README,v 29.3 2001/06/01 11:26:53 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README,v $
##
## Under source code control: 1995/10/25 05:27:59
## File existed as early as: 1995
##
## chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
## Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/

166
README.WINDOWS Normal file
View File

@@ -0,0 +1,166 @@
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
LONGLONG_BITS= 64
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 calcexe.exe which is the command line interface.
He recommends that you generate by hand all of the header files generated
by the make file:
align32.h args.h calcerr.h conf.h endian_calc.h
fposval.h have_const.h have_fpos.h have_fpos_pos.h have_malloc.h
have_memmv.h have_newstr.h have_offscl.h have_posscl.h
have_stdlib.h have_string.h have_times.h have_uid_t.h
have_unistd.h longbits.h longlong.h terminal.h
have_ustat.h have_getsid.h have_getpgid.h
have_gettime.h have_getprid.h have_urandom.h have_rusage.h
have_strdup.h
You will find generated versions of these files located in the win32
sub-directory. These files may be appropriate for your Cygwin building
needs. Just copy the win32/*.[ch] files up into the top level calc
source directory, edited (if needed) and build using the Cygwin GCC
compiler.
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.8 $
## @(#) $Id: README.WINDOWS,v 29.8 2002/03/14 00:28:28 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/

18
addop.c
View File

@@ -19,14 +19,14 @@
* 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: addop.c,v 29.1 1999/12/14 09:15:29 chongo Exp $
* @(#) $Revision: 29.4 $
* @(#) $Id: addop.c,v 29.4 2004/02/23 07:25:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
*
* Under source code control: 1990/02/15 01:48:10
* 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 */
static long maxopcodes; /* number of opcodes available */
static unsigned long maxopcodes;/* number of opcodes available */
static long newindex; /* index of new function */
static char *newname; /* name of new function */
static long oldop; /* previous opcode */
@@ -185,7 +185,7 @@ endfunc(void)
{
register FUNC *fp; /* function just finished */
unsigned long size; /* size of just created function */
long index;
unsigned long index;
if (oldop != OP_RETURN) {
addop(OP_UNDEF);
@@ -208,7 +208,7 @@ endfunc(void)
memcpy((char *) fp, (char *) curfunc, size);
if (curfunc != functemplate)
free(curfunc);
if (conf->traceflags & TRACE_FNCODES) {
if (newname[0] != '*' && (conf->traceflags & TRACE_FNCODES)) {
dumpnames = TRUE;
for (size = 0; size < fp->f_opcodecount; ) {
printf("%ld: ", (long)size);
@@ -302,7 +302,7 @@ void
freefunc(FUNC *fp)
{
long index;
long i;
unsigned long i;
if (fp == NULL)
return;
@@ -318,7 +318,7 @@ freefunc(FUNC *fp)
/*NOTREACHED*/
}
}
if (conf->traceflags & TRACE_FNCODES) {
if (newname[0] != '*' && (conf->traceflags & TRACE_FNCODES)) {
printf("Freeing function \"%s\"\n",namestr(&funcnames,index));
dumpnames = FALSE;
for (i = 0; i < fp->f_opcodecount; ) {
@@ -383,7 +383,7 @@ clearopt(void)
FUNC *
findfunc(long index)
{
if ((unsigned long) index >= funccount) {
if (index >= funccount) {
math_error("Undefined function");
/*NOTREACHED*/
}

View File

@@ -17,15 +17,15 @@
* 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: align32.c,v 29.1 1999/12/14 09:15:29 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $Id: align32.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/align32.c,v $
*
* Under source code control: 1995/11/23 05:18:06
* File existed as early as: 1995
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/

21
alloc.h
View File

@@ -17,14 +17,14 @@
* 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: alloc.h,v 29.1 1999/12/14 09:15:29 chongo Exp $
* @(#) $Revision: 29.4 $
* @(#) $Id: alloc.h,v 29.4 2001/06/08 21:00:58 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/alloc.h,v $
*
* Under source code control: 1990/02/15 01:48:29
* 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__
#include "have_malloc.h"
#include "have_newstr.h"
#include "have_string.h"
#include "have_memmv.h"
#if defined(CALC_SRC) /* if we are building from the calc source tree */
# include "have_malloc.h"
# include "have_newstr.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
# include <malloc.h>

View File

@@ -17,14 +17,14 @@
* 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: assocfunc.c,v 29.1 1999/12/14 09:15:29 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $Id: assocfunc.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/assocfunc.c,v $
*
* Under source code control: 1993/07/20 23:04:27
* 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/
*/
/*

View File

@@ -19,14 +19,14 @@
* 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: blkcpy.c,v 29.1 1999/12/14 09:15:29 chongo Exp $
* @(#) $Revision: 29.4 $
* @(#) $Id: blkcpy.c,v 29.4 2004/02/23 07:47:31 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $
*
* Under source code control: 1997/04/18 20:41:26
* 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/
*/
@@ -287,13 +287,13 @@ copymat2mat(MATRIX *smat, long ssi, long num, MATRIX *dmat, long dsi)
if (num < 0)
num = smat->m_size - ssi;
if ((USB32) ssi + num > smat->m_size)
if (ssi + num > smat->m_size)
return E_COPY5;
if (num == 0)
return 0;
if (dsi < 0)
dsi = 0;
if ((USB32) dsi + num > dmat->m_size)
if (dsi + num > dmat->m_size)
return E_COPY7;
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
if (vtemp == NULL) {
@@ -335,13 +335,13 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
return E_COPY2;
if (num < 0)
num = blk->datalen - ssi;
if ((USB32) ssi + num > blk->datalen)
if (ssi + num > blk->datalen)
return E_COPY5;
if (num == 0)
return 0;
if (dsi < 0)
dsi = 0;
if ((USB32) dsi + num > dmat->m_size)
if (dsi + num > dmat->m_size)
return E_COPY7;
op = blk->data + ssi;
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
@@ -389,7 +389,7 @@ copymat2blk(MATRIX *smat, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
num = smat->m_size - ssi;
if (num == 0)
return 0;
if ((USB32) ssi + num > smat->m_size)
if (ssi + num > smat->m_size)
return E_COPY5;
if (dsi < 0)
dsi = dblk->datalen;
@@ -436,11 +436,11 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
num = smat->m_size - ssi;
if (num == 0)
return 0;
if ((USB32) ssi + num > smat->m_size)
if (ssi + num > smat->m_size)
return E_COPY5;
if (dsi < 0)
dsi = 0;
if ((USB32) dsi + num > lp->l_count)
if (dsi + num > lp->l_count)
return E_COPY7;
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
if (vtemp == NULL) {
@@ -484,11 +484,11 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
num = lp->l_count - ssi;
if (num == 0)
return 0;
if ((USB32) ssi + num > lp->l_count)
if (ssi + num > lp->l_count)
return E_COPY5;
if (dsi < 0)
dsi = 0;
if ((USB32) dsi + num > dmat->m_size)
if (dsi + num > dmat->m_size)
return E_COPY7;
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
if (vtemp == NULL) {
@@ -533,11 +533,11 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
num = slp->l_count - ssi;
if (num == 0)
return 0;
if ((USB32) ssi + num > slp->l_count)
if (ssi + num > slp->l_count)
return E_COPY5;
if (dsi < 0)
dsi = 0;
if ((USB32) dsi + num > dlp->l_count)
if (dsi + num > dlp->l_count)
return E_COPY7;
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
if (vtemp == NULL) {
@@ -572,7 +572,7 @@ copyblk2file(BLOCK *sblk, long ssi, long num, FILEID id, long dsi)
{
FILEIO *fiop;
FILE *fp;
unsigned int numw;
long numw;
if (ssi > sblk->datalen)
return E_COPY2;
@@ -581,7 +581,7 @@ copyblk2file(BLOCK *sblk, long ssi, long num, FILEID id, long dsi)
if (num == 0)
return 0;
fiop = findid(id, 'w');
fiop = findid(id, TRUE);
if (fiop == NULL)
return E_COPYF1;
fp = fiop->fp;
@@ -609,7 +609,7 @@ copyfile2blk(FILEID id, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
{
FILEIO *fiop;
FILE *fp;
unsigned int numw;
long numw;
ZVALUE fsize;
long filelen;
long newlen;
@@ -618,7 +618,7 @@ copyfile2blk(FILEID id, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
if (id < 3) /* excludes copying from stdin */
return E_COPYF1;
fiop = findid(id, 'r');
fiop = findid(id, FALSE);
if (fiop == NULL)
return E_COPYF1;
@@ -639,7 +639,7 @@ copyfile2blk(FILEID id, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
num = filelen - ssi;
if (num == 0)
return 0;
if ((USB32) ssi + num > filelen)
if (ssi + num > filelen)
return E_COPY5;
if (fseek(fp, ssi, 0)) /* using system fseek XXX */
return E_COPYF2;
@@ -677,7 +677,7 @@ copystr2file(STRING *str, long ssi, long num, FILEID id, long dsi)
{
long len;
FILEIO *fiop;
unsigned int numw;
long numw;
FILE *fp;
len = str->s_len;
@@ -688,9 +688,9 @@ copystr2file(STRING *str, long ssi, long num, FILEID id, long dsi)
num = len - ssi;
if (num <= 0) /* Nothing to be copied */
return 0;
if ((USB32) ssi + num > len)
if (ssi + num > len)
return E_COPY5; /* Insufficient memory in str */
fiop = findid(id, 'w');
fiop = findid(id, TRUE);
if (fiop == NULL)
return E_COPYF1;
fp = fiop->fp;
@@ -726,7 +726,7 @@ copyblk2blk(BLOCK *sblk, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc
num = sblk->datalen - ssi;
if (num == 0) /* Nothing to be copied */
return 0;
if ((unsigned int) ssi + num > sblk->datalen)
if (ssi + num > sblk->datalen)
return E_COPY5;
if (dsi < 0)
dsi = dblk->datalen;
@@ -888,7 +888,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
if (ssi > len)
return E_COPY2;
if (num < 0 || (unsigned long) ssi + num > len)
if (num < 0 || ssi + num > len)
num = len - ssi;
if (num <= 0) /* Nothing to be copied */
return 0;
@@ -991,7 +991,7 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
num = snum->num.len - ssi;
if (num == 0) /* Nothing to be copied */
return 0;
if ((unsigned long) ssi + num > snum->num.len)
if (ssi + num > snum->num.len)
return E_COPY5;
if (dsi < 0)
dsi = dblk->datalen;
@@ -1044,7 +1044,7 @@ copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi, NUMBER **re
num = sblk->datalen - ssi;
if (num == 0) /* Nothing to be copied */
return 0;
if ((unsigned long) ssi + num > sblk->datalen)
if (ssi + num > sblk->datalen)
return E_COPY5;
if (dsi < 0)
dsi = dnum->num.len;

View File

@@ -19,14 +19,14 @@
* 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: blkcpy.h,v 29.1 1999/12/14 09:15:29 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $Id: blkcpy.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.h,v $
*
* Under source code control: 1997/04/18 20:41:25
* 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/
*/

View File

@@ -19,15 +19,15 @@
* 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: block.c,v 29.1 1999/12/14 09:15:29 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $Id: block.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.c,v $
*
* Under source code control: 1997/02/27 00:29:40
* File existed as early as: 1997
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/

View File

@@ -19,15 +19,15 @@
* 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: block.h,v 29.1 1999/12/14 09:15:30 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $Id: block.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.h,v $
*
* Under source code control: 1997/02/21 05:03:39
* File existed as early as: 1997
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/

View File

@@ -17,15 +17,15 @@
* 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: byteswap.c,v 29.1 1999/12/14 09:15:30 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $Id: byteswap.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.c,v $
*
* Under source code control: 1995/10/11 04:44:01
* File existed as early as: 1995
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/

View File

@@ -17,15 +17,15 @@
* 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: byteswap.h,v 29.1 1999/12/14 09:15:30 chongo Exp $
* @(#) $Revision: 29.4 $
* @(#) $Id: byteswap.h,v 29.4 2001/06/08 21:00:58 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.h,v $
*
* Under source code control: 1995/10/11 04:44:01
* File existed as early as: 1995
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
@@ -33,7 +33,11 @@
#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
/*

View File

@@ -18,15 +18,15 @@
# 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: Makefile,v 29.1 1999/12/14 09:15:30 chongo Exp $
# @(#) $Revision: 29.15 $
# @(#) $Id: Makefile,v 29.15 2003/01/05 08:10:56 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
#
# Under source code control: 1991/07/21 05:00:54
# File existed as early as: 1991
#
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
#
# calculator by David I. Bell with help/mods from others
# Makefile by Landon Curt Noll
@@ -36,15 +36,120 @@
SHELL = /bin/sh
MAKE_FILE = Makefile
####
# Normally, the upper level makefile will set these values. We provide
# 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
#
@@ -57,6 +162,7 @@ Q=@
# standard tools
#
CHMOD= chmod
CMP= cmp
# The calc files to install
#
@@ -69,8 +175,8 @@ CALC_FILES= README bigprime.cal deg.cal ellip.cal lucas.cal lucas_chk.cal \
test2700.cal test3100.cal test3300.cal test3400.cal prompt.cal \
test3500.cal seedrandom.cal test4000.cal test4100.cal test4600.cal \
beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
randomrun.cal xx_print.cal natnumset.cal qtime.cal test8400.cal \
test8500.cal
randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.cal \
test8400.cal test8500.cal test8600.cal chi.cal intfile.cal
# These files are found (but not built) in the distribution
#
@@ -102,8 +208,10 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
##
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; \
fi; \
done
distdir:
@@ -116,34 +224,54 @@ calcliblist:
fi; \
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:
clobber:
rm -f .all
install: all
-${Q}if [ ! -d ${TOPDIR} ]; then \
echo mkdir ${TOPDIR}; \
mkdir ${TOPDIR}; \
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \
echo mkdir $T${CALC_SHAREDIR}; \
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 \
true; \
fi
-${Q}if [ ! -d ${LIBDIR} ]; then \
echo mkdir ${LIBDIR}; \
mkdir ${LIBDIR}; \
else \
true; \
fi
${Q}for i in ${CALC_FILES}; do \
echo rm -f ${LIBDIR}/$$i; \
rm -f ${LIBDIR}/$$i; \
echo cp $$i ${LIBDIR}; \
cp $$i ${LIBDIR}; \
echo ${CHMOD} 0444 ${LIBDIR}/$$i; \
${CHMOD} 0444 ${LIBDIR}/$$i; \
${Q}for i in ${CALC_FILES} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if ${CMP} -s $$i $T${CALC_SHAREDIR}/$$i; then \
true; \
else \
rm -f $T${CALC_SHAREDIR}/$$i.new; \
cp -f $$i $T${CALC_SHAREDIR}/$$i.new; \
${CHMOD} 0444 $T${CALC_SHAREDIR}/$$i.new; \
mv -f $T${CALC_SHAREDIR}/$$i.new $T${CALC_SHAREDIR}/$$i; \
echo "installed $T${CALC_SHAREDIR}/$$i"; \
fi; \
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

View File

@@ -1,7 +1,7 @@
Calc standard resource files
----------------------------
To load a reosurce file, try:
To load a resource file, try:
read filename
@@ -37,9 +37,10 @@ be useful!
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,
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
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
is displayed. For other values, the non-zero bits which currently
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
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
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,
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")
@@ -96,6 +103,14 @@ either of the bottom 2 bits set:
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
@@ -115,6 +130,10 @@ bernoulli.cal
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
@@ -123,6 +142,24 @@ bigprime.cal
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(r1,m1 [,r2,m2, ...])
@@ -158,6 +195,33 @@ hello.cal
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.
lucas.cal
lucas(h, n)
@@ -273,7 +337,7 @@ pell.cal
pell(D)
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
@@ -287,7 +351,7 @@ pi.cal
The piforever() prints digits of pi, nicely formatted, for as long
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
Lambert Meertens. See also the ABC Programmer's Handbook, by Geurts,
Meertens & Pemberton, published by Prentice-Hall (UK) Ltd., 1990.
@@ -355,7 +419,7 @@ quat.cal
quat_shift(a, b)
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.
@@ -385,7 +449,7 @@ randombitrun.cal
randombitrun([run_cnt])
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.
This tests the Blum-Blum-Shub generator.
@@ -416,6 +480,16 @@ randrun.cal
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
@@ -488,7 +562,7 @@ test1700.cal
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
@@ -513,7 +587,7 @@ test2600.cal
checkresult(x, y, z, a)
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.
@@ -536,7 +610,7 @@ test2700.cal
iscomsq(x)
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.
@@ -624,7 +698,7 @@ test4000.cal
test4000(verbose, tnum) defined
This resource file is used by regress.cal to test ptest, nextcand and
prevcand buildins.
prevcand builtins.
test4100.cal
@@ -676,6 +750,35 @@ test5200.cal
This resource file is used by regress.cal to test the fix of a
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(x)
@@ -704,7 +807,7 @@ xx_print.cal
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
##
@@ -722,12 +825,12 @@ xx_print.cal
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.1 $
## @(#) $Id: README,v 29.1 1999/12/14 09:15:30 chongo Exp $
## @(#) $Revision: 29.9 $
## @(#) $Id: README,v 29.9 2003/01/05 08:10:56 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
##
## Under source code control: 1990/02/15 01:50:32
## File existed as early as: before 1990
##
## chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
## Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/

View File

@@ -17,15 +17,15 @@
* 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: beer.cal,v 29.1 1999/12/14 09:15:30 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1996/11/13 13:21:05
* File existed as early as: 1996
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/*

View File

@@ -1,7 +1,7 @@
/*
* 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
* 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.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.1 $
* @(#) $Id: bernoulli.cal,v 29.1 1999/12/14 09:15:30 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $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 $
*
* Under source code control: 1991/09/30 11:18:41
* 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).
* 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
*
* where b is a dummy value, and each power b^i gets replaced by B(i).
* For example, for n = 3:
*
* (b+1)^4 - 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
@@ -48,11 +52,14 @@
*/
/*
static Bnmax;
static mat Bn[1001];
*/
define B(n)
{
/*
local nn, np1, i, sum, mulval, divval, combval;
if (!isint(n) || (n < 0))
@@ -85,4 +92,6 @@ define B(n)
}
Bnmax = n;
return Bn[n];
*/
return bernoulli(n);
}

View File

@@ -17,14 +17,14 @@
* 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: bigprime.cal,v 29.1 1999/12/14 09:15:30 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1991/05/22 21:56:32
* 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/
*/

View File

@@ -16,14 +16,14 @@
# 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: bindings,v 29.1 1999/12/14 09:15:30 chongo Exp $
# @(#) $Revision: 29.2 $
# @(#) $Id: bindings,v 29.2 2000/06/07 14:02:25 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bindings,v $
#
# Under source code control: 1993/05/02 20:09:19
# 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.
# In that case, the standard readline mechanisms (see readline(3))

251
cal/chi.cal Normal file
View 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;
}

View File

@@ -19,14 +19,14 @@
* 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: chrem.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1992/09/26 01:00:47
* 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/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: deg.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.4 $
* @(#) $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 $
*
* Under source code control: 1990/02/15 01:50:33
* 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.min = min;
ans.sec = sec;
fixdms(&ans);
fixdms(ans);
return ans;
}
@@ -66,7 +66,7 @@ define dms_add(a, b)
ans.sec += b.sec;
} else
ans.deg += b;
fixdms(&ans);
fixdms(ans);
return ans;
}
@@ -75,9 +75,9 @@ define dms_neg(a)
{
local obj dms ans;
ans.deg = -ans.deg;
ans.min = -ans.min;
ans.sec = -ans.sec;
ans.deg = -a.deg;
ans.min = -a.min;
ans.sec = -a.sec;
return ans;
}
@@ -103,7 +103,7 @@ define dms_mul(a, b)
ans.min = b.min * a;
ans.sec = b.sec * a;
}
fixdms(&ans);
fixdms(ans);
return ans;
}

View File

@@ -17,14 +17,14 @@
* 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: ellip.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $Id: ellip.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
*
* Under source code control: 1990/02/15 01:50:33
* 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/
*/
/*

View File

@@ -17,15 +17,15 @@
* 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: hello.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1996/11/13 13:25:43
* File existed as early as: 1996
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/*

222
cal/intfile.cal Normal file
View 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;
}

View File

@@ -17,15 +17,25 @@
* 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: lucas.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.6 $
* @(#) $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 $
*
* Under source code control: 1990/05/03 16:49:51
* File existed as early as: 1990
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* 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.
*
* 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
* broken. Rather than update this file each time, I'll just
* congratulate the finders and encourage others to try for
* 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
* 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
* 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
* 0 < h < 2^39
* h*2^n+1 is not divisible by any small prime < 2^40
@@ -1030,7 +1047,7 @@ gen_v1(h, n)
define
ldebug(funct, str)
{
if (config("resource_debug") & 3) {
if (config("resource_debug") & 8) {
print "DEBUG:", funct:":", str;
}
return;

View File

@@ -17,15 +17,15 @@
* 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: lucas_chk.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $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 $
*
* Under source code control: 1991/01/11 05:41:43
* File existed as early as: 1991
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* 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 */
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";
}
continue;

View File

@@ -17,15 +17,15 @@
* 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: lucas_tbl.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1991/01/26 02:43:43
* File existed as early as: 1991
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/*

View File

@@ -19,14 +19,14 @@
* 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: mersenne.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1991/05/22 21:56:36
* 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/
*/
/*

View File

@@ -17,15 +17,15 @@
* 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: mfactor.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1996/07/06 06:09:40
* File existed as early as: 1996
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: mod.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1990/02/15 01:50:34
* 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/
*/

View File

@@ -17,14 +17,14 @@
* 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: natnumset.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $Id: natnumset.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/natnumset.cal,v $
*
* Under source code control: 1997/09/07 23:53:51
* 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/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: pell.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1990/02/15 01:50:34
* 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/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: pi.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $Id: pi.cal,v 29.3 2004/02/23 06:06:38 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pi.cal,v $
*
* Under source code control: 1991/05/22 21:56:37
* 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;
an = 6 - 4 * sqrt2;
tn = 2;
for (count = 0; count < niter; count++) {
for (count = 0; count < niter; ++count) {
ym = yn;
am = an;
tn *= 4;
@@ -104,7 +104,8 @@ define piforever()
* Next approximation
*/
p = k * k;
q = k + k++;
q = k << 1;
++k;
a2 = a;
b2 = b;

View File

@@ -17,15 +17,15 @@
* 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: pix.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1996/07/09 03:14:14
* File existed as early as: 1996
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: pollard.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1991/05/22 21:56:37
* 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/
*/

View File

@@ -17,14 +17,14 @@
* 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: poly.cal,v 29.1 1999/12/14 09:15:31 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1990/02/15 01:50:35
* 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/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: prompt.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1995/12/18 04:43:25
* 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/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: psqrt.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1990/02/15 01:50:35
* 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/
*/
/*

View File

@@ -1,24 +1,46 @@
/*
* 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:
* qtime(utc_hr_offset)
*
* 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:
* http://www.magnetic-ink.dk/download/qtime.html
*
* 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.
*/

View File

@@ -17,14 +17,14 @@
* 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: quat.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1990/02/15 01:50:35
* 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/
*/
/*

View File

@@ -17,15 +17,15 @@
* 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: randbitrun.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1995/02/13 03:43:11
* File existed as early as: 1995
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/*

View File

@@ -17,15 +17,15 @@
* 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: randmprime.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1994/03/14 23:11:21
* File existed as early as: 1994
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/

View File

@@ -17,15 +17,15 @@
* 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: randombitrun.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1995/02/13 03:43:11
* File existed as early as: 1995
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/*

View File

@@ -17,15 +17,15 @@
* 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: randomrun.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1997/02/19 03:35:59
* File existed as early as: 1997
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: randrun.cal,v 29.1 1999/12/14 09:15:32 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1995/02/12 20:00:06
* 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/
*/
/*

View File

@@ -1,7 +1,7 @@
/*
* regress - calc regression and correctness test suite
*
* Copyright (C) 1999 David I. Bell
* Copyright (C) 1999-2003 David I. Bell and Landon Curt Noll
*
* Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License
@@ -17,14 +17,14 @@
* 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: regress.cal,v 29.2 1999/12/19 03:16:54 chongo Exp $
* @(#) $Revision: 29.18 $
* @(#) $Id: regress.cal,v 29.18 2004/02/23 05:58:45 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
*
* Under source code control: 1990/02/15 01:50:36
* 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() */
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("calc_debug", 0),; /* disable internal debugging */
config("verbose_quit", 0),; /* disable quit messages */
@@ -380,19 +381,19 @@ define test_config()
/* check the set and return of all config */
callcfg = config("all");
print '501: callcfg = config("all")';
vrfy(callcfg == startcfg, '502: callcfg == startcfg');
callcfg = config("all", "oldstd");
print '502: callcfg = config("all","oldstd")';
oldcfg = config("all", "newstd");
print '503: oldcfg = config("all","newstd")';
print '503: callcfg = config("all","oldstd")';
vrfy(callcfg == startcfg, '504: callcfg == startcfg');
newcfg = config("all");
print '505: newcfg = config("all")';
vrfy(config("all") == newcfg, '506: config("all") == newcfg');
vrfy(config("all", oldcfg) == newcfg,
'507: config("all", oldcfg) == newcfg');
oldcfg = config("all");
print '505: oldcfg = config("all");';
vrfy(config("all") == oldcfg, '506: config("all") == oldcfg');
vrfy(oldcfg==config("all","newstd"),
'507: oldcfg==config("all","newstd")');
vrfy(defcfg == config("all"), '508: defcfg == config("all")');
/* vrfy the state of the default config */
vrfy(config("all") == oldcfg, '508: config("all") == oldcfg');
vrfy(config("mode") == "real",
'509: config("mode") == "real"');
vrfy(config("display") == 20,
@@ -411,10 +412,10 @@ define test_config()
'516: config("pow2") == 40');
vrfy(config("redc2") == 50,
'517: config("redc2") == 50');
vrfy(config("tilde") == "true",
'518: config("tilde") == "true"');
vrfy(config("tab") == "true",
'519: config("tab") == "true"');
vrfy(config("tilde"),
'518: config("tilde")');
vrfy(config("tab"),
'519: config("tab")');
vrfy(config("quomod") == 0,
'520: config("quomod") == 0');
vrfy(config("quo") == 2,
@@ -429,58 +430,59 @@ define test_config()
'525: config("cfappr") == 0');
vrfy(config("cfsim") == 8,
'526: config("cfsim") == 8');
vrfy(config("outround") == 2,
'527: config("outround") == 2');
vrfy(config("outround") == 24,
'527: config("outround") == 24');
vrfy(config("round") == 24,
'528: config("round") == 24');
vrfy(config("leadzero") == "false",
'529: config("leadzero") == "false"');
vrfy(config("fullzero") == "false",
'530: config("fullzero") == "false"');
vrfy(config("leadzero") == 1,
'529: config("leadzero") == 1');
vrfy(config("fullzero") == 0,
'530: config("fullzero") == 0');
vrfy(config("maxscan") == 20,
'531: config("maxscan") == 20');
vrfy(config("prompt") == "> ",
'532: config("prompt") == "> "');
vrfy(config("more") == ">> ",
'533: config("more") == ">> "');
vrfy(config("prompt") == "; ",
'532: config("prompt") == "; "');
vrfy(config("more") == ";; ",
'533: config("more") == ";; "');
/* convert to "newstd" config by individual changes */
vrfy(config("display", 10) == 20,
'534: config("display") == 20');
vrfy(config("epsilon",1e-10)==1e-20,
'535: config("epsilon",1e-10)==1e-20');
vrfy(config("quo", 0) == 2, '536: config("quo", 0) == 2');
vrfy(config("outround", 24) == 2,
'537: config("outround", 24) == 2');
vrfy(config("leadzero","y") == "false",
'538: config("leadzero","y") == "false"');
vrfy(config("fullzero", 1) == "false",
'539: config("fullzero", 1) == "false"');
vrfy(config("prompt", "; ") == "> ",
'540: config("prompt", "; ") == "> "');
vrfy(config("more", ";; ") == ">> ",
'541: config("more", ";; ") == ">> "');
vrfy(config("all") == newcfg, '542: config("all") == newcfg');
/* convert to "oldstd" config by individual changes */
print '534: test unused';
vrfy(config("outround", 2) == 24,
'535: config("outround", 2) == 24');
vrfy(config("leadzero","n") == 1,
'536: config("leadzero","n") == 1');
print '537: test unused';
vrfy(config("prompt", "> ") == "; ",
'538: config("prompt", "> ") == "; "');
vrfy(config("more", ">> ") == ";; ",
'539: config("more", ">> ") == ";; "');
vrfy(config("all") == oldcfg, '540: config("all") == oldcfg');
/* check on the new config("fullzero") effect */
vrfy(config("all","oldstd") == newcfg,
'543: config("all",callcfg) == newcfg');
/* restore the configation at the start of this function */
vrfy(config("all",callcfg) == oldcfg,
'541: config("all",callcfg) == oldcfg');
/* display and fullzero tests */
vrfy(config("display",2) == 20,
'544: config("display",2) == 20');
vrfy(config("fullzero",1) == "false",
'545: config("fullzero",1) == "false"');
'542: config("display",2) == 20');
vrfy(config("leadzero",0) == 1,
'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",
'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,
'547: config("display",20) == 2');
vrfy(config("fullzero",0) == "true",
'548: config("fullzero",0) == "true"');
'546: config("display",20) == 2');
vrfy(config("leadzero",1) == 0,
'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",
'549: strprintf("%d %d %d", 0, 1, 2) == "0 1 2"');
/* restore calling config */
vrfy(config("all",callcfg) == oldcfg,
'550: config("all",callcfg) == oldcfg');
vrfy(config("all",callcfg) == startcfg,
'550: config("all",callcfg) == startcfg');
vrfy(config("all") == callcfg, '551: config("all") == callcfg');
vrfy(config("all") == startcfg, '552: config("all") == startcfg');
@@ -492,7 +494,11 @@ define test_config()
vrfy(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()';
@@ -996,8 +1002,13 @@ define test_functions()
vrfy(strpos(a, "abc") == 1, '946: strpos(a, "abc") == 1');
vrfy(strpos(a, "xyz") == 0, '947: strpos(a, "xyz") == 0');
vrfy(strpos(a, a) == 1, '948: strpos(a, a) == 1');
vrfy(system("") == 0, '949: system("") == 0');
vrfy(system("true") == 0, '950: system("true") == 0');
if (config("windows") || config("cygwin")) {
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 '952: test removed';
print '953: test removed';
@@ -1223,7 +1234,85 @@ define test_functions()
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)');
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) == null(), '1154: sleep(1) == null()');
print '1155: Ending test_functions';
}
print '017: parsed test_functions()';
@@ -1484,31 +1573,31 @@ define test_rand()
/* test the additive 55 shuffle generator */
tmp = srand(0);
print '1505: tmp = srand(0)';
vrfy(rand() == 0xc79ef743e2e6849c, \
'1506: rand() == 0xc79ef743e2e6849c');
vrfy(rand() == 0x8d2dcb2bed321284, \
'1507: rand() == 0x8d2dcb2bed321284');
vrfy(rand() == 0x1fe5b46fba7e069d, \
'1506: rand() == 0x1fe5b46fba7e069d');
vrfy(rand() == 0x308d32d9bdf2dc6f, \
'1507: rand() == 0x308d32d9bdf2dc6f');
tmp = srand(init);
print '1508: tmp = srand(init)';
vrfy(rand() == 0xc79ef743e2e6849c, \
'1509: rand() == 0xc79ef743e2e6849c');
vrfy(rand() == 0x8d2dcb2bed321284, \
'1510: rand() == 0x8d2dcb2bed321284');
vrfy(rand() == 0x1fe5b46fba7e069d, \
'1509: rand() == 0x1fe5b46fba7e069d');
vrfy(rand() == 0x308d32d9bdf2dc6f, \
'1510: rand() == 0x308d32d9bdf2dc6f');
/* test range interface */
tmp = srand(0);
print '1511: tmp = srand(0)';
vrfy(rand(12345678901234567890) == 0x8d2dcb2bed321284, \
'1512: rand(12345678901234567890) == 0x8d2dcb2bed321284');
vrfy(rand(216091) == 0x13d2b, '1513: rand(216091) == 0x13d2b');
vrfy(rand(100) == 0x26, '1514: rand(100) == 0x26');
vrfy(rand(-46,46) == -0xf, '1515: rand(-46,46) == -0xf');
vrfy(rand(12345678901234567890) == 0x1fe5b46fba7e069d, \
'1512: rand(12345678901234567890) == 0x1fe5b46fba7e069d');
vrfy(rand(216091) == 0xc234, '1513: rand(216091) == 0xc234');
vrfy(rand(100) == 0x59, '1514: rand(100) == 0x59');
vrfy(rand(-46,46) == 0x2d, '1515: rand(-46,46) == 0x2d');
tmp = srand(0);
print '1516: tmp = srand(0)';
vrfy(rand(2^64) == 0xc79ef743e2e6849c, \
'1517: rand(2^64) == 0xc79ef743e2e6849c');
vrfy(rand(0,2^64) == 0x8d2dcb2bed321284, \
'1518: rand(0,2^64) == 0x8d2dcb2bed321284');
vrfy(rand(2^64) == 0x1fe5b46fba7e069d, \
'1517: rand(2^64) == 0x1fe5b46fba7e069d');
vrfy(rand(0,2^64) == 0x308d32d9bdf2dc6f, \
'1518: rand(0,2^64) == 0x308d32d9bdf2dc6f');
/* test different forms of seeding the initial state */
tmp = srand(0);
@@ -1516,7 +1605,7 @@ define test_rand()
vrfy(srand() == init, '1520: srand() == init');
tmp = srand(0x87e6ec938ff55aa5<<64);
print '1521: tmp = srand(0x87e6ec938ff55aa5<<64)';
vrfy(srand() == init, '1522: srand() == init');
print '1522: test disabled';
tmp = srand(state0);
print '1523: tmp = srand(state0)';
vrfy(srand() == init, '1524: srand() == init');
@@ -1528,35 +1617,35 @@ define test_rand()
/* test the bit length interface */
tmp = srand(0);
print '1528: tmp = srand(0)';
vrfy(randbit(64) == 0xc79ef743e2e6849c, \
'1529: randbit(64) == 0xc79ef743e2e6849c');
vrfy(randbit(128) == 0x8d2dcb2bed3212844f4ad31f3818af34, \
'1530: randbit(128) == 0x8d2dcb2bed3212844f4ad31f3818af34');
vrfy(randbit(64) == 0x23a252f60bae4907, \
'1531: randbit(64) == 0x23a252f60bae4907');
vrfy(randbit(128) == 0xa8ed5b6203e2b1da32848cd9b3f1e3fa, \
'1532: randbit(128) == 0xa8ed5b6203e2b1da32848cd9b3f1e3fa');
vrfy(randbit(64) == 0x1fe5b46fba7e069d, \
'1529: randbit(64) == 0x1fe5b46fba7e069d');
vrfy(randbit(128) == 0x308d32d9bdf2dc6f45d3e3b3361b79e4, \
'1530: randbit(128) == 0x308d32d9bdf2dc6f45d3e3b3361b79e4');
vrfy(randbit(64) == 0xd4ef1e3336022d81, \
'1531: randbit(64) == 0xd4ef1e3336022d81');
vrfy(randbit(128) == 0x66b086e6c34e42124a1fc5d4e5c6f598, \
'1532: randbit(128) == 0x66b086e6c34e42124a1fc5d4e5c6f598');
tmp = srand(0);
print '1533: tmp = srand(0)';
vrfy(randbit(32) == 0xc79ef743, '1534: randbit(32) == 0xc79ef743');
vrfy(randbit(32) == 0xe2e6849c, '1535: randbit(32) == 0xe2e6849c');
vrfy(randbit(1) == 0x1, '1536: randbit(1) == 0x1');
vrfy(randbit(5) == 0x3, '1537: randbit(5) == 0x3');
vrfy(randbit(33) == 0x96e595f6, '1538: randbit(33) == 0x96e595f6');
vrfy(randbit(25) == 0x1321284, '1539: randbit(25) == 0x1321284');
vrfy(randbit(32) == 0x1fe5b46f, '1534: randbit(32) == 0x1fe5b46f');
vrfy(randbit(32) == 0xba7e069d, '1535: randbit(32) == 0xba7e069d');
vrfy(randbit(1) == 0x0, '1536: randbit(1) == 0x0');
vrfy(randbit(5) == 0xc, '1537: randbit(5) == 0xc');
vrfy(randbit(33) == 0x46996cde, '1538: randbit(33) == 0x46996cde');
vrfy(randbit(25) == 0x1f2dc6f, '1539: randbit(25) == 0x1f2dc6f');
vrfy(randbit(2) == 0x1, '1540: randbit(2) == 0x1');
vrfy(randbit(13) == 0x7a5, '1541: randbit(13) == 0x7a5');
vrfy(randbit(18) == 0x1a63e, '1542: randbit(18) == 0x1a63e');
vrfy(randbit(8) == 0x70, '1543: randbit(8) == 0x70');
vrfy(randbit(9) == 0x62, '1544: randbit(9) == 0x62');
vrfy(randbit(70) == 0x2f3423a252f60bae49, \
'1545: randbit(70) == 0x2f3423a252f60bae49');
vrfy(randbit(13) == 0x2e9, '1541: randbit(13) == 0x2e9');
vrfy(randbit(18) == 0x3c766, '1542: randbit(18) == 0x3c766');
vrfy(randbit(8) == 0x6c, '1543: randbit(8) == 0x6c');
vrfy(randbit(9) == 0x6d, '1544: randbit(9) == 0x6d');
vrfy(randbit(70) == 0x39e4d4ef1e3336022d, \
'1545: randbit(70) == 0x39e4d4ef1e3336022d');
print '1546: test unused';
vrfy(randbit(8) == 0x7, '1547: randbit(8) == 0x7');
vrfy(randbit(65) == 0x151dab6c407c563b4, \
'1548: randbit(65) == 0x151dab6c407c563b4');
vrfy(randbit(63) == 0x32848cd9b3f1e3fa, \
'1549: randbit(63) == 0x32848cd9b3f1e3fa');
vrfy(randbit(8) == 0x81, '1547: randbit(8) == 0x81');
vrfy(randbit(65) == 0xcd610dcd869c8424, \
'1548: randbit(65) == 0xcd610dcd869c8424');
vrfy(randbit(63) == 0x4a1fc5d4e5c6f598, \
'1549: randbit(63) == 0x4a1fc5d4e5c6f598');
/* check to be sure that the srand(1) bug was fixed */
tmp = srand(1);
@@ -1565,36 +1654,36 @@ define test_rand()
print '1551: n = 1';
vrfy(num(n), '1552: num(n)');
vrfy(den(n), '1553: den(n)');
vrfy(randbit(64) == 0x4280429f8069cb27, \
'1554: randbit(64) == 0x4280429f8069cb27');
vrfy(randbit(64) == 0xbf989a4c504a541d, \
'1554: randbit(64) == 0xbf989a4c504a541d');
/* test randbit skip interface */
tmp = srand(0);
print '1555: tmp = srand(0)';
vrfy(randbit(20) == 817647, '1556: randbit(20) == 817647');
vrfy(randbit(20) == 476130, '1557: randbit(20) == 476130');
vrfy(randbit(20) == 944201, '1558: randbit(20) == 944201');
vrfy(randbit(20) == 822573, '1559: randbit(20) == 822573');
vrfy(randbit(20) == 0x1fe5b, '1556: randbit(20) == 0x1fe5b');
vrfy(randbit(20) == 0x46fba, '1557: randbit(20) == 0x46fba');
vrfy(randbit(20) == 0x7e069, '1558: randbit(20) == 0x7e069');
vrfy(randbit(20) == 0xd308d, '1559: randbit(20) == 0xd308d');
tmp = srand(0);
print '1560: tmp = srand(0)';
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) == 822573, '1564: randbit(20) == 822573');
vrfy(randbit(20) == 864397, '1564: randbit(20) == 864397');
/* test randbit without and arg */
tmp = srand(0);
print '1565: tmp = srand(0)';
vrfy(randbit() == 1, '1566: randbit() == 1');
vrfy(randbit() == 1, '1567: randbit() == 1');
vrfy(randbit() == 0, '1566: randbit() == 0');
vrfy(randbit() == 0, '1567: randbit() == 0');
vrfy(randbit() == 0, '1568: randbit() == 0');
vrfy(randbit() == 1, '1569: randbit() == 1');
/* test seed() as best as we can */
vrfy(seed() >= 0, '1569: seed() >= 0');
vrfy(seed() < 2^64, '1570: seed() < 2^64');
vrfy(isrand(srand(seed())), '1571: isrand(srand(seed()))');
vrfy(seed() >= 0, '1570: seed() >= 0');
vrfy(seed() < 2^64, '1571: seed() < 2^64');
vrfy(isrand(srand(seed())), '1572: isrand(srand(seed()))');
print '1572: Ending rand test';
print '1573: Ending rand test';
}
print '025: parsed test_rand()';
@@ -1710,7 +1799,23 @@ define test_mode()
vrfy(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()';
@@ -2105,6 +2210,7 @@ print '033: read -once test2300';
define test_xx_incdec()
{
local A, B;
local n;
print '2300: Beginning object increment/decrement test';
@@ -2137,6 +2243,20 @@ define test_xx_incdec()
vrfy(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 '034: parsed test_xx_incdec()';
@@ -2987,7 +3107,7 @@ define test_error()
vrfy(root(3,2,0) == error(10029),
'3644: root(3,2,0) == error(10029)');
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(3 << "x" == error(10032), '3648: 3 << "x" == error(10032)');
vrfy(3 << 1.5 == error(10032), '3649: 3 << 1.5 == error(10032)');
@@ -4464,7 +4584,14 @@ define test_random()
vrfy(seed() < 2^64, '5465: seed() < 2^64');
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()';
@@ -5034,10 +5161,17 @@ define test_is()
*/
a = assoc();
print '5901: a = assoc()';
ofd = fopen("/dev/null", "r");
print '5902: ofd = fopen("/dev/null", "r")';
cfd = fopen("/dev/null", "r");
print '5903: cfd = fopen("/dev/null", "r")';
if (config("windows")) {
ofd = fopen("NUL:", "rb");
print '5902: ofd = fopen("NUL:", "rb")';
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);
print '5904: fclose(cfd)';
blk = blk();
@@ -6215,8 +6349,8 @@ define test_blkcpy()
/* blkcpy the last 5 octets of B1 to a new block C */
blkcpy(C = blk(), B1, 5, ,100);
print '6821: blkcpy(C = blk(), B1, 5, ,100);';
blkcpy(C = blk(), B1,5,,100);
print '6821: blkcpy(C = blk(), B1,5,,100);';
vrfy(C == A, '6822: C == A');
/* blkcpy to and from a file */
@@ -6232,8 +6366,8 @@ define test_blkcpy()
blkcpy(fs, A, ,100);
print '6828: blkcpy(fs, A, ,100);';
vrfy(size(fs) == 105, '6829: size(f) == 105');
blkcpy(C = blk(), fs, 2, ,100);
print '6830: blkcpy(C = blk(), fs, 2, ,100)';
blkcpy(C = blk(), fs,2,,100);
print '6830: blkcpy(C = blk(), fs,2,,100)';
vrfy(C == (blk() = {1,2}), '6831: C == (blk() = {1,2}');
/* blkcpy string to a block */
@@ -7515,7 +7649,9 @@ vrfy(j8300(10) == 11, '8307: j8300(10) == 11');
{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');
print '8310: Ending define tests';
static a8300 = 1, b8300;
vrfy(a8300 == 1, '8310: a8300 == 1');
print '8311: Ending define tests';
/*
@@ -7538,6 +7674,15 @@ read -once "test8500";
/* 85xx: Ending test_divmod is printed by test8500.cal */
/*
* test_maxargs - test up to 1024 args being passed to a builtin function
*/
print;
print '8600: Starting test_1024args'
read -once "test8600";
/* 86xx: Ending test_1024args is printed by test8600.cal */
/*
* read various calc resource files
*

53
cal/repeat.cal Normal file
View 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);
}

View File

@@ -17,15 +17,15 @@
* 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: seedrandom.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $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 $
*
* Under source code control: 1996/01/01 08:21:00
* File existed as early as: 1996
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* 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;
} while (ptest(p,1,0) == 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;
}
@@ -129,7 +129,7 @@ define seedrandom(seed1, seed2, size, trials)
q = 2*fq+1;
} while (ptest(q,1,0) == 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;
}
@@ -139,7 +139,7 @@ define seedrandom(seed1, seed2, size, trials)
n = p*q; /* the Blum modulus */
binsize = highbit(n)+1; /* smallest power of 2 > p*q */
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 "/* newn", binsize, "bit quadratic residue*/ newn=", n;
}

View File

@@ -17,14 +17,14 @@
* 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: solve.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1990/02/15 01:50:37
* 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/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: sumsq.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1990/02/15 01:50:37
* 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/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: surd.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1990/02/15 01:50:38
* 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/
*/

View File

@@ -17,15 +17,15 @@
* 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: test1700.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1994/03/14 23:12:51
* File existed as early as: 1994
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/

View File

@@ -17,15 +17,15 @@
* 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: test2300.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1995/07/09 06:12:13
* File existed as early as: 1995
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/

View File

@@ -19,14 +19,14 @@
* 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: test2600.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1995/10/13 00:13:14
* 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/
*/
/*

View File

@@ -19,14 +19,14 @@
* 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: test2700.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1995/11/01 22:52:25
* 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/
*/
/*

View File

@@ -19,14 +19,14 @@
* 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: test3100.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1995/11/28 11:56:57
* 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/
*/

View File

@@ -19,14 +19,14 @@
* 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: test3300.cal,v 29.1 1999/12/14 09:15:33 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1995/12/02 04:27:41
* 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/
*/

View File

@@ -19,14 +19,14 @@
* 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: test3400.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1995/12/02 05:20:11
* 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/
*/
/*

View File

@@ -19,14 +19,14 @@
* 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: test3500.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1995/12/18 22:50:46
* 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/
*/
/*

View File

@@ -19,14 +19,14 @@
* 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: test4000.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1996/03/13 02:38:45
* 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/
*/
/*

View File

@@ -19,14 +19,14 @@
* 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: test4100.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1996/03/13 03:53:22
* 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/
*/
/*

View File

@@ -19,14 +19,14 @@
* 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: test4600.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.4 $
* @(#) $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 $
*
* Under source code control: 1996/07/02 20:04:40
* 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
*/
f = fopen("junk4600", "w");
f = fopen("junk4600", "wb");
if (iserror(f)) {
print 'failed';
print '**** fopen("junk4600", "w") failed';
print '**** fopen("junk4600", "wb") failed';
return 1;
}
if (iserror(fputs(f,
@@ -67,9 +67,9 @@ define stest(str, verbose)
print '**** fputs(f, "Fourscore ... failed';
return 1;
}
if (iserror(freopen(f, "r"))) {
if (iserror(freopen(f, "rb"))) {
print 'failed';
print '**** iserror(freopen(f, "r")) failed';
print '**** iserror(freopen(f, "rb")) failed';
return 1;
}
if (iserror(rewind(f))) {
@@ -173,7 +173,7 @@ define ttest(str, m, n, verbose)
print str:":",:;
}
i = rm("-f", "junk4600");
f = fopen("junk4600", "w");
f = fopen("junk4600", "wb");
if (isnull(n))
n = 4;
@@ -198,7 +198,7 @@ define ttest(str, m, n, verbose)
fflush(f);
if (verbose > 1)
printf("File has size %d\n", pos[i]);
freopen(f, "r");
freopen(f, "rb");
if (size(f) != pos[i]) {
print 'failed';
printf("**** Failure 1 for file size\n");

View File

@@ -19,14 +19,14 @@
* 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: test5100.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1996/12/02 23:57:10
* 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/
*/

View File

@@ -19,14 +19,14 @@
* 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: test5200.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1997/02/07 02:48:10
* 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/
*/

View File

@@ -17,15 +17,15 @@
* 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: test8400.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1999/10/31 01:00:03
* File existed as early as: 1999
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/

View File

@@ -19,14 +19,14 @@
* 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: test8500.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1999/11/12 20:59:59
* 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

File diff suppressed because it is too large Load Diff

View File

@@ -17,14 +17,14 @@
* 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: unitfrac.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1990/02/15 01:50:38
* 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/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: varargs.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1991/05/22 21:56:34
* 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/
*/
/*

View File

@@ -17,14 +17,14 @@
* 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: xx_print.cal,v 29.1 1999/12/14 09:15:34 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $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 $
*
* Under source code control: 1997/04/17 00:08:50
* 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/
*/

947
calc.c

File diff suppressed because it is too large Load Diff

269
calc.h
View File

@@ -17,14 +17,14 @@
* 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: calc.h,v 29.2 1999/12/14 19:37:46 chongo Exp $
* @(#) $Revision: 29.11 $
* @(#) $Id: calc.h,v 29.11 2003/08/26 04:36:10 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
*
* Under source code control: 1990/02/15 01:48:31
* 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__
#include <setjmp.h>
#include "value.h"
#include "have_const.h"
#if defined(CALC_SRC) /* if we are building from the calc source tree */
# include "win32dll.h"
# include "value.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 DOTCHAR '.' /* char which indicates current directory */
#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 */
#endif
#define MAXCMD 16384 /* maximum length of command invocation */
#define MAXERROR 512 /* maximum length of error message string */
#define SYMBOLSIZE 256 /* maximum symbol name size */
#define MAXINDICES 20 /* maximum number of indices for objects */
#define MAXLABELS 100 /* maximum number of user labels in function */
#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 PROMPT1 "> " /* default normal prompt*/
#define PROMPT2 ">> " /* default prompt inside multi-line input */
@@ -95,152 +103,157 @@
/*
* File I/O routines.
*/
extern FILEID openid(char *name, char *mode);
extern FILEID indexid(long index);
extern BOOL validid(FILEID id);
extern BOOL errorid(FILEID id);
extern BOOL eofid(FILEID id);
extern int closeid(FILEID id);
extern int getcharid(FILEID id);
extern int idprintf(FILEID id, char *fmt, int count, VALUE **vals);
extern int idfputc(FILEID id, int ch);
extern int idfputs(FILEID id, char *str);
extern int printid(FILEID id, int flags);
extern int flushid(FILEID id);
extern int readid(FILEID id, int flags, char **retptr);
extern int getloc(FILEID id, ZVALUE *loc);
extern int setloc(FILEID id, ZVALUE zpos);
extern int getsize(FILEID id, ZVALUE *size);
extern int get_device(FILEID id, ZVALUE *dev);
extern int get_inode(FILEID id, ZVALUE *ino);
extern FILEID reopenid(FILEID id, char *mode, char *name);
extern int closeall(void);
extern int flushall(void);
extern int idfputstr(FILEID id, char *str);
extern int rewindid(FILEID id);
extern void rewindall(void);
extern ZVALUE zfilesize(FILEID id);
extern void showfiles(void);
extern int fscanfid(FILEID id, char *fmt, int count, VALUE **vals);
extern int scanfstr(char *str, char *fmt, int count, VALUE **vals);
extern int ftellid(FILEID id, ZVALUE *res);
extern int fseekid(FILEID id, ZVALUE offset, int whence);
extern int isattyid(FILEID id);
extern int fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res);
extern int frsearch(FILEID id, char *str, ZVALUE first, ZVALUE last, ZVALUE *res);
extern void showconstants(void);
extern void freeconstant(unsigned long);
extern void freestringconstant(long);
extern void trimconstants(void);
extern DLL FILEID openid(char *name, char *mode);
extern DLL FILEID indexid(long index);
extern DLL BOOL validid(FILEID id);
extern DLL BOOL errorid(FILEID id);
extern DLL BOOL eofid(FILEID id);
extern DLL int closeid(FILEID id);
extern DLL int getcharid(FILEID id);
extern DLL int idprintf(FILEID id, char *fmt, int count, VALUE **vals);
extern DLL int idfputc(FILEID id, int ch);
extern DLL int idfputs(FILEID id, char *str);
extern DLL int printid(FILEID id, int flags);
extern DLL int flushid(FILEID id);
extern DLL int readid(FILEID id, int flags, char **retptr);
extern DLL int getloc(FILEID id, ZVALUE *loc);
extern DLL int setloc(FILEID id, ZVALUE zpos);
extern DLL int getsize(FILEID id, ZVALUE *size);
extern DLL int get_device(FILEID id, ZVALUE *dev);
extern DLL int get_inode(FILEID id, ZVALUE *ino);
extern DLL FILEID reopenid(FILEID id, char *mode, char *name);
extern DLL int closeall(void);
#if !defined(_WIN32)
extern DLL int flushall(void);
#endif
extern DLL int idfputstr(FILEID id, char *str);
extern DLL int rewindid(FILEID id);
extern DLL void rewindall(void);
extern DLL ZVALUE zfilesize(FILEID id);
extern DLL void showfiles(void);
extern DLL int fscanfid(FILEID id, char *fmt, int count, VALUE **vals);
extern DLL int scanfstr(char *str, char *fmt, int count, VALUE **vals);
extern DLL int ftellid(FILEID id, ZVALUE *res);
extern DLL int fseekid(FILEID id, ZVALUE offset, int whence);
extern DLL int isattyid(FILEID id);
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.
*/
extern int openstring(char *str, long num);
extern int openterminal(void);
extern int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
extern char *nextline(void);
extern int nextchar(void);
extern void reread(void);
extern void resetinput(void);
extern void setprompt(char *);
extern BOOL inputisterminal(void);
extern int inputlevel(void);
extern long calclevel(void);
extern char *inputname(void);
extern long linenumber(void);
extern void runrcfiles(void);
extern void closeinput(void);
extern DLL int openstring(char *str, long num);
extern DLL int openterminal(void);
extern DLL int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
extern DLL char *nextline(void);
extern DLL int nextchar(void);
extern DLL void reread(void);
extern DLL void resetinput(void);
extern DLL void setprompt(char *);
extern DLL BOOL inputisterminal(void);
extern DLL int inputlevel(void);
extern DLL long calclevel(void);
extern DLL char *inputname(void);
extern DLL long linenumber(void);
extern DLL void runrcfiles(void);
extern DLL void closeinput(void);
/*
* Other routines.
*/
extern NUMBER *constvalue(unsigned long index);
extern long addnumber(char *str);
extern long addqconstant(NUMBER *q);
extern void initstack(void);
extern void getcommands(BOOL toplevel);
extern void givehelp(char *type);
extern void libcalc_call_me_first(void);
extern void libcalc_call_me_last(void);
extern BOOL calc_tty(int fd);
extern BOOL orig_tty(int fd);
extern void showerrors(void);
extern char *calc_strdup(CONST char *);
extern void getshellfile(char *shellfile);
extern DLL NUMBER *constvalue(unsigned long index);
extern DLL long addnumber(char *str);
extern DLL long addqconstant(NUMBER *q);
extern DLL void initstack(void);
extern DLL void getcommands(BOOL toplevel);
extern DLL void givehelp(char *type);
extern DLL void libcalc_call_me_first(void);
extern DLL void libcalc_call_me_last(void);
extern DLL BOOL calc_tty(int fd);
extern DLL BOOL orig_tty(int fd);
extern DLL void showerrors(void);
extern DLL char *calc_strdup(CONST char *);
/*
* Initialization
*/
extern void initialize(void);
extern void reinitialize(void);
extern int isatty(int tty); /* TRUE if fd is a tty */
extern char *version(void); /* return version string */
extern int post_init; /* TRUE => setjmp for math_error is ready */
extern DLL void initialize(void);
extern DLL void reinitialize(void);
#if !defined (_WIN32)
extern DLL int isatty(int tty); /* TRUE if fd is a tty */
#endif
extern DLL char *version(void); /* return version string */
extern DLL int post_init; /* TRUE => math_error setjmp is ready */
/*
* global flags and definitions
*/
extern int abortlevel; /* current level of aborts */
extern BOOL inputwait; /* TRUE if in a terminal input wait */
extern jmp_buf jmpbuf; /* for errors */
extern DLL int abortlevel; /* current level of aborts */
extern DLL BOOL inputwait; /* TRUE if in a terminal input wait */
extern DLL jmp_buf jmpbuf; /* for errors */
extern int p_flag; /* TRUE => pipe mode */
extern int q_flag; /* TRUE => don't execute rc files */
extern int u_flag; /* TRUE => unbuffer stdin and stdout */
extern int d_flag; /* TRUE => disable heading, resource_debug */
extern int c_flag; /* TRUE => continue after error if permitted */
extern int i_flag; /* TRUE => try to go interactive after error */
extern int s_flag; /* TRUE => keep args as strings for argv() */
extern int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
extern BOOL abort_now; /* TRUE => try to go interactive */
extern DLL int p_flag; /* TRUE => pipe mode */
extern DLL int q_flag; /* TRUE => don't execute rc files */
extern DLL int u_flag; /* TRUE => unbuffer stdin and stdout */
extern DLL int d_flag; /* TRUE => disable heading, resource_debug */
extern DLL int c_flag; /* TRUE => continue after error if permitted */
extern DLL int i_flag; /* TRUE => try to go interactive after error */
extern DLL int s_flag; /* TRUE => keep args as strings for argv() */
extern DLL int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
extern DLL BOOL abort_now; /* TRUE => try to go interactive */
extern int argc_value; /* count of argv[] strings for argv() builtin */
extern char **argv_value; /* argv[] strings for argv() builtin */
extern DLL int argc_value; /* count of argv[] strings for argv() builtin */
extern DLL char **argv_value; /* argv[] strings for argv() builtin */
extern char *pager; /* $PAGER or default */
extern int stdin_tty; /* TRUE if stdin is a tty */
extern int havecommands; /* TRUE if have cmd args) */
extern char *program; /* our name */
extern char *base_name; /* basename of our name */
extern char cmdbuf[]; /* command line expression */
extern DLL char *pager; /* $PAGER or default */
extern DLL int stdin_tty; /* TRUE if stdin is a tty */
extern DLL int havecommands; /* TRUE if have cmd args) */
extern DLL char *program; /* our name */
extern DLL char *base_name; /* basename of our name */
extern DLL char cmdbuf[]; /* command line expression */
extern int abortlevel; /* current level of aborts */
extern BOOL inputwait; /* TRUE if in a terminal input wait */
extern VALUE *stack; /* execution stack */
extern int dumpnames; /* TRUE => dump names rather than indices */
extern DLL int abortlevel; /* current level of aborts */
extern DLL BOOL inputwait; /* TRUE if in a terminal input wait */
extern DLL VALUE *stack; /* execution stack */
extern DLL int dumpnames; /* TRUE => dump names rather than indices */
extern char *calcpath; /* $CALCPATH or default */
extern char *calcrc; /* $CALCRC or default */
extern char *calcbindings; /* $CALCBINDINGS or default */
extern char *home; /* $HOME or default */
extern char *shell; /* $SHELL or default */
extern char *program; /* our name (argv[0]) */
extern DLL char *calcpath; /* $CALCPATH or default */
extern DLL char *calcrc; /* $CALCRC or default */
extern DLL char *calcbindings; /* $CALCBINDINGS or default */
extern DLL char *home; /* $HOME or default */
extern DLL char *shell; /* $SHELL or default */
extern DLL char *program; /* our name (argv[0]) */
extern int no_env; /* TRUE (-e) => ignore env vars on startup */
extern int errmax; /* if >= 0, error when errcount exceeds errmax */
extern int new_std; /* TRUE (-n) => use newstd configuration */
extern DLL int no_env; /* TRUE (-e) => ignore env vars on startup */
extern DLL int errmax; /* if >= 0, error when errcount exceeds errmax */
extern DLL int use_old_std; /* TRUE (-O) => use classic configuration */
extern int allow_read; /* FALSE => may not open any files for reading */
extern int allow_write; /* FALSE => may not open any files for writing */
extern int allow_exec; /* FALSE => may not execute any commands */
extern DLL int allow_read; /* FALSE => dont open any files for reading */
extern DLL int allow_write; /* FALSE => dont open any files for writing */
extern DLL int allow_exec; /* FALSE => may not execute any commands */
/*
* calc startup and run state
*/
typedef enum {
RUN_UNKNOWN = -1, /* unknown or unset start state */
RUN_BEGIN = 0, /* calc execution starts */
RUN_RCFILES = 1, /* rc files being evaluated */
RUN_PRE_CMD_ARGS = 2, /* prepare to evaluate cmd args */
RUN_CMD_ARGS = 3, /* cmd args being evaluated */
RUN_PRE_TOP_LEVEL = 4, /* prepare to start top level activity */
RUN_TOP_LEVEL = 5, /* running at top level */
RUN_EXIT = 6, /* normal exit from calc */
RUN_EXIT_WITH_ERROR = 7 /* exit with error */
RUN_ZERO, /* unknown or unset start state */
RUN_BEGIN, /* calc execution starts */
RUN_RCFILES, /* rc files being evaluated */
RUN_PRE_CMD_ARGS, /* prepare to evaluate cmd args */
RUN_CMD_ARGS, /* cmd args being evaluated */
RUN_PRE_TOP_LEVEL, /* prepare to start top level activity */
RUN_TOP_LEVEL, /* running at top level */
RUN_EXIT, /* normal exit from calc */
RUN_EXIT_WITH_ERROR /* exit with error */
} run;
extern run run_state;
extern char *run_state_name(run state);
extern DLL run run_state;
extern DLL char *run_state_name(run state);
/*
* calc version information
@@ -249,9 +262,9 @@ extern char *run_state_name(run state);
extern int calc_major_ver;
extern int calc_minor_ver;
extern int calc_major_patch;
extern char *calc_minor_patch;
extern int calc_minor_patch;
extern char *Copyright;
extern char *version(void);
extern DLL char *version(void);
#endif /* !__CALC_H__ */

153
calc.man
View File

@@ -15,15 +15,15 @@
.\" 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: calc.man,v 29.4 1999/12/17 10:06:31 chongo Exp $
.\" @(#) $Revision: 29.12 $
.\" @(#) $Id: calc.man,v 29.12 2004/02/23 05:21:24 chongo Exp $
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
.\"
.\" Under source code control: 1991/07/23 05:48:26
.\" File existed as early as: 1991
.\"
.\" chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
.\" Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
.\" chongo <was here> /\oo/\ http://www.isthe.com/chongo/
.\" Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
.\"
.\" calculator by David I. Bell
.\" man page by Landon Noll
@@ -36,24 +36,25 @@ calc \- arbitrary precision calculator
.RB [ \-c ]
.RB [ \-C ]
.RB [ \-d ]
.RB [ -D\ \&calc_debug[:resource_debug[:user_debug]] ]
.br
.in +5n
.RB [ -D\ \&calc_debug[:resource_debug[:user_debug]] ]
.br
.RB [ \-e ]
.RB [ \-h ]
.RB [ \-i ]
.RB [ \-m\ \&mode ]
.RB [ \-n ]
.RB [ \-O ]
.br
.RB [ \-p ]
.RB [ \-q ]
.RB [ \-s ]
.RB [ \-u ]
.RB [ \-v ]
.br
.RB [ calc_cmd\ \&.\|.\|. ]
.in -5n
.sp
\fI#!${BINDIR}/calc\fP\ \fB\-S\fP\ [other_flags\ \&...]
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP\
.SH DESCRIPTION
\&
.br
@@ -301,11 +302,22 @@ The reading of key bindings is also disabled
when the mode disables opening of files for reading.
.TP
.B \-n
Use the new configuration defaults instead of the old
default classic defaults.
.B \-O
Use the old classic defaults instead of the
default configuration.
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
.B \-p
@@ -513,8 +525,8 @@ searches in succession:
./myfile.cal
${LIBDIR}/myfile
${LIBDIR}/myfile.cal
${CUSTOMLIBDIR}/myfile
${CUSTOMLIBDIR}/myfile.cal
${CUSTOMCALDIR}/myfile
${CUSTOMCALDIR}/myfile.cal
.fi
.in -5n
.sp 1
@@ -571,27 +583,25 @@ If first line of an executable file begins
followed by the absolute pathname of the
.B calc
program and the flag
.B \-S
.B \-f
as in:
.sp 1
.in +5n
.nf
\fI#!${BINDIR}/calc\fP\ \fB\-S\fP\ [other_flags\ \&...]
\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" .
Note that
.B \-S
(UPPER CASE
.BR \-S )
.B \-f
must be the first \-flag on the ``#!'' line.
Any other optional
.B "other_flags"
must come after
the
.BR \-S .
.BR \-f .
.sp 1
In
.B "shell script mode"
@@ -624,7 +634,7 @@ the file
.sp 1
.in +5n
.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
@@ -838,7 +848,7 @@ ${LIBDIR}/bindings
non-GNU-readline command line editor bindings
.sp 1
.TP 5
${INCDIRCALC}/*.h
${CALC_INCDIR}/*.h
include files for C interface use
.sp 1
.TP 5
@@ -850,7 +860,7 @@ ${LIBDIR}/libcustcalc.a
custom binary link library
.sp 1
.TP 5
${CUSTOMLIBDIR}/*.cal
${CUSTOMCALDIR}/*.cal
custom resource files
.sp 1
.TP 5
@@ -993,36 +1003,78 @@ Copyright (C) 1999 Landon Curt Noll
and is covered under version 2.1 GNU Lesser General
Public License.
.sp
.SH "BUG REPORTS / BUG FIXES / ENHANCEMENTS"
.SH "CALC MAILING LIST / CALC UPDATES / ENHANCEMENTS"
\&
.br
.sp
Send comments, suggestions, bug fixes, enhancements
To contribute comments, suggestions, enhancements
and interesting
.B calc
resource files,
.B calc
shell scripts that you would like you see included
in future distributions to:
resource files, and
shell scripts please join the low volume calc mailing list.
.sp
To join the low volume calc mailing list, send EMail to:
.sp
.in +0.5i
.nf
calc-tester at postofc dot corp dot sgi dot com
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
calc-tester-request at asthe dot com
.fi
.in -0.5i
.sp
Bug reports are sent to:
Your subject must contain the words:
.sp
.in +0.5i
.nf
calc-bugs at postofc dot corp dot sgi dot com
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
calc mailing list subscription
.fi
.in -0.5i
.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
.I BUGS
source file or use the
@@ -1037,7 +1089,7 @@ help bugs
.sp
for more information about bug reporting.
.sp
.SH "CALC WEB SITE / MAILING LIST"
.SH "CALC WEB SITE"
\&
.br
Landon Noll maintains the the
@@ -1045,32 +1097,7 @@ Landon Noll maintains the the
web site is located at:
.sp
.in +0.5i
http://reality.sgi.com/chongo/tech/comp/calc/
www.isthe.com/chongo/tech/comp/calc/
.in -0.5i
.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! :\-)

116
calc.spec.in Normal file
View File

@@ -0,0 +1,116 @@
#****h* calc/calc.spec.in
#
# calc.spec.in - template specfile for calc
#
# Copyright (C) 2003 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.12 $
# @(#) $Id: calc.spec.in,v 29.12 2003/04/15 03:37:59 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 subdird. 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 prototyper and mathematical research
tool. Calc comes with a rich set of builtin mathematical and
programmatic functions.
For the latest calc release, see the 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
%files devel
%defattr(-, root, root)
%doc BUGS COPYING COPYING-LGPL LIBRARY
%attr(644, root, root) %{_includedir}/calc/*
%attr(644, root, root) %{_libdir}/*.a
%changelog
* 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
#****

View File

@@ -17,14 +17,14 @@
# 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: calcerr.tbl,v 29.1 1999/12/14 09:15:35 chongo Exp $
# @(#) $Revision: 29.4 $
# @(#) $Id: calcerr.tbl,v 29.4 2001/04/10 22:06:46 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
#
# Under source code control: 1996/05/23 17:38:44
# 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.
#
@@ -108,8 +108,8 @@ E_FGETSTR1 Non-file first argument for fgetstr
E_FGETSTR2 File not open for reading for fgetstr
E_FGETLINE1 Non-file argument for fgetline
E_FGETLINE2 File not open for reading for fgetline
E_FGETWORD1 Non-file argument for fgetword
E_FGETWORD2 File not open for reading for fgetword
E_FGETFIELD1 Non-file argument for fgetfield
E_FGETFIELD2 File not open for reading for fgetfield
E_REWIND1 Non-file argument for rewind
E_FILES Non-integer argument for files
E_PRINTF1 Non-string fmt argument for fprint
@@ -375,3 +375,21 @@ E_GD3 Infinite or too-large result for gd
E_AGD3 Infinite or too-large result for agd
E_POWER4 Too-large value for power
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

View File

@@ -18,15 +18,15 @@
# 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: calcerr_c.awk,v 29.1 1999/12/14 09:15:35 chongo Exp $
# @(#) $Revision: 29.2 $
# @(#) $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 $
#
# Under source code control: 1996/05/24 03:15:35
# File existed as early as: 1996
#
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
#
BEGIN {
printf("#include <stdio.h>\n");

View File

@@ -18,15 +18,15 @@
# 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: calcerr_c.sed,v 29.1 1999/12/14 09:15:35 chongo Exp $
# @(#) $Revision: 29.2 $
# @(#) $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 $
#
# Under source code control: 1996/05/24 03:15:35
# File existed as early as: 1996
#
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
#
s/#.*//
s/[ ][ ]*$//

View File

@@ -18,15 +18,15 @@
# 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: calcerr_h.awk,v 29.1 1999/12/14 09:15:35 chongo Exp $
# @(#) $Revision: 29.2 $
# @(#) $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 $
#
# Under source code control: 1996/05/23 17:38:44
# File existed as early as: 1996
#
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
#
BEGIN {
ebase = 10000;

View File

@@ -18,15 +18,15 @@
# 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: calcerr_h.sed,v 29.1 1999/12/14 09:15:35 chongo Exp $
# @(#) $Revision: 29.2 $
# @(#) $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 $
#
# Under source code control: 1996/05/23 17:38:44
# File existed as early as: 1996
#
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
#
s/#.*//
s/[ ][ ]*$//

View File

@@ -18,15 +18,15 @@
# 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: check.awk,v 29.1 1999/12/14 09:15:35 chongo Exp $
# @(#) $Revision: 29.2 $
# @(#) $Id: check.awk,v 29.2 2000/06/07 14:02:13 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $
#
# Under source code control: 1996/05/25 22:07:58
# File existed as early as: 1996
#
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# 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
# does not begin with a number. This allows the 'make debug' rule to remove

18
cmath.h
View File

@@ -17,14 +17,14 @@
* 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: cmath.h,v 29.1 1999/12/14 09:15:35 chongo Exp $
* @(#) $Revision: 29.6 $
* @(#) $Id: cmath.h,v 29.6 2002/03/12 09:38:26 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/cmath.h,v $
*
* Under source code control: 1993/07/30 19:42:45
* 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__
#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,6 +62,7 @@ extern void cprintfr(COMPLEX *c);
/*
* Basic numeric routines.
*/
extern COMPLEX *cadd(COMPLEX *c1, COMPLEX *c2);
extern COMPLEX *csub(COMPLEX *c1, COMPLEX *c2);
extern COMPLEX *cmul(COMPLEX *c1, COMPLEX *c2);
@@ -70,8 +75,8 @@ extern COMPLEX *cscale(COMPLEX *c, long i);
extern COMPLEX *cshift(COMPLEX *c, long i);
extern COMPLEX *csquare(COMPLEX *c);
extern COMPLEX *cconj(COMPLEX *c);
extern COMPLEX *creal(COMPLEX *c);
extern COMPLEX *cimag(COMPLEX *c);
extern COMPLEX *c_real(COMPLEX *c);
extern COMPLEX *c_imag(COMPLEX *c);
extern COMPLEX *cneg(COMPLEX *c);
extern COMPLEX *cinv(COMPLEX *c);
extern COMPLEX *cint(COMPLEX *c);
@@ -83,6 +88,7 @@ extern BOOL ccmp(COMPLEX *c1, COMPLEX *c2);
* More complicated functions.
*/
extern COMPLEX *cpowi(COMPLEX *c, NUMBER *q);
extern NUMBER *cilog(COMPLEX *c, ZVALUE base);
/*

449
codegen.c
View File

@@ -19,14 +19,14 @@
* 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: codegen.c,v 29.1 1999/12/14 09:15:35 chongo Exp $
* @(#) $Revision: 29.8 $
* @(#) $Id: codegen.c,v 29.8 2004/02/23 05:39:35 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $
*
* Under source code control: 1990/02/15 01:48:13
* 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/
*/
@@ -45,11 +45,15 @@
#include "func.h"
#include "conf.h"
#if defined(_WIN32) && !defined(__CYGWIN__)
# include <direct.h>
#endif
static BOOL rdonce; /* TRUE => do not reread this file */
FUNC *curfunc;
static BOOL getfilename(char *name, BOOL msg_ok, BOOL *once);
static int getfilename(char *name, BOOL *once);
static BOOL getid(char *buf);
static void getshowstatement(void);
static void getfunction(void);
@@ -71,7 +75,7 @@ static void getsimplebody(void);
static void getcondition(void);
static void getmatargs(void);
static void getelement(void);
static void usesymbol(char *name, BOOL autodef);
static void usesymbol(char *name, int autodef);
static void definesymbol(char *name, int symtype);
static void getcallargs(char *name);
static void do_changedir(void);
@@ -90,9 +94,16 @@ static int getshiftexpr(void);
static int getreference(void);
static int getincdecexpr(void);
static int getterm(void);
static int getidexpr(BOOL okmat, BOOL autodef);
static int getidexpr(BOOL okmat, int autodef);
static long getinitlist(void);
#define INDICALLOC 8
static int quickindices[INDICALLOC];
static int * newindices;
static int * indices;
static int maxindices;
/*
* Read all the commands from an input file.
@@ -116,6 +127,7 @@ getcommands(BOOL toplevel)
if (!toplevel)
enterfilescope();
for (;;) {
int i;
(void) tokenmode(TM_NEWLINES);
switch (gettoken()) {
@@ -133,49 +145,67 @@ getcommands(BOOL toplevel)
return;
case T_HELP:
if (!getfilename(name, FALSE, NULL)) {
strcpy(name, DEFAULTCALCHELP);
for (i=1;;i++) {
switch(getfilename(name, NULL)) {
case -1:
if(i == 1) {
strcpy(name, DEFAULTCALCHELP);
givehelp(name);
}
break;
case 0:
givehelp(name);
continue;
default:
break;
}
break;
}
givehelp(name);
break;
case T_READ:
if (!getfilename(name, TRUE, &rdonce))
break;
if (!allow_read) {
scanerror(T_NULL,
"read command disallowed by -m mode\n");
break;
}
switch (opensearchfile(name,calcpath,CALCEXT,rdonce)) {
case 0:
getcommands(FALSE);
closeinput();
break;
case 1:
/* previously read and -once was given */
break;
case -2:
scanerror(T_NULL,
"Maximum input depth reached");
break;
default:
scanerror(T_NULL, "Cannot open \"%s\"\n", name);
for (;;) {
if (getfilename(name, &rdonce))
break;
switch (opensearchfile(name,calcpath,
CALCEXT,rdonce)) {
case 0:
getcommands(FALSE);
closeinput();
continue;
case 1:
/* prev read and -once was given */
continue;
case -2:
scanerror(T_NULL,
"Maximum input depth reached");
break;
default:
scanerror(T_NULL,
"Cannot open \"%s\"", name);
continue;
}
break;
}
break;
case T_WRITE:
if (!getfilename(name, TRUE, NULL))
break;
if (!allow_write) {
scanerror(T_NULL,
"write command disallowed by -m mode\n");
break;
}
if (writeglobals(name))
if (getfilename(name, NULL))
break;
if (writeglobals(name)) {
scanerror(T_NULL,
"Error writing \"%s\"\n", name);
}
break;
case T_CD:
@@ -497,9 +527,10 @@ getsimpledeclaration(int symtype)
switch (gettoken()) {
case T_SYMBOL:
rescantoken();
res = getonevariable(symtype);
if (res)
if (getonevariable(symtype)) {
res = 1;
addop(OP_POP);
}
continue;
case T_COMMA:
continue;
@@ -529,7 +560,7 @@ getonevariable(int symtype)
res = getonevariable(symtype);
definesymbol(name, symtype);
if (res) {
usesymbol(name, FALSE);
usesymbol(name, 0);
addop(OP_ASSIGNBACK);
}
return res;
@@ -892,7 +923,7 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
return;
case T_ELSE:
scanerror(T_SEMICOLON, "ELSE without preceeding IF");
scanerror(T_SEMICOLON, "ELSE without preceding IF");
return;
case T_SHOW:
@@ -1021,7 +1052,6 @@ getobjdeclaration(int symtype)
int count; /* number of elements */
int index; /* current index */
int i; /* loop counter */
int indices[MAXINDICES]; /* indices for elements */
int oldmode;
if (gettoken() != T_SYMBOL) {
@@ -1038,58 +1068,89 @@ getobjdeclaration(int symtype)
* Read in the definition of the elements of the object.
*/
count = 0;
indices = quickindices;
maxindices = INDICALLOC;
oldmode = tokenmode(TM_DEFAULT);
for (;;) {
switch (gettoken()) {
case T_SYMBOL:
if (count == MAXINDICES) {
scanerror(T_SEMICOLON,
"Too many elements in OBJ "
"statement");
(void) tokenmode(oldmode);
return;
}
index = addelement(tokensymbol());
for (i = 0; i < count; i++) {
if (indices[i] == index) {
scanerror(T_SEMICOLON,
"Duplicate element name "
"\"%s\"", tokensymbol());
case T_SYMBOL:
if (count == maxindices) {
if (maxindices == INDICALLOC) {
maxindices += INDICALLOC;
newindices = (int *) malloc(maxindices *
sizeof(int));
if (newindices == NULL) {
scanerror(T_SEMICOLON, "Out of memory for indices malloc");
(void) tokenmode(oldmode);
return;
}
memcpy(newindices, quickindices,
INDICALLOC * sizeof(int));
indices = newindices;
} else {
maxindices += INDICALLOC;
newindices = (int *) realloc(indices,
maxindices * sizeof(int));
if (newindices == NULL) {
free(indices);
scanerror(T_SEMICOLON, "Out of memory for indices realloc");
(void) tokenmode(oldmode);
return;
}
indices = newindices;
}
indices[count++] = index;
if (gettoken() == T_COMMA)
continue;
rescantoken();
if (gettoken() != T_RIGHTBRACE) {
scanerror(T_SEMICOLON,
"Bad object type definition");
}
index = addelement(tokensymbol());
for (i = 0; i < count; i++) {
if (indices[i] == index) {
if (indices != quickindices)
free(indices);
scanerror(T_SEMICOLON, "Duplicate element name \"%s\"", tokensymbol());
(void) tokenmode(oldmode);
return;
}
/*FALLTHRU*/
case T_RIGHTBRACE:
(void) tokenmode(oldmode);
if (defineobject(name, indices, count)) {
scanerror(T_NULL,
"Object type \"%s\" is already defined", name);
return;
}
getobjvars(name, symtype);
return;
case T_NEWLINE:
}
indices[count++] = index;
if (gettoken() == T_COMMA)
continue;
default:
scanerror(T_SEMICOLON,
"Bad object type definition");
rescantoken();
if (gettoken() != T_RIGHTBRACE) {
if (indices != quickindices)
free(indices);
scanerror(T_SEMICOLON, "Bad object type definition");
(void) tokenmode(oldmode);
return;
}
/*FALLTHRU*/
case T_RIGHTBRACE:
(void) tokenmode(oldmode);
if (defineobject(name, indices, count)) {
if (indices != quickindices)
free(indices);
scanerror(T_NULL,
"Object type \"%s\" is already defined", name);
return;
}
if (indices != quickindices)
free(indices);
getobjvars(name, symtype);
return;
case T_NEWLINE:
continue;
default:
if (indices != quickindices)
free(indices);
scanerror(T_SEMICOLON, "Bad object type definition");
(void) tokenmode(oldmode);
return;
}
}
}
static void
getoneobj(long index, int symtype)
{
@@ -1098,11 +1159,11 @@ getoneobj(long index, int symtype)
if (gettoken() == T_SYMBOL) {
if (symtype == SYM_UNDEFINED) {
rescantoken();
(void) getidexpr(TRUE, TRUE);
(void) getidexpr(TRUE, 1);
} else {
symname = tokensymbol();
definesymbol(symname, symtype);
usesymbol(symname, FALSE);
usesymbol(symname, 0);
}
getoneobj(index, symtype);
addop(OP_ASSIGN);
@@ -1181,11 +1242,11 @@ getonematrix(int symtype)
if (gettoken() == T_SYMBOL) {
if (symtype == SYM_UNDEFINED) {
rescantoken();
(void) getidexpr(FALSE, TRUE);
(void) getidexpr(FALSE, 1);
} else {
name = tokensymbol();
definesymbol(name, symtype);
usesymbol(name, FALSE);
usesymbol(name, 0);
}
while (gettoken() == T_COMMA);
rescantoken();
@@ -1688,6 +1749,8 @@ getrelation(void)
rescantoken();
return type;
}
if (islvalue(type))
addop(OP_GETVALUE);
(void) getsum();
addop(op);
return EXPR_RVALUE;
@@ -1727,6 +1790,8 @@ getsum(void)
rescantoken();
return type;
}
if (islvalue(type))
addop(OP_GETVALUE);
(void) getproduct();
addop(op);
type = EXPR_RVALUE;
@@ -1756,6 +1821,8 @@ getproduct(void)
rescantoken();
return type;
}
if (islvalue(type))
addop(OP_GETVALUE);
(void) getorexpr();
addop(op);
type = EXPR_RVALUE;
@@ -1775,6 +1842,8 @@ getorexpr(void)
type = getandexpr();
while (gettoken() == T_OR) {
if (islvalue(type))
addop(OP_GETVALUE);
(void) getandexpr();
addop(OP_OR);
type = EXPR_RVALUE;
@@ -1806,6 +1875,8 @@ getandexpr(void)
rescantoken();
return type;
}
if (islvalue(type))
addop(OP_GETVALUE);
(void) getshiftexpr();
addop(op);
type = EXPR_RVALUE;
@@ -1858,6 +1929,8 @@ getshiftexpr(void)
rescantoken();
return type;
}
if (islvalue(type))
addop(OP_GETVALUE);
(void) getshiftexpr();
addop(op);
return EXPR_RVALUE;
@@ -2028,7 +2101,25 @@ getterm(void)
case T_SYMBOL:
rescantoken();
type = getidexpr(TRUE, FALSE);
type = getidexpr(TRUE, 0);
break;
case T_GLOBAL:
if (gettoken() != T_SYMBOL) {
scanerror(T_NULL, "Global id expected");
break;
}
rescantoken();
type = getidexpr(TRUE, T_GLOBAL);
break;
case T_LOCAL:
if (gettoken() != T_SYMBOL) {
scanerror(T_NULL, "Local id expected");
break;
}
rescantoken();
type = getidexpr(TRUE, T_LOCAL);
break;
case T_LEFTBRACKET:
@@ -2077,11 +2168,11 @@ getterm(void)
/*
* Read in an identifier expressions.
* This is a symbol name followed by parenthesis, or by square brackets or
* element refernces. The symbol can be a global or a local variable name.
* element references. The symbol can be a global or a local variable name.
* Returns the type of expression found.
*/
static int
getidexpr(BOOL okmat, BOOL autodef)
getidexpr(BOOL okmat, int autodef)
{
int type;
char name[SYMBOLSIZE+1]; /* symbol name */
@@ -2091,18 +2182,19 @@ getidexpr(BOOL okmat, BOOL autodef)
if (!getid(name))
return type;
switch (gettoken()) {
case T_LEFTPAREN:
oldmode = tokenmode(TM_DEFAULT);
getcallargs(name);
(void) tokenmode(oldmode);
type = 0;
break;
case T_ASSIGN:
autodef = TRUE;
/* fall into default case */
default:
rescantoken();
usesymbol(name, autodef);
case T_LEFTPAREN:
oldmode = tokenmode(TM_DEFAULT);
getcallargs(name);
(void) tokenmode(oldmode);
type = 0;
break;
case T_ASSIGN:
if (autodef != T_GLOBAL && autodef != T_LOCAL)
autodef = 1;
/* fall into default case */
default:
rescantoken();
usesymbol(name, autodef);
}
/*
* Now collect as many element references and matrix index operations
@@ -2110,27 +2202,27 @@ getidexpr(BOOL okmat, BOOL autodef)
*/
for (;;) {
switch (gettoken()) {
case T_LEFTBRACKET:
rescantoken();
if (!okmat)
return type;
getmatargs();
type = 0;
break;
case T_ARROW:
addop(OP_DEREF);
/*FALLTHRU*/
case T_PERIOD:
getelement();
type = 0;
break;
case T_LEFTPAREN:
scanerror(T_NULL,
"Function calls not allowed "
"as expressions");
default:
rescantoken();
case T_LEFTBRACKET:
rescantoken();
if (!okmat)
return type;
getmatargs();
type = 0;
break;
case T_ARROW:
addop(OP_DEREF);
/*FALLTHRU*/
case T_PERIOD:
getelement();
type = 0;
break;
case T_LEFTPAREN:
scanerror(T_NULL,
"Function calls not allowed "
"as expressions");
default:
rescantoken();
return type;
}
}
}
@@ -2144,71 +2236,37 @@ getidexpr(BOOL okmat, BOOL autodef)
*
* given:
* name filename to read
* msg_ok TRUE => ok to print error messages
* once non-NULL => set to TRUE of -once read
*/
static BOOL
getfilename(char *name, BOOL msg_ok, BOOL *once)
static int
getfilename(char *name, BOOL *once)
{
STRING *s;
int i;
/* look at the next token */
(void) tokenmode(TM_NEWLINES | TM_ALLSYMS);
switch (gettoken()) {
case T_STRING:
s = findstring(tokenstring());
strcpy(name, s->s_str);
sfree(s);
break;
case T_SYMBOL:
strcpy(name, tokensymbol());
break;
default:
if (msg_ok)
scanerror(T_SEMICOLON, "Filename expected");
return FALSE;
}
/* determine if we care about a possible -once option */
if (once != NULL) {
/* we care about a possible -once option */
if (strcmp(name, "-once") == 0) {
/* -once option found */
*once = TRUE;
/* look for the filename */
switch (gettoken()) {
case T_STRING:
s = findstring(tokenstring());
strcpy(name, s->s_str);
sfree(s);
break;
case T_SYMBOL:
strcpy(name, tokensymbol());
break;
default:
if (msg_ok)
scanerror(T_SEMICOLON,
"Filename expected");
return FALSE;
}
} else {
*once = FALSE;
for (i = 2; i > 0; i--) {
switch (gettoken()) {
case T_STRING:
s = findstring(tokenstring());
strcpy(name, s->s_str);
sfree(s);
break;
case T_SYMBOL:
strcpy(name, tokensymbol());
break;
default:
rescantoken();
return -1;
}
}
/* look at the next token */
switch (gettoken()) {
case T_SEMICOLON:
case T_NEWLINE:
case T_EOF:
break;
default:
if (msg_ok)
scanerror(T_SEMICOLON,
"Missing semicolon after filename");
return FALSE;
if (i == 2 && once != NULL) {
if ((*once = !strcmp(name, "-once")))
continue;
}
break;
}
return TRUE;
return 0;
}
@@ -2433,11 +2491,26 @@ definesymbol(char *name, int symtype)
*
* given:
* name symbol name to be checked
* autodef TRUE => define is symbol is not known
* autodef 1 => define if symbol is not known
* T_GLOBAL => get global, define if necessary
*/
static void
usesymbol(char *name, BOOL autodef)
usesymbol(char *name, int autodef)
{
if (autodef == T_GLOBAL) {
addopptr(OP_GLOBALADDR, (char *) addglobal(name, FALSE));
return;
}
if (autodef == T_LOCAL) {
if (symboltype(name) == SYM_PARAM) {
scanerror(T_COMMA,
"Variable \"%s\" is already defined", name);
return;
}
addopone(OP_LOCALADDR, addlocal(name));
return;
}
switch (symboltype(name)) {
case SYM_LOCAL:
addopone(OP_LOCALADDR, (long) findlocal(name));
@@ -2544,24 +2617,25 @@ static void
do_changedir(void)
{
char *p;
STRING *s;
/* look at the next token */
(void) tokenmode(TM_NEWLINES | TM_ALLSYMS);
/* determine the new directory */
s = NULL;
switch (gettoken()) {
case T_NULL:
case T_NEWLINE:
case T_SEMICOLON:
p = home;
break;
default:
p = tokensymbol(); /* This is not enough XXX */
if (p == NULL) {
case T_STRING:
s = findstring(tokenstring());
p = s->s_str;
break;
case T_SYMBOL:
p = tokensymbol();
break;
default:
p = home;
}
break;
}
if (p == NULL) {
fprintf(stderr, "Cannot determine HOME directory\n");
}
@@ -2570,29 +2644,8 @@ do_changedir(void)
if (chdir(p)) {
perror(p);
}
return;
if (s != NULL)
sfree(s);
}
/*
* getshellfile - process the contents of a shellfile
*/
void
getshellfile(char *shellfile)
{
/*
* treat the calc shell script as if we were reading it
*/
if (!allow_read) {
scanerror(T_NULL,
"reading of calc shell script \"%s\" "
"dislloaed by -m mode\n", shellfile);
} else if (opensearchfile(shellfile, NULL, NULL, FALSE) == 0) {
getcommands(FALSE);
closeinput();
} else {
scanerror(T_NULL,
"Cannot open calc shell script \"%s\"\n", shellfile);
}
return;
}

View File

@@ -19,14 +19,14 @@
* 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: comfunc.c,v 29.1 1999/12/14 09:15:35 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $Id: comfunc.c,v 29.3 2000/07/17 15:35:49 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/comfunc.c,v $
*
* Under source code control: 1990/02/15 01:48:13
* 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/
*/
@@ -1007,7 +1007,7 @@ cpolar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon)
long m, n;
if (qiszero(epsilon)) {
math_error("Zero epsilson for cpolar");
math_error("Zero epsilon for cpolar");
/*NOTREACHED*/
}
if (qiszero(q1))
@@ -1162,3 +1162,27 @@ cprintfr(COMPLEX *c)
zprintval(i->den, 0L, 0L);
}
}
NUMBER *
cilog(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;
}

View File

@@ -17,14 +17,14 @@
* 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: commath.c,v 29.1 1999/12/14 09:15:35 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $Id: commath.c,v 29.3 2002/03/12 09:38:26 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/commath.c,v $
*
* Under source code control: 1990/02/15 01:48:10
* 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/
*/
@@ -381,7 +381,7 @@ cconj(COMPLEX *c)
* Return the real part of a complex number.
*/
COMPLEX *
creal(COMPLEX *c)
c_real(COMPLEX *c)
{
COMPLEX *r;
@@ -400,7 +400,7 @@ creal(COMPLEX *c)
* Return the imaginary part of a complex number as a real.
*/
COMPLEX *
cimag(COMPLEX *c)
c_imag(COMPLEX *c)
{
COMPLEX *r;

367
config.c
View File

@@ -1,7 +1,7 @@
/*
* config - configuration routines
*
* Copyright (C) 1999 David I. Bell and Landon Curt Noll
* Copyright (C) 1999-2002 David I. Bell and Landon Curt Noll
*
* Primary author: David I. Bell
*
@@ -19,14 +19,14 @@
* 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: config.c,v 29.2 1999/12/14 19:37:46 chongo Exp $
* @(#) $Revision: 29.12 $
* @(#) $Id: config.c,v 29.12 2004/02/23 05:59:50 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
*
* Under source code control: 1991/07/20 00:21:56
* 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/
*/
@@ -51,6 +51,7 @@
NAMETYPE configs[] = {
{"all", CONFIG_ALL},
{"mode", CONFIG_MODE},
{"mode2", CONFIG_MODE2},
{"display", CONFIG_DISPLAY},
{"epsilon", CONFIG_EPSILON},
/*epsilonprec -- tied to epsilon not a configuration type*/
@@ -90,6 +91,8 @@ NAMETYPE configs[] = {
{"ctrl-d", CONFIG_CTRL_D}, /* alias for ctrl_d */
{"program", CONFIG_PROGRAM},
{"basename", CONFIG_BASENAME},
{"windows", CONFIG_WINDOWS},
{"cygwin", CONFIG_CYGWIN},
{"version", CONFIG_VERSION},
{NULL, 0}
};
@@ -100,6 +103,7 @@ NAMETYPE configs[] = {
*/
CONFIG oldstd = { /* backward compatible standard configuration */
MODE_INITIAL, /* current output mode */
MODE2_INITIAL, /* current secondary output mode */
20, /* current output digits for float or exp */
NULL, /* loaded in at startup - default error for real functions */
EPSILONPREC_DEFAULT, /* binary precision of epsilon */
@@ -109,10 +113,10 @@ CONFIG oldstd = { /* backward compatible standard configuration */
SQ_ALG2, /* size of number to use square alg 2 */
POW_ALG2, /* size of modulus to use REDC for powers */
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 */
0, /* quomod() default rounding mode */
2, /* quotent // default rounding mode */
2, /* quotient // default rounding mode */
0, /* mod % default rounding mode */
24, /* sqrt() default rounding mode */
24, /* appr() default rounding mode */
@@ -132,27 +136,38 @@ CONFIG oldstd = { /* backward compatible standard configuration */
0, /* internal calc debug level */
3, /* calc resource file 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 */
NULL, /* 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
NULL /* version */
};
CONFIG newstd = { /* new non-backward compatible configuration */
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 */
NEW_EPSILONPREC_DEFAULT, /* binary precision of epsilon */
EPSILONPREC_DEFAULT, /* binary precision of epsilon */
FALSE, /* tracing flags */
MAXPRINT_DEFAULT, /* number of elements to print */
MUL_ALG2, /* size of number to use multiply alg 2 */
SQ_ALG2, /* size of number to use square alg 2 */
POW_ALG2, /* size of modulus to use REDC for powers */
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 */
0, /* quomod() default rounding mode */
0, /* quotent // default rounding mode */
2, /* quotient // default rounding mode */
0, /* mod % default rounding mode */
24, /* sqrt() default rounding mode */
24, /* appr() default rounding mode */
@@ -161,7 +176,7 @@ CONFIG newstd = { /* new non-backward compatible configuration */
24, /* output default rounding mode */
24, /* round()/bround() default rounding mode */
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 */
"; ", /* normal prompt */
";; ", /* prompt when inside multi-line input */
@@ -172,10 +187,20 @@ CONFIG newstd = { /* new non-backward compatible configuration */
0, /* internal calc debug level */
3, /* calc resource file 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 */
NULL, /* 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
NULL /* version */
};
CONFIG *conf = NULL; /* loaded in at startup - current configuration */
@@ -201,6 +226,7 @@ static NAMETYPE modes[] = {
{"oct", MODE_OCTAL},
{"binary", MODE_BINARY},
{"bin", MODE_BINARY},
{"off", MODE2_OFF},
{NULL, 0}
};
@@ -287,10 +313,11 @@ static NAMETYPE truth[] = {
/*
* declate static functions
* declare static functions
*/
static long lookup_long(NAMETYPE *set, char *name);
static char *lookup_name(NAMETYPE *set, long val);
static int getlen(VALUE *vp, LEN *lp);
/*
@@ -360,6 +387,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.
* An error is generated if the type number or value is illegal.
@@ -370,6 +417,7 @@ setconfig(int type, VALUE *vp)
NUMBER *q;
CONFIG *newconf; /* new configuration to set */
long temp;
LEN len;
char *p;
switch (type) {
@@ -414,15 +462,11 @@ setconfig(int type, VALUE *vp)
break;
case CONFIG_DISPLAY:
if (vp->v_type != V_NUM) {
math_error("Non-numeric for display");
if (getlen(vp, &len)) {
math_error("Bad value for display");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q) || !zistiny(q->num))
temp = -1;
math_setdigits(temp);
math_setdigits(len);
break;
case CONFIG_MODE:
@@ -438,6 +482,19 @@ setconfig(int type, VALUE *vp)
math_setmode((int) temp);
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:
if (vp->v_type != V_NUM) {
math_error("Non-numeric for epsilon");
@@ -447,91 +504,51 @@ setconfig(int type, VALUE *vp)
break;
case CONFIG_MAXPRINT:
if (vp->v_type != V_NUM) {
math_error("Non-numeric for maxprint");
if (getlen(vp, &len)) {
math_error("Bad value for maxprint");
/*NOTREACHED*/
}
q = vp->v_num;
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;
conf->maxprint = len;
break;
case CONFIG_MUL2:
if (vp->v_type != V_NUM) {
math_error("Non-numeric for mul2");
if (getlen(vp, &len)) {
math_error("Bad value for mul2");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q))
temp = -1;
if (temp == 0)
temp = MUL_ALG2;
if (temp < 2) {
math_error("Illegal mul2 value");
/*NOTREACHED*/
}
conf->mul2 = (int)temp;
if (len == 0)
len = MUL_ALG2;
conf->mul2 = len;
break;
case CONFIG_SQ2:
if (vp->v_type != V_NUM) {
math_error("Non-numeric for sq2");
if (getlen(vp, &len)) {
math_error("Bad value for sq2");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q))
temp = -1;
if (temp == 0)
temp = SQ_ALG2;
if (temp < 2) {
math_error("Illegal sq2 value");
/*NOTREACHED*/
}
conf->sq2 = (int)temp;
if (len == 0)
len = SQ_ALG2;
conf->sq2 = len;
break;
case CONFIG_POW2:
if (vp->v_type != V_NUM) {
math_error("Non-numeric for pow2");
if (getlen(vp, &len)) {
math_error("Bad value for pow2");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q))
temp = -1;
if (temp == 0)
temp = POW_ALG2;
if (temp < 1) {
math_error("Illegal pow2 value");
/*NOTREACHED*/
}
conf->pow2 = (int)temp;
if (len == 0)
len = POW_ALG2;
conf->pow2 = len;
break;
case CONFIG_REDC2:
if (vp->v_type != V_NUM) {
math_error("Non-numeric for redc2");
if (getlen(vp, &len)) {
math_error("Bad value for redc2");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q))
temp = -1;
if (temp == 0)
temp = REDC_ALG2;
if (temp < 1) {
math_error("Illegal redc2 value");
/*NOTREACHED*/
}
conf->redc2 = (int)temp;
if (len == 0)
len = REDC_ALG2;
conf->redc2 = len;
break;
case CONFIG_TILDE:
@@ -563,129 +580,75 @@ setconfig(int type, VALUE *vp)
break;
case CONFIG_QUOMOD:
if (vp->v_type != V_NUM) {
math_error("Non numeric for quomod");
if (getlen(vp, &len)) {
math_error("Illegal value for quomod");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
math_error("Illegal quomod parameter value");
/*NOTREACHED*/
}
conf->quomod = temp;
conf->quomod = len;
break;
case CONFIG_QUO:
if (vp->v_type != V_NUM) {
math_error("Non numeric for quo");
if (getlen(vp, &len)) {
math_error("Illegal value for quo");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
math_error("Illegal quo parameter value");
/*NOTREACHED*/
}
conf->quo = temp;
conf->quo = len;
break;
case CONFIG_MOD:
if (vp->v_type != V_NUM) {
math_error("Non numeric for mod");
if (getlen(vp, &len)) {
math_error("Illegal value for mod");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
math_error("Illegal mod parameter value");
/*NOTREACHED*/
}
conf->mod = temp;
conf->mod = len;
break;
case CONFIG_SQRT:
if (vp->v_type != V_NUM) {
math_error("Non numeric for sqrt");
if (getlen(vp, &len)) {
math_error("Illegal value for sqrt");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
math_error("Illegal sqrt parameter value");
/*NOTREACHED*/
}
conf->sqrt = temp;
conf->sqrt = len;
break;
case CONFIG_APPR:
if (vp->v_type != V_NUM) {
math_error("Non numeric for appr");
if (getlen(vp, &len)) {
math_error("Illegal value for appr");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
math_error("Illegal appr parameter value");
/*NOTREACHED*/
}
conf->appr = temp;
conf->appr = len;
break;
case CONFIG_CFAPPR:
if (vp->v_type != V_NUM) {
math_error("Non numeric for cfappr");
if (getlen(vp, &len)) {
math_error("Illegal value for cfappr");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
math_error("Illegal cfappr parameter value");
/*NOTREACHED*/
}
conf->cfappr = temp;
conf->cfappr = len;
break;
case CONFIG_CFSIM:
if (vp->v_type != V_NUM) {
math_error("Non numeric for cfsim");
if (getlen(vp, &len)) {
math_error("Illegal value for cfsim");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
math_error("Illegal cfsim parameter value");
/*NOTREACHED*/
}
conf->cfsim = temp;
conf->cfsim = len;
break;
case CONFIG_OUTROUND:
if (vp->v_type != V_NUM) {
math_error("Non numeric for outround");
if (getlen(vp, &len)) {
math_error("Illegal value for outround");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
math_error("Illegal output parameter value");
/*NOTREACHED*/
}
conf->outround = temp;
conf->outround = len;
break;
case CONFIG_ROUND:
if (vp->v_type != V_NUM) {
math_error("Non numeric for round");
if (getlen(vp, &len)) {
math_error("Illegal value for round");
/*NOTREACHED*/
}
q = vp->v_num;
temp = qtoi(q);
if (qisfrac(q) || qisneg(q) || !zistiny(q->num)) {
math_error("Illegal output parameter value");
/*NOTREACHED*/
}
conf->round = temp;
conf->round = len;
break;
case CONFIG_LEADZERO:
@@ -898,11 +861,19 @@ setconfig(int type, VALUE *vp)
/*NOTREACHED*/
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_VERSION:
math_error("The program config parameter is read-only");
math_error("The version config parameter is read-only");
/*NOTREACHED*/
default:
@@ -1079,6 +1050,16 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
vp->v_str = makenewstring(p);
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:
vp->v_num = qlink(cfg->epsilon);
return;
@@ -1104,20 +1085,18 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
break;
case CONFIG_TILDE:
vp->v_type = V_STR;
if (cfg->tilde_ok) {
vp->v_str = makenewstring(TRUE_STRING);
vp->v_num = itoq(1);
} else {
vp->v_str = makenewstring(FALSE_STRING);
vp->v_num = itoq(0);
}
return;
case CONFIG_TAB:
vp->v_type = V_STR;
if (cfg->tab_ok) {
vp->v_str = makenewstring(TRUE_STRING);
vp->v_num = itoq(1);
} else {
vp->v_str = makenewstring(FALSE_STRING);
vp->v_num = itoq(0);
}
return;
@@ -1158,20 +1137,18 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
break;
case CONFIG_LEADZERO:
vp->v_type = V_STR;
if (cfg->leadzero) {
vp->v_str = makenewstring(TRUE_STRING);
vp->v_num = itoq(1);
} else {
vp->v_str = makenewstring(FALSE_STRING);
vp->v_num = itoq(0);
}
return;
case CONFIG_FULLZERO:
vp->v_type = V_STR;
if (cfg->fullzero) {
vp->v_str = makenewstring(TRUE_STRING);
vp->v_num = itoq(1);
} else {
vp->v_str = makenewstring(FALSE_STRING);
vp->v_num = itoq(0);
}
return;
@@ -1194,11 +1171,10 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
break;
case CONFIG_BLKVERBOSE:
vp->v_type = V_STR;
if (cfg->blkverbose) {
vp->v_str = makenewstring(TRUE_STRING);
vp->v_num = itoq(1);
} else {
vp->v_str = makenewstring(FALSE_STRING);
vp->v_num = itoq(0);
}
return;
@@ -1235,11 +1211,10 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
break;
case CONFIG_VERBOSE_QUIT:
vp->v_type = V_STR;
if (cfg->verbose_quit) {
vp->v_str = makenewstring(TRUE_STRING);
vp->v_num = itoq(1);
} else {
vp->v_str = makenewstring(FALSE_STRING);
vp->v_num = itoq(0);
}
return;
@@ -1271,6 +1246,22 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
}
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_VERSION:
vp->v_type = V_STR;
if (cfg->version == NULL) {
@@ -1311,12 +1302,12 @@ config_cmp(CONFIG *cfg1, CONFIG *cfg2)
*/
if (cfg1 == NULL || cfg1->epsilon == NULL || cfg1->prompt1 == NULL ||
cfg1->prompt2 == NULL) {
math_error("CONFIG #1 value is invaid");
math_error("CONFIG #1 value is invalid");
/*NOTREACHED*/
}
if (cfg2 == NULL || cfg2->epsilon == NULL || cfg2->prompt1 == NULL ||
cfg2->prompt2 == NULL) {
math_error("CONFIG #2 value is invaid");
math_error("CONFIG #2 value is invalid");
/*NOTREACHED*/
}
@@ -1326,6 +1317,7 @@ config_cmp(CONFIG *cfg1, CONFIG *cfg2)
return cfg1->traceflags != cfg2->traceflags ||
cfg1->outdigits != cfg2->outdigits ||
cfg1->outmode != cfg2->outmode ||
cfg1->outmode2 != cfg2->outmode2 ||
qcmp(cfg1->epsilon, cfg2->epsilon) ||
cfg1->epsilonprec != cfg2->epsilonprec ||
cfg1->maxprint != cfg2->maxprint ||
@@ -1371,6 +1363,7 @@ config_cmp(CONFIG *cfg1, CONFIG *cfg2)
(cfg1->version == NULL && cfg2->version != NULL) ||
(cfg1->version != NULL && cfg2->version == NULL) ||
cfg1->windows != cfg2->windows ||
(cfg1->version != NULL && cfg2->version != NULL &&
strcmp(cfg1->version, cfg2->version) != 0);
}

View File

@@ -1,7 +1,7 @@
/*
* config - configuration routines
*
* Copyright (C) 1999 Landon Curt Noll and David I. Bell
* Copyright (C) 1999-2002 Landon Curt Noll and David I. Bell
*
* Primary author: Landon Curt Noll
*
@@ -19,15 +19,15 @@
* 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: config.h,v 29.2 1999/12/14 19:37:46 chongo Exp $
* @(#) $Revision: 29.15 $
* @(#) $Id: config.h,v 29.15 2004/02/23 06:08:29 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.h,v $
*
* Under source code control: 1995/11/01 22:20:17
* File existed as early as: 1995
*
* chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
* Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
@@ -35,8 +35,15 @@
#define __CONFIG_H__
#include "nametype.h"
#include "qmath.h"
#if defined(CALC_SRC) /* if we are building from the calc source tree */
# 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,20 @@
#define CONFIG_MORE 25
#define CONFIG_BLKMAXPRINT 26
#define CONFIG_BLKVERBOSE 27
#define CONFIG_BLKBASE 28
#define CONFIG_BLKFMT 29
#define CONFIG_BLKBASE 28
#define CONFIG_BLKFMT 29
#define CONFIG_RESOURCE_DEBUG 30
#define CONFIG_LIB_DEBUG CONFIG_RESOURCE_DEBUG
#define CONFIG_CALC_DEBUG 31
#define CONFIG_USER_DEBUG 32
#define CONFIG_VERBOSE_QUIT 33
#define CONFIG_CTRL_D 34
#define CONFIG_PROGRAM 35
#define CONFIG_BASENAME 36
#define CONFIG_VERSION 37
#define CONFIG_CTRL_D 34
#define CONFIG_PROGRAM 35
#define CONFIG_BASENAME 36
#define CONFIG_VERSION 37
#define CONFIG_WINDOWS 38
#define CONFIG_MODE2 39
#define CONFIG_CYGWIN 40
/*
@@ -90,8 +100,6 @@
#define DISPLAY_DEFAULT 20 /* default digits for float display */
#define EPSILON_DEFAULT "1e-20" /* allowed error for float calculations */
#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 MAXSCANCOUNT 20 /* default max scan errors before an abort */
@@ -110,26 +118,27 @@
*/
struct config {
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 */
long epsilonprec; /* epsilon binary precision (tied to epsilon) */
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 sq2; /* size of number to use square algorithm 2 */
LEN pow2; /* size of modulus to use REDC for powers */
LEN redc2; /* size of modulus to use REDC algorithm 2 */
BOOL tilde_ok; /* ok to print a tilde on aproximations */
BOOL tab_ok; /* ok to print tab before numeric values */
long quomod; /* quomod() default rounding mode */
long quo; /* quotent // default rounding mode */
long mod; /* mod % default rounding mode */
long sqrt; /* sqrt() default rounding mode */
long appr; /* appr() default rounding mode */
long cfappr; /* cfappr() default rounding mode */
long cfsim; /* cfsim() default rounding mode */
long outround; /* output default rounding mode */
long round; /* round()/bround() default rounding mode */
LEN quomod; /* quomod() default rounding mode */
LEN quo; /* quotient // default rounding mode */
LEN mod; /* mod % default rounding mode */
LEN sqrt; /* sqrt() default rounding mode */
LEN appr; /* appr() default rounding mode */
LEN cfappr; /* cfappr() default rounding mode */
LEN cfsim; /* cfsim() default rounding mode */
LEN outround; /* output default rounding mode */
LEN round; /* round()/bround() default rounding mode */
BOOL leadzero; /* ok to print leading 0 before decimal pt */
BOOL fullzero; /* ok to print trailing 0's */
long maxscancount; /* max scan errors before abort */
@@ -146,6 +155,8 @@ struct config {
int ctrl_d; /* see CTRL_D_xyz below */
char *program; /* our name */
char *base_name; /* basename of our name */
BOOL windows; /* TRUE => running under MS windows */
BOOL cygwin; /* TRUE => compiled with cygwin */
char *version; /* calc version string */
};
typedef struct config CONFIG;
@@ -157,7 +168,8 @@ typedef struct config CONFIG;
#define RSCDBG_STDIN_FUNC (0x00000001) /* interactive 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_MASK (0x00000007)
#define RSCDBG_PRINT_DBG (0x00000008) /* print debug messages */
#define RSCDBG_MASK (0x0000000f)
/*
@@ -169,7 +181,8 @@ typedef struct config CONFIG;
#define CALCDBG_BLOCK (0x00000008) /* block debug */
#define CALCDBG_TTY (0x00000010) /* report TTY 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
@@ -182,23 +195,23 @@ typedef struct config CONFIG;
/*
* global configuration states and aliases
*/
extern CONFIG *conf; /* current configuration */
extern CONFIG oldstd; /* backward compatible standard configuration */
extern CONFIG newstd; /* new non-backward compatible configuration */
extern char *calc_debug; /* !=NULL => value of config("calc_debug") */
extern char *resource_debug; /* !=NULL => config("resource_debug") value */
extern char *user_debug; /* !=NULL => value of config("user_debug") */
extern DLL CONFIG *conf; /* current configuration */
extern DLL CONFIG oldstd; /* old classic standard configuration */
extern DLL CONFIG newstd; /* default compatible configuration */
extern DLL char *calc_debug; /* !=NULL => value of config("calc_debug") */
extern DLL char *resource_debug; /* !=NULL => config("resource_debug") value */
extern DLL char *user_debug; /* !=NULL => value of config("user_debug") */
/*
* configuration externals
*/
extern CONFIG *config_copy(CONFIG *src);
extern void config_free(CONFIG *cfg);
extern void config_print(CONFIG *cfg);
extern int configtype(char*);
extern void config_print(CONFIG*);
extern BOOL config_cmp(CONFIG*, CONFIG*);
extern DLL CONFIG *config_copy(CONFIG *src);
extern DLL void config_free(CONFIG *cfg);
extern DLL void config_print(CONFIG *cfg);
extern DLL int configtype(char*);
extern DLL void config_print(CONFIG*);
extern DLL BOOL config_cmp(CONFIG*, CONFIG*);
#endif /* !__CONFIG_H__ */

12
const.c
View File

@@ -17,14 +17,14 @@
* 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: const.c,v 29.1 1999/12/14 09:15:35 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $Id: const.c,v 29.3 2004/02/23 07:50:41 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/const.c,v $
*
* Under source code control: 1990/02/15 01:48:14
* 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 */
static long constcount; /* number of constants defined */
static unsigned long constcount;/* number of constants defined */
static long constavail; /* number of constants available */
static NUMBER **consttable; /* table of constants */
@@ -92,7 +92,7 @@ addqconstant(NUMBER *q)
{
register NUMBER **tp; /* pointer to current number */
register NUMBER *t; /* number being tested */
long index; /* index into constant table */
unsigned long index; /* index into constant table */
long numlen; /* numerator length */
long denlen; /* denominator length */
HALF numlow; /* bottom value of numerator */
@@ -221,7 +221,7 @@ trimconstants(void)
void
showconstants(void)
{
long index;
unsigned long index;
NUMBER **qp;
long count;

320
cscript/4dsphere.calc Normal file
View 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";
}

View File

@@ -17,15 +17,15 @@
# 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: Makefile,v 29.4 1999/12/17 11:30:35 chongo Exp $
# @(#) $Revision: 29.23 $
# @(#) $Id: Makefile,v 29.23 2003/01/14 01:58:18 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/Makefile,v $
#
# Under source code control: 1999/11/29 11:10:26
# File existed as early as: 1999
#
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
#
# calculator by David I. Bell with help/mods from others
# Makefile by Landon Curt Noll
@@ -36,15 +36,121 @@
SHELL= /bin/sh
MAKE_FILE = Makefile
####
# Normally, the upper level makefile will set these values. We provide
# 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
#BINDIR= /usr/bin
#BINDIR= /usr/contrib/bin
# 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
#
# Q=@ do not echo internal makefile actions (quiet mode)
@@ -59,13 +165,14 @@ CHMOD= chmod
SED= sed
SORT= sort
FMT= fmt
CMP= cmp
# The ${SCRIPT} list is the list of calc shell script files (without the .calc
# extension) which will be installed.
#
# 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:
#
# 1) Name the file with a .calc filename extension
@@ -76,26 +183,36 @@ FMT= fmt
#
# 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
#
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=
# 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
#
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
# an non-emoty else clause for every if condition. *sigh*
# a non-empty else clause for every if condition. *sigh*
#
.all:
rm -f .all
@@ -112,9 +229,11 @@ all: ${SCRIPT} ${SCRIPT_SRC} .all
##
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; \
done | ${SORT}
fi; \
done | LANG=C ${SORT}
distdir:
${Q}echo cscript
@@ -125,24 +244,28 @@ calcliblist:
#
detaillist:
${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 \
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
else \
echo $$i; \
fi; \
done | ${SORT}) | ${FMT} -70 | \
fi; \
done | LANG=C ${SORT}) | ${FMT} -70 | \
${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \
-e 's/$$/ \\/' -e '$$s/ \\$$//'
${Q}echo
${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 \
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
else \
echo $$i.calc; \
fi; \
done | ${SORT}) | ${FMT} -70 | \
fi; \
done | LANG=C ${SORT}) | ${FMT} -70 | \
${SED} -e '1s/xxxxxxxxxxx/SCRIPT_SRC=/' -e '2,$$s/^/ /' \
-e 's/$$/ \\/' -e '$$s/ \\$$//'
@@ -170,11 +293,13 @@ depend:
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
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 ' rm -f $$@'; \
echo ' $${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \
echo ' $${CHMOD} +x $$@'; \
echo ' @rm -f $$@'; \
echo ' @$${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \
echo ' @$${CHMOD} +x $$@'; \
fi; \
done >> makedep.out
${Q}echo sample dependency list formed
${Q}echo forming new cscript/Makefile
@@ -184,7 +309,7 @@ depend:
${Q}echo "" >> Makefile
${Q}${SED} -n '3,$$p' makedep.out >> Makefile
-${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'; \
mv -f Makefile.bak Makefile; \
else \
@@ -199,49 +324,102 @@ depend:
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:
-rm -f makedep.out
clobber:
-rm -f ${SCRIPT}
-rm -f ${TARGETS}
install: all
-${Q}if [ ! -d ${BINDIR} ]; then \
echo mkdir ${BINDIR}; \
mkdir ${BINDIR}; \
-${Q}if [ ! -d $T${BINDIR} ]; then \
echo mkdir $T${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 \
true; \
fi
-${Q}if [ ! -d ${SCRIPTDIR} ]; then \
echo mkdir ${SCRIPTDIR}; \
mkdir ${SCRIPTDIR}; \
-${Q}if [ ! -d $T${SCRIPTDIR} ]; then \
echo mkdir $T${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 \
true; \
fi
${Q}for i in ${SCRIPT}; do \
echo rm -f ${SCRIPTDIR}/$$i; \
rm -f ${SCRIPTDIR}/$$i; \
echo cp $$i ${SCRIPTDIR}; \
cp $$i ${SCRIPTDIR}; \
echo ${CHMOD} 0555 ${SCRIPTDIR}/$$i; \
${CHMOD} 0555 ${SCRIPTDIR}/$$i; \
${Q}for i in ${SCRIPT} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if ${CMP} -s $$i $T${SCRIPTDIR}/$$i; then \
true; \
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
# 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
rm -f $@
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
${CHMOD} +x $@
@rm -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
piforever: piforever.calc
rm -f $@
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
${CHMOD} +x $@
@rm -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
plus: plus.calc
rm -f $@
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
${CHMOD} +x $@
@rm -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
powerterm: powerterm.calc
@rm -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
simple: simple.calc
rm -f $@
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
${CHMOD} +x $@
@rm -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
square: square.calc
@rm -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@

View File

@@ -7,9 +7,10 @@ be useful!
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' ]]
For more info, see:
@@ -18,6 +19,23 @@ For more info, see:
=-=
4dsphere
Determine if 6 points lie on the surface of a 4-dimensional sphere in R^4.
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
fproduct filename term ...
Write the big Endian product of terms to a file. Use - for stdout.
mersenne exp
Print the value of 2^exp-1.
@@ -33,6 +51,12 @@ plus arg ...
Print the sum of 1 or more arguments.
powerterm [base_limit] value
Print the value as a sum (or difference) of powers of integers up
to and including powers <= base_limit. By default, base_limit is 10000.
simple
A trivial example of a calc shell script.
@@ -53,12 +77,12 @@ simple
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: README,v 29.3 1999/12/17 10:34:54 chongo Exp $
## @(#) $Revision: 29.10 $
## @(#) $Id: README,v 29.10 2001/06/10 19:34:40 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/README,v $
##
## Under source code control: 1999/12/17 10:23:40
## File existed as early as: 1999
##
## chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
## Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/

88
cscript/fproduct.calc Normal file
View File

@@ -0,0 +1,88 @@
#!/usr/local/src/cmd/calc/calc -q -s -f
/*
* fproduct - write the big Endian product of terms to a file
*
* usage:
* fproduct filename term [term ...]
*
* filename where to write the product, use - for stdout
* term ... terms to multiply
*
* 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: fproduct.calc,v 29.2 2001/06/06 09:06:29 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/fproduct.calc,v $
*
* Under source code control: 2001/04/07 20: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/
*/
/*
* parse args
*/
argc = argv();
if (argc < 2) {
fprintf(files(2), "usage: %s term [term ...]\n", argv(0));
exit;
}
filename = argv(1);
/*
* build the product
*/
product = 1;
for (i=2; i < argc; ++i) {
product *= eval(argv(i));
}
product = abs(product);
/*
* open the file for writing, "-" is stdout
*/
if (filename == "-") {
fd = files(1);
} else {
fd = fopen(filename, "w");
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.
*/
if (product > 0) {
octlen = int((highbit(product)+8) / 8);
for (i=octlen-1; i >= 0; --i) {
fputc(fd, char(product >> (i*8)));
}
}
/*
* cleanup
*/
if (filename != "-") {
fclose(fd);
}

View File

@@ -1,4 +1,4 @@
#!/usr/local/src/cmd/calc/calc -S
#!/usr/local/src/cmd/calc/calc -q -s -f
#
# mersenne - print the value of a mersenne number
#
@@ -18,15 +18,15 @@
# 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: mersenne.calc,v 29.1 1999/12/14 09:15:35 chongo Exp $
# @(#) $Revision: 29.3 $
# @(#) $Id: mersenne.calc,v 29.3 2000/12/15 14:56:54 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/mersenne.calc,v $
#
# Under source code control: 1999/11/30 00:09:01;
# File existed as early as: 1999
#
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
# usage:
# mersenne exp
@@ -35,13 +35,19 @@
/*
* parse args
*/
if (argv() != 1) {
if (argv() != 2) {
/* we include the name of this script in the error message */
fprintf(files(2), "usage: %s exp\n", config("program"));
abort "wrong number of args";
}
global n = eval(argv(1));
if (!isint(n) || n <= 0) {
quit "Argument to be a positive integer";
}
/*
* print the decimal value of 2^n-1
*/
print "2^": argv(0) : "-1 =", 2^eval(argv(0))-1;
print "2^": n : "-1 =", 2^n-1;

View File

@@ -1,4 +1,4 @@
#!/usr/local/src/cmd/calc/calc -S
#!/usr/local/src/cmd/calc/calc -q -f
#
# piforever - print digits of pi forever (or as long as your mem/cpu allow)
#
@@ -18,15 +18,15 @@
# 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: piforever.calc,v 29.1 1999/12/14 09:15:36 chongo Exp $
# @(#) $Revision: 29.3 $
# @(#) $Id: piforever.calc,v 29.3 2000/12/15 14:56:54 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/piforever.calc,v $
#
# Under source code control: 1999/11/30 00:11:36
# File existed as early as: 1999
#
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
# usage:
# piforever

View File

@@ -1,4 +1,4 @@
#!/usr/local/src/cmd/calc/calc -S
#!/usr/local/src/cmd/calc/calc -q -s -f
#
# plus - add two or more arguments together
#
@@ -18,15 +18,15 @@
# 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: plus.calc,v 29.1 1999/12/14 09:15:36 chongo Exp $
# @(#) $Revision: 29.3 $
# @(#) $Id: plus.calc,v 29.3 2000/12/15 14:56:54 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/plus.calc,v $
#
# Under source code control: 1999/11/29 10:22:37
# File existed as early as: 1999
#
# chongo <was here> /\oo/\ http://reality.sgi.com/chongo/
# Share and enjoy! :-) http://reality.sgi.com/chongo/tech/comp/calc/
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
# usage:
# plus val ...
@@ -35,19 +35,19 @@
/*
* parse args
*/
if (argv() < 1) {
if (argv() < 2) {
/* we include the name of this script in the error message */
fprintf(files(2), "usage: %s value ...\n", config("program"));
abort "not enough args";
}
/*
* print the sum of the 2 args
* print the sum of the args
*
* Since args are strings, we must eval them before using them numerically.
*/
sum = 0;
for (i=0; i < argv(); ++i) {
for (i=1; i < argv(); ++i) {
sum += eval(argv(i));
}
print sum;

Some files were not shown because too many files have changed in this diff Show More