Compare commits

..

25 Commits

Author SHA1 Message Date
Landon Curt Noll
e054ea87f2 Release calc version 2.12.4.3 2017-05-21 15:38:54 -07:00
Landon Curt Noll
e229393250 Release calc version 2.12.4.2 2017-05-21 15:38:53 -07:00
Landon Curt Noll
a407c7d197 Release calc version 2.12.3.3 2017-05-21 15:38:53 -07:00
Landon Curt Noll
9ea569152a Release calc version 2.12.3.2 2017-05-21 15:38:52 -07:00
Landon Curt Noll
cbcb5801fb Release calc version 2.12.3.1 2017-05-21 15:38:52 -07:00
Landon Curt Noll
bdf495150e Release calc version 2.12.3.0 2017-05-21 15:38:52 -07:00
Landon Curt Noll
b3648f030f Release calc version 2.12.2.2 2017-05-21 15:38:51 -07:00
Landon Curt Noll
71e88bdc91 Release calc version 2.12.2.1 2017-05-21 15:38:51 -07:00
Landon Curt Noll
ca0dd4560b Release calc version 2.12.2 2017-05-21 15:38:50 -07:00
Landon Curt Noll
f62d9fa1e6 Release calc version 2.12.1.13 2017-05-21 15:38:50 -07:00
Landon Curt Noll
253b47942f Release calc version 2.12.1.12 2017-05-21 15:38:50 -07:00
Landon Curt Noll
c773ee736f Release calc version 2.12.1.11 2017-05-21 15:38:50 -07:00
Landon Curt Noll
7d0cc52afe Release calc version 2.12.1.10 2017-05-21 15:38:49 -07:00
Landon Curt Noll
2441df7fdc Release calc version 2.12.1.9 2017-05-21 15:38:49 -07:00
Landon Curt Noll
5c565a7cea Release calc version 2.12.1.7 2017-05-21 15:38:49 -07:00
Landon Curt Noll
810e541281 Release calc version 2.12.1.8 2017-05-21 15:38:49 -07:00
Landon Curt Noll
ee30d787ea Release calc version 2.12.1.6 2017-05-21 15:38:48 -07:00
Landon Curt Noll
4e92927183 Release calc version 2.12.1.5 2017-05-21 15:38:48 -07:00
Landon Curt Noll
fb4a03c1f1 Release calc version 2.12.1.4 2017-05-21 15:38:48 -07:00
Landon Curt Noll
81a523043e Release calc version 2.12.1.3 2017-05-21 15:38:48 -07:00
Landon Curt Noll
2c0d0bbc1b Release calc version 2.12.1.2 2017-05-21 15:38:48 -07:00
Landon Curt Noll
a7147039ee Release calc version 2.12.1.1 2017-05-21 15:38:47 -07:00
Landon Curt Noll
6fa83e417e Release calc version 2.12.1 2017-05-21 15:38:47 -07:00
Landon Curt Noll
c335809b5f Release calc version 2.12.0.8 2017-05-21 15:38:47 -07:00
Landon Curt Noll
ee99adf8ca Release calc version 2.12.0.6 2017-05-21 15:38:47 -07:00
568 changed files with 21872 additions and 11082 deletions

107
BUGS
View File

@@ -68,22 +68,45 @@ of a context diff patch).
Known bugs: Known bugs:
The stoponerror() facility does not seem to work, or perhaps
the stoponerror help file is incorrect. The stoponerror help file
lacks examples because of this problem.
We are sure some more bugs exist. When you find them, please let We are sure some more bugs exist. When you find them, please let
us know! See the above for details on how to report and were to us know! See the above for details on how to report and were to
EMail your bug reports and hopefully patches to fix them. EMail your bug reports and hopefully patches to fix them.
=-= =-=
Problems that have known work-a-rounds:
* There is a bug in gcc v4.1.0 that causes calc to fail the regression
test. The work-a-round is to compile with gcc v4.1.1 or later. This
problems was observed on Fedora 5.
=-=
mis-features in calc: mis-features in calc:
Some problems are not bugs but rarther mis-features / things that could Some problems are not bugs but rarther mis-features / things that could
work better. The following is a list of mis-features that should be work better. The following is a list of mis-features that should be
addressed and improved someday. addressed and improved someday.
* When statement is of the form { ... }, the leading { MUST BE ON
THE SAME LINE as the if, for, while or do keyword.
This works as expected:
if (expr) {
...
}
However this WILL NOT WORK AS EXPECTED:
if (expr)
{
...
}
This needs to be changed. See also "help statement", "help unexpected",
and "help todo".
* The chi.cal resource file does not work well with odd degrees * The chi.cal resource file does not work well with odd degrees
of freedom. Can someone improve this algorithm? of freedom. Can someone improve this algorithm?
@@ -106,75 +129,7 @@ mis-features in calc:
will not. will not.
=-= ## Copyright (C) 1999-2007 Landon Curt Noll
Problems with old systems that have known work-a-rounds:
* There is a bug in gcc-2.95 that causes calc, when compiled with -O2,
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;
* There are problems compiling calc on the sparcv9 under 64 bit
Solaris. On that platform, gcc-2.96 is able to compile calc, but
calc dumps core very early on in startup. It is said that sparcv9
support in gcc-2.96 is very unofficial and thus there is no
work-a-round for gcc-2-96.
There is a work-a-round for this architecture us one is using the
Solaris CC on the sparcv9. It has been reported that setting the
following Makefile variables will produce a working version of
calc on the sparcv9 under 64 bit Solaris:
LCC="cc -xarch=v9"
CCWARN="-DFORCE_STDC -w"
DEBUG="-fast -xarch=v9"
## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -188,10 +143,10 @@ Problems with old systems that have known work-a-rounds:
## A copy of version 2.1 of the GNU Lesser General Public License is ## A copy of version 2.1 of the GNU Lesser General Public License is
## distributed with calc under the filename COPYING-LGPL. You should have ## distributed with calc under the filename COPYING-LGPL. You should have
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
## ##
## @(#) $Revision: 29.24 $ ## @(#) $Revision: 30.1 $
## @(#) $Id: BUGS,v 29.24 2006/05/21 07:54:13 chongo Exp $ ## @(#) $Id: BUGS,v 30.1 2007/03/16 11:09:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
## ##
## Under source code control: 1994/03/18 14:06:13 ## Under source code control: 1994/03/18 14:06:13

721
CHANGES
View File

@@ -1,4 +1,612 @@
The following are the changes from calc version 2.12.0 to date: The following are the changes from calc version 2.12.4.0 to date:
Fixed a documentation bug for the sgn() builtin.
Added the 1<<8/2 evaluation example to "help unexpected". That
expression evalutes to 128, not 16 as some C programmers might expect.
Fixed a bug in solve.cal where high was not returned in some situations.
Fixed a bug reported by Paul & Karen Tomlinson (paulnkaz at pktomlinson
dot fsnet dot co dot uk) where calling log multiple times with different
values of epsilon resulted in an incorrect value.
Removed cvd rule from Makefiles.
The Makefile used in the source rpm (calc-*.src.rpm) no longer uses
the -Werror compile flag. This is to help those distributions with
compilers that make produce (hopefully) complination warnings.
NOTE: For testing and calc build purposes will recommend and will
continue to use the -Werror flag.
Fixed a typo in the Makefile where the make variable ${SAMPLE_OBJ}
was misspelled as ${SAMPLE_OBJS}.
Added prep makefile rule to make is easier to compile calc without
an optimizer. By doing:
make clobber prep
one may build a calc binary that is easier to debug.
Fixed a bug where an certains typos (e.g., calling an unknown
function) would previously cause calc to exit.
Updated the COPYING file to reflect the new filenames associated
with the SHA1 hash function, and removed mention of files related
to the SHA (SHA0, not SHA1) and the MD5 hash functions (which is
no longer supported in calc).
Fixed a bug where a calling vsnprintf() twice created problems.
The thanks for this fix goes to Matthew Miller (mattdm at mattdm
dot org) for this patch.
Michael Penk (mpenk at wuska dot com) reported success in installs
under windoz via Cygwin by making a change to the Cygwin target.
These changes have been folded into the main calc Makefile.
The old recommendation of using 'make win32_hsrc' is no longer
required for Cygwin. See the README.WINDOWS file for details.
Added dms.cal and hms.cal resource files. The dms.cal is a more
functional version of deg.cal. It is a superset except that increment
and decrement is on the arc second level. The hms.cal is for
24-hour cycle instread of the 360 degree cycle of dms.cal.
Changed deg.cal object name from dms to deg so that the more functional
dms.cal can own the dms object name.
Updated 'help obj' to reflect changes to 'show objfunctions' and
resource file example list since 1999.
Fixed problem where CALC_BYTE_ORDER refering to CALC_BIG_ENDIAN
and CALC_LITTLE_ENDIAN instead of BIG_ENDIAN and LITTLE_ENDIAN.
The following are the changes from calc version 2.12.3.0 to 2.12.3.3:
Fixed the Jacobi function where it returned 1 when it should have
returned 0. Thanks goes to Kevin Sopp (baraclese at googlemail dot com)
for discovering the problem and suggesting the nature if the fix.
Calc versions will always be of the form x.y.z.w even when the
MINOR_PATCH (w) is 0. Thus, 2.12.3.0 will be printed as 2.12.3.0
instread of just 2.12.3.
Added MINGW32_NT-5.0 compile target based on a patch from
Brian L. Angus (angus at eng dot utah dot edu).
Removed the use of rpm.release in the Makefile.
Mac OS Darwin targets no longer attempt to use ldconfig. Under the
Darwin target, the LDCONFIG make variable is redefined to be
an empty value. Thanks goes to Ralf Trinler (art at infra dot de)
for reporting this problem.
The ${CALC_INCDIR}/custom is no longer being removed at install time
if it is empty. Now when ${ALLOW_CUSTOM} make variable is empty,
an empty ${CALC_INCDIR}/custom may be left hehind.
Fixed a problem where a "make clobber" would remove custom/Makefile
and fail to rebuilt it.
The following are the changes from calc version 2.12.2.3 to 2.12.2.4:
Added OpenBSD target.
Using the -r test instead of the -e test in Makefiles because some
out of date shells still do not have the -e test.
The Makefile now avoids the use of if ! command because some out of
date shells to not support the ! construct.
The following are the changes from calc version 2.12.1.1 to 2.12.2.2:
Added an explicit Solaris target.
Fixed confusion in Makefile where some uses of ${EXT} were misnamed ${EXE}.
Added a "make strip" rule, per suggestion from Igor Furlan <primorec
at sbcglobal dot net>, to allow one to strip previously built binary
executables and libraries.
Under the Darwin / OS X target, ${DARWIN_ARCH} is left empty meaning
that calc is compiled for the native CPU type instead of Universal
Binary (Intel and PPC).
By default, the calc binary that is built for the rpm forces
${LD_SHARE} to be empty. An empty ${LD_SHARE} means that the calc
from the rpm does not set rpath. This in turn causes the default
system path to be searched when looking for libcalc and libcustcalc.
The Makefile shipped with calc still sets ${LD_SHARE} for host targets.
By default, the dynamic shared library search path for all targets
starts with the source directory. Starting the search in the source
directory is convenient for testing and debugging but is not appropriate
for installation on a production system. To get the same effect
as the calc binary in the calc rpm, try:
make clobber
make calc-dynamic-only BLD_TYPE=calc-dynamic-only LD_SHARE=
make install
The libcalc and libcustcalc shared libraries are now tied to
the 4 level calc version instead of just 3 levels. For example,
under Linux calc version 2.12.2.1 uses /usr/lib/libcalc.so.2.12.2.1
instead of just the /usr/lib/libcalc.so.2.12.2 file. This change
was made so that calc produced by 'make clobber; make all install'
is consistent with the calc rpm.
Calc is now releasing the calc-debuginfo rpm for those RPM users who
which to use non-stripped libraries and binaries for debugging
purposes. By default, the calc rpm installed stripped binaries
and libraries.
Added this high priority item to the calc help/todo list:
It is overkill to have nearly everything wind up in libcalc.
Form a libcalcmath and a libcalclang so that an application
that just wants to link with the calc math libs can use them
without dragging in all of the other calc language, I/O,
and builtin functions.
Fixed the wording for the -i flag in the calc man page.
Added some notes to the help/unexpected file regarding calc
and interactice shells.
Fixed bug where a FILEPOS was copied FPOS_POS_BITS octets instead of
FPOS_POS_LEN octets.
Split out ${READLINE_EXTRAS} Makefile variables from ${READLINE_LIB}
to better deal with Fedora rpm requirements.
Bit 8 (0x80) of calc_debug is reserved for custom debugging.
See help/config and custom/HOW_TO_ADD for details.
When the Makefile variable ${ALLOW_CUSTOM} is not defined or empty,
the libcustcalc library is not built or linked against, certain make
rules skip going into the custom sub-directory, the install
rule skips certain custom installation actions, and the common
C flags (${COMMON_CFLAGS}) is given -UCUSTOM. Other make rules such
as "make clean" and "make clobber" still work as before. Also
the Makefile.simple assumes that the Makefile variable ${ALLOW_CUSTOM}
is -DCUSTOM.
Clarified that the calc builtin functions rand() and random()
operate over a half closed interval. The help/rand and help/random
refer to the top of the interval as "beyond" instead of "max".
Releaseing source tar balls using bzip2 instead of with gzip. So
what was calc-something.tar.gz is now calc-something.tar.bz2.
To "uncompress" use:
bunzip2 calc-something.tar.bz2
On some systems, one may untar directly by:
tar -jxvf calc-something.tar.bz2
The Makefile variable ${BYTE_ORDER} was replaced by ${CALC_BYTE_ORDER}.
Changed the way the Makefile can force the calc byte order. If you set
the Makefile variable ${CALC_BYTE_ORDER} to be -DCALC_BIG_ENDIAN then
endian.h will force the CPP symbol CALC_BYTE_ORDER to be BIG_ENDIAN.
If you set ${CALC_BYTE_ORDER} to be -DCALC_LITTLE_ENDIAN then endian.h
will force the CPP symbol CALC_BYTE_ORDER to be LITTLE_ENDIAN.
If the Makefile variable ${CALC_BYTE_ORDER} is empty, then the CPP
symbol CALC_BYTE_ORDER will set to the CPP symbol BYTE_ORDER as
defined by some system include file (if the Makefile can find such
an include file), or the Makefile compiling endian.c and hopefully
using that result to set CPP symbol CALC_BYTE_ORDER. Regardless of
how it happens, the CPP symbol CALC_BYTE_ORDER should end up set in
endian_calc.h include file.
The following are the changes from calc version 2.12.1.10 to 2.12.2:
Put back the missing -s flags on the cscripts: mersenne, 4dsphere,
fprodcut, plus, and powerterm. Thanks goes to Bradley Reed
<bradreed1 at gmail dot com> for discovering this problem.
All static variables are now declared with the symbol STATIC.
All extern variables are now declared with the symbol EXTERN.
All static functions are now declared with the symbol S_FUNC.
All extern functions are now declared with the symbol E_FUNC.
The include file decl.h defines these 4 symbols by default
to static, extern, static, and extern respectively. Under
Windoz, DLL is also defined according to the _EXPORTING symbol
and is prepended to the EXTERN and E_FUNC symbols. The decl.h
file has replaced the win32dll.h file.
When WITH_TLS is defined, calc attempts to compile with Thread Local
Storage. As of version 2.12.1.12 this mode is extremely experimental.
Calc may not compile when WITH_TLS defined.
Fixed E_FUNC vs EXTERN issues discovered by Mirko Viviani
<mirko at objectlab dot org>.
Removed include of <malloc.h>. The building of the include file
"have_malloc.h" has been removed from the Makefile. One some
systems such as FreeBSD, the file /usr/include/malloc.h exists
and contains an forced error saying that stdlib.h should be used
instead. The Makefile symbol HAVE_MALLOC has been removed.
Moved the sample code in the sample sub-directory up into the
main source level. The sample/many_random.c source file is
now sample_many.c. The sample/test_random.c source file is now
sample_rand.c. The sample Makefile and the sub-directory is no more.
Renamed the following source files:
math_error.h ==> lib_calc.h
string.c ==> str.c
string.h ==> str.h
Renamed the following variables related to calc error processing:
int calc_jmp ==> int calc_use_matherr_jmpbuf
jmp_buf calc_jmp_buf ==> jmp_buf calc_matherr_jmpbuf
int post_init ==> int calc_use_scanerr_jmpbuf
jmp_buf jmpbuf ==> jmpbuf calc_scanerr_jmpbuf
char *calc_error ==> char calc_err_msg[MAXERROR+1]
These values are now declared in the lib_calc.h include file.
The value MAXERROR is now defined in lib_calc.h instead of calc.h.
The calc_err_msg[] buffer is now used for math errors as well
as scan and parse errors.
Parse/scan errors will not be printed if calc_print_scanerr_msg
is zero. By default:
int calc_print_scanerr_msg = 1;
This variable is declared in the lib_calc.h include file. Storage
comes from libcalc.
Parse/scan warnings will not be printed if calc_print_scanwarn_msg
is zero. By default:
int calc_print_scanwarn_msg = 1;
This variable is declared in the lib_calc.h include file. Storage
comes from libcalc.
The last parse/scan error message is stored in the calc_err_msg[]
buffer. This happens even when calc_print_scanerr_msg is zero.
The last parse/scan warning message is stored in the calc_warn_msg[]
buffer. After each parse/scan warning condition is detected,
the value calc_warn_cnt is incremented. This happens even when
calc_print_scanwarn_msg is zero.
The calc_warn_msg[] buffer and calc_warn_cnt variables are declared
in the lib_calc.h include file. Storage comes from libcalc.
See the file, LIBRARY or use the calc command "help libcalc" for
more information on calc error processing. This file has been
updated to reflect the changes noted above in this section.
The make install rule removes std_arg.h, have_malloc.h, math_error.h,
string.h, and win32dll.h from ${INCDIR} if they exist. These calc
include files are no longer supported.
Do reduce the number of special case .o build rules, the
${ALLOW_CUSTOM} make flag is added to ${CFLAGS} by default. This means
that if ALLOW_CUSTOM= -DCUSTOM, then -DCUSTOM is given to the compile
line of most .c files.
Calc -v reports "w/custom functions" or "w/o custom functions" on
the version string depending on if calc was compiled with the
ALLOW_CUSTOM= -DCUSTOM or not.
Replaced the concept of compiler sets in the Makefile with
host target section in the Makefile. Initial host targets are:
Linux
Darwin
FreeBSD
(default) <<== Target does not match any previous target name
Simple
NOTE: If your target is not supported below and the default target
is not suitable for your needs, please send to the:
calc-contrib at asthe dot com
EMail address an "ifeq ($(target),YOUR_TARGET_NAME)"
... "endif" set of lines from the Makefile so that
we can consider them for the next release.
The custom/Makefile is now constructed from 3 parts: custom/Makefile.head,
the host target section in Makefile, and the custom/Makefile.tail.
The top level Makefile and the custom/Makefile require a GNU Make
(such as gmake) or an equivalently advanced make. On many targets,
the default make is sufficient. On FreeBSD for example, one must
use gmake instead of make.
If your target system does not have GNU Make (or equivalent), then
you should try using the Makefile.simple and custom/Makefile.simple
files:
mv Makefile Makefile.gmake
cp Makefile.simple Makefile
mv custom/Makefile custom/Makefile.gmake
cp custom/Makefile.simple custom/Makefile
make all
Added the ability to build calc with dynamic libraries, static
libraries or both. Many thanks goes to Matthew Miller (mattdm
at mattdm dot org) and Mirko Viviani (mirko at objectlab dot
org) for this help, encouragement, and testing of this major change!
Added BLD_TYPE Makefile variable to control how calc is
built. The BLD_TYPE value may be one of:
BLD_TYPE= calc-dynamic-only
BLD_TYPE= calc-static-only
Each host target establishes a default BLD_TYPE value. Of course
one can override the host target BLD_TYPE on the make command line:
make clobber
make calc-dynamic-only BLD_TYPE=calc-dynamic-only
make clobber
make calc-static-only BLD_TYPE=calc-static-only
NOTE: It is a very good idea to first clobber (remove) any previously
built .o, libs and executables before switching the build
between static and dynamic.
which have the same effect as make all with a given build phase set.
For Linux and Darwin, the default BLD_TYPE is calc-dynamic-only.
For the simple case, BLD_TYPE is calc-static-only. For the
default target (the target does not match any of the previous
defined targets), BLD_TYPE is calc-static-only.
Added ${CSFLAGS} make variable to hold the {$CC} flags for compiling
without shared library. By default, ${CFLAGS} is ${CSFLAGS} with
${CC_SHARE} added to it.
Added ${CC_SHARE}, ${LIBCALC_SHLIB}, ${LIBCUSTCALC_SHLIB}, and
${LD_SHARE} to the remaining compiler sets.
Fixed make depend and make uninstall rules. Performed various
makefile syntax cleanups.
Removed ${PROGS} and ${STATIC_PROGS} Makefile variables due to
the new BLD_TYPE system (see above).
Added missing help for cp, calcpath, and stoponerror.
Noted that calc fails the regression test (and will crash at
various times) when compiled with gcc v4.1.0. This problem was
first reported under Fedora Core 5 by Christian Siebert.
Set the LESSCHARSET to iso8859 so that less will not confuse or
upset the col utility with Invalid or incomplete multi-byte or wide
characters.
Updated the Free Software Foundation postal address and updated
the COPYING-LGPL from http://www.fsf.org/licensing/licenses/lgpl.txt
on 2007-Mar-14. Calc is using the same Version 2.1 of the LGPL,
only the postal address of the Free Software Foundation has
been updated. All source files were updated to RCS level 30.
Thanks goes to Martin Buck (m at rtin-buck dor de) for this patch.
Added printf arg checking for GNU C compilers that helps check
printf-style functions in calc. Thanks goes to Martin Buck (m at
rtin-buck dor de) for this patch.
Fixed issues where the argument of a printf-like did not match the
format type.
Removed build function md5(). The MD5 hash has been compromised to
such a degree that is it no longer advisable to use this function.
Removed build function sha(). The SHA hash has been compromised to
such a degree that is it no longer advisable to use this function.
Note that the SHA-1 hash has not been compromised to the same degree
and so this hash function remains.
Renamed shs1.c to sha1.c. Renamed shs1.h to sha1.h.
Added custom registers. The custom register function:
custom("register", 3)
returns the value of custom register 3. Custom registers, initialized
with 0, may take on any calc value:
custom("register", regnum, value)
Added REGNUM_MAX to the sysinfo custom function to return the maximum
register number:
custom("sysinfo", "REGNUM_MAX")
which defaults to 31. The first custom register is 0 and thus the
default number of custom registers is 32.
Added E_OK #define in calc.h to indicate no error (0).
Renamed C function powivalue() in value.c to powvalue() because it
now handles raising NUMBER or COMPLEX to a NUMBER or COMPLEX power.
The powervalue() function in value.c may be given a NULL epsilon
which will cause to the builtin epsilon value to be used.
Calc supports both real and complex exponentiation bases and exponents.
For a ^ b and a ** b, "a" and "b" can be a real value or a complex value:
2^3 3i^4
2.5 ^ 3.5 0.5i ^ 0.25
2.5 ^ 2.718i 3.13145i ^ 0.30103i
Fixed typos in the calc man page thanks to a Debian bug report
by A. Costa <agcosta at gis dot .net> that wsa kindly forwarded
to us by Martin Buck <m at rtin-buck dot de>.
The following are the changes from calc version 2.12.1.8 to 2.12.1.9:
Fixed calc cscripts that contained comments that were not valid calc
comments. Improved calc comment documentation in "help unexpected"
to help other avoid similar mistakes. Calc comments are of the form:
/* c style comments */
/*
* multi-line
* comments
*/
## two or more #-signs
### in a row
### Note that # along is a calc unary and binary operator
Added "help pound" or "help #' to document the # operator, comments,
and the first line of cscript files.
Documented these help commands in "help help":
help ->
help *
help .
help %
help //
help #
The usage help file is now formed from the contents of the calc man page.
So "help usage" prints the version of the calc man page. Added ${COL}
makefile symbol to support the formation of the calc.usage file from
calc.1 via the CALCPAGER (less) or NROFF (if NROFF is non-empty).
The "help calc" command is now equivalent to "help help".
The "help define" command is now equivalent to "help command".
Fixed calc command line usage message.
Fixed missing README.src file in RPM src and tgz src tarball.
Removed HAVE_SNPRINTF test in version.c. We now assume that
all systems come with the standard snprintf() library function.
Make does not assume that DONT_HAVE_VSPRINTF must be defined in
order to test for varargs (via have_varvs.c). Instead it uses the
${HAVE_VSPRINTF} to determine if the vsprintf() and vsnprintf()
should be tested to assumed to exist or not exist.
Tests for the existence of vsprintf() now also require the existence
of vsnprintf(). Test for the existence of vsnprintf() now also
require the existence of vsprintf().
The #define CALC_SIZE_T was never used except when memmove() was
not found. This symbol was renamed to MEMMOVE_SIZE_T. Calc
requires that size_t must be a known type.
Calc and cscripts are installed mode 0755 instead of 0555 to
make rpmlint happy.
Make clobber cleanup as suggested by Martin Buck <m at rtin-buck dot de>.
The clobber rule now depends on the clean rule.
The following are the changes from calc version 2.12.1.6 to 2.12.1.7:
Added the calc builtin function, usertime(), to return the amount of
user CPU time used by the current process. Unlike the old runtime()
builtin, the CPU time reported for long running processes will not
wrap around to 0 after only a few months.
Added the calc built0in function, systime(), to return the amount of
kernel CPU time used by the current process.
The runtime() builtin function now returns the total amount of CPU
time used by the current process. This time includes both user mode
and kernel mode time. Unlike the old runtime() builtin, the builtin
includes time spent executing operating system code on behalf of
the current process.
Fixed runtime() so that the CPU time reported for long running
processes will wrap around to 0 for a long time.
Added config("hz") to return the clock tick rate. This is
a read-only configuration value.
Added regression tests for recently added config() parameters.
Fixed the #define symbols that were created in have_strdup.h.
Previously this file looked as if have_rusage.h has been
included already.
Restored the function of "help" (without any args) printing the
default help file. Thanks for this fix goes to Silvan Minghetti
<bullet at users dot sourceforge dot net>.
Fixed a problem where some old MS environments failed some of the
regression tests because "read -once foo.cal" was not behaving
correctly due to how the _fullpath() was being called. Thanks for
this fix goes to Anatoly <notexistent-anb at yandex dot ru>.
Documented the mis-feature about how calc parses if, for, while
and do statements in an unexpected way. For example:
This works as expected:
if (expr) {
...
}
However this WILL NOT WORK AS EXPECTED:
if (expr)
{
...
}
because calc will parse the if being terminated by
an empty statement followed by a
if (expr) ;
{
...
}
See also "help statement", "help unexpected", "help todo", and
"help bugs".
The following are the changes from calc version 2.12.1 to 2.12.1.5:
Fixed minor typos in the 'version 2.12.0 to 2.12.0.8' section below.
Made minor formatting changes as well.
Changed use of ${Q} in the Makefile to avoid an make "feature"
related to OpenBSD. Added ${RM} make variable for make tools that
do not have builtin defined terms.
Removed the ECHO_PROG Makefile variable. Also removed it from
the sysinfo() custom function.
Improved the support for cross-compiled environments by using
make symbols for all non-shell commands executed by Makefiles.
Fixed a problem with the make chk awk script which failed under
OS X 10.4.7.
Fixed a few minor variables that were not set to default values in
lower level Makefiles.
Fixed a reference to a non-existent make variable in HOWTO.INSTALL.
The following are the changes from calc version 2.12.0 to 2.12.0.8:
Fixed ellip.cal to deal with a calc syntax change that happened Fixed ellip.cal to deal with a calc syntax change that happened
many ages ago but was never applied to this file until now. many ages ago but was never applied to this file until now.
@@ -109,34 +717,34 @@ The following are the changes from calc version 2.12.0 to date:
<ebowen at une dot edu dot au>, the dotest evaluates individual <ebowen at une dot edu dot au>, the dotest evaluates individual
lines from a file. The dotest() function takes 1 to 3 arguments: lines from a file. The dotest() function takes 1 to 3 arguments:
dotest(dotest_file [,dotest_code [,dotest_maxcond]]) dotest(dotest_file [,dotest_code [,dotest_maxcond]])
dotest_file dotest_file
Search along CALCPATH for dotest_file, which contains lines that Search along CALCPATH for dotest_file, which contains lines that
should evaluate to 1. Comment lines and empty lines are ignored. should evaluate to 1. Comment lines and empty lines are ignored.
Comment lines should use ## instead of the multi like /* ... */ Comment lines should use ## instead of the multi like /* ... */
because lines are evaluated one line at a time. because lines are evaluated one line at a time.
dotest_code dotest_code
Assign the code number that is to be printed at the start of Assign the code number that is to be printed at the start of
each non-error line and after **** in each error line. each non-error line and after **** in each error line.
The default code number is 999. The default code number is 999.
dotest_maxcond dotest_maxcond
The maximum number of error conditions that may be detected. The maximum number of error conditions that may be detected.
An error condition is not a sign of a problem, in some cases An error condition is not a sign of a problem, in some cases
a line deliberately forces an error condition. A value of -1, a line deliberately forces an error condition. A value of -1,
the default, implies a maximum of 2147483647. the default, implies a maximum of 2147483647.
Global variables and functions must be declared ahead of time because Global variables and functions must be declared ahead of time because
the dotest scope of evaluation is a line at a time. For example: the dotest scope of evaluation is a line at a time. For example:
; read dotest.cal ; read dotest.cal
; read set8700.cal ; read set8700.cal
; dotest("set8700.line"); ; dotest("set8700.line");
Updated the todo / wish list items. The top priority now is to Updated the todo / wish list items. The top priority now is to
convert calc to GNU autoconf / configure to build the calc. convert calc to GNU autoconf / configure to build the calc.
@@ -164,7 +772,7 @@ The following are the changes from calc version 2.12.0 to date:
Made math_error() in math_error.c more robust against a error Made math_error() in math_error.c more robust against a error
message constant that is too long. message constant that is too long.
Made read_bindings() in hist.c more robust against very line bindings Made read_bindings() in hist.c more robust against very long bindings
config lines. config lines.
Made listsort() in listfunc.c and matsort() matfunc.c more robust Made listsort() in listfunc.c and matsort() matfunc.c more robust
@@ -179,8 +787,7 @@ The following are the changes from calc version 2.12.0 to date:
no other compile errors, only the unterminated comment will stop no other compile errors, only the unterminated comment will stop
completion of the function being defined. completion of the function being defined.
Added the reading of more calc resource files to the cal/regress.cal The cal/regress.cal now reads most of the calc resource files.
regression test.
The issq() test had a slight performance boost. A minor note The issq() test had a slight performance boost. A minor note
was added to the help/issq file. was added to the help/issq file.
@@ -192,25 +799,18 @@ The following are the changes from calc version 2.12.0 to date:
the number of bits in the fundamental base in which calculations the number of bits in the fundamental base in which calculations
are performed. This is a read-only configuration value. are performed. This is a read-only configuration value.
Calc now permits such as: Calc now will allow syntax such as ++*p-- and ++*----*++p----
++*p-- ++*----*++p----
where p is an lvalue; successful evaluation of course require the where p is an lvalue; successful evaluation of course require the
successive operations to be performed to have operands of appropriate successive operations to be performed to have operands of appropriate
types; e.g. in *A, A is usually an lvalue whose current value is a types; e.g. in *A, A is usually an lvalue whose current value is a
pointer. ++ and -- act on lvalues. In the above examples there are pointer. ++ and -- act on lvalues. In the above examples there are
implied parentheses from the beginning to immediately after p. If implied parentheses from the beginning to immediately after p. If
there are no pre ++ or -- operations, as in there are no pre ++ or -- operations, as in **p++. The implied
parentheses are from immediately before p to the end.
**p++
the implied parentheses are from immediately before p to the end.
Improved the error message when && is used as a prefix operator. Improved the error message when && is used as a prefix operator.
Changed the help/config file to read like a builtin function Changed the help/config file to read like a builtin function help file.
help file.
One can no longer set to 1, or to a value < 0, the config() One can no longer set to 1, or to a value < 0, the config()
parameters: "mul2", "sq2", "pow2", and "redc2". These values parameters: "mul2", "sq2", "pow2", and "redc2". These values
@@ -224,10 +824,10 @@ The following are the changes from calc version 2.12.0 to date:
config("sq2") == 3388 config("sq2") == 3388
config("pow2") == 176 config("pow2") == 176
These values were determined established on a 1.8GHz AMD 32-bit These values were determined established on a 1.8GHz AMD 32-bit
CPU of ~3406 BogoMIPS by the new resource file: CPU of ~3406 BogoMIPS by the new resource file:
cal/alg_config.cal cal/alg_config.cal
Regarding the alg_config.cal resource file: Regarding the alg_config.cal resource file:
@@ -255,7 +855,7 @@ The following are the changes from calc version 2.12.0 to date:
inaccuracy in CPU timings will cause the best value returned to inaccuracy in CPU timings will cause the best value returned to
differ slightly from run to run. differ slightly from run to run.
See "help resource" for more information on alg_config.cal. See "help resource" for more information on alg_config.cal.
Updated the "help variable" text to reflect the current calc Updated the "help variable" text to reflect the current calc
use of ` (backquote), * (star), and & (ampersand). use of ` (backquote), * (star), and & (ampersand).
@@ -304,24 +904,22 @@ The following are the changes from calc version 2.12.0 to date:
silly to use the same identifier for both a parameter and local silly to use the same identifier for both a parameter and local
variable, it should not be illegal. variable, it should not be illegal.
The provision of warnings for possibly questionable programming in Added warnings for possibly questionable code in function definitions.
function definitions.
Added config("redecl_warn", boolean) to control if calc issues Added config("redecl_warn", boolean) to control if calc issues
warnings about variables being declared. The config("redecl_warn") warnings about variables being declared. The config("redecl_warn")
value is TRUE by default. value is TRUE by default.
Added config("dupvar_warn", boolean) to control if calc issues Added config("dupvar_warn", boolean) to control if calc issues
warnings about when variable names collide. Examples of variable name warnings about when variable names collide. The config("dupvar_warn")
collisions include when: value is TRUE by default. Examples of variable name collisions
include when:
* both local and static variables have the same name * both local and static variables have the same name
* both local and global variables have the same name * both local and global variables have the same name
* both function parameter and local variables have the same name * both function parameter and local variables have the same name
* both function parameter and global variables have the same name * both function parameter and global variables have the same name
The config("dupvar_warn") value is TRUE by default.
Fix of a bug which causes some static variables not to be correctly Fix of a bug which causes some static variables not to be correctly
unscoped when their identifiers are used in a global declaration. unscoped when their identifiers are used in a global declaration.
@@ -351,7 +949,7 @@ The following are the changes from calc version 2.12.0 to date:
read sumtimes read sumtimes
doalltimes(1e6) doalltimes(1e6)
Calc now ignores carrage returns (\r), vertical tabs (\v), and Calc now ignores carriage returns (\r), vertical tabs (\v), and
form feeds (\f) when token parsing. Thus users on Windoz systems form feeds (\f) when token parsing. Thus users on Windoz systems
can write files using their \r\n format and users on non-Windoz can write files using their \r\n format and users on non-Windoz
systems can read them without errors. systems can read them without errors.
@@ -359,7 +957,28 @@ The following are the changes from calc version 2.12.0 to date:
The quomod() builtin function now takes an optional 5th argument The quomod() builtin function now takes an optional 5th argument
which controls the rounding mode like config("quomod") does, but which controls the rounding mode like config("quomod") does, but
only for that call. Now quomod() is in line with quo() and mod() only for that call. Now quomod() is in line with quo() and mod()
in that the final augument is an optional rounding mode. in that the final argument is an optional rounding mode.
Added a "make uninstall" rule which will attempt to remove everything
that was installed by a "make install".
Changed the "Copyright" line in the rpm spec file to a "License" line
as per new rpm v4.4 syntax.
The quomod() builtin function does not allow constants for its 3rd
and 4th arguments. Updated the "help quomod" file and added more
quomod regression tests.
Added patch from Ernest Bowen <ebowen at une dot edu dot au> to
add the builtin: estr(). The estr(x) will return a representation
of a null, string, real number, complex number, list, matrix,
object. block, named block, error as a string.
Added patch from Ernest Bowen <ebowen at une dot edu dot au> to
add the builtin: fgetfile(). The fgetfile(x) will return the rest
of an open file as a string.
Improved help files for fgetfield, fputs, name, or quomod.
The following are the changes from calc version 2.11.10.1 to 2.11.11: The following are the changes from calc version 2.11.10.1 to 2.11.11:
@@ -2546,8 +3165,6 @@ The following are the changes from calc version 2.10.3t5.38 to 2.11.3t5.46:
into a single section. into a single section.
The following are the changes from calc version 2.10.3t5.34 to 2.10.3t5.37: The following are the changes from calc version 2.10.3t5.34 to 2.10.3t5.37:
Per request from David I Bell, the README line: Per request from David I Bell, the README line:
@@ -6179,10 +6796,10 @@ Following is a list of visible changes to calc from version 1.24.7 to 1.26.1:
## A copy of version 2.1 of the GNU Lesser General Public License is ## A copy of version 2.1 of the GNU Lesser General Public License is
## distributed with calc under the filename COPYING-LGPL. You should have ## distributed with calc under the filename COPYING-LGPL. You should have
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
## ##
## @(#) $Revision: 29.83 $ ## @(#) $Revision: 30.21 $
## @(#) $Id: CHANGES,v 29.83 2006/06/25 22:58:54 chongo Exp $ ## @(#) $Id: CHANGES,v 30.21 2010/09/02 09:50:19 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $
## ##
## Under source code control: 1993/06/02 18:12:57 ## Under source code control: 1993/06/02 18:12:57

24
COPYING
View File

@@ -6,14 +6,14 @@ This file is Copyrighted
This file is covered under the following Copyright: This file is covered under the following Copyright:
Copyright (C) 1999 Landon Curt Noll Copyright (C) 1999-2008 Landon Curt Noll
All rights reserved. All rights reserved.
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. of this license document, but changing it is not allowed.
# @(#) $Revision: 29.8 $ # @(#) $Revision: 30.2 $
# @(#) $Id: COPYING,v 29.8 2006/05/01 19:16:57 chongo Exp $ # @(#) $Id: COPYING,v 30.2 2008/10/24 10:46:52 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $
=-= =-=
@@ -45,12 +45,12 @@ Calc is covered by the GNU Lesser General Public License
Public License by the calc command: help copying-lgpl Public License by the calc command: help copying-lgpl
You should have received a copy of the version 2.1 GNU Lesser General You should have received a copy of the version 2.1 GNU Lesser General
Public License with calc; if not, write to: Public License with calc; if not, write to the following address:
Free Software Foundation, Inc. Free Software Foundation, Inc.
59 Temple Place 51 Franklin Street
Suite 330 Fifth Floor
Boston, MA 02111-1307 Boston, MA 02110-1301
USA USA
The contact addresses for calc is as follows: The contact addresses for calc is as follows:
@@ -168,9 +168,8 @@ Calc copyrights and exception files
These files are not covered under one of the Copyrights listed above: These files are not covered under one of the Copyrights listed above:
shs1.c shs1.h shs.c shs.h sha1.c sha1.h COPYING
md5.c md5.h COPYING COPYING-LGPL COPYING-LGPL cal/qtime.cal cal/screen.cal
cal/qtime.cal cal/screen.cal
The file COPYING-LGPL, which contains a copy of the version 2.1 The file COPYING-LGPL, which contains a copy of the version 2.1
GNU Lesser General Public License, is itself Copyrighted by the GNU Lesser General Public License, is itself Copyrighted by the
@@ -182,9 +181,8 @@ Calc copyrights and exception files
top of this file. It is important to note that you may distribute top of this file. It is important to note that you may distribute
verbatim copies of this file but you may not modify this file. verbatim copies of this file but you may not modify this file.
Some of these exception files are in the public domain. Other Some of these exception files are in the public domain. Other files
exception files have non-LGPL Copyrights. Other files are under a are under the LGPL but have different authors that those listed above.
LGPL Copyright but have different authors.
In all cases one may use and distribute these exception files freely. In all cases one may use and distribute these exception files freely.
And because one may freely distribute the LGPL covered files, the And because one may freely distribute the LGPL covered files, the

View File

@@ -2,7 +2,7 @@
Version 2.1, February 1999 Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc. Copyright (C) 1991, 1999 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. of this license document, but changing it is not allowed.
@@ -476,7 +476,7 @@ convey the exclusion of warranty; and each file should have at least the
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version. version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -485,7 +485,7 @@ convey the exclusion of warranty; and each file should have at least the
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Also add information on how to contact you by electronic and paper mail. Also add information on how to contact you by electronic and paper mail.

View File

@@ -1,4 +1,4 @@
Installing calc from the gziped tarball in 4 easy steps: Installing calc from the bzip2-ed tarball in 4 easy steps:
0) If your platform supports i686 RPMs, you may want to go to: 0) If your platform supports i686 RPMs, you may want to go to:
@@ -17,16 +17,30 @@ Installing calc from the gziped tarball in 4 easy steps:
The following 4 steps apply to calc source tree that comes from either: The following 4 steps apply to calc source tree that comes from either:
gunzip -c calc-*.tar.gz | tar -xvf - bunzip2 -c calc-*.tar.bz2 | tar -xvf -
or from: or from:
rpm -ivh calc-*.src.rpm rpm -ivh calc-*.src.rpm
cd /var/tmp cd /var/tmp
gunzip -c /usr/src/redhat/SOURCES/calc-*.tar.gz | tar -xvf - bunzip2 -c /usr/src/redhat/SOURCES/calc-*.tar.bz2 | tar -xvf -
1) Look at the makefile, and adjust it to suit your needs. 1) Look at the makefile, and adjust it to suit your needs.
The top level Makefile and the custom/Makefile require a GNU
Make (such as gmake) or an equivalently advanced make. On many
targets, the default make is sufficent. On FreeBSD for example,
one must use gmake instead of make.
If your target system does not have GNU Make (or equivalent), then
you should try using the Makefile.simple and custom/Makefile.simple
files:
mv Makefile Makefile.gmake
cp Makefile.simple Makefile
mv custom/Makefile custom/Makefile.gmake
cp custom/Makefile.simple custom/Makefile
The Makefile, as shipped, is suitable for installation under The Makefile, as shipped, is suitable for installation under
Linux and Un*x-like environments. For the most part, the default Linux and Un*x-like environments. For the most part, the default
values should work. If in doubt, follow the 'When in doubt' values should work. If in doubt, follow the 'When in doubt'
@@ -52,14 +66,14 @@ Installing calc from the gziped tarball in 4 easy steps:
CALC_INCDIR where the calc include files are installed CALC_INCDIR where the calc include files are installed
CUSTOMCALDIR where custom *.cal files are installed CUSTOMCALDIR where custom *.cal files are installed
CUSTOMHELPDIR where custom help files are installed CUSTOMHELPDIR where custom help files are installed
CUSTOMINCPDIR where custom .h files are installed CUSTOMINCDIR where custom .h files are installed
SCRIPTDIR where calc shell scripts are installed SCRIPTDIR where calc shell scripts are installed
If you want to install calc files under a top level directory, If you want to install calc files under a top level directory,
then set the T value: then set the T value:
The calc install is performed under $T, the calc build is The calc install is performed under ${T}, the calc build is
performed under /. The purpose for $T is to allow someone performed under /. The purpose for ${T} is to allow someone
to install calc somewhere other than into the system area. to install calc somewhere other than into the system area.
For example, if: For example, if:
@@ -79,10 +93,10 @@ Installing calc from the gziped tarball in 4 easy steps:
calc help, .cal ...: /var/tmp/testing/usr/share/calc calc help, .cal ...: /var/tmp/testing/usr/share/calc
... etc ... /var/tmp/testing/... ... etc ... /var/tmp/testing/...
If $T is empty, calc is installed under /, which is the same If ${T} is empty, calc is installed under /, which is the same
top of tree for which it was built. If $T is non-empty, then top of tree for which it was built. If ${T} is non-empty, then
calc is installed under $T, as if one had to chroot under calc is installed under ${T}, as if one had to chroot under
$T for calc to operate. ${T} for calc to operate.
Look for the section that starts: Look for the section that starts:
@@ -126,12 +140,36 @@ Installing calc from the gziped tarball in 4 easy steps:
2) build calc: 2) build calc:
The top level Makefile and the custom/Makefile require a GNU
Make (such as gmake) or an equivalently advanced make. On many
targets, the default make is sufficent. On FreeBSD for example,
one must use gmake instead of make.
If your target system does not have GNU Make (or equivalent), then
you should try using the Makefile.simple and custom/Makefile.simple
files:
mv Makefile Makefile.gmake
cp Makefile.simple Makefile
mv custom/Makefile custom/Makefile.gmake
cp custom/Makefile.simple custom/Makefile
make all make all
==> We are interested in any compiler warnings (and errors) that ==> We are interested in any compiler warnings (and errors) that
you may find. See the BUGS file if you find any compiler you may find. See the BUGS file if you find any compiler
warning or errors. warning or errors.
NOTE: You can force calc to build with only static libs:
make clobber
make calc-static-only BLD_TYPE=calc-static-only
or force calc to build with only dynamic libs:
make clobber
make calc-dynamic-only BLD_TYPE=calc-dynamic-only
3) test calc: 3) test calc:
make check make check
@@ -139,6 +177,10 @@ Installing calc from the gziped tarball in 4 easy steps:
==> If you run into problems, read the BUGS file and follow ==> If you run into problems, read the BUGS file and follow
the instructions found in there. the instructions found in there.
NOTE: For a quiet check which only prints if something goes wrong:
make chk
4) install calc: 4) install calc:
make install make install
@@ -146,7 +188,7 @@ Installing calc from the gziped tarball in 4 easy steps:
We suggest that you might want to read the README file and look at We suggest that you might want to read the README file and look at
the calc help subsystem. See the README file for details. the calc help subsystem. See the README file for details.
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2007 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -160,10 +202,10 @@ the calc help subsystem. See the README file for details.
## A copy of version 2.1 of the GNU Lesser General Public License is ## A copy of version 2.1 of the GNU Lesser General Public License is
## distributed with calc under the filename COPYING-LGPL. You should have ## distributed with calc under the filename COPYING-LGPL. You should have
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
## ##
## @(#) $Revision: 29.7 $ ## @(#) $Revision: 30.6 $
## @(#) $Id: HOWTO.INSTALL,v 29.7 2003/04/15 03:38:34 chongo Exp $ ## @(#) $Id: HOWTO.INSTALL,v 30.6 2007/10/16 12:22:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/HOWTO.INSTALL,v $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/HOWTO.INSTALL,v $
## ##
## Under source code control: 1999/09/27 20:48:44 ## Under source code control: 1999/09/27 20:48:44

