Release calc version 2.11.0t3

This commit is contained in:
Landon Curt Noll
1999-09-28 02:19:47 -07:00
parent 4b98d5ff0e
commit 1ce630ac19
18 changed files with 267 additions and 250 deletions

156
BUGS
View File

@@ -1,8 +1,8 @@
If you notice something wrong, strange or broken, try rereading: If you notice something wrong, strange or broken, try rereading:
README.FIRST README.FIRST
README HOWTO.INSTALL
BUGS (in particular the bottom problems or mis-features section) BUGS (this file)
If that does not help, cd to the calc source directory and try: If that does not help, cd to the calc source directory and try:
@@ -18,13 +18,13 @@ If it does not, then something is really broken!
If you made and modifications to calc beyond the simple Makefile If you made and modifications to calc beyond the simple Makefile
configuration, try backing them out and see if things get better. configuration, try backing them out and see if things get better.
Check to see if the version of calc you are using is current. Calc To be sure that your version of calc is up to date, check out:
distributions may be obtained from the official calc repository:
ftp://ftp.uu.net/pub/calc http://reality.sgi.com/chongo/calc/calc-download.html
If you are an alpha or beta tester, you may have a special pre-released The calc web site is located at:
version that is more advanced than what is in the ftp archive.
http://reality.sgi.com/chongo/calc
=-= =-=
@@ -46,6 +46,8 @@ When you send your report, please include the following information:
* the type of compiler you were using * the type of compiler you were using
* any compiler warnings or erros that you saw
* cd to the calc source directory, and type: * cd to the calc source directory, and type:
make debug > debug.out 2>&1 (sh, ksh, bash users) make debug > debug.out 2>&1 (sh, ksh, bash users)
@@ -57,22 +59,8 @@ Stack traces from core dumps are useful to send as well.
=-= =-=
The official calc repository is located in: Send any comments, compiler warning messages, suggestions and most
importantly, fixes (in the form of a context diff patch) to:
ftp://ftp.uu.net/pub/calc
If you don't have ftp access to that site, or if your version is more
recent than what has been released to the ftp archive, you may, as a
last resort, send EMail to:
chongo@toad.com
Indicate the version you have and that you would like a more up to date version.
=-=
Send any comments, suggestions and most importantly, fixes (in the form
of a context diff patch) to:
calc-tester@postofc.corp.sgi.com calc-tester@postofc.corp.sgi.com
@@ -118,103 +106,45 @@ Known problems or mis-features:
8 getcommands(toplevel = 536864560) ["codegen.c":122, 0x1200284dc] 8 getcommands(toplevel = 536864560) ["codegen.c":122, 0x1200284dc]
9 main() ["calc.c":279, 0x12001f61c] 9 main() ["calc.c":279, 0x12001f61c]
However On 25-Sep-99 9:18, Ernest Bowen wrote: Michel van der List reports that he was using the Dec compiler.
Last night I downloaded 2.11.0t1 and without changing Makefile However On 25-Sep-99 9:18, Ernest Bowen wrote:
or anything else did a make and make check. Absolutely no
reported errors or warnings and the check "passed all tests".
The machine I'm using is a Dec 20 alpha running Digitial
UNIX V4.0B (Rev 564).
Any ideas on how to reconcile these different results? Last night I downloaded 2.11.0t1 and without changing Makefile
or anything else did a make and make check. Absolutely no
reported errors or warnings and the check "passed all tests".
The machine I'm using is a Dec 20 alpha running Digitial
UNIX V4.0B (Rev 564).
* On Sun SPARCstation running Solaris 2.5.1 compiling with Ernest Bowen was using gcc.
cc version 4.0 with -Xc option 'make check' fails on the hash
functions. However when compiled with gcc everything seems to
work just fine.
From: "Dr.D.J.Picton" <dave@aps5.ph.bham.ac.uk> We definitely want to hunt down this Dec's cc compiler issue. It
Date: Fri, 8 May 1998 10:54:43 +0100 could very well be that gcc is letting something slide where as
Dec's cc compiler is compiling it faithfully into core dumping code.
The fault could very well be the calc code and not the compiler.
Platform: Sun SPARCstation Any more information on calc core dumps compiled with Dec's cc compiler
would be most appreciated!
Operating system: Solaris 2.5.1 * To compile calc using the Solaris cc, the -Xc flag is required.
Unfortunately this change results in the loss of 'long long' and
the resulting code runs slower.
Compiler: cc version 4.0 with -Xc option. Dr.D.J.Picton <dave@aps5.ph.bham.ac.uk> reports that -Xc is
required for at compiling zrand.c.
The code compiled OK but the sha() and sha1() functions give errors with * Calc compiled with Solaris cc -Xc results in some test failures:
make check. These functions clearly are broken. For example,
sha(sha()) gives
0xea19f96cdd568ad1084a17acc6103d92c0ef7708 not CALCPATH=./lib ./calc -i -q read regress 2>&1 | nawk -f check.awk
0xf96cea198ad1dd5617ac084a3d92c6107708c0ef **** Non-true result (0): 7120: sha(sha(isqrt(2e1000)==0x6db8d9cf0b018b8f9cbbf5aa1edb8066d19e1bb0
**** Non-true result (0): 7122: sha(sha("this is", 7^19-8, ..., "hash")) == 0x21e4...
**** Non-true result (0): 7124: sha(z) == 0x36dcca3e51865c30a2cf738023cda446f1368340
**** Non-true result (0): 7209: sha1(sha1("this is",7^19-8,"a composit",3i+4.5,"hash")) == ...
**** Non-true result (0): 7211: sha1(z) == 0xc19e7317675dbf71e293b4c41e117169e9da5b6f
**** Non-true result (0): 7227: sha1(sha1(isqrt(2e1000)))==0x6852a1365c51050c3d039e3c5d9cf29c12283ef4
**** Non-true result (0): 7310: md5(md5("this is", 7^19-8, "a composit", 3i+4.5, "hash")) == ...
**** Non-true result (0): 7312: md5(z) == 0x63d2b2fccae2de265227c30b05abb6b5
**** Non-true result (0): 7328: md5(md5(isqrt(2e1000))) == 0xe56ac4b8cad869e738a04fedc97058f3
Interestingly, the consistency checks work OK e.g. **** 9 error(s) found \/++\/
>B = blk() = {"a", "b", "c"}; 9999: Ending regression tests
>sha(B) == sha("abc");
1
**** Non-true result (0): 7108: sha(sha()) ==
0xf96cea198ad1dd5617ac084a3d92c6107708c0ef
**** Non-true result (0): 7109:
sha(sha("a"))==0x37f297772fae4cb1ba39b6cf9cf0381180bd62f2
**** Non-true result (0): 7110:
sha(sha("ab"))==0x488373d362684af3d3f7a6a408b59dfe85419e09
**** Non-true result (0): 7111:
sha(sha("abc"))==0x0164b8a914cd2a5e74c4f7ff082c4d97f1edf880
**** Non-true result (0): 7112:
sha(sha("abcd"))==0x082c73b06f71185d840fb4b28eb3abade67714bc
**** Non-true result (0): 7113:
sha(sha("abcde"))==0xd624e34951bb800f0acae773001df8cffe781ba8
**** Non-true result (0): 7114:
sha(sha("abcdef"))==0x2a589f7750598dc0ea0a608719e04327f609279a
**** Non-true result (0): 7115:
sha(sha("abcdefg"))==0x5bdf01f9298e9d19d3f8d15520fd74eed600b497
**** Non-true result (0): 7116:
sha(sha("abcdefgh"))==0x734ba8b31975d0dbae4d6e249f4e8da270796c94
**** Non-true result (0): 7117: sha(sha(1)) ==
0x864c8d09e828c7c31d62693736a5a9302c282777
**** Non-true result (0): 7118: sha(sha(2)) ==
0x2c0b59c512cb20fad6bb0883b69c9f5a46545808
**** Non-true result (0): 7119:
sha(sha(22/7)==0x7ddb7f8a7e9d70757f157744fddea7a6c6a6bcc6
**** Non-true result (0): 7120:
sha(sha(isqrt(2e1000)==0x6db8d9cf0b018b8f9cbbf5aa1edb8066d19e1bb0
7121: sha("x", "y", "z") == sha("xyz")
**** Non-true result (0): 7122: sha(sha("this is", 7^19-8, ..., "hash")) ==
0x21e4...
7123: z = sha(list(1,2,3), "curds and whey", 2^21701-1, pi());
**** Non-true result (0): 7124: sha(z) ==
0x36dcca3e51865c30a2cf738023cda446f1368340
**** Non-true result (0): 7207: sha1(sha1()) ==
0xda39a3ee5e6b4b0d3255bfef95601890afd80709
7208: sha1("x", "y", "z") == sha1("xyz")
**** Non-true result (0): 7209: sha1(sha1("this is",7^19-8,"a
composit",3i+4.5,"hash")) == ...
7210: z = sha1(list(1,2,3), "curds and whey", 2^21701-1, pi());
**** Non-true result (0): 7211: sha1(z) ==
0xc19e7317675dbf71e293b4c41e117169e9da5b6f
**** Non-true result (0): 7217:
sha1(sha1("a"))==0x86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
**** Non-true result (0): 7218:
sha1(sha1("ab"))==0xda23614e02469a0d7c7bd1bdab5c9c474b1904dc
**** Non-true result (0): 7219:
sha1(sha1("abc"))==0xa9993e364706816aba3e25717850c26c9cd0d89d
**** Non-true result (0): 7220:
sha1(sha1("abcd"))==0x81fe8bfe87576c3ecb22426f8e57847382917acf
**** Non-true result (0): 7221:
sha1(sha1("abcde"))==0x03de6c570bfe24bfc328ccd7ca46b76eadaf4334
**** Non-true result (0): 7222:
sha1(sha1("abcdef"))==0x1f8ac10f23c5b5bc1167bda84b833e5c057a77d2
**** Non-true result (0): 7223:
sha1(sha1("abcdefg"))==0x2fb5e13419fc89246865e7a324f476ec624e8740
**** Non-true result (0): 7224:
sha1(sha1("abcdefgh"))==0x425af12a0743502b322e93a015bcf868e324d56a
**** Non-true result (0): 7225:
sha1(sha1(1))==0x53dd4e1734ad47d45e41c23e4ce42d7f1f98c1e8
**** Non-true result (0): 7226:
sha1(sha1(22/7))==0xf8e2510f85f7b9bf088b321188e9f70620f44246
**** Non-true result (0): 7227:
sha1(sha1(isqrt(2e1000)))==0x6852a1365c51050c3d039e3c5d9cf29c12283ef4

24
CHANGES
View File

@@ -8,8 +8,6 @@ Following is the change from calc version 2.11.0t1 to date:
whereas most of calc uses 8 character indentation. These imported whereas most of calc uses 8 character indentation. These imported
sources have been changed to conform better with the calc style. sources have been changed to conform better with the calc style.
Fixed misc compile warnings.
Added the program calc_errno.c and the Makefile symbol ERRNO_DECL. Added the program calc_errno.c and the Makefile symbol ERRNO_DECL.
If ERRNO_DECL is empty, calc_errno.c will try various ways to If ERRNO_DECL is empty, calc_errno.c will try various ways to
declare errno, sys_errlist and sys_nerr. On success or when declare errno, sys_errlist and sys_nerr. On success or when
@@ -21,6 +19,28 @@ Following is the change from calc version 2.11.0t1 to date:
The func.c file now includes the constructed header file calc_errno.h The func.c file now includes the constructed header file calc_errno.h
to ensure that errno, sys_errlist and sys_nerr are declared correctly. to ensure that errno, sys_errlist and sys_nerr are declared correctly.
Changed check.awk to be more 'old awk' friendly.
Made some of the source a little more ++ friendly. We are NOT
porting calc to C++! We will NOT support C++ compilation of calc.
Calc will written ANSI C. We just compiled with a suggestion from
Love-Jensen, John <jlove-jensen@globalmt.com> to make calc's version
of C a little more to C++ compilers. Avoiding symbols such as new
or try for example.
Thanks to the efforts of Ernest Bowen <ernie@neumann.une.edu.au> and
Dr.D.J.Picton <dave@aps5.ph.bham.ac.uk>, a nasty endian-ness bug
in the sha and sha1 hash functions that showed up on machines such
as the Sparc was fixed.
Updated README.FIRST and BUGS to reflect new URLs and addresses.
Added a HOWTO.INSTALL file.
Reordered cc Makefile variable sets in the main Makefile.
Fixed misc compile warnings and notices.
Following is the change from calc version 2.10.3t5.38 to 2.11.0t0: Following is the change from calc version 2.10.3t5.38 to 2.11.0t0:

53
HOWTO.INSTALL Normal file
View File

@@ -0,0 +1,53 @@
Installing calc in 4 easy steps:
1) Look at the makefile, and adjust it to suit your needs.
Here are some Makefile hints:
Select a compiler set by commenting in the appropriate
set of cc options. As shipped the Makefile assumes
a gcc-like environment such as Linux.
If a more appropriate cc set if found below, comment
out the Linux set and comment in that set or edit
the gcc set or the common cc set as needed.
You may or may not need RANLIB when building libraries.
As shipped the Makefile assumes RANLIB is needed.
Comment the in/out the RANLIB value if ranlib does
not work or does not exist.
You may want to change the default pager used by calc.
As shipped the Makefile assumes 'more'. On your system
you may find 'less' to be a better pager.
The CALCBINDINGS is matter of personal taste. As shipped
the Makefile assumes a default quasi-emacs-like command
line editor. Changing CALCBINDINGS= altbind will cause ^D
to end calc in a fashion similar to that of the bc(1) command.
Set TOPDIR to be the place under which help files, calc,
include files and calc libs are to be installed. As shipped
the Makefile assumes a TOPDIR of /usr/local/lib.
Set BINDIR to the place where calc is installed. As shipped
the Makefile assumes a BINDIR /usr/local/bin.
Adjust other Makefile variables as needed.
2) build calc:
make all
==> We are interested in any compiler warnings (and errors) that
you may find. See the BUGS file if you find any.
3) test calc:
make check
==> If you run into problems, follow the instructions in the BUGS file
4) install calc:
make install

View File

@@ -314,7 +314,8 @@ CATEXT= 1
# The cat page is not built or installed # The cat page is not built or installed
# #
# If in doubt and you don't want to fool with man pages, set MANDIR # If in doubt and you don't want to fool with man pages, set MANDIR
# and CATDIR to empty and ignore the lines below. # and CATDIR to empty and ignore the NROFF, NROFF_ARG and MANMAKE
# lines below.
# #
NROFF= nroff NROFF= nroff
#NROFF= #NROFF=
@@ -526,9 +527,37 @@ ALLOW_CUSTOM= -DCUSTOM
# #
### ###
# #
# common cc set # Linux set
# #
#CCWARN= # Tested on Red Hat 6.0 Linux but should run on almost any Linux release.
#
# for better performance, set the following above:
# DEBUG= -O2
#
CCWARN= -Wall -Wno-implicit -Wno-comment
CCOPT= ${DEBUG} ${NO_SHARED}
CCMISC=
#
CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
ICFLAGS= ${CCWARN} ${CCMISC}
#
CCMAIN= ${ICFLAGS}
CCSHS= ${CFLAGS}
#
LCFLAGS=
LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
ILDFLAGS=
#
CC= ${PURIFY} gcc
#
###
#
# gcc set (some call it gcc2, some call it gcc)
#
# for better performance, set the following above:
# DEBUG= -O2
#
#CCWARN= -Wall -Wno-implicit -Wno-comment
#CCOPT= ${DEBUG} ${NO_SHARED} #CCOPT= ${DEBUG} ${NO_SHARED}
#CCMISC= #CCMISC=
# #
@@ -542,26 +571,16 @@ ALLOW_CUSTOM= -DCUSTOM
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED} #LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
#ILDFLAGS= #ILDFLAGS=
# #
#CC= ${PURIFY} cc #CC= ${PURIFY} gcc
#CC= ${PURIFY} gcc2
# #
### ###
# #
# SGI IRIX5.3 (or earlier) -o32 C Compiler # common cc set
# #
# You must set above: #CCWARN=
# RANLIB=:
# LONGLONG_BITS= 0
#
# for better performance, set the following above:
# DEBUG= -O2 -g3
#
# If you have the directory /usr/lib/nonshared, then set the following above:
# NO_SHARED= -non_shared
# LD_NO_SHARED= -Wl,-rdata_shared
#
#CCWARN= -fullwarn -woff 835
#CCOPT= ${DEBUG} ${NO_SHARED} #CCOPT= ${DEBUG} ${NO_SHARED}
#CCMISC= -use_readonly_const #CCMISC=
# #
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC} #CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
#ICFLAGS= ${CCWARN} ${CCMISC} #ICFLAGS= ${CCWARN} ${CCMISC}
@@ -678,30 +697,7 @@ ALLOW_CUSTOM= -DCUSTOM
# #
### ###
# #
# Red Hat Linux 6.0 and BSDI's BSD/OS 4.0 (or later) set # BSDI's BSD/OS 4.0 (or later) set
#
# for better performance, set the following above:
# DEBUG= -O2
#
CCWARN= -Wall -Wno-implicit -Wno-comment
CCOPT= ${DEBUG} ${NO_SHARED}
CCMISC=
#
CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
ICFLAGS= ${CCWARN} ${CCMISC}
#
CCMAIN= ${ICFLAGS}
CCSHS= ${CFLAGS}
#
LCFLAGS=
LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
ILDFLAGS=
#
CC= ${PURIFY} gcc
#
###
#
# gcc set (some call it gcc2, some call it gcc)
# #
# for better performance, set the following above: # for better performance, set the following above:
# DEBUG= -O2 # DEBUG= -O2
@@ -721,7 +717,6 @@ CC= ${PURIFY} gcc
#ILDFLAGS= #ILDFLAGS=
# #
#CC= ${PURIFY} gcc #CC= ${PURIFY} gcc
#CC= ${PURIFY} gcc2
############################################################################## ##############################################################################
#-=-=-=-=-=-=-=-=- Be careful if you change something below -=-=-=-=-=-=-=-=-# #-=-=-=-=-=-=-=-=- Be careful if you change something below -=-=-=-=-=-=-=-=-#
@@ -920,7 +915,7 @@ C_SRC= ${LIBSRC} ${CALCSRC} ${UTIL_C_SRC}
# These files are found (but not built) in the distribution # These files are found (but not built) in the distribution
# #
DISTLIST= ${C_SRC} ${H_SRC} ${MAKE_FILE} BUGS CHANGES LIBRARY README \ DISTLIST= ${C_SRC} ${H_SRC} ${MAKE_FILE} BUGS CHANGES LIBRARY README \
calc.man lint.sed README.FIRST ${UTIL_MISC_SRC} calc.man lint.sed README.FIRST HOWTO.INSTALL ${UTIL_MISC_SRC}
# complete list of .o files # complete list of .o files
# #

5
README
View File

@@ -4,6 +4,11 @@
# #
# Arbitrary precision calculator. # Arbitrary precision calculator.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NOTE: This is an old historic README. We recommend that you
read README.FIRST and HOWTO.INSTALL for more info.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I am allowing this calculator to be freely distributed for your enjoyment. I am allowing this calculator to be freely distributed for your enjoyment.
Like all multi-precision programs, you should not depend absolutely on Like all multi-precision programs, you should not depend absolutely on
its results, since bugs in such programs can be insidious and only rarely its results, since bugs in such programs can be insidious and only rarely

View File

@@ -1,12 +1,17 @@
Dear alpha tester, Dear calc user,
Thanks for taking the time to try out this alpha version of calc! We are See the HOWTO.INSTALL file for information on how to build and install calc.
interested in any/all feedback that you may have on this version. In
particular we would like to hear about:
To be sure that your version of calc is up to date, check out:
http://reality.sgi.com/chongo/calc/calc-download.html
We are interested in any/all feedback on recent versions of calc.
In particular we would like to hear about:
* compiler warnings
* compile problems * compile problems
* regression test problems (try: make check) * regression test problems (try: make check)
* compiler warnings
* special compile flags/options that you needed * special compile flags/options that you needed
* Makefile problems * Makefile problems
* help file problems * help file problems
@@ -15,38 +20,35 @@ particular we would like to hear about:
We would like to offer a clean compile across a wide verity of platforms, We would like to offer a clean compile across a wide verity of platforms,
so if you can test on several, so much the better! so if you can test on several, so much the better!
Calc distributions may be obtained from: If you run into problems, see the BUGS file.
ftp://ftp.uu.net/pub/calc
If you don't have ftp access to that site, or if you do not find a more
recent version (you may have a special pre-released version that is
more advanced than what is in the ftp archive) send EMail to:
chongo@toad.com
Indicate the version you have and that you would like a more up
to date version.
=-= =-=
Misc items TODO before Beta release: See the file:
* improve the coverage in the 'SEE ALSO' help file lists help/todo
* where reasonable, be sure that regress.cal tests builtin functions or run:
* add the Blum-Blum-Shub random() generator code calc 'help todo'
* add code to allow of the reading, writing and processing of binary data for a wish/todo list. Code contributions are welcome.
* add shs, shs-1 and md5 hashing functions. Use align32.h. =-=
* add mod h*2^n+/-1 function for integers To join the calc-tester mailing list. Send a request to:
* be sure that CHANGES is up to date, calc-tester-request@postofc.corp.sgi.com
look over the help/todo file and update as needed,
revisit issues in the BUGS file and
change this file :-)
* clean the source code and document it better Your message body (not the subject) should consist of:
subscribe calc-tester address
end
name your_full_name
where ``address'' is your EMail address and ``your_full_name'' is
your full name.
The calc web site is located at:
http://reality.sgi.com/chongo/calc

