mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Compare commits
10 Commits
2.10.3t5.4
...
2.11.0t6
Author | SHA1 | Date | |
---|---|---|---|
|
b54d8fc510 | ||
|
8cabbd6fb4 | ||
|
ea64a95b90 | ||
|
f60cbd24b2 | ||
|
97e9429000 | ||
|
1ce630ac19 | ||
|
4b98d5ff0e | ||
|
bad4535616 | ||
|
5307c4e16b | ||
|
b4e94b7eaa |
46
BUGS
46
BUGS
@@ -1,8 +1,8 @@
|
||||
If you notice something wrong, strange or broken, try rereading:
|
||||
|
||||
README.FIRST
|
||||
README
|
||||
BUGS (in particular the bottom problems or mis-features section)
|
||||
HOWTO.INSTALL
|
||||
BUGS (this file)
|
||||
|
||||
If that does not help, cd to the calc source directory and try:
|
||||
|
||||
@@ -18,13 +18,13 @@ If it does not, then something is really broken!
|
||||
If you made and modifications to calc beyond the simple Makefile
|
||||
configuration, try backing them out and see if things get better.
|
||||
|
||||
Check to see if the version of calc you are using is current. Calc
|
||||
distributions may be obtained from the official calc repository:
|
||||
To be sure that your version of calc is up to date, check out:
|
||||
|
||||
ftp://ftp.uu.net/pub/calc
|
||||
http://reality.sgi.com/chongo/calc/calc-download.html
|
||||
|
||||
If you are an alpha or beta tester, you may have a special pre-released
|
||||
version that is more advanced than what is in the ftp archive.
|
||||
The calc web site is located at:
|
||||
|
||||
http://reality.sgi.com/chongo/calc
|
||||
|
||||
=-=
|
||||
|
||||
@@ -46,6 +46,8 @@ When you send your report, please include the following information:
|
||||
|
||||
* the type of compiler you were using
|
||||
|
||||
* any compiler warnings or erros that you saw
|
||||
|
||||
* cd to the calc source directory, and type:
|
||||
|
||||
make debug > debug.out 2>&1 (sh, ksh, bash users)
|
||||
@@ -57,22 +59,8 @@ Stack traces from core dumps are useful to send as well.
|
||||
|
||||
=-=
|
||||
|
||||
The official calc repository is located in:
|
||||
|
||||
ftp://ftp.uu.net/pub/calc
|
||||
|
||||
If you don't have ftp access to that site, or if your version is more
|
||||
recent than what has been released to the ftp archive, you may, as a
|
||||
last resort, send EMail to:
|
||||
|
||||
chongo@toad.com
|
||||
|
||||
Indicate the version you have and that you would like a more up to date version.
|
||||
|
||||
=-=
|
||||
|
||||
Send any comments, suggestions and most importantly, fixes (in the form
|
||||
of a context diff patch) to:
|
||||
Send any comments, compiler warning messages, suggestions and most
|
||||
importantly, fixes (in the form of a context diff patch) to:
|
||||
|
||||
calc-tester@postofc.corp.sgi.com
|
||||
|
||||
@@ -89,3 +77,15 @@ Known problems or mis-features:
|
||||
* There is some places in the source with obscure variable names
|
||||
and not much in the way of comments. We need some major cleanup
|
||||
and documentation.
|
||||
|
||||
* On a Dec Alpha, using the Dec Alpha cc (not gcc) make check for
|
||||
version 2.11.0t5.1 fails in the regression test:
|
||||
|
||||
From vandermj@molbio.sbphrd.com Tue Oct 5 04:06:52 1999
|
||||
Subject: Re: oops, try calc version 2.10.0t5.1
|
||||
Date: Tue, 05 Oct 1999 07:06:30 -0400
|
||||
|
||||
Regular cc on Dec alpha, 'make check' dies with:
|
||||
|
||||
1804: surd_value(a) == 2+3i
|
||||
"": line 1706: Calling qfreenum with nozero links!!!
|
||||
|
189
CHANGES
189
CHANGES
@@ -1,4 +1,188 @@
|
||||
Following is the change from calc version 2.10.3t5.38 to date:
|
||||
Following is the change from calc version 2.11.0t1 to date:
|
||||
|
||||
Removed the makefile symbol MAIN. Now forcing all functions to correctly
|
||||
be declared main. To satisfy some old broken compilers, a return 0;
|
||||
(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
|
||||
whereas most of calc uses 8 character indentation. These imported
|
||||
sources have been changed to conform better with the calc style.
|
||||
|
||||
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. We are simply avoiding symbols
|
||||
such as new or try for example.
|
||||
|
||||
Renamed README to README.OLD. Renamed README.FIRST to README.
|
||||
Updated README, lib/README 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.
|
||||
|
||||
Fixed a bug in the hnrmod() builtin that was discovered by
|
||||
Ernest Bowen <ernie@neumann.une.edu.au>.
|
||||
|
||||
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}.
|
||||
|
||||
Rewrote command line / argument processing code. Calc is now
|
||||
using getopt(3) argument processing.
|
||||
|
||||
Fixed a memory leak related to converting strings to numbers
|
||||
in the str2q() function in qio.c.
|
||||
|
||||
Fixed a problem with reading uninitialized memory in the
|
||||
v_subtype of a VALUE in the copyvalue() function in value.c.
|
||||
|
||||
Fixed problems in func.c where temporary VALUEs were not
|
||||
having their v_type elements initialized.
|
||||
|
||||
Fixed a memory leak in qpi() in qtrans.c.
|
||||
|
||||
Fixed a memory leak in math_getdivertedio() in zio.c.
|
||||
|
||||
Fixed a problem with points going beyond the end of allocated
|
||||
memory in addstring() in string.c.
|
||||
|
||||
Fixed a memory leak in zgcdrem(), f_putenv(), zlog() and
|
||||
zlog10() in zfunc.c.
|
||||
|
||||
Fixed a memory leak in zdiv() and zshift() in zmath.c.
|
||||
|
||||
Fixed memory leaks in zsrand() in zrand.c.
|
||||
|
||||
Fixed a memory leak in zsrandom1() in zrandom.c. Fixed memory
|
||||
leaks associated with replacing the internal random state with
|
||||
another random state.
|
||||
|
||||
Added seed() builtin to return a 64 bit seed for a
|
||||
pseudo-random generator.
|
||||
|
||||
Added functionality from Ernest Bowen <ernie@turing.une.edu.au> to
|
||||
permit nested "= {...}" assignments for lists as well as matrices
|
||||
and objects. Now one can have a list, matrix or object, some of
|
||||
whose elements are lists, matrices or objects, to any depth of
|
||||
recursion, and assign values to any number of particular elements
|
||||
by an appropriate "initialization" expression. For example:
|
||||
|
||||
A = mat[2] = {list(1,2), list(3,4,list(5,6))};
|
||||
|
||||
and then assign values to the 6 number elements by:
|
||||
|
||||
A = {{7,8}, {9,10,{11,12}}};
|
||||
|
||||
Closed files that were previously left open from test4600.cal
|
||||
as executed by regress.cal and from opening /dev/null by
|
||||
regress.cal itself.
|
||||
|
||||
Fixed memory leaks from f_strprintf() and f_putenv() in func.c.
|
||||
|
||||
The regress.cal test suite calls freeredc(), freestatics() and
|
||||
freeglobals() at the end of the test suite to free storage
|
||||
consumed during the regression.
|
||||
|
||||
Added custom function custom("pzasusb8", n) and lib/pzasusb8.cal based on
|
||||
Ernest Bowen's diagnostic patch.
|
||||
|
||||
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.
|
||||
|
||||
Added functionality from Ernest Bowen <ernie@turing.une.edu.au>
|
||||
to give arguments as well as function names after definitions when
|
||||
config("lib_debug") >= 0.
|
||||
|
||||
Removed if (config("lib_debug") >= 0) { ... } the ends of most
|
||||
of the calc library scripts because it was redundant with the
|
||||
new config("lib_debug") >= 0 functionality. Some of the calc
|
||||
library still has a partial section because some useful
|
||||
additional information was being printed:
|
||||
|
||||
chrem.cal deg.cal lucas_tbl.cal randrun.cal
|
||||
mfactor.cal mod.cal poly.cal seedrandom.cal
|
||||
surd.cal varargs.cal
|
||||
|
||||
Fixed ellip.cal so that its defined function does not conflict with
|
||||
the factor() builtin function.
|
||||
|
||||
Fixed mod.cal so that a defined function does not conflict with
|
||||
the mod() builtin function.
|
||||
|
||||
The regression test suite now reads in most calc libs. A few
|
||||
libs are not read because they, by design, produce output
|
||||
when read even when config("lib_debug") is set to -1.
|
||||
|
||||
Increased the maximum number of object types that one can define
|
||||
from 10 to 128.
|
||||
|
||||
Added a patch from Ernest Bowen <ernie@turing.une.edu.au>
|
||||
to correctly hash a V_STR value-type that has an \0 byte
|
||||
inside it.
|
||||
|
||||
Fixed misc compile warnings and notices.
|
||||
|
||||
|
||||
Following is the change from calc version 2.10.3t5.38 to 2.11.0t0:
|
||||
|
||||
Fixed a few compile problems found under Red Hat 6.0 Linux.
|
||||
|
||||
|
||||
Following is the change from calc version 2.10.3t5.38 to 2.11.3t5.46:
|
||||
|
||||
Fixed a bug discovered by Ernest Bowen related to matrix-to-matrix copies.
|
||||
|
||||
@@ -51,6 +235,9 @@ Following is the change from calc version 2.10.3t5.38 to date:
|
||||
The function version(), now returns a malloced version string
|
||||
without the title.
|
||||
|
||||
Consolidated multiple SGI IRIX -n32 sections (for r4k, r5k and r10k)
|
||||
into a single section.
|
||||
|
||||
|
||||
Following is the change from calc version 2.10.3t5.34 to 2.10.3t5.37:
|
||||
|
||||
|
52
HOWTO.INSTALL
Normal file
52
HOWTO.INSTALL
Normal file
@@ -0,0 +1,52 @@
|
||||
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 compiler
|
||||
warning or errors.
|
||||
|
||||
3) test calc:
|
||||
|
||||
make check
|
||||
|
||||
==> If you run into problems, follow the BUGS file instructions.
|
||||
|
||||
4) install calc:
|
||||
|
||||
make install
|
432
Makefile
432
Makefile
@@ -206,17 +206,38 @@ HAVE_MEMMOVE=
|
||||
ALIGN32= -DMUST_ALIGN32
|
||||
#ALIGN32= -UMUST_ALIGN32
|
||||
|
||||
# The return value type of main() differs from platform to platform.
|
||||
# In some cases, a compiler warning is issued because main() does
|
||||
# or does not return a value.
|
||||
# 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!
|
||||
#
|
||||
# MAIN= -DMAIN=void main() is of type void
|
||||
# MAIN= -DMAIN=int main() is of type int
|
||||
# If the system were doing a proper job in headers, this should declare them:
|
||||
#
|
||||
# When in doubt, try MAIN= -DMAIN=void. If you get a warning try the other.
|
||||
# #include <stdio.h>
|
||||
# #include <errno.h>
|
||||
#
|
||||
MAIN= -DMAIN=void
|
||||
#MAIN= -DMAIN=int
|
||||
# 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
|
||||
#
|
||||
@@ -293,7 +314,8 @@ CATEXT= 1
|
||||
# The cat page is not built or installed
|
||||
#
|
||||
# If in doubt and you don't want to fool with man pages, set MANDIR
|
||||
# and CATDIR to empty and ignore the lines below.
|
||||
# and CATDIR to empty and ignore the NROFF, NROFF_ARG and MANMAKE
|
||||
# lines below.
|
||||
#
|
||||
NROFF= nroff
|
||||
#NROFF=
|
||||
@@ -332,7 +354,7 @@ CALCPAGER= more
|
||||
|
||||
# Debug/Optimize options for ${CC}
|
||||
#
|
||||
DEBUG= -O
|
||||
#DEBUG= -O
|
||||
#DEBUG= -O -g
|
||||
#DEBUG= -O -g3
|
||||
#DEBUG= -O1
|
||||
@@ -340,7 +362,7 @@ DEBUG= -O
|
||||
#DEBUG= -O1 -g3
|
||||
#DEBUG= -O2
|
||||
#DEBUG= -O2 -g
|
||||
#DEBUG= -O2 -g3
|
||||
DEBUG= -O2 -g3
|
||||
#DEBUG= -O2 -ipa
|
||||
#DEBUG= -O2 -g3 -ipa
|
||||
#DEBUG= -O3
|
||||
@@ -388,8 +410,8 @@ LD_NO_SHARED=
|
||||
# a *.a library. Set RANLIB to the utility that performs this action.
|
||||
# Set RANLIB to : if your system does not need such a utility.
|
||||
#
|
||||
#RANLIB=ranlib
|
||||
RANLIB=:
|
||||
RANLIB=ranlib
|
||||
#RANLIB=:
|
||||
|
||||
# Some systems are able to form lint libs. How it is formed depends
|
||||
# on your system. If you do not care about lint, use : as the
|
||||
@@ -495,7 +517,6 @@ ALLOW_CUSTOM= -DCUSTOM
|
||||
# ICFLAGS are given to ${CC} for intermediate progs
|
||||
#
|
||||
# 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}
|
||||
# LDFLAGS are flags given to ${CC} for linking .o files
|
||||
@@ -505,48 +526,63 @@ ALLOW_CUSTOM= -DCUSTOM
|
||||
#
|
||||
###
|
||||
#
|
||||
# common cc set
|
||||
# Linux set
|
||||
#
|
||||
CCWARN=
|
||||
# Tested on Red Hat 6.0 Linux but should run on almost any Linux release.
|
||||
#
|
||||
# for better performance, set the following above:
|
||||
# DEBUG= -O2
|
||||
#
|
||||
CCWARN= -Wall -Wno-implicit -Wno-comment
|
||||
CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
CCMISC=
|
||||
#
|
||||
CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
CCSHS= ${CFLAGS}
|
||||
CCMAIN= ${ICFLAGS}
|
||||
#
|
||||
LCFLAGS=
|
||||
LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
ILDFLAGS=
|
||||
#
|
||||
CC= ${PURIFY} cc
|
||||
CC= ${PURIFY} gcc
|
||||
#
|
||||
###
|
||||
#
|
||||
# SGI IRIX5.3 (or earlier) -o32 C Compiler
|
||||
#
|
||||
# You must set above:
|
||||
# RANLIB=:
|
||||
# LONGLONG_BITS= 0
|
||||
# gcc set (some call it gcc2, some call it gcc)
|
||||
#
|
||||
# for better performance, set the following above:
|
||||
# DEBUG= -O2 -g3
|
||||
# DEBUG= -O2
|
||||
#
|
||||
# If you have the directory /usr/lib/nonshared, then set the following above:
|
||||
# NO_SHARED= -non_shared
|
||||
# LD_NO_SHARED= -Wl,-rdata_shared
|
||||
#
|
||||
#CCWARN= -fullwarn -woff 835
|
||||
#CCWARN= -Wall -Wno-implicit -Wno-comment
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -use_readonly_const
|
||||
#CCMISC=
|
||||
#
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
#CCSHS= ${CFLAGS}
|
||||
#CCMAIN= ${ICFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#CC= ${PURIFY} gcc
|
||||
#CC= ${PURIFY} gcc2
|
||||
#
|
||||
###
|
||||
#
|
||||
# common cc set
|
||||
#
|
||||
#CCWARN=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC=
|
||||
#
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
@@ -556,7 +592,7 @@ CC= ${PURIFY} cc
|
||||
#
|
||||
###
|
||||
#
|
||||
# SGI IRIX6.2 (or later) -n32 (v7.1 or later) Compiler for the R4k
|
||||
# SGI IRIX6.2 (or later) -n32 (v7.1 or later) Compiler
|
||||
#
|
||||
# You must set above:
|
||||
# RANLIB=:
|
||||
@@ -572,87 +608,18 @@ CC= ${PURIFY} cc
|
||||
#
|
||||
#CCWARN= -fullwarn -woff 1209
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -use_readonly_const
|
||||
#CCMISC= -rdata_shared
|
||||
#
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
#CCSHS= ${CFLAGS}
|
||||
#CCMAIN= ${ICFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#CC= ${PURIFY} cc -n32 -r4000 -xansi
|
||||
#
|
||||
###
|
||||
#
|
||||
# SGI IRIX6.2 (or later) -n32 (v7.1 or later) Compiler for the R5k
|
||||
#
|
||||
# You must set above:
|
||||
# RANLIB=:
|
||||
#
|
||||
# for better performance, set the following above:
|
||||
# DEBUG= -O2 -g3
|
||||
#
|
||||
# If you have the directory /usr/lib32/nonshared, then set the following above:
|
||||
# NO_SHARED= -non_shared
|
||||
# LD_NO_SHARED= -Wl,-rdata_shared
|
||||
#
|
||||
# woff 1209: cancel 'controlling expression is constant' warnings
|
||||
#
|
||||
#CCWARN= -fullwarn -woff 1209
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -use_readonly_const
|
||||
#
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
#CCSHS= ${CFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#CC= ${PURIFY} cc -n32 -r5000 -xansi
|
||||
#
|
||||
###
|
||||
#
|
||||
# SGI IRIX6.5 (or later) -n32 (v7.2 or later) Compiler for the R10k
|
||||
#
|
||||
# NOTE: For Pre IRIX6.5 and pre v7.2 compilers, use:
|
||||
#
|
||||
# CCSHS= ${CFLAGS} -OPT:fold_arith_limit=1668
|
||||
#
|
||||
# You must set above:
|
||||
# RANLIB=:
|
||||
#
|
||||
# for better performance, set the following above:
|
||||
# DEBUG= -O2 -g3
|
||||
#
|
||||
# If you have the directory /usr/lib32/nonshared, then set the following above:
|
||||
# NO_SHARED= -non_shared
|
||||
# LD_NO_SHARED= -Wl,-rdata_shared
|
||||
#
|
||||
# woff 1209: cancel 'controlling expression is constant' warnings
|
||||
#
|
||||
#CCWARN= -fullwarn -woff 1209
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -use_readonly_const
|
||||
#
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
#CCSHS= ${CFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#CC= ${PURIFY} cc -n32 -r10000 -mips4 -xansi
|
||||
#CC= ${PURIFY} cc -n32 -xansi
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -671,8 +638,7 @@ CC= ${PURIFY} cc
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
#CCSHS= ${CFLAGS}
|
||||
#CCMAIN= ${ICFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
@@ -691,8 +657,7 @@ CC= ${PURIFY} cc
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
#CCSHS= ${CFLAGS}
|
||||
#CCMAIN= ${ICFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
@@ -702,43 +667,22 @@ CC= ${PURIFY} cc
|
||||
#
|
||||
###
|
||||
#
|
||||
# BSDI's BSD/OS 2.0 (or later) set
|
||||
#
|
||||
# for better performance, set the following above:
|
||||
# DEBUG= -O2
|
||||
#
|
||||
#CCWARN= -Wall -Wno-implicit -Wno-comment
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -ansi
|
||||
#
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
#CCSHS= ${CFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#CC= ${PURIFY} shlicc2
|
||||
#
|
||||
###
|
||||
#
|
||||
# Solaris 2.x Sun cc compiler
|
||||
# Solaris Sun cc compiler set
|
||||
#
|
||||
# for better performance, set the following above:
|
||||
# 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=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC=-Xc
|
||||
#CCMISC= -DFORCE_STDC
|
||||
#
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
#CCSHS= ${CFLAGS}
|
||||
#CCMAIN= ${ICFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
@@ -748,74 +692,47 @@ CC= ${PURIFY} cc
|
||||
#
|
||||
###
|
||||
#
|
||||
# gcc set
|
||||
#
|
||||
# for better performance, set the following above:
|
||||
# DEBUG= -O
|
||||
#
|
||||
#CCWARN= -Wall
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -ansi
|
||||
#
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
#CCSHS= ${CFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#CC= ${PURIFY} gcc
|
||||
#
|
||||
###
|
||||
#
|
||||
# gcc1 set (some call it gcc1, some call it gcc)
|
||||
#
|
||||
# for better performance, set the following above:
|
||||
# DEBUG= -O
|
||||
#
|
||||
#CCWARN= -Wall
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -ansi
|
||||
#
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
#CCSHS= ${CFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#CC= ${PURIFY} gcc1
|
||||
#CC= ${PURIFY} gcc
|
||||
#
|
||||
###
|
||||
#
|
||||
# gcc2 set (some call it gcc2, some call it gcc)
|
||||
# BSDI's BSD/OS 4.0 (or later) set
|
||||
#
|
||||
# for better performance, set the following above:
|
||||
# DEBUG= -O2
|
||||
#
|
||||
#CCWARN= -Wall -Wno-implicit -Wno-comment
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -ansi
|
||||
#CCMISC=
|
||||
#
|
||||
#CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||
#ICFLAGS= ${CCWARN} ${CCMISC}
|
||||
#
|
||||
#CCMAIN= ${ICFLAGS} ${MAIN}
|
||||
#CCSHS= ${CFLAGS}
|
||||
#CCMAIN= ${ICFLAGS}
|
||||
#
|
||||
#LCFLAGS=
|
||||
#LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#CC= ${PURIFY} gcc2
|
||||
#CC= ${PURIFY} gcc
|
||||
#
|
||||
###
|
||||
#
|
||||
# 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 -=-=-=-=-=-=-=-=-#
|
||||
@@ -858,7 +775,7 @@ LIBSRC= addop.c assocfunc.c blkcpy.c block.c byteswap.c \
|
||||
file.c func.c hash.c help.c hist.c input.c jump.c label.c \
|
||||
lib_calc.c lib_util.c listfunc.c matfunc.c math_error.c \
|
||||
md5.c obj.c opcodes.c pix.c poly.c prime.c qfunc.c qio.c \
|
||||
qmath.c qmod.c qtrans.c quickhash.c shs.c shs1.c size.c \
|
||||
qmath.c qmod.c qtrans.c quickhash.c seed.c shs.c shs1.c size.c \
|
||||
string.c symbol.c token.c value.c version.c zfunc.c zio.c \
|
||||
zmath.c zmod.c zmul.c zprime.c zrand.c zrandom.c
|
||||
|
||||
@@ -872,7 +789,7 @@ LIBOBJS= addop.o assocfunc.o blkcpy.o block.o byteswap.o calcerr.o \
|
||||
file.o func.o hash.o help.o hist.o input.o jump.o label.o \
|
||||
lib_calc.o lib_util.o listfunc.o matfunc.o math_error.o \
|
||||
md5.o obj.o opcodes.o pix.o poly.o prime.o qfunc.o qio.o \
|
||||
qmath.o qmod.o qtrans.o quickhash.o shs.o shs1.o size.o \
|
||||
qmath.o qmod.o qtrans.o quickhash.o seed.o shs.o shs1.o size.o \
|
||||
string.o symbol.o token.o value.o version.o zfunc.o zio.o \
|
||||
zmath.o zmod.o zmul.o zprime.o zrand.o zrandom.o
|
||||
|
||||
@@ -902,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 \
|
||||
have_memmv.h have_newstr.h have_offscl.h have_posscl.h \
|
||||
have_stdlib.h have_string.h have_times.h have_uid_t.h \
|
||||
have_unistd.h longbits.h longlong.h terminal.h
|
||||
have_unistd.h longbits.h longlong.h terminal.h calc_errno.h
|
||||
|
||||
# we build these .c files during the make
|
||||
#
|
||||
@@ -914,7 +831,7 @@ BUILD_C_SRC= calcerr.c
|
||||
#
|
||||
UTIL_C_SRC= align32.c endian.c longbits.c have_newstr.c have_uid_t.c \
|
||||
have_const.c have_stdvs.c have_varvs.c fposval.c have_fpos.c \
|
||||
longlong.c have_offscl.c have_posscl.c have_memmv.c
|
||||
longlong.c have_offscl.c have_posscl.c have_memmv.c calc_errno.c
|
||||
|
||||
# these awk and sed tools are used in the process of building BUILD_H_SRC
|
||||
# and BUILD_C_SRC
|
||||
@@ -928,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 \
|
||||
have_const.o fposval.o have_fpos.o longlong.o try_strarg.o \
|
||||
have_stdvs.o have_varvs.o have_posscl.o have_memmv.o
|
||||
have_stdvs.o have_varvs.o have_posscl.o have_memmv.o calc_errno.o
|
||||
|
||||
# these temp files may be created (and removed) during the build of BUILD_C_SRC
|
||||
#
|
||||
UTIL_TMP= ll_tmp fpos_tmp fposv_tmp const_tmp uid_tmp newstr_tmp vs_tmp
|
||||
UTIL_TMP= ll_tmp fpos_tmp fposv_tmp const_tmp uid_tmp newstr_tmp vs_tmp \
|
||||
calc_errno_tmp
|
||||
|
||||
# these utility progs may be used in the process of building BUILD_H_SRC
|
||||
#
|
||||
UTIL_PROGS= align32 fposval have_uid_t longlong have_const \
|
||||
endian longbits have_newstr have_stdvs have_varvs
|
||||
endian longbits have_newstr have_stdvs have_varvs calc_errno
|
||||
|
||||
# These files are required by the regress.cal regression test.
|
||||
#
|
||||
@@ -981,7 +899,6 @@ SAMPLE_PASSDOWN= Q="${Q}" \
|
||||
TOPDIR="${TOPDIR}" \
|
||||
LIBDIR="${LIBDIR}" \
|
||||
HELPDIR="${HELPDIR}" \
|
||||
MAIN="${MAIN}" \
|
||||
DEBUG="${DEBUG}" \
|
||||
NO_SHARED="${NO_SHARED}" \
|
||||
RANLIB="${RANLIB}" \
|
||||
@@ -1014,7 +931,7 @@ C_SRC= ${LIBSRC} ${CALCSRC} ${UTIL_C_SRC}
|
||||
# These files are found (but not built) in the distribution
|
||||
#
|
||||
DISTLIST= ${C_SRC} ${H_SRC} ${MAKE_FILE} BUGS CHANGES LIBRARY README \
|
||||
calc.man lint.sed README.FIRST ${UTIL_MISC_SRC}
|
||||
calc.man lint.sed README.OLD HOWTO.INSTALL ${UTIL_MISC_SRC}
|
||||
|
||||
# complete list of .o files
|
||||
#
|
||||
@@ -1067,17 +984,11 @@ calc.o: calc.c ${MAKE_FILE}
|
||||
${CC} ${CCMAIN} ${CCOPT} ${ALLOW_CUSTOM} -c calc.c
|
||||
|
||||
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}
|
||||
${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}
|
||||
${CC} ${CFLAGS} ${ALLOW_CUSTOM} -c func.c
|
||||
|
||||
@@ -1909,6 +1820,98 @@ args.h: have_stdvs.c have_varvs.c have_string.h have_unistd.h have_string.h
|
||||
true; \
|
||||
fi
|
||||
|
||||
calc_errno.h: calc_errno.c ${MAKE_FILE}
|
||||
-${Q}rm -f calc_errno.h calc_errno calc_errno_tmp
|
||||
${Q}echo 'forming calc_errno.h'
|
||||
${Q}echo '/*' > calc_errno.h
|
||||
${Q}echo ' * DO NOT EDIT -- generated by the Makefile' >> calc_errno.h
|
||||
${Q}echo ' */' >> calc_errno.h
|
||||
${Q}echo '' >> calc_errno.h
|
||||
${Q}echo '' >> calc_errno.h
|
||||
${Q}echo '#if !defined(__CALC_ERRNO_H__)' >> calc_errno.h
|
||||
${Q}echo '#define __CALC_ERRNO_H__' >> calc_errno.h
|
||||
${Q}echo '' >> calc_errno.h
|
||||
${Q}echo '' >> calc_errno.h
|
||||
-${Q}if [ X"${ERRNO_DECL}" = X"-DERRNO_NO_DECL" ]; then \
|
||||
echo '/*' >> calc_errno.h; \
|
||||
echo ' * The calc Makefile explicitly told us' >> calc_errno.h; \
|
||||
echo ' * how to declare errno and friends.' >> calc_errno.h; \
|
||||
echo ' */' >> calc_errno.h; \
|
||||
echo '' >> calc_errno.h; \
|
||||
echo '#include <stdio.h>' >> calc_errno.h; \
|
||||
echo '#include <errno.h>' >> calc_errno.h; \
|
||||
elif [ X"${ERRNO_DECL}" = X"-DERRNO_STD_DECL" ]; then \
|
||||
echo '/*' >> calc_errno.h; \
|
||||
echo ' * The calc Makefile explicitly told us' >> calc_errno.h; \
|
||||
echo ' * how to declare errno and friends.' >> calc_errno.h; \
|
||||
echo ' */' >> calc_errno.h; \
|
||||
echo '' >> calc_errno.h; \
|
||||
echo 'extern int errno; ' \
|
||||
'/* last system error */' >> calc_errno.h; \
|
||||
echo 'extern const char *const sys_errlist[];' \
|
||||
' /* system error messages*/' >> calc_errno.h; \
|
||||
echo 'extern int sys_nerr; ' \
|
||||
'/* number of system errors */' >> calc_errno.h; \
|
||||
elif [ X"${ERRNO_DECL}" = X"-DERRNO_OLD_DECL" ]; then \
|
||||
echo '/*' >> calc_errno.h; \
|
||||
echo ' * The calc Makefile explicitly told us' >> calc_errno.h; \
|
||||
echo ' * how to declare errno and friends.' >> calc_errno.h; \
|
||||
echo ' */' >> calc_errno.h; \
|
||||
echo '' >> calc_errno.h; \
|
||||
echo 'extern int errno; ' \
|
||||
'/* last system error */' >> calc_errno.h; \
|
||||
echo 'extern char *sys_errlist[];' \
|
||||
' /* system error messages*/' >> calc_errno.h; \
|
||||
echo 'extern int sys_nerr; ' \
|
||||
'/* number of system errors */' >> calc_errno.h; \
|
||||
else \
|
||||
${CC} ${CCMAIN} -DTRY_ERRNO_NO_DECL \
|
||||
calc_errno.c -o calc_errno 2>calc_errno_tmp; \
|
||||
if [ -x ./calc_errno ]; then \
|
||||
./calc_errno >> calc_errno.h; \
|
||||
else \
|
||||
${CC} ${CCMAIN} -DTRY_ERRNO_STD_DECL \
|
||||
calc_errno.c -o calc_errno 2>calc_errno_tmp; \
|
||||
if [ -x ./calc_errno ]; then \
|
||||
./calc_errno >> calc_errno.h; \
|
||||
else \
|
||||
${CC} ${CCMAIN} -DTRY_ERRNO_OLD_DECL \
|
||||
calc_errno.c -o calc_errno 2>calc_errno_tmp; \
|
||||
if [ -x ./calc_errno ]; then \
|
||||
./calc_errno >> calc_errno.h; \
|
||||
else \
|
||||
echo '/*' >> calc_errno.h; \
|
||||
echo ' * We were unable to to determine' >> calc_errno.h; \
|
||||
echo ' * how to declare errno and friends.' >> calc_errno.h; \
|
||||
echo ' * So we will guess this will work' >> calc_errno.h; \
|
||||
echo ' * and hope for the best.' >> calc_errno.h; \
|
||||
echo ' */' >> calc_errno.h; \
|
||||
echo '' >> calc_errno.h; \
|
||||
echo 'extern int errno; ' \
|
||||
'/* last system error */' >> calc_errno.h; \
|
||||
echo 'extern const char *const sys_errlist[];' \
|
||||
' /* system error messages*/' >> calc_errno.h; \
|
||||
echo 'extern int sys_nerr; ' \
|
||||
'/* number of system errors */' >> calc_errno.h; \
|
||||
fi; \
|
||||
fi; \
|
||||
fi; \
|
||||
fi
|
||||
${Q}echo '' >> calc_errno.h
|
||||
${Q}echo '' >> calc_errno.h
|
||||
${Q}echo '#endif /* !__CALC_ERRNO_H__ */' >> calc_errno.h
|
||||
-${Q}rm -f calc_errno calc_errno_tmp
|
||||
${Q}echo 'calc_errno.h formed'
|
||||
-@if [ -z "${Q}" ]; then \
|
||||
echo ''; \
|
||||
echo '=-=-= start of $@ =-=-='; \
|
||||
cat $@; \
|
||||
echo '=-=-= end of $@ =-=-='; \
|
||||
echo ''; \
|
||||
else \
|
||||
true; \
|
||||
fi
|
||||
|
||||
calcerr.h: calcerr.tbl calcerr_h.sed calcerr_h.awk ${MAKE_FILE}
|
||||
-${Q}rm -f calerr.h
|
||||
${Q}echo 'forming calcerr.h'
|
||||
@@ -2295,7 +2298,7 @@ env:
|
||||
@echo "HAVE_UID_T=${HAVE_UID_T}"; echo ""
|
||||
@echo "HAVE_NEWSTR=${HAVE_NEWSTR}"; echo ""
|
||||
@echo "ALIGN32=${ALIGN32}"; echo ""
|
||||
@echo "MAIN=${MAIN}"; echo ""
|
||||
@echo "ERRNO_DECL=${ERRNO_DECL}"; echo ""
|
||||
@echo "BINDIR=${BINDIR}"; echo ""
|
||||
@echo "TOPDIR=${TOPDIR}"; echo ""
|
||||
@echo "LIBDIR=${LIBDIR}"; echo ""
|
||||
@@ -2330,7 +2333,6 @@ env:
|
||||
@echo "CFLAGS=${CFLAGS}"; echo ""
|
||||
@echo "ICFLAGS=${ICFLAGS}"; echo ""
|
||||
@echo "CCMAIN=${CCMAIN}"; echo ""
|
||||
@echo "CCSHS=${CCSHS}"; echo ""
|
||||
@echo "LCFLAGS=${LCFLAGS}"; echo ""
|
||||
@echo "LDFLAGS=${LDFLAGS}"; echo ""
|
||||
@echo "ILDFLAGS=${ILDFLAGS}"; echo ""
|
||||
@@ -2747,6 +2749,7 @@ byteswap.o: longbits.h
|
||||
byteswap.o: qmath.h
|
||||
byteswap.o: zmath.h
|
||||
calc.o: alloc.h
|
||||
calc.o: args.h
|
||||
calc.o: block.h
|
||||
calc.o: byteswap.h
|
||||
calc.o: calc.c
|
||||
@@ -2782,6 +2785,7 @@ calc.o: symbol.h
|
||||
calc.o: token.h
|
||||
calc.o: value.h
|
||||
calc.o: zmath.h
|
||||
calc_errno.o: calc_errno.c
|
||||
calcerr.o: calcerr.c
|
||||
calcerr.o: calcerr.h
|
||||
calcerr.o: have_const.h
|
||||
@@ -2959,6 +2963,7 @@ func.o: alloc.h
|
||||
func.o: block.h
|
||||
func.o: byteswap.h
|
||||
func.o: calc.h
|
||||
func.o: calc_errno.h
|
||||
func.o: calcerr.h
|
||||
func.o: cmath.h
|
||||
func.o: config.h
|
||||
@@ -3325,7 +3330,6 @@ obj.o: symbol.h
|
||||
obj.o: value.h
|
||||
obj.o: zmath.h
|
||||
opcodes.o: alloc.h
|
||||
opcodes.o: args.h
|
||||
opcodes.o: block.h
|
||||
opcodes.o: byteswap.h
|
||||
opcodes.o: calc.h
|
||||
@@ -3510,6 +3514,18 @@ quickhash.o: value.h
|
||||
quickhash.o: zmath.h
|
||||
quickhash.o: zrand.h
|
||||
quickhash.o: zrandom.h
|
||||
seed.o: alloc.h
|
||||
seed.o: byteswap.h
|
||||
seed.o: endian_calc.h
|
||||
seed.o: have_malloc.h
|
||||
seed.o: have_memmv.h
|
||||
seed.o: have_newstr.h
|
||||
seed.o: have_stdlib.h
|
||||
seed.o: have_string.h
|
||||
seed.o: longbits.h
|
||||
seed.o: qmath.h
|
||||
seed.o: seed.c
|
||||
seed.o: zmath.h
|
||||
shs.o: align32.h
|
||||
shs.o: alloc.h
|
||||
shs.o: block.h
|
||||
|
86
README
86
README
@@ -1,68 +1,54 @@
|
||||
# Copyright (c) 1997 David I. Bell
|
||||
# Permission is granted to use, distribute, or modify this source,
|
||||
# provided that this copyright notice remains intact.
|
||||
#
|
||||
# Arbitrary precision calculator.
|
||||
Dear calc user,
|
||||
|
||||
I am allowing this calculator to be freely distributed for your enjoyment.
|
||||
Like all multi-precision programs, you should not depend absolutely on
|
||||
its results, since bugs in such programs can be insidious and only rarely
|
||||
show up.
|
||||
See the HOWTO.INSTALL file for information on how to build and install calc.
|
||||
|
||||
-dbell-
|
||||
To be sure that your version of calc is up to date, check out:
|
||||
|
||||
p.s. By Landon Curt Noll:
|
||||
http://reality.sgi.com/chongo/calc/calc-download.html
|
||||
|
||||
Building calc in 3 easy steps:
|
||||
We are interested in any/all feedback on recent versions of calc.
|
||||
In particular we would like to hear about:
|
||||
|
||||
1) Look at the makefile, and adjust it to suit your needs.
|
||||
* compiler warnings
|
||||
* compile problems
|
||||
* regression test problems (try: make check)
|
||||
* special compile flags/options that you needed
|
||||
* Makefile problems
|
||||
* help file problems
|
||||
* misc nits and typos
|
||||
|
||||
Here are some Makefile hints:
|
||||
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!
|
||||
|
||||
In the past, some people have had to adjust the VARARG or
|
||||
TERMCONTROL because the Makefile cannot always guess
|
||||
correctly for certain systems. You may need to play with
|
||||
these values if you experience problems.
|
||||
|
||||
The default compiler used is 'cc'. The default compiler flag
|
||||
is '-O'. If you have gcc, or gcc v2 (or better) you should use
|
||||
that instead. Some compilers allow for optimization beyond
|
||||
just -O (gcc v2 has -O2, mips cc has -O3). You should select
|
||||
the best flag for speed optimization. Calc can be cpu intensive
|
||||
so selecting a quality compiler and good optimization level can
|
||||
really pay off.
|
||||
|
||||
2) build calc:
|
||||
|
||||
make all
|
||||
|
||||
3) test calc:
|
||||
|
||||
make check
|
||||
|
||||
==>>>If you run into problems, follow the instructions in the BUGS file<<<==
|
||||
If you run into problems, see the BUGS file.
|
||||
|
||||
=-=
|
||||
|
||||
For further reading:
|
||||
|
||||
LIBRARY
|
||||
explains how programs can use libcalc.a to take advantage
|
||||
of the calc multi-precision routines.
|
||||
See the file:
|
||||
|
||||
help/todo
|
||||
current wish list for calc
|
||||
|
||||
CHANGES
|
||||
recent changes to calc
|
||||
or run:
|
||||
|
||||
BUGS
|
||||
known bugs, mis-features and how to report problems
|
||||
calc 'help todo'
|
||||
|
||||
help/full
|
||||
full set of calc documentation
|
||||
for a wish/todo list. Code contributions are welcome.
|
||||
|
||||
=-=
|
||||
|
||||
David I. Bell dbell@auug.org.au
|
||||
chongo@toad.com <Landon Curt Noll -- chongo@toad.com> /\../\
|
||||
To join the calc-tester mailing list. Send a request to:
|
||||
|
||||
calc-tester-request@postofc.corp.sgi.com
|
||||
|
||||
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
|
||||
|
52
README.FIRST
52
README.FIRST
@@ -1,52 +0,0 @@
|
||||
Dear alpha tester,
|
||||
|
||||
Thanks for taking the time to try out this alpha version of calc! We are
|
||||
interested in any/all feedback that you may have on this version. In
|
||||
particular we would like to hear about:
|
||||
|
||||
* compile problems
|
||||
* regression test problems (try: make check)
|
||||
* compiler warnings
|
||||
* special compile flags/options that you needed
|
||||
* Makefile problems
|
||||
* help file problems
|
||||
* misc nits and typos
|
||||
|
||||
We would like to offer a clean compile across a wide verity of platforms,
|
||||
so if you can test on several, so much the better!
|
||||
|
||||
Calc distributions may be obtained from:
|
||||
|
||||
ftp://ftp.uu.net/pub/calc
|
||||
|
||||
If you don't have ftp access to that site, or if you do not find a more
|
||||
recent version (you may have a special pre-released version that is
|
||||
more advanced than what is in the ftp archive) send EMail to:
|
||||
|
||||
chongo@toad.com
|
||||
|
||||
Indicate the version you have and that you would like a more up
|
||||
to date version.
|
||||
|
||||
=-=
|
||||
|
||||
Misc items TODO before Beta release:
|
||||
|
||||
* improve the coverage in the 'SEE ALSO' help file lists
|
||||
|
||||
* where reasonable, be sure that regress.cal tests builtin functions
|
||||
|
||||
* add the Blum-Blum-Shub random() generator code
|
||||
|
||||
* add code to allow of the reading, writing and processing of binary data
|
||||
|
||||
* add shs, shs-1 and md5 hashing functions. Use align32.h.
|
||||
|
||||
* add mod h*2^n+/-1 function for integers
|
||||
|
||||
* be sure that CHANGES is up to date,
|
||||
look over the help/todo file and update as needed,
|
||||
revisit issues in the BUGS file and
|
||||
change this file :-)
|
||||
|
||||
* clean the source code and document it better
|
73
README.OLD
Normal file
73
README.OLD
Normal file
@@ -0,0 +1,73 @@
|
||||
# Copyright (c) 1997 David I. Bell
|
||||
# Permission is granted to use, distribute, or modify this source,
|
||||
# provided that this copyright notice remains intact.
|
||||
#
|
||||
# Arbitrary precision calculator.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
NOTE: This is an old historic README. We recommend that
|
||||
you read README and HOWTO.INSTALL for more info.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
I am allowing this calculator to be freely distributed for your enjoyment.
|
||||
Like all multi-precision programs, you should not depend absolutely on
|
||||
its results, since bugs in such programs can be insidious and only rarely
|
||||
show up.
|
||||
|
||||
-dbell-
|
||||
|
||||
p.s. By Landon Curt Noll:
|
||||
|
||||
Building calc in 3 easy steps:
|
||||
|
||||
1) Look at the makefile, and adjust it to suit your needs.
|
||||
|
||||
Here are some Makefile hints:
|
||||
|
||||
In the past, some people have had to adjust the VARARG or
|
||||
TERMCONTROL because the Makefile cannot always guess
|
||||
correctly for certain systems. You may need to play with
|
||||
these values if you experience problems.
|
||||
|
||||
The default compiler used is 'cc'. The default compiler flag
|
||||
is '-O'. If you have gcc, or gcc v2 (or better) you should use
|
||||
that instead. Some compilers allow for optimization beyond
|
||||
just -O (gcc v2 has -O2, mips cc has -O3). You should select
|
||||
the best flag for speed optimization. Calc can be cpu intensive
|
||||
so selecting a quality compiler and good optimization level can
|
||||
really pay off.
|
||||
|
||||
2) build calc:
|
||||
|
||||
make all
|
||||
|
||||
3) test calc:
|
||||
|
||||
make check
|
||||
|
||||
==>>>If you run into problems, follow the instructions in the BUGS file<<<==
|
||||
|
||||
=-=
|
||||
|
||||
For further reading:
|
||||
|
||||
LIBRARY
|
||||
explains how programs can use libcalc.a to take advantage
|
||||
of the calc multi-precision routines.
|
||||
|
||||
help/todo
|
||||
current wish list for calc
|
||||
|
||||
CHANGES
|
||||
recent changes to calc
|
||||
|
||||
BUGS
|
||||
known bugs, mis-features and how to report problems
|
||||
|
||||
help/full
|
||||
full set of calc documentation
|
||||
|
||||
=-=
|
||||
|
||||
David I. Bell dbell@auug.org.au
|
||||
chongo <Landon Curt Noll> /\../\
|
19
addop.c
19
addop.c
@@ -135,6 +135,7 @@ endfunc(void)
|
||||
{
|
||||
register FUNC *fp; /* function just finished */
|
||||
unsigned long size; /* size of just created function */
|
||||
long index;
|
||||
|
||||
if (oldop != OP_RETURN) {
|
||||
addop(OP_UNDEF);
|
||||
@@ -163,14 +164,22 @@ endfunc(void)
|
||||
size += dumpop(&fp->f_opcodes[size]);
|
||||
}
|
||||
}
|
||||
if (inputisterminal() || conf->lib_debug >= 0) {
|
||||
printf("%s(", fp->f_name);
|
||||
for (index = 0; index < fp->f_paramcount; index++) {
|
||||
if (index)
|
||||
putchar(',');
|
||||
printf("%s", paramname(index));
|
||||
}
|
||||
printf(") ");
|
||||
if (functions[newindex])
|
||||
printf("re");
|
||||
printf("defined\n");
|
||||
}
|
||||
if (functions[newindex]) {
|
||||
freenumbers(functions[newindex]);
|
||||
free(functions[newindex]);
|
||||
if (inputisterminal() || conf->lib_debug >= 0)
|
||||
printf("%s() redefined\n", fp->f_name);
|
||||
}
|
||||
else if (inputisterminal() || conf->lib_debug >= 0)
|
||||
printf("%s() defined\n", fp->f_name);
|
||||
functions[newindex] = fp;
|
||||
objuncache();
|
||||
}
|
||||
@@ -228,7 +237,7 @@ rmuserfunc(char *name)
|
||||
return;
|
||||
freenumbers(functions[index]);
|
||||
free(functions[index]);
|
||||
if (!inputisterminal() && conf->lib_debug >= 0)
|
||||
if (inputisterminal() && conf->lib_debug >= 0)
|
||||
printf("%s() undefined\n", name);
|
||||
functions[index] = NULL;
|
||||
}
|
||||
|
@@ -30,7 +30,7 @@
|
||||
static void buserr(void); /* catch alignment errors */
|
||||
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
char byte[2*sizeof(USB32)]; /* mis-alignment buffer */
|
||||
@@ -58,7 +58,8 @@ main(void)
|
||||
'/', '/');
|
||||
|
||||
#endif
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
6
alloc.h
6
alloc.h
@@ -17,7 +17,7 @@
|
||||
#ifdef HAVE_MALLOC_H
|
||||
# include <malloc.h>
|
||||
#else
|
||||
# if defined(__STDC__) && __STDC__ != 0
|
||||
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
||||
extern void *malloc();
|
||||
extern void *realloc();
|
||||
extern void free();
|
||||
@@ -36,7 +36,7 @@
|
||||
# if defined(HAVE_NEWSTR)
|
||||
extern void *memcpy();
|
||||
extern void *memset();
|
||||
# if defined(__STDC__) && __STDC__ != 0
|
||||
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
|
||||
extern size_t strlen();
|
||||
# else
|
||||
extern long strlen();
|
||||
@@ -65,7 +65,7 @@ extern int strcmp();
|
||||
|
||||
#if !defined(HAVE_MEMMOVE)
|
||||
# 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
|
||||
# else
|
||||
# define CALC_SIZE_T long
|
||||
|
48
block.c
48
block.c
@@ -71,7 +71,7 @@ static void blkchk(BLOCK*);
|
||||
BLOCK *
|
||||
blkalloc(int len, int chunk)
|
||||
{
|
||||
BLOCK *new; /* new block allocated */
|
||||
BLOCK *nblk; /* new block allocated */
|
||||
|
||||
/*
|
||||
* firewall
|
||||
@@ -84,8 +84,8 @@ blkalloc(int len, int chunk)
|
||||
/*
|
||||
* allocate BLOCK
|
||||
*/
|
||||
new = (BLOCK *)malloc(sizeof(BLOCK));
|
||||
if (new == NULL) {
|
||||
nblk = (BLOCK *)malloc(sizeof(BLOCK));
|
||||
if (nblk == NULL) {
|
||||
math_error("cannot allocate block");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
@@ -93,23 +93,23 @@ blkalloc(int len, int chunk)
|
||||
/*
|
||||
* initialize BLOCK
|
||||
*/
|
||||
new->blkchunk = chunk;
|
||||
new->maxsize = ((len+chunk)/chunk)*chunk;
|
||||
new->data = (USB8*)malloc(new->maxsize);
|
||||
if (new->data == NULL) {
|
||||
nblk->blkchunk = chunk;
|
||||
nblk->maxsize = ((len+chunk)/chunk)*chunk;
|
||||
nblk->data = (USB8*)malloc(nblk->maxsize);
|
||||
if (nblk->data == NULL) {
|
||||
math_error("cannot allocate block data storage");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
memset(new->data, 0, new->maxsize);
|
||||
new->datalen = len;
|
||||
memset(nblk->data, 0, nblk->maxsize);
|
||||
nblk->datalen = len;
|
||||
|
||||
/*
|
||||
* return BLOCK
|
||||
*/
|
||||
if (conf->calc_debug > 0) {
|
||||
blkchk(new);
|
||||
blkchk(nblk);
|
||||
}
|
||||
return new;
|
||||
return nblk;
|
||||
}
|
||||
|
||||
|
||||
@@ -227,7 +227,7 @@ blkchk(BLOCK *blk)
|
||||
BLOCK *
|
||||
blkrealloc(BLOCK *blk, int newlen, int newchunk)
|
||||
{
|
||||
USB8 *new; /* realloced storage */
|
||||
USB8 *nblk; /* realloced storage */
|
||||
int newmax; /* new maximum stoage size */
|
||||
|
||||
/*
|
||||
@@ -258,20 +258,20 @@ blkrealloc(BLOCK *blk, int newlen, int newchunk)
|
||||
if (newmax != blk->maxsize) {
|
||||
|
||||
/* reallocate new storage */
|
||||
new = (USB8*)realloc(blk->data, newmax);
|
||||
if (new == NULL) {
|
||||
nblk = (USB8*)realloc(blk->data, newmax);
|
||||
if (nblk == NULL) {
|
||||
math_error("cannot reallocate block storage");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
/* clear any new storage */
|
||||
if (newmax > blk->maxsize) {
|
||||
memset(new + blk->maxsize, 0, (newmax - blk->maxsize));
|
||||
memset(nblk+blk->maxsize, 0, (newmax-blk->maxsize));
|
||||
}
|
||||
blk->maxsize = newmax;
|
||||
|
||||
/* restore the data pointers */
|
||||
blk->data = new;
|
||||
blk->data = nblk;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -391,13 +391,13 @@ blktrunc(BLOCK *blk)
|
||||
BLOCK *
|
||||
blk_copy(BLOCK *blk)
|
||||
{
|
||||
BLOCK *new; /* copy of blk */
|
||||
BLOCK *nblk; /* copy of blk */
|
||||
|
||||
/*
|
||||
* malloc new block
|
||||
*/
|
||||
new = (BLOCK *)malloc(sizeof(BLOCK));
|
||||
if (new == NULL) {
|
||||
nblk = (BLOCK *)malloc(sizeof(BLOCK));
|
||||
if (nblk == NULL) {
|
||||
math_error("blk_copy: cannot malloc BLOCK");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
@@ -405,18 +405,18 @@ blk_copy(BLOCK *blk)
|
||||
/*
|
||||
* duplicate most of the block
|
||||
*/
|
||||
*new = *blk;
|
||||
*nblk = *blk;
|
||||
|
||||
/*
|
||||
* duplicate block data
|
||||
*/
|
||||
new->data = (USB8 *)malloc(blk->maxsize);
|
||||
if (new->data == NULL) {
|
||||
nblk->data = (USB8 *)malloc(blk->maxsize);
|
||||
if (nblk->data == NULL) {
|
||||
math_error("blk_copy: cannot duplicate block data");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
memcpy(new->data, blk->data, blk->maxsize);
|
||||
return new;
|
||||
memcpy(nblk->data, blk->data, blk->maxsize);
|
||||
return nblk;
|
||||
}
|
||||
|
||||
|
||||
|
250
calc.c
250
calc.c
@@ -39,7 +39,7 @@
|
||||
|
||||
|
||||
/*
|
||||
* external and static definitions
|
||||
* external definitions and functions
|
||||
*/
|
||||
extern int abortlevel; /* current level of aborts */
|
||||
extern BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||
@@ -52,6 +52,7 @@ extern int u_flag; /* TRUE => unbuffer stdin and stdout */
|
||||
|
||||
extern char *pager; /* $PAGER or default */
|
||||
extern int stdin_tty; /* TRUE if stdin is a tty */
|
||||
extern int interactive; /* TRUE if interactive session (no cmd args) */
|
||||
extern char *program; /* our name */
|
||||
extern char cmdbuf[]; /* command line expression */
|
||||
|
||||
@@ -59,135 +60,134 @@ extern char *version(void); /* return version string */
|
||||
|
||||
|
||||
/*
|
||||
* forward static functions
|
||||
* static definitions and functions
|
||||
*/
|
||||
static char *usage = "usage: %s [-C] [-e] [-h] [-i] [-m mode] [-n] [-p]\n"
|
||||
"\t[-q] [-u] [[--] calc_cmd ...]\n";
|
||||
static void intint(int arg); /* interrupt routine */
|
||||
|
||||
|
||||
/*
|
||||
* Top level calculator routine.
|
||||
*/
|
||||
MAIN
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
static char *str; /* current option string or expression */
|
||||
int want_defhelp = 0; /* 1=> we only want the default help */
|
||||
int cmdlen; /* length of the command string */
|
||||
extern char *optarg; /* option argument */
|
||||
extern int optind; /* option index */
|
||||
int c; /* option */
|
||||
long i;
|
||||
char *p;
|
||||
|
||||
/*
|
||||
* parse args
|
||||
*/
|
||||
program = argv[0];
|
||||
argc--;
|
||||
argv++;
|
||||
while ((argc > 0) && (**argv == '-')) {
|
||||
for (str = &argv[0][1]; *str; str++) switch (*str) {
|
||||
case 'C':
|
||||
while ((c = getopt(argc, argv, "Cehim:npquv")) != -1) {
|
||||
switch (c) {
|
||||
case 'C':
|
||||
#if defined(CUSTOM)
|
||||
allow_custom = TRUE;
|
||||
break;
|
||||
#else
|
||||
fprintf(stderr,
|
||||
"Calc was built with custom functions "
|
||||
"disabled, -C usage is disallowed\n");
|
||||
/*
|
||||
* we are too early in processing to call
|
||||
* libcalc_call_me_last() - nothing to cleanup
|
||||
*/
|
||||
exit(1);
|
||||
#endif /* CUSTOM */
|
||||
case 'e':
|
||||
no_env = TRUE;
|
||||
break;
|
||||
case 'h':
|
||||
want_defhelp = 1;
|
||||
break;
|
||||
case 'i':
|
||||
ign_errmax = TRUE;
|
||||
break;
|
||||
case 'm':
|
||||
if (argv[0][2]) {
|
||||
p = &argv[0][2];
|
||||
} else if (argc > 1) {
|
||||
p = argv[1];
|
||||
argc--;
|
||||
argv++;
|
||||
} else {
|
||||
fprintf(stderr, "-m requires an arg\n");
|
||||
/*
|
||||
* we are too early in processing to
|
||||
* call libcalc_call_me_last()
|
||||
* nothing to cleanup
|
||||
*/
|
||||
exit(1);
|
||||
}
|
||||
if (p[1] != '\0' || *p < '0' || *p > '7') {
|
||||
fprintf(stderr, "unknown -m arg\n");
|
||||
/*
|
||||
* we are too early in processing to
|
||||
* call libcalc_call_me_last()
|
||||
* nothing to cleanup
|
||||
*/
|
||||
exit(1);
|
||||
}
|
||||
allow_read = (((*p-'0') & 04) > 0);
|
||||
allow_write = (((*p-'0') & 02) > 0);
|
||||
allow_exec = (((*p-'0') & 01) > 0);
|
||||
break;
|
||||
case 'n':
|
||||
new_std = TRUE;
|
||||
break;
|
||||
case 'p':
|
||||
p_flag = TRUE;
|
||||
break;
|
||||
case 'q':
|
||||
q_flag = TRUE;
|
||||
break;
|
||||
case 'u':
|
||||
u_flag = TRUE;
|
||||
break;
|
||||
case 'v':
|
||||
printf("%s (version %s)\n",
|
||||
CALC_TITLE, version());
|
||||
/*
|
||||
* we are too early in processing to call
|
||||
* libcalc_call_me_last() - nothing to cleanup
|
||||
*/
|
||||
exit(0);
|
||||
default:
|
||||
fprintf(stderr,
|
||||
"usage: %s [-C] [-e] [-h] [-i] [-m mode] [-n] [-p]\n",
|
||||
program);
|
||||
fprintf(stderr, "\t[-q] [-u] [calc_cmd ...]\n");
|
||||
/*
|
||||
* we are too early in processing to call
|
||||
* libcalc_call_me_last() - nothing to cleanup
|
||||
*/
|
||||
exit(1);
|
||||
}
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
cmdbuf[0] = '\0';
|
||||
str = cmdbuf;
|
||||
while (--argc >= 0) {
|
||||
i = (long)strlen(*argv);
|
||||
if (i+3 >= MAXCMD) {
|
||||
fprintf(stderr, "command in arg list too long\n");
|
||||
allow_custom = TRUE;
|
||||
break;
|
||||
#else /* CUSTOM */
|
||||
/*
|
||||
* we are too early in processing to call
|
||||
* libcalc_call_me_last() - nothing to cleanup
|
||||
*/
|
||||
fprintf(stderr,
|
||||
"%s: calc was built with custom functions "
|
||||
"disabled, -C usage is disallowed\n", program);
|
||||
exit(1);
|
||||
#endif /* CUSTOM */
|
||||
case 'e':
|
||||
no_env = TRUE;
|
||||
break;
|
||||
case 'h':
|
||||
want_defhelp = 1;
|
||||
break;
|
||||
case 'i':
|
||||
ign_errmax = TRUE;
|
||||
break;
|
||||
case 'm':
|
||||
if (optarg[1] == '\0' || *optarg<'0' || *optarg>'7') {
|
||||
/*
|
||||
* we are too early in processing to
|
||||
* call libcalc_call_me_last()
|
||||
* nothing to cleanup
|
||||
*/
|
||||
fprintf(stderr,
|
||||
"%s: unknown -m arg\n", program);
|
||||
exit(1);
|
||||
}
|
||||
allow_read = (((*optarg-'0') & 04) > 0);
|
||||
allow_write = (((*optarg-'0') & 02) > 0);
|
||||
allow_exec = (((*optarg-'0') & 01) > 0);
|
||||
break;
|
||||
case 'n':
|
||||
new_std = TRUE;
|
||||
break;
|
||||
case 'p':
|
||||
p_flag = TRUE;
|
||||
break;
|
||||
case 'q':
|
||||
q_flag = TRUE;
|
||||
break;
|
||||
case 'u':
|
||||
u_flag = TRUE;
|
||||
break;
|
||||
case 'v':
|
||||
/*
|
||||
* we are too early in processing to call
|
||||
* libcalc_call_me_last() - nothing to cleanup
|
||||
*/
|
||||
printf("%s (version %s)\n", CALC_TITLE, version());
|
||||
exit(0);
|
||||
default:
|
||||
/*
|
||||
* we are too early in processing to call
|
||||
* libcalc_call_me_last() - nothing to cleanup
|
||||
*/
|
||||
fprintf(stderr, usage, program);
|
||||
exit(1);
|
||||
}
|
||||
*str++ = ' ';
|
||||
strcpy(str, *argv++);
|
||||
str += i;
|
||||
str[0] = '\n';
|
||||
str[1] = '\0';
|
||||
}
|
||||
str = cmdbuf;
|
||||
interactive = (optind >= argc);
|
||||
|
||||
/*
|
||||
* look at the length of any trailing command args
|
||||
*
|
||||
* We make room for the trailing '\0\n' as well as an extra guard byte.
|
||||
*/
|
||||
for (cmdlen=0, i=optind; i < argc; ++i) {
|
||||
/* argument + space separator */
|
||||
cmdlen += strlen(argv[i]) + 1;
|
||||
}
|
||||
if (i > MAXCMD) {
|
||||
/*
|
||||
* we are too early in processing to call
|
||||
* libcalc_call_me_last() - nothing to cleanup
|
||||
*/
|
||||
fprintf(stderr,
|
||||
"%s: command in arg list is too long\n", program);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* We will form a command the remaining args separated by spaces.
|
||||
*/
|
||||
cmdbuf[0] = '\0';
|
||||
if (optind < argc) {
|
||||
strcpy(cmdbuf, argv[optind]);
|
||||
cmdlen = strlen(argv[optind]);
|
||||
for (i=optind+1; i < argc; ++i) {
|
||||
cmdbuf[cmdlen++] = ' ';
|
||||
strcpy(cmdbuf+cmdlen, argv[i]);
|
||||
cmdlen += strlen(argv[i]);
|
||||
}
|
||||
cmdbuf[cmdlen++] = '\n';
|
||||
cmdbuf[cmdlen] = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
* unbuffered mode
|
||||
@@ -212,7 +212,7 @@ main(int argc, char **argv)
|
||||
/*
|
||||
* if allowed or needed, print version and setup bindings
|
||||
*/
|
||||
if (*str == '\0') {
|
||||
if (interactive) {
|
||||
/*
|
||||
* check for pipe mode and/or non-tty stdin
|
||||
*/
|
||||
@@ -220,11 +220,6 @@ main(int argc, char **argv)
|
||||
stdin_tty = isatty(0); /* assume stdin is on fd 0 */
|
||||
}
|
||||
|
||||
/*
|
||||
* empty string arg is no string
|
||||
*/
|
||||
str = NULL;
|
||||
|
||||
/*
|
||||
* if tty, setup bindings
|
||||
*/
|
||||
@@ -235,14 +230,15 @@ main(int argc, char **argv)
|
||||
switch (hist_init(calcbindings)) {
|
||||
case HIST_NOFILE:
|
||||
fprintf(stderr,
|
||||
"Cannot open bindings file \"%s\", %s.\n",
|
||||
calcbindings, "fancy editing disabled");
|
||||
"%s: Cannot open bindings file \"%s\", "
|
||||
"fancy editing disabled.\n",
|
||||
program, calcbindings);
|
||||
break;
|
||||
|
||||
case HIST_NOTTY:
|
||||
fprintf(stderr,
|
||||
"Cannot set terminal modes, %s.\n",
|
||||
"fancy editing disabled");
|
||||
"%s: Cannot set terminal modes, "
|
||||
"fancy editing disabled\n", program);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -260,21 +256,21 @@ main(int argc, char **argv)
|
||||
initialize();
|
||||
} else {
|
||||
/* initialize already done, jmpbuf is ready */
|
||||
post_init = TRUE;
|
||||
post_init = TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* if arg mode or non-tty mode, just do the work and be gone
|
||||
*/
|
||||
if (str || !stdin_tty) {
|
||||
if (!interactive || !stdin_tty) {
|
||||
if (q_flag == FALSE && allow_read) {
|
||||
runrcfiles();
|
||||
q_flag = TRUE;
|
||||
}
|
||||
if (str)
|
||||
(void) openstring(str);
|
||||
else
|
||||
if (interactive)
|
||||
(void) openterminal();
|
||||
else
|
||||
(void) openstring(cmdbuf);
|
||||
start_done = TRUE;
|
||||
getcommands(FALSE);
|
||||
libcalc_call_me_last();
|
||||
@@ -282,7 +278,7 @@ main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
/* if in arg mode, we should not get here */
|
||||
if (str) {
|
||||
if (!interactive) {
|
||||
libcalc_call_me_last();
|
||||
exit(1);
|
||||
}
|
||||
@@ -301,8 +297,8 @@ main(int argc, char **argv)
|
||||
* all done
|
||||
*/
|
||||
libcalc_call_me_last();
|
||||
exit(0);
|
||||
/*NOTREACHED*/
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -339,7 +335,8 @@ math_error(char *fmt, ...)
|
||||
|
||||
if (funcname && (*funcname != '*'))
|
||||
fprintf(stderr, "\"%s\": ", funcname);
|
||||
if (funcline && ((funcname && (*funcname != '*')) || !inputisterminal()))
|
||||
if (funcline && ((funcname && (*funcname != '*')) ||
|
||||
!inputisterminal()))
|
||||
fprintf(stderr, "line %ld: ", funcline);
|
||||
va_start(ap, fmt);
|
||||
vsprintf(buf, fmt, ap);
|
||||
@@ -349,7 +346,8 @@ math_error(char *fmt, ...)
|
||||
if (post_init) {
|
||||
longjmp(jmpbuf, 1);
|
||||
} 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
|
||||
* and besides ... this is an unusual internal error case
|
||||
|
4
calc.h
4
calc.h
@@ -26,7 +26,7 @@
|
||||
#define DEFAULTCALCHELP "help" /* help file that -h prints */
|
||||
#define DEFAULTSHELL "sh" /* default shell to use */
|
||||
#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 DOTCHAR '.' /* char which indicates current directory */
|
||||
#define PATHCHAR '/' /* char which separates path components */
|
||||
@@ -37,7 +37,7 @@
|
||||
#define SYMBOLSIZE 256 /* maximum symbol name size */
|
||||
#define MAXINDICES 20 /* maximum number of indices for objects */
|
||||
#define MAXLABELS 100 /* maximum number of user labels in function */
|
||||
#define MAXOBJECTS 10 /* maximum number of object types */
|
||||
#define MAXOBJECTS 128 /* maximum number of object types */
|
||||
#define MAXSTRING 1024 /* maximum size of string constant */
|
||||
#define MAXSTACK 1000 /* maximum depth of evaluation stack */
|
||||
#define MAXFILES 20 /* maximum number of opened files */
|
||||
|
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) {
|
||||
print buf0;
|
||||
}
|
||||
exit (error > 0);
|
||||
if (error > 0) {
|
||||
exit(1);
|
||||
} else {
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
@@ -81,8 +81,13 @@ static long getinitlist(void);
|
||||
void
|
||||
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)
|
||||
enterfilescope();
|
||||
for (;;) {
|
||||
|
2
config.c
2
config.c
@@ -890,7 +890,7 @@ config_copy(CONFIG *src)
|
||||
/*
|
||||
* copy over the values
|
||||
*/
|
||||
*dest = *src;
|
||||
memcpy((void *)dest, (void *)src, sizeof(CONFIG));
|
||||
|
||||
/*
|
||||
* clone the pointer values
|
||||
|
14
const.c
14
const.c
@@ -27,10 +27,11 @@ initconstants(void)
|
||||
math_error("Unable to allocate constant table");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < INITCONSTCOUNT; i++)
|
||||
consttable[i] = initnumbs[i];
|
||||
constcount = 8;
|
||||
constavail = CONSTALLOCSIZE - 8;
|
||||
consttable[INITCONSTCOUNT] = NULL; /* firewall */
|
||||
constcount = INITCONSTCOUNT;
|
||||
constavail = CONSTALLOCSIZE - INITCONSTCOUNT;
|
||||
}
|
||||
|
||||
|
||||
@@ -187,10 +188,9 @@ freeconstant(unsigned long index)
|
||||
void
|
||||
trimconstants(void)
|
||||
{
|
||||
NUMBER **qp;
|
||||
|
||||
qp = &consttable[constcount];
|
||||
while (constcount > 0 && (*--qp)->links == 0) {
|
||||
while (constcount > 0 &&
|
||||
(consttable[constcount-1] == NULL ||
|
||||
consttable[constcount-1]->links == 0)) {
|
||||
constcount--;
|
||||
constavail++;
|
||||
}
|
||||
|
@@ -41,13 +41,13 @@
|
||||
#
|
||||
# Put your custom calc library files here.
|
||||
#
|
||||
CUSTOM_CALC_FILES= argv.cal halflen.cal
|
||||
CUSTOM_CALC_FILES= argv.cal halflen.cal pzasusb8.cal
|
||||
|
||||
# The custom help files to install
|
||||
#
|
||||
# Put your custom help files here.
|
||||
#
|
||||
CUSTOM_HELP= argv devnull help sysinfo
|
||||
CUSTOM_HELP= argv devnull help sysinfo pzasusb8
|
||||
|
||||
# Any .h files that are needed by programs that use libcustcalc.a
|
||||
#
|
||||
@@ -63,7 +63,7 @@ CUSTOM_H_SRC=
|
||||
#
|
||||
# Put your custom .c files here.
|
||||
#
|
||||
CUSTOM_SRC= c_argv.c c_devnull.c c_help.c c_sysinfo.c
|
||||
CUSTOM_SRC= c_argv.c c_devnull.c c_help.c c_sysinfo.c c_pzasusb8.c
|
||||
|
||||
# Any .o files that are needed by program that use libcustcalc.a.
|
||||
# Don't put ${REQUIRED_OBJ} files in this list.
|
||||
@@ -72,7 +72,7 @@ CUSTOM_SRC= c_argv.c c_devnull.c c_help.c c_sysinfo.c
|
||||
#
|
||||
# Put your custom .o files here.
|
||||
#
|
||||
CUSTOM_OBJ= c_argv.o c_devnull.o c_help.o c_sysinfo.o
|
||||
CUSTOM_OBJ= c_argv.o c_devnull.o c_help.o c_sysinfo.o c_pzasusb8.o
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=- Defaults in case you want to build from this dir -=-=-=-=-=-=-#
|
||||
@@ -470,7 +470,8 @@ install: all
|
||||
else \
|
||||
true; \
|
||||
fi
|
||||
${Q}for i in ${INSTALL_H_SRC}; do \
|
||||
${Q}for i in ${INSTALL_H_SRC} /dev/null; do \
|
||||
if [ X$$i = X/dev/null ]; then continue; fi; \
|
||||
echo rm -f ${CUSTOMLIBDIR}/$$i; \
|
||||
rm -f ${CUSTOMLIBDIR}/$$i; \
|
||||
echo cp $$i ${CUSTOMLIBDIR}; \
|
||||
@@ -589,6 +590,11 @@ c_help.o: ../string.h
|
||||
c_help.o: ../value.h
|
||||
c_help.o: ../zmath.h
|
||||
c_help.o: c_help.c
|
||||
c_pzasusb8.o: ../custom.h
|
||||
c_pzasusb8.o: ../have_const.h
|
||||
c_pzasusb8.o: ../value.h
|
||||
c_pzasusb8.o: ../zmath.h
|
||||
c_pzasusb8.o: c_pzasusb8.c
|
||||
c_sysinfo.o: ../alloc.h
|
||||
c_sysinfo.o: ../block.h
|
||||
c_sysinfo.o: ../byteswap.h
|
||||
|
70
custom/c_pzasusb8.c
Normal file
70
custom/c_pzasusb8.c
Normal file
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Permission to use, copy, modify, and distribute this software and
|
||||
* its documentation for any purpose and without fee is hereby granted.
|
||||
*
|
||||
* Ernest Bowen, following Landon Curt Noll
|
||||
*/
|
||||
|
||||
#if defined(CUSTOM)
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "../have_const.h"
|
||||
#include "../value.h"
|
||||
#include "../custom.h"
|
||||
#include "../zmath.h"
|
||||
|
||||
/*
|
||||
* c_pzasusb8 - print numereator of real as if its array of HALFs were
|
||||
* a string of USB8s
|
||||
*
|
||||
* given:
|
||||
* count = 1;
|
||||
* vals[0] real number;
|
||||
*
|
||||
* returns:
|
||||
* null
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
VALUE
|
||||
c_pzasusb8(char *name, int count, VALUE **vals)
|
||||
{
|
||||
VALUE result; /* what we will return */
|
||||
ZVALUE z; /* numerator of the value */
|
||||
long half_cnt; /* number of HALFs in the numerator */
|
||||
USB8 *h; /* octet pointer */
|
||||
long half_len; /* length of a half in octets */
|
||||
long i;
|
||||
long j;
|
||||
|
||||
/*
|
||||
* arg check
|
||||
*/
|
||||
result.v_type = V_NULL;
|
||||
if (vals[0]->v_type != V_NUM) {
|
||||
math_error("Non-real argument for pzasusb8");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
/*
|
||||
* look at the numerator
|
||||
*/
|
||||
z = vals[0]->v_num->num;
|
||||
half_len = sizeof(HALF);
|
||||
half_cnt = z.len;
|
||||
|
||||
/*
|
||||
* print the octets
|
||||
*/
|
||||
h = (USB8 *) z.v;
|
||||
for (i=0; i < half_cnt; ++i) {
|
||||
printf("%d:\t", i);
|
||||
for (j=0; j < half_len; ++j) {
|
||||
printf("%02x", (int)(*h++));
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
#endif /* CUSTOM */
|
@@ -99,6 +99,7 @@ static struct infoname sys_info[] = {
|
||||
{"LONGLONG_BITS", "length of a long long, or 0", NULL, (FULL)LONGLONG_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},
|
||||
{"MAX_CALCRC", "maximum allowed length of $CALCRC", NULL, (FULL)MAX_CALCRC},
|
||||
{"MAXCMD", "max length of command invocation", NULL, (FULL)MAXCMD},
|
||||
{"MAXDIM", "max number of dimensions in matrices", NULL, (FULL)MAXDIM},
|
||||
{"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_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},
|
||||
{"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},
|
||||
{"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},
|
||||
@@ -238,9 +237,10 @@ c_sysinfo(char *name, int count, VALUE **vals)
|
||||
} else if (vals[0]->v_type == V_STR) {
|
||||
|
||||
/* convert vals[0] to upper case string */
|
||||
buf = (char *)malloc(strlen((char *)vals[0]->v_str)+1);
|
||||
for (q = (char *)vals[0]->v_str, r = buf; *q; ++q, ++r) {
|
||||
if (isascii(*q) && islower(*q)) {
|
||||
buf = (char *)malloc(strlen((char *)vals[0]->v_str->s_str)+1);
|
||||
for (q = (char *)vals[0]->v_str->s_str, r = buf; *q; ++q, ++r)
|
||||
{
|
||||
if (isascii((int)*q) && islower((int)*q)) {
|
||||
*r = *q - 'a' + 'A';
|
||||
} else {
|
||||
*r = *q;
|
||||
@@ -262,7 +262,7 @@ c_sysinfo(char *name, int count, VALUE **vals)
|
||||
/* return value as string */
|
||||
result.v_type = V_STR;
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
result.v_str = (STRING *)p->str;
|
||||
result.v_str = makestring(p->str);
|
||||
}
|
||||
|
||||
/* return found infotype as value */
|
||||
|
@@ -59,6 +59,7 @@ extern VALUE c_argv(char*, int, VALUE**);
|
||||
extern VALUE c_devnull(char*, int, VALUE**);
|
||||
extern VALUE c_help(char*, int, VALUE**);
|
||||
extern VALUE c_sysinfo(char*, int, VALUE**);
|
||||
extern VALUE c_pzasusb8(char*, int, VALUE**);
|
||||
|
||||
|
||||
#endif /* CUSTOM */
|
||||
@@ -108,6 +109,9 @@ CONST struct custom cust[] = {
|
||||
{ "sysinfo", "return a calc #define value",
|
||||
0, 1, c_sysinfo },
|
||||
|
||||
{ "pzasusb8", "print ZCALUE as USB8",
|
||||
0, 1, c_pzasusb8 },
|
||||
|
||||
|
||||
#endif /* CUSTOM */
|
||||
|
||||
|
50
custom/pzasusb8
Normal file
50
custom/pzasusb8
Normal file
@@ -0,0 +1,50 @@
|
||||
NAME
|
||||
pzasusb8 - print a number in hex octets
|
||||
|
||||
SYNOPSIS
|
||||
custom("pzasusb8", arg)
|
||||
|
||||
TYPES
|
||||
arg real
|
||||
|
||||
return null
|
||||
|
||||
DESCRIPTION
|
||||
This custom function prints out the numerator of a real value
|
||||
in octets. Each HALF value is printed in a separate line.
|
||||
|
||||
NOTE: The output will vary depending on the size of a HALF
|
||||
and the byte order of the system. See:
|
||||
|
||||
custom("sysinfo", "BASEB")
|
||||
custom("sysinfo", "CALC_BYTE_ORDER")
|
||||
|
||||
foe details.
|
||||
|
||||
This custom function is intented for testing of the general
|
||||
custom interface.
|
||||
|
||||
EXAMPLE
|
||||
> custom("pzasusb8", 0x01020304050607080910111213141516);
|
||||
0: 13141516
|
||||
1: 09101112
|
||||
2: 05060708
|
||||
3: 01020304
|
||||
|
||||
> custom("pzasusb8", 10^25)
|
||||
0: 4a000000
|
||||
1: 16140148
|
||||
2: 00084595
|
||||
|
||||
> printf("%x\n", 10^25);
|
||||
0x84595161401484a000000
|
||||
|
||||
LIMITS
|
||||
calc must be built with ALLOW_CUSTOM= -DCUSTOM
|
||||
calc must be executed with a -C arg.
|
||||
|
||||
LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
custom
|
29
custom/pzasusb8.cal
Normal file
29
custom/pzasusb8.cal
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Permission to use, copy, modify, and distribute this software and
|
||||
* its documentation for any purpose and without fee is hereby granted.
|
||||
*
|
||||
* Ernest Bowen, following Landon Curt Noll
|
||||
*/
|
||||
|
||||
print "p(n) prints array in which numerator of n is stored as a";
|
||||
print "sequence of 2-hex-digits representing unsigned characters.";
|
||||
print "h(n) printx n in hex notation. This should be the same as";
|
||||
print "p(n) except for (1) its leading 0x, (2) possible trailing zeros";
|
||||
print "in p(n), and (3) the order of the hex-digit pairs.";
|
||||
print "The following example show results for n = isqrt(2e100).";
|
||||
print "";
|
||||
|
||||
define p(n) {custom("pzasusb8", n); print;}
|
||||
define h(n) = printf("%x\n", n);
|
||||
|
||||
n = isqrt(2e100);
|
||||
print "";
|
||||
p(n);
|
||||
h(n);
|
||||
print "";
|
||||
print "BASEB: ", custom("sysinfo", "BASEB");
|
||||
print "CALC_BYTE_ORDER: ", custom("sysinfo", "CALC_BYTE_ORDER");
|
||||
print "BIG_ENDIAN: ", custom("sysinfo", "BIG_ENDIAN");
|
||||
print "LITTLE_ENDIAN: ", custom("sysinfo", "LITTLE_ENDIAN");
|
||||
print "LONG_BITS: ", custom("sysinfo", "LONG_BITS");
|
||||
print "LONGLONG_BITS: ", custom("sysinfo", "LONGLONG_BITS");
|
61
endian.c
61
endian.c
@@ -39,41 +39,42 @@
|
||||
char byte[8] = { (char)0x12, (char)0x36, (char)0x48, (char)0x59,
|
||||
(char)0x01, (char)0x23, (char)0x45, (char)0x67 };
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
/* pointers into the byte order array */
|
||||
int *intp = (int *)byte;
|
||||
/* pointers into the byte order array */
|
||||
int *intp = (int *)byte;
|
||||
#if defined(DEBUG)
|
||||
short *shortp = (short *)byte;
|
||||
long *longp = (long *)byte;
|
||||
short *shortp = (short *)byte;
|
||||
long *longp = (long *)byte;
|
||||
|
||||
printf("byte: %02x %02x %02x %02x %02x %02x %02x %02x\n",
|
||||
byte[0], byte[1], byte[2], byte[3],
|
||||
byte[4], byte[5], byte[6], byte[7]);
|
||||
printf("short: %04x %04x %04x %04x\n",
|
||||
shortp[0], shortp[1], shortp[2], shortp[3]);
|
||||
printf("int: %08x %08x\n",
|
||||
intp[0], intp[1]);
|
||||
printf("long: %08x %08x\n",
|
||||
longp[0], longp[1]);
|
||||
printf("byte: %02x %02x %02x %02x %02x %02x %02x %02x\n",
|
||||
byte[0], byte[1], byte[2], byte[3],
|
||||
byte[4], byte[5], byte[6], byte[7]);
|
||||
printf("short: %04x %04x %04x %04x\n",
|
||||
shortp[0], shortp[1], shortp[2], shortp[3]);
|
||||
printf("int: %08x %08x\n",
|
||||
intp[0], intp[1]);
|
||||
printf("long: %08x %08x\n",
|
||||
longp[0], longp[1]);
|
||||
#endif
|
||||
|
||||
/* Print the standard <machine/endian.h> defines */
|
||||
printf("#define BIG_ENDIAN\t4321\n");
|
||||
printf("#define LITTLE_ENDIAN\t1234\n");
|
||||
/* Print the standard <machine/endian.h> defines */
|
||||
printf("#define BIG_ENDIAN\t4321\n");
|
||||
printf("#define LITTLE_ENDIAN\t1234\n");
|
||||
|
||||
/* Determine byte order */
|
||||
if (intp[0] == 0x12364859) {
|
||||
/* Most Significant Byte first */
|
||||
printf("#define CALC_BYTE_ORDER\tBIG_ENDIAN\n");
|
||||
} else if (intp[0] == 0x59483612) {
|
||||
/* Least Significant Byte first */
|
||||
printf("#define CALC_BYTE_ORDER\tLITTLE_ENDIAN\n");
|
||||
} else {
|
||||
fprintf(stderr,
|
||||
"Unknown int Byte Order, set CALC_BYTE_ORDER in Makefile\n");
|
||||
exit(1);
|
||||
}
|
||||
exit(0);
|
||||
/* Determine byte order */
|
||||
if (intp[0] == 0x12364859) {
|
||||
/* Most Significant Byte first */
|
||||
printf("#define CALC_BYTE_ORDER\tBIG_ENDIAN\n");
|
||||
} else if (intp[0] == 0x59483612) {
|
||||
/* Least Significant Byte first */
|
||||
printf("#define CALC_BYTE_ORDER\tLITTLE_ENDIAN\n");
|
||||
} else {
|
||||
fprintf(stderr,
|
||||
"Unknown int Byte Order, set CALC_BYTE_ORDER in Makefile\n");
|
||||
exit(1);
|
||||
}
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
13
file.c
13
file.c
@@ -1141,6 +1141,7 @@ rewindall(void)
|
||||
*
|
||||
* NOTE: Does not support negative file positions.
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
static ZVALUE
|
||||
filepos2z(FILEPOS pos)
|
||||
{
|
||||
@@ -1493,6 +1494,7 @@ setloc(FILEID id, ZVALUE zpos)
|
||||
* returns:
|
||||
* file size as a ZVALUE
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
static ZVALUE
|
||||
off_t2z(off_t siz)
|
||||
{
|
||||
@@ -1555,6 +1557,7 @@ dev2z(dev_t dev)
|
||||
* returns:
|
||||
* file size as a ZVALUE
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
static ZVALUE
|
||||
inode2z(ino_t inode)
|
||||
{
|
||||
@@ -1841,7 +1844,8 @@ getscanfield(FILE *fp, BOOL skip, unsigned int width, int scannum, char *scanptr
|
||||
if (c == EOF || c == '\0')
|
||||
break;
|
||||
chnum++;
|
||||
if(scannum && (memchr(scanptr,c,scannum)==NULL) ^ comp)
|
||||
if(scannum &&
|
||||
((memchr(scanptr,c,scannum)==NULL) ^ comp))
|
||||
break;
|
||||
if (!skip) {
|
||||
*b++ = c;
|
||||
@@ -1918,7 +1922,7 @@ getscanwhite(FILE *fp, BOOL skip, unsigned int width, int scannum, char **strptr
|
||||
if (c == EOF || c == '\0')
|
||||
break;
|
||||
chnum++;
|
||||
if(scannum && !isspace(c) ^ comp)
|
||||
if(scannum && (!isspace(c) ^ comp))
|
||||
break;
|
||||
if (!skip) {
|
||||
*b++ = c;
|
||||
@@ -1980,11 +1984,11 @@ fscanfile(FILE *fp, char *fmt, int count, VALUE **vals)
|
||||
for (;;) {
|
||||
for (;;) {
|
||||
f = *fmt++;
|
||||
if (isspace(f)) {
|
||||
if (isspace((int)f)) {
|
||||
getscanwhite(fp,1,0,6,NULL);
|
||||
do {
|
||||
f = *fmt++;
|
||||
} while (isspace(f));
|
||||
} while (isspace((int)f));
|
||||
}
|
||||
c = fgetc(fp);
|
||||
if (c == EOF)
|
||||
@@ -2267,6 +2271,7 @@ freadnum(FILE *fp, VALUE *valptr)
|
||||
num = newnum;
|
||||
zden = newden;
|
||||
}
|
||||
zfree(div);
|
||||
}
|
||||
q = qalloc();
|
||||
q->num = num;
|
||||
|
@@ -60,7 +60,7 @@
|
||||
|
||||
char *program; /* our name */
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int stsizelen; /* bit length of st_size in buf */
|
||||
@@ -225,5 +225,6 @@ main(int argc, char **argv)
|
||||
printf("#define SWAP_HALF_IN_INODE(dest, src)\t%s%d%s\n",
|
||||
"memcpy((void *)(dest), (void *)(src), sizeof(",inodelen,"))");
|
||||
#endif /* CALC_BYTE_ORDER == BIG_ENDIAN */
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
44
func.c
44
func.c
@@ -13,11 +13,12 @@
|
||||
|
||||
#if defined(FUNCLIST)
|
||||
|
||||
#include <stdio.h>
|
||||
#define CONST /* disabled for FUNCLIST in case NATIVE_CC doesn't have it */
|
||||
|
||||
#else /* FUNCLIST */
|
||||
|
||||
#include "calc_errno.h"
|
||||
|
||||
#include "have_unistd.h"
|
||||
#if defined(HAVE_UNISTD_H)
|
||||
#include <unistd.h>
|
||||
@@ -77,9 +78,6 @@ static VALUE f_fsize(VALUE *vp);
|
||||
/*
|
||||
* external declarations
|
||||
*/
|
||||
extern int errno; /* last system error */
|
||||
extern char *sys_errlist[]; /* system error messages */
|
||||
extern int sys_nerr; /* number of system errors */
|
||||
extern char cmdbuf[]; /* command line expression */
|
||||
extern CONST char *error_table[E__COUNT+2]; /* calc coded error messages */
|
||||
extern void matrandperm(MATRIX *M);
|
||||
@@ -232,33 +230,34 @@ f_str(VALUE *vp)
|
||||
switch (vp->v_type) {
|
||||
case V_STR:
|
||||
result.v_str = stringcopy(vp->v_str);
|
||||
return result;
|
||||
break;
|
||||
case V_NULL:
|
||||
result.v_str = slink(&_nullstring_);
|
||||
return result;
|
||||
break;
|
||||
case V_OCTET:
|
||||
result.v_str = charstring(*vp->v_octet);
|
||||
return result;
|
||||
break;
|
||||
case V_NUM:
|
||||
math_divertio();
|
||||
qprintnum(vp->v_num, MODE_DEFAULT);
|
||||
cp = math_getdivertedio();
|
||||
result.v_str = makestring(cp);
|
||||
break;
|
||||
case V_COM:
|
||||
math_divertio();
|
||||
comprint(vp->v_com);
|
||||
cp = math_getdivertedio();
|
||||
result.v_str = makestring(cp);
|
||||
break;
|
||||
default:
|
||||
return error_value(E_STR);
|
||||
}
|
||||
result.v_str = makestring(cp);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static VALUE
|
||||
f_name (VALUE *vp)
|
||||
f_name(VALUE *vp)
|
||||
{
|
||||
VALUE result;
|
||||
char *cp;
|
||||
@@ -769,6 +768,13 @@ f_nextcand(int count, NUMBER **vals)
|
||||
}
|
||||
|
||||
|
||||
static NUMBER *
|
||||
f_seed(void)
|
||||
{
|
||||
return pseudo_seed();
|
||||
}
|
||||
|
||||
|
||||
static NUMBER *
|
||||
f_rand(int count, NUMBER **vals)
|
||||
{
|
||||
@@ -1244,6 +1250,7 @@ minlistitems(LIST *lp)
|
||||
VALUE min;
|
||||
|
||||
min.v_type = V_NULL;
|
||||
term.v_type = V_NULL;
|
||||
|
||||
for (ep = lp->l_first; ep; ep = ep->e_next) {
|
||||
vp = &ep->e_value;
|
||||
@@ -1293,6 +1300,7 @@ maxlistitems(LIST *lp)
|
||||
VALUE max;
|
||||
|
||||
max.v_type = V_NULL;
|
||||
term.v_type = V_NULL;
|
||||
|
||||
for (ep = lp->l_first; ep; ep = ep->e_next) {
|
||||
vp = &ep->e_value;
|
||||
@@ -1341,6 +1349,8 @@ f_min(int count, VALUE **vals)
|
||||
VALUE rel;
|
||||
|
||||
min.v_type = V_NULL;
|
||||
term.v_type = V_NULL;
|
||||
|
||||
while (count-- > 0) {
|
||||
vp = *vals++;
|
||||
switch(vp->v_type) {
|
||||
@@ -1392,6 +1402,7 @@ f_max(int count, VALUE **vals)
|
||||
VALUE rel;
|
||||
|
||||
max.v_type = V_NULL;
|
||||
term.v_type = V_NULL;
|
||||
|
||||
while (count-- > 0) {
|
||||
vp = *vals++;
|
||||
@@ -1496,6 +1507,7 @@ sumlistitems(LIST *lp)
|
||||
VALUE sum;
|
||||
|
||||
sum.v_type = V_NULL;
|
||||
term.v_type = V_NULL;
|
||||
|
||||
for (ep = lp->l_first; ep; ep = ep->e_next) {
|
||||
vp = &ep->e_value;
|
||||
@@ -1536,6 +1548,8 @@ f_sum(int count, VALUE **vals)
|
||||
VALUE *vp;
|
||||
|
||||
sum.v_type = V_NULL;
|
||||
term.v_type = V_NULL;
|
||||
|
||||
while (count-- > 0) {
|
||||
vp = *vals++;
|
||||
switch(vp->v_type) {
|
||||
@@ -4838,14 +4852,14 @@ strscan(char *s, int count, VALUE **vals)
|
||||
while (*s != '\0') {
|
||||
s--;
|
||||
while ((ch = *++s)) {
|
||||
if (!isspace(ch))
|
||||
if (!isspace((int)ch))
|
||||
break;
|
||||
}
|
||||
if (ch == '\0' || count-- == 0)
|
||||
return n;
|
||||
s0 = s;
|
||||
while ((ch = *++s)) {
|
||||
if (isspace(ch))
|
||||
if (isspace((int)ch))
|
||||
break;
|
||||
}
|
||||
chtmp = ch;
|
||||
@@ -5171,11 +5185,14 @@ f_strprintf(int count, VALUE **vals)
|
||||
math_divertio();
|
||||
i = idprintf(FILEID_STDOUT, vals[0]->v_str->s_str,
|
||||
count - 1, vals + 1);
|
||||
if (i)
|
||||
if (i) {
|
||||
free(math_getdivertedio());
|
||||
return error_value(E_STRPRINTF2);
|
||||
}
|
||||
cp = math_getdivertedio();
|
||||
result.v_type = V_STR;
|
||||
result.v_str = makenewstring(cp);
|
||||
free(cp);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -5919,6 +5936,7 @@ f_putenv(int count, VALUE **vals)
|
||||
/* return putenv result */
|
||||
result.v_type = V_NUM;
|
||||
result.v_num = itoq((long) putenv(putenv_str));
|
||||
free(putenv_str);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -7138,6 +7156,8 @@ static CONST struct builtin builtins[] = {
|
||||
"sec of a within accuracy b"},
|
||||
{"sech", 1, 2, 0, OP_NOP, 0, f_sech,
|
||||
"hyperbolic secant of a within accuracy b"},
|
||||
{"seed", 0, 0, 0, OP_NOP, f_seed, 0,
|
||||
"return a 64 bit seed for a psuedo-random generator"},
|
||||
{"segment", 2, 3, 0, OP_NOP, 0, f_segment,
|
||||
"specified segment of specified list"},
|
||||
{"select", 2, 2, 0, OP_NOP, 0, f_select,
|
||||
|
59
hash.c
59
hash.c
@@ -147,13 +147,13 @@ hash_free(HASH *state)
|
||||
HASH *
|
||||
hash_copy(HASH *state)
|
||||
{
|
||||
HASH *new; /* copy of state */
|
||||
HASH *hnew; /* copy of state */
|
||||
|
||||
/*
|
||||
* malloc new state
|
||||
*/
|
||||
new = (HASH *)malloc(sizeof(HASH));
|
||||
if (new == NULL) {
|
||||
hnew = (HASH *)malloc(sizeof(HASH));
|
||||
if (hnew == NULL) {
|
||||
math_error("hash_init: cannot malloc HASH");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
@@ -161,8 +161,8 @@ hash_copy(HASH *state)
|
||||
/*
|
||||
* duplicate state
|
||||
*/
|
||||
memcpy((void *)new, (void *)state, sizeof(HASH));
|
||||
return new;
|
||||
memcpy((void *)hnew, (void *)state, sizeof(HASH));
|
||||
return hnew;
|
||||
}
|
||||
|
||||
|
||||
@@ -391,8 +391,8 @@ hash_zvalue(int type, ZVALUE zval, HASH *state)
|
||||
*/
|
||||
if (zval.len > full_lim) {
|
||||
for (j=0; j < zval.len-full_lim-1; j += 2) {
|
||||
half[j] = zval.v[full_lim+i+1];
|
||||
half[j+1] = zval.v[full_lim+i];
|
||||
half[j] = zval.v[full_lim+j+1];
|
||||
half[j+1] = zval.v[full_lim+j];
|
||||
}
|
||||
if (j < zval.len-full_lim) {
|
||||
half[j] = (HALF)0;
|
||||
@@ -562,7 +562,7 @@ hash_complex(int type, void *c, HASH *state)
|
||||
|
||||
|
||||
/*
|
||||
* hash_str - hash a string
|
||||
* hash_str - hash a null-terminated string
|
||||
*
|
||||
* given:
|
||||
* type - hash type (see hash.h)
|
||||
@@ -604,6 +604,47 @@ hash_str(int type, char *str, HASH *state)
|
||||
*/
|
||||
return state;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* hash_STR - hash a STRING
|
||||
*
|
||||
* given:
|
||||
* type - hash type (see hash.h)
|
||||
* str - the STRING
|
||||
* state - the state to hash or NULL
|
||||
*
|
||||
* returns:
|
||||
* the new state
|
||||
*/
|
||||
HASH *
|
||||
hash_STR(int type, STRING *str, HASH *state)
|
||||
{
|
||||
/*
|
||||
* initialize if state is NULL
|
||||
*/
|
||||
if (state == NULL) {
|
||||
state = hash_init(type, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* setup for the string hash
|
||||
*/
|
||||
if (!state->bytes) {
|
||||
(state->chkpt)(state);
|
||||
state->bytes = TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* hash the string
|
||||
*/
|
||||
(state->update)(state, (USB8*) str->s_str, (USB32) str->s_len);
|
||||
|
||||
/*
|
||||
* all done
|
||||
*/
|
||||
return state;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
@@ -720,7 +761,7 @@ hash_value(int type, void *v, HASH *state)
|
||||
/* strings have no setup */
|
||||
|
||||
/* hash this type */
|
||||
state = hash_str(type, value->v_str->s_str, state);
|
||||
state = hash_STR(type, value->v_str, state);
|
||||
break;
|
||||
|
||||
case V_MAT:
|
||||
|
@@ -42,7 +42,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#if defined(HAVE_NO_CONST)
|
||||
@@ -56,5 +56,6 @@ main(void)
|
||||
printf("#undef CONST\n");
|
||||
printf("#define CONST %s /* yes */\n", str);
|
||||
#endif /* HAVE_NO_CONST */
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
23
have_fpos.c
23
have_fpos.c
@@ -32,22 +32,23 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#if !defined(HAVE_NO_FPOS)
|
||||
fpos_t pos; /* file position */
|
||||
fpos_t pos; /* file position */
|
||||
|
||||
/* get the current position */
|
||||
(void) fgetpos(stdin, &pos);
|
||||
/* get the current position */
|
||||
(void) fgetpos(stdin, &pos);
|
||||
|
||||
/* set the current position */
|
||||
(void) fsetpos(stdin, &pos);
|
||||
/* set the current position */
|
||||
(void) fsetpos(stdin, &pos);
|
||||
|
||||
/* print a have_fpos.h body that says we have the functions */
|
||||
printf("#undef HAVE_FPOS\n");
|
||||
printf("#define HAVE_FPOS 1 /* yes */\n\n");
|
||||
printf("typedef fpos_t FILEPOS;\n");
|
||||
/* print a have_fpos.h body that says we have the functions */
|
||||
printf("#undef HAVE_FPOS\n");
|
||||
printf("#define HAVE_FPOS 1 /* yes */\n\n");
|
||||
printf("typedef fpos_t FILEPOS;\n");
|
||||
#endif
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
@@ -44,7 +44,7 @@
|
||||
char src[] = "chongo was here";
|
||||
char dest[MOVELEN+1];
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#if defined(HAVE_NO_MEMMOVE)
|
||||
@@ -54,5 +54,6 @@ main(void)
|
||||
|
||||
printf("#define HAVE_MEMMOVE /* yes */\n");
|
||||
#endif /* HAVE_NO_MEMMOVE */
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
@@ -46,7 +46,7 @@
|
||||
char src[] = "chongo was here";
|
||||
char dest[MOVELEN+1];
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#if defined(HAVE_NO_NEWSTR)
|
||||
@@ -58,5 +58,6 @@ main(void)
|
||||
|
||||
printf("#define HAVE_NEWSTR /* yes */\n");
|
||||
#endif /* HAVE_NO_NEWSTR */
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
@@ -45,7 +45,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#if !defined(OFF_T_NON_SCALAR)
|
||||
@@ -79,5 +79,6 @@ main(void)
|
||||
#else
|
||||
printf("#undef HAVE_OFF_T_SCALAR /* off_t is not a simple value */\n");
|
||||
#endif
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
@@ -46,7 +46,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include "have_fpos.h"
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#if !defined(FILEPOS_NON_SCALAR)
|
||||
@@ -80,5 +80,6 @@ main(void)
|
||||
#else
|
||||
printf("#undef HAVE_FILEPOS_SCALAR /* FILEPOS is not a simple value */\n");
|
||||
#endif
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
118
have_stdvs.c
118
have_stdvs.c
@@ -54,86 +54,88 @@ char buf[BUFSIZ];
|
||||
|
||||
|
||||
void
|
||||
try(char *fmt, ...)
|
||||
try_this(char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
va_start(ap, fmt);
|
||||
#if !defined(DONT_HAVE_VSPRINTF)
|
||||
vsprintf(buf, fmt, ap);
|
||||
vsprintf(buf, fmt, ap);
|
||||
#else
|
||||
sprintf(buf, fmt, ap);
|
||||
sprintf(buf, fmt, ap);
|
||||
#endif
|
||||
va_end(ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
/*
|
||||
* setup
|
||||
*/
|
||||
buf[0] = '\0';
|
||||
/*
|
||||
* setup
|
||||
*/
|
||||
buf[0] = '\0';
|
||||
|
||||
/*
|
||||
* test variable args and vsprintf/sprintf
|
||||
*/
|
||||
try("@%d:%s:%d@", 1, "hi", 2);
|
||||
if (strcmp(buf, "@1:hi:2@") != 0) {
|
||||
/*
|
||||
* test variable args and vsprintf/sprintf
|
||||
*/
|
||||
try_this("@%d:%s:%d@", 1, "hi", 2);
|
||||
if (strcmp(buf, "@1:hi:2@") != 0) {
|
||||
#if !defined(DONT_HAVE_VSPRINTF)
|
||||
/* <stdarg.h> with vsprintf() didn't work */
|
||||
/* <stdarg.h> with vsprintf() didn't work */
|
||||
#else
|
||||
/* <stdarg.h> with sprintf() simulating vsprintf() didn't work */
|
||||
/* <stdarg.h> with sprintf() simulating vsprintf() didn't work */
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
try("%s %d%s%d%d %s",
|
||||
"Landon Noll 1st proved that", 2, "^", 23209, -1, "was prime");
|
||||
if (strcmp(buf, "Landon Noll 1st proved that 2^23209-1 was prime") != 0) {
|
||||
exit(1);
|
||||
}
|
||||
try_this("%s %d%s%d%d %s",
|
||||
"Landon Noll 1st proved that", 2, "^", 23209, -1, "was prime");
|
||||
if (strcmp(buf,
|
||||
"Landon Noll 1st proved that 2^23209-1 was prime") != 0) {
|
||||
#if !defined(DONT_HAVE_VSPRINTF)
|
||||
/* <stdarg.h> with vsprintf() didn't work */
|
||||
/* <stdarg.h> with vsprintf() didn't work */
|
||||
#else
|
||||
/* <stdarg.h> with sprintf() simulating vsprintf() didn't work */
|
||||
/* <stdarg.h> with sprintf() simulating vsprintf() didn't work */
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* report the result
|
||||
*/
|
||||
puts("/* what type of variable args do we have? */");
|
||||
/*
|
||||
* report the result
|
||||
*/
|
||||
puts("/* what type of variable args do we have? */");
|
||||
#if defined(DONT_HAVE_VSPRINTF)
|
||||
puts("/*");
|
||||
puts(" * SIMULATE_STDARG");
|
||||
puts(" *");
|
||||
puts(" * WARNING: This type of stdarg makes assumptions about the stack");
|
||||
puts(" * that may not be true on your system. You may want to");
|
||||
puts(" * define STDARG (if using ANSI C) or VARARGS.");
|
||||
puts(" */");
|
||||
puts("typedef char *va_list;");
|
||||
puts("#define va_start(ap,parmn) (void)((ap) = (char*)(&(parmn) + 1))");
|
||||
puts("#define va_end(ap) (void)((ap) = 0)");
|
||||
puts("#define va_arg(ap, type) \\");
|
||||
puts(" (((type*)((ap) = ((ap) + sizeof(type))))[-1])");
|
||||
puts("#define SIMULATE_STDARG /* use std_arg.h to simulate <stdarg.h> */");
|
||||
puts("/*");
|
||||
puts(" * SIMULATE_STDARG");
|
||||
puts(" *");
|
||||
puts(" * WARNING: This type of stdarg makes assumptions about the stack");
|
||||
puts(" * that may not be true on your system. You may want to");
|
||||
puts(" * define STDARG (if using ANSI C) or VARARGS.");
|
||||
puts(" */");
|
||||
puts("typedef char *va_list;");
|
||||
puts("#define va_start(ap,parmn) (void)((ap) = (char*)(&(parmn) + 1))");
|
||||
puts("#define va_end(ap) (void)((ap) = 0)");
|
||||
puts("#define va_arg(ap, type) \\");
|
||||
puts(" (((type*)((ap) = ((ap) + sizeof(type))))[-1])");
|
||||
puts("#define SIMULATE_STDARG /* use std_arg.h to simulate <stdarg.h> */");
|
||||
#else
|
||||
puts("#define STDARG /* use <stdarg.h> */");
|
||||
puts("#include <stdarg.h>");
|
||||
puts("#define STDARG /* use <stdarg.h> */");
|
||||
puts("#include <stdarg.h>");
|
||||
#endif
|
||||
puts("\n/* should we use vsprintf()? */");
|
||||
puts("\n/* should we use vsprintf()? */");
|
||||
#if !defined(DONT_HAVE_VSPRINTF)
|
||||
puts("#define HAVE_VS /* yes */");
|
||||
puts("#define HAVE_VS /* yes */");
|
||||
#else
|
||||
puts("/*");
|
||||
puts(" * Hack aleart!!!");
|
||||
puts(" *");
|
||||
puts(" * Systems that do not have vsprintf() need something. In some");
|
||||
puts(" * cases the sprintf function will deal correctly with the");
|
||||
puts(" * va_alist 3rd arg. Hope for the best!");
|
||||
puts(" */");
|
||||
puts("#define vsprintf sprintf");
|
||||
puts("#undef HAVE_VS");
|
||||
puts("/*");
|
||||
puts(" * Hack aleart!!!");
|
||||
puts(" *");
|
||||
puts(" * Systems that do not have vsprintf() need something. In some");
|
||||
puts(" * cases the sprintf function will deal correctly with the");
|
||||
puts(" * va_alist 3rd arg. Hope for the best!");
|
||||
puts(" */");
|
||||
puts("#define vsprintf sprintf");
|
||||
puts("#undef HAVE_VS");
|
||||
#endif
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
@@ -47,7 +47,7 @@
|
||||
#include <sys/types.h>
|
||||
#endif /* ! HAVE_NO_UID_T */
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#if defined(HAVE_NO_UID_T)
|
||||
@@ -60,5 +60,6 @@ main(void)
|
||||
|
||||
printf("#define HAVE_UID_T /* yes */\n");
|
||||
#endif /* HAVE_NO_UID_T */
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
84
have_varvs.c
84
have_varvs.c
@@ -52,7 +52,7 @@ char buf[BUFSIZ];
|
||||
#include <varargs.h>
|
||||
|
||||
void
|
||||
try(char *fmt, ...)
|
||||
try_this(char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
@@ -68,7 +68,7 @@ try(char *fmt, ...)
|
||||
#else
|
||||
|
||||
void
|
||||
try(char *a, int b, char *c, int d)
|
||||
try_this(char *a, int b, char *c, int d)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -76,56 +76,58 @@ try(char *a, int b, char *c, int d)
|
||||
#endif
|
||||
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
/*
|
||||
* setup
|
||||
*/
|
||||
buf[0] = '\0';
|
||||
/*
|
||||
* setup
|
||||
*/
|
||||
buf[0] = '\0';
|
||||
|
||||
/*
|
||||
* test variable args and vsprintf/sprintf
|
||||
*/
|
||||
try("@%d:%s:%d@", 1, "hi", 2);
|
||||
if (strcmp(buf, "@1:hi:2@") != 0) {
|
||||
/*
|
||||
* test variable args and vsprintf/sprintf
|
||||
*/
|
||||
try_this("@%d:%s:%d@", 1, "hi", 2);
|
||||
if (strcmp(buf, "@1:hi:2@") != 0) {
|
||||
#if !defined(DONT_HAVE_VSPRINTF)
|
||||
/* <varargs.h> with vsprintf() didn't work */
|
||||
/* <varargs.h> with vsprintf() didn't work */
|
||||
#else
|
||||
/* <varargs.h> with sprintf() simulating vsprintf() didn't work */
|
||||
/* <varargs.h> with sprintf() simulating vsprintf() didn't work */
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
try("%s %d%s%d%d %s",
|
||||
"Landon Noll 1st proved that", 2, "^", 23209, -1, "was prime");
|
||||
if (strcmp(buf, "Landon Noll 1st proved that 2^23209-1 was prime") != 0) {
|
||||
exit(1);
|
||||
}
|
||||
try_this("%s %d%s%d%d %s",
|
||||
"Landon Noll 1st proved that", 2, "^", 23209, -1, "was prime");
|
||||
if (strcmp(buf,
|
||||
"Landon Noll 1st proved that 2^23209-1 was prime") != 0) {
|
||||
#if !defined(DONT_HAVE_VSPRINTF)
|
||||
/* <stdarg.h> with vsprintf() didn't work */
|
||||
/* <stdarg.h> with vsprintf() didn't work */
|
||||
#else
|
||||
/* <stdarg.h> with sprintf() simulating vsprintf() didn't work */
|
||||
/* <stdarg.h> with sprintf() simulating vsprintf() didn't work */
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* report the result
|
||||
*/
|
||||
puts("/* what type of variable args do we have? */");
|
||||
puts("#define VARARGS /* use <varargs.h> */");
|
||||
puts("#include <varargs.h>");
|
||||
puts("\n/* should we use vsprintf()? */");
|
||||
/*
|
||||
* report the result
|
||||
*/
|
||||
puts("/* what type of variable args do we have? */");
|
||||
puts("#define VARARGS /* use <varargs.h> */");
|
||||
puts("#include <varargs.h>");
|
||||
puts("\n/* should we use vsprintf()? */");
|
||||
#if !defined(DONT_HAVE_VSPRINTF)
|
||||
puts("#define HAVE_VS /* yes */");
|
||||
puts("#define HAVE_VS /* yes */");
|
||||
#else
|
||||
puts("/*");
|
||||
puts(" * Hack aleart!!!");
|
||||
puts(" *");
|
||||
puts(" * Systems that do not have vsprintf() need something. In some");
|
||||
puts(" * cases the sprintf function will deal correctly with the");
|
||||
puts(" * va_alist 3rd arg. Hope for the best!");
|
||||
puts(" */");
|
||||
puts("#define vsprintf sprintf");
|
||||
puts("#undef HAVE_VS");
|
||||
puts("/*");
|
||||
puts(" * Hack aleart!!!");
|
||||
puts(" *");
|
||||
puts(" * Systems that do not have vsprintf() need something. In some");
|
||||
puts(" * cases the sprintf function will deal correctly with the");
|
||||
puts(" * va_alist 3rd arg. Hope for the best!");
|
||||
puts(" */");
|
||||
puts("#define vsprintf sprintf");
|
||||
puts("#undef HAVE_VS");
|
||||
#endif
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
@@ -124,7 +124,7 @@ DETAIL_HELP= abs access acos acosh acot acoth acsc acsch address agd append \
|
||||
pmod polar poly pop popcnt power prevcand prevprime printf prompt \
|
||||
protect ptest push putenv quo quomod rand randbit random randombit \
|
||||
randperm rcin rcmul rcout rcpow rcsq re remove reverse rewind rm root \
|
||||
round rsearch runtime saveval scale scan scanf search sec sech \
|
||||
round rsearch runtime saveval scale scan scanf search sec sech seed \
|
||||
segment select sgn sha sha1 sin sinh size sizeof sort sqrt srand \
|
||||
srandom ssq str strcat strerror strlen strpos strprintf strscan \
|
||||
strscanf substr sum swap system tail tan tanh test time trunc xor
|
||||
|
@@ -25,7 +25,7 @@ LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
rand, srand, randbit,
|
||||
seed, rand, srand, randbit,
|
||||
isassoc, isatty, isblk, isconfig, isdefined, iserror, iseven, isfile,
|
||||
ishash, isident, isint, islist, ismat, ismult, isnull, isnum, isobj,
|
||||
isobjtype, isodd, isprime, israndom, isreal, isrel,
|
||||
|
@@ -27,7 +27,7 @@ LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
random, srandom, randombit,
|
||||
seed, random, srandom, randombit,
|
||||
isassoc, isatty, isblk, isconfig, isdefined, iserror, iseven, isfile,
|
||||
ishash, isident, isint, islist, ismat, ismult, isnull, isnum, isobj,
|
||||
isobjtype, isodd, isprime, isrand, isreal, isrel,
|
||||
|
@@ -230,4 +230,4 @@ LIBRARY
|
||||
long irand(long max)
|
||||
|
||||
SEE ALSO
|
||||
srand, randbit, isrand, random, srandom, israndom
|
||||
seed, srand, randbit, isrand, random, srandom, israndom
|
||||
|
@@ -40,4 +40,4 @@ LIBRARY
|
||||
void zrand(long cnt, ZVALUE *res)
|
||||
|
||||
SEE ALSO
|
||||
srand, randbit, isrand, random, srandom, israndom
|
||||
seed, srand, randbit, isrand, random, srandom, israndom
|
||||
|
@@ -154,4 +154,4 @@ LIBRARY
|
||||
long irandom(long max)
|
||||
|
||||
SEE ALSO
|
||||
srand, randbit, isrand, rand, srandom, israndom
|
||||
seed, srand, randbit, isrand, rand, srandom, israndom
|
||||
|
@@ -39,4 +39,4 @@ LIBRARY
|
||||
void zrandom(long cnt, ZVALUE *res)
|
||||
|
||||
SEE ALSO
|
||||
srand, randbit, isrand, rand, srandom, israndom
|
||||
seed, srand, randbit, isrand, rand, srandom, israndom
|
||||
|
52
help/seed
Normal file
52
help/seed
Normal file
@@ -0,0 +1,52 @@
|
||||
NAME
|
||||
seed - return a value that may be used to seed a pseudo-random generator
|
||||
|
||||
SYNOPSIS
|
||||
seed()
|
||||
|
||||
TYPES
|
||||
return integer
|
||||
|
||||
DESCRIPTION
|
||||
Generate a pseudo-random seed based on a collection of system and process
|
||||
information. The seed() builtin function returns a value:
|
||||
|
||||
0 <= seed < 2^64
|
||||
|
||||
IMPORTANT WARNING:
|
||||
|
||||
It should be pointed out that the information collected by seed
|
||||
is almost certainly non-chaotic. This function is likely not
|
||||
suitable for applications (such as cryptographic applications)
|
||||
where the unpredictability of seeds is critical. For such critical
|
||||
applications, lavarand should be used. Seed:
|
||||
|
||||
http://lavarand.sgi.com
|
||||
|
||||
for information about seeding a pseudo-random number generator
|
||||
(such as rand() or random()) with the cryptographic hash of the
|
||||
digitization of chaotic system.
|
||||
|
||||
Given the above warning, this builtin function produces a seed that is
|
||||
suitable for most applications that desire a different pseudo-random
|
||||
sequence each time they are run.
|
||||
|
||||
The return value of this builtin function should NOT be considered
|
||||
a random or pseudo-random value. The return value should be used
|
||||
as an argument to a seed function such as srand() or srandom().
|
||||
|
||||
EXAMPLE
|
||||
> print srand(seed())
|
||||
RAND state
|
||||
|
||||
> print srandom(seed())
|
||||
RAND state
|
||||
|
||||
LIMITS
|
||||
none
|
||||
|
||||
LIBRARY
|
||||
NUMBER *pseudo_seed(void)
|
||||
|
||||
SEE ALSO
|
||||
seed, srand, randbit, isrand, rand, random, srandom, israndom
|
@@ -148,4 +148,4 @@ LIBRARY
|
||||
RAND *zsetrand(RAND *state)
|
||||
|
||||
SEE ALSO
|
||||
srandom, randbit, isrand, random, srandom, israndom
|
||||
seed, srandom, randbit, isrand, random, srandom, israndom
|
||||
|
@@ -337,4 +337,4 @@ LIBRARY
|
||||
RAND *zsetrandom(RAND *state)
|
||||
|
||||
SEE ALSO
|
||||
srand, randbit, isrand, random, srandom, israndom
|
||||
seed, srand, randbit, isrand, random, srandom, israndom
|
||||
|
@@ -235,3 +235,9 @@ Needed enhancements
|
||||
One should make available a the fundimental math operations
|
||||
on ZVALUE, NUMBER and perhaps COMPLEX (without all of the
|
||||
other stuff) in a separate library.
|
||||
|
||||
* improve the coverage in the 'SEE ALSO' help file lists
|
||||
|
||||
* where reasonable, be sure that regress.cal tests builtin functions
|
||||
|
||||
* clean the source code and document it better
|
||||
|
26
hist.c
26
hist.c
@@ -421,12 +421,12 @@ do_map_line(char *line)
|
||||
char *map_name;
|
||||
|
||||
cp = line;
|
||||
while (isspace(*cp))
|
||||
while (isspace((int)*cp))
|
||||
cp++;
|
||||
if (*cp == '\0')
|
||||
return NULL;
|
||||
map_name = cp;
|
||||
while ((*cp != '\0') && !isspace(*cp))
|
||||
while ((*cp != '\0') && !isspace((int)*cp))
|
||||
cp++;
|
||||
*cp = '\0';
|
||||
return find_map(map_name);
|
||||
@@ -461,7 +461,7 @@ do_bind_line(KEY_MAP *map, char *line)
|
||||
else if (key == '\\')
|
||||
key = *cp++;
|
||||
|
||||
while (isspace(*cp))
|
||||
while (isspace((int)*cp))
|
||||
cp++;
|
||||
if (*cp == '\0') {
|
||||
unbind_key(map, key);
|
||||
@@ -469,11 +469,11 @@ do_bind_line(KEY_MAP *map, char *line)
|
||||
}
|
||||
|
||||
func_name = cp;
|
||||
while ((*cp != '\0') && !isspace(*cp))
|
||||
while ((*cp != '\0') && !isspace((int)*cp))
|
||||
cp++;
|
||||
if (*cp) {
|
||||
*cp++ = '\0';
|
||||
while (isspace(*cp))
|
||||
while (isspace((int)*cp))
|
||||
cp++;
|
||||
}
|
||||
func = find_func(func_name);
|
||||
@@ -488,11 +488,11 @@ do_bind_line(KEY_MAP *map, char *line)
|
||||
next = base_map;
|
||||
} else {
|
||||
next_name = cp;
|
||||
while ((*cp != '\0') && !isspace(*cp))
|
||||
while ((*cp != '\0') && !isspace((int)*cp))
|
||||
cp++;
|
||||
if (*cp) {
|
||||
*cp++ = '\0';
|
||||
while (isspace(*cp))
|
||||
while (isspace((int)*cp))
|
||||
cp++;
|
||||
}
|
||||
next = find_map(next_name);
|
||||
@@ -515,18 +515,18 @@ do_default_line(KEY_MAP *map, char *line)
|
||||
if (map == NULL)
|
||||
return;
|
||||
cp = line;
|
||||
while (isspace(*cp))
|
||||
while (isspace((int)*cp))
|
||||
cp++;
|
||||
if (*cp == '\0')
|
||||
return;
|
||||
|
||||
func_name = cp;
|
||||
while ((*cp != '\0') && !isspace(*cp))
|
||||
while ((*cp != '\0') && !isspace((int)*cp))
|
||||
cp++;
|
||||
if (*cp != '\0')
|
||||
{
|
||||
*cp++ = '\0';
|
||||
while (isspace(*cp))
|
||||
while (isspace((int)*cp))
|
||||
cp++;
|
||||
}
|
||||
func = find_func(func_name);
|
||||
@@ -538,12 +538,12 @@ do_default_line(KEY_MAP *map, char *line)
|
||||
else
|
||||
{
|
||||
next_name = cp;
|
||||
while ((*cp != '\0') && !isspace(*cp))
|
||||
while ((*cp != '\0') && !isspace((int)*cp))
|
||||
cp++;
|
||||
if (*cp != '\0')
|
||||
{
|
||||
*cp++ = '\0';
|
||||
while (isspace(*cp))
|
||||
while (isspace((int)*cp))
|
||||
cp++;
|
||||
}
|
||||
next = find_map(next_name);
|
||||
@@ -577,7 +577,7 @@ read_bindings(FILE *fp)
|
||||
|
||||
while (fgets(line, sizeof(line) - 1, fp)) {
|
||||
cp = line;
|
||||
while (isspace(*cp))
|
||||
while (isspace((int)*cp))
|
||||
cp++;
|
||||
|
||||
if ((*cp == '\0') || (*cp == '#') || (*cp == '\n'))
|
||||
|
1
hist.h
1
hist.h
@@ -30,7 +30,6 @@
|
||||
#define DOTCHAR '.' /* char which indicates current directory */
|
||||
#define PATHCHAR '/' /* char which separates path components */
|
||||
#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;
|
||||
char *cp;
|
||||
char path[PATHSIZE+1]; /* name being searched for */
|
||||
char *path; /* name being searched for */
|
||||
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.
|
||||
*/
|
||||
if (extension) {
|
||||
unsigned long namelen = strlen(name);
|
||||
unsigned long extlen = strlen(extension);
|
||||
|
||||
if (namelen >= extlen &&
|
||||
strcmp(&name[namelen-extlen], extension) == 0)
|
||||
extension = NULL;
|
||||
if (extension != NULL && namelen >= extlen &&
|
||||
strcmp(&name[namelen-extlen], extension) == 0) {
|
||||
extension = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the name is absolute, or if there is no path list, 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;
|
||||
strcpy(cp, name);
|
||||
i = openfile(path);
|
||||
if ((i < 0) && (extension != NULL && extension[0] != '\0')) {
|
||||
if ((i < 0) &&
|
||||
(extension != NULL && extension[0] != '\0')) {
|
||||
strcat(path, extension);
|
||||
i = openfile(path);
|
||||
}
|
||||
} while ((i < 0) && *pathlist);
|
||||
|
||||
/* examine what our search produced */
|
||||
if (i < 0)
|
||||
if (i < 0) {
|
||||
free(path);
|
||||
return i;
|
||||
}
|
||||
if (cip->i_fp == NULL) {
|
||||
/* cannot find a file to open */
|
||||
free(path);
|
||||
return -3;
|
||||
}
|
||||
if (fstat(fileno(cip->i_fp), &statbuf) < 0) {
|
||||
/* unable to fstat the open file */
|
||||
free(path);
|
||||
return -4;
|
||||
}
|
||||
|
||||
@@ -149,6 +185,7 @@ opensearchfile(char *name, char *pathlist, char *extension, int rd_once)
|
||||
if (rd_once == TRUE && isinoderead(&statbuf) >= 0) {
|
||||
/* file is in readset and reopen is false */
|
||||
closeinput();
|
||||
free(path);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -156,10 +193,12 @@ opensearchfile(char *name, char *pathlist, char *extension, int rd_once)
|
||||
if (addreadset(name, path, &statbuf) < 0) {
|
||||
/* cannot add to readset */
|
||||
closeinput();
|
||||
free(path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* file was added to/updated in readset */
|
||||
free(path);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -189,7 +228,7 @@ homeexpand(char *name)
|
||||
char *home2; /* fullpath of the home directory */
|
||||
char *fullpath; /* the malloced expanded path */
|
||||
char *after; /* after the ~user or ~ */
|
||||
char username[PATHSIZE+1]; /* extratced username */
|
||||
char *username; /* extratced username */
|
||||
|
||||
/* firewall */
|
||||
if (name[0] != HOMECHAR)
|
||||
@@ -217,11 +256,15 @@ homeexpand(char *name)
|
||||
}
|
||||
/* just malloc the home directory and return it */
|
||||
fullpath = (char *)malloc(strlen(ent->pw_dir)+1);
|
||||
if (fullpath == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
strcpy(fullpath, ent->pw_dir);
|
||||
return fullpath;
|
||||
}
|
||||
if (after-name > PATHSIZE+1) {
|
||||
/* username is too big */
|
||||
username = (char *) malloc(after-name + 1 + 1);
|
||||
if (username == NULL) {
|
||||
/* failed to malloc username */
|
||||
return NULL;
|
||||
}
|
||||
strncpy(username, name+1, after-name-1);
|
||||
@@ -229,6 +272,7 @@ homeexpand(char *name)
|
||||
|
||||
/* get that user's home directory */
|
||||
ent = (struct passwd *)getpwnam(username);
|
||||
free(username);
|
||||
if (ent == NULL) {
|
||||
/* unknown user */
|
||||
return NULL;
|
||||
@@ -241,6 +285,9 @@ homeexpand(char *name)
|
||||
* build the fullpath given the home directory
|
||||
*/
|
||||
fullpath = (char *)malloc(strlen(home2)+strlen(after)+1);
|
||||
if (fullpath == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
sprintf(fullpath, "%s%s", home2, after);
|
||||
return fullpath;
|
||||
}
|
||||
@@ -333,6 +380,9 @@ openfile(char *name)
|
||||
cip->i_fp = fp;
|
||||
cip->i_line = 1;
|
||||
cip->i_name = (char *)malloc(strlen(name) + 1);
|
||||
if (cip->i_name == NULL) {
|
||||
return -1;
|
||||
}
|
||||
strcpy(cip->i_name, name);
|
||||
return 0;
|
||||
}
|
||||
@@ -658,7 +708,7 @@ reread(void)
|
||||
void
|
||||
runrcfiles(void)
|
||||
{
|
||||
char path[PATHSIZE+1]; /* name being searched for */
|
||||
char path[MAX_CALCRC+1+1]; /* name being searched for */
|
||||
char *cp;
|
||||
char *newcp;
|
||||
char *p;
|
||||
|
50
lib/README
50
lib/README
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 1997 David I. Bell and Landon Curt Noll
|
||||
# Copyright (c) 1999 David I. Bell and Landon Curt Noll
|
||||
# Permission is granted to use, distribute, or modify this source,
|
||||
# provided that this copyright notice remains intact.
|
||||
|
||||
@@ -8,13 +8,12 @@ them to be useful!
|
||||
|
||||
If you write something that you think is useful, please send it to:
|
||||
|
||||
dbell@auug.org.au
|
||||
chongo@toad.com {uunet,pyramid,sun}!hoptoad!chongo
|
||||
calc-tester@postofc.corp.sgi.com
|
||||
|
||||
By convention, a lib file only defines and/or initializes functions,
|
||||
objects and variables. (The regression test is an exception.) Also by
|
||||
convention, the a usage message regarding each important object and
|
||||
function is printed at the time of the read.
|
||||
objects and variables. (The regress.cal and testxxx.cal regression test
|
||||
suite is an exception.) Also by convention, an additional usage message
|
||||
regarding important object and functions is printed.
|
||||
|
||||
If a lib file needs to load another lib file, it should use the -once
|
||||
version of read:
|
||||
@@ -45,16 +44,23 @@ global variable. By convention, "lib_debug" has the following meanings:
|
||||
printed at the time of the read in addition
|
||||
to other debug messages
|
||||
|
||||
To conform to the above convention, your lib files should end with
|
||||
lines of the form:
|
||||
When config("lib_debug") >= 0, function names and their arg are
|
||||
printed as they are defined. Sometimes this printing is not enough
|
||||
information. For example:
|
||||
|
||||
* useful obj definitions
|
||||
* functions with optional args
|
||||
* functions with optional args where the param() interface is used
|
||||
|
||||
For these cases we suggest that you place at the bottom of your code
|
||||
something like:
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "obj xyz defined";
|
||||
print "funcA(side_a, side_b, side_c) defined";
|
||||
print "funcB(size, mass) defined";
|
||||
print "funcA([val1 [, val2]]) defined";
|
||||
print "funcB(size, mass, ...) defined";
|
||||
}
|
||||
|
||||
|
||||
=-=
|
||||
|
||||
beer.cal
|
||||
@@ -100,7 +106,7 @@ deg.cal
|
||||
|
||||
ellip.cal
|
||||
|
||||
factor(iN, ia, B, force)
|
||||
efactor(iN, ia, B, force)
|
||||
|
||||
Attempt to factor using the elliptic functions: y^2 = x^3 + a*x + b.
|
||||
|
||||
@@ -160,7 +166,7 @@ mfactor.cal
|
||||
|
||||
mod.cal
|
||||
|
||||
mod(a)
|
||||
lmod(a)
|
||||
mod_print(a)
|
||||
mod_one()
|
||||
mod_cmp(a, b)
|
||||
@@ -250,7 +256,7 @@ pix.cal
|
||||
|
||||
pollard.cal
|
||||
|
||||
factor(N, N, ai, af)
|
||||
pfactor(N, N, ai, af)
|
||||
|
||||
Factor using Pollard's p-1 method.
|
||||
|
||||
@@ -520,6 +526,20 @@ test3400.cal
|
||||
This script is used by regress.cal to test trig functions.
|
||||
containing objects.
|
||||
|
||||
test3500.cal
|
||||
|
||||
global defaultverbose
|
||||
global err
|
||||
testfrem(x, y, verbose)
|
||||
testgcdrem(x, y, verbose)
|
||||
testf(str, n, verbose)
|
||||
testg(str, n, verbose)
|
||||
testh(str, n, N, verbose)
|
||||
test3500(verbose, n, N)
|
||||
|
||||
This script is used by regress.cal to test the functions frem,
|
||||
fcnt, gcdrem.
|
||||
|
||||
test4000.cal
|
||||
|
||||
global defaultverbose
|
||||
@@ -617,7 +637,7 @@ varargs.cal
|
||||
|
||||
xx_print.cal
|
||||
|
||||
isoctet(a) defined
|
||||
is_octet(a) defined
|
||||
list_print(a) defined
|
||||
mat_print (a) defined
|
||||
octet_print(a) defined
|
||||
|
@@ -20,7 +20,3 @@ for (i=99; i > 0;) {
|
||||
bottles = (i!=1) ? "bottles" : "bottle";
|
||||
print less, bottles, "of beer on the wall!\n";
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
/* nothing to do! */
|
||||
}
|
||||
|
@@ -60,7 +60,3 @@ define B(n)
|
||||
Bnmax = n;
|
||||
return Bn[n];
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "B(n) defined";
|
||||
}
|
||||
|
@@ -25,7 +25,3 @@ define bigprime(a, m, p)
|
||||
print " " : n;
|
||||
}
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "bigprime(a, m, p) defined";
|
||||
}
|
||||
|
@@ -113,11 +113,4 @@ define fixdms(a)
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "obj dms {deg, min, sec} defined";
|
||||
print "dms(deg, min, sec) defined";
|
||||
print "dms_add(a, b) defined";
|
||||
print "dms_neg(a) defined";
|
||||
print "dms_sub(a, b) defined";
|
||||
print "dms_mul(a, b) defined";
|
||||
print "dms_print(a) defined";
|
||||
print "dms_abs(a) defined";
|
||||
}
|
||||
|
@@ -24,7 +24,7 @@
|
||||
* only an approximation, read "A Course in Number Theory and Cryptography"
|
||||
* by Neal Koblitz for a good explanation.
|
||||
*
|
||||
* factor(iN, ia, B, force)
|
||||
* efactor(iN, ia, B, force)
|
||||
* iN is the number to be factored.
|
||||
* ia is the initial value of a in the equation, and each successive
|
||||
* value of a is an independent attempt at factoring (default 1).
|
||||
@@ -66,7 +66,7 @@ global b; /* second coefficient */
|
||||
global f; /* found factor */
|
||||
|
||||
|
||||
define factor(iN, ia, B, force)
|
||||
define efactor(iN, ia, B, force)
|
||||
{
|
||||
local C, x, p;
|
||||
|
||||
@@ -165,7 +165,3 @@ define point_pow(p, pow)
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "factor(N, I, B, force) defined";
|
||||
}
|
||||
|
@@ -6,7 +6,3 @@
|
||||
*/
|
||||
|
||||
while(1) print "Hello World!";
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
/* nothing to do */
|
||||
}
|
||||
|
@@ -1029,7 +1029,3 @@ ldebug(funct, str)
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "lucas(h, n) defined";
|
||||
}
|
||||
|
@@ -374,7 +374,3 @@ lucas_chk(high_n, quiet)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "lucas_chk(high_n) defined";
|
||||
}
|
||||
|
@@ -31,7 +31,3 @@ define mersenne(p)
|
||||
/* 2^p-1 is prime iff u(p) = 0 mod 2^p-1 */
|
||||
return (u == 0);
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "mersenne(p) defined";
|
||||
}
|
||||
|
28
lib/mod.cal
28
lib/mod.cal
@@ -12,12 +12,12 @@ obj mod {a}; /* definition of the object */
|
||||
global mod_value = 100; /* modulus value (value of N) */
|
||||
|
||||
|
||||
define mod(a)
|
||||
define lmod(a)
|
||||
{
|
||||
local obj mod x;
|
||||
|
||||
if (!isreal(a) || !isint(a))
|
||||
quit "Bad argument for mod function";
|
||||
quit "Bad argument for lmod function";
|
||||
x.a = a % mod_value;
|
||||
return x;
|
||||
}
|
||||
@@ -34,7 +34,7 @@ define mod_print(a)
|
||||
|
||||
define mod_one()
|
||||
{
|
||||
return mod(1);
|
||||
return lmod(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,9 +51,9 @@ define mod_cmp(a, b)
|
||||
define mod_rel(a, b)
|
||||
{
|
||||
if (isnum(a))
|
||||
a = mod(a);
|
||||
a = lmod(a);
|
||||
if (isnum(b))
|
||||
b = mod(b);
|
||||
b = lmod(b);
|
||||
if (a.a < b.a)
|
||||
return -1;
|
||||
return a.a != b.a;
|
||||
@@ -163,9 +163,9 @@ define mod_div(a, b)
|
||||
|
||||
obj mod x, y;
|
||||
if (isnum(a))
|
||||
a = mod(a);
|
||||
a = lmod(a);
|
||||
if (isnum(b))
|
||||
b = mod(b);
|
||||
b = lmod(b);
|
||||
c = gcd(a.a, b.a);
|
||||
x.a = a.a / c;
|
||||
y.a = b.a / c;
|
||||
@@ -191,20 +191,6 @@ define mod_pow(a, b)
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "obj mod {a} defined";
|
||||
print "mod(a) defined";
|
||||
print "mod_print(a) defined";
|
||||
print "mod_one(a) defined";
|
||||
print "mod_cmp(a, b) defined";
|
||||
print "mod_rel(a, b) defined";
|
||||
print "mod_add(a, b) defined";
|
||||
print "mod_sub(a, b) defined";
|
||||
print "mod_mod(a, b) defined";
|
||||
print "mod_square(a) defined";
|
||||
print "mod_inc(a) defined";
|
||||
print "mod_dec(a) defined";
|
||||
print "mod_inv(a) defined";
|
||||
print "mod_div(a, b) defined";
|
||||
print "mod_pow(a, b) defined";
|
||||
print "mod_value defined";
|
||||
print "set mod_value as needed";
|
||||
}
|
||||
|
@@ -592,41 +592,3 @@ define set_print(a)
|
||||
}
|
||||
|
||||
local N, M; /* End scope of static variables N, M */
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "isset(a) defined";
|
||||
print "setbound(n) defined";
|
||||
print "empty() defined";
|
||||
print "full() defined";
|
||||
print "isin(a, b) defined";
|
||||
print "addmember(a, n) defined";
|
||||
print "rmmember(a, n) defined";
|
||||
print "set() defined";
|
||||
print "mkset(s) defined";
|
||||
print "primes(a, b) defined";
|
||||
print "set_max(a) defined";
|
||||
print "set_min(a) defined";
|
||||
print "set_not(a) defined";
|
||||
print "set_cmp(a, b) defined";
|
||||
print "set_rel(a, b) defined";
|
||||
print "set_or(a, b) defined";
|
||||
print "set_and(a, b) defined";
|
||||
print "set_comp(a) defined";
|
||||
print "set_setminus(a, b) defined";
|
||||
print "set_xor(a,b) defined";
|
||||
print "set_content(a) defined";
|
||||
print "set_add(a, b) defined";
|
||||
print "set_sub(a, b) defined";
|
||||
print "set_mul(a, b) defined";
|
||||
print "set_square(a) defined";
|
||||
print "set_pow(a, n) defined";
|
||||
print "set_sum(a) defined";
|
||||
print "set_plus(a) defined";
|
||||
print "interval(a, b) defined";
|
||||
print "isinterval(a) defined";
|
||||
print "set_mod(a, b) defined";
|
||||
print "randset(n, a, b) defined";
|
||||
print "polyvals(L, A) defined";
|
||||
print "polyvals2(L, A, B) defined";
|
||||
print "set_print(a) defined";
|
||||
}
|
||||
|
@@ -66,8 +66,3 @@ define pellx(D)
|
||||
}
|
||||
return Q1;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "pell(D) defined";
|
||||
print "pellx(D) defined";
|
||||
}
|
||||
|
@@ -47,7 +47,3 @@ define qpi(epsilon)
|
||||
}
|
||||
return (bround(1/an, bits));
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "qpi(epsilon) defined";
|
||||
}
|
||||
|
@@ -38,7 +38,3 @@ define pi_of_x(x)
|
||||
}
|
||||
return primes;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "pi_of_x(x) defined";
|
||||
}
|
||||
|
@@ -6,7 +6,7 @@
|
||||
* Factor using Pollard's p-1 method.
|
||||
*/
|
||||
|
||||
define factor(N, B, ai, af)
|
||||
define pfactor(N, B, ai, af)
|
||||
{
|
||||
local a, k, i, d;
|
||||
|
||||
@@ -28,7 +28,3 @@ define factor(N, B, ai, af)
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "factor(N, B, ai, af) defined";
|
||||
}
|
||||
|
35
lib/poly.cal
35
lib/poly.cal
@@ -689,39 +689,4 @@ c=pol(1+2i,3+4i,5+6i);
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "obj poly {p} defined";
|
||||
print "pol() defined";
|
||||
print "poly_print(a) defined";
|
||||
print "poly_add(a, b) defined";
|
||||
print "poly_sub(a, b) defined";
|
||||
print "poly_mul(a, b) defined";
|
||||
print "poly_div(a, b) defined";
|
||||
print "poly_quo(a,b) defined";
|
||||
print "poly_mod(a,b) defined";
|
||||
print "poly_neg(a) defined";
|
||||
print "poly_conj(a) defined";
|
||||
print "poly_cmp(a,b) defined";
|
||||
print "iszero(a) defined";
|
||||
print "plist(a) defined";
|
||||
print "listmul(a,b) defined";
|
||||
print "ev(a,t) defined";
|
||||
print "evp(s,t) defined";
|
||||
print "ispoly(a) defined";
|
||||
print "isstring(a) defined";
|
||||
print "var(name) defined";
|
||||
print "pcoeff(a) defined";
|
||||
print "pterm(a,n) defined";
|
||||
print "deg(a) defined";
|
||||
print "polydiv(a,b) defined";
|
||||
print "D(a,n) defined";
|
||||
print "Dp(a,n) defined";
|
||||
print "pgcd(a,b) defined";
|
||||
print "plcm(a,b) defined";
|
||||
print "monic(a) defined";
|
||||
print "pfgcd(a,b) defined";
|
||||
print "interp(X,Y,x) defined";
|
||||
print "makediffs(X,Y) defined";
|
||||
print "evalfd(T,x) defined";
|
||||
print "mdet(A) defined";
|
||||
print "M(A,n,I,J) defined";
|
||||
print "mprint(A) defined";
|
||||
}
|
||||
|
@@ -94,8 +94,3 @@ define showvalues(str) {
|
||||
print "\t":eval(str);
|
||||
}
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "adder() defined";
|
||||
print "showvalues(str) defined";
|
||||
}
|
||||
|
@@ -48,8 +48,3 @@ define psqrt(u, p)
|
||||
}
|
||||
return min(v, p - v);
|
||||
}
|
||||
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "psqrt(u, p) defined";
|
||||
}
|
||||
|
15
lib/quat.cal
15
lib/quat.cal
@@ -197,19 +197,4 @@ define quat_shift(a, b)
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "obj quat {s, v} defined";
|
||||
print "quat(a, b, c, d) defined";
|
||||
print "quat_print(a) defined";
|
||||
print "quat_norm(a) defined";
|
||||
print "quat_abs(a, e) defined";
|
||||
print "quat_conj(a) defined";
|
||||
print "quat_add(a, e) defined";
|
||||
print "quat_sub(a, e) defined";
|
||||
print "quat_inc(a) defined";
|
||||
print "quat_dec(a) defined";
|
||||
print "quat_neg(a) defined";
|
||||
print "quat_mul(a, b) defined";
|
||||
print "quat_div(a, b) defined";
|
||||
print "quat_inv(a) defined";
|
||||
print "quat_scale(a, b) defined";
|
||||
print "quat_shift(a, b) defined";
|
||||
}
|
||||
|
@@ -112,7 +112,3 @@ define randbitrun(run_cnt)
|
||||
printf("length>%d\t\t\t\t\tcount=%d\n", MAX_RUN, long_run_cnt);
|
||||
printf("max length=%d\n", max_run);
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "randbitrun([run_length]) defined";
|
||||
}
|
||||
|
@@ -129,7 +129,3 @@ randmprime(bits, seed, dbg)
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "randmprime(bits, seed [,dbg]) defined";
|
||||
}
|
||||
|
@@ -112,7 +112,3 @@ define randombitrun(run_cnt)
|
||||
printf("length>%d\t\t\t\t\tcount=%d\n", MAX_RUN, long_run_cnt);
|
||||
printf("max length=%d\n", max_run);
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "randombitrun([run_length]) defined";
|
||||
}
|
||||
|
@@ -121,7 +121,3 @@ define randomrun(run_cnt)
|
||||
printf("length>%d\t\t\t\t\tcount=%d\n", MAX_RUN, long_run_cnt);
|
||||
printf("max length=%d\n", max_run);
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "randomrun([run_length]) defined";
|
||||
}
|
||||
|
148
lib/regress.cal
148
lib/regress.cal
@@ -702,6 +702,8 @@ define test_functions()
|
||||
{
|
||||
local a, b;
|
||||
local pi;
|
||||
local h, n, r, m, v;
|
||||
local n2, m2, v2;
|
||||
|
||||
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(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()';
|
||||
|
||||
@@ -1529,7 +1555,12 @@ define test_rand()
|
||||
vrfy(randbit() == 1, '1567: randbit() == 1');
|
||||
vrfy(randbit() == 0, '1568: randbit() == 0');
|
||||
|
||||
print '1569: Ending rand test';
|
||||
/* test seed() as best as we can */
|
||||
vrfy(seed() >= 0, '1569: seed() >= 0');
|
||||
vrfy(seed() < 2^64, '1570: seed() < 2^64');
|
||||
vrfy(isrand(srand(seed())), '1571: isrand(srand(seed()))');
|
||||
|
||||
print '1572: Ending rand test';
|
||||
}
|
||||
print '025: parsed test_rand()';
|
||||
|
||||
@@ -4384,7 +4415,12 @@ define test_random()
|
||||
vrfy(randombit(123) == 0x2058f802dd42b3aee4e734eacc13057, \
|
||||
'5463: randombit(123) == 0x2058f802dd42b3aee4e734eacc13057');
|
||||
|
||||
print '5464: Ending test_random';
|
||||
/* test seed() as best as we can */
|
||||
vrfy(seed() >= 0, '5464: seed() >= 0');
|
||||
vrfy(seed() < 2^64, '5465: seed() < 2^64');
|
||||
vrfy(israndom(srandom(seed())), '5466: israndom(srandom(seed()))');
|
||||
|
||||
print '5467: Ending test_random';
|
||||
}
|
||||
print '137: parsed test_random()';
|
||||
|
||||
@@ -5881,8 +5917,10 @@ define test_is()
|
||||
*/
|
||||
blkfree("blk5900");
|
||||
print '6663: blkfree("blk5900")';
|
||||
fclose(ofd);
|
||||
print '6664: fclose(ofd)';
|
||||
|
||||
print '6664: Ending test_is';
|
||||
print '6665: Ending test_is';
|
||||
}
|
||||
print '168: test_is()';
|
||||
|
||||
@@ -6972,7 +7010,7 @@ define test_bigcomb()
|
||||
{
|
||||
local a, b, n, i, v1, v2;
|
||||
|
||||
print '7900: Starting test_bigcomb()';
|
||||
print '7900: Starting test_bigcomb';
|
||||
a = 1234/4321;
|
||||
print '7901: a = 1234/4321';
|
||||
b = 3456/6543;
|
||||
@@ -6995,7 +7033,7 @@ define test_bigcomb()
|
||||
vrfy(f7900(-7/4,33/4,-2) == g7900(-7/4,33/4,-2),
|
||||
'7913: f7900(-7/4,33/4,-2) == g7900(-7/4,33/4,-2)');
|
||||
|
||||
print '7914: Ending test_bigcomb()';
|
||||
print '7914: Ending test_bigcomb';
|
||||
}
|
||||
print '186: parsed test_bigcomb()';
|
||||
|
||||
@@ -7010,7 +7048,7 @@ define test_natnumset()
|
||||
{
|
||||
local A, B, C, D, P, P1, L1, L2;
|
||||
|
||||
print '8000: Starting test_natnumset()';
|
||||
print '8000: Starting test_natnumset';
|
||||
|
||||
A = set(17, 2, 0, 24, 2);
|
||||
print '8101: A = set(17, 2, 0, 24, 2);';
|
||||
@@ -7067,7 +7105,7 @@ define test_natnumset()
|
||||
vrfy(polyvals2(L2,C,D) == set(12,16,21,27,45,55,77,91),
|
||||
'8135: polyvals(L2,C,D) == set(12,16,21,27,45,55,77,91)');
|
||||
|
||||
print '8136: Ending test_natnumset()';
|
||||
print '8136: Ending test_natnumset';
|
||||
}
|
||||
print '188: parsed test_natnumset()';
|
||||
|
||||
@@ -7077,7 +7115,7 @@ print '188: parsed test_natnumset()';
|
||||
*/
|
||||
define test_somenew()
|
||||
{
|
||||
print '8200: Starting test_somenew()';
|
||||
print '8200: Starting test_somenew';
|
||||
|
||||
vrfy(char(-1) == char(255), '8201: char(-1) == char(255)');
|
||||
vrfy(char(258) == char(2), '8202: char(258) == char(2)');
|
||||
@@ -7101,7 +7139,7 @@ define test_somenew()
|
||||
vrfy(1/(1/0) == 0, '8215: 1/(1/0) == 0');
|
||||
vrfy(inverse(1/0) == 0, '8216: inverse(1/0) == 0');
|
||||
|
||||
print '8217: Ending test_somenew()';
|
||||
print '8217: Ending test_somenew';
|
||||
}
|
||||
print '189: parsed test_somenew()';
|
||||
|
||||
@@ -7118,7 +7156,7 @@ print '200: Reserved for top level test use';
|
||||
define count_errors()
|
||||
{
|
||||
if (prob == 0) {
|
||||
print "9998: passed all tests /\\../\\";
|
||||
print "9997: passed all tests /\\../\\";
|
||||
} else {
|
||||
print "****", prob, "error(s) found \\/++\\/";
|
||||
}
|
||||
@@ -7354,6 +7392,94 @@ return test_natnumset();
|
||||
print;
|
||||
return test_somenew();
|
||||
|
||||
|
||||
/*
|
||||
* read various calc libs
|
||||
*
|
||||
* We read most of the calc libs shipped with the distribution.
|
||||
* There are a few lib files that are not read:
|
||||
*
|
||||
* beer.cal - prints a bunch of things when loaded
|
||||
* hello.cal - designed to go into an infinite loop
|
||||
* lucal.cal - already read by this file
|
||||
* lucas_chk.cal - already read by this file
|
||||
* lucas_tbl.cal - duplicatres code already read by another file
|
||||
* regress.cal - this file
|
||||
* surd.cal - already read by this file
|
||||
* testXXXX.cal - already read by this file
|
||||
* xx_print.cal - prints a bunch of things when loaded
|
||||
*
|
||||
* We want to do this 2nd to last; ahead of any final cleanup and behind
|
||||
* all of real actions of regress.cal.
|
||||
*/
|
||||
print;
|
||||
print '9800: Starting read of selected calc libs';
|
||||
read -once bernoulli;
|
||||
print '9801: read -once bernoulli';
|
||||
read -once bigprime;
|
||||
print '9802: read -once bigprime';
|
||||
read -once chrem;
|
||||
print '9803: read -once chrem';
|
||||
read -once deg;
|
||||
print '9804: read -once deg';
|
||||
read -once ellip;
|
||||
print '9805: read -once ellip';
|
||||
read -once mersenne;
|
||||
print '9806: read -once mersenne';
|
||||
read -once mfactor;
|
||||
print '9807: read -once mfactor';
|
||||
read -once mod;
|
||||
print '9808: read -once mod';
|
||||
read -once natnumset;
|
||||
print '9809: read -once natnumset';
|
||||
read -once pell;
|
||||
print '9810: read -once pell';
|
||||
read -once pi;
|
||||
print '9811: read -once pi';
|
||||
read -once pix;
|
||||
print '9812: read -once pix';
|
||||
read -once pollard;
|
||||
print '9813: read -once pollard';
|
||||
read -once poly;
|
||||
print '9814: read -once poly';
|
||||
read -once prompt;
|
||||
print '9815: read -once prompt';
|
||||
read -once psqrt;
|
||||
print '9816: read -once psqrt';
|
||||
read -once quat;
|
||||
print '9817: read -once quat';
|
||||
read -once randbitrun;
|
||||
print '9818: read -once randbitrun';
|
||||
read -once randmprime;
|
||||
print '9819: read -once randmprime';
|
||||
read -once randombitrun;
|
||||
print '9820: read -once randombitrun';
|
||||
read -once randomrun;
|
||||
print '9821: read -once randomrun';
|
||||
read -once randrun;
|
||||
print '9822: read -once randrun';
|
||||
read -once seedrandom;
|
||||
print '9823: read -once seedrandom';
|
||||
read -once solve;
|
||||
print '9824: read -once solve';
|
||||
read -once sumsq;
|
||||
print '9825: read -once sumsq';
|
||||
read -once unitfrac;
|
||||
print '9826: read -once unitfrac';
|
||||
read -once varargs;
|
||||
print '9827: read -once varargs';
|
||||
print '9828: Ending read of selected calc libs';
|
||||
|
||||
|
||||
/*
|
||||
* cleanup and report the results
|
||||
*/
|
||||
print;
|
||||
freeredc();
|
||||
print '9995: freeredc()';
|
||||
freestatics();
|
||||
print '9996: freestatics()';
|
||||
return count_errors();
|
||||
freeglobals();
|
||||
print '9998: freeglobals()';
|
||||
print '9999: Ending regression tests';
|
||||
|
@@ -41,7 +41,3 @@ define solve(low, high, epsilon)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "solve(low, high, epsilon) defined";
|
||||
}
|
||||
|
@@ -37,7 +37,3 @@ define ss(p)
|
||||
}
|
||||
print a : "^2 +" , b : "^2 =" , a^2 + b^2;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "ss(p) defined";
|
||||
}
|
||||
|
19
lib/surd.cal
19
lib/surd.cal
@@ -263,25 +263,6 @@ define surd_rel(a, b)
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "obj surd {a, b} defined";
|
||||
print "surd(a, b) defined";
|
||||
print "surd_print(a) defined";
|
||||
print "surd_conj(a) defined";
|
||||
print "surd_norm(a) defined";
|
||||
print "surd_value(a, xepsilon) defined";
|
||||
print "surd_add(a, b) defined";
|
||||
print "surd_sub(a, b) defined";
|
||||
print "surd_inc(a) defined";
|
||||
print "surd_dec(a) defined";
|
||||
print "surd_neg(a) defined";
|
||||
print "surd_mul(a, b) defined";
|
||||
print "surd_square(a) defined";
|
||||
print "surd_scale(a, b) defined";
|
||||
print "surd_shift(a, b) defined";
|
||||
print "surd_div(a, b) defined";
|
||||
print "surd_inv(a) defined";
|
||||
print "surd_sgn(a) defined";
|
||||
print "surd_cmp(a, b) defined";
|
||||
print "surd_rel(a, b) defined";
|
||||
print "surd_type defined";
|
||||
print "set surd_type as needed";
|
||||
}
|
||||
|
@@ -10,7 +10,3 @@
|
||||
*/
|
||||
|
||||
++value;
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
/* nothing to do */
|
||||
}
|
||||
|
@@ -95,7 +95,3 @@ define ckmat()
|
||||
/* args match the matrix in the object */
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
/* nothing to do */
|
||||
}
|
||||
|
@@ -491,25 +491,3 @@ define test2600(verbose, tnum)
|
||||
}
|
||||
return tnum;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "global defaultverbose defined";
|
||||
print "global err defined";
|
||||
print "testismult(str,n,verbose) defined";
|
||||
print "testsqrt(str,n,eps,verbose) defined";
|
||||
print "testexp(str,n,eps,verbose) defined";
|
||||
print "testln(str,n,eps,verbose) defined";
|
||||
print "testpower(str,n,b,eps,verbose) defined";
|
||||
print "testgcd(str,n,verbose) defined";
|
||||
print "cpow(x,n,eps) defined";
|
||||
print "cexp(x,eps) defined";
|
||||
print "cln(x,eps) defined";
|
||||
print "mkreal() defined";
|
||||
print "mkcomplex() defined";
|
||||
print "mkbigreal() defined";
|
||||
print "mksmallreal() defined";
|
||||
print "testappr(str,n,verbose) defined";
|
||||
print "checkappr(x,y,z,verbose) defined";
|
||||
print "checkresult(x,y,z,a) defined";
|
||||
print "test2600(verbose,tnum) defined";
|
||||
}
|
||||
|
@@ -308,23 +308,3 @@ define test2700(verbose, tnum)
|
||||
}
|
||||
return tnum;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "global defaultverbose defined";
|
||||
print "global err defined";
|
||||
print "mknonnegreal() defined";
|
||||
print "mkposreal() defined";
|
||||
print "mkreal_2700() defined";
|
||||
print "mknonzeroreal() defined";
|
||||
print "mkposfrac() defined";
|
||||
print "mkfrac() defined";
|
||||
print "mksquarereal() defined";
|
||||
print "mknonsquarereal() defined";
|
||||
print "mkcomplex_2700() defined";
|
||||
print "testcsqrt(str,n,verbose) defined";
|
||||
print "checksqrt(x,y,z,v) defined";
|
||||
print "checkavrem(A,B,X,eps) defined";
|
||||
print "checkrounding(s,n,t,u,z) defined";
|
||||
print "iscomsq(x) defined";
|
||||
print "test2700(verbose,tnum) defined";
|
||||
}
|
||||
|
@@ -17,14 +17,3 @@ define res_mul(a,b) {local obj res v = {(a.r * b.r) % md}; return v;};
|
||||
define res_neg(a) {local obj res v = {(-a.r) % md}; return v;};
|
||||
define res_inv(a) {local obj res v = {minv(a.r, md)}; return v;};
|
||||
define res(x) {local obj res v = {x % md}; return v;};
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "obj res defined";
|
||||
print "global md defined";
|
||||
print "res_test(a) defined";
|
||||
print "res_sub(a, b) defined";
|
||||
print "res_mul(a, b) defined";
|
||||
print "res_neg(a) defined";
|
||||
print "res_inv(a) defined";
|
||||
print "res(x) defined";
|
||||
}
|
||||
|
@@ -122,11 +122,3 @@ define test3300(verbose, tnum)
|
||||
}
|
||||
return tnum;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "global defaultverbose defined";
|
||||
print "global err defined";
|
||||
print "testi(str, n, N, verbose) defined";
|
||||
print "testr(str, n, N, verbose) defined";
|
||||
print "test3300(verbose, tnum) defined";
|
||||
}
|
||||
|
@@ -299,15 +299,3 @@ define test3400(verbose, tnum)
|
||||
}
|
||||
return tnum;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "global defaultverbose defined";
|
||||
print "global err defined";
|
||||
print "test3401(str, n, eps, verbose) defined";
|
||||
print "test3402(str, n, eps, verbose) defined";
|
||||
print "test3403(str, n, eps, verbose) defined";
|
||||
print "test3404(str, n, eps, verbose) defined";
|
||||
print "test3405(str, n, eps, verbose) defined";
|
||||
print "test3406(str, n, eps, verbose) defined";
|
||||
print "test3400(verbose, tnum) defined";
|
||||
}
|
||||
|
@@ -272,14 +272,3 @@ define test3500(verbose, tnum, n, N)
|
||||
}
|
||||
return tnum;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "global defaultverbose defined";
|
||||
print "global err defined";
|
||||
print "testfrem(x, y, verbose) defined";
|
||||
print "testgcdrem(x, y, verbose) defined";
|
||||
print "testf(str, n, verbose) defined";
|
||||
print "testg(str, n, verbose) defined";
|
||||
print "testh(str, n, N, verbose) defined";
|
||||
print "test3500(verbose, n, N) defined";
|
||||
}
|
||||
|
@@ -452,32 +452,3 @@ define test4000(v, tnum)
|
||||
}
|
||||
return tnum;
|
||||
}
|
||||
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "global defaultverbose";
|
||||
print "global err";
|
||||
print "global BASEB";
|
||||
print "global BASE";
|
||||
print "global COUNT";
|
||||
print "global SKIP";
|
||||
print "global RESIDUE";
|
||||
print "global MODULUS";
|
||||
print "global K1";
|
||||
print "global H1";
|
||||
print "global K2";
|
||||
print "global H2";
|
||||
print "global K3";
|
||||
print "global H3";
|
||||
print "plen(N) defined";
|
||||
print "clen(N) defined";
|
||||
print "ptimes(str, N, n, count, skip, verbose) defined";
|
||||
print "ctimes(str, N, n, count, skip, verbose) defined";
|
||||
print "crtimes(str, a, b, n, count, skip, verbose) defined";
|
||||
print "ntimes(str, N, n, count, skip, residue, mod, verbose) defined";
|
||||
print "testnextcand(str, N, n, cnt, skip, res, mod, verbose) defined";
|
||||
print "testnext1(x, y, count, skip, residue, modulus) defined";;
|
||||
print "testprevcand(str, N, n, cnt, skip, res, mod, verbose) defined";
|
||||
print "testprev1(x, y, count, skip, residue, modulus) defined";
|
||||
print "test4000(verbose, tnum) defined";
|
||||
}
|
||||
|
@@ -472,20 +472,3 @@ define test4100(v, tnum)
|
||||
}
|
||||
return tnum;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "global defaultverbose";
|
||||
print "global err";
|
||||
print "global K1";
|
||||
print "global K2";
|
||||
print "global BASEB";
|
||||
print "global BASE";
|
||||
print "rlen_4100(N) defined";
|
||||
print "olen(N) defined";
|
||||
print "test4101(x, y, m, k, z1, z2) defined";
|
||||
print "testall(str, n, N, M, verbose) defined";
|
||||
print "times(str, N, n, verbose) defined";
|
||||
print "powtimes(str, N1, N2, n, verbose) defined";
|
||||
print "inittimes(str, N, n, verbose) defined";
|
||||
print "test4100(verbose, tnum) defined";
|
||||
}
|
||||
|
@@ -223,6 +223,11 @@ define ttest(str, m, n, verbose)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (iserror(fclose(f))) {
|
||||
print 'failed';
|
||||
printf("**** Failure 6 for i = %d\n", i);
|
||||
return 1;
|
||||
}
|
||||
i = rm("junk4600");
|
||||
if (verbose > 0) {
|
||||
printf("passed\n");
|
||||
@@ -299,12 +304,3 @@ define test4600(v, tnum)
|
||||
}
|
||||
return tnum;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "stest(str [, verbose]) defined";
|
||||
print "ttest([m, [n [,verbose]]]) defined";
|
||||
print "sprint(x) defined";
|
||||
print "findline(f,s) defined";
|
||||
print "findlineold(f,s) defined";
|
||||
print "test4600(verbose, tnum) defined";
|
||||
}
|
||||
|
@@ -48,9 +48,3 @@ define test5100(x)
|
||||
}
|
||||
global a5100 = a5100, b5100 = b5100;
|
||||
}
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "global a5100";
|
||||
print "global b5100";
|
||||
print "test5100(x) defined";
|
||||
}
|
||||
|
@@ -30,11 +30,3 @@ static a5200 = 20;
|
||||
define f5200(x) = a5200 + x;
|
||||
define g5200(x) {global a5200 = 30; return a5200 + x;}
|
||||
define h5200(x) = a5200 + x;
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "global a5200";
|
||||
print "static a5200";
|
||||
print "f5200(x) defined";
|
||||
print "g5200(x) defined";
|
||||
print "h5200(x) defined";
|
||||
}
|
||||
|
@@ -27,8 +27,3 @@ define unitfrac(x)
|
||||
} while ((num(x) > 1) || (x == di) || (x == 1));
|
||||
print ' [1/1]',, x;
|
||||
}
|
||||
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "unitfrac(x) defined";
|
||||
}
|
||||
|
@@ -21,7 +21,7 @@ print "global blkmax defined, assigned value 8";
|
||||
print;
|
||||
|
||||
B = blk();
|
||||
define isoctet(a) = istype(a, B[0]);
|
||||
define is_octet(a) = istype(a, B[0]);
|
||||
|
||||
define list_print(a) {
|
||||
local i;
|
||||
@@ -131,7 +131,7 @@ define strchar(a) {
|
||||
if (isstr(a))
|
||||
a = ord(a);
|
||||
|
||||
else if (isoctet(a))
|
||||
else if (is_octet(a))
|
||||
a = a; /* This converts octet to number */
|
||||
|
||||
else if (!isint(a) || a < 0 || a > 255)
|
||||
@@ -269,15 +269,3 @@ define octet_print(a) {
|
||||
print "Here is the earlier block with a new octet_print()";
|
||||
print B1;
|
||||
print;
|
||||
|
||||
if (config("lib_debug") >= 0) {
|
||||
print "isoctet(a) defined";
|
||||
print "list_print(a) defined";
|
||||
print "mat_print (a) defined";
|
||||
print "octet_print(a) defined";
|
||||
print "blk_print(a) defined";
|
||||
print "nblk_print (a) defined";
|
||||
print "strchar(a) defined";
|
||||
print "file_print(a) defined";
|
||||
print "error_print(a) defined";
|
||||
}
|
||||
|
@@ -65,7 +65,7 @@ BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||
jmp_buf jmpbuf; /* for errors */
|
||||
int start_done = FALSE; /* TRUE => start up processing finished */
|
||||
char *program = "calc"; /* our name */
|
||||
char cmdbuf[MAXCMD+1]; /* command line expression */
|
||||
char cmdbuf[MAXCMD+1+1+1]; /* command line expression + "\n\0" + guard */
|
||||
|
||||
|
||||
/*
|
||||
@@ -94,6 +94,7 @@ char *home; /* $HOME or default */
|
||||
char *pager; /* $PAGER or default */
|
||||
char *shell; /* $SHELL or default */
|
||||
int stdin_tty = FALSE; /* TRUE if stdin is a tty */
|
||||
int interactive = FALSE; /* TRUE if interactive session (no cmd args) */
|
||||
int post_init = FALSE; /* TRUE setjmp for math_error is readready */
|
||||
|
||||
int no_env = FALSE; /* TRUE (-e) => ignore env vars on startup */
|
||||
@@ -281,6 +282,11 @@ initenv(void)
|
||||
if (calcrc == NULL) {
|
||||
calcrc = DEFAULTCALCRC;
|
||||
}
|
||||
if (strlen(calcrc) > MAX_CALCRC) {
|
||||
math_error("The $CALCRC variable is longer than %d chars",
|
||||
MAX_CALCRC);
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
/* determine the $CALCBINDINGS value */
|
||||
calcbindings = (no_env ? NULL : getenv(CALCBINDINGS));
|
||||
|
@@ -241,8 +241,8 @@ convhex2z(char *hex)
|
||||
/* slen is even now */
|
||||
|
||||
/* eat two hex chars at a time until the HALF is full */
|
||||
for (; (slen % (BASEB/4)) != 0; slen -= 2) {
|
||||
*hp = ((*hp<<8) | hex2bin(*sp++, *sp++));
|
||||
for (; (slen % (BASEB/4)) != 0; slen -= 2, sp += 2) {
|
||||
*hp = ((*hp<<8) | hex2bin(sp[0], sp[1]));
|
||||
}
|
||||
|
||||
/* move on to the next HALF */
|
||||
|
19
longbits.c
19
longbits.c
@@ -97,9 +97,15 @@
|
||||
|
||||
#include "longlong.h"
|
||||
|
||||
#if defined(__linux)
|
||||
# if !defined(isascii)
|
||||
extern int isascii(int c);
|
||||
# endif /* !isascii */
|
||||
#endif /* __linux */
|
||||
|
||||
char *program; /* our name */
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int exitcode = 0; /* how we will exit */
|
||||
@@ -118,7 +124,7 @@ main(int argc, char **argv)
|
||||
case 2:
|
||||
/* ignore empty or leading space args */
|
||||
if (argv[1][0] == '\0' ||
|
||||
(isascii(argv[1][0]) && isspace(argv[1][0]))) {
|
||||
(isascii((int)argv[1][0]) && isspace((int)argv[1][0]))) {
|
||||
long_bits = sizeof(long)*8;
|
||||
/* process the forced size arg */
|
||||
} else {
|
||||
@@ -200,7 +206,7 @@ main(int argc, char **argv)
|
||||
'/', "* signed 64 bits *", '/');
|
||||
putchar('\n');
|
||||
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 L(x) x ## LL\n");
|
||||
#else
|
||||
@@ -316,7 +322,7 @@ main(int argc, char **argv)
|
||||
'/', "* signed 64 bits *", '/');
|
||||
putchar('\n');
|
||||
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 L(x) x ## L\n");
|
||||
#else
|
||||
@@ -335,7 +341,7 @@ main(int argc, char **argv)
|
||||
'/', "* signed 64 bits *", '/');
|
||||
putchar('\n');
|
||||
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 L(x) x ## LL\n");
|
||||
#else
|
||||
@@ -356,5 +362,6 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
/* all done */
|
||||
exit(exitcode);
|
||||
/* exit(exitcode); */
|
||||
return exitcode;
|
||||
}
|
||||
|
@@ -66,7 +66,7 @@ unsigned long long val = 4294967297ULL;
|
||||
long long val2 = -4294967297LL;
|
||||
|
||||
|
||||
MAIN
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int longlong_bits; /* bits in a long long, or <=0 => dont use */
|
||||
@@ -100,5 +100,6 @@ main(int argc, char **argv)
|
||||
longlong_bits);
|
||||
}
|
||||
}
|
||||
exit(0);
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
||||
|
23
opcodes.c
23
opcodes.c
@@ -640,9 +640,8 @@ o_elemaddr(FUNC *fp, long index)
|
||||
math_error("Non-existent element for matrix");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
stack->v_type = V_ADDR;
|
||||
stack->v_addr = &mp->m_table[index];
|
||||
return;
|
||||
vp = &mp->m_table[index];
|
||||
break;
|
||||
case V_OBJ:
|
||||
op = vp->v_obj;
|
||||
offset = objoffset(op, index);
|
||||
@@ -650,13 +649,21 @@ o_elemaddr(FUNC *fp, long index)
|
||||
math_error("Non-existent element for object");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
stack->v_type = V_ADDR;
|
||||
stack->v_addr = &op->o_table[offset];
|
||||
return;
|
||||
vp = &op->o_table[offset];
|
||||
break;
|
||||
case V_LIST:
|
||||
vp = listfindex(vp->v_list, index);
|
||||
if (vp == NULL) {
|
||||
math_error("Index out of bounds for list");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
break;
|
||||
default:
|
||||
math_error("Not indexing matrix or object");
|
||||
math_error("Not initializing matrix, object or list");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
stack->v_type = V_ADDR;
|
||||
stack->v_addr = vp;
|
||||
|
||||
}
|
||||
|
||||
@@ -746,8 +753,10 @@ o_assign(void)
|
||||
math_error("No-assign-from source for assign");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
tmp.v_subtype = V_NOSUBTYPE;
|
||||
copyvalue(vp, &tmp);
|
||||
} else if (vp->v_type == V_OCTET) {
|
||||
tmp.v_subtype = V_NOSUBTYPE;
|
||||
copyvalue(vp, &tmp);
|
||||
} else {
|
||||
tmp = *vp;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user