Release calc version 2.11.0t2

This commit is contained in:
Landon Curt Noll
1999-09-24 17:14:22 -07:00
parent bad4535616
commit 4b98d5ff0e
12 changed files with 416 additions and 47 deletions

129
BUGS
View File

@@ -89,3 +89,132 @@ Known problems or mis-features:
* There is some places in the source with obscure variable names
and not much in the way of comments. We need some major cleanup
and documentation.
* On a Dec Alpha, make check for version 2.11.0t1 core dumps:
From vandermj@molbio.sbphrd.com Fri Sep 24 06:15:28 1999
Subject: Re: calc version 2.11.0t1
Date: Fri, 24 Sep 1999 09:15:02 -0400
It dies as follows:
...
1802: a = surd(2,3)
1803: a == surd(2,3)
1804: surd_value(a) == 2+3i
Segmentation fault
dbx shows:
signal Segmentation fault at [objcall:155 +0xc,0x1200507b4] index = oap->actions[action];
(dbx) where
> 0 objcall(action = 14, v1 = 0x1400203d0, v2 = 0x1400203e0, v3 = (nil)) ["obj.c":155, 0x1200507b4]
1 comparevalue(v1 = 0x1400203d0, v2 = 0x1400203e0) ["value.c":2329, 0x12007f250]
2 o_eq() ["opcodes.c":2659, 0x12003728c]
3 calculate(fp = 0x14007fce0) ["opcodes.c":3614, 0x12003942c]
4 o_usercall(fp = 0x14007fce0, index = 39, argcount = 0) ["opcodes.c":2602, 0x120037080]
5 calculate(fp = 0x14003bfa0) ["opcodes.c":3622, 0x120039488]
6 evaluate(nestflag = 14) ["codegen.c":210, 0x120028768]
7 getcommands(toplevel = 536864560) ["codegen.c":158, 0x1200285bc]
8 getcommands(toplevel = 536864560) ["codegen.c":122, 0x1200284dc]
9 main() ["calc.c":279, 0x12001f61c]
However On 25-Sep-99 9:18, Ernest Bowen wrote:
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).
Any ideas on how to reconcile these different results?
* 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.
From: "Dr.D.J.Picton" <dave@aps5.ph.bham.ac.uk>
Date: Fri, 8 May 1998 10:54:43 +0100
Platform: Sun SPARCstation
Operating system: Solaris 2.5.1
Compiler: cc version 4.0 with -Xc option.
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
0xea19f96cdd568ad1084a17acc6103d92c0ef7708 not
0xf96cea198ad1dd5617ac084a3d92c6107708c0ef
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

13
CHANGES
View File

@@ -1,7 +1,5 @@
Following is the change from calc version 2.11.0t1 to date:
Fixed BSDI compile problems related to sys_errlist.
Removed the makefile symbol MAIN. Now forcing all funcions to correctly
be reclared main. To passify some old broken compilers, a return 0;
(instead of an exit(0);) is used at the end of main().
@@ -12,6 +10,17 @@ Following is the change from calc version 2.11.0t1 to date:
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
it gives up, calc_errno will output the middle of the calc_errno.h
header file. If ERRNO_DECL is -DERRNO_NO_DECL, or -DERRNO_STD_DECL
or -DERRNO_OLD_DECL then the Makefile will build the middle
of the calc_errno.h header file without calc_errno.c's help.
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.
Following is the change from calc version 2.10.3t5.38 to 2.11.0t0:

162
Makefile
View File

