mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
97e9429000 | ||
|
1ce630ac19 | ||
|
4b98d5ff0e |
82
BUGS
82
BUGS
@@ -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
|
||||||
|
|
||||||
@@ -89,3 +77,51 @@ Known problems or mis-features:
|
|||||||
* There is some places in the source with obscure variable names
|
* 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 not much in the way of comments. We need some major cleanup
|
||||||
and documentation.
|
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]
|
||||||
|
|
||||||
|
Michel van der List reports that he was using the Dec compiler.
|
||||||
|
|
||||||
|
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).
|
||||||
|
|
||||||
|
Ernest Bowen was using gcc.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Any more information on calc core dumps compiled with Dec's cc compiler
|
||||||
|
would be most appreciated!
|
||||||
|
80
CHANGES
80
CHANGES
@@ -1,16 +1,86 @@
|
|||||||
Following is the change from calc version 2.11.0t1 to date:
|
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 functions to correctly
|
||||||
|
be declared main. To satisfy some old broken compilers, a return 0;
|
||||||
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().
|
(instead of an exit(0);) is used at the end of main().
|
||||||
|
|
||||||
A few of files that were added to calc used 4 character indentation
|
A few of files that were added to calc used 4 character indentation
|
||||||
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.
|
||||||
|
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.
|
||||||
|
|
||||||
|
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 a bug and applied a fix that was reported by Ernest Bowen
|
||||||
|
<ernie@turing.une.edu.au>. Added regression tests 1103 to 1112.
|
||||||
|
|
||||||
|
Fixed a bug in version.c related to MINOR_PATCHs in both the
|
||||||
|
empty and non-empty MINOR_PATCH cases.
|
||||||
|
|
||||||
|
Fixed malloc and bad storage issues reported by Michel van der List
|
||||||
|
<vanderlistmj@sbphrd.com>.
|
||||||
|
|
||||||
|
Fixed some problems related to path processing while opening files.
|
||||||
|
Under extreme cases, an excessively long filename or CALCPATH value
|
||||||
|
could create problems. Placed guards in opensearchfile() function
|
||||||
|
in input.c to catch these cases.
|
||||||
|
|
||||||
|
Fixed cases were malloc failures were silently ignored in input.c.
|
||||||
|
|
||||||
|
Eliminated the PATHSIZE limit and the PATHSIZE symbol.
|
||||||
|
|
||||||
|
Added MAX_CALCRC to limit the length of the $CALCRC environment
|
||||||
|
variable to 1024 chars.
|
||||||
|
|
||||||
|
Fixed the magic number relating to the initial number of constants
|
||||||
|
declared by initconstants(). It is now related to the length
|
||||||
|
of the initnumbs[] NUMBER array.
|
||||||
|
|
||||||
|
Added a 'Dec Alpha / Compaq Tru64 cc (non-gnu) compiler set'
|
||||||
|
section to the main Makefile.
|
||||||
|
|
||||||
|
Fixed a string handling bug discovered by Dr.D.J.Picton
|
||||||
|
<dave@aps5.ph.bham.ac.uk> in the custom demo code.
|
||||||
|
|
||||||
|
Added FORCE_STDC symbol. When defined it will force __STDC__ like
|
||||||
|
conditions. Thus for compilers with as the Solaris cc compiler
|
||||||
|
that are ANSI-like but still define __STDC__ as 0, one can use
|
||||||
|
-DFORCE_STDC and make use of ANSI-like features.
|
||||||
|
|
||||||
|
Removed the CCSHS symbol from the Makefile. The shs.c and shs1.c
|
||||||
|
files are now compiled with full ${CFLAGS}.
|
||||||
|
|
||||||
|
The custom.c file is now compiled with full ${CFLAGS}.
|
||||||
|
|
||||||
|
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
53
HOWTO.INSTALL
Normal 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
|
314
Makefile
314
Makefile
@@ -206,6 +206,39 @@ HAVE_MEMMOVE=
|
|||||||
ALIGN32= -DMUST_ALIGN32
|
ALIGN32= -DMUST_ALIGN32
|
||||||
#ALIGN32= -UMUST_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
|
# where to install binary files
|
||||||
#
|
#
|
||||||
BINDIR= /usr/local/bin
|
BINDIR= /usr/local/bin
|
||||||
@@ -281,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=
|
||||||
@@ -483,7 +517,6 @@ ALLOW_CUSTOM= -DCUSTOM
|
|||||||
# ICFLAGS are given to ${CC} for intermediate progs
|
# ICFLAGS are given to ${CC} for intermediate progs
|
||||||
#
|
#
|
||||||
# CCMAIN are flags for ${CC} when files with main() instead of CFLAGS
|
# CCMAIN are flags for ${CC} when files with main() instead of CFLAGS
|
||||||
# CCSHS are flags given to ${CC} for compiling shs.c & shs1.c instead of CFLAGS
|
|
||||||
#
|
#
|
||||||
# LCFLAGS are CC-style flags for ${LINT}
|
# LCFLAGS are CC-style flags for ${LINT}
|
||||||
# LDFLAGS are flags given to ${CC} for linking .o files
|
# LDFLAGS are flags given to ${CC} for linking .o files
|
||||||
@@ -493,6 +526,53 @@ ALLOW_CUSTOM= -DCUSTOM
|
|||||||
#
|
#
|
||||||
###
|
###
|
||||||
#
|
#
|
||||||
|
# Linux set
|
||||||
|
#
|
||||||
|
# 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}
|
||||||
|
#
|
||||||
|
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=
|
||||||
|
#
|
||||||
|
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||||
|
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||||
|
#
|
||||||
|
#CCMAIN= ${ICFLAGS}
|
||||||
|
#
|
||||||
|
#LCFLAGS=
|
||||||
|
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||||
|
#ILDFLAGS=
|
||||||
|
#
|
||||||
|
#CC= ${PURIFY} gcc
|
||||||
|
#CC= ${PURIFY} gcc2
|
||||||
|
#
|
||||||
|
###
|
||||||
|
#
|
||||||
# common cc set
|
# common cc set
|
||||||
#
|
#
|
||||||
#CCWARN=
|
#CCWARN=
|
||||||
@@ -503,38 +583,6 @@ ALLOW_CUSTOM= -DCUSTOM
|
|||||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||||
#
|
#
|
||||||
#CCMAIN= ${ICFLAGS}
|
#CCMAIN= ${ICFLAGS}
|
||||||
#CCSHS= ${CFLAGS}
|
|
||||||
#
|
|
||||||
#LCFLAGS=
|
|
||||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
|
||||||
#ILDFLAGS=
|
|
||||||
#
|
|
||||||
#CC= ${PURIFY} cc
|
|
||||||
#
|
|
||||||
###
|
|
||||||
#
|
|
||||||
# SGI IRIX5.3 (or earlier) -o32 C Compiler
|
|
||||||
#
|
|
||||||
# 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
|
|
||||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
|
||||||
#CCMISC= -use_readonly_const
|
|
||||||
#
|
|
||||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
|
||||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
|
||||||
#
|
|
||||||
#CCMAIN= ${ICFLAGS}
|
|
||||||
#CCSHS= ${CFLAGS}
|
|
||||||
#
|
#
|
||||||
#LCFLAGS=
|
#LCFLAGS=
|
||||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||||
@@ -566,7 +614,6 @@ ALLOW_CUSTOM= -DCUSTOM
|
|||||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||||
#
|
#
|
||||||
#CCMAIN= ${ICFLAGS}
|
#CCMAIN= ${ICFLAGS}
|
||||||
#CCSHS=
|
|
||||||
#
|
#
|
||||||
#LCFLAGS=
|
#LCFLAGS=
|
||||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||||
@@ -592,7 +639,6 @@ ALLOW_CUSTOM= -DCUSTOM
|
|||||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||||
#
|
#
|
||||||
#CCMAIN= ${ICFLAGS}
|
#CCMAIN= ${ICFLAGS}
|
||||||
#CCSHS= ${CFLAGS}
|
|
||||||
#
|
#
|
||||||
#LCFLAGS=
|
#LCFLAGS=
|
||||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||||
@@ -612,7 +658,6 @@ ALLOW_CUSTOM= -DCUSTOM
|
|||||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||||
#
|
#
|
||||||
#CCMAIN= ${ICFLAGS}
|
#CCMAIN= ${ICFLAGS}
|
||||||
#CCSHS= ${CFLAGS}
|
|
||||||
#
|
#
|
||||||
#LCFLAGS=
|
#LCFLAGS=
|
||||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||||
@@ -622,43 +667,22 @@ ALLOW_CUSTOM= -DCUSTOM
|
|||||||
#
|
#
|
||||||
###
|
###
|
||||||
#
|
#
|
||||||
# BSDI's BSD/OS 2.0 (or later) set
|
# Solaris Sun cc compiler 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:
|
# for better performance, set the following above:
|
||||||
# DEBUG= -O
|
# DEBUG= -O
|
||||||
#
|
#
|
||||||
|
# We need -DFORCE_STDC to make use of ANSI-C like features and
|
||||||
|
# to avoid the use of -Xc (which as a lose performance wise).
|
||||||
|
#
|
||||||
#CCWARN=
|
#CCWARN=
|
||||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||||
#CCMISC=-Xc
|
#CCMISC= -DFORCE_STDC
|
||||||
#
|
#
|
||||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||||
#
|
#
|
||||||
#CCMAIN= ${ICFLAGS}
|
#CCMAIN= ${ICFLAGS}
|
||||||
#CCSHS= ${CFLAGS}
|
|
||||||
#
|
#
|
||||||
#LCFLAGS=
|
#LCFLAGS=
|
||||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||||
@@ -668,30 +692,7 @@ ALLOW_CUSTOM= -DCUSTOM
|
|||||||
#
|
#
|
||||||
###
|
###
|
||||||
#
|
#
|
||||||
# Red Hat Linux 6.0
|
# 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
|
||||||
@@ -704,14 +705,34 @@ CC= ${PURIFY} gcc
|
|||||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||||
#
|
#
|
||||||
#CCMAIN= ${ICFLAGS}
|
#CCMAIN= ${ICFLAGS}
|
||||||
#CCSHS= ${CFLAGS}
|
|
||||||
#
|
#
|
||||||
#LCFLAGS=
|
#LCFLAGS=
|
||||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||||
#ILDFLAGS=
|
#ILDFLAGS=
|
||||||
#
|
#
|
||||||
#CC= ${PURIFY} gcc
|
#CC= ${PURIFY} gcc
|
||||||
#CC= ${PURIFY} gcc2
|
#
|
||||||
|
###
|
||||||
|
#
|
||||||
|
# Dec Alpha / Compaq Tru64 cc (non-gnu) compiler set
|
||||||
|
#
|
||||||
|
# for better performance, set the following above:
|
||||||
|
# DEBUG= -O2
|
||||||
|
#
|
||||||
|
#CCWARN=
|
||||||
|
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||||
|
#CCMISC=
|
||||||
|
#
|
||||||
|
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||||
|
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||||
|
#
|
||||||
|
#CCMAIN= ${ICFLAGS}
|
||||||
|
#
|
||||||
|
#LCFLAGS=
|
||||||
|
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||||
|
#ILDFLAGS=
|
||||||
|
#
|
||||||
|
#CC= ${PURIFY} cc
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#-=-=-=-=-=-=-=-=- Be careful if you change something below -=-=-=-=-=-=-=-=-#
|
#-=-=-=-=-=-=-=-=- Be careful if you change something below -=-=-=-=-=-=-=-=-#
|
||||||
@@ -798,7 +819,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 \
|
fposval.h have_const.h have_fpos.h have_malloc.h \
|
||||||
have_memmv.h have_newstr.h have_offscl.h have_posscl.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_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
|
# we build these .c files during the make
|
||||||
#
|
#
|
||||||
@@ -810,7 +831,7 @@ BUILD_C_SRC= calcerr.c
|
|||||||
#
|
#
|
||||||
UTIL_C_SRC= align32.c endian.c longbits.c have_newstr.c have_uid_t.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 \
|
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
|
# these awk and sed tools are used in the process of building BUILD_H_SRC
|
||||||
# and BUILD_C_SRC
|
# and BUILD_C_SRC
|
||||||
@@ -824,16 +845,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 \
|
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_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
|
# 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
|
# these utility progs may be used in the process of building BUILD_H_SRC
|
||||||
#
|
#
|
||||||
UTIL_PROGS= align32 fposval have_uid_t longlong have_const \
|
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.
|
# These files are required by the regress.cal regression test.
|
||||||
#
|
#
|
||||||
@@ -909,7 +931,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
|
||||||
#
|
#
|
||||||
@@ -962,17 +984,11 @@ calc.o: calc.c ${MAKE_FILE}
|
|||||||
${CC} ${CCMAIN} ${CCOPT} ${ALLOW_CUSTOM} -c calc.c
|
${CC} ${CCMAIN} ${CCOPT} ${ALLOW_CUSTOM} -c calc.c
|
||||||
|
|
||||||
custom.o: custom.c ${MAKE_FILE}
|
custom.o: custom.c ${MAKE_FILE}
|
||||||
${CC} ${CCOPT} ${ALLOW_CUSTOM} -c custom.c
|
${CC} ${CFLAGS} ${ALLOW_CUSTOM} -c custom.c
|
||||||
|
|
||||||
hist.o: hist.c ${MAKE_FILE}
|
hist.o: hist.c ${MAKE_FILE}
|
||||||
${CC} ${CFLAGS} ${TERMCONTROL} -c hist.c
|
${CC} ${CFLAGS} ${TERMCONTROL} -c hist.c
|
||||||
|
|
||||||
shs.o: shs.c ${MAKE_FILE}
|
|
||||||
${CC} ${CCSHS} -c shs.c
|
|
||||||
|
|
||||||
shs1.o: shs1.c ${MAKE_FILE}
|
|
||||||
${CC} ${CCSHS} -c shs1.c
|
|
||||||
|
|
||||||
func.o: func.c ${MAKE_FILE}
|
func.o: func.c ${MAKE_FILE}
|
||||||
${CC} ${CFLAGS} ${ALLOW_CUSTOM} -c func.c
|
${CC} ${CFLAGS} ${ALLOW_CUSTOM} -c func.c
|
||||||
|
|
||||||
@@ -1804,6 +1820,98 @@ args.h: have_stdvs.c have_varvs.c have_string.h have_unistd.h have_string.h
|
|||||||
true; \
|
true; \
|
||||||
fi
|
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}
|
calcerr.h: calcerr.tbl calcerr_h.sed calcerr_h.awk ${MAKE_FILE}
|
||||||
-${Q}rm -f calerr.h
|
-${Q}rm -f calerr.h
|
||||||
${Q}echo 'forming calcerr.h'
|
${Q}echo 'forming calcerr.h'
|
||||||
@@ -2190,6 +2298,7 @@ env:
|
|||||||
@echo "HAVE_UID_T=${HAVE_UID_T}"; echo ""
|
@echo "HAVE_UID_T=${HAVE_UID_T}"; echo ""
|
||||||
@echo "HAVE_NEWSTR=${HAVE_NEWSTR}"; echo ""
|
@echo "HAVE_NEWSTR=${HAVE_NEWSTR}"; echo ""
|
||||||
@echo "ALIGN32=${ALIGN32}"; echo ""
|
@echo "ALIGN32=${ALIGN32}"; echo ""
|
||||||
|
@echo "ERRNO_DECL=${ERRNO_DECL}"; echo ""
|
||||||
@echo "BINDIR=${BINDIR}"; echo ""
|
@echo "BINDIR=${BINDIR}"; echo ""
|
||||||
@echo "TOPDIR=${TOPDIR}"; echo ""
|
@echo "TOPDIR=${TOPDIR}"; echo ""
|
||||||
@echo "LIBDIR=${LIBDIR}"; echo ""
|
@echo "LIBDIR=${LIBDIR}"; echo ""
|
||||||
@@ -2224,7 +2333,6 @@ env:
|
|||||||
@echo "CFLAGS=${CFLAGS}"; echo ""
|
@echo "CFLAGS=${CFLAGS}"; echo ""
|
||||||
@echo "ICFLAGS=${ICFLAGS}"; echo ""
|
@echo "ICFLAGS=${ICFLAGS}"; echo ""
|
||||||
@echo "CCMAIN=${CCMAIN}"; echo ""
|
@echo "CCMAIN=${CCMAIN}"; echo ""
|
||||||
@echo "CCSHS=${CCSHS}"; echo ""
|
|
||||||
@echo "LCFLAGS=${LCFLAGS}"; echo ""
|
@echo "LCFLAGS=${LCFLAGS}"; echo ""
|
||||||
@echo "LDFLAGS=${LDFLAGS}"; echo ""
|
@echo "LDFLAGS=${LDFLAGS}"; echo ""
|
||||||
@echo "ILDFLAGS=${ILDFLAGS}"; echo ""
|
@echo "ILDFLAGS=${ILDFLAGS}"; echo ""
|
||||||
|
5
README
5
README
@@ -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
|
||||||
|
60
README.FIRST
60
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
|
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
|
||||||
|
6
alloc.h
6
alloc.h
@@ -17,7 +17,7 @@
|
|||||||
#ifdef HAVE_MALLOC_H
|
#ifdef HAVE_MALLOC_H
|
||||||
# include <malloc.h>
|
# include <malloc.h>
|
||||||
#else
|
#else
|
||||||
# if defined(__STDC__) && __STDC__ != 0
|
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
||||||
extern void *malloc();
|
extern void *malloc();
|
||||||
extern void *realloc();
|
extern void *realloc();
|
||||||
extern void free();
|
extern void free();
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
# if defined(HAVE_NEWSTR)
|
# if defined(HAVE_NEWSTR)
|
||||||
extern void *memcpy();
|
extern void *memcpy();
|
||||||
extern void *memset();
|
extern void *memset();
|
||||||
# if defined(__STDC__) && __STDC__ != 0
|
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
||||||
extern size_t strlen();
|
extern size_t strlen();
|
||||||
# else
|
# else
|
||||||
extern long strlen();
|
extern long strlen();
|
||||||
@@ -65,7 +65,7 @@ extern int strcmp();
|
|||||||
|
|
||||||
#if !defined(HAVE_MEMMOVE)
|
#if !defined(HAVE_MEMMOVE)
|
||||||
# undef CALC_SIZE_T
|
# undef CALC_SIZE_T
|
||||||
# if defined(__STDC__) && __STDC__ != 0
|
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
||||||
# define CALC_SIZE_T size_t
|
# define CALC_SIZE_T size_t
|
||||||
# else
|
# else
|
||||||
# define CALC_SIZE_T long
|
# define CALC_SIZE_T long
|
||||||
|
48
block.c
48
block.c
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
5
calc.c
5
calc.c
@@ -212,7 +212,7 @@ main(int argc, char **argv)
|
|||||||
/*
|
/*
|
||||||
* if allowed or needed, print version and setup bindings
|
* if allowed or needed, print version and setup bindings
|
||||||
*/
|
*/
|
||||||
if (*str == '\0') {
|
if (str >= cmdbuf+MAXCMD || *str == '\0') {
|
||||||
/*
|
/*
|
||||||
* check for pipe mode and/or non-tty stdin
|
* check for pipe mode and/or non-tty stdin
|
||||||
*/
|
*/
|
||||||
@@ -349,7 +349,8 @@ math_error(char *fmt, ...)
|
|||||||
if (post_init) {
|
if (post_init) {
|
||||||
longjmp(jmpbuf, 1);
|
longjmp(jmpbuf, 1);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "no jmpbuf jumpback point - ABORTING!!!\n");
|
fprintf(stderr, "It is too early provide a command line prompt "
|
||||||
|
"so we must simply exit. Sorry!\n");
|
||||||
/*
|
/*
|
||||||
* don't call libcalc_call_me_last() -- we might loop
|
* don't call libcalc_call_me_last() -- we might loop
|
||||||
* and besides ... this is an unusual internal error case
|
* and besides ... this is an unusual internal error case
|
||||||
|
2
calc.h
2
calc.h
@@ -26,7 +26,7 @@
|
|||||||
#define DEFAULTCALCHELP "help" /* help file that -h prints */
|
#define DEFAULTCALCHELP "help" /* help file that -h prints */
|
||||||
#define DEFAULTSHELL "sh" /* default shell to use */
|
#define DEFAULTSHELL "sh" /* default shell to use */
|
||||||
#define CALCEXT ".cal" /* extension for files read in */
|
#define CALCEXT ".cal" /* extension for files read in */
|
||||||
#define PATHSIZE 1024 /* maximum length of path name */
|
#define MAX_CALCRC 1024 /* maximum length of $CALCRC */
|
||||||
#define HOMECHAR '~' /* char which indicates home directory */
|
#define HOMECHAR '~' /* char which indicates home directory */
|
||||||
#define DOTCHAR '.' /* char which indicates current directory */
|
#define DOTCHAR '.' /* char which indicates current directory */
|
||||||
#define PATHCHAR '/' /* char which separates path components */
|
#define PATHCHAR '/' /* char which separates path components */
|
||||||
|
123
calc_errno.c
Normal file
123
calc_errno.c
Normal 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;
|
||||||
|
}
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -81,8 +81,13 @@ static long getinitlist(void);
|
|||||||
void
|
void
|
||||||
getcommands(BOOL toplevel)
|
getcommands(BOOL toplevel)
|
||||||
{
|
{
|
||||||
char name[PATHSIZE+1]; /* program name */
|
char name[MAXCMD+1+1]; /* program name */
|
||||||
|
|
||||||
|
/* firewall */
|
||||||
|
name[0] = '\0';
|
||||||
|
name[MAXCMD+1] = '\0';
|
||||||
|
|
||||||
|
/* getcommands */
|
||||||
if (!toplevel)
|
if (!toplevel)
|
||||||
enterfilescope();
|
enterfilescope();
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
14
const.c
14
const.c
@@ -27,10 +27,11 @@ initconstants(void)
|
|||||||
math_error("Unable to allocate constant table");
|
math_error("Unable to allocate constant table");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < INITCONSTCOUNT; i++)
|
||||||
consttable[i] = initnumbs[i];
|
consttable[i] = initnumbs[i];
|
||||||
constcount = 8;
|
consttable[INITCONSTCOUNT] = NULL; /* firewall */
|
||||||
constavail = CONSTALLOCSIZE - 8;
|
constcount = INITCONSTCOUNT;
|
||||||
|
constavail = CONSTALLOCSIZE - INITCONSTCOUNT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -187,10 +188,9 @@ freeconstant(unsigned long index)
|
|||||||
void
|
void
|
||||||
trimconstants(void)
|
trimconstants(void)
|
||||||
{
|
{
|
||||||
NUMBER **qp;
|
while (constcount > 0 &&
|
||||||
|
(consttable[constcount-1] == NULL ||
|
||||||
qp = &consttable[constcount];
|
consttable[constcount-1]->links == 0)) {
|
||||||
while (constcount > 0 && (*--qp)->links == 0) {
|
|
||||||
constcount--;
|
constcount--;
|
||||||
constavail++;
|
constavail++;
|
||||||
}
|
}
|
||||||
|
@@ -99,6 +99,7 @@ static struct infoname sys_info[] = {
|
|||||||
{"LONGLONG_BITS", "length of a long long, or 0", NULL, (FULL)LONGLONG_BITS},
|
{"LONGLONG_BITS", "length of a long long, or 0", NULL, (FULL)LONGLONG_BITS},
|
||||||
{"LONG_BITS", "bit length of a long", NULL, (FULL)LONG_BITS},
|
{"LONG_BITS", "bit length of a long", NULL, (FULL)LONG_BITS},
|
||||||
{"MAP_POPCNT", "number of odd primes in pr_map", NULL, (FULL)MAP_POPCNT},
|
{"MAP_POPCNT", "number of odd primes in pr_map", NULL, (FULL)MAP_POPCNT},
|
||||||
|
{"MAX_CALCRC", "maximum allowed length of $CALCRC", NULL, (FULL)MAX_CALCRC},
|
||||||
{"MAXCMD", "max length of command invocation", NULL, (FULL)MAXCMD},
|
{"MAXCMD", "max length of command invocation", NULL, (FULL)MAXCMD},
|
||||||
{"MAXDIM", "max number of dimensions in matrices", NULL, (FULL)MAXDIM},
|
{"MAXDIM", "max number of dimensions in matrices", NULL, (FULL)MAXDIM},
|
||||||
{"MAXERROR", "max length of error message string", NULL, (FULL)MAXERROR},
|
{"MAXERROR", "max length of error message string", NULL, (FULL)MAXERROR},
|
||||||
@@ -128,8 +129,6 @@ static struct infoname sys_info[] = {
|
|||||||
{"NXT_MAP_PRIME", "smallest odd prime not in pr_map", NULL, (FULL)NXT_MAP_PRIME},
|
{"NXT_MAP_PRIME", "smallest odd prime not in pr_map", NULL, (FULL)NXT_MAP_PRIME},
|
||||||
{"NXT_PFACT_VAL", "next prime for higher pfact values", NULL, (FULL)NXT_PFACT_VAL},
|
{"NXT_PFACT_VAL", "next prime for higher pfact values", NULL, (FULL)NXT_PFACT_VAL},
|
||||||
{"OFF_T_BITS", "file offset size in bits", NULL, (FULL)OFF_T_BITS},
|
{"OFF_T_BITS", "file offset size in bits", NULL, (FULL)OFF_T_BITS},
|
||||||
{"PATHSIZE", "max length of path name", NULL, (FULL)PATHSIZE},
|
|
||||||
{"PATHSIZE", "max length of path name", NULL, (FULL)PATHSIZE},
|
|
||||||
{"PIX_32B", "max pix() value", NULL, (FULL)PIX_32B},
|
{"PIX_32B", "max pix() value", NULL, (FULL)PIX_32B},
|
||||||
{"POW_ALG2", "default size for using REDC for powers", NULL, (FULL)POW_ALG2},
|
{"POW_ALG2", "default size for using REDC for powers", NULL, (FULL)POW_ALG2},
|
||||||
{"REDC_ALG2", "default size using alternative REDC alg", NULL, (FULL)REDC_ALG2},
|
{"REDC_ALG2", "default size using alternative REDC alg", NULL, (FULL)REDC_ALG2},
|
||||||
@@ -238,8 +237,9 @@ c_sysinfo(char *name, int count, VALUE **vals)
|
|||||||
} else if (vals[0]->v_type == V_STR) {
|
} else if (vals[0]->v_type == V_STR) {
|
||||||
|
|
||||||
/* convert vals[0] to upper case string */
|
/* convert vals[0] to upper case string */
|
||||||
buf = (char *)malloc(strlen((char *)vals[0]->v_str)+1);
|
buf = (char *)malloc(strlen((char *)vals[0]->v_str->s_str)+1);
|
||||||
for (q = (char *)vals[0]->v_str, r = buf; *q; ++q, ++r) {
|
for (q = (char *)vals[0]->v_str->s_str, r = buf; *q; ++q, ++r)
|
||||||
|
{
|
||||||
if (isascii(*q) && islower(*q)) {
|
if (isascii(*q) && islower(*q)) {
|
||||||
*r = *q - 'a' + 'A';
|
*r = *q - 'a' + 'A';
|
||||||
} else {
|
} else {
|
||||||
@@ -262,7 +262,7 @@ c_sysinfo(char *name, int count, VALUE **vals)
|
|||||||
/* return value as string */
|
/* return value as string */
|
||||||
result.v_type = V_STR;
|
result.v_type = V_STR;
|
||||||
result.v_subtype = V_NOSUBTYPE;
|
result.v_subtype = V_NOSUBTYPE;
|
||||||
result.v_str = (STRING *)p->str;
|
result.v_str = makestring(p->str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return found infotype as value */
|
/* return found infotype as value */
|
||||||
|
8
file.c
8
file.c
@@ -1141,6 +1141,7 @@ rewindall(void)
|
|||||||
*
|
*
|
||||||
* NOTE: Does not support negative file positions.
|
* NOTE: Does not support negative file positions.
|
||||||
*/
|
*/
|
||||||
|
/*ARGSUSED*/
|
||||||
static ZVALUE
|
static ZVALUE
|
||||||
filepos2z(FILEPOS pos)
|
filepos2z(FILEPOS pos)
|
||||||
{
|
{
|
||||||
@@ -1493,6 +1494,7 @@ setloc(FILEID id, ZVALUE zpos)
|
|||||||
* returns:
|
* returns:
|
||||||
* file size as a ZVALUE
|
* file size as a ZVALUE
|
||||||
*/
|
*/
|
||||||
|
/*ARGSUSED*/
|
||||||
static ZVALUE
|
static ZVALUE
|
||||||
off_t2z(off_t siz)
|
off_t2z(off_t siz)
|
||||||
{
|
{
|
||||||
@@ -1555,6 +1557,7 @@ dev2z(dev_t dev)
|
|||||||
* returns:
|
* returns:
|
||||||
* file size as a ZVALUE
|
* file size as a ZVALUE
|
||||||
*/
|
*/
|
||||||
|
/*ARGSUSED*/
|
||||||
static ZVALUE
|
static ZVALUE
|
||||||
inode2z(ino_t inode)
|
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')
|
if (c == EOF || c == '\0')
|
||||||
break;
|
break;
|
||||||
chnum++;
|
chnum++;
|
||||||
if(scannum && (memchr(scanptr,c,scannum)==NULL) ^ comp)
|
if(scannum &&
|
||||||
|
((memchr(scanptr,c,scannum)==NULL) ^ comp))
|
||||||
break;
|
break;
|
||||||
if (!skip) {
|
if (!skip) {
|
||||||
*b++ = c;
|
*b++ = c;
|
||||||
@@ -1918,7 +1922,7 @@ getscanwhite(FILE *fp, BOOL skip, unsigned int width, int scannum, char **strptr
|
|||||||
if (c == EOF || c == '\0')
|
if (c == EOF || c == '\0')
|
||||||
break;
|
break;
|
||||||
chnum++;
|
chnum++;
|
||||||
if(scannum && !isspace(c) ^ comp)
|
if(scannum && (!isspace(c) ^ comp))
|
||||||
break;
|
break;
|
||||||
if (!skip) {
|
if (!skip) {
|
||||||
*b++ = c;
|
*b++ = c;
|
||||||
|
4
func.c
4
func.c
@@ -10,15 +10,15 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#if defined(FUNCLIST)
|
#if defined(FUNCLIST)
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#define CONST /* disabled for FUNCLIST in case NATIVE_CC doesn't have it */
|
#define CONST /* disabled for FUNCLIST in case NATIVE_CC doesn't have it */
|
||||||
|
|
||||||
#else /* FUNCLIST */
|
#else /* FUNCLIST */
|
||||||
|
|
||||||
|
#include "calc_errno.h"
|
||||||
|
|
||||||
#include "have_unistd.h"
|
#include "have_unistd.h"
|
||||||
#if defined(HAVE_UNISTD_H)
|
#if defined(HAVE_UNISTD_H)
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
10
hash.c
10
hash.c
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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) {
|
||||||
|
@@ -235,3 +235,9 @@ 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
|
||||||
|
|
||||||
|
* clean the source code and document it better
|
||||||
|
1
hist.h
1
hist.h
@@ -30,7 +30,6 @@
|
|||||||
#define DOTCHAR '.' /* char which indicates current directory */
|
#define DOTCHAR '.' /* char which indicates current directory */
|
||||||
#define PATHCHAR '/' /* char which separates path components */
|
#define PATHCHAR '/' /* char which separates path components */
|
||||||
#define LISTCHAR ':' /* char which separates paths in a list */
|
#define LISTCHAR ':' /* char which separates paths in a list */
|
||||||
#define PATHSIZE 1024 /* maximum length of path name */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
78
input.c
78
input.c
@@ -91,20 +91,51 @@ opensearchfile(char *name, char *pathlist, char *extension, int rd_once)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char *cp;
|
char *cp;
|
||||||
char path[PATHSIZE+1]; /* name being searched for */
|
char *path; /* name being searched for */
|
||||||
struct stat statbuf; /* stat of the path */
|
struct stat statbuf; /* stat of the path */
|
||||||
|
unsigned long namelen; /* length of name */
|
||||||
|
unsigned long extlen; /* length of the extension if non-NULL or 0 */
|
||||||
|
unsigned long pathlen; /* length of the pathlist if non-NULL or 0 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* allocate storage for the longest name being searched for
|
||||||
|
*
|
||||||
|
* We will allocate more than we could ever want/need.
|
||||||
|
* The longest we could ever need would be:
|
||||||
|
*
|
||||||
|
* pathlist (as a single long string)
|
||||||
|
* /
|
||||||
|
* name
|
||||||
|
* .
|
||||||
|
* extenstion
|
||||||
|
* \0
|
||||||
|
* guard byte
|
||||||
|
*/
|
||||||
|
namelen = strlen(name);
|
||||||
|
if (extension != NULL) {
|
||||||
|
extlen = strlen(extension);
|
||||||
|
} else {
|
||||||
|
extlen = 0;
|
||||||
|
}
|
||||||
|
if (pathlist != NULL) {
|
||||||
|
pathlen = strlen(pathlist);
|
||||||
|
} else {
|
||||||
|
pathlen = 0;
|
||||||
|
}
|
||||||
|
path = malloc(pathlen+1 + 1 + namelen+1 + extlen+1 + 1 + 1);
|
||||||
|
if (path == NULL) {
|
||||||
|
math_error("Cannot allocate filename path buffer");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Don't try the extension if the filename already contains it.
|
* Don't try the extension if the filename already contains it.
|
||||||
*/
|
*/
|
||||||
if (extension) {
|
if (extension != NULL && namelen >= extlen &&
|
||||||
unsigned long namelen = strlen(name);
|
strcmp(&name[namelen-extlen], extension) == 0) {
|
||||||
unsigned long extlen = strlen(extension);
|
extension = NULL;
|
||||||
|
|
||||||
if (namelen >= extlen &&
|
|
||||||
strcmp(&name[namelen-extlen], extension) == 0)
|
|
||||||
extension = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the name is absolute, or if there is no path list, then
|
* If the name is absolute, or if there is no path list, then
|
||||||
* make one which just searches for the name straight. Then
|
* make one which just searches for the name straight. Then
|
||||||
@@ -127,21 +158,26 @@ opensearchfile(char *name, char *pathlist, char *extension, int rd_once)
|
|||||||
*cp++ = PATHCHAR;
|
*cp++ = PATHCHAR;
|
||||||
strcpy(cp, name);
|
strcpy(cp, name);
|
||||||
i = openfile(path);
|
i = openfile(path);
|
||||||
if ((i < 0) && (extension != NULL && extension[0] != '\0')) {
|
if ((i < 0) &&
|
||||||
|
(extension != NULL && extension[0] != '\0')) {
|
||||||
strcat(path, extension);
|
strcat(path, extension);
|
||||||
i = openfile(path);
|
i = openfile(path);
|
||||||
}
|
}
|
||||||
} while ((i < 0) && *pathlist);
|
} while ((i < 0) && *pathlist);
|
||||||
|
|
||||||
/* examine what our search produced */
|
/* examine what our search produced */
|
||||||
if (i < 0)
|
if (i < 0) {
|
||||||
|
free(path);
|
||||||
return i;
|
return i;
|
||||||
|
}
|
||||||
if (cip->i_fp == NULL) {
|
if (cip->i_fp == NULL) {
|
||||||
/* cannot find a file to open */
|
/* cannot find a file to open */
|
||||||
|
free(path);
|
||||||
return -3;
|
return -3;
|
||||||
}
|
}
|
||||||
if (fstat(fileno(cip->i_fp), &statbuf) < 0) {
|
if (fstat(fileno(cip->i_fp), &statbuf) < 0) {
|
||||||
/* unable to fstat the open file */
|
/* unable to fstat the open file */
|
||||||
|
free(path);
|
||||||
return -4;
|
return -4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,6 +185,7 @@ opensearchfile(char *name, char *pathlist, char *extension, int rd_once)
|
|||||||
if (rd_once == TRUE && isinoderead(&statbuf) >= 0) {
|
if (rd_once == TRUE && isinoderead(&statbuf) >= 0) {
|
||||||
/* file is in readset and reopen is false */
|
/* file is in readset and reopen is false */
|
||||||
closeinput();
|
closeinput();
|
||||||
|
free(path);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,10 +193,12 @@ opensearchfile(char *name, char *pathlist, char *extension, int rd_once)
|
|||||||
if (addreadset(name, path, &statbuf) < 0) {
|
if (addreadset(name, path, &statbuf) < 0) {
|
||||||
/* cannot add to readset */
|
/* cannot add to readset */
|
||||||
closeinput();
|
closeinput();
|
||||||
|
free(path);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* file was added to/updated in readset */
|
/* file was added to/updated in readset */
|
||||||
|
free(path);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,7 +228,7 @@ homeexpand(char *name)
|
|||||||
char *home2; /* fullpath of the home directory */
|
char *home2; /* fullpath of the home directory */
|
||||||
char *fullpath; /* the malloced expanded path */
|
char *fullpath; /* the malloced expanded path */
|
||||||
char *after; /* after the ~user or ~ */
|
char *after; /* after the ~user or ~ */
|
||||||
char username[PATHSIZE+1]; /* extratced username */
|
char *username; /* extratced username */
|
||||||
|
|
||||||
/* firewall */
|
/* firewall */
|
||||||
if (name[0] != HOMECHAR)
|
if (name[0] != HOMECHAR)
|
||||||
@@ -217,11 +256,15 @@ homeexpand(char *name)
|
|||||||
}
|
}
|
||||||
/* just malloc the home directory and return it */
|
/* just malloc the home directory and return it */
|
||||||
fullpath = (char *)malloc(strlen(ent->pw_dir)+1);
|
fullpath = (char *)malloc(strlen(ent->pw_dir)+1);
|
||||||
|
if (fullpath == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
strcpy(fullpath, ent->pw_dir);
|
strcpy(fullpath, ent->pw_dir);
|
||||||
return fullpath;
|
return fullpath;
|
||||||
}
|
}
|
||||||
if (after-name > PATHSIZE+1) {
|
username = (char *) malloc(after-name + 1 + 1);
|
||||||
/* username is too big */
|
if (username == NULL) {
|
||||||
|
/* failed to malloc username */
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
strncpy(username, name+1, after-name-1);
|
strncpy(username, name+1, after-name-1);
|
||||||
@@ -229,6 +272,7 @@ homeexpand(char *name)
|
|||||||
|
|
||||||
/* get that user's home directory */
|
/* get that user's home directory */
|
||||||
ent = (struct passwd *)getpwnam(username);
|
ent = (struct passwd *)getpwnam(username);
|
||||||
|
free(username);
|
||||||
if (ent == NULL) {
|
if (ent == NULL) {
|
||||||
/* unknown user */
|
/* unknown user */
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -241,6 +285,9 @@ homeexpand(char *name)
|
|||||||
* build the fullpath given the home directory
|
* build the fullpath given the home directory
|
||||||
*/
|
*/
|
||||||
fullpath = (char *)malloc(strlen(home2)+strlen(after)+1);
|
fullpath = (char *)malloc(strlen(home2)+strlen(after)+1);
|
||||||
|
if (fullpath == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
sprintf(fullpath, "%s%s", home2, after);
|
sprintf(fullpath, "%s%s", home2, after);
|
||||||
return fullpath;
|
return fullpath;
|
||||||
}
|
}
|
||||||
@@ -333,6 +380,9 @@ openfile(char *name)
|
|||||||
cip->i_fp = fp;
|
cip->i_fp = fp;
|
||||||
cip->i_line = 1;
|
cip->i_line = 1;
|
||||||
cip->i_name = (char *)malloc(strlen(name) + 1);
|
cip->i_name = (char *)malloc(strlen(name) + 1);
|
||||||
|
if (cip->i_name == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
strcpy(cip->i_name, name);
|
strcpy(cip->i_name, name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -658,7 +708,7 @@ reread(void)
|
|||||||
void
|
void
|
||||||
runrcfiles(void)
|
runrcfiles(void)
|
||||||
{
|
{
|
||||||
char path[PATHSIZE+1]; /* name being searched for */
|
char path[MAX_CALCRC+1+1]; /* name being searched for */
|
||||||
char *cp;
|
char *cp;
|
||||||
char *newcp;
|
char *newcp;
|
||||||
char *p;
|
char *p;
|
||||||
|
@@ -702,6 +702,8 @@ define test_functions()
|
|||||||
{
|
{
|
||||||
local a, b;
|
local a, b;
|
||||||
local pi;
|
local pi;
|
||||||
|
local h, n, r, m, v;
|
||||||
|
local n2, m2, v2;
|
||||||
|
|
||||||
print '700: Beginning test_functions';
|
print '700: Beginning test_functions';
|
||||||
|
|
||||||
@@ -1163,7 +1165,31 @@ define test_functions()
|
|||||||
vrfy(popcnt(pi(1e-20),0) == 69, '1101: popcnt(pi(1e-20),0) == 69');
|
vrfy(popcnt(pi(1e-20),0) == 69, '1101: popcnt(pi(1e-20),0) == 69');
|
||||||
vrfy(popcnt(17^777) == 1593, '1102: popcnt(17^777) == 1593');
|
vrfy(popcnt(17^777) == 1593, '1102: popcnt(17^777) == 1593');
|
||||||
|
|
||||||
print '1103: Ending test_functions';
|
/*
|
||||||
|
* more hnrmod testing
|
||||||
|
*/
|
||||||
|
vrfy(hnrmod(21<<100+5,3,100,1) == (21<<100+5)%(3<<100+1),
|
||||||
|
'1103: hnrmod(21<<100+5,3,100,1) == (21<<100+5)%(3<<100+1)');
|
||||||
|
vrfy(hnrmod(21<<500+7,3,500,1) == (21<<500+7)%(3<<500+1),
|
||||||
|
'1104: hnrmod(21<<500+7,3,500,1) == (21<<500+7)%(3<<500+1)');
|
||||||
|
vrfy(hnrmod(-767256,84,1,0) == (-767256)%(84<<1+0),
|
||||||
|
'1105: hnrmod(-767256,84,1,0) == (-767256)%(84<<1+0)');
|
||||||
|
vrfy(hnrmod(-831150,75,1,0) == (-831150)%(75<<1+0),
|
||||||
|
'1106: hnrmod(-831150,75,1,0) == (-831150)%(75<<1+0)');
|
||||||
|
vrfy(hnrmod(-767256,84,1,1) == (-767256)%(84<<1+1),
|
||||||
|
'1107: hnrmod(-767256,84,1,1) == (-767256)%(84<<1+1)');
|
||||||
|
vrfy(hnrmod(-831150,75,1,1) == (-831150)%(75<<1+1),
|
||||||
|
'1108: hnrmod(-831150,75,1,1) == (-831150)%(75<<1+1)');
|
||||||
|
vrfy(hnrmod(-767256,84,1,-1) == (-767256)%(84<<1-1),
|
||||||
|
'1109: hnrmod(-767256,84,1,-1) == (-767256)%(84<<1-1)');
|
||||||
|
vrfy(hnrmod(-831150,75,1,-1) == (-831150)%(75<<1-1),
|
||||||
|
'1110: hnrmod(-831150,75,1,-1) == (-831150)%(75<<1-1)');
|
||||||
|
vrfy(hnrmod(21<<100+5,3,100,0) == (21<<100+5)%(3<<100+0),
|
||||||
|
'1111: hnrmod(21<<100+5,3,100,0) == (21<<100+5)%(3<<100+0)');
|
||||||
|
vrfy(hnrmod(21<<500+7,3,500,-1) == (21<<500+7)%(3<<500-1),
|
||||||
|
'1112: hnrmod(21<<500+7,3,500,-1) == (21<<500+7)%(3<<500-1)');
|
||||||
|
|
||||||
|
print '1113: Ending test_functions';
|
||||||
}
|
}
|
||||||
print '017: parsed test_functions()';
|
print '017: parsed test_functions()';
|
||||||
|
|
||||||
|
@@ -65,7 +65,7 @@ BOOL inputwait; /* TRUE if in a terminal input wait */
|
|||||||
jmp_buf jmpbuf; /* for errors */
|
jmp_buf jmpbuf; /* for errors */
|
||||||
int start_done = FALSE; /* TRUE => start up processing finished */
|
int start_done = FALSE; /* TRUE => start up processing finished */
|
||||||
char *program = "calc"; /* our name */
|
char *program = "calc"; /* our name */
|
||||||
char cmdbuf[MAXCMD+1]; /* command line expression */
|
char cmdbuf[MAXCMD+1+1]; /* command line expression */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -281,6 +281,11 @@ initenv(void)
|
|||||||
if (calcrc == NULL) {
|
if (calcrc == NULL) {
|
||||||
calcrc = DEFAULTCALCRC;
|
calcrc = DEFAULTCALCRC;
|
||||||
}
|
}
|
||||||
|
if (strlen(calcrc) > MAX_CALCRC) {
|
||||||
|
math_error("The $CALCRC variable is longer than %d chars",
|
||||||
|
MAX_CALCRC);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
|
||||||
/* determine the $CALCBINDINGS value */
|
/* determine the $CALCBINDINGS value */
|
||||||
calcbindings = (no_env ? NULL : getenv(CALCBINDINGS));
|
calcbindings = (no_env ? NULL : getenv(CALCBINDINGS));
|
||||||
|
@@ -241,8 +241,8 @@ convhex2z(char *hex)
|
|||||||
/* slen is even now */
|
/* slen is even now */
|
||||||
|
|
||||||
/* eat two hex chars at a time until the HALF is full */
|
/* eat two hex chars at a time until the HALF is full */
|
||||||
for (; (slen % (BASEB/4)) != 0; slen -= 2) {
|
for (; (slen % (BASEB/4)) != 0; slen -= 2, sp += 2) {
|
||||||
*hp = ((*hp<<8) | hex2bin(*sp++, *sp++));
|
*hp = ((*hp<<8) | hex2bin(sp[0], sp[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* move on to the next HALF */
|
/* move on to the next HALF */
|
||||||
|
@@ -206,7 +206,7 @@ main(int argc, char **argv)
|
|||||||
'/', "* signed 64 bits *", '/');
|
'/', "* signed 64 bits *", '/');
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
printf("%c%s%c\n", '/',"* how to form 64 bit constants *",'/');
|
printf("%c%s%c\n", '/',"* how to form 64 bit constants *",'/');
|
||||||
#if defined(__STDC__) && __STDC__ != 0
|
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
||||||
printf("#define U(x) x ## ULL\n");
|
printf("#define U(x) x ## ULL\n");
|
||||||
printf("#define L(x) x ## LL\n");
|
printf("#define L(x) x ## LL\n");
|
||||||
#else
|
#else
|
||||||
@@ -322,7 +322,7 @@ main(int argc, char **argv)
|
|||||||
'/', "* signed 64 bits *", '/');
|
'/', "* signed 64 bits *", '/');
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
printf("%c%s%c\n", '/',"* how to form 64 bit constants *",'/');
|
printf("%c%s%c\n", '/',"* how to form 64 bit constants *",'/');
|
||||||
#if defined(__STDC__) && __STDC__ != 0
|
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
||||||
printf("#define U(x) x ## UL\n");
|
printf("#define U(x) x ## UL\n");
|
||||||
printf("#define L(x) x ## L\n");
|
printf("#define L(x) x ## L\n");
|
||||||
#else
|
#else
|
||||||
@@ -341,7 +341,7 @@ main(int argc, char **argv)
|
|||||||
'/', "* signed 64 bits *", '/');
|
'/', "* signed 64 bits *", '/');
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
printf("%c%s%c\n", '/',"* how to form 64 bit constants *",'/');
|
printf("%c%s%c\n", '/',"* how to form 64 bit constants *",'/');
|
||||||
#if defined(__STDC__) && __STDC__ != 0
|
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
||||||
printf("#define U(x) x ## ULL\n");
|
printf("#define U(x) x ## ULL\n");
|
||||||
printf("#define L(x) x ## LL\n");
|
printf("#define L(x) x ## LL\n");
|
||||||
#else
|
#else
|
||||||
|
2
qfunc.c
2
qfunc.c
@@ -1284,7 +1284,7 @@ qcfsim(NUMBER *q, long rnd)
|
|||||||
zmodinv(q->num, q->den, &den1);
|
zmodinv(q->num, q->den, &den1);
|
||||||
if (s >= 0) {
|
if (s >= 0) {
|
||||||
zsub(q->den, den1, &den2);
|
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);
|
zfree(den1);
|
||||||
res->den = den2;
|
res->den = den2;
|
||||||
zmul(den2, q->num, &tmp1);
|
zmul(den2, q->num, &tmp1);
|
||||||
|
14
qmath.c
14
qmath.c
@@ -21,8 +21,6 @@ NUMBER _qnegone_ = { { _oneval_, 1, 1 }, { _oneval_, 1, 0 }, 1, NULL };
|
|||||||
NUMBER _qonehalf_ = { { _oneval_, 1, 0 }, { _twoval_, 1, 0 }, 1, NULL };
|
NUMBER _qonehalf_ = { { _oneval_, 1, 0 }, { _twoval_, 1, 0 }, 1, NULL };
|
||||||
NUMBER _qonesqbase_ = { { _oneval_, 1, 0 }, { _sqbaseval_, 2, 0 }, 1, NULL };
|
NUMBER _qonesqbase_ = { { _oneval_, 1, 0 }, { _sqbaseval_, 2, 0 }, 1, NULL };
|
||||||
|
|
||||||
#define INITCONSTCOUNT 8
|
|
||||||
|
|
||||||
NUMBER * initnumbs[INITCONSTCOUNT] = {&_qzero_, &_qone_, &_qtwo_, &_qthree_,
|
NUMBER * initnumbs[INITCONSTCOUNT] = {&_qzero_, &_qone_, &_qtwo_, &_qthree_,
|
||||||
&_qfour_, &_qten_, &_qnegone_, &_qonehalf_};
|
&_qfour_, &_qten_, &_qnegone_, &_qonehalf_};
|
||||||
|
|
||||||
@@ -1365,8 +1363,8 @@ qcmpi(NUMBER *q, long n)
|
|||||||
#define NNALLOC 1000
|
#define NNALLOC 1000
|
||||||
|
|
||||||
|
|
||||||
static NUMBER *freeNum;
|
static NUMBER *freeNum = NULL;
|
||||||
static NUMBER **firstNums;
|
static NUMBER **firstNums = NULL;
|
||||||
static long blockcount = 0;
|
static long blockcount = 0;
|
||||||
|
|
||||||
|
|
||||||
@@ -1389,8 +1387,12 @@ qalloc(void)
|
|||||||
temp->links = 0;
|
temp->links = 0;
|
||||||
}
|
}
|
||||||
blockcount++;
|
blockcount++;
|
||||||
newfn = (NUMBER **)
|
if (firstNums == NULL) {
|
||||||
realloc(firstNums, blockcount * sizeof(NUMBER *));
|
newfn = (NUMBER **) malloc(blockcount * sizeof(NUMBER *));
|
||||||
|
} else {
|
||||||
|
newfn = (NUMBER **)
|
||||||
|
realloc(firstNums, blockcount * sizeof(NUMBER *));
|
||||||
|
}
|
||||||
if (newfn == NULL) {
|
if (newfn == NULL) {
|
||||||
math_error("Cannot allocate new number block");
|
math_error("Cannot allocate new number block");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
2
qmath.h
2
qmath.h
@@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
#include "zmath.h"
|
#include "zmath.h"
|
||||||
|
|
||||||
|
#define INITCONSTCOUNT 8 /* number of initnumbs[] pre-defined constants */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Rational arithmetic definitions.
|
* Rational arithmetic definitions.
|
||||||
|
2
shs.c
2
shs.c
@@ -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
2
shs1.c
@@ -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];
|
||||||
|
12
string.c
12
string.c
@@ -960,8 +960,8 @@ stringrsearch(STRING *s1, STRING *s2, long start, long end, ZVALUE *index)
|
|||||||
#define STRALLOC 100
|
#define STRALLOC 100
|
||||||
|
|
||||||
|
|
||||||
static STRING *freeStr;
|
static STRING *freeStr = NULL;
|
||||||
static STRING **firstStrs;
|
static STRING **firstStrs = NULL;
|
||||||
static long blockcount = 0;
|
static long blockcount = 0;
|
||||||
|
|
||||||
|
|
||||||
@@ -984,8 +984,12 @@ stralloc(void)
|
|||||||
temp->s_links = 0;
|
temp->s_links = 0;
|
||||||
}
|
}
|
||||||
blockcount++;
|
blockcount++;
|
||||||
newfn = (STRING **)
|
if (firstStrs == NULL) {
|
||||||
realloc(firstStrs, blockcount * sizeof(STRING *));
|
newfn = (STRING **) malloc( blockcount * sizeof(STRING *));
|
||||||
|
} else {
|
||||||
|
newfn = (STRING **)
|
||||||
|
realloc(firstStrs, blockcount * sizeof(STRING *));
|
||||||
|
}
|
||||||
if (newfn == NULL) {
|
if (newfn == NULL) {
|
||||||
math_error("Cannot allocate new string block");
|
math_error("Cannot allocate new string block");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
10
version.c
10
version.c
@@ -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 "1" /* test number or empty string if no patch */
|
#define MINOR_PATCH "4" /* test number or empty string if no patch */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* calc version constants
|
* calc version constants
|
||||||
@@ -35,7 +35,7 @@ static char *stored_version = NULL; /* version formed if != NULL */
|
|||||||
* This function returns a malloced version string. This version
|
* This function returns a malloced version string. This version
|
||||||
* string does not contain the title, just:
|
* string does not contain the title, just:
|
||||||
*
|
*
|
||||||
* x.y.ztsomething
|
* x.y.ztw
|
||||||
* x.y.z
|
* x.y.z
|
||||||
* x.y
|
* x.y
|
||||||
*/
|
*/
|
||||||
@@ -56,17 +56,17 @@ version(void)
|
|||||||
*/
|
*/
|
||||||
if (sizeof(MINOR_PATCH) > 1) {
|
if (sizeof(MINOR_PATCH) > 1) {
|
||||||
sprintf(verbuf,
|
sprintf(verbuf,
|
||||||
"%d.%d.%d%s", calc_major_ver, calc_minor_ver,
|
"%d.%d.%dt%s", calc_major_ver, calc_minor_ver,
|
||||||
calc_major_patch, calc_minor_patch);
|
calc_major_patch, calc_minor_patch);
|
||||||
} else if (MAJOR_PATCH > 0) {
|
} else if (MAJOR_PATCH > 0) {
|
||||||
sprintf(verbuf,
|
sprintf(verbuf,
|
||||||
"%d.%d.%s", calc_major_ver, calc_minor_ver, calc_minor_patch);
|
"%d.%d.%d", calc_major_ver, calc_minor_ver, calc_major_patch);
|
||||||
} else {
|
} else {
|
||||||
sprintf(verbuf, "%d.%d", calc_major_ver, calc_minor_ver);
|
sprintf(verbuf, "%d.%d", calc_major_ver, calc_minor_ver);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* same the versions string into a newly malloced buffer
|
* save the versions string into a newly malloced buffer
|
||||||
*/
|
*/
|
||||||
stored_version = (char *)malloc(strlen(verbuf)+1);
|
stored_version = (char *)malloc(strlen(verbuf)+1);
|
||||||
if (stored_version == NULL) {
|
if (stored_version == NULL) {
|
||||||
|
42
zfunc.c
42
zfunc.c
@@ -1522,7 +1522,7 @@ zsqrt(ZVALUE z, ZVALUE *dest, long rnd)
|
|||||||
u = (HALF)(s ? BASE1 : 0);
|
u = (HALF)(s ? BASE1 : 0);
|
||||||
if (k < BASEB) {
|
if (k < BASEB) {
|
||||||
A[m1 - 1] = (HALF)(e >> (BASEB - 1));
|
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 - 3] = (HALF)(f >> BASEB);
|
||||||
A[m1 - 4] = (HALF)f;
|
A[m1 - 4] = (HALF)f;
|
||||||
m = m1 - 2;
|
m = m1 - 2;
|
||||||
@@ -1531,7 +1531,7 @@ zsqrt(ZVALUE z, ZVALUE *dest, long rnd)
|
|||||||
else {
|
else {
|
||||||
A[m1 - 1] = 1;
|
A[m1 - 1] = 1;
|
||||||
A[m1 - 2] = (HALF)(e >> (BASEB - 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 - 4] = u;
|
||||||
A[m1 - 5] = (HALF)(f >> BASEB);
|
A[m1 - 5] = (HALF)(f >> BASEB);
|
||||||
A[m1 - 6] = (HALF)f;
|
A[m1 - 6] = (HALF)f;
|
||||||
@@ -1585,7 +1585,7 @@ zsqrt(ZVALUE z, ZVALUE *dest, long rnd)
|
|||||||
if (x & TOPHALF)
|
if (x & TOPHALF)
|
||||||
a[1] |= 1;
|
a[1] |= 1;
|
||||||
}
|
}
|
||||||
*a = (HALF)((x << 1) | (u > 0));
|
*a = ((HALF)(x << 1) | (HALF)(u > 0));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
*a = u;
|
*a = u;
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
zmath.c
2
zmath.c
@@ -1117,7 +1117,7 @@ zmodi(ZVALUE z, long n)
|
|||||||
val = 0;
|
val = 0;
|
||||||
while (len--)
|
while (len--)
|
||||||
val = ((val << BASEB) + ((FULL) *h1--)) % n;
|
val = ((val << BASEB) + ((FULL) *h1--)) % n;
|
||||||
if (z.sign)
|
if (val && z.sign)
|
||||||
val = n - val;
|
val = n - val;
|
||||||
return (long)val;
|
return (long)val;
|
||||||
}
|
}
|
||||||
|
4
zmath.h
4
zmath.h
@@ -577,7 +577,7 @@ typedef struct {
|
|||||||
*/
|
*/
|
||||||
#if FULL_BITS == 64
|
#if FULL_BITS == 64
|
||||||
|
|
||||||
# if defined(__STDC__) && __STDC__ != 0
|
# if defined(FORCE_STDC) || (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(FORCE_STDC) || (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! */
|
||||||
|
2
zmod.c
2
zmod.c
@@ -2337,7 +2337,7 @@ zhnrmod(ZVALUE v, ZVALUE zh, ZVALUE zn, ZVALUE zr, ZVALUE *res)
|
|||||||
/* ret = ((ret < 0) ? ret+modlus : ((ret == modulus) ? 0 : ret)); */
|
/* ret = ((ret < 0) ? ret+modlus : ((ret == modulus) ? 0 : ret)); */
|
||||||
if (ret.sign) {
|
if (ret.sign) {
|
||||||
zadd(ret, modulus, &t);
|
zadd(ret, modulus, &t);
|
||||||
zfree(t);
|
zfree(ret);
|
||||||
ret = t;
|
ret = t;
|
||||||
} else if (zrelval == 0) {
|
} else if (zrelval == 0) {
|
||||||
zfree(ret);
|
zfree(ret);
|
||||||
|
8
zprime.c
8
zprime.c
@@ -778,8 +778,8 @@ small_factor(ZVALUE z, FULL limit)
|
|||||||
#if BASEB == 32
|
#if BASEB == 32
|
||||||
div.v[0] = (HALF)factor;
|
div.v[0] = (HALF)factor;
|
||||||
#else
|
#else
|
||||||
div.v[0] = (factor & BASE1);
|
div.v[0] = (HALF)(factor & BASE1);
|
||||||
div.v[1] = (factor >> BASEB);
|
div.v[1] = (HALF)(factor >> BASEB);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (zdivides(z, div))
|
if (zdivides(z, div))
|
||||||
@@ -1483,8 +1483,8 @@ zlowfactor(ZVALUE z, long count)
|
|||||||
#if BASEB == 32
|
#if BASEB == 32
|
||||||
div.v[0] = (HALF)factor;
|
div.v[0] = (HALF)factor;
|
||||||
#else
|
#else
|
||||||
div.v[0] = (factor & BASE1);
|
div.v[0] = (HALF)(factor & BASE1);
|
||||||
div.v[1] = (factor >> BASEB);
|
div.v[1] = (HALF)(factor >> BASEB);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (zdivides(z, div))
|
if (zdivides(z, div))
|
||||||
|
4
zrand.h
4
zrand.h
@@ -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(FORCE_STDC) || (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(FORCE_STDC) || (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
|
||||||
|
@@ -1733,7 +1733,7 @@ zsrandom2(CONST ZVALUE seed, CONST ZVALUE newn)
|
|||||||
math_error("srandom newn == 0 reserved for future use");
|
math_error("srandom newn == 0 reserved for future use");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
set = z1tol(newn);
|
set = (HALF)z1tol(newn);
|
||||||
if (!zistiny(newn) || set > BLUM_PREGEN) {
|
if (!zistiny(newn) || set > BLUM_PREGEN) {
|
||||||
math_error("srandom small newn must be [1,20]");
|
math_error("srandom small newn must be [1,20]");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
Reference in New Issue
Block a user