251
LIBRARY
View File

@@ -58,13 +58,18 @@ External programs most likely want to use the installed calc header
files under ${INCDIRCALC}. External programs most likely NOT want files under ${INCDIRCALC}. External programs most likely NOT want
to define CALC_SRC. to define CALC_SRC.
You need to include the following file to get the symbols and variables
related to error handling:
lib_calc.h
External programs may want to compile with: External programs may want to compile with:
-L${LIBDIR} -lcalc -I${INCDIR} -L${LIBDIR} -lcalc
If custom functions are also used, they may want to compile with: If custom functions are also used, they may want to compile with:
-L${LIBDIR} -lcalc -lcustcalc -I${INCDIR} -L${LIBDIR} -lcalc -lcustcalc
The CALC_SRC symbol should NOT be defined by default. However if you are The CALC_SRC symbol should NOT be defined by default. However if you are
feeling pedantic you may want to force CALC_SRC to be undefined: feeling pedantic you may want to force CALC_SRC to be undefined:
@@ -73,71 +78,215 @@ feeling pedantic you may want to force CALC_SRC to be undefined:
as well. as well.
-------------- -------------------
ERROR HANDLING MATH ERROR HANDLING
-------------- -------------------
Your program MUST provide a function called math_error. This is called by The math_error() function is called by the math routines on an error
the math routines on an error condition, such as malloc failures or a condition, such as malloc failures, division by zero, or some form of
division by zero. The routine is called in the manner of printf, with a an internal computation error. The routine is called in the manner of
format string and optional arguments. (However, none of the low level math printf, with a format string and optional arguments:
routines currently uses formatting, so if you are lazy you can simply use
the first argument as a simple error string.) For example, one of the
error calls you might expect to receive is:
math_error("Division by zero"); void math_error(char *fmt, ...);
Your program can handle errors in basically one of two ways. Firstly, it Your program must handle math errors in one of three ways:
can simply print the error message and then exit. Secondly, you can make
use of setjmp and longjmp in your program. Use setjmp at some appropriate
level in your program, and use longjmp in the math_error routine to return
to that level and so recover from the error. This is what the calc program
does.
For convenience, the link library libcalc.a contains a math_error routine. 1) Print the error message and then exit
By default, this routine simply prints a message to stderr and then exits.
By simply linking in this link library, any calc errors will result in a
error message on stderr followed by an exit.
External programs that wish to use this math_error may want to compile with: There is a math_error() function supplied with the calc library.
By default, this routine simply prints a message to stderr and
then exits. By simply linking in this link library, any calc
errors will result in a error message on stderr followed by
an exit.
-I${LIBDIR} -L${LIBDIR} -lcalc 2) Use setjmp and longjmp in your program
If one sets up calc_jmp_buf, and then sets calc_jmp to non-zero then Use setjmp at some appropriate level in your program, and let
this routine will longjmp back (with the value of calc_jmp) instead. the longjmp in math_error() return to that level and to allow you
In addition, the last calc error message will be found in calc_error; to recover from the error. This is what the calc program does.
this error is not printed to stderr. The calc error message will
not have a trailing newline.
For example: If one sets up calc_matherr_jmpbuf, and then sets
calc_use_matherr_jmpbuf to non-zero then math_error() will
longjmp back with the return value of calc_use_matherr_jmpbuf.
In addition, the last calc error message will be found in
calc_err_msg; this error is not printed to stderr. The calc
error message will not have a trailing newline.
#include <setjmp.h> For example:
extern jmp_buf calc_jmp_buf; #include <setjmp.h>
extern int calc_jmp; #include "lib_calc.h"
extern char *calc_error;
int error;
... int error;
if ((error = setjmp(calc_jmp_buf)) != 0) { ...
/* reinitialize calc after a longjmp */ if ((error = setjmp(calc_matherr_jmpbuf)) != 0) {
reinitialize();
/* report the error */
printf("Ouch: %s\n", calc_err_msg);
/* reinitialize calc after the longjmp */
reinitialize();
}
calc_use_matherr_jmpbuf = 1;
If calc_use_matherr_jmpbuf is non-zero, then the jmp_buf value
calc_matherr_jmpbuf must be initialized by the setjmp() function
or your program will crash.
3) Supply your own math_error function:
void math_error(char *fmt, ...);
Your math_error() function may exit or transfer control to outside
of the calc library, but it must never return or calc will crash.
External programs can obtain the appropriate calc symbols by compiling with:
-I${INCDIR} -L${LIBDIR} -lcalc
-------------------------
PARSE/SCAN ERROR HANDLING
-------------------------
The scanerror() function is called when calc encounters a parse/scan
error. For example, scanerror() is called when calc is given code
with a syntax error.
The variable, calc_print_scanerr_msg, controls if calc prints to stderr,
any parse/scan errors. By default, this variable it set to 1 and so
parse/scan errors are printed to stderr. By setting this value to zero,
parse/scan errors are not printed:
#include "lib_calc.h"
/* do not print parse/scan errors to stderr */
calc_print_scanerr_msg = 0;
The last calc math error or calc parse/scan error message is kept
in the NUL terminated buffer:
char calc_err_msg[MAXERROR+1];
The value of calc_print_scanerr_msg does not change the use
of the calc_err_msg[] buffer. Messages are stored in that
buffer regardless of the calc_print_scanerr_msg value.
The calc_print_scanerr_msg and the calc_err_msg[] buffer are declared
lib_calc.h include file. The initialized storage for these variables
comes from the calc library. The MAXERROR symbol is also declared in
the lib_calc.h include file.
Your program must handle parse/scan errors in one of two ways:
1) exit on error
If you do not setup the calc_scanerr_jmpbuf, then when calc
encounters a parse/scan error, a message will be printed to
stderr and calc will exit.
2) Use setjmp and longjmp in your program
Use setjmp at some appropriate level in your program, and let
the longjmp in scanerror() return to that level and to allow you
to recover from the error. This is what the calc program does.
If one sets up calc_scanerr_jmpbuf, and then sets
calc_use_scanerr_jmpbuf to non-zero then scanerror() will longjmp
back with the return with a non-zero code. In addition, the last
calc error message will be found in calc_err_msg[]; this error is
not printed to stderr. The calc error message will not have a
trailing newline.
For example:
#include <setjmp.h>
#include "lib_calc.h"
int scan_error;
...
/* delay the printing of the parse/scan error */
calc_use_scanerr_jmpbuf = 0; /* this is optional */
if ((scan_error = setjmp(calc_scanerr_jmpbuf)) != 0) {
/* report the parse/scan */
if (calc_use_scanerr_jmpbuf == 0) {
printf("parse error: %s\n", calc_err_msg);
}
/* initialize calc after the longjmp */
initialize();
}
calc_use_scanerr_jmpbuf = 1;
If calc_use_scanerr_jmpbuf is non-zero, then the jmp_buf value
calc_scanerr_jmpbuf must be initialized by the setjmp() function
or your program will crash.
External programs can obtain the appropriate calc symbols by compiling with:
-I${INCDIR} -L${LIBDIR} -lcalc
---------------------------
PARSE/SCAN WARNING HANDLING
---------------------------
Calc parse/scan warning message are printed to stderr by the warning()
function. The routine is called in the manner of printf, with a format
string and optional arguments:
void warning(char *fmt, ...);
The variable, calc_print_scanwarn_msg, controls if calc prints to stderr,
any parse/scan warnings. By default, this variable it set to 1 and so
parse/scan warnings are printed to stderr. By setting this value to zero,
parse/scan warnings are not printed:
#include "lib_calc.h"
/* do not print parse/scan warnings to stderr */
calc_print_scanwarn_msg = 0;
The last calc calc parse/scan warning message is kept in the NUL
terminated buffer:
char calc_warn_msg[MAXERROR+1];
The value of calc_print_scanwarn_msg does not change the use
of the calc_warn_msg[] buffer. Messages are stored in that
buffer regardless of the calc_print_scanwarn_msg value.
Your program must handle parse/scan warnings in one of two ways:
1) print the warning to stderr and continue
The warning() from libcalc prints warning messages to
stderr and returns. The flow of execution is not changed.
This is what calc does by default.
2) Supply your own warning function:
void warning(char *fmt, ...);
Your warning function should simply return when it is finished.
External programs can obtain the appropriate calc symbols by compiling with:
-I${INCDIR} -L${LIBDIR} -lcalc
/* report the error */
printf("Ouch: %s\n", calc_error);
}
calc_jmp = 1;
--------------- ---------------
OUTPUT ROUTINES OUTPUT ROUTINES
--------------- ---------------
The output from the routines in the link library normally goes to stdout. You The output from the routines in the link library normally goes to stdout.
can divert that output to either another FILE handle, or else to a string. You can divert that output to either another FILE handle, or else
Read the routines in zio.c to see what is available. Diversions can be to a string. Read the routines in zio.c to see what is available.
nested. Diversions can be nested.
You use math_setfp to divert output to another FILE handle. Calling You use math_setfp to divert output to another FILE handle. Calling
math_setfp with stdout restores output to stdout. math_setfp with stdout restores output to stdout.
@@ -487,10 +636,10 @@ need call libcalc_call_me_last() only once.
## A copy of version 2.1 of the GNU Lesser General Public License is ## A copy of version 2.1 of the GNU Lesser General Public License is
## distributed with calc under the filename COPYING-LGPL. You should have ## distributed with calc under the filename COPYING-LGPL. You should have
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
## ##
## @(#) $Revision: 29.5 $ ## @(#) $Revision: 30.1 $
## @(#) $Id: LIBRARY,v 29.5 2001/06/08 22:57:35 chongo Exp $ ## @(#) $Id: LIBRARY,v 30.1 2007/03/16 11:09:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/LIBRARY,v $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/LIBRARY,v $
## ##
## Under source code control: 1993/07/30 19:44:49 ## Under source code control: 1993/07/30 19:44:49

5190
Makefile

File diff suppressed because it is too large Load Diff

5603
Makefile.simple Normal file

File diff suppressed because it is too large Load Diff

6
README
View File

@@ -132,10 +132,10 @@ The calc web site is located at:
## A copy of version 2.1 of the GNU Lesser General Public License is ## A copy of version 2.1 of the GNU Lesser General Public License is
## distributed with calc under the filename COPYING-LGPL. You should have ## distributed with calc under the filename COPYING-LGPL. You should have
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 30.1 $
## @(#) $Id: README,v 29.3 2001/06/01 11:26:53 chongo Exp $ ## @(#) $Id: README,v 30.1 2007/03/16 11:09:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README,v $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/README,v $
## ##
## Under source code control: 1995/10/25 05:27:59 ## Under source code control: 1995/10/25 05:27:59

View File

@@ -10,6 +10,63 @@ NOTE: The main developers do not have access to a Windoz based platform.
Of course you are welcome to send us any patches that fix your Of course you are welcome to send us any patches that fix your
Windoz build environment. Windoz build environment.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-= 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 for Cygwin was performed by Thomas Jones-Low
(tjoneslo at softstart dot com).
In March 2009, Michael Penk (mpenk at wuska dot com) reported success in
installs under Cygwin:
On my fairly complete Cygwin installs, everything compiles,
checks, and installs correctly. My Cygwin is configured
in a very standard way (out of the box, using all of Cygwin's
defaults). The install worked on 5 different machines with
Cygwin on them: one XP home, one XP professional, and three
Vista professionals.
Using the calc Makefile, he did the following:
make all target=Cygwin
make check
make install
He also reports:
Of course, one should be logged in as an Administrator when
one builds and installs calc.
He was compiling calc 2.12.4.0 with Cygwin version 1.5.25-15.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-= If all else fails, for Cygwin =-=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Much earlier (2001?) Thomas Jones-Low (tjoneslo at softstart dot com)
recommended that you generate by hand all of the header files that
by the Makefile. This has been done for you via the makefile rule:
make win32_hsrc
which uses the Makefile variables in win32.mkdef to form these header
files under win32 directory.
You will find generated versions of these files located in the win32
sub-directory. These files may be appropriate for your Cygwin building
needs.
In particular:
Just copy the win32/*.[ch] files up into the top level calc
source directory, edit them (if needed) and build using the
Cygwin GCC compiler and Cygwin build environment.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-= =-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-= compiling under DJGPP =-= =-= compiling under DJGPP =-=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-= =-=-=-=-=-=-=-=-=-=-=-=-=-=-=
@@ -56,7 +113,7 @@ recommends the following settings:
CALCPATH= .;./cal;~/.cal;${CALC_SHAREDIR};${CUSTOMCALDIR} CALCPATH= .;./cal;~/.cal;${CALC_SHAREDIR};${CUSTOMCALDIR}
CALCRC= ${CALC_SHAREDIR}/startup;~/.calcrc;./.calcinit CALCRC= ${CALC_SHAREDIR}/startup;~/.calcrc;./.calcinit
CALCPAGER= less.exe -ci CALCPAGER= less.exe -ci
DEBUG= -O2 -gstabs+ DEBUG= -O2 -gstabs+ -DWINDOZ
The 'Linux set' or 'gcc set' (see the Select your compiler type section) The 'Linux set' or 'gcc set' (see the Select your compiler type section)
should work for DJGPP systems if you set the above Makefile variables. should work for DJGPP systems if you set the above Makefile variables.
@@ -68,81 +125,8 @@ Look for Makefile comments of the form:
Follow those recommendations. In cases where they conflict with Follow those recommendations. In cases where they conflict with
the above Makefile list, follow the recommendation in the Makefile. 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 ## Copyright (C) 2002-2009 Landon Curt Noll and Thomas Jones-Low
Cygwin project (http://sources.redhat.com/cygwin/) with the GCC compiler
and Un*x tools for Windows.
The major porting work was performed by Thomas Jones-Low
(tjoneslo at softstart dot com). He said:
I had previous stated to this group that I have successfully managed
to port a version of Calc to Windows, and promised some point to
post what was required, so here it is.
One obvious manner of doing this port is to get the latest version
of the Cygwin project (http://sources.redhat.com/cygwin/) with the
GCC compiler and Un*x tools for Windows and recompile.
I built my working version using Calc ... I am using Visual C++
version 7.0, which is an older version of the Microsoft development
tools. The make file provided with Calc is not compatible with
NMAKE, so I used the Visual Studio tools to generate another one
(not included). Calc is built in two parts, calc.dll, which is the
library, and calc.exe which is the command line interface.
He recommended that you generate by hand all of the header files that
by the Makefile. This has been done for you via the makefile rule:
make win32_hsrc
which uses the Makefile variables in win32.mkdef to form these header
files under win32 directory.
You will find generated versions of these files located in the win32
sub-directory. These files may be appropriate for your Cygwin building
needs.
In particular:
Just copy the win32/*.[ch] files up into the top level calc
source directory, edit them (if needed) and build using the
Cygwin GCC compiler and Cygwin build environment.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-=-= calc maintenance folk =-=-=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
People who maintain calc need to keep in mind the following:
The following was added to opcodes.h, config.h, zmath.h and value.h:
#if defined(_WIN32)
#ifdef _EXPORTING
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif
#else /* Windoz free systems */
#define DLL
#endif /* Windoz free systems */
Then DLL was added in front of all the exported functions. For example:
extern int configtype(char*);
was changed to:
DLL extern int configtype(char*);
## Copyright (C) 2002 Landon Curt Noll and Thomas Jones-Low
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -156,10 +140,10 @@ was changed to:
## A copy of version 2.1 of the GNU Lesser General Public License is ## A copy of version 2.1 of the GNU Lesser General Public License is
## distributed with calc under the filename COPYING-LGPL. You should have ## distributed with calc under the filename COPYING-LGPL. You should have
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
## ##
## @(#) $Revision: 29.12 $ ## @(#) $Revision: 30.2 $
## @(#) $Id: README.WINDOWS,v 29.12 2004/07/28 12:52:01 chongo Exp $ ## @(#) $Id: README.WINDOWS,v 30.2 2009/03/14 02:29:31 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README.WINDOWS,v $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/README.WINDOWS,v $
## ##
## Under source code control: 2001/02/25 14:00:05 ## Under source code control: 2001/02/25 14:00:05

32
addop.c
View File