@@ -206,6 +206,39 @@ HAVE_MEMMOVE=
ALIGN32= -DMUST_ALIGN32
#ALIGN32= -UMUST_ALIGN32
# On most machines: errno sys_errlist and sys_nerr are declared
# by either <stdio.h> and/or <errno.h>. But some systems declare
# them somewhere else or do not declare them at all!
#
# If the system were doing a proper job in headers, this should declare them:
#
# #include <stdio.h>
# #include <errno.h>
#
# But one some systems one must explicitly declare them as:
#
# extern int errno;
# extern const char *const sys_errlist[];
# extern int sys_nerr;
#
# and on some old systems they must be explicitly and incorrectly declared as:
#
# extern int errno;
# extern char *sys_errlist[];
# extern int sys_nerr;
#
# ERRNO_DECL= let calc_errno.c determine how to declare them
# ERRNO_DECL= -DERRNO_NO_DECL headers declare them correctly
# ERRNO_DECL= -DERRNO_STD_DECL one must explicitly declare then
# ERRNO_DECL= -DERRNO_OLD_DECL one must explicitly & incorrectly declare them
#
# When in doubt, be safe leave ERRNO_DECL empty.
#
ERRNO_DECL=
#ERRNO_DECL= -DERRNO_NO_DECL
#ERRNO_DECL= -DERRNO_STD_DECL
#ERRNO_DECL= -DERRNO_OLD_DECL
# where to install binary files
#
BINDIR= /usr/local/bin
@@ -622,29 +655,6 @@ ALLOW_CUSTOM= -DCUSTOM
#
###
#
# BSDI's BSD/OS 2.0 (or later) set
#
# for better performance, set the following above:
# DEBUG= -O2
#
#CCWARN= -Wall -Wno-implicit -Wno-comment
#CCOPT= ${DEBUG} ${NO_SHARED}
#CCMISC= -ansi
#
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
#ICFLAGS= ${CCWARN} ${CCMISC}
#
#CCMAIN= ${ICFLAGS}
#CCSHS= ${CFLAGS}
#
#LCFLAGS=
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
#ILDFLAGS=
#
#CC= ${PURIFY} shlicc2
#
###
#
# Solaris 2.x Sun cc compiler
#
# for better performance, set the following above:
@@ -668,7 +678,7 @@ ALLOW_CUSTOM= -DCUSTOM
#
###
#
# Red Hat Linux 6.0
# Red Hat Linux 6.0 and BSDI's BSD/OS 4.0 (or later) set
#
# for better performance, set the following above:
# DEBUG= -O2
@@ -798,7 +808,7 @@ BUILD_H_SRC= align32.h args.h calcerr.h conf.h endian_calc.h \
fposval.h have_const.h have_fpos.h have_malloc.h \
have_memmv.h have_newstr.h have_offscl.h have_posscl.h \
have_stdlib.h have_string.h have_times.h have_uid_t.h \
have_unistd.h longbits.h longlong.h terminal.h
have_unistd.h longbits.h longlong.h terminal.h calc_errno.h
# we build these .c files during the make
#
@@ -810,7 +820,7 @@ BUILD_C_SRC= calcerr.c
#
UTIL_C_SRC= align32.c endian.c longbits.c have_newstr.c have_uid_t.c \
have_const.c have_stdvs.c have_varvs.c fposval.c have_fpos.c \
longlong.c have_offscl.c have_posscl.c have_memmv.c
longlong.c have_offscl.c have_posscl.c have_memmv.c calc_errno.c
# these awk and sed tools are used in the process of building BUILD_H_SRC
# and BUILD_C_SRC
@@ -824,16 +834,17 @@ UTIL_MISC_SRC= calcerr_h.sed calcerr_h.awk calcerr_c.sed calcerr_c.awk \
#
UTIL_OBJS= endian.o longbits.o have_newstr.o have_uid_t.o \
have_const.o fposval.o have_fpos.o longlong.o try_strarg.o \
have_stdvs.o have_varvs.o have_posscl.o have_memmv.o
have_stdvs.o have_varvs.o have_posscl.o have_memmv.o calc_errno.o
# these temp files may be created (and removed) during the build of BUILD_C_SRC
#
UTIL_TMP= ll_tmp fpos_tmp fposv_tmp const_tmp uid_tmp newstr_tmp vs_tmp
UTIL_TMP= ll_tmp fpos_tmp fposv_tmp const_tmp uid_tmp newstr_tmp vs_tmp \
calc_errno_tmp
# these utility progs may be used in the process of building BUILD_H_SRC
#
UTIL_PROGS= align32 fposval have_uid_t longlong have_const \
endian longbits have_newstr have_stdvs have_varvs
endian longbits have_newstr have_stdvs have_varvs calc_errno
# These files are required by the regress.cal regression test.
#
@@ -1804,6 +1815,98 @@ args.h: have_stdvs.c have_varvs.c have_string.h have_unistd.h have_string.h
true; \
fi
calc_errno.h: calc_errno.c ${MAKE_FILE}
-${Q}rm -f calc_errno.h calc_errno calc_errno_tmp
${Q}echo 'forming calc_errno.h'
${Q}echo '/*' > calc_errno.h
${Q}echo ' * DO NOT EDIT -- generated by the Makefile' >> calc_errno.h
${Q}echo ' */' >> calc_errno.h
${Q}echo '' >> calc_errno.h
${Q}echo '' >> calc_errno.h
${Q}echo '#if !defined(__CALC_ERRNO_H__)' >> calc_errno.h
${Q}echo '#define __CALC_ERRNO_H__' >> calc_errno.h
${Q}echo '' >> calc_errno.h
${Q}echo '' >> calc_errno.h
-${Q}if [ X"${ERRNO_DECL}" = X"-DERRNO_NO_DECL" ]; then \
echo '/*' >> calc_errno.h; \
echo ' * The calc Makefile explicitly told us' >> calc_errno.h; \
echo ' * how to declare errno and friends.' >> calc_errno.h; \
echo ' */' >> calc_errno.h; \
echo '' >> calc_errno.h; \
echo '#include <stdio.h>' >> calc_errno.h; \
echo '#include <errno.h>' >> calc_errno.h; \
elif [ X"${ERRNO_DECL}" = X"-DERRNO_STD_DECL" ]; then \
echo '/*' >> calc_errno.h; \
echo ' * The calc Makefile explicitly told us' >> calc_errno.h; \
echo ' * how to declare errno and friends.' >> calc_errno.h; \
echo ' */' >> calc_errno.h; \
echo '' >> calc_errno.h; \
echo 'extern int errno; ' \
'/* last system error */' >> calc_errno.h; \
echo 'extern const char *const sys_errlist[];' \
' /* system error messages*/' >> calc_errno.h; \
echo 'extern int sys_nerr; ' \
'/* number of system errors */' >> calc_errno.h; \
elif [ X"${ERRNO_DECL}" = X"-DERRNO_OLD_DECL" ]; then \
echo '/*' >> calc_errno.h; \
echo ' * The calc Makefile explicitly told us' >> calc_errno.h; \
echo ' * how to declare errno and friends.' >> calc_errno.h; \
echo ' */' >> calc_errno.h; \
echo '' >> calc_errno.h; \
echo 'extern int errno; ' \
'/* last system error */' >> calc_errno.h; \
echo 'extern char *sys_errlist[];' \
' /* system error messages*/' >> calc_errno.h; \
echo 'extern int sys_nerr; ' \
'/* number of system errors */' >> calc_errno.h; \
else \
${CC} ${CCMAIN} -DTRY_ERRNO_NO_DECL \
calc_errno.c -o calc_errno 2>calc_errno_tmp; \
if [ -x ./calc_errno ]; then \
./calc_errno >> calc_errno.h; \
else \
${CC} ${CCMAIN} -DTRY_ERRNO_STD_DECL \
calc_errno.c -o calc_errno 2>calc_errno_tmp; \
if [ -x ./calc_errno ]; then \
./calc_errno >> calc_errno.h; \
else \
${CC} ${CCMAIN} -DTRY_ERRNO_OLD_DECL \
calc_errno.c -o calc_errno 2>calc_errno_tmp; \
if [ -x ./calc_errno ]; then \
./calc_errno >> calc_errno.h; \
else \
echo '/*' >> calc_errno.h; \
echo ' * We were unable to to determine' >> calc_errno.h; \
echo ' * how to declare errno and friends.' >> calc_errno.h; \
echo ' * So we will guess this will work' >> calc_errno.h; \
echo ' * and hope for the best.' >> calc_errno.h; \
echo ' */' >> calc_errno.h; \
echo '' >> calc_errno.h; \
echo 'extern int errno; ' \
'/* last system error */' >> calc_errno.h; \
echo 'extern const char *const sys_errlist[];' \
' /* system error messages*/' >> calc_errno.h; \
echo 'extern int sys_nerr; ' \
'/* number of system errors */' >> calc_errno.h; \
fi; \
fi; \
fi; \
fi
${Q}echo '' >> calc_errno.h
${Q}echo '' >> calc_errno.h
${Q}echo '#endif /* !__CALC_ERRNO_H__ */' >> calc_errno.h
-${Q}rm -f calc_errno calc_errno_tmp
${Q}echo 'calc_errno.h formed'
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= start of $@ =-=-='; \
cat $@; \
echo '=-=-= end of $@ =-=-='; \
echo ''; \
else \
true; \
fi
calcerr.h: calcerr.tbl calcerr_h.sed calcerr_h.awk ${MAKE_FILE}
-${Q}rm -f calerr.h
${Q}echo 'forming calcerr.h'
@@ -2190,6 +2293,7 @@ env:
@echo "HAVE_UID_T=${HAVE_UID_T}"; echo ""
@echo "HAVE_NEWSTR=${HAVE_NEWSTR}"; echo ""
@echo "ALIGN32=${ALIGN32}"; echo ""
@echo "ERRNO_DECL=${ERRNO_DECL}"; echo ""
@echo "BINDIR=${BINDIR}"; echo ""
@echo "TOPDIR=${TOPDIR}"; echo ""
@echo "LIBDIR=${LIBDIR}"; echo ""