48
block.c
View File

@@ -71,7 +71,7 @@ static void blkchk(BLOCK*);
BLOCK * BLOCK *
blkalloc(int len, int chunk) blkalloc(int len, int chunk)
{ {
BLOCK *new; /* new block allocated */ BLOCK *nblk; /* new block allocated */
/* /*
* firewall * firewall
@@ -84,8 +84,8 @@ blkalloc(int len, int chunk)
/* /*
* allocate BLOCK * allocate BLOCK
*/ */
new = (BLOCK *)malloc(sizeof(BLOCK)); nblk = (BLOCK *)malloc(sizeof(BLOCK));
if (new == NULL) { if (nblk == NULL) {
math_error("cannot allocate block"); math_error("cannot allocate block");
/*NOTREACHED*/ /*NOTREACHED*/
} }
@@ -93,23 +93,23 @@ blkalloc(int len, int chunk)
/* /*
* initialize BLOCK * initialize BLOCK
*/ */
new->blkchunk = chunk; nblk->blkchunk = chunk;
new->maxsize = ((len+chunk)/chunk)*chunk; nblk->maxsize = ((len+chunk)/chunk)*chunk;
new->data = (USB8*)malloc(new->maxsize); nblk->data = (USB8*)malloc(nblk->maxsize);
if (new->data == NULL) { if (nblk->data == NULL) {
math_error("cannot allocate block data storage"); math_error("cannot allocate block data storage");
/*NOTREACHED*/ /*NOTREACHED*/
} }
memset(new->data, 0, new->maxsize); memset(nblk->data, 0, nblk->maxsize);
new->datalen = len; nblk->datalen = len;
/* /*
* return BLOCK * return BLOCK
*/ */
if (conf->calc_debug > 0) { if (conf->calc_debug > 0) {
blkchk(new); blkchk(nblk);
} }
return new; return nblk;
} }
@@ -227,7 +227,7 @@ blkchk(BLOCK *blk)
BLOCK * BLOCK *
blkrealloc(BLOCK *blk, int newlen, int newchunk) blkrealloc(BLOCK *blk, int newlen, int newchunk)
{ {
USB8 *new; /* realloced storage */ USB8 *nblk; /* realloced storage */
int newmax; /* new maximum stoage size */ int newmax; /* new maximum stoage size */
/* /*
@@ -258,20 +258,20 @@ blkrealloc(BLOCK *blk, int newlen, int newchunk)
if (newmax != blk->maxsize) { if (newmax != blk->maxsize) {
/* reallocate new storage */ /* reallocate new storage */
new = (USB8*)realloc(blk->data, newmax); nblk = (USB8*)realloc(blk->data, newmax);
if (new == NULL) { if (nblk == NULL) {
math_error("cannot reallocate block storage"); math_error("cannot reallocate block storage");
/*NOTREACHED*/ /*NOTREACHED*/
} }
/* clear any new storage */ /* clear any new storage */
if (newmax > blk->maxsize) { if (newmax > blk->maxsize) {
memset(new + blk->maxsize, 0, (newmax - blk->maxsize)); memset(nblk+blk->maxsize, 0, (newmax-blk->maxsize));
} }
blk->maxsize = newmax; blk->maxsize = newmax;
/* restore the data pointers */ /* restore the data pointers */
blk->data = new; blk->data = nblk;
} }
/* /*
@@ -391,13 +391,13 @@ blktrunc(BLOCK *blk)
BLOCK * BLOCK *
blk_copy(BLOCK *blk) blk_copy(BLOCK *blk)
{ {
BLOCK *new; /* copy of blk */ BLOCK *nblk; /* copy of blk */
/* /*
* malloc new block * malloc new block
*/ */
new = (BLOCK *)malloc(sizeof(BLOCK)); nblk = (BLOCK *)malloc(sizeof(BLOCK));
if (new == NULL) { if (nblk == NULL) {
math_error("blk_copy: cannot malloc BLOCK"); math_error("blk_copy: cannot malloc BLOCK");
/*NOTREACHED*/ /*NOTREACHED*/
} }
@@ -405,18 +405,18 @@ blk_copy(BLOCK *blk)
/* /*
* duplicate most of the block * duplicate most of the block
*/ */
*new = *blk; *nblk = *blk;
/* /*
* duplicate block data * duplicate block data
*/ */
new->data = (USB8 *)malloc(blk->maxsize); nblk->data = (USB8 *)malloc(blk->maxsize);
if (new->data == NULL) { if (nblk->data == NULL) {
math_error("blk_copy: cannot duplicate block data"); math_error("blk_copy: cannot duplicate block data");
/*NOTREACHED*/ /*NOTREACHED*/
} }
memcpy(new->data, blk->data, blk->maxsize); memcpy(nblk->data, blk->data, blk->maxsize);
return new; return nblk;
} }

