From 1ce630ac19a15de2b52a665d7e5181198072dc82 Mon Sep 17 00:00:00 2001 From: Landon Curt Noll Date: Tue, 28 Sep 1999 02:19:47 -0700 Subject: [PATCH] Release calc version 2.11.0t3 --- BUGS | 156 ++++++++++++++------------------------------------ CHANGES | 24 +++++++- HOWTO.INSTALL | 53 +++++++++++++++++ Makefile | 83 +++++++++++++-------------- README | 5 ++ README.FIRST | 60 +++++++++---------- block.c | 48 ++++++++-------- check.awk | 6 +- hash.c | 10 ++-- have_stdvs.c | 6 +- have_varvs.c | 8 +-- help/todo | 8 +++ shs.c | 2 +- shs1.c | 2 +- version.c | 2 +- zfunc.c | 36 ++++++------ zmath.h | 4 +- zrand.h | 4 +- 18 files changed, 267 insertions(+), 250 deletions(-) create mode 100644 HOWTO.INSTALL diff --git a/BUGS b/BUGS index 02590c4..701a646 100644 --- a/BUGS +++ b/BUGS @@ -1,8 +1,8 @@ If you notice something wrong, strange or broken, try rereading: README.FIRST - README - BUGS (in particular the bottom problems or mis-features section) + HOWTO.INSTALL + BUGS (this file) 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 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 -distributions may be obtained from the official calc repository: +To be sure that your version of calc is up to date, check out: - 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 -version that is more advanced than what is in the ftp archive. +The calc web site is located at: + + 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 + * any compiler warnings or erros that you saw + * cd to the calc source directory, and type: 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: - - 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: +Send any comments, compiler warning messages, suggestions and most +importantly, fixes (in the form of a context diff patch) to: calc-tester@postofc.corp.sgi.com @@ -118,103 +106,45 @@ Known problems or mis-features: 8 getcommands(toplevel = 536864560) ["codegen.c":122, 0x1200284dc] 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 - 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). + However On 25-Sep-99 9:18, Ernest Bowen wrote: - 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 - 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. + Ernest Bowen was using gcc. - From: "Dr.D.J.Picton" - Date: Fri, 8 May 1998 10:54:43 +0100 + We definitely want to hunt down this Dec's cc compiler issue. It + 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 reports that -Xc is + required for at compiling zrand.c. - The code compiled OK but the sha() and sha1() functions give errors with - make check. These functions clearly are broken. For example, - sha(sha()) gives + * Calc compiled with Solaris cc -Xc results in some test failures: - 0xea19f96cdd568ad1084a17acc6103d92c0ef7708 not - 0xf96cea198ad1dd5617ac084a3d92c6107708c0ef + CALCPATH=./lib ./calc -i -q read regress 2>&1 | nawk -f check.awk + **** 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. - >B = blk() = {"a", "b", "c"}; - >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 + **** 9 error(s) found \/++\/ + 9999: Ending regression tests diff --git a/CHANGES b/CHANGES index 05aa939..a6cf520 100644 --- a/CHANGES +++ b/CHANGES @@ -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 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. If ERRNO_DECL is empty, calc_errno.c will try various ways to 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 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 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 and + Dr.D.J.Picton , 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: diff --git a/HOWTO.INSTALL b/HOWTO.INSTALL new file mode 100644 index 0000000..7909e73 --- /dev/null +++ b/HOWTO.INSTALL @@ -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 diff --git a/Makefile b/Makefile index 647d1eb..401b6de 100644 --- a/Makefile +++ b/Makefile @@ -314,7 +314,8 @@ CATEXT= 1 # The cat page is not built or installed # # 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= @@ -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} #CCMISC= # @@ -542,26 +571,16 @@ ALLOW_CUSTOM= -DCUSTOM #LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED} #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: -# 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 +#CCWARN= #CCOPT= ${DEBUG} ${NO_SHARED} -#CCMISC= -use_readonly_const +#CCMISC= # #CFLAGS= ${CCWARN} ${CCOPT} ${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 -# -# 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) +# BSDI's BSD/OS 4.0 (or later) set # # for better performance, set the following above: # DEBUG= -O2 @@ -721,7 +717,6 @@ CC= ${PURIFY} gcc #ILDFLAGS= # #CC= ${PURIFY} gcc -#CC= ${PURIFY} gcc2 ############################################################################## #-=-=-=-=-=-=-=-=- 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 # 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 # diff --git a/README b/README index 35e7b23..bcc296a 100644 --- a/README +++ b/README @@ -4,6 +4,11 @@ # # 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. Like all multi-precision programs, you should not depend absolutely on its results, since bugs in such programs can be insidious and only rarely diff --git a/README.FIRST b/README.FIRST index b61ca18..8f0d8ce 100644 --- a/README.FIRST +++ b/README.FIRST @@ -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 -interested in any/all feedback that you may have on this version. In -particular we would like to hear about: +See the HOWTO.INSTALL file for information on how to build and install calc. +To be sure that your version of calc is up to date, check out: + + http://reality.sgi.com/chongo/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 * regression test problems (try: make check) - * compiler warnings * special compile flags/options that you needed * Makefile 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, so if you can test on several, so much the better! -Calc distributions may be obtained from: - - 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. +If you run into problems, see the BUGS file. =-= -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, - look over the help/todo file and update as needed, - revisit issues in the BUGS file and - change this file :-) + calc-tester-request@postofc.corp.sgi.com - * 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 diff --git a/block.c b/block.c index 2d24f29..8dcc613 100644 --- a/block.c +++ b/block.c @@ -71,7 +71,7 @@ static void blkchk(BLOCK*); BLOCK * blkalloc(int len, int chunk) { - BLOCK *new; /* new block allocated */ + BLOCK *nblk; /* new block allocated */ /* * firewall @@ -84,8 +84,8 @@ blkalloc(int len, int chunk) /* * allocate BLOCK */ - new = (BLOCK *)malloc(sizeof(BLOCK)); - if (new == NULL) { + nblk = (BLOCK *)malloc(sizeof(BLOCK)); + if (nblk == NULL) { math_error("cannot allocate block"); /*NOTREACHED*/ } @@ -93,23 +93,23 @@ blkalloc(int len, int chunk) /* * initialize BLOCK */ - new->blkchunk = chunk; - new->maxsize = ((len+chunk)/chunk)*chunk; - new->data = (USB8*)malloc(new->maxsize); - if (new->data == NULL) { + nblk->blkchunk = chunk; + nblk->maxsize = ((len+chunk)/chunk)*chunk; + nblk->data = (USB8*)malloc(nblk->maxsize); + if (nblk->data == NULL) { math_error("cannot allocate block data storage"); /*NOTREACHED*/ } - memset(new->data, 0, new->maxsize); - new->datalen = len; + memset(nblk->data, 0, nblk->maxsize); + nblk->datalen = len; /* * return BLOCK */ if (conf->calc_debug > 0) { - blkchk(new); + blkchk(nblk); } - return new; + return nblk; } @@ -227,7 +227,7 @@ blkchk(BLOCK *blk) BLOCK * blkrealloc(BLOCK *blk, int newlen, int newchunk) { - USB8 *new; /* realloced storage */ + USB8 *nblk; /* realloced storage */ int newmax; /* new maximum stoage size */ /* @@ -258,20 +258,20 @@ blkrealloc(BLOCK *blk, int newlen, int newchunk) if (newmax != blk->maxsize) { /* reallocate new storage */ - new = (USB8*)realloc(blk->data, newmax); - if (new == NULL) { + nblk = (USB8*)realloc(blk->data, newmax); + if (nblk == NULL) { math_error("cannot reallocate block storage"); /*NOTREACHED*/ } /* clear any new storage */ if (newmax > blk->maxsize) { - memset(new + blk->maxsize, 0, (newmax - blk->maxsize)); + memset(nblk+blk->maxsize, 0, (newmax-blk->maxsize)); } blk->maxsize = newmax; /* restore the data pointers */ - blk->data = new; + blk->data = nblk; } /* @@ -391,13 +391,13 @@ blktrunc(BLOCK *blk) BLOCK * blk_copy(BLOCK *blk) { - BLOCK *new; /* copy of blk */ + BLOCK *nblk; /* copy of blk */ /* * malloc new block */ - new = (BLOCK *)malloc(sizeof(BLOCK)); - if (new == NULL) { + nblk = (BLOCK *)malloc(sizeof(BLOCK)); + if (nblk == NULL) { math_error("blk_copy: cannot malloc BLOCK"); /*NOTREACHED*/ } @@ -405,18 +405,18 @@ blk_copy(BLOCK *blk) /* * duplicate most of the block */ - *new = *blk; + *nblk = *blk; /* * duplicate block data */ - new->data = (USB8 *)malloc(blk->maxsize); - if (new->data == NULL) { + nblk->data = (USB8 *)malloc(blk->maxsize); + if (nblk->data == NULL) { math_error("blk_copy: cannot duplicate block data"); /*NOTREACHED*/ } - memcpy(new->data, blk->data, blk->maxsize); - return new; + memcpy(nblk->data, blk->data, blk->maxsize); + return nblk; } diff --git a/check.awk b/check.awk index 3b0ba9e..8189dfa 100644 --- a/check.awk +++ b/check.awk @@ -71,5 +71,9 @@ END { if (error > 0 && havebuf0) { print buf0; } - exit (error > 0); + if (error > 0) { + exit(1); + } else { + exit(0); + } } diff --git a/hash.c b/hash.c index 7749fd7..c08ff32 100644 --- a/hash.c +++ b/hash.c @@ -147,13 +147,13 @@ hash_free(HASH *state) HASH * hash_copy(HASH *state) { - HASH *new; /* copy of state */ + HASH *hnew; /* copy of state */ /* * malloc new state */ - new = (HASH *)malloc(sizeof(HASH)); - if (new == NULL) { + hnew = (HASH *)malloc(sizeof(HASH)); + if (hnew == NULL) { math_error("hash_init: cannot malloc HASH"); /*NOTREACHED*/ } @@ -161,8 +161,8 @@ hash_copy(HASH *state) /* * duplicate state */ - memcpy((void *)new, (void *)state, sizeof(HASH)); - return new; + memcpy((void *)hnew, (void *)state, sizeof(HASH)); + return hnew; } diff --git a/have_stdvs.c b/have_stdvs.c index b50f110..a29bab5 100644 --- a/have_stdvs.c +++ b/have_stdvs.c @@ -54,7 +54,7 @@ char buf[BUFSIZ]; void -try(char *fmt, ...) +try_this(char *fmt, ...) { va_list ap; @@ -79,7 +79,7 @@ main(void) /* * 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 !defined(DONT_HAVE_VSPRINTF) /* with vsprintf() didn't work */ @@ -88,7 +88,7 @@ main(void) #endif 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"); if (strcmp(buf, "Landon Noll 1st proved that 2^23209-1 was prime") != 0) { diff --git a/have_varvs.c b/have_varvs.c index 368e96a..1fdfa01 100644 --- a/have_varvs.c +++ b/have_varvs.c @@ -52,7 +52,7 @@ char buf[BUFSIZ]; #include void -try(char *fmt, ...) +try_this(char *fmt, ...) { va_list ap; @@ -68,7 +68,7 @@ try(char *fmt, ...) #else void -try(char *a, int b, char *c, int d) +try_this(char *a, int b, char *c, int d) { return; } @@ -87,7 +87,7 @@ main(void) /* * 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 !defined(DONT_HAVE_VSPRINTF) /* with vsprintf() didn't work */ @@ -96,7 +96,7 @@ main(void) #endif 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"); if (strcmp(buf, "Landon Noll 1st proved that 2^23209-1 was prime") != 0) { diff --git a/help/todo b/help/todo index 7cf144f..8c394cd 100644 --- a/help/todo +++ b/help/todo @@ -235,3 +235,11 @@ Needed enhancements One should make available a the fundimental math operations on ZVALUE, NUMBER and perhaps COMPLEX (without all of the 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 diff --git a/shs.c b/shs.c index 0246f5a..07b6650 100644 --- a/shs.c +++ b/shs.c @@ -598,7 +598,7 @@ shs_final_state(HASH *state) /* * load ZVALUE */ -#if BASEB == 16 +#if BASEB == 16 && CALC_BYTE_ORDER == LITTLE_ENDIAN for (i=0; i < ret.len; i+=2) { ret.v[ret.len-i-1] = ((HALF*)dig->digest)[i+1]; ret.v[ret.len-i-2] = ((HALF*)dig->digest)[i]; diff --git a/shs1.c b/shs1.c index 305cf8c..1218092 100644 --- a/shs1.c +++ b/shs1.c @@ -574,7 +574,7 @@ shs1_final_state(HASH *state) /* * load ZVALUE */ -#if BASEB == 16 +#if BASEB == 16 && CALC_BYTE_ORDER == LITTLE_ENDIAN for (i=0; i < ret.len; i+=2) { ret.v[ret.len-i-1] = ((HALF*)dig->digest)[i+1]; ret.v[ret.len-i-2] = ((HALF*)dig->digest)[i]; diff --git a/version.c b/version.c index b22de37..84f8f53 100644 --- a/version.c +++ b/version.c @@ -12,7 +12,7 @@ #define MAJOR_VER 2 /* major version */ #define MINOR_VER 11 /* minor version */ #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 diff --git a/zfunc.c b/zfunc.c index 44b7f37..609670e 100644 --- a/zfunc.c +++ b/zfunc.c @@ -1683,7 +1683,7 @@ done: if (s == 0) { void zroot(ZVALUE z1, ZVALUE z2, ZVALUE *dest) { - ZVALUE try, quo, old, temp, temp2; + ZVALUE ztry, quo, old, temp, temp2; ZVALUE k1; /* holds k - 1 */ int sign; long i; @@ -1733,12 +1733,12 @@ zroot(ZVALUE z1, ZVALUE z2, ZVALUE *dest) * is unimportant. */ highbit = (highbit + k - 1) / k; - try.len = (highbit / BASEB) + 1; - try.v = alloc(try.len); - zclearval(try); - try.v[try.len-1] = ((HALF)1 << (highbit % BASEB)); - try.sign = 0; - old.v = alloc(try.len); + ztry.len = (highbit / BASEB) + 1; + ztry.v = alloc(ztry.len); + zclearval(ztry); + ztry.v[ztry.len-1] = ((HALF)1 << (highbit % BASEB)); + ztry.sign = 0; + old.v = alloc(ztry.len); old.len = 1; zclearval(old); old.sign = 0; @@ -1746,10 +1746,10 @@ zroot(ZVALUE z1, ZVALUE z2, ZVALUE *dest) * Main divide and average loop */ for (;;) { - zpowi(try, k1, &temp); + zpowi(ztry, k1, &temp); zquo(z1, temp, &quo, 0); zfree(temp); - i = zrel(try, quo); + i = zrel(ztry, quo); if (i <= 0) { /* * 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. * 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(old); - try.sign = (BOOL)((HALF)sign); - zquicktrim(try); - *dest = try; + ztry.sign = (BOOL)((HALF)sign); + zquicktrim(ztry); + *dest = ztry; return; } - old.len = try.len; - zcopyval(try, old); + old.len = ztry.len; + zcopyval(ztry, old); } /* average current try and quotent for the new try */ - zmul(try, k1, &temp); - zfree(try); + zmul(ztry, k1, &temp); + zfree(ztry); zadd(quo, temp, &temp2); zfree(temp); zfree(quo); - zquo(temp2, z2, &try, 0); + zquo(temp2, z2, &ztry, 0); zfree(temp2); } } diff --git a/zmath.h b/zmath.h index 6945cbe..80d5372 100644 --- a/zmath.h +++ b/zmath.h @@ -577,7 +577,7 @@ typedef struct { */ #if FULL_BITS == 64 -# if defined(__STDC__) && __STDC__ != 0 +# if (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus) # define HVAL(a,b) (HALF)(0x ## a ## b) # else # define HVAL(a,b) (HALF)(0x/**/a/**/b) @@ -585,7 +585,7 @@ typedef struct { #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 # else /* NOTE: Due to a SunOS cc bug, don't put spaces in the HVAL call! */ diff --git a/zrand.h b/zrand.h index f675dd9..45a0921 100644 --- a/zrand.h +++ b/zrand.h @@ -142,7 +142,7 @@ #if FULL_BITS == SBITS # 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 SHVAL(a,b,c,d) (HALF)0x ## c ## d, (HALF)0x ## a ## b # else @@ -166,7 +166,7 @@ #elif 2*FULL_BITS == SBITS # 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 SHVAL(a,b,c,d) (HALF)0x##d, (HALF)0x##c, \ (HALF)0x##b, (HALF)0x##a