123
calc_errno.c Normal file
View File

@@ -0,0 +1,123 @@
/*
* errno - Determine how to declare errno, sys_errlist and sys_nerr
*
* On most machines: errno sys_errlist and sys_nerr are declared
* by either <stdio.h> and/or <errno.h>. But some systems declare
* them somewhere else or do not declare them at all!
*
* If the system were doing a proper job in headers, this should declare them:
*
* #include <stdio.h>
* #include <errno.h>
*
* But one some systems one must explicitly declare them as:
*
* extern int errno;
* extern const char *const sys_errlist[];
* extern int sys_nerr;
*
* and on some old systems they must be explicitly and incorrectly declared as:
*
* extern int errno;
* extern char *sys_errlist[];
* extern int sys_nerr;
*
* The purpose of this utility is try and find the right way to declare
* them and to output the middle of a header file called calc_errno.h.
*/
/*
* Copyright (c) 1999 by Landon Curt Noll. All Rights Reserved.
*
* Permission to use, copy, modify, and distribute this software and
* its documentation for any purpose and without fee is hereby granted,
* provided that the above copyright, this permission notice and text
* this comment, and the disclaimer below appear in all of the following:
*
* supporting documentation
* source copies
* source works derived from this source
* binaries derived from this source or from derived source
*
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*
* chongo was here /\../\
*/
#include <stdio.h>
#if defined(TRY_ERRNO_NO_DECL)
# include <errno.h>
#endif /* TRY_ERRNO_NO_DECL */
int
main(void)
{
#if defined(TRY_ERRNO_NO_DECL)
printf("/*\n");
printf(" * The following comments were produced by calc_errno\n");
printf(" * in an effort to see if these values were correctly\n");
printf(" * declared when calc_errno.c was compiled.\n");
printf(" */\n\n");
printf("/* Initially errno is %d */\n", errno);
printf("/* There are %d entries in sys_errlist[] */\n", sys_nerr);
printf("/* The 2nd sys_errlist entry is \"%s\" */\n\n", sys_errlist[1]);
printf("/*\n");
printf(" * Based on the above, calc_errno now knows\n");
printf(" * how to declare errno and friends.\n");
printf(" */\n\n");
printf("#include <stdio.h>\n");
printf("#include <errno.h>\n");
#elif defined(TRY_ERRNO_OLD_DECL)
extern int errno; /* last system error */
extern char *sys_errlist[]; /* system error messages */
extern int sys_nerr; /* number of system errors*/
printf("/*\n");
printf(" * The following comments were produced by calc_errno\n");
printf(" * in an effort to see if these values were correctly\n");
printf(" * declared when calc_errno.c was compiled.\n");
printf(" */\n\n");
printf("/* Initially errno is %d */\n", errno);
printf("/* There are %d entries in sys_errlist[] */\n", sys_nerr);
printf("/* The 2nd sys_errlist entry is \"%s\" */\n\n", sys_errlist[1]);
printf("/*\n");
printf(" * Based on the above, calc_errno now knows\n");
printf(" * how to declare errno and friends.\n");
printf(" */\n\n");
printf("extern int errno;\t\t/* last system error */\n");
printf("extern char *sys_errlist[];\t"
"/* system error messages */\n");
printf("extern int sys_nerr;\t\t/* number of system errors*/\n");
#else /* assume defined(TRY_ERRNO_STD_DECL) */
extern int errno; /* last system error */
extern const char *const sys_errlist[]; /* system error messages */
extern int sys_nerr; /* number of system errors*/
printf("/*\n");
printf(" * The following comments were produced by calc_errno\n");
printf(" * in an effort to see if these values were correctly\n");
printf(" * declared when calc_errno.c was compiled.\n");
printf(" */\n\n");
printf("/* Initially errno is %d */\n", errno);
printf("/* There are %d entries in sys_errlist[] */\n", sys_nerr);
printf("/* The 2nd sys_errlist entry is \"%s\" */\n\n", sys_errlist[1]);
printf("/*\n");
printf(" * Based on the above, calc_errno now knows\n");
printf(" * how to declare errno and friends.\n");
printf(" */\n\n");
printf("extern int errno;\t\t\t/* last system error */\n");
printf("extern const char *const sys_errlist[];\t"
"/* system error messages */\n");
printf("extern int sys_nerr;\t\t\t/* number of system errors*/\n");
#endif
/* exit(0); */
return 0;
}