View File

@@ -71,5 +71,9 @@ END {
if (error > 0 && havebuf0) { if (error > 0 && havebuf0) {
print buf0; print buf0;
} }
exit (error > 0); if (error > 0) {
exit(1);
} else {
exit(0);
}
} }

10
hash.c
View File

@@ -147,13 +147,13 @@ hash_free(HASH *state)
HASH * HASH *
hash_copy(HASH *state) hash_copy(HASH *state)
{ {
HASH *new; /* copy of state */ HASH *hnew; /* copy of state */
/* /*
* malloc new state * malloc new state
*/ */
new = (HASH *)malloc(sizeof(HASH)); hnew = (HASH *)malloc(sizeof(HASH));
if (new == NULL) { if (hnew == NULL) {
math_error("hash_init: cannot malloc HASH"); math_error("hash_init: cannot malloc HASH");
/*NOTREACHED*/ /*NOTREACHED*/
} }
@@ -161,8 +161,8 @@ hash_copy(HASH *state)
/* /*
* duplicate state * duplicate state
*/ */
memcpy((void *)new, (void *)state, sizeof(HASH)); memcpy((void *)hnew, (void *)state, sizeof(HASH));
return new; return hnew;
} }

View File

@@ -54,7 +54,7 @@ char buf[BUFSIZ];
void void
try(char *fmt, ...) try_this(char *fmt, ...)
{ {
va_list ap; va_list ap;
@@ -79,7 +79,7 @@ main(void)
/* /*
* test variable args and vsprintf/sprintf * test variable args and vsprintf/sprintf
*/ */
try("@%d:%s:%d@", 1, "hi", 2); try_this("@%d:%s:%d@", 1, "hi", 2);
if (strcmp(buf, "@1:hi:2@") != 0) { if (strcmp(buf, "@1:hi:2@") != 0) {
#if !defined(DONT_HAVE_VSPRINTF) #if !defined(DONT_HAVE_VSPRINTF)
/* <stdarg.h> with vsprintf() didn't work */ /* <stdarg.h> with vsprintf() didn't work */
@@ -88,7 +88,7 @@ main(void)
#endif #endif
exit(1); exit(1);
} }
try("%s %d%s%d%d %s", try_this("%s %d%s%d%d %s",
"Landon Noll 1st proved that", 2, "^", 23209, -1, "was prime"); "Landon Noll 1st proved that", 2, "^", 23209, -1, "was prime");
if (strcmp(buf, if (strcmp(buf,
"Landon Noll 1st proved that 2^23209-1 was prime") != 0) { "Landon Noll 1st proved that 2^23209-1 was prime") != 0) {

View File

@@ -52,7 +52,7 @@ char buf[BUFSIZ];
#include <varargs.h> #include <varargs.h>
void void
try(char *fmt, ...) try_this(char *fmt, ...)
{ {
va_list ap; va_list ap;
@@ -68,7 +68,7 @@ try(char *fmt, ...)
#else #else
void void
try(char *a, int b, char *c, int d) try_this(char *a, int b, char *c, int d)
{ {
return; return;
} }
@@ -87,7 +87,7 @@ main(void)
/* /*
* test variable args and vsprintf/sprintf * test variable args and vsprintf/sprintf
*/ */
try("@%d:%s:%d@", 1, "hi", 2); try_this("@%d:%s:%d@", 1, "hi", 2);
if (strcmp(buf, "@1:hi:2@") != 0) { if (strcmp(buf, "@1:hi:2@") != 0) {
#if !defined(DONT_HAVE_VSPRINTF) #if !defined(DONT_HAVE_VSPRINTF)
/* <varargs.h> with vsprintf() didn't work */ /* <varargs.h> with vsprintf() didn't work */
@@ -96,7 +96,7 @@ main(void)
#endif #endif
exit(1); exit(1);
} }
try("%s %d%s%d%d %s", try_this("%s %d%s%d%d %s",
"Landon Noll 1st proved that", 2, "^", 23209, -1, "was prime"); "Landon Noll 1st proved that", 2, "^", 23209, -1, "was prime");
if (strcmp(buf, if (strcmp(buf,
"Landon Noll 1st proved that 2^23209-1 was prime") != 0) { "Landon Noll 1st proved that 2^23209-1 was prime") != 0) {

View File

@@ -235,3 +235,11 @@ Needed enhancements
One should make available a the fundimental math operations One should make available a the fundimental math operations
on ZVALUE, NUMBER and perhaps COMPLEX (without all of the on ZVALUE, NUMBER and perhaps COMPLEX (without all of the
other stuff) in a separate library. other stuff) in a separate library.
* improve the coverage in the 'SEE ALSO' help file lists
* where reasonable, be sure that regress.cal tests builtin functions
* add mod h*2^n+/-1 function for integers
* clean the source code and document it better

2
shs.c
View File

@@ -598,7 +598,7 @@ shs_final_state(HASH *state)
/* /*
* load ZVALUE * load ZVALUE
*/ */
#if BASEB == 16 #if BASEB == 16 && CALC_BYTE_ORDER == LITTLE_ENDIAN
for (i=0; i < ret.len; i+=2) { for (i=0; i < ret.len; i+=2) {
ret.v[ret.len-i-1] = ((HALF*)dig->digest)[i+1]; ret.v[ret.len-i-1] = ((HALF*)dig->digest)[i+1];
ret.v[ret.len-i-2] = ((HALF*)dig->digest)[i]; ret.v[ret.len-i-2] = ((HALF*)dig->digest)[i];

2
shs1.c
View File

@@ -574,7 +574,7 @@ shs1_final_state(HASH *state)
/* /*
* load ZVALUE * load ZVALUE
*/ */
#if BASEB == 16 #if BASEB == 16 && CALC_BYTE_ORDER == LITTLE_ENDIAN
for (i=0; i < ret.len; i+=2) { for (i=0; i < ret.len; i+=2) {
ret.v[ret.len-i-1] = ((HALF*)dig->digest)[i+1]; ret.v[ret.len-i-1] = ((HALF*)dig->digest)[i+1];
ret.v[ret.len-i-2] = ((HALF*)dig->digest)[i]; ret.v[ret.len-i-2] = ((HALF*)dig->digest)[i];

View File

@@ -12,7 +12,7 @@
#define MAJOR_VER 2 /* major version */ #define MAJOR_VER 2 /* major version */
#define MINOR_VER 11 /* minor version */ #define MINOR_VER 11 /* minor version */
#define MAJOR_PATCH 0 /* patch level or 0 if no patch */ #define MAJOR_PATCH 0 /* patch level or 0 if no patch */
#define MINOR_PATCH "2" /* test number or empty string if no patch */ #define MINOR_PATCH "3" /* test number or empty string if no patch */
/* /*
* calc version constants * calc version constants

36
zfunc.c
View File

@@ -1683,7 +1683,7 @@ done: if (s == 0) {
void void
zroot(ZVALUE z1, ZVALUE z2, ZVALUE *dest) zroot(ZVALUE z1, ZVALUE z2, ZVALUE *dest)
{ {
ZVALUE try, quo, old, temp, temp2; ZVALUE ztry, quo, old, temp, temp2;
ZVALUE k1; /* holds k - 1 */ ZVALUE k1; /* holds k - 1 */
int sign; int sign;
long i; long i;
@@ -1733,12 +1733,12 @@ zroot(ZVALUE z1, ZVALUE z2, ZVALUE *dest)
* is unimportant. * is unimportant.
*/ */
highbit = (highbit + k - 1) / k; highbit = (highbit + k - 1) / k;
try.len = (highbit / BASEB) + 1; ztry.len = (highbit / BASEB) + 1;
try.v = alloc(try.len); ztry.v = alloc(ztry.len);
zclearval(try); zclearval(ztry);
try.v[try.len-1] = ((HALF)1 << (highbit % BASEB)); ztry.v[ztry.len-1] = ((HALF)1 << (highbit % BASEB));
try.sign = 0; ztry.sign = 0;
old.v = alloc(try.len); old.v = alloc(ztry.len);
old.len = 1; old.len = 1;
zclearval(old); zclearval(old);
old.sign = 0; old.sign = 0;
@@ -1746,10 +1746,10 @@ zroot(ZVALUE z1, ZVALUE z2, ZVALUE *dest)
* Main divide and average loop * Main divide and average loop
*/ */
for (;;) { for (;;) {
zpowi(try, k1, &temp); zpowi(ztry, k1, &temp);
zquo(z1, temp, &quo, 0); zquo(z1, temp, &quo, 0);
zfree(temp); zfree(temp);
i = zrel(try, quo); i = zrel(ztry, quo);
if (i <= 0) { if (i <= 0) {
/* /*
* Current try is less than or equal to the root since it is * Current try is less than or equal to the root since it is
@@ -1758,24 +1758,24 @@ zroot(ZVALUE z1, ZVALUE z2, ZVALUE *dest)
* we are done since no improvement occurred. * we are done since no improvement occurred.
* If not, save the improved value and loop some more. * If not, save the improved value and loop some more.
*/ */
if ((i == 0) || (zcmp(old, try) == 0)) { if ((i == 0) || (zcmp(old, ztry) == 0)) {
zfree(quo); zfree(quo);
zfree(old); zfree(old);
try.sign = (BOOL)((HALF)sign); ztry.sign = (BOOL)((HALF)sign);
zquicktrim(try); zquicktrim(ztry);
*dest = try; *dest = ztry;
return; return;
} }
old.len = try.len; old.len = ztry.len;
zcopyval(try, old); zcopyval(ztry, old);
} }
/* average current try and quotent for the new try */ /* average current try and quotent for the new try */
zmul(try, k1, &temp); zmul(ztry, k1, &temp);
zfree(try); zfree(ztry);
zadd(quo, temp, &temp2); zadd(quo, temp, &temp2);
zfree(temp); zfree(temp);
zfree(quo); zfree(quo);
zquo(temp2, z2, &try, 0); zquo(temp2, z2, &ztry, 0);
zfree(temp2); zfree(temp2);
} }
} }

View File

@@ -577,7 +577,7 @@ typedef struct {
*/ */
#if FULL_BITS == 64 #if FULL_BITS == 64
# if defined(__STDC__) && __STDC__ != 0 # if (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
# define HVAL(a,b) (HALF)(0x ## a ## b) # define HVAL(a,b) (HALF)(0x ## a ## b)
# else # else
# define HVAL(a,b) (HALF)(0x/**/a/**/b) # define HVAL(a,b) (HALF)(0x/**/a/**/b)
@@ -585,7 +585,7 @@ typedef struct {
#elif 2*FULL_BITS == 64 #elif 2*FULL_BITS == 64
# if defined(__STDC__) && __STDC__ != 0 # if (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
# define HVAL(a,b) (HALF)0x##b, (HALF)0x##a # define HVAL(a,b) (HALF)0x##b, (HALF)0x##a
# else # else
/* NOTE: Due to a SunOS cc bug, don't put spaces in the HVAL call! */ /* NOTE: Due to a SunOS cc bug, don't put spaces in the HVAL call! */

View File

@@ -142,7 +142,7 @@
#if FULL_BITS == SBITS #if FULL_BITS == SBITS
# define SLEN 1 /* a 64 bit slot can be held in a FULL */ # define SLEN 1 /* a 64 bit slot can be held in a FULL */
# if defined(__STDC__) && __STDC__ != 0 # if (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
# define SVAL(a,b) (FULL)U(0x ## a ## b) # define SVAL(a,b) (FULL)U(0x ## a ## b)
# define SHVAL(a,b,c,d) (HALF)0x ## c ## d, (HALF)0x ## a ## b # define SHVAL(a,b,c,d) (HALF)0x ## c ## d, (HALF)0x ## a ## b
# else # else
@@ -166,7 +166,7 @@
#elif 2*FULL_BITS == SBITS #elif 2*FULL_BITS == SBITS
# define SLEN 2 /* a 64 bit slot needs 2 FULLs */ # define SLEN 2 /* a 64 bit slot needs 2 FULLs */
# if defined(__STDC__) && __STDC__ != 0 # if (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
# define SVAL(a,b) (FULL)0x##b, (FULL)0x##a # define SVAL(a,b) (FULL)0x##b, (FULL)0x##a
# define SHVAL(a,b,c,d) (HALF)0x##d, (HALF)0x##c, \ # define SHVAL(a,b,c,d) (HALF)0x##d, (HALF)0x##c, \
(HALF)0x##b, (HALF)0x##a (HALF)0x##b, (HALF)0x##a