From bdf495150e4e979a47d76004e5fe41daf02da640 Mon Sep 17 00:00:00 2001 From: Landon Curt Noll Date: Sun, 24 Feb 2008 00:02:29 -0800 Subject: [PATCH] Release calc version 2.12.3.0 --- CHANGES | 28 +++++++++++++++-- Makefile | 71 ++++++++++++++++++++++++++++++++++-------- Makefile.simple | 29 +++++++++-------- cal/regress.cal | 38 ++++++++++++++++++++-- custom/Makefile | 50 ++++++++++++++++++++++++++--- custom/Makefile.head | 8 ++--- custom/Makefile.simple | 8 ++--- version.c | 22 +++++-------- zfunc.c | 49 +++++++++++++++++++---------- 9 files changed, 228 insertions(+), 75 deletions(-) diff --git a/CHANGES b/CHANGES index 97b36c9..3f468b5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,26 @@ -The following are the changes from calc version 2.12.1.1 to date: +The following are the changes from calc version 2.12.3.0 to date: + + 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. + + +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. @@ -6695,8 +6717,8 @@ Following is a list of visible changes to calc from version 1.24.7 to 1.26.1: ## 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.11 $ -## @(#) $Id: CHANGES,v 30.11 2007/10/16 12:22:22 chongo Exp $ +## @(#) $Revision: 30.13 $ +## @(#) $Id: CHANGES,v 30.13 2008/02/24 07:58:36 chongo Exp $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $ ## ## Under source code control: 1993/06/02 18:12:57 diff --git a/Makefile b/Makefile index 2f9f556..f1e43f5 100644 --- a/Makefile +++ b/Makefile @@ -39,8 +39,8 @@ # received a copy with calc; if not, write to Free Software Foundation, Inc. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # -MAKEFILE_REV= $$Revision: 30.25 $$ -# @(#) $Id: Makefile.ship,v 30.25 2007/09/29 16:57:48 chongo Exp $ +MAKEFILE_REV= $$Revision: 30.27 $$ +# @(#) $Id: Makefile.ship,v 30.27 2008/02/24 07:58:36 chongo Exp $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/Makefile.ship,v $ # # Under source code control: 1990/02/15 01:48:41 @@ -984,8 +984,8 @@ EXT= # The default calc versions # -VERSION= 2.12.2.2 -VERS= 2.12.2 +VERSION= 2.12.3.0 +VERS= 2.12.3 VER= 2.12 VE= 2 @@ -1243,6 +1243,48 @@ MAKE= gmake # endif +################## +# OpenBSD target # +################## + +######################################################################## +# NOTE: You MUST either use gmake (GNU Make) or you must try your luck # +# with Makefile.simple and custom/Makefile.simple versions. # +# See HOWTO.INSTALL for more information. # +######################################################################## + +ifeq ($(target),OpenBSD) +# +BLD_TYPE= calc-dynamic-only +# +CC_SHARE= -fPIC +DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:/usr/local/lib +LD_SHARE= "-Wl,-rpath,${DEFAULT_LIB_INSTALL_PATH}" \ + "-Wl,-rpath-link,${DEFAULT_LIB_INSTALL_PATH}" +LIBCALC_SHLIB= -shared "-Wl,-soname,libcalc${LIB_EXT_VERSION}" +ifdef ALLOW_CUSTOM +LIBCUSTCALC_SHLIB= -shared "-Wl,-soname,libcustcalc${LIB_EXT_VERSION}" +else +LIBCUSTCALC_SHLIB= +endif +# +CC_STATIC= +LD_STATIC= +LIBCALC_STATIC= +LIBCUSTCALC_STATIC= +# +CCWARN= -Wall +CCWERR= +CCOPT= ${DEBUG} +CCMISC= +# +LCC= gcc +CC= ${PURIFY} ${LCC} ${CCWERR} +# +MAKE= gmake +# +endif + ################ # SunOS target # ################ @@ -1847,7 +1889,7 @@ calc-dynamic-only: ${DYNAMIC_FIRST_TARGETS} ${EARLY_TARGETS} \ ${Q} for i in .static calc-static${EXT} ${SAMPLE_STATIC_TARGETS} \ libcalc.a custom/libcustcalc.a; do \ r="calc-dynamic-only"; \ - if [ -e "$$i" ]; then \ + if [ -r "$$i" ]; then \ echo "Found the static target $$i file. You must:" 1>&2; \ echo "" 1>&2; \ echo " ${MAKE} -f ${MAKE_FILE} clobber" 1>&2; \ @@ -1865,7 +1907,9 @@ calc-static-only: ${STATIC_FIRST_TARGETS} ${EARLY_TARGETS} \ ${CALC_STATIC_LIBS} calc-static${EXT} \ ${SAMPLE_STATIC_TARGETS} ${LATE_TARGETS} ${Q} for i in calc${EXT} ${SAMPLE_TARGETS}; do \ - if ! ${CMP} -s "$$i-static" "$$i"; then \ + if ${CMP} -s "$$i-static" "$$i"; then \ + ${TRUE}; \ + else \ ${RM} -f "$$i"; \ ${LN} "$$i-static" "$$i"; \ fi; \ @@ -1891,7 +1935,7 @@ calc-static-only: ${STATIC_FIRST_TARGETS} ${EARLY_TARGETS} \ ${Q} for i in .dynamic ${CALC_DYNAMIC_LIBS} ${SYM_DYNAMIC_LIBS} \ custom/libcustcalc${LIB_EXT_VERSION}; do \ r="calc-static-only"; \ - if [ -e "$$i" ]; then \ + if [ -r "$$i" ]; then \ echo "Found the dynamic target $$i file. You must:" 1>&2; \ echo "" 1>&2; \ echo " ${MAKE} -f ${MAKE_FILE} clobber" 1>&2; \ @@ -3027,7 +3071,7 @@ have_urandom.h: ${MAKE_FILE} echo '#define HAVE_URANDOM_H /* yes */' >> have_urandom.h; \ elif [ X"${HAVE_URANDOM_H}" = X"NO" ]; then \ echo '#undef HAVE_URANDOM_H /* no */' >> have_urandom.h; \ - elif [ -e /dev/urandom ] 2>/dev/null; then \ + elif [ -r /dev/urandom ] 2>/dev/null; then \ echo '#define HAVE_URANDOM_H /* yes */' >> have_urandom.h; \ else \ echo '#undef HAVE_URANDOM_H /* no */' >> have_urandom.h; \ @@ -4148,17 +4192,18 @@ clobber: custom/Makefile clean ${RM} -f libcustcalc.a ${RM} -f calc-static${EXT} ${RM} -f ${CALC_STATIC_LIBS} + ${RM} -f all ${V} echo '=-=-=-=-= Invoking $@ rule for help =-=-=-=-=' - -cd help; ${MAKE} -f Makefile ${HELP_PASSDOWN} clobber + -cd help; ${RM} -f all; ${MAKE} -f Makefile ${HELP_PASSDOWN} $@ ${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-=' ${V} echo '=-=-=-=-= Invoking $@ rule for cal =-=-=-=-=' - -cd cal; ${MAKE} -f Makefile ${CAL_PASSDOWN} clobber + -cd cal; ${RM} -f all; ${MAKE} -f Makefile ${CAL_PASSDOWN} $@ ${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-=' ${V} echo '=-=-=-=-= Invoking $@ rule for custom =-=-=-=-=' - cd custom; ${MAKE} -f Makefile ${CUSTOM_PASSDOWN} clobber + cd custom; ${RM} -f all; ${MAKE} -f Makefile ${CUSTOM_PASSDOWN} $@ ${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-=' ${V} echo '=-=-=-=-= Invoking $@ rule for cscript =-=-=-=-=' - cd cscript; ${MAKE} -f Makefile ${CSCRIPT_PASSDOWN} clobber + cd cscript; ${RM} -f all; ${MAKE} -f Makefile ${CSCRIPT_PASSDOWN} $@ ${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-=' ${V} echo remove files that are obsolete ${RM} -rf win32 build @@ -4166,7 +4211,7 @@ clobber: custom/Makefile clean ${RM} -f Makefile.simple ${RM} -f custom/Makefile #endif /* end of skip for non-Gnu makefiles */ - ${RM} -f .static .dynamic + ${RM} -f .static .dynamic calc-dynamic-only calc-static-only ${V} echo '=-=-=-=-= ${MAKE_FILE} end of $@ rule =-=-=-=-=' # install everything diff --git a/Makefile.simple b/Makefile.simple index 3e27715..ca69c59 100644 --- a/Makefile.simple +++ b/Makefile.simple @@ -39,8 +39,8 @@ # received a copy with calc; if not, write to Free Software Foundation, Inc. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # -MAKEFILE_REV= $$Revision: 30.25 $$ -# @(#) $Id: Makefile.ship,v 30.25 2007/09/29 16:57:48 chongo Exp $ +MAKEFILE_REV= $$Revision: 30.27 $$ +# @(#) $Id: Makefile.ship,v 30.27 2008/02/24 07:58:36 chongo Exp $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/Makefile.ship,v $ # # Under source code control: 1990/02/15 01:48:41 @@ -961,8 +961,8 @@ EXT= # The default calc versions # -VERSION= 2.12.2.2 -VERS= 2.12.2 +VERSION= 2.12.3.0 +VERS= 2.12.3 VER= 2.12 VE= 2 @@ -1551,7 +1551,7 @@ calc-dynamic-only: ${DYNAMIC_FIRST_TARGETS} ${EARLY_TARGETS} \ ${Q} for i in .static calc-static${EXT} ${SAMPLE_STATIC_TARGETS} \ libcalc.a custom/libcustcalc.a; do \ r="calc-dynamic-only"; \ - if [ -e "$$i" ]; then \ + if [ -r "$$i" ]; then \ echo "Found the static target $$i file. You must:" 1>&2; \ echo "" 1>&2; \ echo " ${MAKE} -f ${MAKE_FILE} clobber" 1>&2; \ @@ -1569,7 +1569,9 @@ calc-static-only: ${STATIC_FIRST_TARGETS} ${EARLY_TARGETS} \ ${CALC_STATIC_LIBS} calc-static${EXT} \ ${SAMPLE_STATIC_TARGETS} ${LATE_TARGETS} ${Q} for i in calc${EXT} ${SAMPLE_TARGETS}; do \ - if ! ${CMP} -s "$$i-static" "$$i"; then \ + if ${CMP} -s "$$i-static" "$$i"; then \ + ${TRUE}; \ + else \ ${RM} -f "$$i"; \ ${LN} "$$i-static" "$$i"; \ fi; \ @@ -1595,7 +1597,7 @@ calc-static-only: ${STATIC_FIRST_TARGETS} ${EARLY_TARGETS} \ ${Q} for i in .dynamic ${CALC_DYNAMIC_LIBS} ${SYM_DYNAMIC_LIBS} \ custom/libcustcalc${LIB_EXT_VERSION}; do \ r="calc-static-only"; \ - if [ -e "$$i" ]; then \ + if [ -r "$$i" ]; then \ echo "Found the dynamic target $$i file. You must:" 1>&2; \ echo "" 1>&2; \ echo " ${MAKE} -f ${MAKE_FILE} clobber" 1>&2; \ @@ -2725,7 +2727,7 @@ have_urandom.h: ${MAKE_FILE} echo '#define HAVE_URANDOM_H /* yes */' >> have_urandom.h; \ elif [ X"${HAVE_URANDOM_H}" = X"NO" ]; then \ echo '#undef HAVE_URANDOM_H /* no */' >> have_urandom.h; \ - elif [ -e /dev/urandom ] 2>/dev/null; then \ + elif [ -r /dev/urandom ] 2>/dev/null; then \ echo '#define HAVE_URANDOM_H /* yes */' >> have_urandom.h; \ else \ echo '#undef HAVE_URANDOM_H /* no */' >> have_urandom.h; \ @@ -3808,21 +3810,22 @@ clobber: custom/Makefile clean ${RM} -f libcustcalc.a ${RM} -f calc-static${EXT} ${RM} -f ${CALC_STATIC_LIBS} + ${RM} -f all ${V} echo '=-=-=-=-= Invoking $@ rule for help =-=-=-=-=' - -cd help; ${MAKE} -f Makefile ${HELP_PASSDOWN} clobber + -cd help; ${RM} -f all; ${MAKE} -f Makefile ${HELP_PASSDOWN} $@ ${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-=' ${V} echo '=-=-=-=-= Invoking $@ rule for cal =-=-=-=-=' - -cd cal; ${MAKE} -f Makefile ${CAL_PASSDOWN} clobber + -cd cal; ${RM} -f all; ${MAKE} -f Makefile ${CAL_PASSDOWN} $@ ${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-=' ${V} echo '=-=-=-=-= Invoking $@ rule for custom =-=-=-=-=' - cd custom; ${MAKE} -f Makefile.simple ${CUSTOM_PASSDOWN} clobber + cd custom; ${RM} -f all; ${MAKE} -f Makefile ${CUSTOM_PASSDOWN} $@ ${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-=' ${V} echo '=-=-=-=-= Invoking $@ rule for cscript =-=-=-=-=' - cd cscript; ${MAKE} -f Makefile ${CSCRIPT_PASSDOWN} clobber + cd cscript; ${RM} -f all; ${MAKE} -f Makefile ${CSCRIPT_PASSDOWN} $@ ${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-=' ${V} echo remove files that are obsolete ${RM} -rf win32 build - ${RM} -f .static .dynamic + ${RM} -f .static .dynamic calc-dynamic-only calc-static-only ${V} echo '=-=-=-=-= ${MAKE_FILE} end of $@ rule =-=-=-=-=' # install everything diff --git a/cal/regress.cal b/cal/regress.cal index 01c6fac..5beac7b 100644 --- a/cal/regress.cal +++ b/cal/regress.cal @@ -17,8 +17,8 @@ * 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.3 $ - * @(#) $Id: regress.cal,v 30.3 2007/07/11 22:58:26 chongo Exp $ + * @(#) $Revision: 30.4 $ + * @(#) $Id: regress.cal,v 30.4 2008/02/24 07:41:49 chongo Exp $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $ * * Under source code control: 1990/02/15 01:50:36 @@ -1412,7 +1412,39 @@ define test_functions() vrfy(isnum(systime()), '1206: isnum(systime())'); vrfy(isnum(usertime()), '1207: isnum(usertime())'); - print '1208: Ending test_functions'; + /* 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()'; diff --git a/custom/Makefile b/custom/Makefile index e0fcb61..342923e 100644 --- a/custom/Makefile +++ b/custom/Makefile @@ -18,8 +18,8 @@ # 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.14 $ -# @(#) $Id: Makefile.head,v 30.14 2007/09/06 08:08:39 chongo Exp $ +# @(#) $Revision: 30.16 $ +# @(#) $Id: Makefile.head,v 30.16 2008/02/24 07:58:36 chongo Exp $ # @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/Makefile.head,v $ # # Under source code control: 1997/03/09 02:28:54 @@ -366,8 +366,8 @@ EXT= # The default calc versions # -VERSION= 2.12.2.1 -VERS= 2.12.2 +VERSION= 2.12.3.0 +VERS= 2.12.3 VER= 2.12 VE= 2 @@ -632,6 +632,48 @@ MAKE= gmake # endif +################## +# OpenBSD target # +################## + +######################################################################## +# NOTE: You MUST either use gmake (GNU Make) or you must try your luck # +# with Makefile.simple and custom/Makefile.simple versions. # +# See HOWTO.INSTALL for more information. # +######################################################################## + +ifeq ($(target),OpenBSD) +# +BLD_TYPE= calc-dynamic-only +# +CC_SHARE= -fPIC +DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:/usr/local/lib +LD_SHARE= "-Wl,-rpath,${DEFAULT_LIB_INSTALL_PATH}" \ + "-Wl,-rpath-link,${DEFAULT_LIB_INSTALL_PATH}" +LIBCALC_SHLIB= -shared "-Wl,-soname,libcalc${LIB_EXT_VERSION}" +ifdef ALLOW_CUSTOM +LIBCUSTCALC_SHLIB= -shared "-Wl,-soname,libcustcalc${LIB_EXT_VERSION}" +else +LIBCUSTCALC_SHLIB= +endif +# +CC_STATIC= +LD_STATIC= +LIBCALC_STATIC= +LIBCUSTCALC_STATIC= +# +CCWARN= -Wall +CCWERR= +CCOPT= ${DEBUG} +CCMISC= +# +LCC= gcc +CC= ${PURIFY} ${LCC} ${CCWERR} +# +MAKE= gmake +# +endif + ################ # SunOS target # ################ diff --git a/custom/Makefile.head b/custom/Makefile.head index 53f71b8..5e4f051 100644 --- a/custom/Makefile.head +++ b/custom/Makefile.head @@ -18,8 +18,8 @@ # 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.14 $ -# @(#) $Id: Makefile.head,v 30.14 2007/09/06 08:08:39 chongo Exp $ +# @(#) $Revision: 30.16 $ +# @(#) $Id: Makefile.head,v 30.16 2008/02/24 07:58:36 chongo Exp $ # @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/Makefile.head,v $ # # Under source code control: 1997/03/09 02:28:54 @@ -366,8 +366,8 @@ EXT= # The default calc versions # -VERSION= 2.12.2.1 -VERS= 2.12.2 +VERSION= 2.12.3.0 +VERS= 2.12.3 VER= 2.12 VE= 2 diff --git a/custom/Makefile.simple b/custom/Makefile.simple index 9b13e73..8013593 100644 --- a/custom/Makefile.simple +++ b/custom/Makefile.simple @@ -18,8 +18,8 @@ # 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.14 $ -# @(#) $Id: Makefile.head,v 30.14 2007/09/06 08:08:39 chongo Exp $ +# @(#) $Revision: 30.16 $ +# @(#) $Id: Makefile.head,v 30.16 2008/02/24 07:58:36 chongo Exp $ # @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/Makefile.head,v $ # # Under source code control: 1997/03/09 02:28:54 @@ -351,8 +351,8 @@ EXT= # The default calc versions # -VERSION= 2.12.2.1 -VERS= 2.12.2 +VERSION= 2.12.3.0 +VERS= 2.12.3 VER= 2.12 VE= 2 diff --git a/version.c b/version.c index dc3f32a..5088ff1 100644 --- a/version.c +++ b/version.c @@ -19,8 +19,8 @@ * 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.5 $ - * @(#) $Id: version.c,v 30.5 2007/10/16 12:22:22 chongo Exp $ + * @(#) $Revision: 30.6 $ + * @(#) $Id: version.c,v 30.6 2008/02/24 07:58:36 chongo Exp $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/version.c,v $ * * Under source code control: 1990/05/22 11:00:58 @@ -48,8 +48,8 @@ static char *program; #define MAJOR_VER 2 /* major library version */ #define MINOR_VER 12 /* minor library version */ -#define MAJOR_PATCH 2 /* major software level under library version */ -#define MINOR_PATCH 2 /* minor software level or 0 if none */ +#define MAJOR_PATCH 3 /* major software level under library version */ +#define MINOR_PATCH 0 /* minor software level or 0 if not patched */ /* @@ -103,8 +103,6 @@ char *Copyright = "\n" * string does not contain the title, just: * * x.y.z.w - * x.y.z - * x.y */ char * version(void) @@ -121,15 +119,9 @@ version(void) /* * form the version buffer */ - if (MINOR_PATCH > 0) { - snprintf(verbuf, BUFSIZ, - "%d.%d.%d.%d", calc_major_ver, calc_minor_ver, - calc_major_patch, calc_minor_patch); - } else { - snprintf(verbuf, BUFSIZ, - "%d.%d.%d", calc_major_ver, - calc_minor_ver, calc_major_patch); - } + snprintf(verbuf, BUFSIZ, + "%d.%d.%d.%d", calc_major_ver, calc_minor_ver, + calc_major_patch, calc_minor_patch); /* * save the versions string into a newly malloced buffer diff --git a/zfunc.c b/zfunc.c index f863f54..5c58b44 100644 --- a/zfunc.c +++ b/zfunc.c @@ -19,8 +19,8 @@ * 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.1 $ - * @(#) $Id: zfunc.c,v 30.1 2007/03/16 11:09:46 chongo Exp $ + * @(#) $Revision: 30.2 $ + * @(#) $Id: zfunc.c,v 30.2 2008/02/24 07:41:49 chongo Exp $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/zfunc.c,v $ * * Under source code control: 1990/02/15 01:48:27 @@ -374,12 +374,28 @@ zcomb(ZVALUE z1, ZVALUE z2, ZVALUE *res) /* - * Compute the Jacobi function (p / q) for odd q. - * If q is prime then the result is: - * 1 if p == x^2 (mod q) for some x. - * -1 otherwise. - * If q is not prime, then the result is not meaningful if it is 1. - * This function returns 0 if q is even or q < 0. + * Compute the Jacobi function (m / n) for odd n. + * + * The property of the Jacobi function is: If n>2 is prime then + * + * the result is 1 if m == x^2 (mod n) for some x. + * otherwise the result is -1. + * + * If n is not prime, then the result does not prove that n is not prine + * when the value of the Jacobi is 1. + * + * Jacobi evaluation of (m / n), where n > 0 is odd AND m > 0 is odd: + * + * rule 0: (0 / n) == 0 + * rule 1: (1 / n) == 1 + * rule 2: (m / n) == (a / n) if m == a % n + * rule 3: (m / n) == (2*m / n) if n == 1 % 8 OR n == 7 % 8 + * rule 4: (m / n) == -(2*m / n) if n != 1 & 8 AND n != 7 % 8 + * rule 5: (m / n) == (n / m) if m == 3 % 4 AND n == 3 % 4 + * rule 6: (m / n) == -(n / m) if m != 3 % 4 OR n != 3 % 4 + * + * NOTE: This function returns 0 in invalid Jacobi parameters: + * m < 0 OR n is even OR n < 1. */ FLAG zjacobi(ZVALUE z1, ZVALUE z2) @@ -388,16 +404,16 @@ zjacobi(ZVALUE z1, ZVALUE z2) long lowbit; int val; + /* firewall */ + if (ziszero(z1) || zisneg(z1)) + return 0; if (ziseven(z2) || zisneg(z2)) return 0; + + /* assume a value of 1 unless we find otherwise */ + if (zisone(z1)) + return 1; val = 1; - if (ziszero(z1) || zisone(z1)) - return val; - if (zisunit(z1)) { - if ((*z2.v - 1) & 0x2) - val = -val; - return val; - } zcopy(z1, &p); zcopy(z2, &q); for (;;) { @@ -406,7 +422,8 @@ zjacobi(ZVALUE z1, ZVALUE z2) p = tmp; if (ziszero(p)) { zfree(p); - p = _one_; + zfree(q); + return 0; } if (ziseven(p)) { lowbit = zlowbit(p);