8
file.c
View File

@@ -1141,6 +1141,7 @@ rewindall(void)
*
* NOTE: Does not support negative file positions.
*/
/*ARGSUSED*/
static ZVALUE
filepos2z(FILEPOS pos)
{
@@ -1493,6 +1494,7 @@ setloc(FILEID id, ZVALUE zpos)
* returns:
* file size as a ZVALUE
*/
/*ARGSUSED*/
static ZVALUE
off_t2z(off_t siz)
{
@@ -1555,6 +1557,7 @@ dev2z(dev_t dev)
* returns:
* file size as a ZVALUE
*/
/*ARGSUSED*/
static ZVALUE
inode2z(ino_t inode)
{
@@ -1841,7 +1844,8 @@ getscanfield(FILE *fp, BOOL skip, unsigned int width, int scannum, char *scanptr
if (c == EOF || c == '\0')
break;
chnum++;
if(scannum && (memchr(scanptr,c,scannum)==NULL) ^ comp)
if(scannum &&
((memchr(scanptr,c,scannum)==NULL) ^ comp))
break;
if (!skip) {
*b++ = c;
@@ -1918,7 +1922,7 @@ getscanwhite(FILE *fp, BOOL skip, unsigned int width, int scannum, char **strptr
if (c == EOF || c == '\0')
break;
chnum++;
if(scannum && !isspace(c) ^ comp)
if(scannum && (!isspace(c) ^ comp))
break;
if (!skip) {
*b++ = c;

4
func.c
View File

@@ -10,15 +10,15 @@
#include <stdio.h>
#include <ctype.h>
#include <sys/types.h>
#include <errno.h>
#if defined(FUNCLIST)
#include <stdio.h>
#define CONST /* disabled for FUNCLIST in case NATIVE_CC doesn't have it */
#else /* FUNCLIST */
#include "calc_errno.h"
#include "have_unistd.h"
#if defined(HAVE_UNISTD_H)
#include <unistd.h>

View File

@@ -241,8 +241,8 @@ convhex2z(char *hex)
/* slen is even now */
/* eat two hex chars at a time until the HALF is full */
for (; (slen % (BASEB/4)) != 0; slen -= 2) {
*hp = ((*hp<<8) | hex2bin(*sp++, *sp++));
for (; (slen % (BASEB/4)) != 0; slen -= 2, sp += 2) {
*hp = ((*hp<<8) | hex2bin(sp[0], sp[1]));
}
/* move on to the next HALF */

View File

@@ -1284,7 +1284,7 @@ qcfsim(NUMBER *q, long rnd)
zmodinv(q->num, q->den, &den1);
if (s >= 0) {
zsub(q->den, den1, &den2);
if (s > 0 || ((zrel(den1, den2) < 0) ^ !(rnd & 16))) {
if (s > 0 || ((zrel(den1, den2) < 0) ^ (!(rnd & 16)))) {
zfree(den1);
res->den = den2;
zmul(den2, q->num, &tmp1);

View File

@@ -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 "1" /* test number or empty string if no patch */
#define MINOR_PATCH "2" /* test number or empty string if no patch */
/*
* calc version constants

View File

@@ -1522,7 +1522,7 @@ zsqrt(ZVALUE z, ZVALUE *dest, long rnd)
u = (HALF)(s ? BASE1 : 0);
if (k < BASEB) {
A[m1 - 1] = (HALF)(e >> (BASEB - 1));
A[m1 - 2] = (HALF)(e << 1 | (s > 0));
A[m1 - 2] = ((HALF)(e << 1) | (HALF)(s > 0));
A[m1 - 3] = (HALF)(f >> BASEB);
A[m1 - 4] = (HALF)f;
m = m1 - 2;
@@ -1531,7 +1531,7 @@ zsqrt(ZVALUE z, ZVALUE *dest, long rnd)
else {
A[m1 - 1] = 1;
A[m1 - 2] = (HALF)(e >> (BASEB - 1));
A[m1 - 3] = (HALF)(e << 1 | (s > 0));
A[m1 - 3] = ((HALF)(e << 1) | (HALF)(s > 0));
A[m1 - 4] = u;
A[m1 - 5] = (HALF)(f >> BASEB);
A[m1 - 6] = (HALF)f;
@@ -1585,7 +1585,7 @@ zsqrt(ZVALUE z, ZVALUE *dest, long rnd)
if (x & TOPHALF)
a[1] |= 1;
}
*a = (HALF)((x << 1) | (u > 0));
*a = ((HALF)(x << 1) | (HALF)(u > 0));
}
else
*a = u;

View File

@@ -778,8 +778,8 @@ small_factor(ZVALUE z, FULL limit)
#if BASEB == 32
div.v[0] = (HALF)factor;
#else
div.v[0] = (factor & BASE1);
div.v[1] = (factor >> BASEB);
div.v[0] = (HALF)(factor & BASE1);
div.v[1] = (HALF)(factor >> BASEB);
#endif
if (zdivides(z, div))
@@ -1483,8 +1483,8 @@ zlowfactor(ZVALUE z, long count)
#if BASEB == 32
div.v[0] = (HALF)factor;
#else
div.v[0] = (factor & BASE1);
div.v[1] = (factor >> BASEB);
div.v[0] = (HALF)(factor & BASE1);
div.v[1] = (HALF)(factor >> BASEB);
#endif
if (zdivides(z, div))

View File

@@ -1733,7 +1733,7 @@ zsrandom2(CONST ZVALUE seed, CONST ZVALUE newn)
math_error("srandom newn == 0 reserved for future use");
/*NOTREACHED*/
}
set = z1tol(newn);
set = (HALF)z1tol(newn);
if (!zistiny(newn) || set > BLUM_PREGEN) {
math_error("srandom small newn must be [1,20]");
/*NOTREACHED*/