@@ -1,7 +1,7 @@
/* /*
* addop - add opcodes to a function being compiled * addop - add opcodes to a function being compiled
* *
* Copyright (C) 1999-2006 David I. Bell and Ernest Bowen * Copyright (C) 1999-2007 David I. Bell and Ernest Bowen
* *
* Primary author: David I. Bell * Primary author: David I. Bell
* *
@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.13 $ * @(#) $Revision: 30.1 $
* @(#) $Id: addop.c,v 29.13 2006/06/20 10:28:06 chongo Exp $ * @(#) $Id: addop.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
* *
* Under source code control: 1990/02/15 01:48:10 * Under source code control: 1990/02/15 01:48:10
@@ -33,7 +33,7 @@
#include <stdio.h> #include <stdio.h>
#include "calc.h" #include "calc.h"
#include "opcodes.h" #include "opcodes.h"
#include "string.h" #include "str.h"
#include "func.h" #include "func.h"
#include "token.h" #include "token.h"
#include "label.h" #include "label.h"
@@ -44,17 +44,17 @@
#define OPCODEALLOCSIZE 100 /* reallocate size for opcodes in functions */ #define OPCODEALLOCSIZE 100 /* reallocate size for opcodes in functions */
static unsigned long maxopcodes;/* number of opcodes available */ STATIC unsigned long maxopcodes;/* number of opcodes available */
static long newindex; /* index of new function */ STATIC long newindex; /* index of new function */
static char *newname; /* name of new function */ STATIC char *newname; /* name of new function */
static long oldop; /* previous opcode */ STATIC long oldop; /* previous opcode */
static long oldoldop; /* opcode before previous opcode */ STATIC long oldoldop; /* opcode before previous opcode */
static long debugline; /* line number of latest debug opcode */ STATIC long debugline; /* line number of latest debug opcode */
static long funccount; /* number of functions */ STATIC long funccount; /* number of functions */
static long funcavail; /* available number of functions */ STATIC long funcavail; /* available number of functions */
static FUNC *functemplate; /* function definition template */ STATIC FUNC *functemplate; /* function definition template */
static FUNC **functions; /* table of functions */ STATIC FUNC **functions; /* table of functions */
static STRINGHEAD funcnames; /* function names */ STATIC STRINGHEAD funcnames; /* function names */
/* /*

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: align32.c,v 29.2 2000/06/07 14:02:13 chongo Exp $ * @(#) $Id: align32.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/align32.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/align32.c,v $
* *
* Under source code control: 1995/11/23 05:18:06 * Under source code control: 1995/11/23 05:18:06

59
alloc.h
View File

@@ -1,7 +1,7 @@
/* /*
* alloc - storage allocation and storage debug macros * alloc - storage allocation and storage debug macros
* *
* Copyright (C) 1999 David I. Bell * Copyright (C) 1999-2007 David I. Bell
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 30.2 $
* @(#) $Id: alloc.h,v 29.4 2001/06/08 21:00:58 chongo Exp $ * @(#) $Id: alloc.h,v 30.2 2008/04/15 21:17:57 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/alloc.h,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/alloc.h,v $
* *
* Under source code control: 1990/02/15 01:48:29 * Under source code control: 1990/02/15 01:48:29
@@ -33,54 +33,41 @@
#if defined(CALC_SRC) /* if we are building from the calc source tree */ #if defined(CALC_SRC) /* if we are building from the calc source tree */
# include "have_malloc.h"
# include "have_newstr.h" # include "have_newstr.h"
# include "have_string.h" # include "have_string.h"
# include "have_memmv.h" # include "have_memmv.h"
#else #else
# include <calc/have_malloc.h>
# include <calc/have_newstr.h> # include <calc/have_newstr.h>
# include <calc/have_string.h> # include <calc/have_string.h>
# include <calc/have_memmv.h> # include <calc/have_memmv.h>
#endif #endif
#ifdef HAVE_MALLOC_H
# include <malloc.h>
#else
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
extern void *malloc();
extern void *realloc();
extern void free();
# else
extern char *malloc();
extern char *realloc();
extern void free();
# endif
#endif
#ifdef HAVE_STRING_H #ifdef HAVE_STRING_H
# include <string.h> # include <string.h>
#else #else
#if defined(_WIN32) && defined(NOTCYGWIN)
#include <stdio.h>
#endif
# if defined(HAVE_NEWSTR) # if defined(HAVE_NEWSTR)
extern void *memcpy(); E_FUNC void *memcpy();
extern void *memset(); E_FUNC void *memset();
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus) #if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
extern size_t strlen(); E_FUNC size_t strlen();
# else # else
extern long strlen(); E_FUNC long strlen();
# endif # endif
# else /* HAVE_NEWSTR */ # else /* HAVE_NEWSTR */
extern void bcopy(); E_FUNC void bcopy();
extern void bfill(); E_FUNC void bfill();
extern char *index(); E_FUNC char *index();
# endif /* HAVE_NEWSTR */ # endif /* HAVE_NEWSTR */
extern char *strchr(); E_FUNC char *strchr();
extern char *strcpy(); E_FUNC char *strcpy();
extern char *strncpy(); E_FUNC char *strncpy();
extern char *strcat(); E_FUNC char *strcat();
extern int strcmp(); E_FUNC int strcmp();
#endif #endif
@@ -94,13 +81,13 @@ extern int strcmp();
#endif /* HAVE_NEWSTR */ #endif /* HAVE_NEWSTR */
#if !defined(HAVE_MEMMOVE) #if !defined(HAVE_MEMMOVE)
# undef CALC_SIZE_T # undef MEMMOVE_SIZE_T
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus) #if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
# define CALC_SIZE_T size_t # define MEMMOVE_SIZE_T size_t
# else # else
# define CALC_SIZE_T long # define MEMMOVE_SIZE_T long
# endif # endif
extern void *memmove(void *s1, const void *s2, CALC_SIZE_T n); E_FUNC void *memmove(void *s1, CONST void *s2, MEMMOVE_SIZE_T n);
#endif #endif
#endif /* !__ALLOC_H__ */ #endif /* !__ALLOC_H__ */

View File

@@ -1,7 +1,7 @@
/* /*
* assocfunc - association table routines * assocfunc - association table routines
* *
* Copyright (C) 1999 David I. Bell * Copyright (C) 1999-2007 David I. Bell
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: assocfunc.c,v 29.2 2000/06/07 14:02:13 chongo Exp $ * @(#) $Id: assocfunc.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/assocfunc.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/assocfunc.c,v $
* *
* Under source code control: 1993/07/20 23:04:27 * Under source code control: 1993/07/20 23:04:27
@@ -46,10 +46,10 @@
#define ELEMSIZE(n) (sizeof(ASSOCELEM) + (sizeof(VALUE) * ((n) - 1))) #define ELEMSIZE(n) (sizeof(ASSOCELEM) + (sizeof(VALUE) * ((n) - 1)))
static ASSOCELEM *elemindex(ASSOC *ap, long index); S_FUNC ASSOCELEM *elemindex(ASSOC *ap, long index);
static BOOL compareindices(VALUE *v1, VALUE *v2, long dim); S_FUNC BOOL compareindices(VALUE *v1, VALUE *v2, long dim);
static void resize(ASSOC *ap, long newsize); S_FUNC void resize(ASSOC *ap, long newsize);
static void assoc_elemfree(ASSOCELEM *ep); S_FUNC void assoc_elemfree(ASSOCELEM *ep);
/* /*
@@ -69,7 +69,7 @@ associndex(ASSOC *ap, BOOL create, long dim, VALUE *indices)
{ {
ASSOCELEM **listhead; ASSOCELEM **listhead;
ASSOCELEM *ep; ASSOCELEM *ep;
static VALUE val; STATIC VALUE val;
QCKHASH hash; QCKHASH hash;
int i; int i;
@@ -200,7 +200,7 @@ assocrsearch(ASSOC *ap, VALUE *vp, long i, long j, ZVALUE *index)
* ap association to index into * ap association to index into
* index index of desired element * index index of desired element
*/ */
static ASSOCELEM * S_FUNC ASSOCELEM *
elemindex(ASSOC *ap, long index) elemindex(ASSOC *ap, long index)
{ {
ASSOCELEM *ep; ASSOCELEM *ep;
@@ -356,7 +356,7 @@ assoccopy(ASSOC *oldap)
* This is only actually done if the growth from the previous size is * This is only actually done if the growth from the previous size is
* enough to make this worthwhile. * enough to make this worthwhile.
*/ */
static void S_FUNC void
resize(ASSOC *ap, long newsize) resize(ASSOC *ap, long newsize)
{ {
ASSOCELEM **oldtable; ASSOCELEM **oldtable;
@@ -400,7 +400,7 @@ resize(ASSOC *ap, long newsize)
/* /*
* Free an association element, along with any contained values. * Free an association element, along with any contained values.
*/ */
static void S_FUNC void
assoc_elemfree(ASSOCELEM *ep) assoc_elemfree(ASSOCELEM *ep)
{ {
int i; int i;
@@ -520,7 +520,7 @@ assocprint(ASSOC *ap, long max_print)
* Compare two lists of index values to see if they are identical. * Compare two lists of index values to see if they are identical.
* Returns TRUE if they are the same. * Returns TRUE if they are the same.
*/ */
static BOOL S_FUNC BOOL
compareindices(VALUE *v1, VALUE *v2, long dim) compareindices(VALUE *v1, VALUE *v2, long dim)
{ {
int i; int i;

View File

@@ -1,7 +1,7 @@
/* /*
* blkcpy - general values and related routines used by the calculator * blkcpy - general values and related routines used by the calculator
* *
* Copyright (C) 1999-2006 Landon Curt Noll and Ernest Bowen * Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
* *
* Primary author: Landon Curt Noll * Primary author: Landon Curt Noll
* *
@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.9 $ * @(#) $Revision: 30.1 $
* @(#) $Id: blkcpy.c,v 29.9 2006/05/20 08:43:55 chongo Exp $ * @(#) $Id: blkcpy.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $
* *
* Under source code control: 1997/04/18 20:41:26 * Under source code control: 1997/04/18 20:41:26
@@ -36,7 +36,7 @@
#include "value.h" #include "value.h"
#include "file.h" #include "file.h"
#include "blkcpy.h" #include "blkcpy.h"
#include "string.h" #include "str.h"
/* /*
@@ -935,7 +935,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
* s1 * s1
*/ */
void * void *
memmove(void *s1, const void *s2, CALC_SIZE_T n) memmove(void *s1, CONST void *s2, MEMMOVE_SIZE_T n)
{ {
/* /*
* firewall * firewall

View File

@@ -1,7 +1,7 @@
/* /*
* blkcpy - general values and related routines used by the calculator * blkcpy - general values and related routines used by the calculator
* *
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen * Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
* *
* Primary author: Landon Curt Noll * Primary author: Landon Curt Noll
* *
@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: blkcpy.h,v 29.2 2000/06/07 14:02:13 chongo Exp $ * @(#) $Id: blkcpy.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.h,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.h,v $
* *
* Under source code control: 1997/04/18 20:41:25 * Under source code control: 1997/04/18 20:41:25
@@ -36,27 +36,27 @@
/* /*
* the main copy gateway function * the main copy gateway function
*/ */
extern int copystod(VALUE *, long, long, VALUE *, long); E_FUNC int copystod(VALUE *, long, long, VALUE *, long);
/* /*
* specific copy functions * specific copy functions
*/ */
extern int copyblk2blk(BLOCK *, long, long, BLOCK *, long, BOOL); E_FUNC int copyblk2blk(BLOCK *, long, long, BLOCK *, long, BOOL);
extern int copyblk2file(BLOCK *, long, long, FILEID, long); E_FUNC int copyblk2file(BLOCK *, long, long, FILEID, long);
extern int copyblk2mat(BLOCK *, long, long, MATRIX *, long); E_FUNC int copyblk2mat(BLOCK *, long, long, MATRIX *, long);
extern int copyblk2num(BLOCK *, long, long, NUMBER *, long, NUMBER **); E_FUNC int copyblk2num(BLOCK *, long, long, NUMBER *, long, NUMBER **);
extern int copyblk2str(BLOCK *, long, long, STRING *, long); E_FUNC int copyblk2str(BLOCK *, long, long, STRING *, long);
extern int copyfile2blk(FILEID, long, long, BLOCK *, long, BOOL); E_FUNC int copyfile2blk(FILEID, long, long, BLOCK *, long, BOOL);
extern int copylist2list(LIST *, long, long, LIST *, long); E_FUNC int copylist2list(LIST *, long, long, LIST *, long);
extern int copylist2mat(LIST *, long, long, MATRIX *, long); E_FUNC int copylist2mat(LIST *, long, long, MATRIX *, long);
extern int copymat2blk(MATRIX *, long, long, BLOCK *, long, BOOL); E_FUNC int copymat2blk(MATRIX *, long, long, BLOCK *, long, BOOL);
extern int copymat2list(MATRIX *, long, long, LIST *, long); E_FUNC int copymat2list(MATRIX *, long, long, LIST *, long);
extern int copymat2mat(MATRIX *, long, long, MATRIX *, long); E_FUNC int copymat2mat(MATRIX *, long, long, MATRIX *, long);
extern int copynum2blk(NUMBER *, long, long, BLOCK *, long, BOOL); E_FUNC int copynum2blk(NUMBER *, long, long, BLOCK *, long, BOOL);
extern int copyostr2blk(char *, long, long, BLOCK *, long, BOOL); E_FUNC int copyostr2blk(char *, long, long, BLOCK *, long, BOOL);
extern int copyostr2str(char *, long, long, STRING *, long); E_FUNC int copyostr2str(char *, long, long, STRING *, long);
extern int copystr2blk(STRING *, long, long, BLOCK *, long, BOOL); E_FUNC int copystr2blk(STRING *, long, long, BLOCK *, long, BOOL);
extern int copystr2file(STRING *, long, long, FILEID, long); E_FUNC int copystr2file(STRING *, long, long, FILEID, long);
extern int copystr2str(STRING *, long, long, STRING *, long); E_FUNC int copystr2str(STRING *, long, long, STRING *, long);
#endif /* !__BLKCPY_H__ */ #endif /* !__BLKCPY_H__ */

22
block.c
View File

@@ -1,7 +1,7 @@
/* /*
* block - fixed, dynamic, fifo and circular memory blocks * block - fixed, dynamic, fifo and circular memory blocks
* *
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen * Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
* *
* Primary author: Landon Curt Noll * Primary author: Landon Curt Noll
* *
@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: block.c,v 29.3 2006/05/01 19:16:57 chongo Exp $ * @(#) $Id: block.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/block.c,v $
* *
* Under source code control: 1997/02/27 00:29:40 * Under source code control: 1997/02/27 00:29:40
@@ -37,19 +37,19 @@
#include "config.h" #include "config.h"
#include "block.h" #include "block.h"
#include "nametype.h" #include "nametype.h"
#include "string.h" #include "str.h"
#include "calcerr.h" #include "calcerr.h"
#define NBLOCKCHUNK 16 #define NBLOCKCHUNK 16
static long nblockcount = 0; STATIC long nblockcount = 0;
static long maxnblockcount = 0; STATIC long maxnblockcount = 0;
static STRINGHEAD nblocknames; STATIC STRINGHEAD nblocknames;
static NBLOCK **nblocks; STATIC NBLOCK **nblocks;
/* forward declarations */ /* forward declarations */
static void blkchk(BLOCK*); S_FUNC void blkchk(BLOCK*);
/* /*
@@ -154,7 +154,7 @@ blk_free(BLOCK *blk)
* if all is ok, otherwise math_error() is called and this * if all is ok, otherwise math_error() is called and this
* function does not return * function does not return
*/ */
static void S_FUNC void
blkchk(BLOCK *blk) blkchk(BLOCK *blk)
{ {

42
block.h
View File

@@ -1,7 +1,7 @@
/* /*
* block - fixed, dynamic, fifo and circular memory blocks * block - fixed, dynamic, fifo and circular memory blocks
* *
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen * Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
* *
* Primary author: Landon Curt Noll * Primary author: Landon Curt Noll
* *
@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: block.h,v 29.2 2000/06/07 14:02:13 chongo Exp $ * @(#) $Id: block.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.h,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/block.h,v $
* *
* Under source code control: 1997/02/21 05:03:39 * Under source code control: 1997/02/21 05:03:39
@@ -160,7 +160,7 @@ typedef struct nblock NBLOCK;
/* /*
* block debug * block debug
*/ */
extern int blk_debug; /* 0 => debug off */ EXTERN int blk_debug; /* 0 => debug off */
/* /*
@@ -204,22 +204,22 @@ typedef USB8 OCTET;
/* /*
* external functions * external functions
*/ */
extern BLOCK *blkalloc(int, int); E_FUNC BLOCK *blkalloc(int, int);
extern void blk_free(BLOCK*); E_FUNC void blk_free(BLOCK*);
extern BLOCK *blkrealloc(BLOCK*, int, int); E_FUNC BLOCK *blkrealloc(BLOCK*, int, int);
extern void blktrunc(BLOCK*); E_FUNC void blktrunc(BLOCK*);
extern BLOCK *blk_copy(BLOCK*); E_FUNC BLOCK *blk_copy(BLOCK*);
extern int blk_cmp(BLOCK*, BLOCK*); E_FUNC int blk_cmp(BLOCK*, BLOCK*);
extern void blk_print(BLOCK*); E_FUNC void blk_print(BLOCK*);
extern void nblock_print(NBLOCK *); E_FUNC void nblock_print(NBLOCK *);
extern NBLOCK *createnblock(char *, int, int); E_FUNC NBLOCK *createnblock(char *, int, int);
extern NBLOCK *reallocnblock(int, int, int); E_FUNC NBLOCK *reallocnblock(int, int, int);
extern int removenblock(int); E_FUNC int removenblock(int);
extern int findnblockid(char *); E_FUNC int findnblockid(char *);
extern NBLOCK *findnblock(int); E_FUNC NBLOCK *findnblock(int);
extern BLOCK *copyrealloc(BLOCK*, int, int); E_FUNC BLOCK *copyrealloc(BLOCK*, int, int);
extern int countnblocks(void); E_FUNC int countnblocks(void);
extern void shownblocks(void); E_FUNC void shownblocks(void);
#endif /* !__BLOCK_H__ */ #endif /* !__BLOCK_H__ */

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: byteswap.c,v 29.2 2000/06/07 14:02:13 chongo Exp $ * @(#) $Id: byteswap.c,v 30.1 2007/03/16 11:09:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.c,v $
* *
* Under source code control: 1995/10/11 04:44:01 * Under source code control: 1995/10/11 04:44:01

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 30.1 $
* @(#) $Id: byteswap.h,v 29.4 2001/06/08 21:00:58 chongo Exp $ * @(#) $Id: byteswap.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.h,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.h,v $
* *
* Under source code control: 1995/10/11 04:44:01 * Under source code control: 1995/10/11 04:44:01

View File

@@ -2,7 +2,7 @@
# #
# cal - makefile for calc standard resource files # cal - makefile for calc standard resource files
# #
# Copyright (C) 1999 Landon Curt Noll # Copyright (C) 1999-2006 Landon Curt Noll
# #
# Calc is open software; you can redistribute it and/or modify it under # Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License # the terms of the version 2.1 of the GNU Lesser General Public License
@@ -16,10 +16,10 @@
# A copy of version 2.1 of the GNU Lesser General Public License is # A copy of version 2.1 of the GNU Lesser General Public License is
# distributed with calc under the filename COPYING-LGPL. You should have # distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# #
# @(#) $Revision: 29.20 $ # @(#) $Revision: 30.4 $
# @(#) $Id: Makefile,v 29.20 2006/06/23 00:34:55 chongo Exp $ # @(#) $Id: Makefile,v 30.4 2010/09/02 06:01:39 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $ # @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
# #
# Under source code control: 1991/07/21 05:00:54 # Under source code control: 1991/07/21 05:00:54
@@ -33,14 +33,31 @@
# required vars # required vars
# #
SHELL = /bin/sh SHELL= /bin/sh
MAKE_FILE = Makefile
#### ####
# Normally, the upper level makefile will set these values. We provide # Normally, the upper level makefile will set these values. We provide
# a default here just in case you want to build from this directory. # a default here just in case you want to build from this directory.
#### ####
# Normally certain files depend on the Makefile. If the Makefile is
# changed, then certain steps should be redone. If MAKE_FILE is
# set to Makefile, then these files will depend on Makefile. If
# MAKE_FILE is empty, then they wont.
#
# If in doubt, set MAKE_FILE to Makefile
#
MAKE_FILE= Makefile
# Controlling file makefile basename (without the path)
#
# This is the basename same of the makefile that may/does/will drive
# this makefile.
#
# If in doubt, set TOP_MAKE_FILE to Makefile
#
TOP_MAKE_FILE= Makefile
# Where the system include (.h) files are kept # Where the system include (.h) files are kept
# #
# For DJGPP, select: # For DJGPP, select:
@@ -62,9 +79,9 @@ INCDIR= /usr/include
# ${LIBDIR} where calc link library (*.a) files are installed # ${LIBDIR} where calc link library (*.a) files are installed
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files # ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
# #
# NOTE: The install rule prepends installation paths with $T, which # NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If $T is non-empty, then installation # by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the $T directory. # locations will be relative to the ${T} directory.
# #
# For DJGPP, select: # For DJGPP, select:
# #
@@ -94,35 +111,26 @@ CALC_SHAREDIR= /usr/share/calc
# --------------------------------------------------------------- # ---------------------------------------------------------------
# ${HELPDIR} where the help directory is installed # ${HELPDIR} where the help directory is installed
# ${CALC_INCDIR} where the calc include files are installed # ${CALC_INCDIR} where the calc include files are installed
# ${CUSTOMCALDIR} where custom *.cal files are installed
# ${CUSTOMHELPDIR} where custom help files are installed
# ${CUSTOMINCPDIR} where custom .h files are installed
# ${SCRIPTDIR} where calc shell scripts are installed # ${SCRIPTDIR} where calc shell scripts are installed
# #
# NOTE: The install rule prepends installation paths with $T, which # NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If $T is non-empty, then installation # by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the $T directory. # locations will be relative to the ${T} directory.
# #
# If in doubt, set: # If in doubt, set:
# #
# HELPDIR= ${CALC_SHAREDIR}/help # HELPDIR= ${CALC_SHAREDIR}/help
# CALC_INCDIR= ${INCDIR}/calc # CALC_INCDIR= ${INCDIR}/calc
# CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
# CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
# CUSTOMINCDIR= ${CALC_INCDIR}/custom
# SCRIPTDIR= ${BINDIR}/cscript # SCRIPTDIR= ${BINDIR}/cscript
# #
HELPDIR= ${CALC_SHAREDIR}/help HELPDIR= ${CALC_SHAREDIR}/help
CALC_INCDIR= ${INCDIR}/calc CALC_INCDIR= ${INCDIR}/calc
CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
CUSTOMINCDIR= ${CALC_INCDIR}/custom
SCRIPTDIR= ${BINDIR}/cscript SCRIPTDIR= ${BINDIR}/cscript
# T - top level directory under which calc will be installed # T - top level directory under which calc will be installed
# #
# The calc install is performed under $T, the calc build is # The calc install is performed under ${T}, the calc build is
# performed under /. The purpose for $T is to allow someone # performed under /. The purpose for ${T} is to allow someone
# to install calc somewhere other than into the system area. # to install calc somewhere other than into the system area.
# #
# For example, if: # For example, if:
@@ -142,10 +150,10 @@ SCRIPTDIR= ${BINDIR}/cscript
# calc help, .cal ...: /var/tmp/testing/usr/share/calc # calc help, .cal ...: /var/tmp/testing/usr/share/calc
# ... etc ... /var/tmp/testing/... # ... etc ... /var/tmp/testing/...
# #
# If $T is empty, calc is installed under /, which is the same # If ${T} is empty, calc is installed under /, which is the same
# top of tree for which it was built. If $T is non-empty, then # top of tree for which it was built. If ${T} is non-empty, then
# calc is installed under $T, as if one had to chroot under # calc is installed under ${T}, as if one had to chroot under
# $T for calc to operate. # ${T} for calc to operate.
# #
# If in doubt, use T= # If in doubt, use T=
# #
@@ -163,6 +171,14 @@ Q=@
# #
CHMOD= chmod CHMOD= chmod
CMP= cmp CMP= cmp
RM= rm
MKDIR= mkdir
RMDIR= rmdir
CP= cp
MV= mv
CO= co
TRUE= true
TOUCH= touch
# The calc files to install # The calc files to install
# #
@@ -177,7 +193,8 @@ CALC_FILES= README bigprime.cal deg.cal ellip.cal lucas.cal lucas_chk.cal \
beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \ beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.cal \ randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.cal \
test8400.cal test8500.cal test8600.cal chi.cal intfile.cal screen.cal \ test8400.cal test8500.cal test8600.cal chi.cal intfile.cal screen.cal \
dotest.cal set8700.cal set8700.line alg_config.cal sumtimes.cal dotest.cal set8700.cal set8700.line alg_config.cal sumtimes.cal \
dms.cal hms.cal
# These files are found (but not built) in the distribution # These files are found (but not built) in the distribution
# #
@@ -192,8 +209,8 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
# used by the upper level Makefile to determine of we have done all # used by the upper level Makefile to determine of we have done all
# #
.all: .all:
rm -f .all ${RM} -f .all
touch .all ${TOUCH} .all
## ##
# #
@@ -209,17 +226,17 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
## ##
distlist: ${DISTLIST} distlist: ${DISTLIST}
${Q}for i in ${DISTLIST} /dev/null; do \ ${Q} for i in ${DISTLIST} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
echo cal/$$i; \ echo cal/$$i; \
fi; \ fi; \
done done
distdir: distdir:
${Q}echo cal ${Q} echo cal
calcliblist: calcliblist:
${Q}for i in ${CALCLIBLIST} /dev/null; do \ ${Q} for i in ${CALCLIBLIST} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
echo cal/$$i; \ echo cal/$$i; \
fi; \ fi; \
@@ -232,7 +249,7 @@ calcliblist:
## ##
echo_inst_files: echo_inst_files:
${Q}for i in ${CALC_FILES} /dev/null; do \ ${Q} for i in ${CALC_FILES} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${CALC_SHAREDIR}/$$i; \ echo __file__ ${CALC_SHAREDIR}/$$i; \
fi; \ fi; \
@@ -246,33 +263,62 @@ echo_inst_files:
clean: clean:
clobber: clobber: clean
rm -f .all ${RM} -f .all
# install everything
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
install: all install: all
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \ -${Q} if [ ! -d ${T}${CALC_SHAREDIR} ]; then \
echo mkdir $T${CALC_SHAREDIR}; \ echo ${MKDIR} ${T}${CALC_SHAREDIR}; \
mkdir $T${CALC_SHAREDIR}; \ ${MKDIR} ${T}${CALC_SHAREDIR}; \
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \ if [ ! -d "${T}${CALC_SHAREDIR}" ]; then \
echo mkdir -p "$T${CALC_SHAREDIR}"; \ echo ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
mkdir -p "$T${CALC_SHAREDIR}"; \ ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \ echo ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
${CHMOD} 0755 $T${CALC_SHAREDIR}; \ ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
else \ else \
true; \ ${TRUE}; \
fi fi
${Q}for i in ${CALC_FILES} /dev/null; do \ ${Q} for i in ${CALC_FILES} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \ if [ "$$i" = "/dev/null" ]; then \
continue; \ continue; \
fi; \ fi; \
if ${CMP} -s $$i $T${CALC_SHAREDIR}/$$i; then \ if ${CMP} -s $$i ${T}${CALC_SHAREDIR}/$$i; then \
true; \ ${TRUE}; \
else \ else \
rm -f $T${CALC_SHAREDIR}/$$i.new; \ ${RM} -f ${T}${CALC_SHAREDIR}/$$i.new; \
cp -f $$i $T${CALC_SHAREDIR}/$$i.new; \ ${CP} -f $$i ${T}${CALC_SHAREDIR}/$$i.new; \
${CHMOD} 0444 $T${CALC_SHAREDIR}/$$i.new; \ ${CHMOD} 0444 ${T}${CALC_SHAREDIR}/$$i.new; \
mv -f $T${CALC_SHAREDIR}/$$i.new $T${CALC_SHAREDIR}/$$i; \ ${MV} -f ${T}${CALC_SHAREDIR}/$$i.new ${T}${CALC_SHAREDIR}/$$i; \
echo "installed $T${CALC_SHAREDIR}/$$i"; \ echo "installed ${T}${CALC_SHAREDIR}/$$i"; \
fi; \
done
# Try to remove everything that was installed
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
uninstall:
-${Q} for i in ${CALC_FILES} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if [ -f "${T}${CALC_SHAREDIR}/$$i" ]; then \
${RM} -f "${T}${CALC_SHAREDIR}/$$i"; \
if [ -f "${T}${CALC_SHAREDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CALC_SHAREDIR}/$$i"; \
else \
echo "uninstalled ${T}${CALC_SHAREDIR}/$$i"; \
fi; \
fi; \
done
-${Q} for i in ${CALC_SHAREDIR}; do \
if [ -d "${T}$$i" ]; then \
${RMDIR} "${T}$$i" 2>/dev/null; \
echo "cleaned up ${T}$$i"; \
fi; \ fi; \
done done

View File

@@ -226,14 +226,37 @@ chrem.cal
deg.cal deg.cal
deg(deg, min, sec)
deg_add(a, b)
deg_neg(a)
deg_sub(a, b)
deg_mul(a, b)
deg_print(a)
Calculate in degrees, minutes, and seconds. For a more functional
version see dms.cal.
dms.cal
dms(deg, min, sec) dms(deg, min, sec)
dms_add(a, b) dms_add(a, b)
dms_neg(a) dms_neg(a)
dms_sub(a, b) dms_sub(a, b)
dms_mul(a, b) dms_mul(a, b)
dms_print(a) dms_print(a)
dms_abs(a)
dms_norm(a)
dms_test(a)
dms_int(a)
dms_frac(a)
dms_rel(a,b)
dms_cmp(a,b)
dms_inc(a)
dms_dec(a)
Calculate in degrees, minutes, and seconds. Calculate in degrees, minutes, and seconds. Unlike deg.cal, increments
are on the arc second level. See also hms.cal.
dotest.cal dotest.cal
@@ -285,6 +308,27 @@ hello.cal
NOTE: This resource produces a lot of output. :-) NOTE: This resource produces a lot of output. :-)
hms.cal
hms(hour, min, sec)
hms_add(a, b)
hms_neg(a)
hms_sub(a, b)
hms_mul(a, b)
hms_print(a)
hms_abs(a)
hms_norm(a)
hms_test(a)
hms_int(a)
hms_frac(a)
hms_rel(a,b)
hms_cmp(a,b)
hms_inc(a)
hms_dec(a)
Calculate in hours, minutes, and seconds. See also dmscal.
intfile.cal intfile.cal
file2be(filename) file2be(filename)
@@ -714,7 +758,7 @@ sumtimes.cal
timehmean(N,M) timehmean(N,M)
doalltimes(N) doalltimes(N)
Give the runtimes for various ways of evaluating sums, sums of Give the user CPU time for various ways of evaluating sums, sums of
squares, etc, for large lists and matrices. N is the size of squares, etc, for large lists and matrices. N is the size of
the list or matrix to use. The doalltimes() function will run the list or matrix to use. The doalltimes() function will run
all fo the sumtimes tests. For example: all fo the sumtimes tests. For example:
@@ -1012,10 +1056,10 @@ xx_print.cal
## A copy of version 2.1 of the GNU Lesser General Public License is ## A copy of version 2.1 of the GNU Lesser General Public License is
## distributed with calc under the filename COPYING-LGPL. You should have ## distributed with calc under the filename COPYING-LGPL. You should have
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
## ##
## @(#) $Revision: 29.15 $ ## @(#) $Revision: 30.2 $
## @(#) $Id: README,v 29.15 2006/06/23 00:34:55 chongo Exp $ ## @(#) $Id: README,v 30.2 2010/09/02 06:01:39 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $ ## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
## ##
## Under source code control: 1990/02/15 01:50:32 ## Under source code control: 1990/02/15 01:50:32

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.14 $ * @(#) $Revision: 30.1 $
* @(#) $Id: alg_config.cal,v 29.14 2006/06/11 07:22:05 chongo Exp $ * @(#) $Id: alg_config.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/alg_config.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/alg_config.cal,v $
* *
* Under source code control: 2006/06/07 14:10:11 * Under source code control: 2006/06/07 14:10:11
@@ -85,7 +85,7 @@ define mul_loop(repeat, x)
} }
/* multiply pairwise, all sets of a given length */ /* multiply pairwise, all sets of a given length */
start = runtime(); start = usertime();
for (i=0; i < repeat; ++i) { for (i=0; i < repeat; ++i) {
if (len == 1) { if (len == 1) {
@@ -130,7 +130,7 @@ define mul_loop(repeat, x)
/* /*
* return duration * return duration
*/ */
end = runtime(); end = usertime();
return end-start; return end-start;
} }
@@ -477,7 +477,7 @@ define sq_loop(repeat, x)
} }
/* square pairwise, all sets of a given length */ /* square pairwise, all sets of a given length */
start = runtime(); start = usertime();
for (i=0; i < repeat; ++i) { for (i=0; i < repeat; ++i) {
if (len == 1) { if (len == 1) {
@@ -524,7 +524,7 @@ define sq_loop(repeat, x)
/* /*
* return duration * return duration
*/ */
end = runtime(); end = usertime();
return end-start; return end-start;
} }
@@ -874,7 +874,7 @@ define pow_loop(repeat, x, ex)
} }
/* pmod pairwise, all sets of a given length */ /* pmod pairwise, all sets of a given length */
start = runtime(); start = usertime();
for (i=0; i < repeat; ++i) { for (i=0; i < repeat; ++i) {
if (len == 1) { if (len == 1) {
@@ -927,7 +927,7 @@ define pow_loop(repeat, x, ex)
/* /*
* return duration * return duration
*/ */
end = runtime(); end = usertime();
return end-start; return end-start;
} }

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: beer.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: beer.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/beer.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/beer.cal,v $
* *
* Under source code control: 1996/11/13 13:21:05 * Under source code control: 1996/11/13 13:21:05

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: bernoulli.cal,v 29.3 2000/12/17 12:26:04 chongo Exp $ * @(#) $Id: bernoulli.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bernoulli.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bernoulli.cal,v $
* *
* Under source code control: 1991/09/30 11:18:41 * Under source code control: 1991/09/30 11:18:41

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: bigprime.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: bigprime.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bigprime.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bigprime.cal,v $
* *
* Under source code control: 1991/05/22 21:56:32 * Under source code control: 1991/05/22 21:56:32

View File

@@ -14,10 +14,10 @@
# A copy of version 2.1 of the GNU Lesser General Public License is # A copy of version 2.1 of the GNU Lesser General Public License is
# distributed with calc under the filename COPYING-LGPL. You should have # distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# #
# @(#) $Revision: 29.2 $ # @(#) $Revision: 30.1 $
# @(#) $Id: bindings,v 29.2 2000/06/07 14:02:25 chongo Exp $ # @(#) $Id: bindings,v 30.1 2007/03/16 11:09:54 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bindings,v $ # @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bindings,v $
# #
# Under source code control: 1993/05/02 20:09:19 # Under source code control: 1993/05/02 20:09:19

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: chi.cal,v 29.2 2001/04/08 10:21:23 chongo Exp $ * @(#) $Id: chi.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/chi.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/chi.cal,v $
* *
* Under source code control: 2001/03/27 14:10:11 * Under source code control: 2001/03/27 14:10:11

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: chrem.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: chrem.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/chrem.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/chrem.cal,v $
* *
* Under source code control: 1992/09/26 01:00:47 * Under source code control: 1992/09/26 01:00:47

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 30.2 $
* @(#) $Id: deg.cal,v 29.4 2003/01/26 19:32:41 chongo Exp $ * @(#) $Id: deg.cal,v 30.2 2010/09/02 06:01:14 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/deg.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/deg.cal,v $
* *
* Under source code control: 1990/02/15 01:50:33 * Under source code control: 1990/02/15 01:50:33
@@ -28,9 +28,9 @@
*/ */
obj dms {deg, min, sec}; obj deg {deg, min, sec};
define dms(deg, min, sec) define deg(deg, min, sec)
{ {
local ans; local ans;
@@ -38,18 +38,18 @@ define dms(deg, min, sec)
sec = 0; sec = 0;
if (isnull(min)) if (isnull(min))
min = 0; min = 0;
obj dms ans; obj deg ans;
ans.deg = deg; ans.deg = deg;
ans.min = min; ans.min = min;
ans.sec = sec; ans.sec = sec;
fixdms(ans); fixdeg(ans);
return ans; return ans;
} }
define dms_add(a, b) define deg_add(a, b)
{ {
local obj dms ans; local obj deg ans;
ans.deg = 0; ans.deg = 0;
ans.min = 0; ans.min = 0;
@@ -66,14 +66,14 @@ define dms_add(a, b)
ans.sec += b.sec; ans.sec += b.sec;
} else } else
ans.deg += b; ans.deg += b;
fixdms(ans); fixdeg(ans);
return ans; return ans;
} }
define dms_neg(a) define deg_neg(a)
{ {
local obj dms ans; local obj deg ans;
ans.deg = -a.deg; ans.deg = -a.deg;
ans.min = -a.min; ans.min = -a.min;
@@ -82,15 +82,15 @@ define dms_neg(a)
} }
define dms_sub(a, b) define deg_sub(a, b)
{ {
return a - b; return a - b;
} }
define dms_mul(a, b) define deg_mul(a, b)
{ {
local obj dms ans; local obj deg ans;
if (istype(a, ans) && istype(b, ans)) if (istype(a, ans) && istype(b, ans))
quit "Cannot multiply degrees together"; quit "Cannot multiply degrees together";
@@ -103,24 +103,24 @@ define dms_mul(a, b)
ans.min = b.min * a; ans.min = b.min * a;
ans.sec = b.sec * a; ans.sec = b.sec * a;
} }
fixdms(ans); fixdeg(ans);
return ans; return ans;
} }
define dms_print(a) define deg_print(a)
{ {
print a.deg : 'd' : a.min : 'm' : a.sec : 's' :; print a.deg : 'd' : a.min : 'm' : a.sec : 's' :;
} }
define dms_abs(a) define deg_abs(a)
{ {
return a.deg + a.min / 60 + a.sec / 3600; return a.deg + a.min / 60 + a.sec / 3600;
} }
define fixdms(a) define fixdeg(a)
{ {
a.min += frac(a.deg) * 60; a.min += frac(a.deg) * 60;
a.deg = int(a.deg); a.deg = int(a.deg);
@@ -134,5 +134,5 @@ define fixdms(a)
} }
if (config("resource_debug") & 3) { if (config("resource_debug") & 3) {
print "obj dms {deg, min, sec} defined"; print "obj deg {deg, min, sec} defined";
} }

384
cal/dms.cal Normal file
View File

@@ -0,0 +1,384 @@
/*
* dms - calculate in degrees, minutes, and seconds (based on deg)
*
* Copyright (C) 1999,2010 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
* as published by the Free Software Foundation.
*
* Calc is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
* Public License for more details.
*
* A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* @(#) $Revision: 30.2 $
* @(#) $Id: dms.cal,v 30.2 2010/09/02 06:14:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/dms.cal,v $
*
* Under source code control: 1990/02/15 01:50:33
* File existed as early as: before 1990
*
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
obj dms {deg, min, sec};
define dms(deg, min, sec)
{
local obj dms ans; /* return value */
/* default missing args to 0 */
if (isnull(sec)) {
sec = 0;
}
if (isnull(min)) {
min = 0;
}
/* load object */
ans.deg = deg;
ans.min = min;
ans.sec = sec;
/* return properly formed object */
ans = fixdms(ans);
return ans;
}
define dms_add(a, b)
{
local obj dms ans; /* return value */
/* initalize value to 1st arg */
if (istype(a, ans)) {
/* 1st arg is dms object, load it */
ans.deg = a.deg;
ans.min = a.min;
ans.sec = a.sec;
} else {
/* 1st arg is not dms, assume scalar degrees */
ans.deg = a;
ans.min = 0;
ans.sec = 0;
}
/* add value of 2nd arg */
if (istype(b, ans)) {
/* 2nd arg is dms object, add it */
ans.deg += b.deg;
ans.min += b.min;
ans.sec += b.sec;
} else {
/* 2nd arg is not dms, add scalar degrees */
ans.deg += b;
}
/* return normalized result */
ans = fixdms(ans);
return ans;
}
define dms_neg(a)
{
local obj dms ans; /* return value */
/* negate argument */
if (istype(a, ans)) {
/* 1st arg is dms object, load it */
ans.deg = -a.deg;
ans.min = -a.min;
ans.sec = -a.sec;
} else {
/* 2nd arg is not dms, negate scalar degrees */
ans.deg = -a;
ans.min = 0;
ans.sec = 0;
}
/* return normalized result */
ans = fixdms(ans);
return ans;
}
define dms_sub(a, b)
{
local obj dms ans; /* return value */
/* initalize value to 1st arg */
if (istype(a, ans)) {
/* 1st arg is dms object, load it */
ans.deg = a.deg;
ans.min = a.min;
ans.sec = a.sec;
} else {
/* 1st arg is not dms, assume scalar degrees */
ans.deg = a;
ans.min = 0;
ans.sec = 0;
}
/* subtract value of 2nd arg */
if (istype(b, ans)) {
/* 2nd arg is dms object, subtract it */
ans.deg -= b.deg;
ans.min -= b.min;
ans.sec -= b.sec;
} else {
/* 2nd arg is not dms, subtract scalar degrees */
ans.deg -= b;
}
/* return normalized result */
ans = fixdms(ans);
return ans;
}
define dms_mul(a, b)
{
local obj dms ans; /* return value */
/* dms object multiplication */
if (istype(a, ans) && istype(b, ans)) {
ans.deg = dms_abs(a) * dms_abs(b);
ans.min = 0;
ans.sec = 0;
/* scalar multiplication */
} else if (istype(a, ans)) {
ans.deg = a.deg * b;
ans.min = a.min * b;
ans.sec = a.sec * b;
} else {
ans.deg = b.deg * a;
ans.min = b.min * a;
ans.sec = b.sec * a;
}
/* return normalized result */
ans = fixdms(ans);
return ans;
}
define dms_print(a)
{
local obj dms ans; /* temp object for dms type testing */
/* firewall - arg must be a dms object */
if (! istype(a, ans)) {
quit "dms_print called with non dms object";
}
/* print in dms form */
print a.deg : 'd' : a.min : 'm' : a.sec : 's' :;
}
define dms_abs(a)
{
local obj dms ans; /* temp object for dms type testing */
local deg; /* return scalar value */
/* firewall - just absolute value non dms objects */
if (! istype(a, ans)) {
return abs(a);
}
/* compute degrees */
deg = a.deg + a.min / 60 + a.sec / 3600;
/* return degrees */
return deg;
}
define dms_norm(a)
{
local obj dms ans; /* temp object for dms type testing */
local deg; /* degrees */
/* firewall - arg must be a dms object */
if (! istype(a, ans)) {
quit "dms_norm called with non dms object";
}
/* square degrees (norm is the square of absolute value */
deg = dms_abs(a);
/* return degrees */
return deg*deg;
}
define dms_test(a)
{
local obj dms ans; /* temp value */
/* firewall - arg must be a dms object */
if (! istype(a, ans)) {
quit "dms_test called with non dms object";
}
/* return false of non-zero */
ans = fixdms(a);
if (ans.deg == 0 && ans.min == 0 && ans.sec == 0) {
/* false */
return 0;
}
/* true */
return 1;
}
define dms_int(a)
{
local obj dms ans; /* return value */
/* firewall - arg must be a dms object */
if (! istype(a, ans)) {
quit "dms_int called with non dms object";
}
/* normalize the argument */
ans = fixdms(a);
/* truncate to the nearest second */
ans.sec = int(ans.sec);
/* return value to the nearest second */
return ans;
}
define dms_frac(a)
{
local obj dms ans; /* return value */
/* firewall - arg must be a dms object */
if (! istype(a, ans)) {
quit "dms_frac called with non dms object";
}
/* normalize the argument */
ans = fixdms(a);
/* remove all but fractional seconds */
ans.deg = 0;
ans.min = 0;
ans.sec = frac(ans.sec);
/* return value to the second fraction */
return ans;
}
define dms_rel(a,b)
{
local abs_a, abs_b; /* scalars of the arguments */
/* compute scalars of the arguments */
abs_a = dms_abs(a);
abs_b = dms_abs(b);
/* return the comparison */
return cmp(abs_a, abs_b);
}
define dms_cmp(a,b)
{
local abs_a, abs_b; /* scalars of the arguments */
/* compute scalars of the arguments */
abs_a = dms_abs(a);
abs_b = dms_abs(b);
/* return the equality comparison */
return (abs_a == abs_b);
}
define dms_inc(a)
{
local obj dms ans; /* return value */
/* increment a dms object */
if (istype(a, ans)) {
ans = a;
++ans.sec;
/* return normalized result */
ans = fixdms(ans);
return ans;
}
/* increment a scalar */
return a+1;
}
define dms_dec(a)
{
local obj dms ans; /* return value */
/* decrement a dms object */
if (istype(a, ans)) {
ans = a;
--ans.sec;
/* return normalized result */
ans = fixdms(ans);
return ans;
}
/* decrement a scalar */
return a-1;
}
define fixdms(a)
{
local obj dms ans; /* temp value */
/* firewall */
if (! istype(a, ans)) {
quit "attempt to fix a non dms object";
}
/* force minutes to be intergral */
a.min += frac(a.deg) * 60;
a.deg = int(a.deg);
/* force degrees to be intergral */
a.sec += frac(a.min) * 60;
a.min = int(a.min);
/* carry excess seconds into minutes */
a.min += a.sec // 60;
a.sec %= 60;
/* carry excess minutes into degrees */
a.deg += a.min // 60;
a.min %= 60;
/* round degrees :-) */
a.deg %= 360;
/* return normalized result */
return a;
}
if (config("resource_debug") & 3) {
print "obj dms {deg, min, sec} defined";
}

View File

@@ -16,8 +16,8 @@
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.2 $
* @(#) $Id: dotest.cal,v 29.2 2006/05/21 00:55:27 chongo Exp $ * @(#) $Id: dotest.cal,v 30.2 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/dotest.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/dotest.cal,v $
* *
* This file is not covered under version 2.1 of the GNU LGPL. * This file is not covered under version 2.1 of the GNU LGPL.

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 30.1 $
* @(#) $Id: ellip.cal,v 29.4 2006/06/20 09:29:16 chongo Exp $ * @(#) $Id: ellip.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
* *
* Under source code control: 1990/02/15 01:50:33 * Under source code control: 1990/02/15 01:50:33

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: hello.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: hello.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/hello.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/hello.cal,v $
* *
* Under source code control: 1996/11/13 13:25:43 * Under source code control: 1996/11/13 13:25:43

384
cal/hms.cal Normal file
View File

@@ -0,0 +1,384 @@
/*
* hms - calculate in hours, minutes, and seconds
*
* Copyright (C) 2010 Landon Curt Noll
*
* Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License
* as published by the Free Software Foundation.
*
* Calc is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
* Public License for more details.
*
* A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* @(#) $Revision: 30.2 $
* @(#) $Id: hms.cal,v 30.2 2010/09/02 06:14:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/hms.cal,v $
*
* Under source code control: 2010/09/01 17:14:55
* File existed as early as: 2010
*
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
obj hms {hour, min, sec};
define hms(hour, min, sec)
{
local obj hms ans; /* return value */
/* default missing args to 0 */
if (isnull(sec)) {
sec = 0;
}
if (isnull(min)) {
min = 0;
}
/* load object */
ans.hour = hour;
ans.min = min;
ans.sec = sec;
/* return properly formed object */
ans = fixhms(ans);
return ans;
}
define hms_add(a, b)
{
local obj hms ans; /* return value */
/* initalize value to 1st arg */
if (istype(a, ans)) {
/* 1st arg is hms object, load it */
ans.hour = a.hour;
ans.min = a.min;
ans.sec = a.sec;
} else {
/* 1st arg is not hms, assume scalar hours */
ans.hour = a;
ans.min = 0;
ans.sec = 0;
}
/* add value of 2nd arg */
if (istype(b, ans)) {
/* 2nd arg is hms object, add it */
ans.hour += b.hour;
ans.min += b.min;
ans.sec += b.sec;
} else {
/* 2nd arg is not hms, add scalar hours */
ans.hour += b;
}
/* return normalized result */
ans = fixhms(ans);
return ans;
}
define hms_neg(a)
{
local obj hms ans; /* return value */
/* negate argument */
if (istype(a, ans)) {
/* 1st arg is hms object, load it */
ans.hour = -a.hour;
ans.min = -a.min;
ans.sec = -a.sec;
} else {
/* 2nd arg is not hms, negate scalar hours */
ans.hour = -a;
ans.min = 0;
ans.sec = 0;
}
/* return normalized result */
ans = fixhms(ans);
return ans;
}
define hms_sub(a, b)
{
local obj hms ans; /* return value */
/* initalize value to 1st arg */
if (istype(a, ans)) {
/* 1st arg is hms object, load it */
ans.hour = a.hour;
ans.min = a.min;
ans.sec = a.sec;
} else {
/* 1st arg is not hms, assume scalar hours */
ans.hour = a;
ans.min = 0;
ans.sec = 0;
}
/* subtract value of 2nd arg */
if (istype(b, ans)) {
/* 2nd arg is hms object, subtract it */
ans.hour -= b.hour;
ans.min -= b.min;
ans.sec -= b.sec;
} else {
/* 2nd arg is not hms, subtract scalar hours */
ans.hour -= b;
}
/* return normalized result */
ans = fixhms(ans);
return ans;
}
define hms_mul(a, b)
{
local obj hms ans; /* return value */
/* hms object multiplication */
if (istype(a, ans) && istype(b, ans)) {
ans.hour = hms_abs(a) * hms_abs(b);
ans.min = 0;
ans.sec = 0;
/* scalar multiplication */
} else if (istype(a, ans)) {
ans.hour = a.hour * b;
ans.min = a.min * b;
ans.sec = a.sec * b;
} else {
ans.hour = b.hour * a;
ans.min = b.min * a;
ans.sec = b.sec * a;
}
/* return normalized result */
ans = fixhms(ans);
return ans;
}
define hms_print(a)
{
local obj hms ans; /* temp object for hms type testing */
/* firewall - arg must be a hms object */
if (! istype(a, ans)) {
quit "hms_print called with non hms object";
}
/* print in hms form */
print a.hour : ':' : a.min : ':' : a.sec :;
}
define hms_abs(a)
{
local obj hms ans; /* temp object for hms type testing */
local hour; /* return scalar value */
/* firewall - just absolute value non hms objects */
if (! istype(a, ans)) {
return abs(a);
}
/* compute hours */
hour = a.hour + a.min / 60 + a.sec / 3600;
/* return hours */
return hour;
}
define hms_norm(a)
{
local obj hms ans; /* temp object for hms type testing */
local hour; /* hours */
/* firewall - arg must be a hms object */
if (! istype(a, ans)) {
quit "hms_norm called with non hms object";
}
/* square hours (norm is the square of absolute value */
hour = hms_abs(a);
/* return hours */
return hour*hour;
}
define hms_test(a)
{
local obj hms ans; /* temp value */
/* firewall - arg must be a hms object */
if (! istype(a, ans)) {
quit "hms_test called with non hms object";
}
/* return false of non-zero */
ans = fixhms(a);
if (ans.hour == 0 && ans.min == 0 && ans.sec == 0) {
/* false */
return 0;
}
/* true */
return 1;
}
define hms_int(a)
{
local obj hms ans; /* return value */
/* firewall - arg must be a hms object */
if (! istype(a, ans)) {
quit "hms_int called with non hms object";
}
/* normalize the argument */
ans = fixhms(a);
/* truncate to the nearest second */
ans.sec = int(ans.sec);
/* return value to the nearest second */
return ans;
}
define hms_frac(a)
{
local obj hms ans; /* return value */
/* firewall - arg must be a hms object */
if (! istype(a, ans)) {
quit "hms_frac called with non hms object";
}
/* normalize the argument */
ans = fixhms(a);
/* remove all but fractional seconds */
ans.hour = 0;
ans.min = 0;
ans.sec = frac(ans.sec);
/* return value to the second fraction */
return ans;
}
define hms_rel(a,b)
{
local abs_a, abs_b; /* scalars of the arguments */
/* compute scalars of the arguments */
abs_a = hms_abs(a);
abs_b = hms_abs(b);
/* return the comparison */
return cmp(abs_a, abs_b);
}
define hms_cmp(a,b)
{
local abs_a, abs_b; /* scalars of the arguments */
/* compute scalars of the arguments */
abs_a = hms_abs(a);
abs_b = hms_abs(b);
/* return the equality comparison */
return (abs_a == abs_b);
}
define hms_inc(a)
{
local obj hms ans; /* return value */
/* increment a hms object */
if (istype(a, ans)) {
ans = a;
++ans.sec;
/* return normalized result */
ans = fixhms(ans);
return ans;
}
/* increment a scalar */
return a+1;
}
define hms_dec(a)
{
local obj hms ans; /* return value */
/* decrement a hms object */
if (istype(a, ans)) {
ans = a;
--ans.sec;
/* return normalized result */
ans = fixhms(ans);
return ans;
}
/* decrement a scalar */
return a-1;
}
define fixhms(a)
{
local obj hms ans; /* temp value */
/* firewall */
if (! istype(a, ans)) {
quit "attempt to fix a non hms object";
}
/* force minutes to be intergral */
a.min += frac(a.hour) * 60;
a.hour = int(a.hour);
/* force hours to be intergral */
a.sec += frac(a.min) * 60;
a.min = int(a.min);
/* carry excess seconds into minutes */
a.min += a.sec // 60;
a.sec %= 60;
/* carry excess minutes into hours */
a.hour += a.min // 60;
a.min %= 60;
/* round hours by day */
a.hour %= 24;
/* return normalized result */
return a;
}
if (config("resource_debug") & 3) {
print "obj hms {hour, min, sec} defined";
}

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.5 $ * @(#) $Revision: 30.1 $
* @(#) $Id: intfile.cal,v 29.5 2001/04/10 22:09:34 chongo Exp $ * @(#) $Id: intfile.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/intfile.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/intfile.cal,v $
* *
* Under source code control: 2001/03/31 08:13:11 * Under source code control: 2001/03/31 08:13:11

View File

@@ -1,3 +1,33 @@
/*
* linear - perform a simple two point 2D linear interpolation
*
* Copyright (C) 2005-2007 Landon Curt Noll
*
* Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License
* as published by the Free Software Foundation.
*
* Calc is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
* Public License for more details.
*
* A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* @(#) $Revision: 30.2 $
* @(#) $Id: linear.cal,v 30.2 2007/03/17 05:57:42 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/linear.cal,v $
*
* Under source code control: 2005/12/12 06:41:50
* File existed as early as: 2005
*
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/* /*
* linear - perform a simple two point 2D linear interpolation * linear - perform a simple two point 2D linear interpolation
* *

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.6 $ * @(#) $Revision: 30.1 $
* @(#) $Id: lucas.cal,v 29.6 2002/07/10 09:43:46 chongo Exp $ * @(#) $Id: lucas.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas.cal,v $
* *
* Under source code control: 1990/05/03 16:49:51 * Under source code control: 1990/05/03 16:49:51

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: lucas_chk.cal,v 29.3 2001/03/31 13:31:34 chongo Exp $ * @(#) $Id: lucas_chk.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_chk.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_chk.cal,v $
* *
* Under source code control: 1991/01/11 05:41:43 * Under source code control: 1991/01/11 05:41:43

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: lucas_tbl.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: lucas_tbl.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_tbl.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_tbl.cal,v $
* *
* Under source code control: 1991/01/26 02:43:43 * Under source code control: 1991/01/26 02:43:43

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: mersenne.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: mersenne.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mersenne.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mersenne.cal,v $
* *
* Under source code control: 1991/05/22 21:56:36 * Under source code control: 1991/05/22 21:56:36

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: mfactor.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: mfactor.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mfactor.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mfactor.cal,v $
* *
* Under source code control: 1996/07/06 06:09:40 * Under source code control: 1996/07/06 06:09:40
@@ -261,7 +261,7 @@ define mfactor(n, start_k, rept_loop, p_elim)
} else { } else {
/* report this loop */ /* report this loop */
printf("at 2*%d*%d+1, cpu: %f\n", printf("at 2*%d*%d+1, cpu: %f\n",
(q-1)/(2*n), n, runtime()); (q-1)/(2*n), n, usertime());
fflush(files(1)); fflush(files(1));
loop = 0; loop = 0;
} }
@@ -274,7 +274,7 @@ define mfactor(n, start_k, rept_loop, p_elim)
if (rept_loop <= ++loop) { if (rept_loop <= ++loop) {
/* report this loop */ /* report this loop */
printf("at 2*%d*%d+1, cpu: %f\n", printf("at 2*%d*%d+1, cpu: %f\n",
(q-1)/(2*n), n, runtime()); (q-1)/(2*n), n, usertime());
fflush(files(1)); fflush(files(1));
loop = 0; loop = 0;
} }

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: mod.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: mod.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mod.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mod.cal,v $
* *
* Under source code control: 1990/02/15 01:50:34 * Under source code control: 1990/02/15 01:50:34

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: natnumset.cal,v 29.3 2006/05/01 19:19:46 chongo Exp $ * @(#) $Id: natnumset.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/natnumset.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/natnumset.cal,v $
* *
* Under source code control: 1997/09/07 23:53:51 * Under source code control: 1997/09/07 23:53:51

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: pell.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: pell.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pell.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pell.cal,v $
* *
* Under source code control: 1990/02/15 01:50:34 * Under source code control: 1990/02/15 01:50:34

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.5 $ * @(#) $Revision: 30.1 $
* @(#) $Id: pi.cal,v 29.5 2004/02/23 14:04:01 chongo Exp $ * @(#) $Id: pi.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pi.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pi.cal,v $
* *
* Under source code control: 1991/05/22 21:56:37 * Under source code control: 1991/05/22 21:56:37

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: pix.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: pix.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pix.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pix.cal,v $
* *
* Under source code control: 1996/07/09 03:14:14 * Under source code control: 1996/07/09 03:14:14

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: pollard.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: pollard.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pollard.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pollard.cal,v $
* *
* Under source code control: 1991/05/22 21:56:37 * Under source code control: 1991/05/22 21:56:37

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: poly.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: poly.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/poly.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/poly.cal,v $
* *
* Under source code control: 1990/02/15 01:50:35 * Under source code control: 1990/02/15 01:50:35

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: prompt.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $ * @(#) $Id: prompt.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/prompt.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/prompt.cal,v $
* *
* Under source code control: 1995/12/18 04:43:25 * Under source code control: 1995/12/18 04:43:25

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: psqrt.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: psqrt.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/psqrt.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/psqrt.cal,v $
* *
* Under source code control: 1990/02/15 01:50:35 * Under source code control: 1990/02/15 01:50:35

View File

@@ -18,10 +18,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 30.1 $
* @(#) $Id: qtime.cal,v 29.4 2000/12/18 10:18:40 chongo Exp $ * @(#) $Id: qtime.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/qtime.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/qtime.cal,v $
* *
* Under source code control: 1999/10/13 04:10:33 * Under source code control: 1999/10/13 04:10:33

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: quat.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: quat.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/quat.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/quat.cal,v $
* *
* Under source code control: 1990/02/15 01:50:35 * Under source code control: 1990/02/15 01:50:35

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: randbitrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: randbitrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randbitrun.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randbitrun.cal,v $
* *
* Under source code control: 1995/02/13 03:43:11 * Under source code control: 1995/02/13 03:43:11

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: randmprime.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: randmprime.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randmprime.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randmprime.cal,v $
* *
* Under source code control: 1994/03/14 23:11:21 * Under source code control: 1994/03/14 23:11:21
@@ -88,8 +88,8 @@ randmprime(bits, seed, dbg)
* loop until we find a prime * loop until we find a prime
*/ */
if (dbg >= 1) { if (dbg >= 1) {
start = runtime(); start = usertime();
init = runtime(); init = usertime();
plush = 0; plush = 0;
print "DEBUG1: testing (h+" : plush : ")*2^" : n : "-1"; print "DEBUG1: testing (h+" : plush : ")*2^" : n : "-1";
} }
@@ -97,7 +97,7 @@ randmprime(bits, seed, dbg)
/* bump h, and n if needed */ /* bump h, and n if needed */
if (dbg >= 2) { if (dbg >= 2) {
stop = runtime(); stop = usertime();
print "DEBUG2: last test:", stop-start, " total time:", stop-init; print "DEBUG2: last test:", stop-start, " total time:", stop-init;
} }
if (dbg >= 1) { if (dbg >= 1) {
@@ -116,7 +116,7 @@ randmprime(bits, seed, dbg)
/* found a prime */ /* found a prime */
if (dbg >= 2) { if (dbg >= 2) {
stop = runtime(); stop = usertime();
print "DEBUG2: last test:", stop-start, " total time:", stop-init; print "DEBUG2: last test:", stop-start, " total time:", stop-init;
print "DEBUG3: " : h : "*2^" : n : "-1 is prime"; print "DEBUG3: " : h : "*2^" : n : "-1 is prime";
} }

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: randombitrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: randombitrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randombitrun.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randombitrun.cal,v $
* *
* Under source code control: 1995/02/13 03:43:11 * Under source code control: 1995/02/13 03:43:11

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: randomrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: randomrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randomrun.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randomrun.cal,v $
* *
* Under source code control: 1997/02/19 03:35:59 * Under source code control: 1997/02/19 03:35:59

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: randrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: randrun.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randrun.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randrun.cal,v $
* *
* Under source code control: 1995/02/12 20:00:06 * Under source code control: 1995/02/12 20:00:06

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.34 $ * @(#) $Revision: 30.6 $
* @(#) $Id: regress.cal,v 29.34 2006/06/25 20:33:26 chongo Exp $ * @(#) $Id: regress.cal,v 30.6 2010/09/02 06:09:06 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
* *
* Under source code control: 1990/02/15 01:50:36 * Under source code control: 1990/02/15 01:50:36
@@ -497,7 +497,33 @@ define test_config()
vrfy(config("mode2") == "off", vrfy(config("mode2") == "off",
'556: config("mode2") == "off"'); '556: config("mode2") == "off"');
print '557: Ending test_config'; /* hz is numeric */
vrfy(isint(config("hz")), '557: isint(config("hz"))');
/* compile_custom is simple */
vrfy(issimple(config("compile_custom")),
'558: issimple(config("compile_custom"))');
/* allow_custom is simple */
vrfy(issimple(config("allow_custom")),
'559: issimple(config("allow_custom"))');
/* allow_custom is simple */
vrfy(issimple(config("allow_custom")),
'559: issimple(config("allow_custom"))');
/* baseb is numeric */
vrfy(isint(config("baseb")), '560: isint(config("baseb"))');
/* redecl_warn is simple */
vrfy(issimple(config("redecl_warn")),
'561: issimple(config("redecl_warn"))');
/* dupvar_warn is simple */
vrfy(issimple(config("dupvar_warn")),
'562: issimple(config("rdupvar_warn"))');
print '563: Ending test_config';
} }
print '010: parsed test_config()'; print '010: parsed test_config()';
@@ -570,12 +596,18 @@ print '012: parsed squarecheck(a, b, str)';
define powercheck(a, p1, p2, str) define powercheck(a, p1, p2, str)
{ {
local a1, a2, a3; local a1, a2, a3;
local b1, b2, b3;
a1 = (a^p1)^p2; a1 = (a^p1)^p2;
a2 = (a^p2)^p1; a2 = (a^p2)^p1;
a3 = a^(p1*p2); a3 = a^(p1*p2);
b1 = (a**p1)**p2;
b2 = (a**p2)**p1;
b3 = a**(p1*p2);
if (a1 != a2) {print '**** (a^p1)^p2 != (a^p2)^p1:', str; ++prob;} if (a1 != a2) {print '**** (a^p1)^p2 != (a^p2)^p1:', str; ++prob;}
if (a1 != a3) {print '**** (a^p1)^p2 != a^(p1*p2):', str; ++prob;} if (a1 != a3) {print '**** (a^p1)^p2 != a^(p1*p2):', str; ++prob;}
if (b1 != b2) {print '**** (b^p1)^p2 != (b^p2)^p1:', str; ++prob;}
if (b1 != b3) {print '**** (b^p1)^p2 != b^(p1*p2):', str; ++prob;}
print str; print str;
} }
print '013: parsed powercheck(a, p1, p2, str)'; print '013: parsed powercheck(a, p1, p2, str)';
@@ -743,6 +775,7 @@ define test_functions()
local pi; local pi;
local h, n, r, m, v; local h, n, r, m, v;
local n2, m2, v2; local n2, m2, v2;
local t;
print '700: Beginning test_functions'; print '700: Beginning test_functions';
@@ -1374,7 +1407,44 @@ define test_functions()
vrfy(a == -4, '1203: a == -4'); vrfy(a == -4, '1203: a == -4');
vrfy(b == 2, '1204: b == 2'); vrfy(b == 2, '1204: b == 2');
print '1205: Ending test_functions'; /* runtime(), systime(), usertime() return numeric values */
vrfy(isnum(runtime()), '1205: isnum(runtime())');
vrfy(isnum(systime()), '1206: isnum(systime())');
vrfy(isnum(usertime()), '1207: isnum(usertime())');
/* more jacobi tests */
vrfy(jacobi(987897,987) == 0, '1208: jacobi(987897,987) == 0');
vrfy(jacobi(897,987) == 0, '1209: jacobi(897,987) == 0');
vrfy(jacobi(987,897) == 0, '1210: jacobi(987,897) == 0');
vrfy(jacobi(90,897) == 0, '1211: jacobi(90,897) == 0');
vrfy(jacobi(45,897) == 0, '1212: jacobi(45,897) == 0');
vrfy(jacobi(897,45) == 0, '1213: jacobi(897,45) == 0');
vrfy(jacobi(42,45) == 0, '1214: jacobi(42,45) == 0');
vrfy(jacobi(21,45) == 0, '1215: jacobi(21,45) == 0');
vrfy(jacobi(45,21) == 0, '1216: jacobi(45,21) == 0');
vrfy(jacobi(3,21) == 0, '1217: jacobi(3,21) == 0');
vrfy(jacobi(0,21) == 0, '1218: jacobi(0,21) == 0');
vrfy(jacobi(0,20003) == 0, '1219: jacobi(0,20003) == 0');
vrfy(jacobi(1,20003) == 1, '1220: jacobi(1,20003) == 1');
vrfy(jacobi(1236,20003) == 1, '1221: jacobi(1236,20003) == 1');
vrfy(jacobi(618,20003) == -1, '1222: jacobi(618,20003) == -1');
vrfy(jacobi(309,20003) == 1, '1223: jacobi(309,20003) == 1');
vrfy(jacobi(227,309) == 1, '1224: jacobi(227,309) == 1');
vrfy(jacobi(82,227) == 1, '1225: jacobi(82,227) == 1');
vrfy(jacobi(41,227) == -1, '1226: jacobi(41,227) == -1');
vrfy(jacobi(22,41) == -1, '1227: jacobi(22,41) == -1');
vrfy(jacobi(11,41) == -1, '1228: jacobi(11,41) == -1');
vrfy(jacobi(8,11) == -1, '1229: jacobi(8,11) == -1');
vrfy(jacobi(4,11) == 1, '1230: jacobi(4,11) == 1');
vrfy(jacobi(2,11) == -1, '1231: jacobi(2,11) == -1');
vrfy(jacobi(1,11) == 1, '1232: jacobi(1,11) == 1');
vrfy(jacobi(0,11) == 0, '1233: jacobi(0,11) == 0');
vrfy(jacobi(0,0) == 0, '1234: jacobi(0,0) == 0');
vrfy(jacobi(-1,0) == 0, '1235: jacobi(-1,0) == 0');
vrfy(jacobi(-1,-1) == 0, '1236: jacobi(-1,-1) == 0');
vrfy(jacobi(0,-1) == 0, '1237: jacobi(0,-1) == 0');
print '1238: Ending test_functions';
} }
print '017: parsed test_functions()'; print '017: parsed test_functions()';
@@ -2668,11 +2738,24 @@ define test_2600()
vrfy(log(1e127) == 127, vrfy(log(1e127) == 127,
strcat(str(tnum++), ': log(1e127)) == 127')); strcat(str(tnum++), ': log(1e127)) == 127'));
vrfy(round(log(17^47),10) == 57.8310993048, vrfy(round(log(17^47),10) == 57.8310993048,
strcat(str(tnum++), strcat(str(tnum++),
': round(log(17^47),10) == 57.8310993048')); ': round(log(17^47),10) == 57.8310993048'));
vrfy(round(log(127),10) == 2.103803721, vrfy(round(log(127),10) == 2.103803721,
strcat(str(tnum++), strcat(str(tnum++),
': round(log(127),10) == 2.103803721')); ': round(log(127),10) == 2.103803721'));
vrfy(round(log(0.25,0.00001),5) == -0.60206,
strcat(str(tnum++),
': round(log(0.25,0.00001),5) == -0.60206'));
vrfy(round(log(0.25,1e-10),10) == -0.6020599913,
strcat(str(tnum++),
': round(log(0.25,1e-10),10) == -0.6020599913'));
vrfy(round( log(1.2+1.2i,1e-5),5) == 0.2297+0.34109i,
strcat(str(tnum++),
': round(log(1.2+1.2i,1e-5),5) == 0.2297+0.34109i'));
vrfy(round( log(1.2+1.2i,1e-10),10) == 0.2296962439+0.3410940885i,
strcat(str(tnum++),
': round(log(1.2+1.2i,1e-10),10) == ',
'0.2296962439+0.3410940885i'));
epsilon(i),; epsilon(i),;
print tnum++: ': epsilon(i),;'; print tnum++: ': epsilon(i),;';
@@ -3227,7 +3310,7 @@ define test_error()
'3654: scale(3,2^31) == error(10034)'); '3654: scale(3,2^31) == error(10034)');
vrfy("x" ^ 3 == error(10035), '3655: "x" ^ 3 == error(10035)'); vrfy("x" ^ 3 == error(10035), '3655: "x" ^ 3 == error(10035)');
vrfy(2 ^ "x" == error(10036), '3656: 2 ^ "x" == error(10036)'); vrfy(2 ^ "x" == error(10036), '3656: 2 ^ "x" == error(10036)');
vrfy(2 ^ 2.5 == error(10036), '3657: 2 ^ 2.5 == error(10036)'); vrfy(2 ^ "2" == error(10036), '3657: 2 ^ "2" == error(10036)');
vrfy(power("x",2.1) == error(10037), vrfy(power("x",2.1) == error(10037),
'3658: power("x",2.1) == error(10037)'); '3658: power("x",2.1) == error(10037)');
vrfy(power(2,"x") == error(10038), vrfy(power(2,"x") == error(10038),
@@ -3461,7 +3544,7 @@ print '070: parsed test_redc()';
*/ */
define test_fileops() define test_fileops()
{ {
local a, b, c, f, m, n, p, r, x, y, z; local a, b, c, f, m, n, p, r, s, x, y, z;
local L = "Landon"; local L = "Landon";
local C = "Curt"; local C = "Curt";
local N = "Noll"; local N = "Noll";
@@ -3586,15 +3669,38 @@ define test_fileops()
++ecnt; ++ecnt;
print '4267: ++ecnt;'; print '4267: ++ecnt;';
vrfy(isfile(p=fopen(long,"r")) == 0, vrfy(isfile(p=fopen(long,"r")) == 0,
'4268: isfile(p=fopen(long,"r")) == 0'); '4268: isfile(p=fopen(long,"r")) == 0');
/*
* test fgetfile() and fgetline()
*/
vrfy(!iserror(p=fopen("tmp4200","w")),
'4269: !iserror(p=fopen("tmp4200","w"))');
vrfy(!iserror(fputs(p,"chongo\n")),
'4270: !iserror(fputs(p,"chongo\n"))');
vrfy(!iserror(fputs(p,"w\0a\0s\n")),
'4271: !iserror(fputs(p,"w\0a\0s\n"))');
vrfy(!iserror(fputs(p,"here\n")),
'4272: !iserror(fputs(p,"here\n"))');
vrfy(!iserror(fclose(p)), '4273: !iserror(fclose(p))');
vrfy(!iserror(p=fopen("tmp4200","r")),
'4274: !iserror(p=fopen("tmp4200","r"))');
vrfy(!iserror(s=fgetline(p)), '4275: !iserror(s=fgetline(p))');
vrfy(strcmp(s,"chongo") == 0, '4276: strcmp(s,"chongo") == 0');
vrfy(!iserror(s=fgetfile(p)), '4277: !iserror(s=fgetfile(p))');
vrfy(strcmp(s,"w\0a\0s\nhere\n") == 0,
'4278: strcmp(s,"w\0a\0s\nhere\n") == 0');
vrfy(!iserror(fclose(p)), '4279: !iserror(fclose(p))');
/* /*
* cleanup * cleanup
*/ */
x = rm("junk4200"); x = rm("junk4200");
print '4269: x = rm("junk4200")'; print '4280: x = rm("junk4200")';
x = rm("tmp4200");
print '4281: x = rm("tmp4200")';
print '4270: Ending test_fileops'; print '4282: Ending test_fileops';
} }
print '071: parsed test_fileops()'; print '071: parsed test_fileops()';
@@ -5265,7 +5371,7 @@ define test_is()
local nerr; /* new error value */ local nerr; /* new error value */
local odd; /* odd integer */ local odd; /* odd integer */
local even; /* even integer that is 10 times odd */ local even; /* even integer that is 10 times odd */
local hash; /* sha hash value */ local hash; /* sha1 hash value */
local id; /* identity matrix */ local id; /* identity matrix */
local list; /* list value */ local list; /* list value */
local matrix; /* non-identity matrix */ local matrix; /* non-identity matrix */
@@ -5320,8 +5426,8 @@ define test_is()
print '5911: odd = 23209'; print '5911: odd = 23209';
even = odd*10; even = odd*10;
print '5912: even = odd*10'; print '5912: even = odd*10';
hash = sha(); hash = sha1();
print '5913: hash = sha()'; print '5913: hash = sha1()';
mat id[3,3] = {1,0,0,0,1,0,0,0,1}; mat id[3,3] = {1,0,0,0,1,0,0,0,1};
print '5914: id[3,3] = {1,0,0,0,1,0,0,0,1}'; print '5914: id[3,3] = {1,0,0,0,1,0,0,0,1}';
list = list(2,3,4); list = list(2,3,4);
@@ -5644,7 +5750,7 @@ define test_is()
vrfy(ishash(nerr) == 0, '6178: ishash(nerr) == 0'); vrfy(ishash(nerr) == 0, '6178: ishash(nerr) == 0');
vrfy(ishash(odd) == 0, '6179: ishash(odd) == 0'); vrfy(ishash(odd) == 0, '6179: ishash(odd) == 0');
vrfy(ishash(even) == 0, '6180: ishash(even) == 0'); vrfy(ishash(even) == 0, '6180: ishash(even) == 0');
vrfy(ishash(hash) == 1, '6181: ishash(hash) == 1'); vrfy(ishash(hash) == 2, '6181: ishash(hash) == 2');
vrfy(ishash(id) == 0, '6182: ishash(id) == 0'); vrfy(ishash(id) == 0, '6182: ishash(id) == 0');
vrfy(ishash(list) == 0, '6183: ishash(list) == 0'); vrfy(ishash(list) == 0, '6183: ishash(list) == 0');
vrfy(ishash(matrix) == 0, '6184: ishash(matrix) == 0'); vrfy(ishash(matrix) == 0, '6184: ishash(matrix) == 0');
@@ -6737,108 +6843,6 @@ define test_blkprintf()
print '172: parsed test_blkprintf()'; print '172: parsed test_blkprintf()';
/*
* test_sha - test the sha hash
*/
define test_sha()
{
local a, b, c, d, e, f, x, y, z, L, M, B1, B2, B;
print '7100: Beginning test_sha';
y = sha();
print '7101: y = sha();';
z = sha();
print '7102: z = sha();';
vrfy(y == z, '7103: y == z');
vrfy(sha("") == y, '7104: sha("") == y');
y = sha(y,1);
print '7105: y = sha(y,1);';
vrfy(y == sha(1), '7106: y == sha(1)');
vrfy(sha(y,2) == sha(1,2), '7107: sha(y,2) == sha(1,2)');
vrfy(sha(sha()) == 0xf96cea198ad1dd5617ac084a3d92c6107708c0ef,
'7108: sha(sha()) == 0xf96cea198ad1dd5617ac084a3d92c6107708c0ef');
vrfy(sha(sha("a"))==0x37f297772fae4cb1ba39b6cf9cf0381180bd62f2,
'7109: sha(sha("a"))==0x37f297772fae4cb1ba39b6cf9cf0381180bd62f2');
vrfy(sha(sha("ab"))==0x488373d362684af3d3f7a6a408b59dfe85419e09,
'7110: sha(sha("ab"))==0x488373d362684af3d3f7a6a408b59dfe85419e09');
vrfy(sha(sha("abc"))==0x0164b8a914cd2a5e74c4f7ff082c4d97f1edf880,
'7111: sha(sha("abc"))==0x0164b8a914cd2a5e74c4f7ff082c4d97f1edf880');
vrfy(sha(sha("abcd"))==0x082c73b06f71185d840fb4b28eb3abade67714bc,
'7112: sha(sha("abcd"))==0x082c73b06f71185d840fb4b28eb3abade67714bc');
vrfy(sha(sha("abcde"))==0xd624e34951bb800f0acae773001df8cffe781ba8,
'7113: sha(sha("abcde"))==0xd624e34951bb800f0acae773001df8cffe781ba8');
vrfy(sha(sha("abcdef"))==0x2a589f7750598dc0ea0a608719e04327f609279a,
'7114: sha(sha("abcdef"))==0x2a589f7750598dc0ea0a608719e04327f609279a');
vrfy(sha(sha("abcdefg"))==0x5bdf01f9298e9d19d3f8d15520fd74eed600b497,
'7115: sha(sha("abcdefg"))==0x5bdf01f9298e9d19d3f8d15520fd74eed600b497');
vrfy(sha(sha("abcdefgh"))==0x734ba8b31975d0dbae4d6e249f4e8da270796c94,
'7116: sha(sha("abcdefgh"))==0x734ba8b31975d0dbae4d6e249f4e8da270796c94');
vrfy(sha(sha(1)) == 0x864c8d09e828c7c31d62693736a5a9302c282777,
'7117: sha(sha(1)) == 0x864c8d09e828c7c31d62693736a5a9302c282777');
vrfy(sha(sha(2)) == 0x2c0b59c512cb20fad6bb0883b69c9f5a46545808,
'7118: sha(sha(2)) == 0x2c0b59c512cb20fad6bb0883b69c9f5a46545808');
vrfy(sha(sha(22/7))==0x7ddb7f8a7e9d70757f157744fddea7a6c6a6bcc6,
'7119: sha(sha(22/7)==0x7ddb7f8a7e9d70757f157744fddea7a6c6a6bcc6');
vrfy(sha(sha(isqrt(2e1000))) ==
0x6db8d9cf0b018b8f9cbbf5aa1edb8066d19e1bb0,
'7120: sha(sha(isqrt(2e1000)==0x6db8d9cf0b018b8f9cbbf5aa1edb8066d19e1bb0');
vrfy(sha("x", "y", "z") == sha("xyz"),
'7121: sha("x", "y", "z") == sha("xyz")');
vrfy(sha(sha("this is", 7^19-8, "a composit", 3i+4.5, "hash")) ==
0x21e42319a26787046c2b28b7ae70f1b54bf0ba2a,
'7122: sha(sha("this is", 7^19-8, ..., "hash")) == 0x21e4...');
z = sha(list(1,2,3), "curds and whey", 2^21701-1, pi(1e-100));
print '7123: z = sha(list(1,2,3), "curds and whey", 2^21701-1, pi(1e-100));';
vrfy(sha(z) == 257075527903934749824451356785709876382198951165,
'7124: sha(z) == 257075527903934749824451356785709876382198951165');
y = sha();
print '7125: y = sha()';
y = sha(y, list(1,2,3), "curds and whey");
print '7126: y = sha(y, list(1,2,3), "curds and whey")';
y = sha(y, 2^21701-1);
print '7127: y = sha(y, 2^21701-1)';
y = sha(y, pi(1e-100));
print '7128: y = sha(y, pi(1e-100))';
vrfy(y == z, '7129: y == z');
B = blk() = {"a", "b", "c"};
print '7130: B = blk() = {"a", "b", "c"};';
vrfy(sha(B) == sha("abc"), '7131: sha(B) == sha("abc")');
B1 = blk() = {1,2,3,4};
print '7132: B1 = blk() = {1,2,3,4};';
B2 = blk() = {5,6,7,8};
print '7133: B2 = blk() = {5,6,7,8};';
B = blk() = {1,2,3,4,5,6,7,8};
print '7134: B = blk() = {1,2,3,4,5,6,7,8};';
vrfy(sha(B1, B2) == sha(B), '7135: sha(B1, B2) == sha(B)');
vrfy(sha(B[1], B[3], B[5]) == sha("\02\04\06"),
'7136: sha(B[1], B[3], B[5]) == sha("\02\04\06")');
L = list(1,2,3);
print '7137: L = list(1,2,3)';
mat M[3] = {4,5,6};
print '7138: mat M[3] = {4,5,6}';
vrfy(sha(sha(L), M, B) == sha(L, M, B),
'7139: sha(sha(L), M, B) == sha(L, M, B)');
vrfy(sha(sha(L,M), B) == sha(L, M, B),
'7140: sha(sha(L, M), B) == sha(L, M, B)');
print '7141: Ending test_sha';
}
print '173: parsed test_sha()';
/* /*
* test_sha1 - test the sha1 hash * test_sha1 - test the sha1 hash
*/ */
@@ -6924,88 +6928,6 @@ define test_sha1()
print '174: parsed test_sha1()'; print '174: parsed test_sha1()';
/*
* test_md5 - test the md5 hash
*/
define test_md5()
{
local a, b, c, d, e, f, x, y, z, L, M, B;
print '7300: Beginning test_md5';
y = md5();
print '7301: y = md5();';
z = md5();
print '7302: z = md5();';
vrfy(y == z, '7303: y == z');
y = md5(y,1);
print '7304: y = md5(y,1);';
z = md5(1);
print '7305: z = md5(1);';
vrfy(y == z, '7306: y == z');
vrfy(md5(z,2) == md5(1,2), '7307: md5(z,2) == md5(1,2)');
vrfy(md5(md5()) == 0xd41d8cd98f00b204e9800998ecf8427e,
'7308: md5(md5()) == 0xd41d8cd98f00b204e9800998ecf8427e');
vrfy(md5("x", "y", "z") == md5("xyz"),
'7309: md5("x", "y", "z") == md5("xyz")');
vrfy(md5(md5("this is", 7^19-8, "a composit", 3i+4.5, "hash")) ==
0x39a5a8e24a2eb65a51af462c8bdd5e3,
'7310: md5(md5("this is", 7^19-8, "a composit", 3i+4.5, "hash")) == ...');
z = md5(list(1,2,3), "curds and whey", 2^21701-1, pi(1e-100));
print '7311: z = md5(list(1,2,3), "curds and whey", 2^21701-1, pi(1e-100));';
vrfy(md5(z) == 0x487462e577eabef0302dd13af6632546,
'7312: md5(z) == 0x487462e577eabef0302dd13af6632546');
y = md5();
print '7313: y = md5();';
y = md5(y, list(1,2,3), "curds and whey");
print '7314: y = md5(y, list(1,2,3), "curds and whey")';
y = md5(y, 2^21701-1);
print '7315: y = md5(y, 2^21701-1);';
y = md5(y, pi(1e-100));
print '7316: y = md5(y, pi(1e-100));';
vrfy(y == z, '7317: y == z');
vrfy(md5(md5("a")) == 0x0cc175b9c0f1b6a831c399e269772661,
'7318: md5(md5("a")) == 0x0cc175b9c0f1b6a831c399e269772661');
vrfy(md5(md5("ab")) == 0x187ef4436122d1cc2f40dc2b92f0eba0,
'7319: md5(md5("ab")) == 0x187ef4436122d1cc2f40dc2b92f0eba0');
vrfy(md5(md5("abc")) == 0x900150983cd24fb0d6963f7d28e17f72,
'7320: md5(md5("abc")) == 0x900150983cd24fb0d6963f7d28e17f72');
vrfy(md5(md5("abcd")) == 0xe2fc714c4727ee9395f324cd2e7f331f,
'7321: md5(md5("abcd")) == 0xe2fc714c4727ee9395f324cd2e7f331f');
vrfy(md5(md5("abcde")) == 0xab56b4d92b40713acc5af89985d4b786,
'7322: md5(md5("abcde")) == 0xab56b4d92b40713acc5af89985d4b786');
vrfy(md5(md5("abcdef")) == 0xe80b5017098950fc58aad83c8c14978e,
'7323: md5(md5("abcdef")) == 0xe80b5017098950fc58aad83c8c14978e');
vrfy(md5(md5("abcdefg")) == 0x7ac66c0f148de9519b8bd264312c4d64,
'7324: md5(md5("abcdefg")) == 0x7ac66c0f148de9519b8bd264312c4d64');
vrfy(md5(md5("abcdefgh")) == 0xe8dc4081b13434b45189a720b77b6818,
'7325: md5(md5("abcdefgh")) == 0xe8dc4081b13434b45189a720b77b6818');
vrfy(md5(md5(1)) == 0x44fe7987067ac45311c88772038f60d1,
'7326: md5(md5(1)) == 0x44fe7987067ac45311c88772038f60d1');
vrfy(md5(md5(22/7)) == 0x9274b951e1dfb9cba22af1c127daa8e7,
'7327: md5(md5(22/7) == 0x9274b951e1dfb9cba22af1c127daa8e7');
vrfy(md5(md5(isqrt(2e1000))) == 0xe56ac4b8cad869e738a04fedc97058f3,
'7328: md5(md5(isqrt(2e1000))) == 0xe56ac4b8cad869e738a04fedc97058f3');
L = list(1,2,3);
print '7329: L = list(1,2,3)';
mat M[3] = {4,5,6};
print '7330: mat M[3] = {4,5,6}';
B = blk() = {7,8,9};
print '7331: B = blk() = {7,8,9}';
vrfy(md5(md5(L), M, B) == md5(L, M, B),
'7332: md5(md5(L), M, B) == md5(L, M, B)');
vrfy(md5(md5(L,M), B) == md5(L, M, B),
'7333: md5(md5(L, M), B) == md5(L, M, B)');
print '7334: Ending test_md5';
}
print '175: parsed test_md5()';
/* /*
* The 7400's contain tests for saveval and dot. These tests are * The 7400's contain tests for saveval and dot. These tests are
* done inline near the bottom. * done inline near the bottom.
@@ -7538,6 +7460,85 @@ define test_somenew()
print '190: parsed test_somenew()'; print '190: parsed test_somenew()';
/*
* test_exponentiation - test new exponentiation functionaltiy
*/
define test_exponentiation()
{
local a;
print '8800: Starting test_somenew';
/* unexpected help file cases */
vrfy(2^3 == 8, '8801: 2^3 == 8');
vrfy(2.5 ^ 3.5 == power(2.5, 3.5),
'8802: 2.5 ^ 3.5 == power(2.5, 3.5)');
vrfy(2.5 ^ 2.718i == power(2.5, 2.718i),
'8803: 2.5 ^ 2.718i == power(2.5, 2.718i)');
vrfy(3i^4 == 81, '8804: 3i^4 == 81');
vrfy(0.5i ^ 0.25 == power(0.5i, 0.25),
'8804: 0.5i ^ 0.25 == power(0.5i, 0.25)');
vrfy(3.13145i^0.30103i == power(3.13145i, 0.30103i),
'8806: 3.13145i^0.30103i == power(3.13145i, 0.30103i)');
/* deal with some corner error cases */
ecnt += 12;
print '8807: ecnt += 2';
vrfy((1/0) ^ -1 == 0, '8808: (1/0) ^ -1 == 0');
vrfy((1/0) ^ -2 == 0, '8809: (1/0) ^ -2 == 0');
vrfy((1/0) ^ 0 == error(10001), '8810: (1/0) ^ 0 == error(10001)');
vrfy((1/0) ^ 3 == error(10001), '8811: (1/0) ^ 3 == error(10001)');
vrfy(0 ^ -2 == error(10001), '8812: 0 ^ -2 == error(10001)');
vrfy((1/0) ^ 1i == error(10001),'8813: (1/0) ^ 1i == error(10001)');
vrfy((1/0) ^ 0i == error(10001),'8814: (1/0) ^ 0i == error(10001)');
/* real ^ real */
vrfy(5^6 == 15625, '8815: 5^6 == 15625');
vrfy(10^31 == 1e31, '8816: 10^31 == 1e31');
vrfy(10 ^ (127/31) == power(10, 127/31),
'8817: 10 ^ (127/31) == power(10, 127/31)');
vrfy((10^31) ^ 10 == 1e310, '8818: (10^31) ^ 10 == 1e310');
/* complex ^ real */
vrfy(10i ^ 10 == -1e10, '8819: 10i ^ 10 == -1e10');
vrfy((-10i) ^ 10 == -1e10, '8820: (-10i) ^ 10 == -1e10');
vrfy((1+1i) ^ 4 == -4, '8821: (1+1i) ^ 4 == -4');
vrfy((1+1i) ^ 65536 == 2^32768, '8822: (1+1i) ^ 65536 == 2^32768');
vrfy((1+1i) ^ (2^20) == 2^(2^19),
'8823: (1+1i) ^ (2^20) == 2^(2^19)');
vrfy((31+17i) ^ pi() == power(31+17i, pi()),
'8824: (31+17i) ^ pi() == power(31+17i, pi()');
vrfy((5+7i) ^ exp(5) == power(5+7i, exp(5)),
'8825: (5+7i) ^ exp(5) == power(5+7i, exp(5))');
/* real ^ complex */
vrfy(10 ^ 1i == power(10, 1i), '8826: 10 ^ 1i == power(10, 1i)');
vrfy(10 ^ (2+3i) == power(10, 2+3i),
'8827: 10 ^ (2+3i) == power(10, 2+3i)');
vrfy(pi() ^ (2+3i) == power(pi(), 2+3i),
'8828: pi() ^ (2+3i) == power(pi(), 2+3i)');
vrfy(exp(64) ^ (2+3i) == power(exp(64), 2+3i),
'8828: exp(64) ^ (2+3i) == power(exp(64), 2+3i)');
vrfy(pi() ^ (257+127i) == power(pi(), 257+127i),
'8829: pi() ^ (257+127i) == power(pi(), 257+127i)');
vrfy(pi() ^ asin(-2) == power(pi(), asin(-2)),
'8830: pi() ^ asin(-2) == power(pi(), asin(-2)');
/* complex ^ complex */
vrfy((3+4i) ^ (2+3i) == power(3+4i, 2+3i),
'8831: (3+4i) ^ (2+3i) == power(3+4i, 2+3i)');
vrfy(ln(-10) ^ (2+3i) == power(ln(-10), 2+3i),
'8832: ln(-10) ^ (2+3i) == power(ln(-10), 2+3i)');
vrfy((pi()*1i) ^ asin(-2) == power(pi()*1i, asin(-2)),
'8833: (pi()*1i) ^ asin(-2) == power(pi()*1i, asin(-2))');
vrfy((exp(1)+pi()*1i) ^ asin(-2) == power(exp(1)+pi()*1i, asin(-2)),
'8834: (exp(1)+pi()*1i) ^ asin(-2) == power(exp(1)+pi()*1i, asin(-2))');
print '8835: Ending test_somenew';
}
print '191: parsed test_exponentiation()';
/* /*
* test_quit - test the QUIT functionality * test_quit - test the QUIT functionality
*/ */
@@ -7765,12 +7766,8 @@ return test_name();
print; print;
return test_blkprintf(); return test_blkprintf();
print; print;
return test_sha();
print;
return test_sha1(); return test_sha1();
print; print;
return test_md5();
print;
print '7400: Beginning test_savedot'; print '7400: Beginning test_savedot';
print '7401: saveval(1);'; print '7401: saveval(1);';
@@ -7909,6 +7906,14 @@ vrfy(dotest("set8700.line", 8703) == 0,
/* 87xx: Ending dotest runs is printed by set8700.test */ /* 87xx: Ending dotest runs is printed by set8700.test */
/*
* new exponentiation functionaltiy
*/
print;
return test_exponentiation();
/* 88xx: test exponentiation */
/* /*
* read various calc resource files * read various calc resource files
* *
@@ -8007,7 +8012,11 @@ print '9838: skipping read -once hello.cal because it is an infinite loop';
print '9839: skipping read -once xx_print.cal because it is a printing demo'; print '9839: skipping read -once xx_print.cal because it is a printing demo';
read -once sumtimes; read -once sumtimes;
print '9840: read -once sumtimes'; print '9840: read -once sumtimes';
print '9841: Ending read of selected calc resource files'; read -once dms;
print '9841: read -once dms';
read -once hms;
print '9842: read -once hms';
print '9843: Ending read of selected calc resource files';
/* /*

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 30.1 $
* @(#) $Id: repeat.cal,v 29.4 2003/01/26 19:42:03 chongo Exp $ * @(#) $Id: repeat.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/repeat.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/repeat.cal,v $
* *
* Under source code control: 2003/01/05 00:00:01 * Under source code control: 2003/01/05 00:00:01

View File

@@ -15,8 +15,8 @@
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.2 $
* @(#) $Id: screen.cal,v 29.2 2006/05/01 19:21:18 chongo Exp $ * @(#) $Id: screen.cal,v 30.2 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/screen.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/screen.cal,v $
* *
* This file is not covered under version 2.1 of the GNU LGPL. * This file is not covered under version 2.1 of the GNU LGPL.

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: seedrandom.cal,v 29.3 2001/03/31 13:31:34 chongo Exp $ * @(#) $Id: seedrandom.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/seedrandom.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/seedrandom.cal,v $
* *
* Under source code control: 1996/01/01 08:21:00 * Under source code control: 1996/01/01 08:21:00

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.1 $ * @(#) $Revision: 30.1 $
* @(#) $Id: set8700.cal,v 29.1 2006/05/20 19:35:33 chongo Exp $ * @(#) $Id: set8700.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.cal,v $
* *
* Under source code control: 2006/05/20 14:10:11 * Under source code control: 2006/05/20 14:10:11
@@ -70,3 +70,8 @@ define set8700_g(set8700_x)
obj set8700_point { obj set8700_point {
set8700_x, set8700_y, set8700_z set8700_x, set8700_y, set8700_z
} }
global mat set8700_c[] = { 1, 2+3i, -5+4i, 5i+6, -7i };
global mat set8700_e[] = { 0, 1, 0, 0, 2, -3/2, 2, -1/2,
-3, 0.5, -1.0, 0.5, 1.0, 0.0, 0.0, 0.0 };

View File

@@ -15,10 +15,10 @@
## A copy of version 2.1 of the GNU Lesser General Public License is ## A copy of version 2.1 of the GNU Lesser General Public License is
## distributed with calc under the filename COPYING-LGPL. You should have ## distributed with calc under the filename COPYING-LGPL. You should have
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 30.1 $
## @(#) $Id: set8700.line,v 29.2 2006/06/20 09:29:16 chongo Exp $ ## @(#) $Id: set8700.line,v 30.1 2007/03/16 11:09:54 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.line,v $ ## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.line,v $
## ##
## Under source code control: 2006/05/20 14:10:11 ## Under source code control: 2006/05/20 14:10:11
@@ -402,3 +402,28 @@ set8700_P == (obj set8700_point = {1,2,3})
set8700_L = list(mat[1] = {set8700_P}), protect(set8700_L[0][0]) == 16 set8700_L = list(mat[1] = {set8700_P}), protect(set8700_L[0][0]) == 16
set8700_L = {{{4,5,6}}}, set8700_L[0][0] == set8700_P set8700_L = {{{4,5,6}}}, set8700_L[0][0] == set8700_P
protect(set8700_L,0,2), set8700_L = {{{4,5,6}}}, set8700_L[0][0] == (obj set8700_point = {4,5,6}) protect(set8700_L,0,2), set8700_L = {{{4,5,6}}}, set8700_L[0][0] == (obj set8700_point = {4,5,6})
## Testing quomod
quomod(14,5,3,4) == error(10374)
global set8700_a,set8700_b; quomod("abc", 4, set8700_a, set8700_b) == error(10375)
quomod(14,5,set8700_a,set8700_b,0) == 1 && set8700_a == 2 && set8700_b == 4
quomod(14,5,set8700_a,set8700_b,1) == 1 && set8700_a == 3 && set8700_b == -1
quomod("abc",2,set8700_a,set8700_b) == error(10375)
set8700_a = "abc"; quomod(14,5,set8700_a,set8700_b) == error(10375)
set8700_a = null(); quomod(14,5,set8700_a,set8700_b,24) == 1; set8700_a == 3 && set8700_b == -1
quomod(14,5,set8700_a,set8700_a) == error(10374)
quomod(14,5,set8700_a,set8700_b,-1) == error(10375)
protect(set8700_a,1); quomod(17,2,set8700_a,set8700_b) == error(10376)
protect(set8700_a,0); quomod(17,2,set8700_a,set8700_b); set8700_a == 8 && set8700_b == 1
set8700_p = &set8700_a, set8700_q = &set8700_b; quomod(14,5,*set8700_p,*set8700_q); *set8700_p == 2 && *set8700_q == 4
## Testing estr
base(1/3) == 10
strcmp(estr(null()), "\"\"") == 0
strcmp(estr(bernoulli(48)), "-5609403368997817686249127547/46410") == 0
strcmp(estr(sin(3i)), "1001787492740990189897i/100000000000000000000") == 0
base(10) == 1/3
strcmp(estr("fizzbin"), "\"fizzbin\"") == 0
strcmp(estr(set8700_c), "mat[5]={1,2+3i,-5+4i,6+5i,-7i}") == 0
strcmp(estr(set8700_e), "mat[16]={0,1,0,0,2,-3/2,2,-1/2,-3,1/2,-1,1/2,1,0,0,0}") == 0
strcmp(estr(list(2,3,5)), "list(2,3,5)") == 0

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.2 $
* @(#) $Id: solve.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: solve.cal,v 30.2 2008/05/10 13:30:00 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/solve.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/solve.cal,v $
* *
* Under source code control: 1990/02/15 01:50:37 * Under source code control: 1990/02/15 01:50:37
@@ -47,7 +47,7 @@ define solve(low, high, epsilon)
if (abs(flow) < epsilon) if (abs(flow) < epsilon)
return low; return low;
fhigh = f(high); fhigh = f(high);
if (abs(flow) < epsilon) if (abs(fhigh) < epsilon)
return high; return high;
if (sgn(flow) == sgn(fhigh)) if (sgn(flow) == sgn(fhigh))
quit "Non-opposite signs"; quit "Non-opposite signs";

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: sumsq.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: sumsq.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/sumsq.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/sumsq.cal,v $
* *
* Under source code control: 1990/02/15 01:50:37 * Under source code control: 1990/02/15 01:50:37

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.1 $ * @(#) $Revision: 30.1 $
* @(#) $Id: sumtimes.cal,v 29.1 2006/06/23 00:35:30 chongo Exp $ * @(#) $Id: sumtimes.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/sumtimes.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/sumtimes.cal,v $
* *
* Under source code control: 2006/06/22 17:29 * Under source code control: 2006/06/22 17:29
@@ -40,13 +40,13 @@ define timematsum(N) {
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N); for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
ptop = &sumtimes_A[n-1]; ptop = &sumtimes_A[n-1];
sumtimes_t0 = runtime(); sumtimes_t0 = usertime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n]; for (s = n = 0; n < N; n++) s += sumtimes_A[n];
sumtimes_t1 = runtime(); sumtimes_t1 = usertime();
for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += *p; for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += *p;
sumtimes_t2 = runtime(); sumtimes_t2 = usertime();
s = matsum(sumtimes_A); s = matsum(sumtimes_A);
sumtimes_t3 = runtime(); sumtimes_t3 = usertime();
print "Matrix sum runtimes"; print "Matrix sum runtimes";
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0); printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
@@ -60,11 +60,11 @@ define timelistsum(N) {
sumtimes_A = makelist(N); sumtimes_A = makelist(N);
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N); for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime(); sumtimes_t0 = usertime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n]; for (s = n = 0; n < N; n++) s += sumtimes_A[n];
sumtimes_t1 = runtime(); sumtimes_t1 = usertime();
s = sum(sumtimes_A); s = sum(sumtimes_A);
sumtimes_t2 = runtime(); sumtimes_t2 = usertime();
print "List sum runtimes"; print "List sum runtimes";
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0); printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
printf('\tUsing builtin "sum":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1); printf('\tUsing builtin "sum":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
@@ -76,9 +76,9 @@ define timematsort(N) {
sumtimes_A = mat[N]; sumtimes_A = mat[N];
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N); for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime(); sumtimes_t0 = usertime();
sort(sumtimes_A); sort(sumtimes_A);
sumtimes_t1 = runtime(); sumtimes_t1 = usertime();
printf('\tMatrix sort runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0); printf('\tMatrix sort runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
} }
@@ -88,9 +88,9 @@ define timelistsort(N) {
sumtimes_A = makelist(N); sumtimes_A = makelist(N);
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N); for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime(); sumtimes_t0 = usertime();
sort(sumtimes_A); sort(sumtimes_A);
sumtimes_t1 = runtime(); sumtimes_t1 = usertime();
printf('\tList sort runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0); printf('\tList sort runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
} }
@@ -99,9 +99,9 @@ define timematreverse(N) {
sumtimes_A = mat[N]; sumtimes_A = mat[N];
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N); for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime(); sumtimes_t0 = usertime();
reverse(sumtimes_A); reverse(sumtimes_A);
sumtimes_t1 = runtime(); sumtimes_t1 = usertime();
printf('\tMatrix reverse runtime %.4f\n', sumtimes_t1 - sumtimes_t0); printf('\tMatrix reverse runtime %.4f\n', sumtimes_t1 - sumtimes_t0);
} }
@@ -110,9 +110,9 @@ define timelistreverse(N) {
sumtimes_A = makelist(N); sumtimes_A = makelist(N);
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N); for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime(); sumtimes_t0 = usertime();
reverse(sumtimes_A); reverse(sumtimes_A);
sumtimes_t1 = runtime(); sumtimes_t1 = usertime();
printf('\tList reverse runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0); printf('\tList reverse runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
} }
@@ -124,11 +124,11 @@ define timematssq(N) {
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N); for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
ptop = &sumtimes_A[n-1]; ptop = &sumtimes_A[n-1];
sumtimes_t0 = runtime(); sumtimes_t0 = usertime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2; for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2;
sumtimes_t1 = runtime(); sumtimes_t1 = usertime();
for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += (*p)^2; for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += (*p)^2;
sumtimes_t2 = runtime(); sumtimes_t2 = usertime();
print "Matrix sum of squares runtimes"; print "Matrix sum of squares runtimes";
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0); printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
@@ -141,11 +141,11 @@ define timelistssq(N) {
sumtimes_A = makelist(N); sumtimes_A = makelist(N);
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N); for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime(); sumtimes_t0 = usertime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2; for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2;
sumtimes_t1 = runtime(); sumtimes_t1 = usertime();
s = ssq(sumtimes_A); s = ssq(sumtimes_A);
sumtimes_t2 = runtime(); sumtimes_t2 = usertime();
print "List sum of squares runtimes"; print "List sum of squares runtimes";
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0); printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
printf('\tUsing builtin "ssq":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1); printf('\tUsing builtin "ssq":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
@@ -157,12 +157,12 @@ define timehmean(N, M = 10) {
sumtimes_A = makelist(N); sumtimes_A = makelist(N);
for (n = 0; n < N; n++) sumtimes_A[n] = rand(1, M); for (n = 0; n < N; n++) sumtimes_A[n] = rand(1, M);
sumtimes_t0 = runtime(); sumtimes_t0 = usertime();
for (s = n = 0; n < N; n++) s += 1/sumtimes_A[n]; for (s = n = 0; n < N; n++) s += 1/sumtimes_A[n];
v1 = N/s; v1 = N/s;
sumtimes_t1 = runtime(); sumtimes_t1 = usertime();
v2 = hmean(sumtimes_A); v2 = hmean(sumtimes_A);
sumtimes_t2 = runtime(); sumtimes_t2 = usertime();
print v1, v2; print v1, v2;
print "List harmonic meanruntimes"; print "List harmonic meanruntimes";
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0); printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: surd.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: surd.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/surd.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/surd.cal,v $
* *
* Under source code control: 1990/02/15 01:50:38 * Under source code control: 1990/02/15 01:50:38

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test1700.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: test1700.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test1700.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test1700.cal,v $
* *
* Under source code control: 1994/03/14 23:12:51 * Under source code control: 1994/03/14 23:12:51

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test2300.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: test2300.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2300.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2300.cal,v $
* *
* Under source code control: 1995/07/09 06:12:13 * Under source code control: 1995/07/09 06:12:13

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.2 $
* @(#) $Id: test2600.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: test2600.cal,v 30.2 2007/07/11 22:57:23 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2600.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2600.cal,v $
* *
* Under source code control: 1995/10/13 00:13:14 * Under source code control: 1995/10/13 00:13:14
@@ -313,6 +313,102 @@ define testpower(str, n, b, eps, verbose)
} }
define testpower2(str, n, eps, verbose)
{
local i, a, c, m, min, max;
local b;
local num;
local c2;
local oldeps;
if (isnull(verbose)) verbose = 2;
if (verbose > 0) {
print str:":",:;
}
if (isnull(eps))
eps = epsilon();
oldeps = epsilon(eps);
epsilon(eps),;
if (!isnum(b))
quit "Second argument (exponent) to be a number";
min = 1000;
max = -1000;
for (i = 1; i <= n; i++) {
if (verbose > 2) print i,:;
/* real ^ real */
a = rand(1,1e20);
a = a / (int(a/2)+rand(1,1e20));
b = rand(1,1e20);
b = b / (int(b/2)+rand(1,1e20));
c = a ^ b;
c2 = power(a, b);
if (c != c2) {
m++;
if (verbose > 1) {
printf("*** real^real failure for a = %d\n", a);
}
}
/* complex ^ real */
a = rand(1,1e20);
a = a / (int(a/2)+rand(1,1e20));
b = rand(1,1e20);
b = b / (int(b/2)+rand(1,1e20));
c = (a*1i) ^ b;
c2 = power(a*1i, b);
if (c != c2) {
m++;
if (verbose > 1) {
printf("*** comp^real failure for a = %d\n", a);
}
}
/* real ^ complex */
a = rand(1,1e20);
a = a / (int(a/2)+rand(1,1e20));
b = rand(1,1e20);
b = b / (int(b/2)+rand(1,1e20));
c = a ^ (b*1i);
c2 = power(a, b*1i);
if (c != c2) {
m++;
if (verbose > 1) {
printf("*** real^comp failure for a = %d\n", a);
}
}
/* complex ^ complex */
a = rand(1,1e20);
a = a / (int(a/2)+rand(1,1e20));
b = rand(1,1e20);
b = b / (int(b/2)+rand(1,1e20));
c = (a*1i) ^ (b*1i);
c2 = power(a*1i, b*1i);
if (c != c2) {
m++;
if (verbose > 1) {
printf("*** comp^comp failure for a = %d\n", a);
}
}
}
epsilon(oldeps),;
if (verbose > 0) {
if (m) {
printf("*** %d error(s)\n", m);
printf(" %s: rem/eps min=%d, max=%d\n",
str, min, max);
} else {
printf("no errors\n");
}
}
if (verbose > 1) {
printf(" %s: rem/eps min=%0.4d, max=%0.4d\n", str, min, max);
}
return m;
}
define cpow(a, b, eps) /* Find rem/eps for power(a,b,eps) */ define cpow(a, b, eps) /* Find rem/eps for power(a,b,eps) */
{ {
local v, v1, c, n, d, h; local v, v1, c, n, d, h;
@@ -504,6 +600,7 @@ define test2600(verbose, tnum)
err += testsqrt(strcat(str(tnum++),": sqrt",str(i)), n*10, err += testsqrt(strcat(str(tnum++),": sqrt",str(i)), n*10,
ep, verbose); ep, verbose);
} }
err += testpower2(strcat(str(tnum++),": power"), n*4, ep, verbose);
if (verbose > 1) { if (verbose > 1) {
if (err) { if (err) {
print "***", err, "error(s) found in test2600"; print "***", err, "error(s) found in test2600";

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test2700.cal,v 29.4 2006/06/25 22:06:23 chongo Exp $ * @(#) $Id: test2700.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2700.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2700.cal,v $
* *
* Under source code control: 1995/11/01 22:52:25 * Under source code control: 1995/11/01 22:52:25

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test3100.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: test3100.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3100.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3100.cal,v $
* *
* Under source code control: 1995/11/28 11:56:57 * Under source code control: 1995/11/28 11:56:57

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test3300.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $ * @(#) $Id: test3300.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3300.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3300.cal,v $
* *
* Under source code control: 1995/12/02 04:27:41 * Under source code control: 1995/12/02 04:27:41
@@ -81,9 +81,9 @@ define testr(str, n, N, verbose)
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
for (j = 0; j < n; j++) for (j = 0; j < n; j++)
A[i,j] = rand(-(N^2), N^2)/rand(1, N); A[i,j] = rand(-(N^2), N^2)/rand(1, N);
t = runtime(); t = usertime();
d1 = det(A); d1 = det(A);
t = runtime() - t; t = usertime() - t;
d2 = det(A^2); d2 = det(A^2);
if (d2 != d1^2) { if (d2 != d1^2) {
if (verbose > 0) { if (verbose > 0) {

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test3400.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $ * @(#) $Id: test3400.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3400.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3400.cal,v $
* *
* Under source code control: 1995/12/02 05:20:11 * Under source code control: 1995/12/02 05:20:11

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test3500.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $ * @(#) $Id: test3500.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3500.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3500.cal,v $
* *
* Under source code control: 1995/12/18 22:50:46 * Under source code control: 1995/12/18 22:50:46

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test4000.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $ * @(#) $Id: test4000.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4000.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4000.cal,v $
* *
* Under source code control: 1996/03/13 02:38:45 * Under source code control: 1996/03/13 02:38:45
@@ -145,7 +145,7 @@ define ptimes(str, N, n, count, skip, verbose)
mat A[n]; mat A[n];
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
A[i] = plen(N); A[i] = plen(N);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
p = ptest(A[i], count, skip); p = ptest(A[i], count, skip);
if (!p) { if (!p) {
@@ -159,7 +159,7 @@ define ptimes(str, N, n, count, skip, verbose)
if (m) { if (m) {
printf("*** %d error(s)\n", m); printf("*** %d error(s)\n", m);
} else { } else {
t = round(runtime() - t, 4); t = round(usertime() - t, 4);
if (verbose > 1) { if (verbose > 1) {
printf("%d probable primes: time = %d\n", n, t); printf("%d probable primes: time = %d\n", n, t);
} else { } else {
@@ -194,7 +194,7 @@ define ctimes(str, N, n, count, skip, verbose)
mat A[n]; mat A[n];
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
A[i] = clen(N); A[i] = clen(N);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
p = ptest(A[i], count, skip); p = ptest(A[i], count, skip);
if (p) { if (p) {
@@ -208,7 +208,7 @@ define ctimes(str, N, n, count, skip, verbose)
if (m) { if (m) {
printf("*** %d error(s)\n", m); printf("*** %d error(s)\n", m);
} else { } else {
t = round(runtime() - t, 4); t = round(usertime() - t, 4);
if (verbose > 1) { if (verbose > 1) {
printf("%d probable primes: time = %d\n", n, t); printf("%d probable primes: time = %d\n", n, t);
} else { } else {
@@ -242,7 +242,7 @@ define crtimes(str, a, b, n, count, skip, verbose)
A[i] = rand(a,b); A[i] = rand(a,b);
P[i] = ptest(A[i], 20, 0); P[i] = ptest(A[i], 20, 0);
} }
t = runtime(); t = usertime();
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
p = ptest(A[i], count, skip); p = ptest(A[i], count, skip);
if (p != P[i]) { if (p != P[i]) {
@@ -257,7 +257,7 @@ define crtimes(str, a, b, n, count, skip, verbose)
if (m) { if (m) {
printf("*** %d error(s)?\n", m); printf("*** %d error(s)?\n", m);
} else { } else {
t = round(runtime() - t, 4); t = round(usertime() - t, 4);
if (verbose > 1) { if (verbose > 1) {
printf("%d probable primes: time = %d\n", n, t); printf("%d probable primes: time = %d\n", n, t);
} else { } else {
@@ -295,16 +295,16 @@ define ntimes(str, N, n, count, skip, residue, modulus, verbose)
mat A[n]; mat A[n];
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
A[i] = rlen(N); A[i] = rlen(N);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
p = nextcand(A[i], count, skip, residue, modulus); p = nextcand(A[i], count, skip, residue, modulus);
} }
tnext = round(runtime() - t, 4); tnext = round(usertime() - t, 4);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
p = prevcand(A[i], count, skip, residue, modulus); p = prevcand(A[i], count, skip, residue, modulus);
} }
tprev = round(runtime() - t, 4); tprev = round(usertime() - t, 4);
if (verbose > 0) { if (verbose > 0) {
printf("%d evaluations, nextcand: %d, prevcand: %d\n", n, tnext, tprev); printf("%d evaluations, nextcand: %d, prevcand: %d\n", n, tnext, tprev);
} }

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test4100.cal,v 29.4 2006/06/20 09:29:16 chongo Exp $ * @(#) $Id: test4100.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4100.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4100.cal,v $
* *
* Under source code control: 1996/03/13 03:53:22 * Under source code control: 1996/03/13 03:53:22
@@ -245,38 +245,38 @@ define times(str,N,n,verbose)
C[i] = rand(m2); C[i] = rand(m2);
} }
z = rcin(0,m); /* to initialize redc and maybe lastmod information */ z = rcin(0,m); /* to initialize redc and maybe lastmod information */
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = rcin(A[i],m); z = rcin(A[i],m);
trcin = round(runtime() - t, 3); trcin = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = rcout(A[i],m); z = rcout(A[i],m);
trcout = round(runtime() - t, 3); trcout = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = rcmul(A[i],B[i],m); z = rcmul(A[i],B[i],m);
trcmul = round(runtime() - t, 3); trcmul = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = rcsq(A[i],m); z = rcsq(A[i],m);
trcsq = round(runtime() - t, 3); trcsq = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = A[i] * B[i]; z = A[i] * B[i];
tmul = round(runtime() - t, 3); tmul = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = A[i]^2; z = A[i]^2;
tsq = round(runtime() - t, 3); tsq = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = C[i] % A[i]; z = C[i] % A[i];
tmod = round(runtime() - t, 3); tmod = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
quomod(C[i], A[i], x, y); quomod(C[i], A[i], x, y);
tquomod = round(runtime() - t,3); tquomod = round(usertime() - t,3);
if (verbose > 1) { if (verbose > 1) {
printf("rcin: %d, rcout: %d, rcmul: %d, rcsq: %d\n", printf("rcin: %d, rcout: %d, rcmul: %d, rcsq: %d\n",
@@ -326,29 +326,29 @@ define powtimes(str, N1, N2, n, verbose)
Ar[i] = rcin(A[i], v); Ar[i] = rcin(A[i], v);
B[i] = rlen_4100(N2); B[i] = rlen_4100(N2);
} }
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z1 += pmod(A[i], B[i], v); z1 += pmod(A[i], B[i], v);
tbignum = round(runtime() - t, 4); tbignum = round(usertime() - t, 4);
config("pow2", 1e6); config("pow2", 1e6);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z2 += pmod(A[i], B[i], v); z2 += pmod(A[i], B[i], v);
tnormal = round(runtime() - t, 4); tnormal = round(usertime() - t, 4);
config("redc2",1e6); config("redc2",1e6);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z3 += pmod(A[i], B[i], v); z3 += pmod(A[i], B[i], v);
tsmall = round(runtime() - t, 4); tsmall = round(usertime() - t, 4);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z4 += rcpow(Ar[i], B[i], v); z4 += rcpow(Ar[i], B[i], v);
trcsmall = round(runtime() - t, 4); trcsmall = round(usertime() - t, 4);
config("redc2", 2); config("redc2", 2);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z5 += rcpow(Ar[i], B[i], v); z5 += rcpow(Ar[i], B[i], v);
trcbig = round(runtime() - t, 4); trcbig = round(usertime() - t, 4);
if (z1 != z2) { if (z1 != z2) {
++m; ++m;
@@ -419,13 +419,13 @@ define inittimes(str,N,n,verbose)
M[i] = olen(N); M[i] = olen(N);
A[i] = rand(M[i]); A[i] = rand(M[i]);
} }
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
R[i] = rcin(A[i], M[i]); R[i] = rcin(A[i], M[i]);
trcin = round(runtime() - t, 4); trcin = round(usertime() - t, 4);
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
B[i] = rcout(R[i], M[i]); B[i] = rcout(R[i], M[i]);
trcout = round(runtime() - t, 4); trcout = round(usertime() - t, 4);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
if (B[i] != A[i]) { if (B[i] != A[i]) {
++m; ++m;

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.5 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test4600.cal,v 29.5 2006/06/20 09:29:16 chongo Exp $ * @(#) $Id: test4600.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4600.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4600.cal,v $
* *
* Under source code control: 1996/07/02 20:04:40 * Under source code control: 1996/07/02 20:04:40

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test5100.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $ * @(#) $Id: test5100.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5100.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5100.cal,v $
* *
* Under source code control: 1996/12/02 23:57:10 * Under source code control: 1996/12/02 23:57:10

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test5200.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $ * @(#) $Id: test5200.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5200.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5200.cal,v $
* *
* Under source code control: 1997/02/07 02:48:10 * Under source code control: 1997/02/07 02:48:10

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test8400.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: test8400.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8400.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8400.cal,v $
* *
* Under source code control: 1999/10/31 01:00:03 * Under source code control: 1999/10/31 01:00:03

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test8500.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: test8500.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8500.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8500.cal,v $
* *
* Under source code control: 1999/11/12 20:59:59 * Under source code control: 1999/11/12 20:59:59

View File

@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.1 $ * @(#) $Revision: 30.1 $
* @(#) $Id: test8600.cal,v 29.1 2000/12/04 19:57:02 chongo Exp $ * @(#) $Id: test8600.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8600.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8600.cal,v $
* *
* Under source code control: 2000/12/04 19:57:02 * Under source code control: 2000/12/04 19:57:02

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: unitfrac.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: unitfrac.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/unitfrac.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/unitfrac.cal,v $
* *
* Under source code control: 1990/02/15 01:50:38 * Under source code control: 1990/02/15 01:50:38

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: varargs.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: varargs.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/varargs.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/varargs.cal,v $
* *
* Under source code control: 1991/05/22 21:56:34 * Under source code control: 1991/05/22 21:56:34

View File

@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 30.1 $
* @(#) $Id: xx_print.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: xx_print.cal,v 30.1 2007/03/16 11:09:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/xx_print.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/xx_print.cal,v $
* *
* Under source code control: 1997/04/17 00:08:50 * Under source code control: 1997/04/17 00:08:50

115
calc.c
View File

@@ -1,7 +1,7 @@
/* /*
* calc - arbitrary precision calculator * calc - arbitrary precision calculator
* *
* Copyright (C) 1999-2006 David I. Bell, Landon Curt Noll and Ernest Bowen * Copyright (C) 1999-2007 David I. Bell, Landon Curt Noll and Ernest Bowen
* *
* Primary author: David I. Bell * Primary author: David I. Bell
* *
@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.13 $ * @(#) $Revision: 30.4 $
* @(#) $Id: calc.c,v 29.13 2006/05/19 15:26:10 chongo Exp $ * @(#) $Id: calc.c,v 30.4 2008/04/15 21:17:57 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $
* *
* Under source code control: 1990/02/15 01:48:11 * Under source code control: 1990/02/15 01:48:11
@@ -42,6 +42,7 @@
#if defined(_WIN32) #if defined(_WIN32)
# include <io.h> # include <io.h>
# if !defined(NOTCYGWIN)
/* /*
* getopt.h file is from the Cygwin GNU library * getopt.h file is from the Cygwin GNU library
* *
@@ -49,6 +50,7 @@
* http://sources.redhat.com/cygwin/ * http://sources.redhat.com/cygwin/
*/ */
# include "../getopt/getopt.h" # include "../getopt/getopt.h"
# endif
# define strdup _strdup # define strdup _strdup
# define isatty _isatty # define isatty _isatty
#endif /* Windoz */ #endif /* Windoz */
@@ -64,7 +66,7 @@
#include "have_uid_t.h" #include "have_uid_t.h"
#include "have_const.h" #include "have_const.h"
#include "custom.h" #include "custom.h"
#include "math_error.h" #include "lib_calc.h"
#include "args.h" #include "args.h"
#include "zmath.h" #include "zmath.h"
@@ -87,11 +89,12 @@
/* /*
* static definitions and functions * S_FUNC definitions and functions
*/ */
static void intint(int arg); /* interrupt routine */ S_FUNC void intint(int arg); /* interrupt routine */
static int nextcp(char **cpp, int *ip, int argc, char **argv, BOOL haveendstr); S_FUNC void calc_interrupt(char *fmt, ...);
static void set_run_state(run state); S_FUNC int nextcp(char **cpp, int *ip, int argc, char **argv, BOOL haveendstr);
S_FUNC void set_run_state(run state);
/* /*
* Top level calculator routine. * Top level calculator routine.
@@ -188,7 +191,7 @@ main(int argc, char **argv)
fprintf(stderr, fprintf(stderr,
"-m expects" "-m expects"
" argument"); " argument");
exit (1); exit(2);
} }
cp = argv[index]; cp = argv[index];
} }
@@ -203,7 +206,7 @@ main(int argc, char **argv)
fprintf(stderr, fprintf(stderr,
"%s: unknown -m arg\n", "%s: unknown -m arg\n",
program); program);
exit(1); exit(3);
} }
allow_read = (((*cp-'0') & 04) > 0); allow_read = (((*cp-'0') & 04) > 0);
allow_write = (((*cp-'0') & 02) > 0); allow_write = (((*cp-'0') & 02) > 0);
@@ -211,7 +214,7 @@ main(int argc, char **argv)
cp++; cp++;
if (*cp != ' ' && *cp != '\0') { if (*cp != ' ' && *cp != '\0') {
fprintf(stderr, "??? m-arg"); fprintf(stderr, "??? m-arg");
exit(1); exit(4);
} }
havearg = TRUE; havearg = TRUE;
break; break;
@@ -245,8 +248,13 @@ main(int argc, char **argv)
* call libcalc_call_me_last() - * call libcalc_call_me_last() -
* nothing to cleanup * nothing to cleanup
*/ */
printf("%s (version %s)\n", fputs(CALC_TITLE, stdout);
CALC_TITLE, version()); #if defined(CUSTOM)
fputs(" w/custom functions", stdout);
#else
fputs(" w/o custom functions", stdout);
#endif /* CUSTOM */
printf(" (version %s)\n", version());
exit(0); exit(0);
case 'D': case 'D':
/* /*
@@ -262,7 +270,7 @@ main(int argc, char **argv)
FALSE)) { FALSE)) {
fprintf(stderr, fprintf(stderr,
"-D expects argument\n"); "-D expects argument\n");
exit (1); exit(5);
} }
havearg = TRUE; havearg = TRUE;
if (*cp != ':') { if (*cp != ':') {
@@ -270,7 +278,7 @@ main(int argc, char **argv)
fprintf(stderr, fprintf(stderr,
"-D expects" "-D expects"
" integer\n"); " integer\n");
exit (1); exit(6);
} }
calc_debug = cp; calc_debug = cp;
(void) strtol(cp, &endcp, 10); (void) strtol(cp, &endcp, 10);
@@ -280,7 +288,7 @@ main(int argc, char **argv)
fprintf(stderr, fprintf(stderr,
"Bad syntax im -D" "Bad syntax im -D"
" arg\n"); " arg\n");
exit (1); exit(7);
} }
if (*cp != ':') { if (*cp != ':') {
if (nextcp(&cp, &index, if (nextcp(&cp, &index,
@@ -295,14 +303,14 @@ main(int argc, char **argv)
fprintf(stderr, fprintf(stderr,
"-D : expects" "-D : expects"
" argument\n"); " argument\n");
exit (1); exit(8);
} }
if (*cp != ':') { if (*cp != ':') {
if (*cp < '0' || *cp > '9') { if (*cp < '0' || *cp > '9') {
fprintf(stderr, fprintf(stderr,
"-D : expects" "-D : expects"
" integer\n"); " integer\n");
exit (1); exit(9);
} }
resource_debug = cp; resource_debug = cp;
(void) strtol(cp, &endcp, 10); (void) strtol(cp, &endcp, 10);
@@ -312,7 +320,7 @@ main(int argc, char **argv)
fprintf(stderr, fprintf(stderr,
"Bad syntax im -D" "Bad syntax im -D"
" : arg\n"); " : arg\n");
exit (1); exit(10);
} }
if (*cp != ':') { if (*cp != ':') {
if (nextcp(&cp, &index, if (nextcp(&cp, &index,
@@ -327,12 +335,12 @@ main(int argc, char **argv)
FALSE)) { FALSE)) {
fprintf(stderr, "-D : : expects" fprintf(stderr, "-D : : expects"
" argument\n"); " argument\n");
exit (1); exit(11);
} }
if (*cp < '0' || *cp > '9') { if (*cp < '0' || *cp > '9') {
fprintf(stderr, "-D :: expects" fprintf(stderr, "-D :: expects"
" integer\n"); " integer\n");
exit (1); exit(12);
} }
user_debug = cp; user_debug = cp;
(void) strtol(cp, &endcp, 10); (void) strtol(cp, &endcp, 10);
@@ -340,7 +348,7 @@ main(int argc, char **argv)
if (*cp != '\0' && *cp != ' ') { if (*cp != '\0' && *cp != ' ') {
fprintf(stderr, "Bad syntax in" fprintf(stderr, "Bad syntax in"
" -D : : arg\n"); " -D : : arg\n");
exit (1); exit(13);
} }
break; break;
case 'f': case 'f':
@@ -349,13 +357,13 @@ main(int argc, char **argv)
haveendstr)) { haveendstr)) {
fprintf(stderr, "-f expects" fprintf(stderr, "-f expects"
" filename\n"); " filename\n");
exit (1); exit(14);
} }
if (*cp == ';') { if (*cp == ';') {
fprintf(stderr, fprintf(stderr,
"-f expects" "-f expects"
" filename\n"); " filename\n");
exit (1); exit(15);
} }
havearg = TRUE; havearg = TRUE;
if (cmdlen > 0) if (cmdlen > 0)
@@ -373,7 +381,7 @@ main(int argc, char **argv)
fprintf(stderr, "-f -once" fprintf(stderr, "-f -once"
" expects" " expects"
" filename\n"); " filename\n");
exit (1); exit(16);
} }
} }
bp = cmdbuf + cmdlen; bp = cmdbuf + cmdlen;
@@ -383,13 +391,13 @@ main(int argc, char **argv)
fprintf(stderr, fprintf(stderr,
"Null" "Null"
" filename!"); " filename!");
exit (1); exit(17);
} }
if (cmdlen + len + 2 > MAXCMD) { if (cmdlen + len + 2 > MAXCMD) {
fprintf(stderr, fprintf(stderr,
"Commands too" "Commands too"
" long"); " long");
exit (1); exit(18);
} }
/* XXX What if *cp = '\''? */ /* XXX What if *cp = '\''? */
*bp++ = '\''; *bp++ = '\'';
@@ -404,7 +412,7 @@ main(int argc, char **argv)
fprintf(stderr, fprintf(stderr,
"Commands" "Commands"
" too long"); " too long");
exit (1); exit(19);
} }
*bp++ = *cp++; *bp++ = *cp++;
cmdlen++; cmdlen++;
@@ -416,6 +424,7 @@ main(int argc, char **argv)
cp++; cp++;
*bp++ = ';'; *bp++ = ';';
cmdlen++; cmdlen++;
s_flag = TRUE; /* -f implies -s */
break; break;
case 's': case 's':
@@ -431,12 +440,14 @@ main(int argc, char **argv)
fprintf(stderr, "Illegal option -%c\n", fprintf(stderr, "Illegal option -%c\n",
c); c);
fprintf(stderr, fprintf(stderr,
"usage: %s [-a] [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]\n" "usage: %s [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]\n"
"\t[-D calc_debug[:resource_debug[:user_debug]]]\n" "\t[-D calc_debug[:resource_debug[:user_debug]]]\n"
"\t[-O] [-p] [-q] [-u] [-v] " "\t[-O] [-p] [-q] [-s] [-u] [-v] "
"[--] [calc_cmd ...]\n", "[--] [calc_cmd ...]\n"
program); "usage: %s ... -f filename\n"
exit(1); "1st cscript line: #/path/to/calc ... -f\n",
program, program);
exit(20);
} }
if (havearg) if (havearg)
break; break;
@@ -462,7 +473,7 @@ main(int argc, char **argv)
fprintf(stderr, fprintf(stderr,
"%s: commands too long\n", "%s: commands too long\n",
program); program);
exit(1); exit(21);
} }
strncpy(cmdbuf + cmdlen, cp, cplen+1); strncpy(cmdbuf + cmdlen, cp, cplen+1);
cmdlen = newcmdlen; cmdlen = newcmdlen;
@@ -533,14 +544,13 @@ main(int argc, char **argv)
/* /*
* establish error longjump point with initial conditions * establish error longjump point with initial conditions
*/ */
if (setjmp(jmpbuf) == 0) { if (setjmp(calc_scanerr_jmpbuf) == 0) {
/* /*
* reset/initialize the computing environment * reset/initialize the computing environment
*/ */
if (post_init) initialize();
initialize(); calc_use_scanerr_jmpbuf = 1;
post_init = TRUE;
} }
/* /*
@@ -710,12 +720,12 @@ main(int argc, char **argv)
* arg to keep ANSI C happy * arg to keep ANSI C happy
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
static void S_FUNC void
intint(int UNUSED arg) intint(int UNUSED arg)
{ {
(void) signal(SIGINT, intint); (void) signal(SIGINT, intint);
if (inputwait || (++abortlevel >= ABORT_NOW)) { if (inputwait || (++abortlevel >= ABORT_NOW)) {
math_error("\nABORT"); calc_interrupt("\nABORT");
/*NOTREACHED*/ /*NOTREACHED*/
} }
if (abortlevel >= ABORT_MATH) if (abortlevel >= ABORT_MATH)
@@ -725,14 +735,12 @@ intint(int UNUSED arg)
/* /*
* Routine called on any runtime error, to complain about it (with possible * report an interrupt
* arguments), and then longjump back to the top level command scanner.
*/ */
void static void
math_error(char *fmt, ...) calc_interrupt(char *fmt, ...)
{ {
va_list ap; va_list ap;
char buf[MAXERROR+1];
if (funcname && (*funcname != '*')) if (funcname && (*funcname != '*'))
fprintf(stderr, "\"%s\": ", funcname); fprintf(stderr, "\"%s\": ", funcname);
@@ -740,12 +748,13 @@ math_error(char *fmt, ...)
!inputisterminal())) !inputisterminal()))
fprintf(stderr, "line %ld: ", funcline); fprintf(stderr, "line %ld: ", funcline);
va_start(ap, fmt); va_start(ap, fmt);
vsprintf(buf, fmt, ap); vsnprintf(calc_err_msg, MAXERROR, fmt, ap);
va_end(ap); va_end(ap);
fprintf(stderr, "%s\n", buf); calc_err_msg[MAXERROR] = '\0';
fprintf(stderr, "%s\n\n", calc_err_msg);
funcname = NULL; funcname = NULL;
if (post_init) { if (calc_use_scanerr_jmpbuf != 0) {
longjmp(jmpbuf, 1); longjmp(calc_scanerr_jmpbuf, 22);
} else { } else {
fprintf(stderr, "It is too early provide a command line prompt " fprintf(stderr, "It is too early provide a command line prompt "
"so we must simply exit. Sorry!\n"); "so we must simply exit. Sorry!\n");
@@ -753,11 +762,11 @@ math_error(char *fmt, ...)
* don't call libcalc_call_me_last() -- we might loop * don't call libcalc_call_me_last() -- we might loop
* and besides ... this is an unusual internal error case * and besides ... this is an unusual internal error case
*/ */
exit(3); exit(22);
} }
} }
static int S_FUNC int
nextcp(char **cpp, int *ip, int argc, char **argv, BOOL haveendstr) nextcp(char **cpp, int *ip, int argc, char **argv, BOOL haveendstr)
{ {
char *cp; char *cp;
@@ -796,7 +805,7 @@ nextcp(char **cpp, int *ip, int argc, char **argv, BOOL haveendstr)
} }
static void S_FUNC void
set_run_state(run state) set_run_state(run state)
{ {
if (conf->calc_debug & CALCDBG_RUNSTATE) if (conf->calc_debug & CALCDBG_RUNSTATE)

239
calc.h
View File

@@ -1,7 +1,7 @@
/* /*
* calc - definitions for calculator program * calc - definitions for calculator program
* *
* Copyright (C) 1999-2006 David I. Bell * Copyright (C) 1999-2007 David I. Bell
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.18 $ * @(#) $Revision: 30.2 $
* @(#) $Id: calc.h,v 29.18 2006/05/21 07:28:54 chongo Exp $ * @(#) $Id: calc.h,v 30.2 2007/07/10 17:44:52 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
* *
* Under source code control: 1990/02/15 01:48:31 * Under source code control: 1990/02/15 01:48:31
@@ -33,11 +33,11 @@
#include <setjmp.h> #include <setjmp.h>
#if defined(CALC_SRC) /* if we are building from the calc source tree */ #if defined(CALC_SRC) /* if we are building from the calc source tree */
# include "win32dll.h" # include "decl.h"
# include "value.h" # include "value.h"
# include "have_const.h" # include "have_const.h"
#else #else
# include <calc/win32dll.h> # include <calc/decl.h>
# include <calc/value.h> # include <calc/value.h>
# include <calc/have_const.h> # include <calc/have_const.h>
#endif #endif
@@ -66,7 +66,6 @@
#define LISTCHAR ':' /* char which separates paths in a list */ #define LISTCHAR ':' /* char which separates paths in a list */
#endif #endif
#define MAXCMD 16384 /* maximum length of command invocation */ #define MAXCMD 16384 /* maximum length of command invocation */
#define MAXERROR 512 /* maximum length of error message string */
#define SYMBOLSIZE 256 /* maximum symbol name size */ #define SYMBOLSIZE 256 /* maximum symbol name size */
#define MAXLABELS 100 /* maximum number of user labels in function */ #define MAXLABELS 100 /* maximum number of user labels in function */
@@ -91,6 +90,7 @@
#define ABORT_NOW 4 /* abort right away */ #define ABORT_NOW 4 /* abort right away */
#define ERRMAX 20 /* default errmax value */ #define ERRMAX 20 /* default errmax value */
#define E_OK 0 /* no error */
/* /*
* File ids corresponding to standard in, out, error, and when not in use. * File ids corresponding to standard in, out, error, and when not in use.
@@ -103,141 +103,138 @@
/* /*
* File I/O routines. * File I/O routines.
*/ */
extern DLL FILEID openid(char *name, char *mode); E_FUNC FILEID openid(char *name, char *mode);
extern DLL FILEID openpathid(char *name, char *mode, char *pathlist); E_FUNC FILEID openpathid(char *name, char *mode, char *pathlist);
extern DLL FILEID indexid(long index); E_FUNC FILEID indexid(long index);
extern DLL BOOL validid(FILEID id); E_FUNC BOOL validid(FILEID id);
extern DLL BOOL errorid(FILEID id); E_FUNC BOOL errorid(FILEID id);
extern DLL BOOL eofid(FILEID id); E_FUNC BOOL eofid(FILEID id);
extern DLL int closeid(FILEID id); E_FUNC int closeid(FILEID id);
extern DLL int getcharid(FILEID id); E_FUNC int getcharid(FILEID id);
extern DLL int idprintf(FILEID id, char *fmt, int count, VALUE **vals); E_FUNC int idprintf(FILEID id, char *fmt, int count, VALUE **vals);
extern DLL int idfputc(FILEID id, int ch); E_FUNC int idfputc(FILEID id, int ch);
extern DLL int idfputs(FILEID id, char *str); E_FUNC int idfputs(FILEID id, STRING *str);
extern DLL int printid(FILEID id, int flags); E_FUNC int printid(FILEID id, int flags);
extern DLL int flushid(FILEID id); E_FUNC int flushid(FILEID id);
extern DLL int readid(FILEID id, int flags, char **retptr); E_FUNC int readid(FILEID id, int flags, STRING **retptr);
extern DLL int getloc(FILEID id, ZVALUE *loc); E_FUNC int getloc(FILEID id, ZVALUE *loc);
extern DLL int setloc(FILEID id, ZVALUE zpos); E_FUNC int setloc(FILEID id, ZVALUE zpos);
extern DLL int getsize(FILEID id, ZVALUE *size); E_FUNC int getsize(FILEID id, ZVALUE *size);
extern DLL int get_device(FILEID id, ZVALUE *dev); E_FUNC int get_device(FILEID id, ZVALUE *dev);
extern DLL int get_inode(FILEID id, ZVALUE *ino); E_FUNC int get_inode(FILEID id, ZVALUE *ino);
extern DLL FILEID reopenid(FILEID id, char *mode, char *name); E_FUNC FILEID reopenid(FILEID id, char *mode, char *name);
extern DLL int closeall(void); E_FUNC int closeall(void);
#if !defined(_WIN32) #if !defined(_WIN32)
extern DLL int flushall(void); E_FUNC int flushall(void);
#endif #endif
extern DLL int idfputstr(FILEID id, char *str); E_FUNC int idfputstr(FILEID id, char *str);
extern DLL int rewindid(FILEID id); E_FUNC int rewindid(FILEID id);
extern DLL void rewindall(void); E_FUNC void rewindall(void);
extern DLL ZVALUE zfilesize(FILEID id); E_FUNC ZVALUE zfilesize(FILEID id);
extern DLL void showfiles(void); E_FUNC void showfiles(void);
extern DLL int fscanfid(FILEID id, char *fmt, int count, VALUE **vals); E_FUNC int fscanfid(FILEID id, char *fmt, int count, VALUE **vals);
extern DLL int scanfstr(char *str, char *fmt, int count, VALUE **vals); E_FUNC int scanfstr(char *str, char *fmt, int count, VALUE **vals);
extern DLL int ftellid(FILEID id, ZVALUE *res); E_FUNC int ftellid(FILEID id, ZVALUE *res);
extern DLL int fseekid(FILEID id, ZVALUE offset, int whence); E_FUNC int fseekid(FILEID id, ZVALUE offset, int whence);
extern DLL int isattyid(FILEID id); E_FUNC int isattyid(FILEID id);
extern DLL int fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res); E_FUNC int fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res);
extern DLL int frsearch(FILEID id, char *str, ZVALUE first, ZVALUE last, ZVALUE *res); E_FUNC int frsearch(FILEID id, char *str, ZVALUE first, ZVALUE last, ZVALUE *res);
extern DLL void showconstants(void); E_FUNC void showconstants(void);
extern DLL void freeconstant(unsigned long); E_FUNC void freeconstant(unsigned long);
extern DLL void freestringconstant(long); E_FUNC void freestringconstant(long);
extern DLL void trimconstants(void); E_FUNC void trimconstants(void);
/* /*
* Input routines. * Input routines.
*/ */
extern DLL int openstring(char *str, size_t num); E_FUNC int openstring(char *str, size_t num);
extern DLL int openterminal(void); E_FUNC int openterminal(void);
extern DLL int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok); E_FUNC int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
extern DLL char *nextline(void); E_FUNC char *nextline(void);
extern DLL int nextchar(void); E_FUNC int nextchar(void);
extern DLL void reread(void); E_FUNC void reread(void);
extern DLL void resetinput(void); E_FUNC void resetinput(void);
extern DLL void setprompt(char *); E_FUNC void setprompt(char *);
extern DLL BOOL inputisterminal(void); E_FUNC BOOL inputisterminal(void);
extern DLL int inputlevel(void); E_FUNC int inputlevel(void);
extern DLL long calclevel(void); E_FUNC long calclevel(void);
extern DLL char *inputname(void); E_FUNC char *inputname(void);
extern DLL long linenumber(void); E_FUNC long linenumber(void);
extern DLL void runrcfiles(void); E_FUNC void runrcfiles(void);
extern DLL void closeinput(void); E_FUNC void closeinput(void);
/* /*
* Other routines. * Other routines.
*/ */
extern DLL NUMBER *constvalue(unsigned long index); E_FUNC NUMBER *constvalue(unsigned long index);
extern DLL long addnumber(char *str); E_FUNC long addnumber(char *str);
extern DLL long addqconstant(NUMBER *q); E_FUNC long addqconstant(NUMBER *q);
extern DLL void initstack(void); E_FUNC void initstack(void);
extern DLL void getcommands(BOOL toplevel); E_FUNC void getcommands(BOOL toplevel);
extern DLL void givehelp(char *type); E_FUNC void givehelp(char *type);
extern DLL void libcalc_call_me_first(void); E_FUNC void libcalc_call_me_first(void);
extern DLL void libcalc_call_me_last(void); E_FUNC void libcalc_call_me_last(void);
extern DLL BOOL calc_tty(int fd); E_FUNC BOOL calc_tty(int fd);
extern DLL BOOL orig_tty(int fd); E_FUNC BOOL orig_tty(int fd);
extern DLL void showerrors(void); E_FUNC void showerrors(void);
extern DLL char *calc_strdup(CONST char *); E_FUNC char *calc_strdup(CONST char *);
/* /*
* Initialization * Initialization
*/ */
extern DLL void initialize(void); E_FUNC void initialize(void);
extern DLL void reinitialize(void); E_FUNC void reinitialize(void);
#if !defined (_WIN32) #if !defined (_WIN32)
extern DLL int isatty(int tty); /* TRUE if fd is a tty */ E_FUNC int isatty(int tty); /* TRUE if fd is a tty */
#endif #endif
extern DLL char *version(void); /* return version string */ E_FUNC char *version(void); /* return version string */
extern DLL int post_init; /* TRUE => math_error setjmp is ready */
/* /*
* global flags and definitions * global flags and definitions
*/ */
extern DLL int abortlevel; /* current level of aborts */ EXTERN int abortlevel; /* current level of aborts */
extern DLL BOOL inputwait; /* TRUE if in a terminal input wait */ EXTERN BOOL inputwait; /* TRUE if in a terminal input wait */
extern DLL jmp_buf jmpbuf; /* for errors */
extern DLL int p_flag; /* TRUE => pipe mode */ EXTERN int p_flag; /* TRUE => pipe mode */
extern DLL int q_flag; /* TRUE => don't execute rc files */ EXTERN int q_flag; /* TRUE => don't execute rc files */
extern DLL int u_flag; /* TRUE => unbuffer stdin and stdout */ EXTERN int u_flag; /* TRUE => unbuffer stdin and stdout */
extern DLL int d_flag; /* TRUE => disable heading, resource_debug */ EXTERN int d_flag; /* TRUE => disable heading, resource_debug */
extern DLL int c_flag; /* TRUE => continue after error if permitted */ EXTERN int c_flag; /* TRUE => continue after error if permitted */
extern DLL int i_flag; /* TRUE => try to go interactive after error */ EXTERN int i_flag; /* TRUE => try to go interactive after error */
extern DLL int s_flag; /* TRUE => keep args as strings for argv() */ E_FUNC int s_flag; /* TRUE => keep args as strings for argv() */
extern DLL long stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */ EXTERN long stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
extern DLL BOOL abort_now; /* TRUE => try to go interactive */ EXTERN BOOL abort_now; /* TRUE => try to go interactive */
extern DLL int argc_value; /* count of argv[] strings for argv() builtin */ E_FUNC int argc_value; /* count of argv[] strings for argv() builtin */
extern DLL char **argv_value; /* argv[] strings for argv() builtin */ E_FUNC char **argv_value; /* argv[] strings for argv() builtin */
extern DLL char *pager; /* $PAGER or default */ EXTERN char *pager; /* $PAGER or default */
extern DLL int stdin_tty; /* TRUE if stdin is a tty */ EXTERN int stdin_tty; /* TRUE if stdin is a tty */
extern DLL int havecommands; /* TRUE if have cmd args) */ EXTERN int havecommands; /* TRUE if have cmd args) */
extern DLL char *program; /* our name */ EXTERN char *program; /* our name */
extern DLL char *base_name; /* basename of our name */ EXTERN char *base_name; /* basename of our name */
extern DLL char cmdbuf[]; /* command line expression */ EXTERN char cmdbuf[]; /* command line expression */
extern DLL int abortlevel; /* current level of aborts */ EXTERN int abortlevel; /* current level of aborts */
extern DLL BOOL inputwait; /* TRUE if in a terminal input wait */ EXTERN BOOL inputwait; /* TRUE if in a terminal input wait */
extern DLL VALUE *stack; /* execution stack */ EXTERN VALUE *stack; /* execution stack */
extern DLL int dumpnames; /* TRUE => dump names rather than indices */ EXTERN int dumpnames; /* TRUE => dump names rather than indices */
extern DLL char *calcpath; /* $CALCPATH or default */ EXTERN char *calcpath; /* $CALCPATH or default */
extern DLL char *calcrc; /* $CALCRC or default */ EXTERN char *calcrc; /* $CALCRC or default */
extern DLL char *calcbindings; /* $CALCBINDINGS or default */ EXTERN char *calcbindings; /* $CALCBINDINGS or default */
extern DLL char *home; /* $HOME or default */ EXTERN char *home; /* $HOME or default */
extern DLL char *shell; /* $SHELL or default */ EXTERN char *shell; /* $SHELL or default */
extern DLL char *program; /* our name (argv[0]) */
extern DLL int no_env; /* TRUE (-e) => ignore env vars on startup */ EXTERN int no_env; /* TRUE (-e) => ignore env vars on startup */
extern DLL long errmax; /* if >= 0, error when errcount exceeds errmax */ EXTERN long errmax; /* if >= 0, error when errcount exceeds errmax */
extern DLL int use_old_std; /* TRUE (-O) => use classic configuration */ EXTERN int use_old_std; /* TRUE (-O) => use classic configuration */
extern DLL int allow_read; /* FALSE => dont open any files for reading */ EXTERN int allow_read; /* FALSE => dont open any files for reading */
extern DLL int allow_write; /* FALSE => dont open any files for writing */ EXTERN int allow_write; /* FALSE => dont open any files for writing */
extern DLL int allow_exec; /* FALSE => may not execute any commands */ EXTERN int allow_exec; /* FALSE => may not execute any commands */
/* /*
* calc startup and run state * calc startup and run state
@@ -253,19 +250,19 @@ typedef enum {
RUN_EXIT, /* normal exit from calc */ RUN_EXIT, /* normal exit from calc */
RUN_EXIT_WITH_ERROR /* exit with error */ RUN_EXIT_WITH_ERROR /* exit with error */
} run; } run;
extern DLL run run_state; EXTERN run run_state;
extern DLL char *run_state_name(run state); E_FUNC char *run_state_name(run state);
/* /*
* calc version information * calc version information
*/ */
#define CALC_TITLE "C-style arbitrary precision calculator" #define CALC_TITLE "C-style arbitrary precision calculator"
extern int calc_major_ver; EXTERN int calc_major_ver;
extern int calc_minor_ver; EXTERN int calc_minor_ver;
extern int calc_major_patch; EXTERN int calc_major_patch;
extern int calc_minor_patch; EXTERN int calc_minor_patch;
extern char *Copyright; EXTERN char *Copyright;
extern DLL char *version(void); E_FUNC char *version(void);
#endif /* !__CALC_H__ */ #endif /* !__CALC_H__ */

View File

@@ -1,5 +1,5 @@
.\" .\"
.\" Copyright (C) 1999-2004 Landon Curt Noll .\" Copyright (C) 1999-2007 Landon Curt Noll
.\" .\"
.\" Calc is open software; you can redistribute it and/or modify it under .\" Calc is open software; you can redistribute it and/or modify it under
.\" the terms of the version 2.1 of the GNU Lesser General Public License .\" the terms of the version 2.1 of the GNU Lesser General Public License
@@ -13,10 +13,10 @@
.\" A copy of version 2.1 of the GNU Lesser General Public License is .\" A copy of version 2.1 of the GNU Lesser General Public License is
.\" distributed with calc under the filename COPYING-LGPL. You should have .\" distributed with calc under the filename COPYING-LGPL. You should have
.\" received a copy with calc; if not, write to Free Software Foundation, Inc. .\" received a copy with calc; if not, write to Free Software Foundation, Inc.
.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. .\" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
.\" .\"
.\" @(#) $Revision: 29.20 $ .\" @(#) $Revision: 30.3 $
.\" @(#) $Id: calc.man,v 29.20 2006/06/01 12:04:16 chongo Exp $ .\" @(#) $Id: calc.man,v 30.3 2007/09/08 02:53:09 chongo Exp $
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $ .\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
.\" .\"
.\" Under source code control: 1991/07/23 05:48:26 .\" Under source code control: 1991/07/23 05:48:26
@@ -28,7 +28,7 @@
.\" calculator by David I. Bell .\" calculator by David I. Bell
.\" man page by Landon Noll .\" man page by Landon Noll
.\" .\"
.TH calc 1 "^..^" "1999-11-30" .TH calc 1 "^..^" "2007-02-06"
.SH NAME .SH NAME
calc \- arbitrary precision calculator calc \- arbitrary precision calculator
.SH SYNOPSIS .SH SYNOPSIS
@@ -63,7 +63,7 @@ CALC OPTIONS
.TP .TP
.B \-c .B \-c
Continue reading command lines even after an scan/parse Continue reading command lines even after a scan/parse
error has caused the abandonment of a line. error has caused the abandonment of a line.
Note that this option only deals with scanning and Note that this option only deals with scanning and
parsing of the calc language. parsing of the calc language.
@@ -225,7 +225,7 @@ filename
.sp 1 .sp 1
On systems that treat an executable that begins with On systems that treat an executable that begins with
.B #! .B #!
as a script, the path of the execurable is appended by the kernel as a script, the path of the executable is appended by the kernel
as the final argument to the exec() system call. as the final argument to the exec() system call.
This is why the This is why the
.B \-f .B \-f
@@ -275,18 +275,14 @@ See
.TP .TP
.B \-i .B \-i
Become interactive if possible. Become interactive if possible.
If
.I calc_cmd
args are given,
.B calc
by default, calc will execute them and exit.
This flag causes
.B calc
to drop into interactive mode after the commands are executed.
This flag will cause This flag will cause
.B calc .B calc
to drop into interactive mode after the to drop into interactive mode after the
commands are executed. .I calc_cmd
arguments on the command line are evaluated.
Without this flag,
.B calc
will exit after they are evaluated.
.sp 1 .sp 1
For example: For example:
.sp 1 .sp 1
@@ -706,7 +702,7 @@ the rest of the file will be processed in
.BR "shell script mode" . .BR "shell script mode" .
Note that Note that
.B \-f .B \-f
must at the end of the intiial ``#!'' line. must at the end of the initial ``#!'' line.
Any other optional Any other optional
.B "other_flags" .B "other_flags"
must come before must come before
@@ -1078,9 +1074,9 @@ If you do not have these files, write to:
.in +0.5i .in +0.5i
.nf .nf
Free Software Foundation, Inc. Free Software Foundation, Inc.
59 Temple Place 51 Franklin Street
Suite 330 Fifth Floor
Boston, MA 02111-1307 Boston, MA 02110-1301
USA USA
.fi .fi
.in -0.5i .in -0.5i

View File

@@ -2,7 +2,7 @@
# #
# calc.spec.in - template specfile for calc # calc.spec.in - template specfile for calc
# #
# Copyright (C) 2003-2005 Petteri Kettunen and Landon Curt Noll # Copyright (C) 2003-2007 Petteri Kettunen and Landon Curt Noll
# #
# Calc is open software; you can redistribute it and/or modify it under # Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License # the terms of the version 2.1 of the GNU Lesser General Public License
@@ -16,10 +16,10 @@
# A copy of version 2.1 of the GNU Lesser General Public License is # A copy of version 2.1 of the GNU Lesser General Public License is
# distributed with calc under the filename COPYING-LGPL. You should have # distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# #
# @(#) $Revision: 29.15 $ # @(#) $Revision: 30.6 $
# @(#) $Id: calc.spec.in,v 29.15 2006/05/21 06:26:00 chongo Exp $ # @(#) $Id: calc.spec.in,v 30.6 2007/10/16 12:22:22 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.spec.in,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.spec.in,v $
# #
# Under source code control: 2003/02/16 20:21:39 # Under source code control: 2003/02/16 20:21:39
@@ -37,10 +37,10 @@
Summary: Arbitrary precision calculator. Summary: Arbitrary precision calculator.
Name: calc Name: calc
Version: <<<PROJECT_VERSION>>> Version: <<<PROJECT_VERSION>>>
Release: 0 Release: 1.1
Copyright: LGPL License: LGPL
Group: Applications/Engineering Group: Applications/Engineering
Source: %{name}-%{version}.tar.gz Source: %{name}-%{version}.tar.bz2
URL: http://www.isthe.com/chongo/tech/comp/calc/index.html URL: http://www.isthe.com/chongo/tech/comp/calc/index.html
Requires: ncurses >= 5.2-26, readline >= 4.2, less >= 358 Requires: ncurses >= 5.2-26, readline >= 4.2, less >= 358
BuildRequires: ncurses-devel >= 5.2-26, readline-devel >= 4.2 BuildRequires: ncurses-devel >= 5.2-26, readline-devel >= 4.2
@@ -73,12 +73,40 @@ For the latest calc release, see the project home page:
%setup -q %setup -q
%build %build
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 all chk echo '-=- calc.spec beginning make clobber -=-'
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ clobber
echo '-=- calc.spec ending make clobber -=-'
echo '-=- calc.spec beginning make calc-static-only -=-'
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ calc-static-only BLD_TYPE=calc-static-only
echo '-=- calc.spec ending make calc-static-only -=-'
echo '-=- calc.spec beginning make rpm-hide-static -=-'
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ rpm-hide-static
echo '-=- calc.spec ending make rpm-hide-static -=-'
echo '-=- calc.spec beginning make clobber (again) -=-'
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ clobber
echo '-=- calc.spec ending make clobber (again) -=-'
echo '-=- calc.spec beginning make calc-dynamic-only -=-'
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ calc-dynamic-only BLD_TYPE=calc-dynamic-only LD_SHARE=
echo '-=- calc.spec ending make calc-dynamic-only -=-'
echo '-=- calc.spec beginning make chk -=-'
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ chk
echo '-=- calc.spec ending make chk -=-'
echo '-=- calc.spec beginning make rpm-unhide-static -=-'
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ rpm-unhide-static
echo '-=- calc.spec ending make rpm-unhide-static -=-'
echo '-=- calc.spec beginning make rpm-clean-static -=-'
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ rpm-clean-static
echo '-=- calc.spec ending make rpm-clean-static -=-'
echo '-=- calc.spec beginning make rpm-chk-static -=-'
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ rpm-chk-static
echo '-=- calc.spec ending make rpm-chk-static -=-'
%install %install
rm -rf %{buildroot} rm -rf %{buildroot}
mkdir -p %{buildroot} mkdir -p %{buildroot}
make T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 install echo '-=- calc.spec beginning make install -=-'
make T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 EXT= V=@ install
echo '-=- calc.spec ending make install -=-'
%clean %clean
rm -rf %{buildroot} rm -rf %{buildroot}
@@ -86,21 +114,33 @@ rm -rf %{buildroot}
%files %files
%defattr(-, root, root) %defattr(-, root, root)
%doc BUGS CHANGES COPYING COPYING-LGPL %doc BUGS CHANGES COPYING COPYING-LGPL
%{_bindir}/* %attr(755, root, root) %{_bindir}/calc
%{_mandir}/man1/* %attr(755, root, root) %{_bindir}/cscript/*
%{_datadir}/%{name}/*/* %attr(644, root, root) %{_mandir}/man1/calc.1.gz
%{_datadir}/%{name}/bindings %attr(644, root, root) %{_datadir}/%{name}/README
%{_datadir}/%{name}/README %attr(644, root, root) %{_datadir}/%{name}/bindings
%{_datadir}/%{name}/*.cal %attr(644, root, root) %{_datadir}/%{name}/custhelp/*
%{_datadir}/%{name}/*.line %attr(644, root, root) %{_datadir}/%{name}/custom/*.cal
%attr(644, root, root) %{_datadir}/%{name}/help/*
%attr(644, root, root) %{_datadir}/%{name}/*.cal
%attr(644, root, root) %{_datadir}/%{name}/*.line
%attr(644, root, root) %{_libdir}/libcalc.so.%{version}
%attr(644, root, root) %{_libdir}/libcustcalc.so.%{version}
%files devel %files devel
%defattr(-, root, root) %defattr(-, root, root)
%doc BUGS COPYING COPYING-LGPL LIBRARY %doc BUGS COPYING COPYING-LGPL LIBRARY
%attr(755, root, root) %{_bindir}/calc-static
%attr(644, root, root) %{_includedir}/calc/* %attr(644, root, root) %{_includedir}/calc/*
%attr(644, root, root) %{_libdir}/*.a %attr(644, root, root) %{_libdir}/libcalc.a
%attr(644, root, root) %{_libdir}/libcustcalc.a
%changelog %changelog
* Sun Sep 01 2007 Landon Curt Noll http://www.isthe.com/chongo
- Release of calc-2.12.2
- Calc builds with shared libraries
* Sun Jun 25 2006 Landon Curt Noll http://www.isthe.com/chongo
- Changed Copyright to License as per new rpm v4.4 syntax
* Sun May 20 2006 Landon Curt Noll http://www.isthe.com/chongo * Sun May 20 2006 Landon Curt Noll http://www.isthe.com/chongo
- Release of calc-2.12.0 - Release of calc-2.12.0
- Added *.line set files to the list of packaged files - Added *.line set files to the list of packaged files

View File

@@ -15,10 +15,10 @@
# A copy of version 2.1 of the GNU Lesser General Public License is # A copy of version 2.1 of the GNU Lesser General Public License is
# distributed with calc under the filename COPYING-LGPL. You should have # distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# #
# @(#) $Revision: 29.9 $ # @(#) $Revision: 30.1 $
# @(#) $Id: calcerr.tbl,v 29.9 2006/06/25 20:33:26 chongo Exp $ # @(#) $Id: calcerr.tbl,v 30.1 2007/03/16 11:09:46 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
# #
# Under source code control: 1996/05/23 17:38:44 # Under source code control: 1996/05/23 17:38:44
@@ -445,3 +445,7 @@ E_FPATHOPEN1 Non-string arguments for fpathopen
E_FPATHOPEN2 Unrecognized mode for fpathopen E_FPATHOPEN2 Unrecognized mode for fpathopen
E_LOG1 Bad epsilon argument for log E_LOG1 Bad epsilon argument for log
E_LOG2 Non-numeric first argument for log E_LOG2 Non-numeric first argument for log
E_FGETFILE1 Non-file argument for fgetfile
E_FGETFILE2 File argument for fgetfile not open for reading
E_FGETFILE3 Unable to set file position in fgetfile
E_ESTR Non-representable type for estr

View File

@@ -16,10 +16,10 @@
# A copy of version 2.1 of the GNU Lesser General Public License is # A copy of version 2.1 of the GNU Lesser General Public License is
# distributed with calc under the filename COPYING-LGPL. You should have # distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# #
# @(#) $Revision: 29.2 $ # @(#) $Revision: 30.1 $
# @(#) $Id: calcerr_c.awk,v 29.2 2000/06/07 14:02:13 chongo Exp $ # @(#) $Id: calcerr_c.awk,v 30.1 2007/03/16 11:09:46 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_c.awk,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_c.awk,v $
# #
# Under source code control: 1996/05/24 03:15:35 # Under source code control: 1996/05/24 03:15:35

View File

@@ -16,10 +16,10 @@
# A copy of version 2.1 of the GNU Lesser General Public License is # A copy of version 2.1 of the GNU Lesser General Public License is
# distributed with calc under the filename COPYING-LGPL. You should have # distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# #
# @(#) $Revision: 29.2 $ # @(#) $Revision: 30.1 $
# @(#) $Id: calcerr_c.sed,v 29.2 2000/06/07 14:02:13 chongo Exp $ # @(#) $Id: calcerr_c.sed,v 30.1 2007/03/16 11:09:46 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_c.sed,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_c.sed,v $
# #
# Under source code control: 1996/05/24 03:15:35 # Under source code control: 1996/05/24 03:15:35

View File

@@ -16,10 +16,10 @@
# A copy of version 2.1 of the GNU Lesser General Public License is # A copy of version 2.1 of the GNU Lesser General Public License is
# distributed with calc under the filename COPYING-LGPL. You should have # distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# #
# @(#) $Revision: 29.2 $ # @(#) $Revision: 30.1 $
# @(#) $Id: calcerr_h.awk,v 29.2 2000/06/07 14:02:13 chongo Exp $ # @(#) $Id: calcerr_h.awk,v 30.1 2007/03/16 11:09:46 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_h.awk,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_h.awk,v $
# #
# Under source code control: 1996/05/23 17:38:44 # Under source code control: 1996/05/23 17:38:44

View File

@@ -16,10 +16,10 @@
# A copy of version 2.1 of the GNU Lesser General Public License is # A copy of version 2.1 of the GNU Lesser General Public License is
# distributed with calc under the filename COPYING-LGPL. You should have # distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# #
# @(#) $Revision: 29.2 $ # @(#) $Revision: 30.1 $
# @(#) $Id: calcerr_h.sed,v 29.2 2000/06/07 14:02:13 chongo Exp $ # @(#) $Id: calcerr_h.sed,v 30.1 2007/03/16 11:09:46 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_h.sed,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_h.sed,v $
# #
# Under source code control: 1996/05/23 17:38:44 # Under source code control: 1996/05/23 17:38:44

View File

@@ -16,10 +16,10 @@
# A copy of version 2.1 of the GNU Lesser General Public License is # A copy of version 2.1 of the GNU Lesser General Public License is
# distributed with calc under the filename COPYING-LGPL. You should have # distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# #
# @(#) $Revision: 29.3 $ # @(#) $Revision: 30.1 $
# @(#) $Id: check.awk,v 29.3 2006/05/20 19:43:39 chongo Exp $ # @(#) $Id: check.awk,v 30.1 2007/03/16 11:09:46 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $
# #
# Under source code control: 1996/05/25 22:07:58 # Under source code control: 1996/05/25 22:07:58
@@ -64,7 +64,7 @@ NF == 0 {
end_seen = 1; end_seen = 1;
} }
$1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ { $1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ || $1 ~ /^"\)\)$/ {
if (error > 0) { if (error > 0) {
if (havebuf2) { if (havebuf2) {
print buf2; print buf2;

120
cmath.h
View File

@@ -1,7 +1,7 @@
/* /*
* cmath - data structures for extended precision complex arithmetic * cmath - data structures for extended precision complex arithmetic
* *
* Copyright (C) 1999 David I. Bell * Copyright (C) 1999-2007 David I. Bell
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -15,10 +15,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.7 $ * @(#) $Revision: 30.1 $
* @(#) $Id: cmath.h,v 29.7 2005/10/18 10:43:49 chongo Exp $ * @(#) $Id: cmath.h,v 30.1 2007/03/16 11:09:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/cmath.h,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/cmath.h,v $
* *
* Under source code control: 1993/07/30 19:42:45 * Under source code control: 1993/07/30 19:42:45
@@ -52,84 +52,84 @@ typedef struct {
/* /*
* Input, output, and conversion routines. * Input, output, and conversion routines.
*/ */
extern COMPLEX *comalloc(void); E_FUNC COMPLEX *comalloc(void);
extern COMPLEX *qqtoc(NUMBER *q1, NUMBER *q2); E_FUNC COMPLEX *qqtoc(NUMBER *q1, NUMBER *q2);
extern void comfree(COMPLEX *c); E_FUNC void comfree(COMPLEX *c);
extern void comprint(COMPLEX *c); E_FUNC void comprint(COMPLEX *c);
extern void cprintfr(COMPLEX *c); E_FUNC void cprintfr(COMPLEX *c);
/* /*
* Basic numeric routines. * Basic numeric routines.
*/ */
extern COMPLEX *c_add(COMPLEX *c1, COMPLEX *c2); E_FUNC COMPLEX *c_add(COMPLEX *c1, COMPLEX *c2);
extern COMPLEX *c_sub(COMPLEX *c1, COMPLEX *c2); E_FUNC COMPLEX *c_sub(COMPLEX *c1, COMPLEX *c2);
extern COMPLEX *c_mul(COMPLEX *c1, COMPLEX *c2); E_FUNC COMPLEX *c_mul(COMPLEX *c1, COMPLEX *c2);
extern COMPLEX *c_div(COMPLEX *c1, COMPLEX *c2); E_FUNC COMPLEX *c_div(COMPLEX *c1, COMPLEX *c2);
extern COMPLEX *c_addq(COMPLEX *c, NUMBER *q); E_FUNC COMPLEX *c_addq(COMPLEX *c, NUMBER *q);
extern COMPLEX *c_subq(COMPLEX *c, NUMBER *q); E_FUNC COMPLEX *c_subq(COMPLEX *c, NUMBER *q);
extern COMPLEX *c_mulq(COMPLEX *c, NUMBER *q); E_FUNC COMPLEX *c_mulq(COMPLEX *c, NUMBER *q);
extern COMPLEX *c_divq(COMPLEX *c, NUMBER *q); E_FUNC COMPLEX *c_divq(COMPLEX *c, NUMBER *q);
extern COMPLEX *c_scale(COMPLEX *c, long i); E_FUNC COMPLEX *c_scale(COMPLEX *c, long i);
extern COMPLEX *c_shift(COMPLEX *c, long i); E_FUNC COMPLEX *c_shift(COMPLEX *c, long i);
extern COMPLEX *c_square(COMPLEX *c); E_FUNC COMPLEX *c_square(COMPLEX *c);
extern COMPLEX *c_conj(COMPLEX *c); E_FUNC COMPLEX *c_conj(COMPLEX *c);
extern COMPLEX *c_real(COMPLEX *c); E_FUNC COMPLEX *c_real(COMPLEX *c);
extern COMPLEX *c_imag(COMPLEX *c); E_FUNC COMPLEX *c_imag(COMPLEX *c);
extern COMPLEX *c_neg(COMPLEX *c); E_FUNC COMPLEX *c_neg(COMPLEX *c);
extern COMPLEX *c_inv(COMPLEX *c); E_FUNC COMPLEX *c_inv(COMPLEX *c);
extern COMPLEX *c_int(COMPLEX *c); E_FUNC COMPLEX *c_int(COMPLEX *c);
extern COMPLEX *c_frac(COMPLEX *c); E_FUNC COMPLEX *c_frac(COMPLEX *c);
extern BOOL c_cmp(COMPLEX *c1, COMPLEX *c2); E_FUNC BOOL c_cmp(COMPLEX *c1, COMPLEX *c2);
/* /*
* More complicated functions. * More complicated functions.
*/ */
extern COMPLEX *c_powi(COMPLEX *c, NUMBER *q); E_FUNC COMPLEX *c_powi(COMPLEX *c, NUMBER *q);
extern NUMBER *c_ilog(COMPLEX *c, ZVALUE base); E_FUNC NUMBER *c_ilog(COMPLEX *c, ZVALUE base);
/* /*
* Transcendental routines. These all take an epsilon argument to * Transcendental routines. These all take an epsilon argument to
* specify how accurately these are to be calculated. * specify how accurately these are to be calculated.
*/ */
extern COMPLEX *c_power(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon); E_FUNC COMPLEX *c_power(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon);
extern COMPLEX *c_sqrt(COMPLEX *c, NUMBER *epsilon, long R); E_FUNC COMPLEX *c_sqrt(COMPLEX *c, NUMBER *epsilon, long R);
extern COMPLEX *c_root(COMPLEX *c, NUMBER *q, NUMBER *epsilon); E_FUNC COMPLEX *c_root(COMPLEX *c, NUMBER *q, NUMBER *epsilon);
extern COMPLEX *c_exp(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_exp(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_ln(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_ln(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_log(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_log(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_cos(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_cos(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_sin(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_sin(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_cosh(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_cosh(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_sinh(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_sinh(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_polar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon); E_FUNC COMPLEX *c_polar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon);
extern COMPLEX *c_rel(COMPLEX *c1, COMPLEX *c2); E_FUNC COMPLEX *c_rel(COMPLEX *c1, COMPLEX *c2);
extern COMPLEX *c_asin(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_asin(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_acos(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_acos(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_atan(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_atan(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_acot(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_acot(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_asec(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_asec(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_acsc(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_acsc(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_asinh(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_asinh(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_acosh(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_acosh(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_atanh(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_atanh(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_acoth(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_acoth(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_asech(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_asech(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_acsch(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_acsch(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_gd(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_gd(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_agd(COMPLEX *c, NUMBER *epsilon); E_FUNC COMPLEX *c_agd(COMPLEX *c, NUMBER *epsilon);
/* /*
* external functions * external functions
*/ */
extern COMPLEX *swap_b8_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all); E_FUNC COMPLEX *swap_b8_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all);
extern COMPLEX *swap_b16_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all); E_FUNC COMPLEX *swap_b16_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all);
extern COMPLEX *swap_HALF_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all); E_FUNC COMPLEX *swap_HALF_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all);
/* /*
@@ -153,7 +153,7 @@ extern COMPLEX *swap_HALF_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all);
/* /*
* Pre-defined values. * Pre-defined values.
*/ */
extern COMPLEX _czero_, _cone_, _conei_; EXTERN COMPLEX _czero_, _cone_, _conei_;
#endif /* !__CMATH_H__ */ #endif /* !__CMATH_H__ */

205
codegen.c
View File

@@ -1,7 +1,7 @@
/* /*
* codegen - module to generate opcodes from the input tokens * codegen - module to generate opcodes from the input tokens
* *
* Copyright (C) 1999-2006 David I. Bell and Ernest Bowen * Copyright (C) 1999-2007 David I. Bell and Ernest Bowen
* *
* Primary author: David I. Bell * Primary author: David I. Bell
* *
@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.21 $ * @(#) $Revision: 30.2 $
* @(#) $Id: codegen.c,v 29.21 2006/06/20 10:28:06 chongo Exp $ * @(#) $Id: codegen.c,v 30.2 2007/07/05 13:30:38 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $
* *
* Under source code control: 1990/02/15 01:48:13 * Under source code control: 1990/02/15 01:48:13
@@ -36,12 +36,13 @@
#include <unistd.h> #include <unistd.h>
#endif #endif
#include "lib_calc.h"
#include "calc.h" #include "calc.h"
#include "token.h" #include "token.h"
#include "symbol.h" #include "symbol.h"
#include "label.h" #include "label.h"
#include "opcodes.h" #include "opcodes.h"
#include "string.h" #include "str.h"
#include "func.h" #include "func.h"
#include "conf.h" #include "conf.h"
@@ -49,61 +50,61 @@
# include <direct.h> # include <direct.h>
#endif #endif
static BOOL rdonce; /* TRUE => do not reread this file */ STATIC BOOL rdonce; /* TRUE => do not reread this file */
FUNC *curfunc; FUNC *curfunc;
static int getsymvalue(char *name, VALUE *v_p); S_FUNC int getsymvalue(char *name, VALUE *v_p);
static int getfilename(char *name, size_t namelen, BOOL *once); S_FUNC int getfilename(char *name, size_t namelen, BOOL *once);
static BOOL getid(char *buf); S_FUNC BOOL getid(char *buf);
static void getshowstatement(void); S_FUNC void getshowstatement(void);
static void getfunction(void); S_FUNC void getfunction(void);
static void ungetfunction(void); S_FUNC void ungetfunction(void);
static void getbody(LABEL *contlabel, LABEL *breaklabel, S_FUNC void getbody(LABEL *contlabel, LABEL *breaklabel,
LABEL *nextcaselabel, LABEL *defaultlabel); LABEL *nextcaselabel, LABEL *defaultlabel);
static int getdeclarations(int symtype); S_FUNC int getdeclarations(int symtype);
static int getsimpledeclaration (int symtype); S_FUNC int getsimpledeclaration (int symtype);
static int getonevariable (int symtype); S_FUNC int getonevariable (int symtype);
static void getstatement(LABEL *contlabel, LABEL *breaklabel, S_FUNC void getstatement(LABEL *contlabel, LABEL *breaklabel,
LABEL *nextcaselabel, LABEL *defaultlabel); LABEL *nextcaselabel, LABEL *defaultlabel);
static void getobjdeclaration(int symtype); S_FUNC void getobjdeclaration(int symtype);
static void getoneobj(long index, int symtype); S_FUNC void getoneobj(long index, int symtype);
static void getobjvars(char *name, int symtype); S_FUNC void getobjvars(char *name, int symtype);
static void getmatdeclaration(int symtype); S_FUNC void getmatdeclaration(int symtype);
static void getonematrix(int symtype); S_FUNC void getonematrix(int symtype);
static void creatematrix(void); S_FUNC void creatematrix(void);
static void getsimplebody(void); S_FUNC void getsimplebody(void);
static void getcondition(void); S_FUNC void getcondition(void);
static void getmatargs(void); S_FUNC void getmatargs(void);
static void getelement(void); S_FUNC void getelement(void);
static void usesymbol(char *name, int autodef); S_FUNC void usesymbol(char *name, int autodef);
static void definesymbol(char *name, int symtype); S_FUNC void definesymbol(char *name, int symtype);
static void getcallargs(char *name); S_FUNC void getcallargs(char *name);
static void do_changedir(void); S_FUNC void do_changedir(void);
static int getexprlist(void); S_FUNC int getexprlist(void);
static int getopassignment(void); S_FUNC int getopassignment(void);
static int getassignment(void); S_FUNC int getassignment(void);
static int getaltcond(void); S_FUNC int getaltcond(void);
static int getorcond(void); S_FUNC int getorcond(void);
static int getandcond(void); S_FUNC int getandcond(void);
static int getrelation(void); S_FUNC int getrelation(void);
static int getsum(void); S_FUNC int getsum(void);
static int getproduct(void); S_FUNC int getproduct(void);
static int getorexpr(void); S_FUNC int getorexpr(void);
static int getandexpr(void); S_FUNC int getandexpr(void);
static int getshiftexpr(void); S_FUNC int getshiftexpr(void);
static int getreference(void); S_FUNC int getreference(void);
static int getincdecexpr(void); S_FUNC int getincdecexpr(void);
static int getterm(void); S_FUNC int getterm(void);
static int getidexpr(BOOL okmat, int autodef); S_FUNC int getidexpr(BOOL okmat, int autodef);
static long getinitlist(void); S_FUNC long getinitlist(void);
#define INDICALLOC 8 #define INDICALLOC 8
static int quickindices[INDICALLOC]; STATIC int quickindices[INDICALLOC];
static int * newindices; STATIC int * newindices;
static int * indices; STATIC int * indices;
static int maxindices; STATIC int maxindices;
/* /*
@@ -144,6 +145,7 @@ getcommands(BOOL toplevel)
case T_HELP: case T_HELP:
for (i=1;;i++) { for (i=1;;i++) {
switch(getfilename(name, MAXCMD+1, NULL)) { switch(getfilename(name, MAXCMD+1, NULL)) {
case 1:
case -1: case -1:
if(i == 1) { if(i == 1) {
strcpy(name, DEFAULTCALCHELP); strcpy(name, DEFAULTCALCHELP);
@@ -226,7 +228,14 @@ getcommands(BOOL toplevel)
run_state = RUN_EXIT; run_state = RUN_EXIT;
else if (run_state < RUN_PRE_TOP_LEVEL) else if (run_state < RUN_PRE_TOP_LEVEL)
run_state = RUN_PRE_TOP_LEVEL; run_state = RUN_PRE_TOP_LEVEL;
longjmp(jmpbuf, 1); if (calc_use_scanerr_jmpbuf != 0) {
longjmp(calc_scanerr_jmpbuf, 30);
} else {
fprintf(stderr,
"calc_scanerr_jmpbuf not setup, exiting code 30\n");
libcalc_call_me_last();
exit(30);
}
} }
} }
} }
@@ -288,7 +297,7 @@ evaluate(BOOL nestflag)
/* /*
* Undefine one or more functions * Undefine one or more functions
*/ */
static void S_FUNC void
ungetfunction(void) ungetfunction(void)
{ {
char *name; char *name;
@@ -339,7 +348,7 @@ ungetfunction(void)
* func = name '(' '' | name [ ',' name] ... ')' simplebody * func = name '(' '' | name [ ',' name] ... ')' simplebody
* | name '(' '' | name [ ',' name] ... ')' body. * | name '(' '' | name [ ',' name] ... ')' body.
*/ */
static void S_FUNC void
getfunction(void) getfunction(void)
{ {
char *name; /* parameter name */ char *name; /* parameter name */
@@ -428,7 +437,7 @@ getfunction(void)
* Get a simple assignment style body for a function declaration. * Get a simple assignment style body for a function declaration.
* simplebody = '=' assignment '\n'. * simplebody = '=' assignment '\n'.
*/ */
static void S_FUNC void
getsimplebody(void) getsimplebody(void)
{ {
(void) tokenmode(TM_NEWLINES); (void) tokenmode(TM_NEWLINES);
@@ -443,7 +452,7 @@ getsimplebody(void)
* | [ declarations ] ... [statement ] ... '\n' * | [ declarations ] ... [statement ] ... '\n'
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
static void S_FUNC void
getbody(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *defaultlabel) getbody(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *defaultlabel)
{ {
int oldmode; int oldmode;
@@ -473,7 +482,7 @@ getbody(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *defaul
* declarations = { LOCAL | GLOBAL | STATIC } onedeclaration * declarations = { LOCAL | GLOBAL | STATIC } onedeclaration
* [ ',' onedeclaration ] ... ';'. * [ ',' onedeclaration ] ... ';'.
*/ */
static int S_FUNC int
getdeclarations(int symtype) getdeclarations(int symtype)
{ {
int res = 0; int res = 0;
@@ -525,7 +534,7 @@ getdeclarations(int symtype)
* Subsequences end with "," or at end of line; spaces indicate * Subsequences end with "," or at end of line; spaces indicate
* repeated assignment, e.g. "c d = 2" has the effect of "c = 2, d = 2". * repeated assignment, e.g. "c d = 2" has the effect of "c = 2, d = 2".
*/ */
static int S_FUNC int
getsimpledeclaration(int symtype) getsimpledeclaration(int symtype)
{ {
int res = 0; int res = 0;
@@ -553,9 +562,9 @@ getsimpledeclaration(int symtype)
* Get one variable in a sequence of simple identifiers. * Get one variable in a sequence of simple identifiers.
* Returns 1 if the subsequence in which the variable occurs ends with * Returns 1 if the subsequence in which the variable occurs ends with
* an assignment, e.g. for the variables b, c, d, in * an assignment, e.g. for the variables b, c, d, in
* static a, b = 1, c d = 2, d; * S_FUNC a, b = 1, c d = 2, d;
*/ */
static int S_FUNC int
getonevariable(int symtype) getonevariable(int symtype)
{ {
char *name; char *name;
@@ -607,7 +616,7 @@ getonevariable(int symtype)
* nextcaselabel label for next case statement * nextcaselabel label for next case statement
* defaultlabel label for default case * defaultlabel label for default case
*/ */
static void S_FUNC void
getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *defaultlabel) getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *defaultlabel)
{ {
LABEL label; LABEL label;
@@ -1058,7 +1067,7 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
* is an OBJ statement, otherwise this is part of a declaration which will * is an OBJ statement, otherwise this is part of a declaration which will
* define new symbols with the specified type. * define new symbols with the specified type.
*/ */
static void S_FUNC void
getobjdeclaration(int symtype) getobjdeclaration(int symtype)
{ {
char *name; /* name of object type */ char *name; /* name of object type */
@@ -1164,7 +1173,7 @@ getobjdeclaration(int symtype)
} }
static void S_FUNC void
getoneobj(long index, int symtype) getoneobj(long index, int symtype)
{ {
char *symname; char *symname;
@@ -1191,7 +1200,7 @@ getoneobj(long index, int symtype)
/* /*
* Routine to assign a specified object-type value to each of a set of * Routine to assign a specified object-type value to each of a set of
* variables in a "global", "local" or "static" declaration, or, if * variables in a "global", "local" or "S_FUNC" declaration, or, if
* symtype is SYM_UNDEFINED, to create one object value of the specified * symtype is SYM_UNDEFINED, to create one object value of the specified
* type. * type.
* *
@@ -1199,7 +1208,7 @@ getoneobj(long index, int symtype)
* name object name * name object name
* symtype declaration type * symtype declaration type
*/ */
static void S_FUNC void
getobjvars(char *name, int symtype) getobjvars(char *name, int symtype)
{ {
long index; /* index for object */ long index; /* index for object */
@@ -1223,7 +1232,7 @@ getobjvars(char *name, int symtype)
} }
static void S_FUNC void
getmatdeclaration(int symtype) getmatdeclaration(int symtype)
{ {
for (;;) { for (;;) {
@@ -1243,7 +1252,7 @@ getmatdeclaration(int symtype)
} }
static void S_FUNC void
getonematrix(int symtype) getonematrix(int symtype)
{ {
long dim; long dim;
@@ -1339,7 +1348,7 @@ getonematrix(int symtype)
} }
static void S_FUNC void
creatematrix(void) creatematrix(void)
{ {
long dim; long dim;
@@ -1361,7 +1370,7 @@ creatematrix(void)
rescantoken(); rescantoken();
if (++dim > MAXDIM) { if (++dim > MAXDIM) {
scanerror(T_SEMICOLON, scanerror(T_SEMICOLON,
"Only %ld dimensions allowed", MAXDIM); "Only %d dimensions allowed", MAXDIM);
return; return;
} }
(void) getopassignment(); (void) getopassignment();
@@ -1397,7 +1406,7 @@ creatematrix(void)
* Returns the number of elements that are in the list, or -1 on parse error. * Returns the number of elements that are in the list, or -1 on parse error.
* initlist = { assignment [ , assignment ] ... }. * initlist = { assignment [ , assignment ] ... }.
*/ */
static long S_FUNC long
getinitlist(void) getinitlist(void)
{ {
long index; long index;
@@ -1453,7 +1462,7 @@ getinitlist(void)
* Get a condition. * Get a condition.
* condition = '(' assignment ')'. * condition = '(' assignment ')'.
*/ */
static void S_FUNC void
getcondition(void) getcondition(void)
{ {
if (gettoken() != T_LEFTPAREN) { if (gettoken() != T_LEFTPAREN) {
@@ -1477,7 +1486,7 @@ getcondition(void)
* Returns flags describing the type of the last assignment or expression found. * Returns flags describing the type of the last assignment or expression found.
* exprlist = assignment [ ',' assignment ] ... * exprlist = assignment [ ',' assignment ] ...
*/ */
static int S_FUNC int
getexprlist(void) getexprlist(void)
{ {
int type; int type;
@@ -1510,7 +1519,7 @@ getexprlist(void)
* | lvalue '**=' assignment * | lvalue '**=' assignment
* | orcond. * | orcond.
*/ */
static int S_FUNC int
getopassignment(void) getopassignment(void)
{ {
int type; /* type of expression */ int type; /* type of expression */
@@ -1586,7 +1595,7 @@ getopassignment(void)
* Get an assignment (lvalue = ...) or possibly just an expression * Get an assignment (lvalue = ...) or possibly just an expression
*/ */
static int S_FUNC int
getassignment (void) getassignment (void)
{ {
int type; /* type of expression */ int type; /* type of expression */
@@ -1656,7 +1665,7 @@ getassignment (void)
* Flags are returned indicating the type of expression found. * Flags are returned indicating the type of expression found.
* altcond = orcond [ '?' orcond ':' altcond ]. * altcond = orcond [ '?' orcond ':' altcond ].
*/ */
static int S_FUNC int
getaltcond(void) getaltcond(void)
{ {
int type; /* type of expression */ int type; /* type of expression */
@@ -1690,7 +1699,7 @@ getaltcond(void)
* Flags are returned indicating the type of expression found. * Flags are returned indicating the type of expression found.
* orcond = andcond [ '||' andcond ] ... * orcond = andcond [ '||' andcond ] ...
*/ */
static int S_FUNC int
getorcond(void) getorcond(void)
{ {
int type; /* type of expression */ int type; /* type of expression */
@@ -1714,7 +1723,7 @@ getorcond(void)
* Flags are returned indicating the type of expression found. * Flags are returned indicating the type of expression found.
* andcond = relation [ '&&' relation ] ... * andcond = relation [ '&&' relation ] ...
*/ */
static int S_FUNC int
getandcond(void) getandcond(void)
{ {
int type; /* type of expression */ int type; /* type of expression */
@@ -1744,7 +1753,7 @@ getandcond(void)
* | sum '>' sum * | sum '>' sum
* | sum. * | sum.
*/ */
static int S_FUNC int
getrelation(void) getrelation(void)
{ {
int type; /* type of expression */ int type; /* type of expression */
@@ -1775,7 +1784,7 @@ getrelation(void)
* Flags indicating the type of expression found are returned. * Flags indicating the type of expression found are returned.
* sum = product [ {'+' | '-'} product ] ... * sum = product [ {'+' | '-'} product ] ...
*/ */
static int S_FUNC int
getsum(void) getsum(void)
{ {
int type; /* type of expression found */ int type; /* type of expression found */
@@ -1818,7 +1827,7 @@ getsum(void)
* Flags indicating the type of expression found are returned. * Flags indicating the type of expression found are returned.
* product = orexpr [ {'*' | '/' | '//' | '%'} orexpr ] ... * product = orexpr [ {'*' | '/' | '//' | '%'} orexpr ] ...
*/ */
static int S_FUNC int
getproduct(void) getproduct(void)
{ {
int type; /* type of value found */ int type; /* type of value found */
@@ -1849,7 +1858,7 @@ getproduct(void)
* Flags indicating the type of expression found are returned. * Flags indicating the type of expression found are returned.
* orexpr = andexpr [ '|' andexpr ] ... * orexpr = andexpr [ '|' andexpr ] ...
*/ */
static int S_FUNC int
getorexpr(void) getorexpr(void)
{ {
int type; /* type of value found */ int type; /* type of value found */
@@ -1872,7 +1881,7 @@ getorexpr(void)
* Flags indicating the type of expression found are returned. * Flags indicating the type of expression found are returned.
* andexpr = shiftexpr [ '&' shiftexpr ] ... * andexpr = shiftexpr [ '&' shiftexpr ] ...
*/ */
static int S_FUNC int
getandexpr(void) getandexpr(void)
{ {
int type; /* type of value found */ int type; /* type of value found */
@@ -1911,7 +1920,7 @@ getandexpr(void)
* | reference '>>' shiftexpr * | reference '>>' shiftexpr
* | reference. * | reference.
*/ */
static int S_FUNC int
getshiftexpr(void) getshiftexpr(void)
{ {
int type; /* type of value found */ int type; /* type of value found */
@@ -1955,7 +1964,7 @@ getshiftexpr(void)
* address = '&' term * address = '&' term
* dereference = '*' term * dereference = '*' term
*/ */
static int S_FUNC int
getreference(void) getreference(void)
{ {
int type; int type;
@@ -1992,7 +2001,7 @@ getreference(void)
* get an increment or decrement expression * get an increment or decrement expression
* ++expr, --expr, expr++, expr-- * ++expr, --expr, expr++, expr--
*/ */
static int S_FUNC int
getincdecexpr(void) getincdecexpr(void)
{ {
int type; int type;
@@ -2050,7 +2059,7 @@ getincdecexpr(void)
* | function [ '(' [assignment [',' assignment] ] ')' ] * | function [ '(' [assignment [',' assignment] ] ')' ]
* | '!' term * | '!' term
*/ */
static int S_FUNC int
getterm(void) getterm(void)
{ {
int type; /* type of term found */ int type; /* type of term found */
@@ -2210,7 +2219,7 @@ getterm(void)
* element references. 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. * Returns the type of expression found.
*/ */
static int S_FUNC int
getidexpr(BOOL okmat, int autodef) getidexpr(BOOL okmat, int autodef)
{ {
int type; int type;
@@ -2285,7 +2294,7 @@ getidexpr(BOOL okmat, int autodef)
* to get the value of a symbol. It should NOT be used in the * to get the value of a symbol. It should NOT be used in the
* general op code generation / calc code parsing case. * general op code generation / calc code parsing case.
*/ */
static int S_FUNC int
getsymvalue(char *name, VALUE *v_p) getsymvalue(char *name, VALUE *v_p)
{ {
GLOBAL *g_ret; /* global return from findglobal() */ GLOBAL *g_ret; /* global return from findglobal() */
@@ -2318,7 +2327,7 @@ getsymvalue(char *name, VALUE *v_p)
* namelen length of filename buffer including NUL byte * namelen length of filename buffer including NUL byte
* once non-NULL => set to TRUE of -once read * once non-NULL => set to TRUE of -once read
*/ */
static int S_FUNC int
getfilename(char *name, size_t namelen, BOOL *once) getfilename(char *name, size_t namelen, BOOL *once)
{ {
STRING *s; STRING *s;
@@ -2400,7 +2409,7 @@ getfilename(char *name, size_t namelen, BOOL *once)
/* /*
* Read the show command to display useful information * Read the show command to display useful information
*/ */
static void S_FUNC void
getshowstatement(void) getshowstatement(void)
{ {
char name[5]; char name[5];
@@ -2471,7 +2480,7 @@ getshowstatement(void)
* Read in a set of matrix index arguments, surrounded with square brackets. * Read in a set of matrix index arguments, surrounded with square brackets.
* This also handles double square brackets for 'fast indexing'. * This also handles double square brackets for 'fast indexing'.
*/ */
static void S_FUNC void
getmatargs(void) getmatargs(void)
{ {
int dim; int dim;
@@ -2533,7 +2542,7 @@ getmatargs(void)
* Get an element of an object reference. * Get an element of an object reference.
* The leading period which introduces the element has already been read. * The leading period which introduces the element has already been read.
*/ */
static void S_FUNC void
getelement(void) getelement(void)
{ {
long index; long index;
@@ -2554,7 +2563,7 @@ getelement(void)
* Read in a single symbol name and copy its value into the given buffer. * Read in a single symbol name and copy its value into the given buffer.
* Returns TRUE if a valid symbol id was found. * Returns TRUE if a valid symbol id was found.
*/ */
static BOOL S_FUNC BOOL
getid(char *buf) getid(char *buf)
{ {
int type; int type;
@@ -2586,7 +2595,7 @@ getid(char *buf)
* redeclared and when in the same body the variable will be accessible only * redeclared and when in the same body the variable will be accessible only
^ with the appropriate specfier. ^ with the appropriate specfier.
*/ */
static void S_FUNC void
definesymbol(char *name, int symtype) definesymbol(char *name, int symtype)
{ {
switch (symboltype(name)) { switch (symboltype(name)) {
@@ -2649,7 +2658,7 @@ definesymbol(char *name, int symtype)
* autodef 1 => define if symbol is not known * autodef 1 => define if symbol is not known
* T_GLOBAL => get global, define if necessary * T_GLOBAL => get global, define if necessary
*/ */
static void S_FUNC void
usesymbol(char *name, int autodef) usesymbol(char *name, int autodef)
{ {
int type; int type;
@@ -2706,7 +2715,7 @@ usesymbol(char *name, int autodef)
* given: * given:
* name name of function * name name of function
*/ */
static void S_FUNC void
getcallargs(char *name) getcallargs(char *name)
{ {
long index; /* function index */ long index; /* function index */
@@ -2775,7 +2784,7 @@ getcallargs(char *name)
/* /*
* Change the current directory. If no directory is given, assume home. * Change the current directory. If no directory is given, assume home.
*/ */
static void S_FUNC void
do_changedir(void) do_changedir(void)
{ {
char *p; char *p;

View File

@@ -1,7 +1,7 @@
/* /*
* comfunc - extended precision complex arithmetic non-primitive routines * comfunc - extended precision complex arithmetic non-primitive routines
* *
* Copyright (C) 1999 David I. Bell and Ernest Bowen * Copyright (C) 1999-2007 David I. Bell and Ernest Bowen
* *
* Primary author: David I. Bell * Primary author: David I. Bell
* *
@@ -17,10 +17,10 @@
* A copy of version 2.1 of the GNU Lesser General Public License is * A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have * distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* *
* @(#) $Revision: 29.6 $ * @(#) $Revision: 30.3 $
* @(#) $Id: comfunc.c,v 29.6 2006/05/20 08:43:55 chongo Exp $ * @(#) $Id: comfunc.c,v 30.3 2008/10/24 07:09:41 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/comfunc.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/comfunc.c,v $
* *
* Under source code control: 1990/02/15 01:48:13 * Under source code control: 1990/02/15 01:48:13
@@ -36,10 +36,10 @@
/* /*
* cache the natural logarithm of 10 * cache the natural logarithm of 10
*/ */
static COMPLEX *cln_10 = NULL; STATIC COMPLEX *cln_10 = NULL;
static NUMBER *cln_10_epsilon = NULL; STATIC NUMBER *cln_10_epsilon = NULL;
static NUMBER _q10_ = { { _tenval_, 1, 0 }, { _oneval_, 1, 0 }, 1, NULL }; STATIC NUMBER _q10_ = { { _tenval_, 1, 0 }, { _oneval_, 1, 0 }, 1, NULL };
static NUMBER _q0_ = { { _zeroval_, 1, 0 }, { _oneval_, 1, 0 }, 1, NULL }; STATIC NUMBER _q0_ = { { _zeroval_, 1, 0 }, { _oneval_, 1, 0 }, 1, NULL };
COMPLEX _cten_ = { &_q10_, &_q0_, 1 }; COMPLEX _cten_ = { &_q10_, &_q0_, 1 };
@@ -556,7 +556,7 @@ c_log(COMPLEX *c, NUMBER *epsilon)
if (cln_10_epsilon == NULL) { if (cln_10_epsilon == NULL) {
/* first time call */ /* first time call */
cln_10_epsilon = qcopy(epsilon); cln_10_epsilon = qcopy(epsilon);
} else if (qcmp(cln_10_epsilon, epsilon) == FALSE) { } else if (qcmp(cln_10_epsilon, epsilon) == TRUE) {
/* replaced cacheed value with epsilon arg */ /* replaced cacheed value with epsilon arg */
qfree(cln_10_epsilon); qfree(cln_10_epsilon);
cln_10_epsilon = qcopy(epsilon); cln_10_epsilon = qcopy(epsilon);
@@ -1117,8 +1117,8 @@ c_power(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon)
/*NOTREACHED*/ /*NOTREACHED*/
} }
if (ciszero(c1)) { if (ciszero(c1)) {
if (qisneg(c2->real) || qiszero(c2->real)) { if (cisreal(c2) && qisneg(c2->real)) {
math_error ("Non-positive exponent of zero"); math_error ("Non-positive real exponent of zero");
/*NOTREACHED*/ /*NOTREACHED*/
} }
return clink(&_czero_); return clink(&_czero_);

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