mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Compare commits
42 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
ac0d84eef8 | ||
|
9b4580d861 | ||
|
2085361df1 | ||
|
bf4657c138 | ||
|
1b5636afed | ||
|
7eba99ac29 | ||
|
de6474bf28 | ||
|
55bc690cd1 | ||
|
0aca07d278 | ||
|
1ab3b2c313 | ||
|
64e2c6a262 | ||
|
eac02835ed | ||
|
33657bb2cc | ||
|
8af0b351ae | ||
|
3260f90a73 | ||
|
b7e15195f9 | ||
|
c02725f036 | ||
|
507fe026e5 | ||
|
486f4c5626 | ||
|
91991bb729 | ||
|
71a116ca6f | ||
|
8b7e01f426 | ||
|
229345ade8 | ||
|
0f902b95cf | ||
|
8684e1be9c | ||
|
ae3a6129b2 | ||
|
2c72570b8d | ||
|
41803b878e | ||
|
a8be58becb | ||
|
067afc140a | ||
|
41128fada9 | ||
|
f5fae012f9 | ||
|
3d25fb30cb | ||
|
8374586275 | ||
|
68c2edf610 | ||
|
d58a55a1ed | ||
|
ccfa797b68 | ||
|
0f030f0759 | ||
|
af59b9dab2 | ||
|
fa173cd9aa | ||
|
1f8269c0e2 | ||
|
51462b8612 |
7
.gitignore
vendored
7
.gitignore
vendored
@@ -33,6 +33,7 @@ custom/libcustcalc*
|
||||
endian
|
||||
endian_calc.h
|
||||
fposval.h
|
||||
have_ban_pragma.h
|
||||
have_const.h
|
||||
have_fpos.h
|
||||
have_fpos_pos.h
|
||||
@@ -49,6 +50,8 @@ have_stdlib.h
|
||||
have_stdvs
|
||||
have_strdup.h
|
||||
have_string.h
|
||||
have_strlcat.h
|
||||
have_strlcpy.h
|
||||
have_times.h
|
||||
have_uid_t.h
|
||||
have_unistd.h
|
||||
@@ -65,6 +68,7 @@ help/bugs
|
||||
help/builtin
|
||||
help/change
|
||||
help/changes
|
||||
help/contrib
|
||||
help/copy
|
||||
help/cscript
|
||||
help/custom_cal
|
||||
@@ -76,6 +80,8 @@ help/funclist.c
|
||||
help/libcalc
|
||||
help/man
|
||||
help/new_custom
|
||||
help/question
|
||||
help/questions
|
||||
help/resource
|
||||
help/type
|
||||
help/usage
|
||||
@@ -85,6 +91,7 @@ longbits
|
||||
longbits.h
|
||||
sample_many
|
||||
sample_rand
|
||||
tags
|
||||
terminal.h
|
||||
ver_calc
|
||||
|
||||
|
202
BUGS
202
BUGS
@@ -1,12 +1,12 @@
|
||||
If you notice something wrong, strange or broken, try rereading:
|
||||
|
||||
README.FIRST
|
||||
HOWTO.INSTALL
|
||||
BUGS (this file)
|
||||
README.FIRST
|
||||
HOWTO.INSTALL
|
||||
BUGS (this file)
|
||||
|
||||
If that does not help, cd to the calc source directory and try:
|
||||
|
||||
make check
|
||||
make check
|
||||
|
||||
Look at the end of the output, it should say something like:
|
||||
|
||||
@@ -15,74 +15,163 @@ Look at the end of the output, it should say something like:
|
||||
|
||||
If it does not, then something is really broken!
|
||||
|
||||
To be sure that your version of calc is up to date, check out:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-mirror.html
|
||||
|
||||
If you made and modifications to calc beyond the simple Makefile
|
||||
configuration, try backing them out and see if things get better.
|
||||
|
||||
To be sure that your version of calc is up to date, check out:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-download.html
|
||||
|
||||
The calc web site is located at:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||
If you have tried all of the above and things still are not right,
|
||||
then it may be time to send in a bug report.
|
||||
|
||||
=-=
|
||||
|
||||
If you have tried all of the above and things still are not right,
|
||||
then it may be time to send in a bug report. You can send bug
|
||||
and bug fixes reports to:
|
||||
The BEST WAY TO SEND IN A BUG REPORT is via calc GitHub issue URL:
|
||||
|
||||
calc-bug-report at asthe dot com
|
||||
https://github.com/lcn2/calc/issues
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
If you see an existing issue that matches your problem, look
|
||||
over the notes and if needed, add your own observation,
|
||||
even if you just add to an existing issue:
|
||||
|
||||
This replaces the old calc-bugs at asthe dot com address.
|
||||
I have this issue too
|
||||
|
||||
To be sure we see your EMail reporting a calc bug, please use the
|
||||
following phase in your EMail Subject line:
|
||||
If you don't see your issue addressed, then on the above
|
||||
GitHub web page, click on this button:
|
||||
|
||||
calc bug report
|
||||
((New Issue))
|
||||
|
||||
That phrase in your subject line will help ensure your request
|
||||
will get past our anti-spam filters. You may have additional
|
||||
words in your subject line.
|
||||
=-=
|
||||
|
||||
However, you may find it more helpful to simply subscribe
|
||||
to the calc-tester mailing list (see below) and then to
|
||||
send your report to that mailing list as a wider set calc
|
||||
testers may be able to help you.
|
||||
If you prefer to not use GitHub, then you
|
||||
may send bug and bug fixes reports to:
|
||||
|
||||
When you send your report, please include the following information:
|
||||
calc-bugrept-mail at asthe dot com
|
||||
|
||||
* a description of the problem
|
||||
* the version of calc you are using (if you cannot get calc
|
||||
to run, then send us the 4 #define lines from version.c)
|
||||
* if you modified calc from an official patch, send me the mods you made
|
||||
* the type of system you were using
|
||||
* the type of compiler you were using
|
||||
* any compiler warnings or errors that you saw
|
||||
* cd to the calc source directory, and type:
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
make debug > debug.out 2>&1 (sh, ksh, bash users)
|
||||
make debug >& debug.out (csh, tcsh users)
|
||||
NOTE: This replaces the old calc-bugs at asthe dot com address.
|
||||
|
||||
and send the contents of the 'debug.out' file.
|
||||
PLEASE put following the SPECIAL PHRASE somewhere in your Email Subject line:
|
||||
|
||||
Stack traces from core dumps are useful to send as well.
|
||||
calc bug report
|
||||
|
||||
Fell free to use the above address to send in big fixes (in the form
|
||||
You may add additional words to your subject line.
|
||||
|
||||
Suggestion:
|
||||
|
||||
From time to time, the Email address and Subject SPECIAL PHRASE
|
||||
may change so verify you have the current info by visiting:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-bugrept.html
|
||||
|
||||
IMPORTANT:
|
||||
|
||||
PLEASE use the above SPECIAL PHRASE somewhere in the Subject line or
|
||||
the mail system won't deliver your Email message.
|
||||
|
||||
Keep in mind that the best way to report on a calc bug is
|
||||
via the above mentioned calc GitHub issue URL.
|
||||
|
||||
Please be patient as we cannot always respond to Email messages quickly.
|
||||
|
||||
=-=
|
||||
|
||||
When you send your report, via the calc GitHub issue URL or Email,
|
||||
please include the following information:
|
||||
|
||||
* A description of the problem
|
||||
|
||||
* Version of calc you are using
|
||||
|
||||
If you cannot compile calc, then look at version.c
|
||||
and report the #define that start with:
|
||||
|
||||
#define MAJOR_VER
|
||||
#define MINOR_VER
|
||||
#define MAJOR_PATCH
|
||||
#define MINOR_PATCH
|
||||
|
||||
* If you modified calc from an official patch,
|
||||
send us the mods you made
|
||||
|
||||
* Type and version of the operating system
|
||||
|
||||
* Type and version of compiler
|
||||
|
||||
* Send us all compiler warnings or errors you find
|
||||
|
||||
* If calc dumped core, try to send us a core dump stack trace
|
||||
|
||||
* cd to the calc source directory, and send the contents
|
||||
of debug.out produced by this command:
|
||||
|
||||
make debug > debug.out 2>&1
|
||||
|
||||
Fell free to use the above address to send in bug fixes (in the form
|
||||
of a context diff patch).
|
||||
|
||||
=-=
|
||||
|
||||
Known bugs:
|
||||
Known bugs in calc:
|
||||
|
||||
Under macOS, the installation of the calc man page fails.
|
||||
|
||||
The output of the alg_config.cal resource file is bogus.
|
||||
We would welcome a replacement for this code.
|
||||
|
||||
Calc shell scripts do not read from stdin properly,
|
||||
we all as a number of the cscript examples.
|
||||
|
||||
The argv() function is behaving differently
|
||||
when run in calc shell script mode:
|
||||
|
||||
When calc is run as:
|
||||
|
||||
calc -s a bb ccc
|
||||
|
||||
and given this input on the command prompt:
|
||||
|
||||
print "config(\"program\")=", config("program");
|
||||
print "argv()=", argv();
|
||||
argc = argv();
|
||||
for (i=0; i < argc; ++i) {
|
||||
print "argv(":i:")=", argv(i);
|
||||
}
|
||||
|
||||
calc prints:
|
||||
|
||||
config("program")= calc
|
||||
argv()= 3
|
||||
argv(0)= a
|
||||
argv(1)= bb
|
||||
argv(2)= ccc
|
||||
|
||||
but when it is run as a script called ./simple:
|
||||
|
||||
#!/usr/local/bin/calc -q -s -f
|
||||
print "config(\"program\")=", config("program");
|
||||
print "argv()=", argv();
|
||||
argc = argv();
|
||||
for (i=0; i < argc; ++i) {
|
||||
print "argv(":i:")=", argv(i);
|
||||
}
|
||||
|
||||
under Linux prints:
|
||||
|
||||
config("program")= /usr/bin/calc
|
||||
argv()= 4
|
||||
argv(0)= ./simple
|
||||
argv(1)= a
|
||||
argv(2)= bb
|
||||
argv(3)= ccc
|
||||
|
||||
and under macOS simply enters into interactive mode.
|
||||
|
||||
We are sure some more bugs exist. When you find them, please let
|
||||
us know! See the above for details on how to report and were to
|
||||
EMail your bug reports and hopefully patches to fix them.
|
||||
Email your bug reports and hopefully patches to fix them.
|
||||
|
||||
=-=
|
||||
|
||||
@@ -135,32 +224,7 @@ mis-features in calc:
|
||||
|
||||
=-=
|
||||
|
||||
To subscribe to the calc-tester mailing list, visit the following URL:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-tester.html
|
||||
|
||||
This is a low volume moderated mailing list.
|
||||
|
||||
This mailing list replaces calc-tester at asthe dot com list.
|
||||
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
please send EMail to our special:
|
||||
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
address. To be sure we see your EMail asking for help with your
|
||||
mailing list subscription, please use the following phase in your
|
||||
EMail Subject line:
|
||||
|
||||
calc tester mailing list help
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
## Copyright (C) 1999-2014 Landon Curt Noll
|
||||
## Copyright (C) 1999-2014,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
286
CHANGES
286
CHANGES
@@ -1,4 +1,193 @@
|
||||
The following are the changes from calc version 2.12.7.1 to date:
|
||||
The following are the changes from calc version 2.12.9.0 to date:
|
||||
|
||||
Added notes to help/unexpected about:
|
||||
|
||||
display() will limit the number of digits printed after decimal point
|
||||
|
||||
%d will format after the decimal point for non-integer numeric values
|
||||
|
||||
%x will format as fractions for non-integer numeric values
|
||||
|
||||
fprintf(fd, "%d\n", huge_value) may need fflush(fd) to finish
|
||||
|
||||
Fixed Makefile dependencies for the args.h rule.
|
||||
|
||||
Fixed Makefile cases where echo with -n is used. On some systems,
|
||||
/bin/sh does not use -n, so we must call /bin/echo -n instead
|
||||
via the ${ECHON} Makefile variable.
|
||||
|
||||
Add missing standard tools to sub-Makefiles to make them
|
||||
easier to invoke directly.
|
||||
|
||||
Sort lists of standard tool Makefile variables and remove duplicates.
|
||||
|
||||
Declare the SHELL at the top of Makefiles.
|
||||
|
||||
Fixed the depend rule in the custom Makefile.
|
||||
|
||||
Improved the messages produced by the depend in the Makefiles.
|
||||
|
||||
Changed the UNUSED define in have_unused.h to be a macro with
|
||||
a parameter. Changed all use of UNUSED in *.c to be UNUSED(x).
|
||||
|
||||
Removed need for HAVE_UNUSED in building the have_unused.h file.
|
||||
|
||||
CCBAN is given to ${CC} in order to control if banned.h is in effect.
|
||||
|
||||
The banned.h attempts to ban the use of certain dangerous functions
|
||||
that, if improperly used, could compromise the computational integrity
|
||||
if calculations.
|
||||
|
||||
In the case of calc, we are motivated in part by the desire for calc
|
||||
to correctly calculate: even during extremely long calculations.
|
||||
|
||||
If UNBAN is NOT defined, then calling certain functions
|
||||
will result in a call to a non-existent function (link error).
|
||||
|
||||
While we do NOT encourage defining UNBAN, there may be
|
||||
a system / compiler environment where re-defining a
|
||||
function may lead to a fatal compiler complication.
|
||||
If that happens, consider compiling as:
|
||||
|
||||
make clobber all chk CCBAN=-DUNBAN
|
||||
|
||||
as see if this is a work-a-round.
|
||||
|
||||
If YOU discover a need for the -DUNBAN work-a-round, PLEASE tell us!
|
||||
Please send us a bug report. See the file:
|
||||
|
||||
BUGS
|
||||
|
||||
or the URL:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-bugrept.html
|
||||
|
||||
for how to send us such a bug report.
|
||||
|
||||
Added the building of have_ban_pragma.h, which will determine
|
||||
if "#pragma GCC poison func_name" is supported. If it is not,
|
||||
or of HAVE_PRAGMA_GCC_POSION=-DHAVE_NO_PRAGMA_GCC_POSION, then
|
||||
banned.h will have no effect.
|
||||
|
||||
Fixed building of the have_getpgid.h file.
|
||||
Fixed building of the have_getprid.h file.
|
||||
Fixed building of the have_getsid.h file.
|
||||
Fixed building of the have_gettime.h file.
|
||||
Fixed building of the have_strdup.h file.
|
||||
Fixed building of the have_ustat.h file.
|
||||
Fixed building of the have_rusage.h file.
|
||||
|
||||
Added HAVE_NO_STRLCPY to control if we want to test if
|
||||
the system has a strlcpy() function. This in turn produces
|
||||
the have_strlcpy.h file wherein the symbol HAVE_STRLCPY will
|
||||
be defined, or not depending if the system comes with a
|
||||
strlcpy() function.
|
||||
|
||||
If the system does not have a strlcpy() function, we
|
||||
compile our own strlcpy() function. See strl.c for details.
|
||||
|
||||
Added HAVE_NO_STRLCAT to control if we want to test if
|
||||
the system has a strlcat() function. This in turn produces
|
||||
the have_strlcat.h file wherein the symbol HAVE_STRLCAT will
|
||||
be defined, or not depending if the system comes with a
|
||||
strlcat() function.
|
||||
|
||||
If the system does not have a strlcat() function, we
|
||||
compile our own strlcat() function. See strl.c for details.
|
||||
|
||||
Fixed places were <string.h>, using #ifdef HAVE_STRING_H
|
||||
for legacy systems that do not have that include file.
|
||||
|
||||
Added ${H} Makefile symbol to control the announcement
|
||||
of forming and having formed hsrc related files. By default
|
||||
H=@ (announce hsrc file formation) vs. H=@: to silence hsrc
|
||||
related file formation.
|
||||
|
||||
Explicitly turn off quiet mode (set Makefile variable ${Q} to
|
||||
be empty) when building rpms.
|
||||
|
||||
Improved and fixed the hsrc build process.
|
||||
|
||||
Forming rpms is performed in verbose mode to assist debugging
|
||||
to the rpm build process.
|
||||
|
||||
Compile custom code, if needed, after main code is compiled.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.8.1 to 2.12.8.2:
|
||||
|
||||
Fixed how the *.tar.bz2 are formed. The calc-2.12.8.0.tar.bz2 file
|
||||
that was formed for calc version 2.12.8.0 was missing most files.
|
||||
|
||||
Expanded 'make chk' to also verify that 'make distchk' and 'make
|
||||
distlist' execute successfully. This will help check a regression
|
||||
of the bug that produced the bogus calc-2.12.8.0.tar.bz2 file.
|
||||
|
||||
Added additional regression tests related 0^(zero_expression)==1.
|
||||
|
||||
Calc can now correctly compile without CUSTOM being defined,
|
||||
thanks to a report by <GitHub user barsnick>.
|
||||
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.7.5 to 2.12.8.0:
|
||||
|
||||
Fixed a mistake in "help intro" where some inserted text changed
|
||||
the value of "." and thus made the next result incorrect.
|
||||
|
||||
Clarified in "help factor" that 1 is returned if no
|
||||
factor below the limit was found.
|
||||
|
||||
Removed Makefile variable ${MAKEFILE_REV}.
|
||||
|
||||
The missing cscript/square.calc file has been restored.
|
||||
|
||||
Fixed compiler errors and warnings related to GCC. In particular,
|
||||
gcc/9.3.1 and gcc/10.2.1 now compile calc without any compiler
|
||||
errors or warnings, even with -Werror -Wextra -pedantic.
|
||||
|
||||
To print out information about the calc compilation
|
||||
environment, we added the following make rule:
|
||||
|
||||
make calcinfo
|
||||
|
||||
Improved how 'make debug' operates.
|
||||
|
||||
Moved help/contrib to CONTRIB-CODE. The help/contrib file
|
||||
is now build from a copy of CONTRIB-CODE.
|
||||
|
||||
Created a new calc bug report Email address. Created a new
|
||||
calc question Email address. Created a new calc contribution
|
||||
Email address. See the BUGS file for details.
|
||||
|
||||
Added "help questions" to print the QUESTIONS help file.
|
||||
|
||||
If the environment variable $CALCHELP is defined and is non-empty,
|
||||
then calc help files will be in the directory by the $CALCHISTFILE
|
||||
environment variable.
|
||||
|
||||
If the environment variable $CALCCUSTOMHELP is defined and is
|
||||
non-empty, then custom calc help files will be in the directory
|
||||
by the $CALCCUSTOMHELP environment variable.
|
||||
|
||||
Fixed a number of typos in text and in source code comments.
|
||||
|
||||
The calc-tester mailing list has been retired. See:
|
||||
|
||||
* How to submit a calc bug report:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-bugrept.html
|
||||
|
||||
* How to contribute code to calc:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-contrib.html
|
||||
|
||||
* How to submit a question about calc:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-question.html
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.7.1 to 2.12.7.5:
|
||||
|
||||
Corrected CHANGES notes that were mixed up for TAB, VT, CR &
|
||||
NL. The code in 2.12.7.0 is correct. The CHANGE notes should
|
||||
@@ -15,8 +204,60 @@ The following are the changes from calc version 2.12.7.1 to date:
|
||||
\t tab byte 0x09 in ASCII encoding
|
||||
\v vertical tab byte 0x0b in ASCII encoding
|
||||
|
||||
Fixed a segfault when getpwuid() returned NULL during initialization.
|
||||
Thanks goes to baratharon GitHub user for reporting this issue.
|
||||
Fixed a segfault when getpwuid() returned NULL during initialization.
|
||||
Thanks goes to baratharon GitHub user for reporting this issue.
|
||||
|
||||
Requiring calc shell scripts to use -s -f at the end of the
|
||||
initial #! line.
|
||||
|
||||
Fixed /tmp/mersenne example in calc(1) man page.
|
||||
|
||||
Added make variable ${ARCH_CFLAGS}. The ${ARCH_CFLAGS} is
|
||||
added after ${CCMISC} and before ${EXTRA_CFLAGS} when building
|
||||
the ${CFLAGS} for compiling C code. are ${CC} when compiling
|
||||
C files. The default value is:
|
||||
|
||||
ARCH_CFLAGS= -march=native
|
||||
|
||||
which directs C compiler to compile for the native machine.
|
||||
To disable use of '-march=native', set ARCH_CFLAGS to the empty
|
||||
string as in:
|
||||
|
||||
make all ARCH_CFLAGS=
|
||||
|
||||
To make calc RPMs more portable, they are compiled with an
|
||||
empty ARCH_CFLAGS.
|
||||
|
||||
Fixed issues relating to compiling on macOS. Fixed issues
|
||||
where <unistd.h> is needed.
|
||||
|
||||
Fixed typos in help/intro and README.md. <<GitHub guilhermgonzaga>>
|
||||
|
||||
Copied missing description lines from help/intro to README.md
|
||||
"What is calc?" section. <<GitHub guilhermgonzaga>>
|
||||
|
||||
GCC 7 added a warning on fall through in case statements. It's
|
||||
enabled by -Wextra and treated as an error due to -Wall so it
|
||||
breaks compilation. See -Wimplicit-fallthrough in the GCC
|
||||
manual. The default value is 3, which means a comment matching
|
||||
some specific regexes is enough to disable the warning.
|
||||
Fixed spaces vs tabs and use FALLTHRU as it's used elsewhere.
|
||||
Fixed one FALLTHRU comment that was inconsistent with others.
|
||||
<<GitHub jcul>>
|
||||
|
||||
Fixed minor typo on help/power. <<GitHub thegithubr>>
|
||||
|
||||
By default, the calc history file is located in ~/.calc_history.
|
||||
Now, if the environment variable $CALCHISTFILE is defined
|
||||
and is non-empty, then calc history file will be defined
|
||||
by the $CALCHISTFILE environment variable.
|
||||
|
||||
Calc as defined 0^0 as 1. However in the past, 0 raised to
|
||||
an expression that evaluated to zero returned 1. The result
|
||||
was that 0^0 was different than 0^(6-6) or even 0^(0).
|
||||
Now, calc will return 1 for 0^(0) and 0^zero when zero == 0.
|
||||
|
||||
The missing cscript/square.calc file has been restored.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.6.10: to 2.12.7.0:
|
||||
@@ -78,10 +319,10 @@ The following are the changes from calc version 2.12.6.9 to 2.12.6.9:
|
||||
Added regression tests 3729 thru 3732 to test E_TAN3, E_COT3,
|
||||
E_SEC3 and E_CSC3 respectively.
|
||||
|
||||
Added experimential %g printf (and strprintf) format implementation
|
||||
Added experimental %g printf (and strprintf) format implementation
|
||||
based on pull request from github user 10110111.
|
||||
|
||||
Made exterimental changes to macOS builds to not require use of
|
||||
Made experimental changes to macOS builds to not require use of
|
||||
/usr/include. The INCDIR for macOS uses:
|
||||
|
||||
INCDIR= $(shell xcrun --show-sdk-path --sdk macosx)/usr/include
|
||||
@@ -135,7 +376,7 @@ The following are the changes from calc version 2.12.6.6 to 2.12.6.8:
|
||||
Fixed an error message buffer overflow thanks to a report by
|
||||
Frank Peters <nlp at northernlightsphoto dot biz>.
|
||||
|
||||
Replaced all use of the C funcion sprintf() with snprintf().
|
||||
Replaced all use of the C function sprintf() with snprintf().
|
||||
Replaced all use of the C funcion vsprintf() with vsnprintf().
|
||||
Replaced all DONT_HAVE_VSPRINTF with DONT_HAVE_VSNPRINTF.
|
||||
Replaced all Makefile var ${HAVE_VSPRINTF} with ${HAVE_VSNPRINTF}.
|
||||
@@ -271,7 +512,7 @@ The following are the changes from calc version 2.12.5.4 to 2.12.5.6:
|
||||
The improved gen_v1() function is capable of returning a value
|
||||
for all valid values of h and n. As a result, the trial tables
|
||||
used by gen_v1() have been changed to a short list of values
|
||||
to try, in order ot likelyhood of success, before doing an
|
||||
to try, in order ot likelihood of success, before doing an
|
||||
exhaustive search for a v1 value to return.
|
||||
|
||||
Removed lucas_tbl.cal calc resource file. This file was made
|
||||
@@ -361,32 +602,6 @@ The following are the changes from calc version 2.12.5.1 to 2.12.5.2:
|
||||
|
||||
The following are the changes from calc version 2.12.5.0 to 2.12.5.1:
|
||||
|
||||
Calc has a new calc-tester mailing list. This list is for those
|
||||
who are using/testing calc. We also use this list to announce
|
||||
new versions of calc. To subscribe to the calc-tester mailing
|
||||
list, visit the following URL:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-tester.html
|
||||
|
||||
This is a low volume moderated mailing list.
|
||||
|
||||
This mailing list replaces calc-tester at asthe dot com list.
|
||||
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
please send Email to our special:
|
||||
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
address. To be sure we see your Email asking for help with your
|
||||
mailing list subscription, please use the following phase in your
|
||||
Email Subject line:
|
||||
|
||||
calc tester mailing list help
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
There is a new calc bug report Email address:
|
||||
|
||||
calc-bug-report at asthe dot com
|
||||
@@ -601,7 +816,7 @@ The following are the changes from calc version 2.12.4.6 to version 2.12.4.10:
|
||||
Silenced annoying warning about unused variable 'intp'
|
||||
while compiling endian.c under some circumstances.
|
||||
|
||||
Fixed typo in redeclaration warnings. Thanks to
|
||||
Fixed typo in re-declaration warnings. Thanks to
|
||||
Christoph Zurnieden <czurnieden at gmx dot de> for this report.
|
||||
|
||||
Added a number of calc resource files by
|
||||
@@ -2711,7 +2926,6 @@ The following are the changes from calc version 2.11.2t0 to 2.11.2t1.0:
|
||||
Using calc-bugs at asthe dot com for calc bug reports,
|
||||
calc-contrib at asthe dot com for calc contributions,
|
||||
calc-tester-request at asthe dot com for requests to join calc-tester and
|
||||
calc-tester at asthe dot com for the calc tester mailing list.
|
||||
|
||||
Replaced explicit Email addresses found this file with the <user at
|
||||
site dot domain> notation to reduce the potential for those folks
|
||||
@@ -7451,7 +7665,7 @@ Following is a list of visible changes to calc from version 1.24.7 to 1.26.1:
|
||||
|
||||
A small bug in the library file regress.cal was fixed.
|
||||
|
||||
## Copyright (C) 2001-2017 Landon Curt Noll
|
||||
## Copyright (C) 2001-2017,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
100
CONTRIB-CODE
Normal file
100
CONTRIB-CODE
Normal file
@@ -0,0 +1,100 @@
|
||||
Calc is open source. Contributions of code are welcome.
|
||||
|
||||
We welcome and encourage you to send us:
|
||||
|
||||
* calc resource files (cal/*.cal files)
|
||||
* calc shell scripts (cscript/*.calc files)
|
||||
* builtin functions that you have modified or written, i.e.:
|
||||
assocfunc.c comfunc.c func.c func.h
|
||||
listfunc.c matfunc.c qfunc.c zfunc.c
|
||||
* custom functions that you have modified or written
|
||||
* help files modified or written (help/*)
|
||||
* Makefile improvements (Makefile, */Makefile)
|
||||
* other source code modifications (*.c, *.h)
|
||||
* etc. (* */* :) )
|
||||
|
||||
In order to consider integrating your code, we need:
|
||||
|
||||
* calc version you are working with (please try use the latest version)
|
||||
* new help files or help file patches, if applicable (documentation)
|
||||
* proposed text for the CHANGES file (brief description of what it does)
|
||||
* regress.cal test patch as needed
|
||||
* your source code and/or source code changes (:-))
|
||||
|
||||
If you add functionality to calc, please be sure to modify/patch/add
|
||||
Makefiles, help files, cal/regress.cal test code as well.
|
||||
Regression test cases are vital to maintaining calc's level
|
||||
of correctness and helps us avoid code bug regression.
|
||||
|
||||
Please try to generate a patch against the most recent
|
||||
version of calc, and if you use GitHub, the top of the
|
||||
master branch:
|
||||
|
||||
https://github.com/lcn2/calc
|
||||
|
||||
The best way contribute to calc bug is to generate calc
|
||||
GitHub pull request:
|
||||
|
||||
https://github.com/lcn2/calc/pulls
|
||||
|
||||
Your code needs to be contributed under either the 2.1 of the GNU
|
||||
Lesser General Public License (LGPL 2.1) or in the public domain.
|
||||
|
||||
If you do not want to use calc GitHub, then send Email to:
|
||||
|
||||
calc-contrib-mail at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
You MUST use following SPECIAL PHRASE in your Email Subject line:
|
||||
|
||||
calc contribution
|
||||
|
||||
You may add additional words to your subject line.
|
||||
|
||||
Suggestion:
|
||||
|
||||
From time to time, the Email address and Subject SPECIAL PHRASE
|
||||
may change so verify you have the current info by visiting:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-contrib.html
|
||||
|
||||
IMPORTANT: If your Email doesn't contain the above phrase,
|
||||
then we WILL NOT SEE your Email.
|
||||
|
||||
PLEASE BE SURE you have that SPECIAL PHRASE somewhere in the subject line!
|
||||
|
||||
Keep in mind that the best way to report on a calc bug is to use
|
||||
the above mentioned calc GitHub procedure.
|
||||
|
||||
Please be patient as we cannot always respond to Email messages quickly.
|
||||
|
||||
=-=
|
||||
|
||||
See also the calc wishlist by running the calc command:
|
||||
|
||||
; help wishlist
|
||||
|
||||
=-=
|
||||
|
||||
## Copyright (C) 1999,2014,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
## as published by the Free Software Foundation.
|
||||
##
|
||||
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
## Public License for more details.
|
||||
##
|
||||
## A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
##
|
||||
## Under source code control: 1997/03/09 16:33:22
|
||||
## File existed as early as: 1997
|
||||
##
|
||||
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
61
COPYING
61
COPYING
@@ -6,7 +6,7 @@ This file is Copyrighted
|
||||
|
||||
This file is covered under the following Copyright:
|
||||
|
||||
Copyright (C) 1999-2014 Landon Curt Noll
|
||||
Copyright (C) 1999-2021 Landon Curt Noll
|
||||
All rights reserved.
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
@@ -49,65 +49,6 @@ Calc is covered by the GNU Lesser General Public License
|
||||
Boston, MA 02110-1301
|
||||
USA
|
||||
|
||||
To subscribe to the calc-tester mailing list, visit the following URL:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-tester.html
|
||||
|
||||
This is a low volume moderated mailing list.
|
||||
|
||||
This mailing list replaces calc-tester at asthe dot com list.
|
||||
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
please send EMail to our special:
|
||||
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
address. To be sure we see your EMail asking for help with your
|
||||
mailing list subscription, please use the following phase in your
|
||||
EMail Subject line:
|
||||
|
||||
calc tester mailing list help
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
-=-
|
||||
|
||||
Calc bug reports and calc bug fixes should be sent to:
|
||||
|
||||
calc-bug-report at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
This replaces the old calc-bugs at asthe dot com address.
|
||||
|
||||
To be sure we see your EMail reporting a calc bug, please use the
|
||||
following phase in your EMail Subject line:
|
||||
|
||||
calc bug report
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
However, you may find it more helpful to simply subscribe
|
||||
to the calc-tester mailing list (see above) and then to
|
||||
send your report to that mailing list as a wider set calc
|
||||
testers may be able to help you.
|
||||
|
||||
-=-
|
||||
|
||||
The calc web site is located at:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/
|
||||
|
||||
NOTE: The EMail address uses 'asthe', while the web site uses 'isthe'.
|
||||
|
||||
-=-
|
||||
|
||||
Calc's relationship to the GNU Lesser General Public License
|
||||
------------------------------------------------------------
|
||||
|
||||
|
@@ -29,7 +29,7 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
|
||||
The top level Makefile and the custom/Makefile require a GNU
|
||||
Make (such as gmake) or an equivalently advanced make. On many
|
||||
targets, the default make is sufficent. On FreeBSD for example,
|
||||
targets, the default make is sufficient. On FreeBSD for example,
|
||||
one must use gmake instead of make.
|
||||
|
||||
Some report that under macOS, one has to declare the target
|
||||
@@ -120,7 +120,7 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
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 want to change these Makrfile variables from their defaults:
|
||||
You may want to change these Makefile variables from their defaults:
|
||||
|
||||
RANLIB
|
||||
|
||||
@@ -152,7 +152,7 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
|
||||
The top level Makefile and the custom/Makefile require a GNU
|
||||
Make (such as gmake) or an equivalently advanced make. On many
|
||||
targets, the default make is sufficent. On FreeBSD for example,
|
||||
targets, the default make is sufficient. On FreeBSD for example,
|
||||
one must use gmake instead of make.
|
||||
|
||||
If your target system does not have GNU Make (or equivalent), then
|
||||
@@ -198,7 +198,7 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
We suggest that you might want to read the README.FIRST file and look at
|
||||
the calc help subsystem. See also the README.md file.
|
||||
|
||||
## Copyright (C) 1999-2007 Landon Curt Noll
|
||||
## Copyright (C) 1999-2007,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
181
Makefile
181
Makefile
@@ -8,11 +8,12 @@
|
||||
# comments, this Makefile differs from the non-rpm bzip2-ed tarball
|
||||
# source Makefile in the following ways:
|
||||
#
|
||||
# MAKEFILE_REV= $$Revision: 30.26 $$
|
||||
# CCWERR= -Werror
|
||||
# USE_READLINE= -DUSE_READLINE
|
||||
# READLINE_LIB= -lreadline -lhistory -lncurses
|
||||
#
|
||||
# Copyright (C) 1999-2018,2021 Landon Curt Noll
|
||||
#
|
||||
# The Makefile.ship makefile becomes the Makefile found in the
|
||||
# calc-*.tar.bz2 bzip2 source tarball.
|
||||
#
|
||||
@@ -24,7 +25,7 @@
|
||||
#
|
||||
# This makefile contains only those critical rules (such as all, clean, etc.)
|
||||
# and the common rules needed in development (such as chk, check, etc.).
|
||||
# This makefiile has a few special rules that are used to set the version
|
||||
# This makefile has a few special rules that are used to set the version
|
||||
# string in the shipped makefiles (such as Makefile.ship).
|
||||
|
||||
# Copyright (C) 1999-2008,2014 Landon Curt Noll
|
||||
@@ -52,7 +53,66 @@
|
||||
# calculator by David I. Bell with help/mods from others
|
||||
# Makefile by Landon Curt Noll
|
||||
|
||||
# Try uname -s if the target was not alreadhy set on the make command line
|
||||
|
||||
# The shell used by this Makefile
|
||||
#
|
||||
# On some systems, /bin/sh is a rather reduced shell with
|
||||
# deprecated behavor.
|
||||
#
|
||||
# If your system has a up to date, bash shell, then
|
||||
# you may wish to use:
|
||||
#
|
||||
# SHELL= /bin/bash
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point wehre is cannot be depended on.
|
||||
# On such systems, the zsh may be a much better alternative
|
||||
# shell for this Makefile to use:
|
||||
#
|
||||
# SHELL= /bin/zsh
|
||||
#
|
||||
#SHELL= /bin/sh
|
||||
SHELL= /bin/bash
|
||||
#SHELL= /bin/zsh
|
||||
|
||||
|
||||
# CCBAN is given to ${CC} in order to control if banned.h is in effect.
|
||||
#
|
||||
# The banned.h attempts to ban the use of certain dangerous functions
|
||||
# that, if improperly used, could compromise the computational integrity
|
||||
# if calculations.
|
||||
#
|
||||
# In the case of calc, we are motivated in part by the desire for calc
|
||||
# to correctly calculate: even durings extremely long calculations.
|
||||
#
|
||||
# If UNBAN is NOT defined, then calling certain functions
|
||||
# will result in a call to a non-existent function (link error).
|
||||
#
|
||||
# While we do NOT encourage defining UNBAN, there may be
|
||||
# a system / compiler environment where re-defining a
|
||||
# function may lead to a fatal compiler complication.
|
||||
# If that happens, consider compiling as:
|
||||
#
|
||||
# make clobber all chk CCBAN=-DUNBAN
|
||||
#
|
||||
# as see if this is a work-a-round.
|
||||
#
|
||||
# If YOU discover a need for the -DUNBAN work-a-round, PLEASE tell us!
|
||||
# Please send us a bug report. See the file:
|
||||
#
|
||||
# BUGS
|
||||
#
|
||||
# or the URL:
|
||||
#
|
||||
# http://www.isthe.com/chongo/tech/comp/calc/calc-bugrept.html
|
||||
#
|
||||
# for how to send us such a bug report.
|
||||
#
|
||||
CCBAN= -UUNBAN
|
||||
#CCBAN= -DUNBAN
|
||||
|
||||
|
||||
# Try uname -s if the target was not already set on the make command line
|
||||
#
|
||||
ifeq ($(target),)
|
||||
target=$(shell uname -s 2>/dev/null)
|
||||
@@ -87,6 +147,12 @@ endif
|
||||
#READLINE_INCLUDE= -I/usr/gnu/include
|
||||
#READLINE_INCLUDE= -I/usr/local/include
|
||||
|
||||
# Where man pages are installed
|
||||
#
|
||||
# Under macOS, we cannot modify /usr/share/man.
|
||||
#
|
||||
MANDIR= /usr/local/man/man1
|
||||
|
||||
# Normally certain files depend on the Makefile. If the Makefile is
|
||||
# changed, then certain steps should be redone. If MAKE_FILE is
|
||||
# set to Makefile, then these files will depend on Makefile. If
|
||||
@@ -109,7 +175,7 @@ TOP_MAKE_FILE= Makefile
|
||||
EXT=
|
||||
#EXT=.exe
|
||||
|
||||
# This value is configured for chongo@theta.mellis.com.
|
||||
# This value is configured for chongo for his laptop
|
||||
#
|
||||
RPM_TOP= ${HOME}/rpm/calc
|
||||
|
||||
@@ -135,7 +201,6 @@ endif
|
||||
|
||||
# standard utilities used during make
|
||||
#
|
||||
SHELL= /bin/sh
|
||||
MAKE= make
|
||||
SED= sed
|
||||
GREP= egrep
|
||||
@@ -153,11 +218,30 @@ CI= ci
|
||||
# Q=@ do not echo internal Makefile actions (quiet mode)
|
||||
# Q= echo internal Makefile actions (debug / verbose mode)
|
||||
#
|
||||
# H=@: do not report hsrc file formation progress
|
||||
# H=@ do echo hsrc file formation progress
|
||||
#
|
||||
# S= >/dev/null 2>&1 slience ${CC} output during hsrc file formation
|
||||
# S= full ${CC} output during hsrc file formation
|
||||
#
|
||||
# E= 2>/dev/null slience command stderr during hsrc file formation
|
||||
# E= full command stderr during hsrc file formation
|
||||
#
|
||||
# V=@: do not echo debug statements (quiet mode)
|
||||
# V=@ do echo debug statements (debug / verbose mode)
|
||||
#
|
||||
#Q=
|
||||
Q=@
|
||||
#
|
||||
S= >/dev/null 2>&1
|
||||
#S=
|
||||
#
|
||||
E= 2>/dev/null
|
||||
#E=
|
||||
#
|
||||
#H=@:
|
||||
H=@
|
||||
#
|
||||
V=@:
|
||||
#V=@
|
||||
|
||||
@@ -169,23 +253,28 @@ V=@:
|
||||
#
|
||||
XARG=
|
||||
|
||||
# We pass these make varaibles to the end of each make command line
|
||||
# We pass these make variables to the end of each make command line
|
||||
# that invokes the ${MAKE_FILE}.
|
||||
#
|
||||
XVAR= \
|
||||
target=${target} \
|
||||
USE_READLINE='${USE_READLINE}' \
|
||||
READLINE_LIB='${READLINE_LIB}' \
|
||||
READLINE_INCLUDE='${READLINE_INCLUDE}' \
|
||||
RPM_TOP='${RPM_TOP}' \
|
||||
MAKE_FILE='${MAKE_FILE}' \
|
||||
EXT='${EXT}' \
|
||||
DARWIN_ARCH='${DARWIN_ARCH}' \
|
||||
CCBAN='${CCBAN}' \
|
||||
CCWERR='${CCWERR}' \
|
||||
NROFF='${NROFF}' \
|
||||
COMMON_ADD='${COMMON_ADD}' \
|
||||
DARWIN_ARCH='${DARWIN_ARCH}' \
|
||||
E='${E}' \
|
||||
EXT='${EXT}' \
|
||||
H='${H}' \
|
||||
MAKE_FILE='${MAKE_FILE}' \
|
||||
MANDIR='${MANDIR}' \
|
||||
NROFF='${NROFF}' \
|
||||
Q='${Q}' \
|
||||
V='${V}'
|
||||
READLINE_INCLUDE='${READLINE_INCLUDE}' \
|
||||
READLINE_LIB='${READLINE_LIB}' \
|
||||
RPM_TOP='${RPM_TOP}' \
|
||||
S='${S}' \
|
||||
USE_READLINE='${USE_READLINE}' \
|
||||
V='${V}' \
|
||||
target=${target}
|
||||
|
||||
# We update the calc version string in these makefiles
|
||||
#
|
||||
@@ -201,7 +290,7 @@ XMKVER= ${MAKE_FILE} custom/Makefile.head
|
||||
#
|
||||
###
|
||||
|
||||
all: fix_version check_include
|
||||
all: fix_version
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
@@ -496,6 +585,20 @@ have_unused.h:
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
have_ban_pragma.h:
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
have_strlcpy.h:
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
have_strlcat.h:
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
##
|
||||
#
|
||||
@@ -511,34 +614,6 @@ win32_hsrc:
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
|
||||
##
|
||||
#
|
||||
# These rules are used in the process of building the BUILD_H_SRC.
|
||||
#
|
||||
##
|
||||
|
||||
endian.o:
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
endian${EXT}:
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
longbits.o:
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
longbits${EXT}:
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
|
||||
##
|
||||
#
|
||||
# These two .all rules are used to determine of the lower level
|
||||
@@ -573,7 +648,7 @@ custom/.all:
|
||||
|
||||
###
|
||||
#
|
||||
# building calc-static and static lib*.a libraires
|
||||
# building calc-static and static lib*.a libraries
|
||||
#
|
||||
###
|
||||
|
||||
@@ -602,7 +677,7 @@ libcustcalc.a:
|
||||
# Home grown make dependency rules. Your system make not support
|
||||
# or have the needed tools. You can ignore this section.
|
||||
#
|
||||
# We will form a skelaton tree of *.c files containing only #include "foo.h"
|
||||
# We will form a skeleton tree of *.c files containing only #include "foo.h"
|
||||
# lines and .h files containing the same lines surrounded by multiple include
|
||||
# prevention lines. This allows us to build a static depend list that will
|
||||
# satisfy all possible cpp symbol definition combinations.
|
||||
@@ -710,6 +785,9 @@ chk:
|
||||
#
|
||||
# debug
|
||||
#
|
||||
# make calcinfo:
|
||||
# * print information about the host and compile environment
|
||||
#
|
||||
# make env:
|
||||
# * print major Makefile variables
|
||||
#
|
||||
@@ -727,6 +805,11 @@ chk:
|
||||
# * compile without optimizers to make debugging easier
|
||||
##
|
||||
|
||||
calcinfo:
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
env:
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
@@ -827,7 +910,7 @@ inst_files:
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
# The olduninstall rule will remove calc files from the older, histroic
|
||||
# The olduninstall rule will remove calc files from the older, historic
|
||||
# locations under the /usr/local directory. If you are using the
|
||||
# new default values for ${BINDIR}, ${CALC_SHAREDIR}, ${INCDIR} and ${LIBDIR}
|
||||
# then you can use this rule to clean out the older calc stuff under
|
||||
@@ -885,7 +968,7 @@ strip:
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
# calc-symlink - setup symlinks from stardard locations into the ${T} tree
|
||||
# calc-symlink - setup symlinks from standard locations into the ${T} tree
|
||||
#
|
||||
calc-symlink:
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
|
2323
Makefile.ship
2323
Makefile.ship
File diff suppressed because it is too large
Load Diff
54
QUESTIONS
Normal file
54
QUESTIONS
Normal file
@@ -0,0 +1,54 @@
|
||||
If you have a simple general question about calc, send Email to:
|
||||
|
||||
calc-quest-mail at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, and 'dot' with .
|
||||
|
||||
PLEASE put following the SPECIAL PHRASE somewhere in your Email Subject line:
|
||||
|
||||
calc question
|
||||
|
||||
You may add additional words to your subject line.
|
||||
|
||||
IMPORTANT: If your Email doesn't contain the above phrase,
|
||||
then we WILL NOT SEE your Email.
|
||||
|
||||
PLEASE BE SURE you have that SPECIAL PHRASE somewhere in the subject line!
|
||||
|
||||
Suggestion:
|
||||
|
||||
From time to time, the Email address and Subject SPECIAL PHRASE
|
||||
may change so verify you have the current info by visiting:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-question.html
|
||||
|
||||
Please limit your questions to general questions about calc. We
|
||||
cannot go into great detail in our answers, nor can we do your
|
||||
homework, nor can we do much more than answer short general questions
|
||||
about calc.
|
||||
|
||||
Please be patient as we cannot always respond to Email messages quickly.
|
||||
|
||||
=-=
|
||||
|
||||
## Copyright (C) 2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
## as published by the Free Software Foundation.
|
||||
##
|
||||
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
## Public License for more details.
|
||||
##
|
||||
## A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
##
|
||||
## Under source code control: 2021/02/10 00:15:05
|
||||
## File existed as early as: 2021
|
||||
##
|
||||
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
79
README.FIRST
79
README.FIRST
@@ -32,30 +32,30 @@ something that you type in.
|
||||
|
||||
For list of help topics:
|
||||
|
||||
> help
|
||||
; help
|
||||
|
||||
For overview of calc overview:
|
||||
|
||||
> help intro
|
||||
> help overview
|
||||
> help command
|
||||
> help define
|
||||
> help statement
|
||||
> help variable
|
||||
> help usage
|
||||
; help intro
|
||||
; help overview
|
||||
; help command
|
||||
; help define
|
||||
; help statement
|
||||
; help variable
|
||||
; help usage
|
||||
|
||||
For list of builtin functions:
|
||||
|
||||
> help builtin
|
||||
; help builtin
|
||||
|
||||
C programmers should note some unexpected differences in the calc syntax:
|
||||
|
||||
> help unexpected
|
||||
; help unexpected
|
||||
|
||||
Calc is shipped with a standard collection of calc resource files.
|
||||
For a list of calc standard resource files see:
|
||||
|
||||
> help resource
|
||||
; help resource
|
||||
|
||||
=-=
|
||||
|
||||
@@ -71,66 +71,33 @@ or run:
|
||||
|
||||
for a wish/todo list. Code contributions are welcome.
|
||||
|
||||
=-=
|
||||
-=-
|
||||
|
||||
To subscribe to the calc-tester mailing list, visit the following URL:
|
||||
If you you notice something wrong, strange or broken, see the file:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-tester.html
|
||||
BUGS
|
||||
|
||||
This is a low volume moderated mailing list.
|
||||
or run:
|
||||
|
||||
This mailing list replaces calc-tester at asthe dot com list.
|
||||
calc help bugs
|
||||
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
please send EMail to our special:
|
||||
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
address. To be sure we see your EMail asking for help with your
|
||||
mailing list subscription, please use the following phase in your
|
||||
EMail Subject line:
|
||||
|
||||
calc tester mailing list help
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
for information about how to report a bug.
|
||||
|
||||
-=-
|
||||
|
||||
Calc bug reports and calc bug fixes should be sent to:
|
||||
If you have a general question about calc, see the file:
|
||||
|
||||
calc-bug-report at asthe dot com
|
||||
QUESTIONS
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
or run:
|
||||
|
||||
This replaces the old calc-bugs at asthe dot com address.
|
||||
calc help questions
|
||||
|
||||
To be sure we see your EMail reporting a calc bug, please use the
|
||||
following phase in your EMail Subject line:
|
||||
|
||||
calc bug report
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
However, you may find it more helpful to simply subscribe
|
||||
to the calc-tester mailing list (see above) and then to
|
||||
send your report to that mailing list as a wider set calc
|
||||
testers may be able to help you.
|
||||
for information about how to ask a question.
|
||||
|
||||
-=-
|
||||
|
||||
The calc web site is located at:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/
|
||||
|
||||
NOTE: The EMail address uses 'asthe', while the web site uses 'isthe'.
|
||||
|
||||
## Copyright (C) 1999,2014,2017 Landon Curt Noll
|
||||
## Copyright (C) 1999,2014,2017,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -1,6 +1,9 @@
|
||||
# What is calc?
|
||||
|
||||
Calc is an interactive calculator which provides for easy large
|
||||
numeric calculations, but which also can be easily programmed
|
||||
for difficult or long calculations. It can accept a command line
|
||||
argument, in which case it executes that single command and exits.
|
||||
Otherwise, it enters interactive mode. In this mode, it accepts
|
||||
commands one at a time, processes them, and displays the answers.
|
||||
In the simplest case, commands are simply expressions which are
|
||||
@@ -16,7 +19,7 @@ and the calculator will print:
|
||||
15
|
||||
```
|
||||
|
||||
Calc as the usual collection of arithmetic operators +, -, /, * as
|
||||
Calc has the usual collection of arithmetic operators +, -, /, * as
|
||||
well as ^ (exponentiation), % (modulus) and // (integer divide).
|
||||
For example:
|
||||
|
||||
@@ -257,4 +260,4 @@ help unexpected
|
||||
```
|
||||
|
||||
It contains information about differences between C and calc
|
||||
that may surprize C programmers.
|
||||
that may surprise C programmers.
|
||||
|
6
addop.c
6
addop.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* addop - add opcodes to a function being compiled
|
||||
*
|
||||
* Copyright (C) 1999-2007 David I. Bell and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include "calc.h"
|
||||
#include "alloc.h"
|
||||
#include "opcodes.h"
|
||||
#include "str.h"
|
||||
#include "func.h"
|
||||
@@ -36,6 +37,9 @@
|
||||
#include "symbol.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
#define FUNCALLOCSIZE 20 /* reallocate size for functions */
|
||||
#define OPCODEALLOCSIZE 100 /* reallocate size for opcodes in functions */
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* align32 - determine if 32 bit accesses must be aligned
|
||||
*
|
||||
* Copyright (C) 1999 Landon Curt Noll
|
||||
* Copyright (C) 1999,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -34,6 +34,10 @@
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
static void buserr(void); /* catch alignment errors */
|
||||
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* assocfunc - association table routines
|
||||
*
|
||||
* Copyright (C) 1999-2007 David I. Bell
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -36,6 +36,9 @@
|
||||
#include "value.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
#define MINHASHSIZE 31 /* minimum size of hash tables */
|
||||
#define GROWHASHSIZE 50 /* approximate growth for hash tables */
|
||||
#define CHAINLENGTH 10 /* desired number of elements on a hash chain */
|
||||
|
180
banned.h
Normal file
180
banned.h
Normal file
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
* banned - optionally ban dqngerious functions
|
||||
*
|
||||
* Unless UNBAN is defined, this file will turn the use
|
||||
* of certain dangerous functions into syntax errors.
|
||||
*
|
||||
* In the case of calc, we are motivated in part by the desire for
|
||||
* calc to correctly calculate: even durings extremely long calculations.
|
||||
*
|
||||
* If UNBAN is NOT defined, then calling certain functions
|
||||
* will result in a syntaxc error.
|
||||
*
|
||||
* If we define UNBAN, then the effect of this file is disabled.
|
||||
*
|
||||
* The banned.h attempts to ban the use of certain dangerous functions
|
||||
* that, if improperly used, could compromise the computational integrity
|
||||
* if calculations.
|
||||
*
|
||||
* In the case of calc, we are motivated in part by the desire for calc
|
||||
* to correctly calculate: even durings extremely long calculations.
|
||||
*
|
||||
* If UNBAN is NOT defined, then calling certain functions
|
||||
* will result in a call to a non-existent function (link error).
|
||||
*
|
||||
* While we do NOT encourage defining UNBAN, there may be
|
||||
* a system / compiler environment where re-defining a
|
||||
* function may lead to a fatal compiler complication.
|
||||
* If that happens, consider compiling as:
|
||||
*
|
||||
* make clobber all chk CCBAN=-DUNBAN
|
||||
*
|
||||
* as see if this is a work-a-round.
|
||||
*
|
||||
* If YOU discover a need for the -DUNBAN work-a-round, PLEASE tell us!
|
||||
* Please send us a bug report. See the file:
|
||||
*
|
||||
* BUGS
|
||||
*
|
||||
* or the URL:
|
||||
*
|
||||
* http://www.isthe.com/chongo/tech/comp/calc/calc-bugrept.html
|
||||
*
|
||||
* for how to send us such a bug report.
|
||||
*
|
||||
* Copyright (C) 2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
* Public License for more details.
|
||||
*
|
||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* Under source code control: 2021/03/06 21:07:31
|
||||
* File existed as early as: 2021
|
||||
*
|
||||
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(PRE_HAVE_BAN_PRAGMA_H)
|
||||
#include "have_ban_pragma.h"
|
||||
#endif /* ! PRE_HAVE_BAN_PRAGMA_H */
|
||||
|
||||
|
||||
#if !defined(INCLUDE_BANNED_H)
|
||||
#define INCLUDE_BANNED_H
|
||||
|
||||
/*
|
||||
* If we define UNBAN, then the effect of this file is disabled.
|
||||
*/
|
||||
#if !defined(UNBAN)
|
||||
|
||||
/*
|
||||
* In the spirit of:
|
||||
*
|
||||
* https://github.com/git/git/blob/master/banned.h
|
||||
*
|
||||
* we will ban the use of certain unsafe functions by turning
|
||||
* then into function calls that do not exist.
|
||||
*
|
||||
* In the case of calc, we are motivated in part by the desire
|
||||
* for calc to correctly calculate: even durings extremely long
|
||||
* calculations.
|
||||
*
|
||||
* If UNBAN is NOT defined, then calling certain functions
|
||||
* will result in a syntaxc error.
|
||||
*
|
||||
* Unlike the above URL, we suggest an alternative function.
|
||||
* In many cases, additional logic is required to use the
|
||||
* alternative function, we cannot simply replace one function
|
||||
* with another.
|
||||
*/
|
||||
|
||||
/*
|
||||
* If one is not careful, strcpy() can lead to buffer overflows.
|
||||
* Use strlcpy() instead.
|
||||
*/
|
||||
#if defined(HAVE_PRAGMA_GCC_POSION)
|
||||
#undef strcpy
|
||||
#pragma GCC poison strcpy
|
||||
#endif /* HAVE_PRAGMA_GCC_POSION */
|
||||
|
||||
/*
|
||||
* If one is not careful, strcat() can lead to buffer overflows.
|
||||
* Use strlcat() instead.
|
||||
*/
|
||||
#if defined(HAVE_PRAGMA_GCC_POSION)
|
||||
#undef strcat
|
||||
#pragma GCC poison strcat
|
||||
#endif /* HAVE_PRAGMA_GCC_POSION */
|
||||
|
||||
/*
|
||||
* If one is not careful, strncpy() can lead to buffer overflows.
|
||||
* Use memccpy() instead.
|
||||
*/
|
||||
#if defined(HAVE_PRAGMA_GCC_POSION)
|
||||
#undef strncpy
|
||||
#pragma GCC poison strncpy
|
||||
#endif /* HAVE_PRAGMA_GCC_POSION */
|
||||
|
||||
/*
|
||||
* If one is not careful, strncat() can lead to buffer overflows.
|
||||
* Use memccpy() instead.
|
||||
*/
|
||||
#if defined(HAVE_PRAGMA_GCC_POSION)
|
||||
#undef strncat
|
||||
#pragma GCC poison strncat
|
||||
#endif /* HAVE_PRAGMA_GCC_POSION */
|
||||
|
||||
/*
|
||||
* If one is not careful, sprintf() can lead to buffer overflows.
|
||||
* Use snprintf() instead.
|
||||
*/
|
||||
#if defined(HAVE_PRAGMA_GCC_POSION)
|
||||
#undef sprintf
|
||||
#pragma GCC poison sprintf
|
||||
#endif /* HAVE_PRAGMA_GCC_POSION */
|
||||
|
||||
/*
|
||||
* If one is not careful, vsprintf() can lead to buffer overflows.
|
||||
* Use vsnprintf() instead.
|
||||
*/
|
||||
#if defined(HAVE_PRAGMA_GCC_POSION)
|
||||
#undef vsprintf
|
||||
#pragma GCC poison vsprintf
|
||||
#endif /* HAVE_PRAGMA_GCC_POSION */
|
||||
|
||||
/*
|
||||
* XXX - As of 2021, functions such as:
|
||||
*
|
||||
* gmtime_s
|
||||
* localtime_s
|
||||
* ctime_s
|
||||
* asctime_s
|
||||
*
|
||||
* are not universal. We cannot yet ban the following
|
||||
* functions because we do not have a portable AND
|
||||
* widely available alternative. Therefore we just
|
||||
* have to be extra careful when using:
|
||||
*
|
||||
* gmtime
|
||||
* localtime
|
||||
* ctime
|
||||
* ctime_r
|
||||
* asctime
|
||||
* asctime_r
|
||||
*/
|
||||
|
||||
#endif /* !UNBAN */
|
||||
|
||||
#endif /* !INCLUDE_BANNED_H */
|
8
blkcpy.c
8
blkcpy.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* blkcpy - general values and related routines used by the calculator
|
||||
*
|
||||
* Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2021 Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: Landon Curt Noll
|
||||
*
|
||||
@@ -29,12 +29,16 @@
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include "calc.h"
|
||||
#include "alloc.h"
|
||||
#include "value.h"
|
||||
#include "file.h"
|
||||
#include "blkcpy.h"
|
||||
#include "str.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* copystod - copy num indexed items from source value to destination value
|
||||
*
|
||||
@@ -1040,7 +1044,7 @@ copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi,
|
||||
NUMBER *ret; /* cloned and modified numerator */
|
||||
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
||||
HALF *swapped; /* byte swapped input data */
|
||||
unsigned long halflen; /* length of the input ounded up to HALFs */
|
||||
unsigned long halflen; /* length of the input rounded up to HALFs */
|
||||
HALF *h; /* copy byteswap pointer */
|
||||
unsigned long i;
|
||||
#endif
|
||||
|
13
block.c
13
block.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* block - fixed, dynamic, fifo and circular memory blocks
|
||||
*
|
||||
* Copyright (C) 1999-2007 Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2021 Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: Landon Curt Noll
|
||||
*
|
||||
@@ -28,6 +28,11 @@
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include "have_string.h"
|
||||
#ifdef HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#endif
|
||||
#include "alloc.h"
|
||||
#include "value.h"
|
||||
#include "zmath.h"
|
||||
#include "config.h"
|
||||
@@ -36,6 +41,10 @@
|
||||
#include "str.h"
|
||||
#include "calcerr.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
#define NBLOCKCHUNK 16
|
||||
|
||||
STATIC long nblockcount = 0;
|
||||
@@ -291,7 +300,7 @@ blkrealloc(BLOCK *blk, int newlen, int newchunk)
|
||||
* Set the data length
|
||||
*
|
||||
* We also know that the new block is not empty since we have
|
||||
* already dealth with that case above.
|
||||
* already dealt with that case above.
|
||||
*
|
||||
* After this section of code, limit and datalen will be
|
||||
* correct in terms of the new type.
|
||||
|
10
block.h
10
block.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* block - fixed, dynamic, fifo and circular memory blocks
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014 Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2014,2021 Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: Landon Curt Noll
|
||||
*
|
||||
@@ -55,7 +55,7 @@
|
||||
* blkchunk defaults to BLK_CHUNKSIZE
|
||||
*
|
||||
* blkfree(x)
|
||||
* Reduce storage down to 0 octetes.
|
||||
* Reduce storage down to 0 octets.
|
||||
*
|
||||
* size(x)
|
||||
* The length of data stored in the block.
|
||||
@@ -88,7 +88,7 @@
|
||||
* blkmove(dest, src, length [, dest_offset [, src_offset]])
|
||||
* 0 <= length <= blksize(x)
|
||||
* offset's are restricted in value by block type
|
||||
* overlapping moves are handeled correctly
|
||||
* overlapping moves are handled correctly
|
||||
*
|
||||
* blkccpy(dest, src, stopval, length [, dest_offset [, src_offset]])
|
||||
* 0 <= length <= blksize(x)
|
||||
@@ -104,7 +104,7 @@
|
||||
* b = a*k for some integer k >= 1
|
||||
*
|
||||
* scatter(src, dest1, dest2 [, dest3 ] ...)
|
||||
* copy sucessive octets from src into dest1, dest2, ...
|
||||
* copy successive octets from src into dest1, dest2, ...
|
||||
* restarting with dest1 after end of list
|
||||
* stops at end of src
|
||||
*
|
||||
@@ -184,7 +184,7 @@ EXTERN int blk_debug; /* 0 => debug off */
|
||||
/* length of data stored in a block */
|
||||
#define blklen(blk) ((blk)->datalen)
|
||||
|
||||
/* block footpint in memory */
|
||||
/* block footprint in memory */
|
||||
#define blksizeof(blk) ((blk)->maxsize)
|
||||
|
||||
/* block allocation chunk size */
|
||||
|
23
byteswap.c
23
byteswap.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* byteswap - byte swapping routines
|
||||
*
|
||||
* Copyright (C) 1999 Landon Curt Noll
|
||||
* Copyright (C) 1999,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -29,6 +29,9 @@
|
||||
#include "byteswap.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* swap_b8_in_HALFs - swap 8 and if needed, 16 bits in an array of HALFs
|
||||
*
|
||||
@@ -77,7 +80,7 @@ swap_b8_in_HALFs(HALF *dest, HALF *src, LEN len)
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a ZVALUE to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
* multiprecision storage
|
||||
* multi-precision storage
|
||||
*
|
||||
* returns:
|
||||
* pointer to where the swapped src has been put
|
||||
@@ -145,7 +148,7 @@ swap_b8_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a NUMBER to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
* multiprecision storage
|
||||
* multi-precision storage
|
||||
*
|
||||
* returns:
|
||||
* pointer to where the swapped src has been put
|
||||
@@ -209,7 +212,7 @@ swap_b8_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a COMPLEX to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
* multiprecision storage
|
||||
* multi-precision storage
|
||||
*
|
||||
* returns:
|
||||
* pointer to where the swapped src has been put
|
||||
@@ -313,7 +316,7 @@ swap_b16_in_HALFs(HALF *dest, HALF *src, LEN len)
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a ZVALUE to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
* multiprecision storage
|
||||
* multi-precision storage
|
||||
*
|
||||
* returns:
|
||||
* pointer to where the swapped src has been put
|
||||
@@ -380,7 +383,7 @@ swap_b16_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a NUMBER to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
* multiprecision storage
|
||||
* multi-precision storage
|
||||
*
|
||||
* returns:
|
||||
* pointer to where the swapped src has been put
|
||||
@@ -444,7 +447,7 @@ swap_b16_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a COMPLEX to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
* multiprecision storage
|
||||
* multi-precision storage
|
||||
*
|
||||
* returns:
|
||||
* pointer to where the swapped src has been put
|
||||
@@ -508,7 +511,7 @@ swap_b16_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all)
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a ZVALUE to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
* multiprecision storage
|
||||
* multi-precision storage
|
||||
*
|
||||
* returns:
|
||||
* pointer to where the swapped src has been put
|
||||
@@ -576,7 +579,7 @@ swap_HALF_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a NUMBER to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
* multiprecision storage
|
||||
* multi-precision storage
|
||||
*
|
||||
* returns:
|
||||
* pointer to where the swapped src has been put
|
||||
@@ -640,7 +643,7 @@ swap_HALF_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a COMPLEX to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
* multiprecision storage
|
||||
* multi-precision storage
|
||||
*
|
||||
* returns:
|
||||
* pointer to where the swapped src has been put
|
||||
|
94
cal/Makefile
94
cal/Makefile
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# cal - makefile for calc standard resource files
|
||||
#
|
||||
# Copyright (C) 1999-2006,2017 Landon Curt Noll
|
||||
# Copyright (C) 1999-2006,2017,2021 Landon Curt Noll
|
||||
#
|
||||
# Calc is open software; you can redistribute it and/or modify it under
|
||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -27,9 +27,28 @@
|
||||
# calculator by David I. Bell with help/mods from others
|
||||
# Makefile by Landon Curt Noll
|
||||
|
||||
# required vars
|
||||
|
||||
# The shell used by this Makefile
|
||||
#
|
||||
# On some systems, /bin/sh is a rather reduced shell with
|
||||
# deprecated behavor.
|
||||
#
|
||||
# If your system has a up to date, bash shell, then
|
||||
# you may wish to use:
|
||||
#
|
||||
# SHELL= /bin/bash
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point wehre is cannot be depended on.
|
||||
# On such systems, the zsh may be a much better alternative
|
||||
# shell for this Makefile to use:
|
||||
#
|
||||
# SHELL= /bin/zsh
|
||||
#
|
||||
SHELL= /bin/sh
|
||||
#SHELL= /bin/bash
|
||||
#SHELL= /bin/zsh
|
||||
|
||||
|
||||
####
|
||||
# Normally, the upper level makefile will set these values. We provide
|
||||
@@ -167,45 +186,44 @@ Q=@
|
||||
#
|
||||
CHMOD= chmod
|
||||
CMP= cmp
|
||||
RM= rm
|
||||
MKDIR= mkdir
|
||||
RMDIR= rmdir
|
||||
CP= cp
|
||||
MV= mv
|
||||
CO= co
|
||||
TRUE= true
|
||||
TOUCH= touch
|
||||
CP= cp
|
||||
FMT= fmt
|
||||
MKDIR= mkdir
|
||||
MV= mv
|
||||
RM= rm
|
||||
RMDIR= rmdir
|
||||
SED= sed
|
||||
SORT= sort
|
||||
FMT= fmt
|
||||
TOUCH= touch
|
||||
TRUE= true
|
||||
|
||||
# The calc files to install
|
||||
#
|
||||
# This list is prodiced by the detaillist rule when no WARNINGS are detected.
|
||||
# This list is produced by the detaillist rule when no WARNINGS are detected.
|
||||
#
|
||||
# Please use:
|
||||
#
|
||||
# make calc_files_list
|
||||
#
|
||||
# to keep this list in nice sorted order and to check that these
|
||||
# deailed help files are under RCS control.
|
||||
# to keep this list in nice sorted order.
|
||||
#
|
||||
CALC_FILES= README alg_config.cal beer.cal bernoulli.cal \
|
||||
bernpoly.cal bigprime.cal bindings brentsolve.cal chi.cal chrem.cal \
|
||||
constants.cal deg.cal dms.cal dotest.cal ellip.cal factorial.cal \
|
||||
factorial2.cal gvec.cal hello.cal hms.cal infinities.cal \
|
||||
intfile.cal intnum.cal lambertw.cal linear.cal lnseries.cal \
|
||||
lucas.cal lucas_chk.cal mersenne.cal mfactor.cal \
|
||||
mod.cal natnumset.cal pell.cal pi.cal pix.cal pollard.cal poly.cal \
|
||||
prompt.cal psqrt.cal qtime.cal quat.cal randbitrun.cal randmprime.cal \
|
||||
randombitrun.cal randomrun.cal randrun.cal regress.cal repeat.cal \
|
||||
screen.cal seedrandom.cal set8700.cal set8700.line smallfactors.cal \
|
||||
solve.cal specialfunctions.cal statistics.cal strings.cal sumsq.cal \
|
||||
sumtimes.cal surd.cal test1700.cal test2300.cal test2600.cal \
|
||||
test2700.cal test3100.cal test3300.cal test3400.cal test3500.cal \
|
||||
test4000.cal test4100.cal test4600.cal test5100.cal test5200.cal \
|
||||
test8400.cal test8500.cal test8600.cal test8900.cal toomcook.cal \
|
||||
unitfrac.cal varargs.cal xx_print.cal zeta2.cal
|
||||
factorial2.cal gvec.cal hello.cal hms.cal infinities.cal intfile.cal \
|
||||
intnum.cal lambertw.cal linear.cal lnseries.cal lucas.cal \
|
||||
lucas_chk.cal mersenne.cal mfactor.cal mod.cal natnumset.cal pell.cal \
|
||||
pi.cal pix.cal pollard.cal poly.cal prompt.cal psqrt.cal qtime.cal \
|
||||
quat.cal randbitrun.cal randmprime.cal randombitrun.cal randomrun.cal \
|
||||
randrun.cal regress.cal repeat.cal screen.cal seedrandom.cal \
|
||||
set8700.cal set8700.line smallfactors.cal solve.cal \
|
||||
specialfunctions.cal statistics.cal strings.cal sumsq.cal sumtimes.cal \
|
||||
surd.cal test1700.cal test2300.cal test2600.cal test2700.cal \
|
||||
test3100.cal test3300.cal test3400.cal test3500.cal test4000.cal \
|
||||
test4100.cal test4600.cal test5100.cal test5200.cal test8400.cal \
|
||||
test8500.cal test8600.cal test8900.cal toomcook.cal unitfrac.cal \
|
||||
varargs.cal xx_print.cal zeta2.cal
|
||||
|
||||
# These calc files are now obsolete and are removed by the install rule.
|
||||
#
|
||||
@@ -236,7 +254,7 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
|
||||
# sub-directory called calc/cal.
|
||||
#
|
||||
# NOTE: Due to bogus shells found on one common system we must have
|
||||
# an non-emoty else clause for every if condition. *sigh*
|
||||
# an non-empty else clause for every if condition. *sigh*
|
||||
#
|
||||
##
|
||||
|
||||
@@ -261,19 +279,13 @@ calcliblist:
|
||||
#
|
||||
calc_files_list:
|
||||
${Q} -(find . -mindepth 1 -maxdepth 1 -type f -name '*.cal' -print | \
|
||||
while read i; do \
|
||||
if [ X"$$i" != X"/dev/null" ]; then \
|
||||
if [ ! -f RCS/$$i,v ]; then \
|
||||
echo "WARNING: $$i not under RCS control" 1>&2; \
|
||||
else \
|
||||
echo $$i; \
|
||||
fi; \
|
||||
fi; \
|
||||
done; \
|
||||
echo '--first_line--'; \
|
||||
echo README; \
|
||||
echo set8700.line; \
|
||||
echo bindings) | \
|
||||
while read i; do \
|
||||
echo $$i; \
|
||||
done; \
|
||||
echo '--first_line--'; \
|
||||
echo README; \
|
||||
echo set8700.line; \
|
||||
echo bindings) | \
|
||||
${SED} -e 's:^\./::' | LANG=C ${SORT} | ${FMT} -70 | \
|
||||
${SED} -e '1s/--first_line--/CALC_FILES=/' -e '2,$$s/^/ /' \
|
||||
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
||||
@@ -391,7 +403,7 @@ uninstall:
|
||||
if [ -f "${T}${CALC_SHAREDIR}/$$i" ]; then \
|
||||
echo "cannot uninstall ${T}${CALC_SHAREDIR}/$$i"; \
|
||||
else \
|
||||
echo "uninstalled ${T}${CALC_SHAREDIR}/$$i"; \
|
||||
echo "un-installed ${T}${CALC_SHAREDIR}/$$i"; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
|
73
cal/README
73
cal/README
@@ -38,43 +38,6 @@ Calc resource file files are provided because they serve as examples of
|
||||
how use the calc language, and/or because the authors thought them to
|
||||
be useful!
|
||||
|
||||
If you write something that you think is useful, please join the
|
||||
low volume calc mailing list calc-tester. Then send your contribution
|
||||
to the calc-tester mailing list.
|
||||
|
||||
To subscribe to the calc-tester mailing list, visit the following URL:
|
||||
|
||||
https://www.listbox.com/subscribe/?list_id=239342
|
||||
|
||||
To help determine you are a human and not just a spam bot,
|
||||
you will be required to provide the following additional info:
|
||||
|
||||
Your Name
|
||||
Calc Version
|
||||
Operating System
|
||||
The date 7 days ago
|
||||
|
||||
This is a low volume moderated mailing list.
|
||||
|
||||
This mailing list replaces calc-tester at asthe dot com list.
|
||||
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
please send EMail to our special:
|
||||
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
address. To be sure we see your EMail asking for help with your
|
||||
mailing list subscription, please use the following phase in your
|
||||
EMail Subject line:
|
||||
|
||||
calc tester mailing list help
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
=-=
|
||||
|
||||
By convention, a resource file only defines and/or initializes functions,
|
||||
@@ -250,12 +213,12 @@ brentsolve.cal
|
||||
|
||||
brentsolve(low, high,eps)
|
||||
|
||||
A root-finder implementwed with the Brent-Dekker trick.
|
||||
A root-finder implemented with the Brent-Dekker trick.
|
||||
|
||||
brentsolve2(low, high,which,eps)
|
||||
|
||||
The second function, brentsolve2(low, high,which,eps) has some lines
|
||||
added to make it easier to hardcode the name of the helper function
|
||||
added to make it easier to hard-code the name of the helper function
|
||||
different from the obligatory "f".
|
||||
|
||||
See:
|
||||
@@ -429,7 +392,7 @@ factorial2.cal
|
||||
|
||||
bigcatalan(n)
|
||||
|
||||
Calculates the n-th Catalan number for n large. It is usefull
|
||||
Calculates the n-th Catalan number for n large. It is useful
|
||||
above n~50,000 but defaults to the builtin function for smaller
|
||||
values.Meant as a complete replacement for catalan(n) with only a
|
||||
very small overhead. See:
|
||||
@@ -470,9 +433,9 @@ factorial2.cal
|
||||
k = 0
|
||||
|
||||
The other function stirling2caching(n,m) does it by way of the
|
||||
reccurence relation and keeps all earlier results. This function
|
||||
re-occurrence relation and keeps all earlier results. This function
|
||||
is much slower for computing a single value than stirling2(n,m) but
|
||||
is very usefull if many Stirling numbers are needed, for example in
|
||||
is very useful if many Stirling numbers are needed, for example in
|
||||
a series. See:
|
||||
|
||||
http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind
|
||||
@@ -583,7 +546,7 @@ infinities.cal
|
||||
pinf()
|
||||
|
||||
The symbolic handling of infinities. Needed for intnum.cal but might be
|
||||
usefull elsewhere, too.
|
||||
useful elsewhere, too.
|
||||
|
||||
|
||||
intfile.cal
|
||||
@@ -632,13 +595,13 @@ intnum.cal
|
||||
This file offers some methods for numerical integration. Implemented are
|
||||
the Gauss-Legendre and the tanh-sinh quadrature.
|
||||
|
||||
All functions are usefull to some extend but the main function for
|
||||
All functions are useful to some extend but the main function for
|
||||
quadrature is quad(), which is not much more than an abstraction layer.
|
||||
|
||||
The main workers are quadgl() for Gauss-legendre and quadts() for the
|
||||
The main workers are quadgl() for Gauss-Legendre and quadts() for the
|
||||
tanh-sinh quadrature. The limits of the integral can be anything in the
|
||||
complex plane and the extended real line. The latter means that infinite
|
||||
limits are supported by way of the smbolic infinities implemented in the
|
||||
limits are supported by way of the symbolic infinities implemented in the
|
||||
file infinities.cal (automatically linked in by intnum.cal).
|
||||
|
||||
Integration in parts and contour is supported by the "points" argument
|
||||
@@ -698,7 +661,7 @@ intnum.cal
|
||||
|
||||
The quad*core functions do not offer anything fancy but the third parameter
|
||||
controls the so called "order" which is just the number of nodes computed.
|
||||
This can be quite usefull in some circumstances.
|
||||
This can be quite useful in some circumstances.
|
||||
|
||||
; quadgldeletenodes()
|
||||
; define f(x){ return exp(x);}
|
||||
@@ -760,7 +723,7 @@ lambertw.cal
|
||||
ProductLog[branch,z] with the tested values.
|
||||
|
||||
The series is only valid for the branches 0,-1, real z, converges
|
||||
for values of z _very_ near the branchpoint -exp(-1) only, and must
|
||||
for values of z _very_ near the branch-point -exp(-1) only, and must
|
||||
be given the branches explicitly. See the code in lambertw.cal
|
||||
for further information.
|
||||
|
||||
@@ -783,7 +746,7 @@ lnseries.cal
|
||||
does so by computing the prime factorization of all of the number
|
||||
sequence 1,2,3...n, calculates the natural logarithms of the primes
|
||||
in 1,2,3...n and uses the above factorization to build the natural
|
||||
logarithms of the rest of the sequence by sadding the logarithms of
|
||||
logarithms of the rest of the sequence by adding the logarithms of
|
||||
the primes in the factorization. This is faster for high precision
|
||||
of the logarithms and/or long sequences.
|
||||
|
||||
@@ -843,7 +806,7 @@ mfactor.cal
|
||||
at 2*start_k*n+1. Skips values that are multiples of primes <= p_elim.
|
||||
By default, start_k == 1, rept_loop = 10000 and p_elim = 17.
|
||||
|
||||
The p_elim == 17 overhead takes ~3 minutes on an 200 Mhz r4k CPU and
|
||||
The p_elim == 17 overhead takes ~3 minutes on an 200 MHz r4k CPU and
|
||||
requires about ~13 Megs of memory. The p_elim == 13 overhead
|
||||
takes about 3 seconds and requires ~1.5 Megs of memory.
|
||||
|
||||
@@ -1354,7 +1317,7 @@ specialfunctions.cal
|
||||
http://en.wikipedia.org/wiki/Polygamma
|
||||
http://dlmf.nist.gov/5
|
||||
|
||||
for information on the n-th derivative ofthe Euler gamma function. This
|
||||
for information on the n-th derivative of the Euler gamma function. This
|
||||
function depends on the script zeta2.cal.
|
||||
|
||||
|
||||
@@ -1371,7 +1334,7 @@ specialfunctions.cal
|
||||
|
||||
zeta(s)
|
||||
|
||||
Calculates the value of the Rieman Zeta function at s. See:
|
||||
Calculates the value of the Riemann Zeta function at s. See:
|
||||
|
||||
http://en.wikipedia.org/wiki/Riemann_zeta_function
|
||||
http://dlmf.nist.gov/25.2
|
||||
@@ -1390,7 +1353,7 @@ statistics.cal
|
||||
invbetainc(x,a,b)
|
||||
|
||||
Computes the inverse of the regularized beta function. Does so the
|
||||
brute-force way wich makes it a bit slower.
|
||||
brute-force way which makes it a bit slower.
|
||||
|
||||
betapdf(x,a,b)
|
||||
betacdf(x,a,b)
|
||||
@@ -1470,7 +1433,7 @@ sumtimes.cal
|
||||
Give the user CPU time for various ways of evaluating sums, sums of
|
||||
squares, etc, for large lists and matrices. N is the size of
|
||||
the list or matrix to use. The doalltimes() function will run
|
||||
all fo the sumtimes tests. For example:
|
||||
all of the sumtimes tests. For example:
|
||||
|
||||
doalltimes(1e6);
|
||||
|
||||
@@ -1816,7 +1779,7 @@ zeta2.cal
|
||||
for information on this special zeta function.
|
||||
|
||||
|
||||
## Copyright (C) 2000,2014,2017 David I. Bell and Landon Curt Noll
|
||||
## Copyright (C) 2000,2014,2017,2021 David I. Bell and Landon Curt Noll
|
||||
##
|
||||
## Primary author: Landon Curt Noll
|
||||
##
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* alg_config - help determine optimal values for algorithm levels
|
||||
*
|
||||
* Copyright (C) 2006,2014 Landon Curt Noll
|
||||
* Copyright (C) 2006,2014,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -33,7 +33,7 @@ static test_time; /* try for this many seconds in loop test */
|
||||
* given:
|
||||
* ratio the ratio of time between two algorithms
|
||||
*
|
||||
* retuns:
|
||||
* returns:
|
||||
* 1 When ratio is near 1.0
|
||||
* 0 otherwise
|
||||
*
|
||||
@@ -354,7 +354,7 @@ define best_mul2()
|
||||
local high; /* high loop value tested */
|
||||
local mid; /* between low and high */
|
||||
local best_val; /* value found with ratio closest to unity */
|
||||
local best_ratio; /* cloest ratio found to unity */
|
||||
local best_ratio; /* closest ratio found to unity */
|
||||
local expand; /* how fast to expand the length */
|
||||
|
||||
/*
|
||||
@@ -363,7 +363,7 @@ define best_mul2()
|
||||
printf("WARNING: This tool may not be computing the correct best value\n");
|
||||
test_time = 5.0;
|
||||
printf("The best_mul2() function will take a LONG time to run!\n");
|
||||
printf("It is important that best_mul2() run on an othwewise idle host!\n");
|
||||
printf("It is important that best_mul2() run on an otherwise idle host!\n");
|
||||
if (config("user_debug") <= 0) {
|
||||
printf("To monitor progress, set user_debug to 2: "
|
||||
"config(\"user_debug\", 2)\n");
|
||||
@@ -392,7 +392,7 @@ define best_mul2()
|
||||
*/
|
||||
do {
|
||||
/*
|
||||
* determine the paramters of the next ratio test
|
||||
* determine the parameters of the next ratio test
|
||||
*
|
||||
* We will multiplicatively expand our test level until
|
||||
* the ratio drops below 1.0.
|
||||
@@ -419,7 +419,7 @@ define best_mul2()
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
printf(" len %d has a new closest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
@@ -442,7 +442,7 @@ define best_mul2()
|
||||
high /= 2;
|
||||
low = high / 2;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("retesting multiply alg1/alg2 ratio for len = %d\n",
|
||||
printf("re-testing multiply alg1/alg2 ratio for len = %d\n",
|
||||
high);
|
||||
}
|
||||
ratio = mul_ratio(high);
|
||||
@@ -450,7 +450,8 @@ define best_mul2()
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
printf(" len %d has a new closest ratio "
|
||||
"to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
@@ -483,7 +484,7 @@ define best_mul2()
|
||||
best_val = mid;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
printf(" len %d has a new closest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
@@ -535,7 +536,7 @@ define best_mul2()
|
||||
printf("config(\"mul2\", %d),;\n", best_val);
|
||||
printf("WARNING: It is believed that the output "
|
||||
"of this resource file is bogus!\n");
|
||||
printf("WARNING: You may NOT wish to follow the above suggeston.\n");
|
||||
printf("WARNING: You may NOT wish to follow the above suggestion.\n");
|
||||
}
|
||||
return mid;
|
||||
}
|
||||
@@ -835,7 +836,7 @@ define best_sq2()
|
||||
local high; /* high loop value tested */
|
||||
local mid; /* between low and high */
|
||||
local best_val; /* value found with ratio closest to unity */
|
||||
local best_ratio; /* cloest ratio found to unity */
|
||||
local best_ratio; /* closest ratio found to unity */
|
||||
local expand; /* how fast to expand the length */
|
||||
|
||||
/*
|
||||
@@ -844,7 +845,7 @@ define best_sq2()
|
||||
printf("WARNING: This tool may not be computing the correct best value\n");
|
||||
test_time = 5.0;
|
||||
printf("The best_sq2() function will take a LONG time to run!\n");
|
||||
printf("It is important that best_sq2() run on an othwewise idle host!\n");
|
||||
printf("It is important that best_sq2() run on an otherwise idle host!\n");
|
||||
if (config("user_debug") <= 0) {
|
||||
printf("To monitor progress, set user_debug to 2: "
|
||||
"config(\"user_debug\", 2)\n");
|
||||
@@ -873,7 +874,7 @@ define best_sq2()
|
||||
*/
|
||||
do {
|
||||
/*
|
||||
* determine the paramters of the next ratio test
|
||||
* determine the parameters of the next ratio test
|
||||
*
|
||||
* We will multiplicatively expand our test level until
|
||||
* the ratio drops below 1.0.
|
||||
@@ -900,7 +901,7 @@ define best_sq2()
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
printf(" len %d has a new closest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
@@ -923,7 +924,7 @@ define best_sq2()
|
||||
high /= 2;
|
||||
low = high / 2;
|
||||
if (config("user_debug") > 0) {
|
||||
printf("retesting multiply alg1/alg2 ratio for len = %d\n",
|
||||
printf("re-testing multiply alg1/alg2 ratio for len = %d\n",
|
||||
high);
|
||||
}
|
||||
ratio = mul_ratio(high);
|
||||
@@ -931,7 +932,8 @@ define best_sq2()
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
printf(" len %d has a new closest ratio "
|
||||
"to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
@@ -964,7 +966,7 @@ define best_sq2()
|
||||
best_val = mid;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
printf(" len %d has a new closest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
@@ -1017,7 +1019,7 @@ define best_sq2()
|
||||
printf("config(\"sq2\", %d),;\n", best_val);
|
||||
printf("WARNING: It is believed that the output "
|
||||
"of this resource file is bogus!\n");
|
||||
printf("WARNING: You may NOT wish to follow the above suggeston.\n");
|
||||
printf("WARNING: You may NOT wish to follow the above suggestion.\n");
|
||||
}
|
||||
return mid;
|
||||
}
|
||||
@@ -1337,7 +1339,7 @@ define best_pow2()
|
||||
local high; /* high loop value tested */
|
||||
local mid; /* between low and high */
|
||||
local best_val; /* value found with ratio closest to unity */
|
||||
local best_ratio; /* cloest ratio found to unity */
|
||||
local best_ratio; /* closest ratio found to unity */
|
||||
local expand; /* how fast to expand the length */
|
||||
local looped; /* 1 ==> we have expanded lengths before */
|
||||
|
||||
@@ -1347,7 +1349,7 @@ define best_pow2()
|
||||
printf("WARNING: This tool may not be computing the correct best value\n");
|
||||
test_time = 60.0;
|
||||
printf("The best_pow2() function will take a LONG time to run!\n");
|
||||
printf("It is important that best_pow2() run on an othwewise idle host!\n");
|
||||
printf("It is important that best_pow2() run on an otherwise idle host!\n");
|
||||
if (config("user_debug") <= 0) {
|
||||
printf("To monitor progress, set user_debug to 2: "
|
||||
"config(\"user_debug\", 2)\n");
|
||||
@@ -1358,7 +1360,7 @@ define best_pow2()
|
||||
* firewall - must have a >1.02 ratio for the initial length
|
||||
*
|
||||
* We select 1.02 because of the precision of the CPU timing. We
|
||||
* want to firt move into an area where the 1st algoritm clearly
|
||||
* want to first move into an area where the 1st algorithm clearly
|
||||
* dominates.
|
||||
*/
|
||||
low = 4;
|
||||
@@ -1375,7 +1377,7 @@ define best_pow2()
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
printf(" len %d has a new closest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
@@ -1397,7 +1399,7 @@ define best_pow2()
|
||||
looped = 0;
|
||||
do {
|
||||
/*
|
||||
* determine the paramters of the next ratio test
|
||||
* determine the parameters of the next ratio test
|
||||
*
|
||||
* We will multiplicatively expand our test level until
|
||||
* the ratio drops below 1.0.
|
||||
@@ -1435,7 +1437,7 @@ define best_pow2()
|
||||
best_val = high;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
printf(" len %d has a new closest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
@@ -1463,7 +1465,7 @@ define best_pow2()
|
||||
best_val = mid;
|
||||
best_ratio = ratio;
|
||||
if (config("user_debug") > 1) {
|
||||
printf(" len %d has a new cloest ratio to unity: %.6f\n",
|
||||
printf(" len %d has a new closest ratio to unity: %.6f\n",
|
||||
best_val, best_ratio);
|
||||
}
|
||||
}
|
||||
@@ -1516,7 +1518,7 @@ define best_pow2()
|
||||
printf("config(\"pow2\", %d),;\n", best_val);
|
||||
printf("WARNING: It is believed that the output "
|
||||
"of this resource file is bogus!\n");
|
||||
printf("WARNING: You may NOT wish to follow the above suggeston.\n");
|
||||
printf("WARNING: You may NOT wish to follow the above suggestion.\n");
|
||||
}
|
||||
return mid;
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* bernoulli - clculate the Nth Bernoulli number B(n)
|
||||
* bernoulli - calculate the Nth Bernoulli number B(n)
|
||||
*
|
||||
* Copyright (C) 2000 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 2000,2021 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -26,9 +26,9 @@
|
||||
/*
|
||||
* Calculate the Nth Bernoulli number B(n).
|
||||
*
|
||||
* NOTE: This is now a bulitin function.
|
||||
* NOTE: This is now a builtin function.
|
||||
*
|
||||
* The non-buildin code used the following symbolic formula to calculate B(n):
|
||||
* The non-builtin code used the following symbolic formula to calculate B(n):
|
||||
*
|
||||
* (b+1)^(n+1) - b^(n+1) = 0
|
||||
*
|
||||
@@ -42,7 +42,7 @@
|
||||
* B(3) = -(6*B(2) + 4*B(1) + 1) / 4
|
||||
*
|
||||
* The combinatorial factors in the expansion of the above formula are
|
||||
* calculated interatively, and we use the fact that B(2i+1) = 0 if i > 0.
|
||||
* calculated interactively, and we use the fact that B(2i+1) = 0 if i > 0.
|
||||
* Since all previous B(n)'s are needed to calculate a particular B(n), all
|
||||
* values obtained are saved in an array for ease in repeated calculations.
|
||||
*/
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* bernpoly - Bernoully polynomials B_n(z) for arbitrary n,z..
|
||||
* bernpoly - Bernoulli polynomials B_n(z) for arbitrary n,z..
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
* Copyright (C) 2013,2021 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* brentsolve - Root finding with the Brent-Dekker trick
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
* Copyright (C) 2013,2021 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -143,7 +143,7 @@ define brentsolve2(low, high,which,eps){
|
||||
|
||||
switch(param(0)){
|
||||
case 0:
|
||||
case 1: return newerror("brentsolve2: not enough argments");
|
||||
case 1: return newerror("brentsolve2: not enough arguments");
|
||||
case 2: eps = epsilon(epsilon()*1e-2);
|
||||
which = 0;break;
|
||||
case 3: eps = epsilon(epsilon()*1e-2);break;
|
||||
|
10
cal/chi.cal
10
cal/chi.cal
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* chi - chi^2 probabilities with degrees of freedom for null hypothesis
|
||||
*
|
||||
* Copyright (C) 2001 Landon Curt Noll
|
||||
* Copyright (C) 2001,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -51,7 +51,7 @@ define Z(x, eps_term)
|
||||
|
||||
|
||||
/*
|
||||
* P(x[, eps]) asymtotic P(x) expansion for x>0 to an given epsilon error term
|
||||
* P(x[, eps]) asymptotic P(x) expansion for x>0 to an given epsilon error term
|
||||
*
|
||||
* NOTE: If eps is omitted, the stored epsilon value is used.
|
||||
*
|
||||
@@ -99,7 +99,7 @@ define P(x, eps_term)
|
||||
}
|
||||
|
||||
/*
|
||||
* aproximate sum(n=0; n < infinity){x^(2*n+1)/(1*3*5*...(2*n+1)}
|
||||
* approximate sum(n=0; n < infinity){x^(2*n+1)/(1*3*5*...(2*n+1)}
|
||||
*/
|
||||
x2 = x*x;
|
||||
x_term = x;
|
||||
@@ -130,7 +130,7 @@ define P(x, eps_term)
|
||||
*
|
||||
* The chi_prob() function does not work well with odd degrees of freedom.
|
||||
* It is reasonable with even degrees of freedom, although one must give
|
||||
* a sifficently small error term as the degress gets large (>100).
|
||||
* a sufficiently small error term as the degrees gets large (>100).
|
||||
*
|
||||
* NOTE: This function does not work well with odd degrees of freedom.
|
||||
* Can somebody help / find a bug / provide a better method of
|
||||
@@ -186,7 +186,7 @@ define chi_prob(chi_sq, v, eps_term)
|
||||
local r; /* index in finite sum */
|
||||
local r_lim; /* limit value for r */
|
||||
local s; /* sum */
|
||||
local d; /* demoninator (2*4*6*... or 1*3*5...) */
|
||||
local d; /* denominator (2*4*6*... or 1*3*5...) */
|
||||
local chi_term; /* chi_sq^r */
|
||||
local ret; /* return value */
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* chrem - chinese remainder theorem/problem solver
|
||||
* chrem - Chinese remainder theorem/problem solver
|
||||
*
|
||||
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||
* Copyright (C) 1999,2021 Ernest Bowen and Landon Curt Noll
|
||||
*
|
||||
* Primary author: Ernest Bowen
|
||||
*
|
||||
@@ -26,7 +26,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* When possible, chrem finds solutions for x of a set of congruences
|
||||
* When possible, chrem finds solutions for x of a set of congruence
|
||||
* of the form:
|
||||
*
|
||||
* x = r1 (mod m1)
|
||||
@@ -35,7 +35,7 @@
|
||||
*
|
||||
* where the residues r1, r2, ... and the moduli m1, m2, ... are
|
||||
* given integers. The Chinese remainder theorem states that if
|
||||
* m1, m2, ... are relatively prime in pairs, the above congruences
|
||||
* m1, m2, ... are relatively prime in pairs, the above congruence
|
||||
* have a unique solution modulo m1 * m2 * ... If m1, m2, ...
|
||||
* are not relatively prime in pairs, it is possible that no solution
|
||||
* exists. If solutions exist, the general solution is expressible as:
|
||||
|
10
cal/dms.cal
10
cal/dms.cal
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* dms - calculate in degrees, minutes, and seconds (based on deg)
|
||||
*
|
||||
* Copyright (C) 1999,2010 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999,2010,2021 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -53,7 +53,7 @@ define dms_add(a, b)
|
||||
{
|
||||
local obj dms ans; /* return value */
|
||||
|
||||
/* initalize value to 1st arg */
|
||||
/* initialize value to 1st arg */
|
||||
if (istype(a, ans)) {
|
||||
/* 1st arg is dms object, load it */
|
||||
ans.deg = a.deg;
|
||||
@@ -110,7 +110,7 @@ define dms_sub(a, b)
|
||||
{
|
||||
local obj dms ans; /* return value */
|
||||
|
||||
/* initalize value to 1st arg */
|
||||
/* initialize value to 1st arg */
|
||||
if (istype(a, ans)) {
|
||||
/* 1st arg is dms object, load it */
|
||||
ans.deg = a.deg;
|
||||
@@ -352,11 +352,11 @@ define fixdms(a)
|
||||
quit "attempt to fix a non dms object";
|
||||
}
|
||||
|
||||
/* force minutes to be intergral */
|
||||
/* force minutes to be integral */
|
||||
a.min += frac(a.deg) * 60;
|
||||
a.deg = int(a.deg);
|
||||
|
||||
/* force degrees to be intergral */
|
||||
/* force degrees to be integral */
|
||||
a.sec += frac(a.min) * 60;
|
||||
a.min = int(a.min);
|
||||
|
||||
|
@@ -8,8 +8,8 @@
|
||||
* copyright this dotest_code.
|
||||
*
|
||||
* ERNEST BOWEN AND LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||||
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MER-
|
||||
* CHANTABILITY AND FITNESS. IN NO EVENT SHALL LANDON CURT
|
||||
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MER-
|
||||
* CHANTABILITY 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,
|
||||
@@ -173,7 +173,7 @@ define dotest(dotest_file, dotest_code = 0, dotest_maxcond = -1)
|
||||
}
|
||||
|
||||
/*
|
||||
* preppare to return to the caller environment
|
||||
* prepare to return to the caller environment
|
||||
*
|
||||
* We increase the caller's error count by the number
|
||||
* of line tests that failed, not the number of internal
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* factorial2 - implementation of different factorial related functions
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
* Copyright (C) 2013,2021 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -281,10 +281,10 @@ define __CZ__multiply_factored_factorial(matrix,stop){
|
||||
}
|
||||
|
||||
/*
|
||||
Compute binomial coeficients n!/(k!(n-k)!)
|
||||
Compute binomial coefficients n!/(k!(n-k)!)
|
||||
|
||||
One of the rare cases where a formula once meant to ease manual computation
|
||||
is actually the (aymptotically) fastest way to do it (in July 2013) for
|
||||
is actually the (asymptotically) fastest way to do it (in July 2013) for
|
||||
the extreme case binomial(2N,N) but for a high price, the memory
|
||||
needed is pi(N)--theoretically.
|
||||
*/
|
||||
@@ -626,7 +626,7 @@ define subfactorialrecursive(n){
|
||||
return n * subfactorialrecursive(n-1) + (-1)^n;
|
||||
}
|
||||
|
||||
/* This is, quite amusingely, faster than the very same algorithm in
|
||||
/* This is, quite amusingly, faster than the very same algorithm in
|
||||
PARI/GP + GMP*/
|
||||
define subfactorialiterative(n){
|
||||
local k temp1 temp2 ret;
|
||||
|
10
cal/hms.cal
10
cal/hms.cal
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* hms - calculate in hours, minutes, and seconds
|
||||
*
|
||||
* Copyright (C) 2010 Landon Curt Noll
|
||||
* Copyright (C) 2010,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -53,7 +53,7 @@ define hms_add(a, b)
|
||||
{
|
||||
local obj hms ans; /* return value */
|
||||
|
||||
/* initalize value to 1st arg */
|
||||
/* initialize value to 1st arg */
|
||||
if (istype(a, ans)) {
|
||||
/* 1st arg is hms object, load it */
|
||||
ans.hour = a.hour;
|
||||
@@ -110,7 +110,7 @@ define hms_sub(a, b)
|
||||
{
|
||||
local obj hms ans; /* return value */
|
||||
|
||||
/* initalize value to 1st arg */
|
||||
/* initialize value to 1st arg */
|
||||
if (istype(a, ans)) {
|
||||
/* 1st arg is hms object, load it */
|
||||
ans.hour = a.hour;
|
||||
@@ -352,11 +352,11 @@ define fixhms(a)
|
||||
quit "attempt to fix a non hms object";
|
||||
}
|
||||
|
||||
/* force minutes to be intergral */
|
||||
/* force minutes to be integral */
|
||||
a.min += frac(a.hour) * 60;
|
||||
a.hour = int(a.hour);
|
||||
|
||||
/* force hours to be intergral */
|
||||
/* force hours to be integral */
|
||||
a.sec += frac(a.min) * 60;
|
||||
a.min = int(a.min);
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* intfile - integer to file and file to integer conversion
|
||||
*
|
||||
* Copyright (C) 2001 Landon Curt Noll
|
||||
* Copyright (C) 2001,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -27,20 +27,20 @@
|
||||
|
||||
/*
|
||||
* NOTE: Because leading HALF values are trimmed from integer, a file
|
||||
* that begins with lots of 0 bits (in the case of big endian)
|
||||
* or that ends with lots of 0 bits (in the case of little endian)
|
||||
* that begins with lots of 0 bits (in the case of big Endian)
|
||||
* or that ends with lots of 0 bits (in the case of little Endian)
|
||||
* will be changed when the subsequent integer is written back.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* file2be - convert a file into an big endian integer
|
||||
* file2be - convert a file into an big Endian integer
|
||||
*
|
||||
* given:
|
||||
* filename filename to read
|
||||
*
|
||||
* returns:
|
||||
* integer read from its contents on big endian order
|
||||
* integer read from its contents on big Endian order
|
||||
*/
|
||||
define file2be(filename)
|
||||
{
|
||||
@@ -75,13 +75,13 @@ define file2be(filename)
|
||||
|
||||
|
||||
/*
|
||||
* file2le - convert a file into an little endian integer
|
||||
* file2le - convert a file into an little Endian integer
|
||||
*
|
||||
* given:
|
||||
* filename filename to read
|
||||
*
|
||||
* returns:
|
||||
* integer read from its contents on little endian order
|
||||
* integer read from its contents on little Endian order
|
||||
*/
|
||||
define file2le(filename)
|
||||
{
|
||||
@@ -118,7 +118,7 @@ define file2le(filename)
|
||||
|
||||
|
||||
/*
|
||||
* be2file - convert a big endian integer into a file
|
||||
* be2file - convert a big Endian integer into a file
|
||||
*
|
||||
* given:
|
||||
* v integer to write to the file
|
||||
@@ -168,7 +168,7 @@ define be2file(v, filename)
|
||||
|
||||
|
||||
/*
|
||||
* le2file - convert a little endian integer into a file
|
||||
* le2file - convert a little Endian integer into a file
|
||||
*
|
||||
* given:
|
||||
* v integer to write to the file
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* intnum - implementation of tanhsinh- and Gauss-Legendre quadrature
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
* Copyright (C) 2013,2021 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -295,7 +295,7 @@ define quadts(a, b, points)
|
||||
* as the number of equally spaced intervals on a straight line
|
||||
* connecting a and b. Computing the segments here is a bit
|
||||
* more complicated but not much, it should have been taught in
|
||||
* highschool.
|
||||
* high school.
|
||||
* Other contours by way of a list of points */
|
||||
slope = (im(b) - im(a)) / (re(b) - re(a));
|
||||
C = (im(a) + slope) * re(a);
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* lambertw - Lambert's W-function
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
* Copyright (C) 2013,2021 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -83,7 +83,7 @@ define __CZ__lambertw_m1(z,eps){
|
||||
or by using the function lambertw_series_print() after running
|
||||
lambertw_series(z,eps,branch,terms) at least once with the wanted number of
|
||||
terms and z = 1 (which might throw an error because the series will not
|
||||
converge in anybodies lifetime for something that far from the branchpoint).
|
||||
converge in anybodies lifetime for something that far from the branch point).
|
||||
|
||||
|
||||
*/
|
||||
@@ -105,7 +105,7 @@ define lambertw_series_print(){
|
||||
}
|
||||
|
||||
/*
|
||||
The series is fast but only if _very_ close to the branchpoint
|
||||
The series is fast but only if _very_ close to the branch point
|
||||
The exact branch must be given explicitly, e.g.:
|
||||
|
||||
; lambertw(-exp(-1)+.001)-lambertw_series(-exp(-1)+.001,epsilon()*1e-10,0)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* linear - perform a simple two point 2D linear interpolation
|
||||
*
|
||||
* Copyright (C) 2005-2007 Landon Curt Noll
|
||||
* Copyright (C) 2005-2007,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -29,7 +29,7 @@
|
||||
*
|
||||
* given:
|
||||
* x0, y0 first known point on the line
|
||||
* x1, y1 second knonw point on the line
|
||||
* x1, y1 second known point on the line
|
||||
* x a given point to interpolate on
|
||||
*
|
||||
* returns:
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* lucas - perform a Lucas primality test on h*2^n-1
|
||||
*
|
||||
* Copyright (C) 1999,2017,2018 Landon Curt Noll
|
||||
* Copyright (C) 1999,2017,2018,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -947,7 +947,7 @@ rodseth_xhn(x, h, n)
|
||||
*
|
||||
* Without Jacobi symbol value caching, it requires on average
|
||||
* 4.851377 Jacobi symbol evaluations. With Jacobi symbol value caching
|
||||
* cacheing, an averare of 4.348820 Jacobi symbol evaluations is needed.
|
||||
* cacheing, an average of 4.348820 Jacobi symbol evaluations is needed.
|
||||
*
|
||||
* Given this information, when odd h is a multiple of 3 we try, in order,
|
||||
* these odd values of X:
|
||||
@@ -961,7 +961,7 @@ rodseth_xhn(x, h, n)
|
||||
* jacobi(X-2, h*2^n-1) == 1
|
||||
* jacobi(X+2, h*2^n-1) == -1
|
||||
*
|
||||
* Less than 1 case out of 1000000 will not be satisifed by the above list.
|
||||
* Less than 1 case out of 1000000 will not be satisfied by the above list.
|
||||
* If no value in that list works, we start simple search starting with X = 167
|
||||
* and incrementing by 2 until a value of X is found.
|
||||
*
|
||||
@@ -1049,7 +1049,7 @@ next_x = 167; /* must be 2 more than the largest value in x_tbl[] */
|
||||
* else
|
||||
* v(1) = 4
|
||||
*
|
||||
* HOTE: The above "if then else" works only of h is not a multiple of 3.
|
||||
* NOTE: The above "if then else" works only of h is not a multiple of 3.
|
||||
*
|
||||
***
|
||||
*
|
||||
@@ -1234,10 +1234,10 @@ gen_v1(h, n)
|
||||
* jacobi(X-2, h*2^n-1) == 1 part 1
|
||||
* jacobi(X+2, h*2^n-1) == -1 part 2
|
||||
*
|
||||
* NOTE: If we wanted to be super optimial, we would cache
|
||||
* NOTE: If we wanted to be super optimal, we would cache
|
||||
* jacobi(X+2, h*2^n-1) that that when we increment X
|
||||
* to the next odd value, the now jacobi(X-2, h*2^n-1)
|
||||
* does not need to be re-evaluted.
|
||||
* does not need to be re-evaluated.
|
||||
*/
|
||||
testval = h*2^n-1;
|
||||
for (i=0; i < x_tbl_len; ++i) {
|
||||
@@ -1285,7 +1285,7 @@ gen_v1(h, n)
|
||||
/*
|
||||
* We are in that rare case (less than 1 in 1 000 000) where none of the
|
||||
* common X values satisfy Ref4 condition 1. We start a linear search
|
||||
* of odd vules at next_x from here on.
|
||||
* of odd values at next_x from here on.
|
||||
*/
|
||||
x = next_x;
|
||||
while (rodseth_xhn(x, h, n) != 1) {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* lucas_chk - test all primes of the form h*2^n-1, 1<=h<200 and n <= high_n
|
||||
*
|
||||
* Copyright (C) 1999 Landon Curt Noll
|
||||
* Copyright (C) 1999,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -303,7 +303,7 @@ read -once "lucas.cal";
|
||||
* [quiet] if given and != 0, then do not print individual test results
|
||||
*
|
||||
* returns:
|
||||
* 1 all is ok
|
||||
* 1 all is OK
|
||||
* 0 something went wrong
|
||||
*/
|
||||
define
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* mfactor - return the lowest factor of 2^n-1, for n > 0
|
||||
*
|
||||
* Copyright (C) 1999 Landon Curt Noll
|
||||
* Copyright (C) 1999,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -79,7 +79,7 @@
|
||||
* hindx = 0;
|
||||
* } while (test_factor < some_limit);
|
||||
*
|
||||
* The test, mfactor(67, 1, 10000) took on an 200 Mhz r4k (user CPU seconds):
|
||||
* The test, mfactor(67, 1, 10000) took on an 200 MHz r4k (user CPU seconds):
|
||||
*
|
||||
* 210.83 (prior to use of hset[])
|
||||
* 78.35 (hset[] for p_elim = 7)
|
||||
@@ -99,7 +99,7 @@
|
||||
* 57.78 (hset[] for p_elim = 17)
|
||||
* p_elim == 19 rejected because of memory size
|
||||
*
|
||||
* The p_elim == 17 overhead takes ~3 minutes on an 200 Mhz r4k CPU and
|
||||
* The p_elim == 17 overhead takes ~3 minutes on an 200 MHz r4k CPU and
|
||||
* requires about ~13 Megs of memory. The p_elim == 13 overhead
|
||||
* takes about 3 seconds and requires ~1.5 Megs of memory.
|
||||
*
|
||||
@@ -256,7 +256,7 @@ define mfactor(n, start_k, rept_loop, p_elim)
|
||||
return q;
|
||||
} else {
|
||||
/* report this loop */
|
||||
printf("at 2*%d*%d+1, cpu: %f\n",
|
||||
printf("at 2*%d*%d+1, CPU: %f\n",
|
||||
(q-1)/(2*n), n, usertime());
|
||||
fflush(files(1));
|
||||
loop = 0;
|
||||
@@ -269,14 +269,14 @@ define mfactor(n, start_k, rept_loop, p_elim)
|
||||
*/
|
||||
if (rept_loop <= ++loop) {
|
||||
/* report this loop */
|
||||
printf("at 2*%d*%d+1, cpu: %f\n",
|
||||
printf("at 2*%d*%d+1, CPU: %f\n",
|
||||
(q-1)/(2*n), n, usertime());
|
||||
fflush(files(1));
|
||||
loop = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* skip if divisable by a prime <= 449
|
||||
* skip if divisible by a prime <= 449
|
||||
*
|
||||
* The value 281 was determined by timing loops
|
||||
* which found that 281 was at or near the
|
||||
@@ -285,7 +285,7 @@ define mfactor(n, start_k, rept_loop, p_elim)
|
||||
* The addition of the do { ... } while (factor(q, 449)>1);
|
||||
* loop reduced the factoring loop time (36504 k values with
|
||||
* the hset[] initialization time removed) from 25.69 sec to
|
||||
* 15.62 sec of CPU time on a 200Mhz r4k.
|
||||
* 15.62 sec of CPU time on a 200MHz r4k.
|
||||
*/
|
||||
do {
|
||||
/*
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* natnumset - functions for sets of natural numbers not exceeding a fixed bound
|
||||
*
|
||||
* Copyright (C) 1999 Ernest Bowen
|
||||
* Copyright (C) 1999,2021 Ernest Bowen
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -76,7 +76,7 @@
|
||||
* A \ B = set difference, integers in A but not in B
|
||||
*
|
||||
* ~A = complement of A, integers not in A
|
||||
* #A = number ofintegers in A
|
||||
* #A = number of integers in A
|
||||
* !A = 1 or 0 according as A is empty or not empty
|
||||
* +A = sum of the members of A
|
||||
*
|
||||
@@ -100,7 +100,7 @@
|
||||
* A >= B = (B <= A)
|
||||
* A > B = (B < A)
|
||||
*
|
||||
* Expresssions may be formed from the above "arithmetic" operations in
|
||||
* Expressions may be formed from the above "arithmetic" operations in
|
||||
* the usual way, with parentheses for variations from the usual precedence
|
||||
* rules. For example
|
||||
*
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* pell - solve Pell's equation
|
||||
*
|
||||
* Copyright (C) 1999 David I. Bell
|
||||
* Copyright (C) 1999,2021 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
/*
|
||||
* Solve Pell's equation; Returns the solution X to: X^2 - D * Y^2 = 1.
|
||||
* Type the solution to pells equation for a particular D.
|
||||
* Type the solution to Pell's equation for a particular D.
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* poly - calculate with polynomials of one variable
|
||||
*
|
||||
* Copyright (C) 1999 Ernest Bowen
|
||||
* Copyright (C) 1999,2021 Ernest Bowen
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -35,7 +35,7 @@
|
||||
* variable has only one name. For some purposes, a name like
|
||||
* "sin(t)" or "(a + b)" or "\lambda" might be useful;
|
||||
* names like "*" or "-27" are legal but might give expressions
|
||||
* that are difficult to intepret.
|
||||
* that are difficult to interpret.
|
||||
*
|
||||
* Polynomial expressions may be constructed from numbers and the
|
||||
* independent variable and other polynomials by the algebraic
|
||||
@@ -43,7 +43,7 @@
|
||||
* The operations // and % are defined to have the quotient and
|
||||
* remainder meanings as usually defined for polynomials.
|
||||
*
|
||||
* When polynomials are assigned to idenfifiers, it is convenient to
|
||||
* When polynomials are assigned to identifiers, it is convenient to
|
||||
* think of the polynomials as values. For example, p = (x - 1)^2
|
||||
* assigns to p a polynomial value in the same way as q = (7 - 1)^2
|
||||
* would assign to q a number value. As with number expressions
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* prompt - eemonstration of some uses of prompt() and eval()
|
||||
* prompt - demonstration of some uses of prompt() and eval()
|
||||
*
|
||||
* Copyright (C) 1999 Ernest Bowen
|
||||
* Copyright (C) 1999,2021 Ernest Bowen
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -61,9 +61,9 @@
|
||||
* nothing to sum. The last line returns the value 3, i.e. the last
|
||||
* non-null value found for the expressions separated by semicolons,
|
||||
* so sum will be increased by 3 after the "print sum^2;" command
|
||||
* is executed. xxx The terminating semicolon is essential in the
|
||||
* is executed. XXX The terminating semicolon is essential in the
|
||||
* last two lines. A command like eval("print 7;") is acceptable to
|
||||
* calc but eval("print 7") causes an exit from calc. xxx)
|
||||
* calc but eval("print 7") causes an exit from calc. XXX)
|
||||
*
|
||||
* If the value returned is not a number (e.g. the name of a list or matrix,
|
||||
* or if the string has syntax errors as in "2 + ", in which case the
|
||||
@@ -75,7 +75,7 @@
|
||||
* "sin(x)", "x^2 + 3*x", "exp(x, 1e-5)".
|
||||
*
|
||||
* Values of the function so defined are returned for values of x
|
||||
* entered in reponse to the ? prompt. Operation is terminated by
|
||||
* entered in response to the ? prompt. Operation is terminated by
|
||||
* entering "end", "exit" or "quit".
|
||||
*/
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* quat - alculate using quaternions of the form: a + bi + cj + dk
|
||||
* quat - calculate using quaternions of the form: a + bi + cj + dk
|
||||
*
|
||||
* Copyright (C) 1999 David I. Bell
|
||||
* Copyright (C) 1999,2021 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* randmprime - generate a random prime of the form h*2^n-1
|
||||
*
|
||||
* Copyright (C) 1999 Landon Curt Noll
|
||||
* Copyright (C) 1999,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -45,9 +45,9 @@ randmprime(bits, seed, dbg)
|
||||
local n; /* n as in h*2^n-1 */
|
||||
local h; /* h as in h*2^n-1 */
|
||||
local plush; /* value added to h since the beginning */
|
||||
local init; /* initial cpu time */
|
||||
local start; /* cpu time before last test */
|
||||
local stop; /* cpu time afte last test */
|
||||
local init; /* initial CPU time */
|
||||
local start; /* CPU time before last test */
|
||||
local stop; /* CPU time after last test */
|
||||
local tmp; /* just a tmp place holder value */
|
||||
local ret; /* h*2^n-1 that is prime */
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* regress - calc regression and correctness test suite
|
||||
*
|
||||
* Copyright (C) 1999-2017 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2017,2021 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -43,7 +43,7 @@ global prob; /* libregress.cal problem counter */
|
||||
prob = 0; /* clear problem counter */
|
||||
|
||||
errcount(0),; /* clear error count */
|
||||
errmax(-1),; /* prevent errcount from abouting */
|
||||
errmax(-1),; /* prevent errcount from aborting */
|
||||
|
||||
global ecnt; /* expected value of errcount() */
|
||||
ecnt = 0; /* clear expected errcount() value */
|
||||
@@ -356,8 +356,18 @@ define test_arithmetic()
|
||||
vrfy(-16^-2 == -1/256, '447: -16^-2 == -1/256');
|
||||
vrfy(-7^2 == -49, '448: -7^2 == -49');
|
||||
vrfy(-3! == -6, '449: -3! == -6');
|
||||
vrfy(0^(0-0) == 1, '450: 0^(0-0) == 1');
|
||||
vrfy(0^(2-2) == 1, '451: 0^(2-2) == 1');
|
||||
vrfy(2^0 == 1, '452: 2^0 == 1');
|
||||
vrfy(2^(0-0) == 1, '453: 2^(0-0) == 1');
|
||||
vrfy(2^(2-2) == 1, '454: 2^(2-2) == 1');
|
||||
vrfy((2^23209-1)^0 == 1, '455: (2^23209-1)^0 == 1');
|
||||
vrfy((2^23209-1)^(0-0) == 1, '456: (2^23209-1)^(0-0) == 1');
|
||||
vrfy((2^23209-1)^(2-2) == 1, '457: (2^23209-1)^(2-2) == 1');
|
||||
vrfy((2^23209-1)^((2^23209-1)-(2^23209-1)) == 1,
|
||||
'458: (2^23209-1)^((2^23209-1)-(2^23209-1)) == 1');
|
||||
|
||||
print '450: Ending test_arithmetic';
|
||||
print '459: Ending test_arithmetic';
|
||||
}
|
||||
print '009: parsed test_arithmetic()';
|
||||
|
||||
@@ -453,7 +463,7 @@ define test_config()
|
||||
'539: config("more", ">> ") == ";; "');
|
||||
vrfy(config("all") == oldcfg, '540: config("all") == oldcfg');
|
||||
|
||||
/* restore the configation at the start of this function */
|
||||
/* restore the configuration at the start of this function */
|
||||
vrfy(config("all",callcfg) == oldcfg,
|
||||
'541: config("all",callcfg) == oldcfg');
|
||||
|
||||
@@ -3156,7 +3166,7 @@ print '047: parsed test_poly()';
|
||||
|
||||
|
||||
/*
|
||||
* test_det - more determinent testing
|
||||
* test_det - more determinant testing
|
||||
*/
|
||||
read -once "test3300";
|
||||
print '048: read -once test3300';
|
||||
@@ -3473,7 +3483,7 @@ print '065: parsed test_param()';
|
||||
|
||||
|
||||
/*
|
||||
* test_noarg - test missing argment functionality
|
||||
* test_noarg - test missing argument functionality
|
||||
*/
|
||||
define test_noarg()
|
||||
{
|
||||
@@ -5183,7 +5193,7 @@ define test_size()
|
||||
'5715: sizeof(17^139 + 674)*2 == sizeof(q)');
|
||||
|
||||
/*
|
||||
* recipricals are the same size of their integer inverses
|
||||
* reciprocals are the same size of their integer inverses
|
||||
*/
|
||||
q = 1/13;
|
||||
print '5716: q = 1/13';
|
||||
@@ -5261,7 +5271,7 @@ define test_size()
|
||||
|
||||
/*
|
||||
* size of a matrix is the sum of the sizes of the elements
|
||||
* sizeof of a matrix is the sum of the sizeofs of the elements
|
||||
* sizeof of a matrix is the sum of the sizeof's of the elements
|
||||
*/
|
||||
mat m[] = {z,q,c};
|
||||
print '5752: mat m[] = {z,q,c}';
|
||||
@@ -5381,7 +5391,7 @@ define test_is()
|
||||
{
|
||||
local loc; /* unassigned local variable */
|
||||
local a; /* assoc */
|
||||
local ofd; /* open file desriptor */
|
||||
local ofd; /* open file descriptor */
|
||||
local cfd; /* closed file descriptor */
|
||||
local blk; /* unnamed block */
|
||||
local nblk; /* named block */
|
||||
@@ -5398,7 +5408,7 @@ define test_is()
|
||||
local object; /* object */
|
||||
local rand; /* rand seed */
|
||||
local random; /* random seed */
|
||||
local real; /* real non-intger value */
|
||||
local real; /* real non-integer value */
|
||||
local prime; /* odd prime */
|
||||
local square; /* square of an odd prime */
|
||||
local string; /* string */
|
||||
@@ -7482,7 +7492,7 @@ print '190: parsed test_somenew()';
|
||||
|
||||
|
||||
/*
|
||||
* test_exponentiation - test new exponentiation functionaltiy
|
||||
* test_exponentiation - test new exponentiation functionality
|
||||
*/
|
||||
define test_exponentiation()
|
||||
{
|
||||
@@ -7573,7 +7583,7 @@ define test_quit()
|
||||
quit;
|
||||
prob('quit did not end the test_quit() function');
|
||||
|
||||
/* 8400 serise continued after return, do not print end here */
|
||||
/* 8400 series continued after return, do not print end here */
|
||||
}
|
||||
print '191: parsed test_quit()';
|
||||
|
||||
@@ -7874,7 +7884,7 @@ print '8406: Ending test_quit';
|
||||
|
||||
|
||||
/*
|
||||
* test_divmod - psuedo-random tests on the // and % with various rounding modes
|
||||
* test_divmod - pseudo-random tests on the // and % with various rounding modes
|
||||
*/
|
||||
print;
|
||||
print '8500: Starting test of divmod'
|
||||
@@ -7900,7 +7910,7 @@ vrfy(config("redecl_warn",0), '8651: config("redecl_warn",0)');
|
||||
vrfy(config("dupvar_warn",0), '8652: config("dupvar_warn",0)');
|
||||
vrfy(u_glob == 6, '8653: u_glob == 6');
|
||||
global u_glob = 555;
|
||||
print '8654: reclare u_glob';
|
||||
print '8654: declare u_glob';
|
||||
vrfy(u_glob == 555, '8655: u_glob == 555');
|
||||
define func_8650(u_glob) { local u_glob; return u_glob; }
|
||||
print '8656: u_glob as both local and parameter';
|
||||
@@ -7928,7 +7938,7 @@ vrfy(dotest("set8700.line", 8703) == 0,
|
||||
|
||||
|
||||
/*
|
||||
* new exponentiation functionaltiy
|
||||
* new exponentiation functionality
|
||||
*/
|
||||
print;
|
||||
return test_exponentiation();
|
||||
@@ -8074,7 +8084,7 @@ return test_functions2();
|
||||
*
|
||||
* 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.cal - already read by this file
|
||||
* lucas_chk.cal - already read by this file
|
||||
* regress.cal - this file
|
||||
* surd.cal - already read by this file
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* specialfunctions - special functions (e.g.: gamma, zeta, psi)
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
* Copyright (C) 2013,2021 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify
|
||||
* it under the terms of the version 2.1 of the GNU Lesser General Public
|
||||
@@ -442,8 +442,8 @@ define lngamma(z)
|
||||
if (tmp2 < tmp) {
|
||||
return
|
||||
newerror(strcat
|
||||
("lngamma(1): something happend that ",
|
||||
"should not have happend"));
|
||||
("lngamma(1): something happened ",
|
||||
"that shouldn't have happened"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -519,8 +519,8 @@ define lngamma(z)
|
||||
if (tmp2 < tmp) {
|
||||
return
|
||||
newerror(strcat
|
||||
("lngamma(1): something happend ",
|
||||
"that should not have happend"));
|
||||
("lngamma(1): something happened ",
|
||||
"that should not have happened"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -576,8 +576,8 @@ define lngamma(z)
|
||||
if (tmp2 < tmp) {
|
||||
return
|
||||
newerror(strcat
|
||||
("lngamma(1): something happend ",
|
||||
"that should not have happend"));
|
||||
("lngamma(1): something happened ",
|
||||
"that should not have happened"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1047,7 +1047,7 @@ define __CZ__ibeta_cf_var_dm(a, b, z, max)
|
||||
}
|
||||
}
|
||||
if (m > max) {
|
||||
return newerror("ibeta: continous fraction does not converge");
|
||||
return newerror("ibeta: continuous fraction does not converge");
|
||||
}
|
||||
return f;
|
||||
}
|
||||
@@ -1290,7 +1290,7 @@ define __CZ__erfinvapprox(x)
|
||||
- (2 / (pi() * a) + (ln(1 - x ^ 2)) / 2));
|
||||
}
|
||||
|
||||
/* complementary inverse errror function, faster at about x < 1-.91
|
||||
/* complementary inverse error function, faster at about x < 1-.91
|
||||
Henry E. Fettis. "A stable algorithm for computing the inverse error function
|
||||
in the 'tail-end' region" Math. Comp., 28:585-587, 1974.
|
||||
*/
|
||||
@@ -1324,7 +1324,7 @@ define __CZ__fettiscf(y, n)
|
||||
return t / (1 + r);
|
||||
}
|
||||
|
||||
/* inverse errror function, faster at about x<=.91*/
|
||||
/* inverse error function, faster at about x<=.91*/
|
||||
define __CZ__inverfbin(x)
|
||||
{
|
||||
local places approx flow fhigh eps high low mid fmid epsilon;
|
||||
@@ -1370,7 +1370,7 @@ define erfinv(x)
|
||||
x = -x;
|
||||
flag = 1;
|
||||
}
|
||||
/* No need for full pecision */
|
||||
/* No need for full precision */
|
||||
eps = epsilon(1e-20);
|
||||
if (eps >= 1e-40) {
|
||||
/* Winitzki, Sergei (6 February 2008). "A handy approximation for the
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* statistics - Some assorted statistics functions.
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
* Copyright (C) 2013,2021 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -106,7 +106,7 @@ define invbetainc_slow(x,a,b){
|
||||
GW Cran, KJ Martin, GE Thomas,
|
||||
Remark AS R19 and Algorithm AS 109:
|
||||
A Remark on Algorithms AS 63: The Incomplete Beta Integral
|
||||
and AS 64: Inverse of the Incomplete Beta Integeral,
|
||||
and AS 64: Inverse of the Incomplete Beta integral,
|
||||
Applied Statistics,
|
||||
Volume 26, Number 1, 1977, pages 111-114.
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* test2600 - 2600 series of the regress.cal test suite
|
||||
*
|
||||
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||
* Copyright (C) 1999,2021 Ernest Bowen and Landon Curt Noll
|
||||
*
|
||||
* Primary author: Ernest Bowen
|
||||
*
|
||||
@@ -50,7 +50,7 @@
|
||||
* of b in power(a, b, eps) is large, the computation required for
|
||||
* a test may be very heavy.
|
||||
*
|
||||
* Test funcations are called as:
|
||||
* Test functions are called as:
|
||||
*
|
||||
* testabc(str, ..., verbose)
|
||||
*
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* test2700 - 2700 series of the regress.cal test suite
|
||||
*
|
||||
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||
* Copyright (C) 1999,2021 Ernest Bowen and Landon Curt Noll
|
||||
*
|
||||
* Primary author: Ernest Bowen
|
||||
*
|
||||
@@ -84,7 +84,7 @@ define mkfrac() = rand(2) ? mkposfrac() : -mkposfrac();
|
||||
define mksquarereal() = mknonnegreal()^2;
|
||||
|
||||
/*
|
||||
* We might be able to do better than the following. For nonsquare
|
||||
* We might be able to do better than the following. For non-square
|
||||
* positive integer less than 1e6, could use:
|
||||
* x = rand(1, 1000);
|
||||
* return rand(x^2 + 1, (x + 1)^2);
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* test5100 - 5100 series of the regress.cal test suite
|
||||
*
|
||||
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||
* Copyright (C) 1999,2021 Ernest Bowen and Landon Curt Noll
|
||||
*
|
||||
* Primary author: Ernest Bowen
|
||||
*
|
||||
@@ -35,7 +35,7 @@ defaultverbose = 1; /* default verbose value */
|
||||
* with zero value, when the definition is read.
|
||||
*
|
||||
* The variable a5100 is initialized with the value x if and when this
|
||||
* function is first called with a positive even x. The varable b5100
|
||||
* function is first called with a positive even x. The variable b5100
|
||||
* is similarly initialized if and when this function is first called positive
|
||||
* odd x.
|
||||
*
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* test8500 - 8500 series of the regress.cal test suite
|
||||
*
|
||||
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||
* Copyright (C) 1999,2021 Ernest Bowen and Landon Curt Noll
|
||||
*
|
||||
* Primary author: Ernest Bowen
|
||||
*
|
||||
@@ -169,7 +169,7 @@ define divmod_8500(N = 10, M1 = 2^128, M2 = 2^64, testnum = 0)
|
||||
}
|
||||
|
||||
/*
|
||||
* seelect one of the 32 rounding modes at random
|
||||
* select one of the 32 rounding modes at random
|
||||
*/
|
||||
rnd = rand(32);
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* test8900 - 8900 series of the regress.cal test suite
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
* Copyright (C) 2013,2021 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -26,7 +26,7 @@ static __CZ__eps = 1e-20;
|
||||
|
||||
|
||||
/*
|
||||
* load once, the calc resource functions contribued by Christoph Zurnieden
|
||||
* load once, the calc resource functions contributed by Christoph Zurnieden
|
||||
*/
|
||||
read -once bernpoly.cal;
|
||||
read -once brentsolve.cal;
|
||||
@@ -45,7 +45,7 @@ read -once intnum.cal;
|
||||
/*
|
||||
* tests of correctness of the functions implemented by the above listed
|
||||
* author. All values tested against have been computed with at least two
|
||||
* independant algorithms where possible (indicated if not).
|
||||
* independent algorithms where possible (indicated if not).
|
||||
*/
|
||||
define t01()
|
||||
{
|
||||
@@ -1649,7 +1649,7 @@ define t03()
|
||||
/* test 04 tests polygamma(m,z) for the following values (m==0 gets computed
|
||||
* by psi()).
|
||||
* Values tested against were computed with Mathematica(TM) only
|
||||
* (z in the left complex halfplane does not get computed yet)
|
||||
* (z in the left complex half plane does not get computed yet)
|
||||
*/
|
||||
define t04()
|
||||
{
|
||||
@@ -2057,7 +2057,12 @@ define t010()
|
||||
epsilon(eps);
|
||||
return 5;
|
||||
}
|
||||
if ((stirling2(10, 5) - (42525)) != 0) {
|
||||
/*
|
||||
* Once, when an expression such as 0^(6-6) returned 0,
|
||||
* then stirling2(10, 5) == 42525. However when we made9
|
||||
* 0^(6-6) == 0^0 == 1, then stirling2(10, 5) == 5102999/120.
|
||||
*/
|
||||
if ((stirling2(10, 5) - (5102999/120)) != 0) {
|
||||
epsilon(eps);
|
||||
return 6;
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* toomcook - implementation of Toom-Cook(3,4) multiplication algorithm
|
||||
*
|
||||
* Copyright (C) 2013 Christoph Zurnieden
|
||||
* Copyright (C) 2013,2021 Christoph Zurnieden
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -320,16 +320,16 @@ define toomcook4square(a){
|
||||
}
|
||||
|
||||
/*
|
||||
TODO: Implement the asymmetric variations
|
||||
*/
|
||||
* TODO: Implement the asymmetric variations
|
||||
*/
|
||||
|
||||
/*
|
||||
produce_long_random_number(n) returns large pseudorandom numbers. Really large
|
||||
numbers, e.g.:
|
||||
produce_long_random_number(16)
|
||||
is ca 4,128,561 bits (ca 1,242,821 dec. digits) large. Exact length is not
|
||||
predeterminable because of the chaotic output of the function random().
|
||||
*/
|
||||
* produce_long_random_number(n) returns large pseudo-random numbers.
|
||||
* Really large numbers, e.g.:
|
||||
* produce_long_random_number(16)
|
||||
* is ca 4,128,561 bits (ca 1,242,821 dec. digits) large. Exact length is not
|
||||
* pre-determinable because of the chaotic output of the function random().
|
||||
*/
|
||||
define __CZ__produce_long_random_number(n)
|
||||
{
|
||||
local ret k;
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* unixfrac - represent a fraction as a sum of distince unit fractions
|
||||
* unixfrac - represent a fraction as a sum of distance unit fractions
|
||||
*
|
||||
* Copyright (C) 1999 David I. Bell
|
||||
* Copyright (C) 1999,2021 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -34,7 +34,7 @@ define hurwitzzeta(s,a){
|
||||
/*
|
||||
According to Linas Vepstas' "An efficient algorithm for accelerating
|
||||
the convergence of oscillatory series, useful for computing the
|
||||
polylogarithm and Hurwitz zeta functions" the Euler-Maclaurin series
|
||||
poly-logarithm and Hurwitz zeta functions" the Euler-Maclaurin series
|
||||
is the fastest in most cases.
|
||||
|
||||
With a lot of help of the PARI/GP implementation by Prof. Henri Cohen,
|
||||
@@ -78,7 +78,7 @@ define hurwitzzeta(s,a){
|
||||
print "limit = " limit;
|
||||
print "prec = " precision;
|
||||
}
|
||||
/* Full precison plus 5 digits angstzuschlag*/
|
||||
/* Full precision plus 5 digits angstzuschlag*/
|
||||
epsilon( (10^(-precision)) * 1e-5);
|
||||
tmp3=(a+limit_function+0.)^(-s);
|
||||
sum3 = tmp3/2;
|
||||
|
40
calc.c
40
calc.c
@@ -1,7 +1,8 @@
|
||||
/*
|
||||
* calc - arbitrary precision calculator
|
||||
*
|
||||
* Copyright (C) 1999-2013 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2013,2021 David I. Bell, Landon Curt Noll
|
||||
* and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -25,7 +26,6 @@
|
||||
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
|
||||
@@ -65,6 +65,7 @@
|
||||
#include "lib_calc.h"
|
||||
#include "args.h"
|
||||
#include "zmath.h"
|
||||
#include "strl.h"
|
||||
|
||||
#include "have_unistd.h"
|
||||
#if defined(HAVE_UNISTD_H)
|
||||
@@ -84,6 +85,9 @@
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* S_FUNC definitions and functions
|
||||
*/
|
||||
@@ -372,14 +376,20 @@ main(int argc, char **argv)
|
||||
havearg = TRUE;
|
||||
if (cmdlen > 0)
|
||||
cmdbuf[cmdlen++] = ' ';
|
||||
strcpy(cmdbuf + cmdlen, "read ");
|
||||
cmdlen += 5;
|
||||
if (strncmp(cp, "-once", 5) == 0 &&
|
||||
(cp[5] == '\0' || cp[5] == ' ')) {
|
||||
cp += 5;
|
||||
strlcpy(cmdbuf + cmdlen, "read ",
|
||||
sizeof("read "));
|
||||
cmdlen += sizeof("read ")-1;
|
||||
cmdbuf[cmdlen] = '\0';
|
||||
if (strncmp(cp, "-once",
|
||||
sizeof("-once")) == 0 &&
|
||||
(cp[sizeof("-once")-1] == '\0' ||
|
||||
cp[sizeof("-once")-1] == ' ')) {
|
||||
cp += sizeof("-once")-1;
|
||||
haveendstr = (*cp == '\0');
|
||||
strcpy(cmdbuf+cmdlen, "-once ");
|
||||
cmdlen += 6;
|
||||
strlcpy(cmdbuf+cmdlen, "-once ",
|
||||
sizeof("-once "));
|
||||
cmdlen += sizeof("-once ")-1;
|
||||
cmdbuf[cmdlen] = '\0';
|
||||
if (nextcp(&cp, &index, argc,
|
||||
argv, haveendstr)) {
|
||||
fprintf(stderr, "-f -once"
|
||||
@@ -403,9 +413,9 @@ main(int argc, char **argv)
|
||||
" long");
|
||||
exit(18);
|
||||
}
|
||||
/* XXX What if *cp = '\''? */
|
||||
/* XXX - what if *cp = '\''? */
|
||||
*bp++ = '\'';
|
||||
strncpy(bp, cp, len+1);
|
||||
strlcpy(bp, cp, len+1);
|
||||
bp += len;
|
||||
*bp++ = '\'';
|
||||
cp += len;
|
||||
@@ -427,6 +437,7 @@ main(int argc, char **argv)
|
||||
if (*cp == ';')
|
||||
cp++;
|
||||
*bp++ = ';';
|
||||
*bp = '\0';
|
||||
cmdlen++;
|
||||
s_flag = TRUE; /* -f implies -s */
|
||||
break;
|
||||
@@ -449,7 +460,7 @@ main(int argc, char **argv)
|
||||
"\t[-O] [-p] [-q] [-s] [-u] [-v] "
|
||||
"[--] [calc_cmd ...]\n"
|
||||
"usage: %s ... -f filename\n"
|
||||
"1st cscript line: #/path/to/calc ... -f\n",
|
||||
"1st cscript line: #/path/to/calc ... -s -f\n",
|
||||
program, program);
|
||||
exit(20);
|
||||
}
|
||||
@@ -479,7 +490,8 @@ main(int argc, char **argv)
|
||||
program);
|
||||
exit(21);
|
||||
}
|
||||
strncpy(cmdbuf + cmdlen, cp, cplen+1);
|
||||
strlcpy(cmdbuf + cmdlen, cp, cplen+1);
|
||||
cmdbuf[newcmdlen] = '\0';
|
||||
cmdlen = newcmdlen;
|
||||
index++;
|
||||
if (index < maxindex)
|
||||
@@ -746,7 +758,7 @@ main(int argc, char **argv)
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
S_FUNC void
|
||||
intint(int UNUSED arg)
|
||||
intint(int UNUSED(arg))
|
||||
{
|
||||
(void) signal(SIGINT, intint);
|
||||
if (inputwait || (++abortlevel >= ABORT_NOW)) {
|
||||
|
9
calc.h
9
calc.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* calc - definitions for calculator program
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014 David I. Bell
|
||||
* Copyright (C) 1999-2007,2014,2021 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -48,6 +48,9 @@
|
||||
#define HOME "HOME" /* environment variable for home dir */
|
||||
#define PAGER "PAGER" /* environment variable for help */
|
||||
#define SHELL "SHELL" /* environment variable for shell */
|
||||
#define CALCHISTFILE "CALCHISTFILE" /* history file environment variable */
|
||||
#define CALCHELP "CALCHELP" /* help directory env variable */
|
||||
#define CALCCUSTOMHELP "CALCCUSTOMHELP"/* custom help directory env variable */
|
||||
#define DEFAULTCALCBINDINGS "bindings" /* default calc bindings file */
|
||||
#define DEFAULTCALCHELP "help" /* help file that -h prints */
|
||||
#define DEFAULTSHELL "sh" /* default shell to use */
|
||||
@@ -229,8 +232,8 @@ EXTERN int no_env; /* TRUE (-e) => ignore env vars on startup */
|
||||
EXTERN long errmax; /* if >= 0, error when errcount exceeds errmax */
|
||||
EXTERN int use_old_std; /* TRUE (-O) => use classic configuration */
|
||||
|
||||
EXTERN int allow_read; /* FALSE => dont open any files for reading */
|
||||
EXTERN int allow_write; /* FALSE => dont open any files for writing */
|
||||
EXTERN int allow_read; /* FALSE => don't open any files for reading */
|
||||
EXTERN int allow_write; /* FALSE => don't open any files for writing */
|
||||
EXTERN int allow_exec; /* FALSE => may not execute any commands */
|
||||
|
||||
/*
|
||||
|
367
calc.man
367
calc.man
@@ -1,5 +1,5 @@
|
||||
.\"
|
||||
.\" Copyright (C) 1999-2007,2014,2018 Landon Curt Noll
|
||||
.\" Copyright (C) 1999-2007,2014,2018,2021 Landon Curt Noll
|
||||
.\"
|
||||
.\" Calc is open software; you can redistribute it and/or modify it under
|
||||
.\" the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -24,7 +24,7 @@
|
||||
.\" calculator by David I. Bell
|
||||
.\" man page by Landon Noll
|
||||
.\"
|
||||
.TH calc 1 "^..^" "2007-02-06"
|
||||
.TH calc 1 "^..^" "Share and enjoy! :-)"
|
||||
.SH NAME
|
||||
calc \- arbitrary precision calculator
|
||||
.SH SYNOPSIS
|
||||
@@ -50,7 +50,7 @@ calc \- arbitrary precision calculator
|
||||
.RB [ [\-\-]\ calc_cmd\ \&.\|.\|. ]
|
||||
.in -5n
|
||||
.sp
|
||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP
|
||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-s\fP \fB\-f\fP
|
||||
.SH DESCRIPTION
|
||||
\&
|
||||
.br
|
||||
@@ -219,24 +219,29 @@ The getenv() builtin will still return values, however.
|
||||
|
||||
.TP
|
||||
.B \-f
|
||||
This flag is normally only with calc shell scripts.
|
||||
.sp 1
|
||||
This flag is required when using calc in
|
||||
.BR "shell script mode" .
|
||||
It must be at the end of the initial
|
||||
.B #!
|
||||
line of the script.
|
||||
line of the script
|
||||
and must be immediately preceded by the
|
||||
.B \-s
|
||||
flag.
|
||||
.sp 1
|
||||
This flag is normally only at the end of a calc shell script.
|
||||
If the first line of an executable file begins
|
||||
.B #!
|
||||
followed by the absolute pathname of the
|
||||
.B calc
|
||||
program and the flag
|
||||
program and if the first line ends with the two flags
|
||||
.B \-s
|
||||
.B \-f
|
||||
as in:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP
|
||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-s\fP \fB\-f\fP
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
@@ -270,7 +275,7 @@ on the command line:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
\fIcalc\fP\ [other_flags\ \&...] \fB\-f\fP filename
|
||||
\fIcalc\fP\ [other_flags\ \&...] \fB\-s\fP \fB\-f\fP filename
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
@@ -283,6 +288,16 @@ Use of
|
||||
.B \-f
|
||||
implies
|
||||
.BR \-s .
|
||||
However in a calc shell script,
|
||||
one must include
|
||||
.B \-f
|
||||
before
|
||||
.B \-s
|
||||
on the initial
|
||||
.B #!
|
||||
line.
|
||||
|
||||
.sp 1
|
||||
In addition,
|
||||
.B \-d
|
||||
and
|
||||
@@ -753,25 +768,28 @@ If the first line of an executable file begins
|
||||
.B #!
|
||||
followed by the absolute pathname of the
|
||||
.B calc
|
||||
program and the flag
|
||||
program and the first line ends with the two flags
|
||||
.B \-s
|
||||
.B \-f
|
||||
as in:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP
|
||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-s\fP \fB\-f\fP
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
the rest of the file will be processed in
|
||||
.BR "shell script mode" .
|
||||
Note that
|
||||
.B \-s
|
||||
.B \-f
|
||||
must at the end of the initial ``#!'' line.
|
||||
Any other optional
|
||||
.B "other_flags"
|
||||
must come before
|
||||
the
|
||||
.B \-s
|
||||
.BR \-f .
|
||||
.sp 1
|
||||
In
|
||||
@@ -803,18 +821,26 @@ the file
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
\fI#!${BINDIR}/calc\fP\ \&\fB\-q\fP \fB\-f\fP
|
||||
#
|
||||
# mersenne - an example of a calc \fBshell script file\fP
|
||||
\fI#!${BINDIR}/calc\fP\ \&\fB\-q\fP \&\fB\-s\fP \fB\-f\fP
|
||||
|
||||
/* setup */
|
||||
argc = argv();
|
||||
program = argv(0);
|
||||
stderr = files(2);
|
||||
|
||||
/* parse args */
|
||||
if (argv() != 1) {
|
||||
fprintf(files(2), "usage: %s exp\\n", config("program"));
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "usage: %s exp\n", program);
|
||||
abort "must give one exponent arg";
|
||||
}
|
||||
exp = eval(argv(1));
|
||||
if (!isint(exp) || exp < 0) {
|
||||
fprintf(stderr, "%s: exp must be non-negative integer\n", program);
|
||||
abort "must give one exponent arg";
|
||||
}
|
||||
|
||||
/* print the mersenne number */
|
||||
print "2^": argv(0) : "-1 =", 2^eval(argv(0))-1;
|
||||
print "2^": exp : "-1 =", 2^exp-1;
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
@@ -844,9 +870,9 @@ will print:
|
||||
.sp 1
|
||||
Note that because
|
||||
.B \-s
|
||||
is assumed in
|
||||
is required in
|
||||
.B "shell script mode"
|
||||
and non-dashed args are made available as
|
||||
non-dashed args are made available as
|
||||
strings via the
|
||||
.BR argv ()
|
||||
builtin function.
|
||||
@@ -854,16 +880,16 @@ Therefore:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
2^eval(argv(0))-1
|
||||
2^eval(argv(1))-1
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
will print the decimal value of 2^n-1
|
||||
but
|
||||
whereas
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
2^argv(0)-1
|
||||
2^argv(1)-1
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
@@ -1077,6 +1103,26 @@ Default value: binding
|
||||
This variable is not used if calc was compiled with GNU-readline support.
|
||||
In that case, the standard readline mechanisms (see readline(3)) are used.
|
||||
.sp
|
||||
.TP 5
|
||||
CALCHISTFILE
|
||||
Location of the calc history file.
|
||||
.sp
|
||||
Default value: ~/.calc_history
|
||||
.sp
|
||||
This variable is not used if calc was compiled with GNU-readline support.
|
||||
.sp
|
||||
.TP 5
|
||||
CALCHELP
|
||||
Location of the calc help directory.
|
||||
.sp
|
||||
Default value: ${HELPDIR}
|
||||
.sp
|
||||
.TP 5
|
||||
CALCCUSTOMHELP
|
||||
Location of the calc custom help directory.
|
||||
.sp
|
||||
Default value: ${CUSTOMHELPDIR}
|
||||
.sp
|
||||
.SH CREDIT
|
||||
\&
|
||||
.br
|
||||
@@ -1086,7 +1132,7 @@ was written by David I. Bell.
|
||||
.sp
|
||||
The
|
||||
.B calc
|
||||
primary mirror, calc mailing list and calc bug report
|
||||
primary mirror, and calc bug report
|
||||
processing is performed by Landon Curt Noll.
|
||||
.sp
|
||||
Landon Curt Noll maintains the master reference source, performs
|
||||
@@ -1165,76 +1211,71 @@ This man page is:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.nf
|
||||
Copyright (C) 1999 Landon Curt Noll
|
||||
Copyright (C) 1999-2021 Landon Curt Noll
|
||||
.fi
|
||||
.in -0.5i
|
||||
.sp
|
||||
and is covered under version 2.1 GNU Lesser General
|
||||
Public License.
|
||||
.sp
|
||||
.SH "CALC MAILING LIST / CALC UPDATES / ENHANCEMENTS"
|
||||
.SH "CALC QUESTIONS"
|
||||
\&
|
||||
.br
|
||||
If you have a simple general question about calc, send Email to:
|
||||
.sp
|
||||
To contribute comments, suggestions, enhancements
|
||||
and interesting
|
||||
.B calc
|
||||
resource files, and
|
||||
shell scripts please join the calc-tester
|
||||
low volume moderated calc mailing list.
|
||||
.in +0.5i
|
||||
calc-quest-mail at asthe dot com
|
||||
.sp
|
||||
To the calc-tester mailing list, visit the following URL:
|
||||
NOTE: Remove spaces and replace 'at' with @, and 'dot' with .
|
||||
.in -0.5i
|
||||
.sp
|
||||
.in +0.5i
|
||||
NOTE: Yes, the Email address uses 'asthe',
|
||||
while the web site uses 'isthe'.
|
||||
.in -0.5i
|
||||
.sp
|
||||
.B PLEASE
|
||||
put following the
|
||||
.B SPECIAL PHRASE
|
||||
somewhere in your Email Subject line:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.B calc question
|
||||
.in -0.5i
|
||||
.sp
|
||||
You may add additional words to your subject line.
|
||||
.sp
|
||||
.B IMPORTANT:
|
||||
If your Email doesn't contain the above phrase,
|
||||
then we
|
||||
.B WILL NOT SEE
|
||||
your Email.
|
||||
.sp
|
||||
.B PLEASE BE SURE
|
||||
you have that
|
||||
.B SPECIAL PHRASE
|
||||
somewhere in the subject line!
|
||||
.sp
|
||||
.B Suggestion:
|
||||
.sp
|
||||
.in +0.5i
|
||||
From time to time, the Email address and Subject
|
||||
.B SPECIAL PHRASE
|
||||
may change so verify you have the current info by visiting:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.nf
|
||||
https://www.listbox.com/subscribe/?list_id=239342
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-question.html
|
||||
.fi
|
||||
.in -0.5i
|
||||
.sp
|
||||
To help determine you are a human and not just a spam bot,
|
||||
you will be required to provide the following additional information:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.nf
|
||||
Your Name
|
||||
|
||||
Calc Version
|
||||
For example, the current version is: ${VERSION}
|
||||
|
||||
Operating System
|
||||
If you don't know your operating system, enter: unknown
|
||||
|
||||
The date 7 days ago
|
||||
Consult a calendar :-)
|
||||
.fi
|
||||
.in -0.5i
|
||||
.sp
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
or if you have problems with the above procedure, please
|
||||
send EMail to our special address:
|
||||
Please limit your questions to general questions about calc.
|
||||
We cannot go into great detail in our answers,
|
||||
nor can we do your homework, nor can
|
||||
we do much more than answer short general questions about calc.
|
||||
.sp
|
||||
.in +0.5i
|
||||
.nf
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
NOTE: Yes, the EMail address uses 'asthe',
|
||||
while the web site uses 'isthe'.
|
||||
.fi
|
||||
.in -0.5i
|
||||
.sp
|
||||
To be sure we see your EMail asking for help with your mailing list
|
||||
subscription, please use the following phase in your EMail Subject line
|
||||
your subject must contain the words:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.nf
|
||||
calc tester mailing list help
|
||||
.fi
|
||||
.in -0.5i
|
||||
.sp
|
||||
You may have additional words in your subject line.
|
||||
Please be patient as we cannot always respond to Email messages quickly.
|
||||
.sp
|
||||
.SH "BUG REPORTS / BUG FIXES"
|
||||
\&
|
||||
@@ -1244,28 +1285,51 @@ Send bug reports and bug fixes to:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.nf
|
||||
calc-bug-report at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
NOTE: Yes, the EMail address uses 'asthe',
|
||||
while the web site uses 'isthe'.
|
||||
calc-bugrept at asthe dot com
|
||||
.fi
|
||||
.sp
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
.sp
|
||||
NOTE: Yes, the Email address uses 'asthe',
|
||||
while the web site uses 'isthe'.
|
||||
.in -0.5i
|
||||
.sp
|
||||
Your subject must contain the words:
|
||||
You
|
||||
.B MUST
|
||||
use following
|
||||
.B SPECIAL PHRASE
|
||||
in your Email Subject line:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.B calc bug report
|
||||
.in -0.5i
|
||||
.sp
|
||||
You may add additional words to your subject line.
|
||||
.sp
|
||||
.B Suggestion:
|
||||
.sp
|
||||
.in +0.5i
|
||||
From time to time, the Email address and Subject
|
||||
.B SPECIAL PHRASE
|
||||
may change so verify you have the current info by visiting:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.nf
|
||||
calc bug report
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-bugrept.html
|
||||
.fi
|
||||
.in -0.5i
|
||||
.in -0.5i
|
||||
.sp
|
||||
You may have additional words in your subject line.
|
||||
.in
|
||||
However, you may find it more helpful to simply subscribe to the
|
||||
calc-tester mailing list (see above) and then to send your report
|
||||
to that mailing list as a wider set calc testers may be able to help you.
|
||||
.B IMPORTANT:
|
||||
If your Email doesn't contain the above phrase,
|
||||
then we
|
||||
.B WILL NOT SEE
|
||||
your Email.
|
||||
.sp
|
||||
.B PLEASE BE SURE
|
||||
you have that
|
||||
.B SPECIAL PHRASE
|
||||
somewhere in the subject line!
|
||||
.sp
|
||||
See the
|
||||
.I BUGS
|
||||
@@ -1281,6 +1345,135 @@ help bugs
|
||||
.sp
|
||||
for more information about bug reporting.
|
||||
.sp
|
||||
Please be patient as we cannot always respond to Email messages quickly.
|
||||
.sp
|
||||
.SH "CONTRIBUTING CODE TO CALC"
|
||||
\&
|
||||
.br
|
||||
.sp
|
||||
.I Calc
|
||||
is open source.
|
||||
Contributions of code are welcome.
|
||||
.sp
|
||||
We welcome and encourage you to send us:
|
||||
.sp
|
||||
.sp
|
||||
.in +0.5i
|
||||
.nf
|
||||
* calc resource files (cal/*.cal)
|
||||
* calc shell scripts (cscript/*.calc)
|
||||
* builtin functions that you have modified or written, i.e.:
|
||||
assocfunc.c comfunc.c func.c func.h
|
||||
listfunc.c matfunc.c qfunc.c zfunc.c
|
||||
* custom functions that you have modified or written (custom/*)
|
||||
* help files modified or written (help/*)
|
||||
* brief description of you added, fixed, improved in CHANGES
|
||||
* regression test cases (cal/regress.cal)
|
||||
* Makefile improvements (Makefile, */Makefile)
|
||||
* other source code modifications (*.c, *.h)
|
||||
* etc. (* */* :) )
|
||||
.fi
|
||||
.in -0.5i
|
||||
.sp
|
||||
If you add functionality to calc, please be sure to modify/patch/add
|
||||
Makefiles, help files, cal/regress.cal test code as well.
|
||||
Regression test cases are vital to maintaining calc's level
|
||||
of correctness and helps us avoid code bug regression.
|
||||
.sp
|
||||
In order to consider integrating your code, we need:
|
||||
.sp
|
||||
.nf
|
||||
.in +0.5i
|
||||
* calc version you are working with (please try use the latest version)
|
||||
* new help files or help file patches, if applicable (documentation)
|
||||
* proposed text for the CHANGES file (brief description of what it does)
|
||||
* regress.cal test patch as needed
|
||||
* your source code and/or source code changes (:-))
|
||||
.in -0.5i
|
||||
.fi
|
||||
.sp
|
||||
The best way to send us new code, if your changes are small, is
|
||||
via a patch (diff -c from the latest alpha code to your code).
|
||||
If your change is large, you should send entire files (either
|
||||
as a diff -c /dev/null your-file patch, or as a uuencoded and
|
||||
gziped (or compressed) tar file).
|
||||
.sp
|
||||
Please try to generate a patch against the most recent
|
||||
version of calc, and if you use GitHub, the top of the
|
||||
master branch:
|
||||
.sp
|
||||
.nf
|
||||
.in +0.5i
|
||||
https://github.com/lcn2/calc
|
||||
.in -0.5i
|
||||
.fi
|
||||
.sp
|
||||
.sp
|
||||
The best way contribute to calc bug is to generate calc
|
||||
GitHub pull request:
|
||||
.sp
|
||||
.nf
|
||||
.in +0.5i
|
||||
https://github.com/lcn2/calc/pulls
|
||||
.in -0.5i
|
||||
.fi
|
||||
.sp
|
||||
Your code needs to be contributed under either the 2.1 of the
|
||||
.B GNU Lesser General Public License (LGPL 2.1)
|
||||
or be in the public domain.
|
||||
.sp
|
||||
If you do not want to use calc GitHub, then send EMail to:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.nf
|
||||
calc-contrib at asthe dot com
|
||||
.fi
|
||||
.sp
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
.sp
|
||||
NOTE: Yes, the Email address uses 'asthe',
|
||||
while the web site uses 'isthe'.
|
||||
.in -0.5i
|
||||
.sp
|
||||
You
|
||||
.B MUST
|
||||
use following
|
||||
.B SPECIAL PHRASE
|
||||
in your Email Subject line:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.B calc contribution
|
||||
.in -0.5i
|
||||
.sp
|
||||
You may add additional words to your subject line.
|
||||
.sp
|
||||
.B Suggestion:
|
||||
.sp
|
||||
.in +0.5i
|
||||
From time to time, the Email address and Subject
|
||||
.B SPECIAL PHRASE
|
||||
may change so verify you have the current info by visiting:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.nf
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-contrib.html
|
||||
.fi
|
||||
.in -0.5i
|
||||
.in -0.5i
|
||||
.sp
|
||||
.B IMPORTANT:
|
||||
If your Email doesn't contain the above phrase,
|
||||
then we
|
||||
.B WILL NOT SEE
|
||||
your Email.
|
||||
.sp
|
||||
.B PLEASE BE SURE
|
||||
you have that
|
||||
.B SPECIAL PHRASE
|
||||
somewhere in the subject line!
|
||||
.sp
|
||||
Please be patient as we cannot always respond to Email messages quickly.
|
||||
.sp
|
||||
.SH "CALC WEB SITE"
|
||||
\&
|
||||
.br
|
||||
|
28
calc.spec.in
28
calc.spec.in
@@ -32,7 +32,7 @@
|
||||
Summary: Arbitrary precision calculator.
|
||||
Name: calc
|
||||
Version: <<<PROJECT_VERSION>>>
|
||||
Release: 12
|
||||
Release: 13
|
||||
License: LGPL
|
||||
Group: Applications/Engineering
|
||||
Source: http://www.isthe.com/chongo/src/calc/%{name}-%{version}.tar.bz2
|
||||
@@ -76,48 +76,48 @@ For the latest calc release, see the project home page:
|
||||
|
||||
%build
|
||||
echo '-=- calc.spec beginning make clobber -=-'
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} \
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} ARCH_CFLAGS= \
|
||||
CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc \
|
||||
MANDIR=%{_mandir}/man1 EXT= V=@ clobber
|
||||
echo '-=- calc.spec ending make clobber -=-'
|
||||
echo '-=- calc.spec beginning make calc-static-only -=-'
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} \
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} ARCH_CFLAGS= \
|
||||
CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc \
|
||||
MANDIR=%{_mandir}/man1 EXT= V=@ calc-static-only BLD_TYPE=calc-static-only
|
||||
echo '-=- calc.spec ending make calc-static-only -=-'
|
||||
echo '-=- calc.spec beginning make rpm-hide-static -=-'
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} \
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} ARCH_CFLAGS= \
|
||||
CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc \
|
||||
MANDIR=%{_mandir}/man1 EXT= V=@ rpm-hide-static
|
||||
echo '-=- calc.spec ending make rpm-hide-static -=-'
|
||||
echo '-=- calc.spec beginning make clobber (again) -=-'
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} \
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} ARCH_CFLAGS= \
|
||||
CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc \
|
||||
MANDIR=%{_mandir}/man1 EXT= V=@ clobber
|
||||
echo '-=- calc.spec ending make clobber (again) -=-'
|
||||
echo '-=- calc.spec beginning make calc-dynamic-only -=-'
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} \
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} ARCH_CFLAGS= \
|
||||
CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc \
|
||||
MANDIR=%{_mandir}/man1 EXT= V=@ calc-dynamic-only \
|
||||
BLD_TYPE=calc-dynamic-only LD_SHARE=
|
||||
echo '-=- calc.spec ending make calc-dynamic-only -=-'
|
||||
echo '-=- calc.spec beginning make chk -=-'
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} \
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} ARCH_CFLAGS= \
|
||||
CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc \
|
||||
MANDIR=%{_mandir}/man1 EXT= V=@ chk
|
||||
echo '-=- calc.spec ending make chk -=-'
|
||||
echo '-=- calc.spec beginning make rpm-unhide-static -=-'
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} \
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} ARCH_CFLAGS= \
|
||||
CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc \
|
||||
MANDIR=%{_mandir}/man1 EXT= V=@ rpm-unhide-static
|
||||
echo '-=- calc.spec ending make rpm-unhide-static -=-'
|
||||
echo '-=- calc.spec beginning make rpm-clean-static -=-'
|
||||
make -j1 BINDIR=%{_bindir} LIBDIR=%{_libdir} \
|
||||
make -j1 BINDIR=%{_bindir} LIBDIR=%{_libdir} ARCH_CFLAGS= \
|
||||
CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc \
|
||||
MANDIR=%{_mandir}/man1 EXT= V=@ rpm-clean-static
|
||||
echo '-=- calc.spec ending make rpm-clean-static -=-'
|
||||
echo '-=- calc.spec beginning make rpm-chk-static -=-'
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} \
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} ARCH_CFLAGS= \
|
||||
CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc \
|
||||
MANDIR=%{_mandir}/man1 EXT= V=@ rpm-chk-static
|
||||
echo '-=- calc.spec ending make rpm-chk-static -=-'
|
||||
@@ -125,7 +125,7 @@ echo '-=- calc.spec ending make rpm-chk-static -=-'
|
||||
%install
|
||||
echo '-=- calc.spec beginning make install -=-'
|
||||
mkdir -p %{_buildroot}
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} \
|
||||
make -j1 T=%{_buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} ARCH_CFLAGS= \
|
||||
CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc \
|
||||
MANDIR=%{_mandir}/man1 EXT= V=@ install
|
||||
echo '-=- calc.spec ending make install -=-'
|
||||
@@ -165,6 +165,12 @@ echo '-=- calc.spec beginning make clean -=-'
|
||||
%attr(644, root, root) %{_libdir}/libcustcalc.a
|
||||
|
||||
%changelog
|
||||
* Sun Mar 24 2019 cLandon Curt Noll http://www.isthe.com/chongo
|
||||
- Release: 13
|
||||
- Disable compiling with the default ARCH_CFLAGS= -march=native
|
||||
by clearking the ARCH_CFLAGS value in order to maximize
|
||||
the RPM binary protability.
|
||||
|
||||
* Mon Sep 01 2014 Landon Curt Noll http://www.isthe.com/chongo
|
||||
- Release: 12
|
||||
- Removed use of %{?_smp_mflags}. On Ubuntu 14.04, the -j2
|
||||
|
@@ -28,6 +28,8 @@ BEGIN {
|
||||
printf("#include <stdio.h>\n");
|
||||
printf("#include \"calcerr.h\"\n\n");
|
||||
printf("#include \"have_const.h\"\n\n");
|
||||
printf("#include \"banned.h\"\t");
|
||||
printf("/* include after system header <> includes */\n\n");
|
||||
printf("/*\n");
|
||||
printf(" * names of calc error values\n");
|
||||
printf(" */\n");
|
||||
|
35
codegen.c
35
codegen.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* codegen - module to generate opcodes from the input tokens
|
||||
*
|
||||
* Copyright (C) 1999-2007,2017 David I. Bell and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2017,2021 David I. Bell and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
#include "lib_calc.h"
|
||||
#include "calc.h"
|
||||
#include "alloc.h"
|
||||
#include "token.h"
|
||||
#include "symbol.h"
|
||||
#include "label.h"
|
||||
@@ -41,11 +42,16 @@
|
||||
#include "str.h"
|
||||
#include "func.h"
|
||||
#include "conf.h"
|
||||
#include "strl.h"
|
||||
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
# include <direct.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
STATIC BOOL rdonce; /* TRUE => do not reread this file */
|
||||
|
||||
FUNC *curfunc;
|
||||
@@ -144,11 +150,9 @@ getcommands(BOOL toplevel)
|
||||
case 1:
|
||||
case -1:
|
||||
if(i == 1) {
|
||||
strncpy(name,
|
||||
strlcpy(name,
|
||||
DEFAULTCALCHELP,
|
||||
MAXCMD);
|
||||
/* paranoia */
|
||||
name[MAXCMD] = '\0';
|
||||
MAXCMD+1);
|
||||
givehelp(name);
|
||||
}
|
||||
break;
|
||||
@@ -1021,7 +1025,7 @@ getstatement(LABEL *contlabel, LABEL *breaklabel,
|
||||
return;
|
||||
}
|
||||
reread();
|
||||
/* fall into default case */
|
||||
/*FALLTHRU*/
|
||||
|
||||
default:
|
||||
rescantoken();
|
||||
@@ -1384,6 +1388,7 @@ creatematrix(void)
|
||||
switch (gettoken()) {
|
||||
case T_RIGHTBRACKET:
|
||||
rescantoken();
|
||||
/*FALLTHRU*/
|
||||
case T_COMMA:
|
||||
addop(OP_ONE);
|
||||
addop(OP_SUB);
|
||||
@@ -1394,6 +1399,7 @@ creatematrix(void)
|
||||
switch(gettoken()) {
|
||||
case T_RIGHTBRACKET:
|
||||
rescantoken();
|
||||
/*FALLTHRU*/
|
||||
case T_COMMA:
|
||||
continue;
|
||||
}
|
||||
@@ -2211,6 +2217,7 @@ getterm(void)
|
||||
scanerror(T_NULL,
|
||||
"Function calls not allowed "
|
||||
"as expressions");
|
||||
/*FALLTHRU*/
|
||||
default:
|
||||
rescantoken();
|
||||
return type;
|
||||
@@ -2248,7 +2255,7 @@ getidexpr(BOOL okmat, int autodef)
|
||||
if (autodef != T_GLOBAL && autodef != T_LOCAL &&
|
||||
autodef != T_STATIC)
|
||||
autodef = 1;
|
||||
/* fall into default case */
|
||||
/*FALLTHRU*/
|
||||
default:
|
||||
rescantoken();
|
||||
usesymbol(name, autodef);
|
||||
@@ -2277,6 +2284,7 @@ getidexpr(BOOL okmat, int autodef)
|
||||
scanerror(T_NULL,
|
||||
"Function calls not allowed "
|
||||
"as expressions");
|
||||
/*FALLTHRU*/
|
||||
default:
|
||||
rescantoken();
|
||||
return type;
|
||||
@@ -2350,8 +2358,7 @@ getfilename(char *name, size_t namelen, BOOL *once)
|
||||
|
||||
/* use the value of the literal string */
|
||||
s = findstring(tokenstring());
|
||||
strncpy(name, s->s_str, namelen-1);
|
||||
name[namelen-1] = '\0';
|
||||
strlcpy(name, s->s_str, namelen);
|
||||
sfree(s);
|
||||
break;
|
||||
|
||||
@@ -2388,8 +2395,7 @@ getfilename(char *name, size_t namelen, BOOL *once)
|
||||
}
|
||||
|
||||
/* return symbol name or value of global var string */
|
||||
strncpy(name, symstr, namelen-1);
|
||||
name[namelen-1] = '\0';
|
||||
strlcpy(name, symstr, namelen);
|
||||
break;
|
||||
|
||||
case T_NEWLINE:
|
||||
@@ -2427,7 +2433,7 @@ getshowstatement(void)
|
||||
|
||||
switch (gettoken()) {
|
||||
case T_SYMBOL:
|
||||
strncpy(name, tokensymbol(), 4);
|
||||
strlcpy(name, tokensymbol(), sizeof(name));
|
||||
name[4] = '\0';
|
||||
/* Yuck! */
|
||||
arg = stringindex("buil\000"
|
||||
@@ -2591,8 +2597,7 @@ getid(char *buf)
|
||||
*buf = '\0';
|
||||
return FALSE;
|
||||
}
|
||||
strncpy(buf, tokensymbol(), SYMBOLSIZE);
|
||||
buf[SYMBOLSIZE] = '\0';
|
||||
strlcpy(buf, tokensymbol(), SYMBOLSIZE+1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -2603,7 +2608,7 @@ getid(char *buf)
|
||||
* global or if symtype is static and the old variable is at the same
|
||||
* level. Warnings are issued when a global or local variable is
|
||||
* redeclared and when in the same body the variable will be accessible only
|
||||
^ with the appropriate specfier.
|
||||
^ with the appropriate specifier.
|
||||
*/
|
||||
S_FUNC void
|
||||
definesymbol(char *name, int symtype)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* comfunc - extended precision complex arithmetic non-primitive routines
|
||||
*
|
||||
* Copyright (C) 1999-2007 David I. Bell and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -29,6 +29,10 @@
|
||||
#include "config.h"
|
||||
#include "cmath.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* cache the natural logarithm of 10
|
||||
*/
|
||||
@@ -553,7 +557,7 @@ c_log(COMPLEX *c, NUMBER *epsilon)
|
||||
/* first time call */
|
||||
cln_10_epsilon = qcopy(epsilon);
|
||||
} else if (qcmp(cln_10_epsilon, epsilon) == TRUE) {
|
||||
/* replaced cacheed value with epsilon arg */
|
||||
/* replaced cached value with epsilon arg */
|
||||
qfree(cln_10_epsilon);
|
||||
cln_10_epsilon = qcopy(epsilon);
|
||||
} else if (cln_10 != NULL) {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* commath - extended precision complex arithmetic primitive routines
|
||||
*
|
||||
* Copyright (C) 1999-2007 David I. Bell
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -27,6 +27,9 @@
|
||||
#include "cmath.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
COMPLEX _czero_ = { &_qzero_, &_qzero_, 1 };
|
||||
COMPLEX _cone_ = { &_qone_, &_qzero_, 1 };
|
||||
COMPLEX _conei_ = { &_qzero_, &_qone_, 1 };
|
||||
|
22
config.c
22
config.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* config - configuration routines
|
||||
*
|
||||
* Copyright (C) 1999-2007 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -46,6 +46,7 @@
|
||||
#endif
|
||||
|
||||
#include "calc.h"
|
||||
#include "alloc.h"
|
||||
#include "token.h"
|
||||
#include "zrand.h"
|
||||
#include "block.h"
|
||||
@@ -53,12 +54,17 @@
|
||||
#include "config.h"
|
||||
#include "str.h"
|
||||
#include "custom.h"
|
||||
#include "strl.h"
|
||||
|
||||
#include "have_strdup.h"
|
||||
#if !defined(HAVE_STRDUP)
|
||||
# define strdup(x) calc_strdup((CONST char *)(x))
|
||||
#endif /* HAVE_STRDUP */
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* deal with systems that lack a defined CLK_TCK
|
||||
*/
|
||||
@@ -757,7 +763,7 @@ setconfig(int type, VALUE *vp)
|
||||
math_error("Cannot duplicate new prompt");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
strncpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||
strlcpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||
free(conf->prompt1);
|
||||
conf->prompt1 = p;
|
||||
break;
|
||||
@@ -772,7 +778,7 @@ setconfig(int type, VALUE *vp)
|
||||
math_error("Cannot duplicate new more prompt");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
strncpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||
strlcpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||
free(conf->prompt2);
|
||||
conf->prompt2 = p;
|
||||
break;
|
||||
@@ -909,34 +915,42 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_PROGRAM:
|
||||
math_error("The program config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
|
||||
case CONFIG_BASENAME:
|
||||
math_error("The basename config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
|
||||
case CONFIG_WINDOWS:
|
||||
math_error("The windows config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
|
||||
case CONFIG_CYGWIN:
|
||||
math_error("The cygwin config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
|
||||
case CONFIG_COMPILE_CUSTOM:
|
||||
math_error("The custom config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
|
||||
case CONFIG_ALLOW_CUSTOM:
|
||||
math_error("The allow_custom config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
|
||||
case CONFIG_VERSION:
|
||||
math_error("The version config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
|
||||
case CONFIG_BASEB:
|
||||
math_error("The baseb config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
|
||||
case CONFIG_REDECL_WARN:
|
||||
if (vp->v_type == V_NUM) {
|
||||
@@ -971,10 +985,12 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_HZ:
|
||||
math_error("The clock tick rate config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
|
||||
default:
|
||||
math_error("Setting illegal config parameter");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
|
6
config.h
6
config.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* config - configuration routines
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014 Landon Curt Noll and David I. Bell
|
||||
* Copyright (C) 1999-2007,2014,2021 Landon Curt Noll and David I. Bell
|
||||
*
|
||||
* Primary author: Landon Curt Noll
|
||||
*
|
||||
@@ -130,7 +130,7 @@ struct config {
|
||||
LEN sq2; /* size of number to use square algorithm 2 */
|
||||
LEN pow2; /* size of modulus to use REDC for powers */
|
||||
LEN redc2; /* size of modulus to use REDC algorithm 2 */
|
||||
BOOL tilde_ok; /* ok to print a tilde on aproximations */
|
||||
BOOL tilde_ok; /* ok to print a tilde on approximations */
|
||||
BOOL tab_ok; /* ok to print tab before numeric values */
|
||||
LEN quomod; /* quomod() default rounding mode */
|
||||
LEN quo; /* quotient // default rounding mode */
|
||||
@@ -163,7 +163,7 @@ struct config {
|
||||
BOOL *allow_custom; /* ptr to if custom functions are allowed */
|
||||
char *version; /* calc version string */
|
||||
int baseb; /* base for calculations */
|
||||
BOOL redecl_warn; /* TRUE => warn of redeclating variables */
|
||||
BOOL redecl_warn; /* TRUE => warn of redeclaring variables */
|
||||
BOOL dupvar_warn; /* TRUE => warn of var name collisions */
|
||||
};
|
||||
typedef struct config CONFIG;
|
||||
|
6
const.c
6
const.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* const - constant number storage module
|
||||
*
|
||||
* Copyright (C) 1999-2007 David I. Bell
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -28,6 +28,10 @@
|
||||
#include "calc.h"
|
||||
#include "qmath.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
#define CONSTALLOCSIZE 400 /* number of constants to allocate */
|
||||
|
||||
STATIC unsigned long constcount;/* number of constants defined */
|
||||
|
@@ -10,7 +10,7 @@
|
||||
* ... ...
|
||||
* x5 y5 z5 w5 point 5 in R^4
|
||||
*
|
||||
* Copyright (C) 2001,2014 Landon Curt Noll
|
||||
* Copyright (C) 2001,2014,2019 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -37,9 +37,11 @@
|
||||
* parse args
|
||||
*/
|
||||
argc = argv();
|
||||
if (argc != 25) {
|
||||
fprintf(files(2), "usage: %s x0 y0 z0 w0 x1 y1 z1 w1 ... x5 y5 z5 w5\n",
|
||||
argv(0));
|
||||
stderr = files(2);
|
||||
program = argv(0);
|
||||
if (argc != 24) {
|
||||
fprintf(stderr, "usage: %s x0 y0 z0 w0 x1 y1 z1 w1 ... x5 y5 z5 w5\n",
|
||||
program);
|
||||
exit;
|
||||
}
|
||||
x0 = eval(argv(1));
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# cscript - makefile for calc shell script files
|
||||
#
|
||||
# Copyright (C) 1999-2006,2014,2017 Landon Curt Noll
|
||||
# Copyright (C) 1999-2006,2014,2017,2021 Landon Curt Noll
|
||||
#
|
||||
# Calc is open software; you can redistribute it and/or modify it under
|
||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -27,9 +27,27 @@
|
||||
# Makefile by Landon Curt Noll
|
||||
|
||||
|
||||
# required vars
|
||||
# The shell used by this Makefile
|
||||
#
|
||||
# On some systems, /bin/sh is a rather reduced shell with
|
||||
# deprecated behavor.
|
||||
#
|
||||
# If your system has a up to date, bash shell, then
|
||||
# you may wish to use:
|
||||
#
|
||||
# SHELL= /bin/bash
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point wehre is cannot be depended on.
|
||||
# On such systems, the zsh may be a much better alternative
|
||||
# shell for this Makefile to use:
|
||||
#
|
||||
# SHELL= /bin/zsh
|
||||
#
|
||||
SHELL= /bin/sh
|
||||
#SHELL= /bin/bash
|
||||
#SHELL= /bin/zsh
|
||||
|
||||
|
||||
####
|
||||
# Normally, the upper level makefile will set these values. We provide
|
||||
@@ -165,20 +183,27 @@ Q=@
|
||||
|
||||
# standard tools
|
||||
#
|
||||
CAT= cat
|
||||
CHMOD= chmod
|
||||
CMP= cmp
|
||||
CO= co
|
||||
CP= cp
|
||||
FMT= fmt
|
||||
MKDIR= mkdir
|
||||
MV= mv
|
||||
RM= rm
|
||||
RMDIR= rmdir
|
||||
SED= sed
|
||||
SORT= sort
|
||||
FMT= fmt
|
||||
CMP= cmp
|
||||
MKDIR= mkdir
|
||||
RMDIR= rmdir
|
||||
RM= rm
|
||||
TOUCH= touch
|
||||
MV= mv
|
||||
CP= cp
|
||||
CO= co
|
||||
TRUE= true
|
||||
|
||||
# NOTE: On some shells, echo is a builtin that does
|
||||
# not understand -n, so we call /bin/echo -n
|
||||
# directly to get around such shells.
|
||||
#
|
||||
ECHON= /bin/echo -n
|
||||
|
||||
# The ${SCRIPT} list is the list of calc shell script files (without the .calc
|
||||
# extension) which will be installed.
|
||||
#
|
||||
@@ -188,18 +213,17 @@ TRUE= true
|
||||
# To add a script:
|
||||
#
|
||||
# 1) Name the file with a .calc filename extension
|
||||
# 2) Place that file under RCS control
|
||||
# 3) Add the name, without the .calc extension to the ${SCRIPT} below
|
||||
# 4) Write out this Makefile
|
||||
# 5) Replace the ${SCRIPT} and ${SCRIPT_SRC} lines with the output of:
|
||||
# 2) Add the name, without the .calc extension to the ${SCRIPT} below
|
||||
# 3) Write out this Makefile
|
||||
# 4) Replace the SCRIPT= and SCRIPT_SRC= lines with the output of:
|
||||
#
|
||||
# make detaillist
|
||||
#
|
||||
SCRIPT= 4dsphere fproduct mersenne piforever plus powerterm \
|
||||
simple square
|
||||
SCRIPT= 4dsphere fproduct mersenne piforever plus powerterm simple \
|
||||
square
|
||||
|
||||
SCRIPT_SRC= 4dsphere.calc fproduct.calc mersenne.calc \
|
||||
piforever.calc plus.calc powerterm.calc simple.calc square.calc
|
||||
SCRIPT_SRC= 4dsphere.calc fproduct.calc mersenne.calc piforever.calc \
|
||||
plus.calc powerterm.calc simple.calc square.calc
|
||||
|
||||
# These files are found (but not built) in the distribution
|
||||
#
|
||||
@@ -263,11 +287,7 @@ detaillist:
|
||||
${Q} -(echo "xxxxxxx"; \
|
||||
for i in ${SCRIPT} /dev/null; do \
|
||||
if [ X"$$i" != X"/dev/null" ]; then \
|
||||
if [ ! -f RCS/$$i.calc,v ]; then \
|
||||
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
||||
else \
|
||||
echo $$i; \
|
||||
fi; \
|
||||
echo $$i; \
|
||||
fi; \
|
||||
done | LANG=C ${SORT}) | ${FMT} -70 | \
|
||||
${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \
|
||||
@@ -276,11 +296,7 @@ detaillist:
|
||||
${Q} -(echo "xxxxxxxxxxx"; \
|
||||
for i in ${SCRIPT} /dev/null; do \
|
||||
if [ X"$$i" != X"/dev/null" ]; then \
|
||||
if [ ! -f RCS/$$i.calc,v ]; then \
|
||||
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
||||
else \
|
||||
echo $$i.calc; \
|
||||
fi; \
|
||||
echo $$i.calc; \
|
||||
fi; \
|
||||
done | LANG=C ${SORT}) | ${FMT} -70 | \
|
||||
${SED} -e '1s/xxxxxxxxxxx/SCRIPT_SRC=/' -e '2,$$s/^/ /' \
|
||||
@@ -311,7 +327,7 @@ depend:
|
||||
if [ X"$$i" != X"/dev/null" ]; then \
|
||||
echo "$$i: $$i.calc"; \
|
||||
echo ' @$${RM} -f $$@'; \
|
||||
echo -n ' @$${SED} -e "1s:^#!/usr/local/src/bin/'; \
|
||||
${ECHON} ' @$${SED} -e "1s:^#!/usr/local/src/bin/'; \
|
||||
echo 'calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \
|
||||
echo ' @$${CHMOD} +x $$@'; \
|
||||
fi; \
|
||||
@@ -326,20 +342,13 @@ depend:
|
||||
${Q} ${CAT} makedep.out >> ${MAKE_FILE}
|
||||
${Q} ${RM} -f makedep.out
|
||||
-${Q} if ${CMP} -s ${MAKE_FILE}.bak ${MAKE_FILE}; then \
|
||||
echo 'sample ${MAKE_FILE} was already up to date'; \
|
||||
echo 'cscript/${MAKE_FILE} was already up to date'; \
|
||||
echo 'restoring original cscript/${MAKE_FILE}'; \
|
||||
${MV} -f ${MAKE_FILE}.bak ${MAKE_FILE}; \
|
||||
else \
|
||||
${RM} -f ${MAKE_FILE}.tmp; \
|
||||
${MV} ${MAKE_FILE} ${MAKE_FILE}.tmp; \
|
||||
if [ -d RCS -a ! -w "${MAKE_FILE}" ]; then \
|
||||
${CO} -l ${MAKE_FILE}; \
|
||||
fi; \
|
||||
${MV} ${MAKE_FILE}.tmp ${MAKE_FILE}; \
|
||||
if [ -d RCS ]; then \
|
||||
echo '******************************************************'; \
|
||||
echo 'new cscript ${MAKE_FILE} formed -- need to check it in'; \
|
||||
echo '******************************************************'; \
|
||||
fi; \
|
||||
echo 'old cscript/${MAKE_FILE} is now cscript/${MAKE_FILE}.bak'; \
|
||||
echo 'new cscript/${MAKE_FILE} formed'; \
|
||||
echo 'try: diff -u cscript/${MAKE_FILE}.bak cscript/${MAKE_FILE}'; \
|
||||
fi
|
||||
|
||||
##
|
||||
|
@@ -52,37 +52,6 @@ For more info, see:
|
||||
|
||||
#####
|
||||
|
||||
If you write something that you think is useful, please join the
|
||||
low volume calc mailing list calc-tester. Then send your contribution
|
||||
to the calc-tester mailing list.
|
||||
|
||||
To subscribe to the calc-tester mailing list, visit the following URL:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-tester.html
|
||||
|
||||
This is a low volume moderated mailing list.
|
||||
|
||||
This mailing list replaces calc-tester at asthe dot com list.
|
||||
|
||||
If you need a human to help you with your mailing list subscription,
|
||||
please send EMail to our special:
|
||||
|
||||
calc-tester-maillist-help at asthe dot com
|
||||
|
||||
NOTE: Remove spaces and replace 'at' with @, 'dot' with .
|
||||
|
||||
address. To be sure we see your EMail asking for help with your
|
||||
mailing list subscription, please use the following phase in your
|
||||
EMail Subject line:
|
||||
|
||||
calc tester mailing list help
|
||||
|
||||
That phrase in your subject line will help ensure your
|
||||
request will get past our anti-spam filters. You may have
|
||||
additional words in your subject line.
|
||||
|
||||
=-=
|
||||
|
||||
4dsphere
|
||||
|
||||
Determine if 6 points lie on the surface of a 4-dimensional sphere in R^4.
|
||||
@@ -107,7 +76,7 @@ mersenne exp
|
||||
|
||||
piforever
|
||||
|
||||
Print the value of pi forever, or as long as you cpu / memory allows.
|
||||
Print the value of pi forever, or as long as you CPU / memory allows.
|
||||
|
||||
|
||||
plus arg ...
|
||||
@@ -125,7 +94,7 @@ simple
|
||||
|
||||
A trivial example of a calc shell script.
|
||||
|
||||
## Copyright (C) 1999,2014 Landon Curt Noll
|
||||
## Copyright (C) 1999,2014,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -8,7 +8,7 @@
|
||||
* filename where to write the product, use - for stdout
|
||||
* term ... terms to multiply
|
||||
*
|
||||
* Copyright (C) 2001,2014 Landon Curt Noll
|
||||
* Copyright (C) 2001,2014,2019 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -35,8 +35,10 @@
|
||||
* parse args
|
||||
*/
|
||||
argc = argv();
|
||||
stderr = files(2);
|
||||
program = argv(0);
|
||||
if (argc < 2) {
|
||||
fprintf(files(2), "usage: %s term [term ...]\n", argv(0));
|
||||
fprintf(stderr, "usage: %s term [term ...]\n", program);
|
||||
exit;
|
||||
}
|
||||
filename = argv(1);
|
||||
|
@@ -2,7 +2,7 @@
|
||||
/*
|
||||
* mersenne - print the value of a mersenne number
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2014,2019 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -32,16 +32,19 @@
|
||||
/*
|
||||
* parse args
|
||||
*/
|
||||
if (argv() != 2) {
|
||||
/* we include the name of this script in the error message */
|
||||
fprintf(files(2), "usage: %s exp\n", config("program"));
|
||||
abort "wrong number of args";
|
||||
argc = argv();
|
||||
stderr = files(2);
|
||||
program = argv(0);
|
||||
if (argc != 2) {
|
||||
/* we include the name of this script in the error message */
|
||||
fprintf(stderr, "usage: %s exp\n", program);
|
||||
abort "wrong number of args";
|
||||
}
|
||||
|
||||
global n = eval(argv(1));
|
||||
n = eval(argv(1));
|
||||
|
||||
if (!isint(n) || n <= 0) {
|
||||
quit "Argument to be a positive integer";
|
||||
quit "Argument to be a positive integer";
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -1,8 +1,8 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -f
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
/*
|
||||
* piforever - print digits of pi forever (or as long as your mem/cpu allow)
|
||||
* piforever - print digits of pi forever (or as long as your mem/CPU allow)
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2014,2019,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -1,8 +1,8 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -f
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
/*
|
||||
* plus - add two or more arguments together
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2014,2019 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -32,10 +32,13 @@
|
||||
/*
|
||||
* parse args
|
||||
*/
|
||||
if (argv() < 2) {
|
||||
/* we include the name of this script in the error message */
|
||||
fprintf(files(2), "usage: %s value ...\n", config("program"));
|
||||
abort "not enough args";
|
||||
argc = argv();
|
||||
stderr = files(2);
|
||||
program = argv(0);
|
||||
if (argc < 2) {
|
||||
/* we include the name of this script in the error message */
|
||||
fprintf(stderr, "usage: %s value ...\n", program);
|
||||
abort "not enough args";
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -45,6 +48,6 @@ if (argv() < 2) {
|
||||
*/
|
||||
sum = 0;
|
||||
for (i=1; i < argv(); ++i) {
|
||||
sum += eval(argv(i));
|
||||
sum += eval(argv(i));
|
||||
}
|
||||
print sum;
|
||||
|
@@ -8,7 +8,7 @@
|
||||
* base_limit largest base we will consider (def: 10000)
|
||||
* value value to convert into sums of powers of integers
|
||||
*
|
||||
* Copyright (C) 2001,2014 Landon Curt Noll
|
||||
* Copyright (C) 2001,2014,2019 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the powerterm of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -35,28 +35,31 @@
|
||||
/*
|
||||
* parse args
|
||||
*/
|
||||
argc = argv();
|
||||
stderr = files(2);
|
||||
program = argv(0);
|
||||
config("verbose_quit", 0),;
|
||||
base_lim = 10000; /* default: highest base we will consider */
|
||||
if (argv() < 2 || argv() > 3) {
|
||||
fprintf(files(2), "usage: %s [base_limit] value\n", argv(0));
|
||||
if (argc < 2 || argc > 3) {
|
||||
fprintf(stderr, "usage: %s [base_limit] value\n", program);
|
||||
exit;
|
||||
}
|
||||
if (argv() == 3) {
|
||||
if (argc == 3) {
|
||||
x = eval(argv(2));
|
||||
base_lim = eval(argv(1));
|
||||
} else {
|
||||
x = eval(argv(1));
|
||||
}
|
||||
if (! isint(x)) {
|
||||
fprintf(files(2), "%s: value must be an integer\n");
|
||||
fprintf(stderr, "%s: value must be an integer\n", program);
|
||||
exit;
|
||||
}
|
||||
if (! isint(base_lim)) {
|
||||
fprintf(files(2), "%s: base limit must be an integer\n");
|
||||
fprintf(stderr, "%s: base limit must be an integer\n", program);
|
||||
exit;
|
||||
}
|
||||
if (base_lim <= 1) {
|
||||
fprintf(files(2), "%s: base limit is too small\n");
|
||||
fprintf(stderr, "%s: base limit is too small\n", program);
|
||||
exit;
|
||||
}
|
||||
++base_lim;
|
||||
|
@@ -1,8 +1,8 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -f
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
/*
|
||||
* simple - an example of a simple calc shell script
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2014,2019 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -30,3 +30,9 @@
|
||||
* This is an example of a simple calc shell script.
|
||||
*/
|
||||
print "This simple calc shell script works!"
|
||||
print "config(\"program\")=", config("program");
|
||||
print "argv()=", argv();
|
||||
argc = argv();
|
||||
for (i=0; i < argc; ++i) {
|
||||
print "argv(":i:")=", argv(i);
|
||||
}
|
||||
|
@@ -1,8 +1,8 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -f
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
/*
|
||||
* sqaure - print the squares of input values
|
||||
*
|
||||
* Copyright (C) 2000-2007,2014 Ernest Bowen
|
||||
* Copyright (C) 2000-2007,2014,2019 Ernest Bowen
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -33,10 +33,6 @@
|
||||
* cat file | ./square
|
||||
* echo "123" | ./square
|
||||
*
|
||||
* Within calc:
|
||||
*
|
||||
* > read square
|
||||
*
|
||||
* With input from a terminal, there is no prompt but each non-empty
|
||||
* line of input is evaluated as a calc expression and if it can be
|
||||
* calculated, the square of the value of that expression is displayed.
|
||||
@@ -59,6 +55,6 @@
|
||||
*/
|
||||
|
||||
|
||||
global s;
|
||||
while ((s = prompt("")))
|
||||
while (s = fgetline(files(0))) {
|
||||
print "\t":eval(s)^2;
|
||||
}
|
||||
|
8
custom.c
8
custom.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* custom - interface for custom software and hardware interfaces
|
||||
*
|
||||
* Copyright (C) 1999-2006,2018 Landon Curt Noll
|
||||
* Copyright (C) 1999-2006,2018,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -47,6 +47,10 @@
|
||||
|
||||
#endif /* CUSTOM */
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
BOOL allow_custom = FALSE; /* TRUE => custom builtins allowed */
|
||||
|
||||
|
||||
@@ -109,7 +113,7 @@ custom(char *name, int count, VALUE **vals)
|
||||
|
||||
|
||||
/*
|
||||
* showcustom - display the names and brief descriptins of custom functions
|
||||
* showcustom - display the names and brief descriptions of custom functions
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
void
|
||||
|
6
custom.h
6
custom.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* custom - interface for custom software and hardware interfaces
|
||||
*
|
||||
* Copyright (C) 1999-2007 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -35,7 +35,7 @@
|
||||
*
|
||||
* before they include this file.
|
||||
*
|
||||
* Keep this file down to a minimum. Don't put custom builtin funcion
|
||||
* Keep this file down to a minimum. Don't put custom builtin function
|
||||
* stuff in this file!
|
||||
*/
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
|
||||
/*
|
||||
* arg count definitons
|
||||
* arg count definitions
|
||||
*/
|
||||
#define MAX_CUSTOM_ARGS 100 /* maximum number of custom arguments */
|
||||
|
||||
|
@@ -220,7 +220,7 @@ Step 5: Write your custom function
|
||||
NOTE: If you do not use any of the 3 function parameters,
|
||||
then you should declare that function parameter to be UNUSED.
|
||||
For example, if the count and vals parameters were not used
|
||||
in your custom function, then your declaraction should be:
|
||||
in your custom function, then your declaration should be:
|
||||
|
||||
/*ARGSUSED*/
|
||||
VALUE
|
||||
@@ -645,7 +645,7 @@ Step 12: Contribute
|
||||
and consider submitting your custom function for possible
|
||||
inclusion in later versions of calc.
|
||||
|
||||
## Copyright (C) 1999-2007 Landon Curt Noll
|
||||
## Copyright (C) 1999-2007,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
220
custom/Makefile
220
custom/Makefile
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# custom - makefile for calc custom routines
|
||||
#
|
||||
# Copyright (C) 1999-2006,2014,2017-2018 Landon Curt Noll
|
||||
# Copyright (C) 1999-2006,2014,2017-2018,2021 Landon Curt Noll
|
||||
#
|
||||
# Calc is open software; you can redistribute it and/or modify it under
|
||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -27,6 +27,65 @@
|
||||
# calculator by David I. Bell with help/mods from others
|
||||
# Makefile by Landon Curt Noll
|
||||
|
||||
|
||||
# The shell used by this Makefile
|
||||
#
|
||||
# On some systems, /bin/sh is a rather reduced shell with
|
||||
# deprecated behavor.
|
||||
#
|
||||
# If your system has a up to date, bash shell, then
|
||||
# you may wish to use:
|
||||
#
|
||||
# SHELL= /bin/bash
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point wehre is cannot be depended on.
|
||||
# On such systems, the zsh may be a much better alternative
|
||||
# shell for this Makefile to use:
|
||||
#
|
||||
# SHELL= /bin/zsh
|
||||
#
|
||||
SHELL= /bin/sh
|
||||
#SHELL= /bin/bash
|
||||
#SHELL= /bin/zsh
|
||||
|
||||
|
||||
# CCBAN is given to ${CC} in order to control if banned.h is in effect.
|
||||
#
|
||||
# The banned.h attempts to ban the use of certain dangerous functions
|
||||
# that, if improperly used, could compromise the computational integrity
|
||||
# if calculations.
|
||||
#
|
||||
# In the case of calc, we are motivated in part by the desire for calc
|
||||
# to correctly calculate: even durings extremely long calculations.
|
||||
#
|
||||
# If UNBAN is NOT defined, then calling certain functions
|
||||
# will result in a call to a non-existent function (link error).
|
||||
#
|
||||
# While we do NOT encourage defining UNBAN, there may be
|
||||
# a system / compiler environment where re-defining a
|
||||
# function may lead to a fatal compiler complication.
|
||||
# If that happens, consider compiling as:
|
||||
#
|
||||
# make clobber all chk CCBAN=-DUNBAN
|
||||
#
|
||||
# as see if this is a work-a-round.
|
||||
#
|
||||
# If YOU discover a need for the -DUNBAN work-a-round, PLEASE tell us!
|
||||
# Please send us a bug report. See the file:
|
||||
#
|
||||
# BUGS
|
||||
#
|
||||
# or the URL:
|
||||
#
|
||||
# http://www.isthe.com/chongo/tech/comp/calc/calc-bugrept.html
|
||||
#
|
||||
# for how to send us such a bug report.
|
||||
#
|
||||
CCBAN= -UUNBAN
|
||||
#CCBAN= -DUNBAN
|
||||
|
||||
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=-=-=- Identify the target machine, if possible -=-=-=-=-=-=-=-=-#
|
||||
@@ -36,7 +95,7 @@
|
||||
#
|
||||
# make ...__optional_arguments_... target=value
|
||||
|
||||
# Try uname -s if the target was not alreadhy set on the make command line
|
||||
# Try uname -s if the target was not already set on the make command line
|
||||
#
|
||||
ifeq ($(target),)
|
||||
target=$(shell uname -s 2>/dev/null)
|
||||
@@ -125,7 +184,7 @@ Q=@
|
||||
#INCDIR= /dev/env/DJDIR/include
|
||||
INCDIR= /usr/include
|
||||
|
||||
# where to install calc realted things
|
||||
# where to install calc related things
|
||||
#
|
||||
# ${BINDIR} where to install calc binary files
|
||||
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||
@@ -348,7 +407,7 @@ EXT=
|
||||
|
||||
# The default calc versions
|
||||
#
|
||||
VERSION= 2.12.7.2
|
||||
VERSION= 2.12.9.0
|
||||
|
||||
# Names of shared libraries with versions
|
||||
#
|
||||
@@ -357,26 +416,25 @@ LIB_EXT_VERSION= ${LIB_EXT}.${VERSION}
|
||||
|
||||
# standard tools
|
||||
#
|
||||
SHELL= /bin/sh
|
||||
SED= sed
|
||||
MAKEDEPEND= makedepend
|
||||
GREP= egrep
|
||||
CHMOD= chmod
|
||||
FMT= fmt
|
||||
SORT= sort
|
||||
CMP= cmp
|
||||
AR= ar
|
||||
RM= rm
|
||||
TOUCH= touch
|
||||
MKDIR= mkdir
|
||||
RMDIR= rmdir
|
||||
MV= mv
|
||||
CP= cp
|
||||
CO= co
|
||||
TRUE= true
|
||||
MAKE= make
|
||||
LN= ln
|
||||
AWK= awk
|
||||
CHMOD= chmod
|
||||
CMP= cmp
|
||||
CO= co
|
||||
CP= cp
|
||||
FMT= fmt
|
||||
GREP= egrep
|
||||
LN= ln
|
||||
MAKE= make
|
||||
MAKEDEPEND= makedepend
|
||||
MKDIR= mkdir
|
||||
MV= mv
|
||||
RM= rm
|
||||
RMDIR= rmdir
|
||||
SED= sed
|
||||
SORT= sort
|
||||
TOUCH= touch
|
||||
TRUE= true
|
||||
|
||||
# EXTRA_CFLAGS are flags given to ${CC} when compiling C files
|
||||
# EXTRA_LDFLAGS are flags given to ${CC} when linking progs
|
||||
@@ -391,7 +449,7 @@ AWK= awk
|
||||
# NOTE: These should be left blank in this Makefile to make it
|
||||
# easier to add stuff on the command line. If you want to
|
||||
# to change the way calc is compiled by this Makefile, change
|
||||
# the appropirate host target section below or a flag above.
|
||||
# the appropriate host target section below or a flag above.
|
||||
#
|
||||
EXTRA_CFLAGS=
|
||||
EXTRA_LDFLAGS=
|
||||
@@ -420,9 +478,9 @@ COMMON_LDFLAGS= ${EXTRA_LDFLAGS}
|
||||
# NOTE: This does not work for: make-XYZ-only and BLD_TYPE != make-XYZ-only
|
||||
#
|
||||
ifeq ($(BLD_TYPE),calc-static-only)
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CC_STATIC}
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_STATIC}
|
||||
else
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CC_SHARE}
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_SHARE}
|
||||
endif
|
||||
CFLAGS= ${ICFLAGS} ${CCOPT}
|
||||
|
||||
@@ -466,12 +524,20 @@ LDFLAGS= ${LD_DEBUG} ${ILDFLAGS}
|
||||
# CCOPT are flags given to ${CC} for optimization
|
||||
# CCWARN are flags given to ${CC} for warning message control
|
||||
#
|
||||
# WNO_IMPLICT, WNO_ERROR_LONG_LONG and WNO_LONG_LONG are given to ${CC}
|
||||
# when compiling special .o files that may need special compile options
|
||||
# The following are given to ${CC}:
|
||||
#
|
||||
# WNO_IMPLICT
|
||||
# WNO_ERROR_LONG_LONG
|
||||
# WNO_LONG_LONG
|
||||
#
|
||||
# when compiling special .o files that may need special compile options:
|
||||
#
|
||||
# NOTE: These flags simply turn off certain compiler warnings,
|
||||
# which is useful only when CCWERR is set to -Werror.
|
||||
#
|
||||
# NOTE: If your compiler does not have these -Wno files, just
|
||||
# set these variables to nothing as in:
|
||||
#
|
||||
# WNO_IMPLICT=
|
||||
# WNO_ERROR_LONG_LONG=
|
||||
# WNO_LONG_LONG=
|
||||
@@ -482,6 +548,9 @@ LDFLAGS= ${LD_DEBUG} ${ILDFLAGS}
|
||||
# to abort on warnings, then leave CCWERR blank.
|
||||
# CCMISC are misc flags given to ${CC}
|
||||
#
|
||||
# CCBAN is given to ${CC} in order to control if banned.h is in effect.
|
||||
# NOTE: See where CCBAN is defined above for details.
|
||||
#
|
||||
# LCC is how the C compiler is invoked on locally executed intermediate programs
|
||||
# CC is how the C compiler is invoked (with an optional Purify)
|
||||
#
|
||||
@@ -493,7 +562,7 @@ LDFLAGS= ${LD_DEBUG} ${ILDFLAGS}
|
||||
# #
|
||||
# calc-contrib at asthe dot com #
|
||||
# #
|
||||
# EMail address an "ifeq ($(target),YOUR_TARGET_NAME)" ... "endif" #
|
||||
# Email address an "ifeq ($(target),YOUR_TARGET_NAME)" ... "endif" #
|
||||
# set of lines so that we can consider them for the next release. #
|
||||
##########################################################################
|
||||
|
||||
@@ -904,7 +973,7 @@ CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
# ILDFLAGS for ${CC} in linking intermediate programs used to help compile calc
|
||||
# LDFLAGS for ${CC} in linking calc programs other than intermediate programs
|
||||
#
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CC_STATIC}
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_STATIC}
|
||||
CFLAGS= ${ICFLAGS} ${CCOPT}
|
||||
#
|
||||
ILDFLAGS= ${COMMON_LDFLAGS} ${LD_STATIC}
|
||||
@@ -1031,9 +1100,9 @@ endif
|
||||
# NOTE: This does not work for: make-XYZ-only and BLD_TYPE != make-XYZ-only
|
||||
#
|
||||
ifeq ($(BLD_TYPE),calc-static-only)
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CC_STATIC}
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_STATIC}
|
||||
else
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CC_SHARE}
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_SHARE}
|
||||
endif
|
||||
CFLAGS= ${ICFLAGS} ${CCOPT}
|
||||
|
||||
@@ -1084,7 +1153,7 @@ CUSTCALC_OBJ= ${REQUIRED_OBJ} ${CUSTOM_OBJ}
|
||||
#
|
||||
C_SRC= ${REQUIRED_SRC} ${CUSTOM_SRC}
|
||||
|
||||
# These .h files are used to build the dependecy list
|
||||
# These .h files are used to build the dependency list
|
||||
#
|
||||
H_SRC= ${CUSTOM_H_SRC}
|
||||
|
||||
@@ -1101,7 +1170,7 @@ DISTLIST= ${CUSTCALC_SRC} ${CUSTOM_CALC_FILES} ${CUSTOM_HELP} \
|
||||
#
|
||||
CALCLIBLIST= ${CUSTCALC_SRC} ${INSTALL_H_SRC} ${MAKE_FILE} HOW_TO_ADD
|
||||
|
||||
# This is the custom dynbamic shared library that is build
|
||||
# This is the custom dynamic shared library that is build
|
||||
#
|
||||
CALC_DYNAMIC_LIBCUSTCALC= libcustcalc${LIB_EXT_VERSION}
|
||||
|
||||
@@ -1155,7 +1224,7 @@ c_sysinfo.o: c_sysinfo.c ${MAKE_FILE}
|
||||
|
||||
###
|
||||
#
|
||||
# building calc-static and static lib*.a libraires
|
||||
# building calc-static and static lib*.a libraries
|
||||
#
|
||||
###
|
||||
|
||||
@@ -1174,7 +1243,7 @@ libcustcalc.a: ${CUSTCALC_OBJ} ${MAKE_FILE}
|
||||
# sub-directory called calc/lib.
|
||||
#
|
||||
# NOTE: Due to bogus shells found on one common system we must have
|
||||
# an non-emoty else clause for every if condition. *sigh*
|
||||
# an non-empty else clause for every if condition. *sigh*
|
||||
#
|
||||
##
|
||||
|
||||
@@ -1213,7 +1282,7 @@ Makefile.simple: ${MAKE_FILE}
|
||||
# Home grown make dependency rules. Your system make not support
|
||||
# or have the needed tools. You can ignore this section.
|
||||
#
|
||||
# We will form a skelaton tree of *.c files containing only #include "foo.h"
|
||||
# We will form a skeleton tree of *.c files containing only #include "foo.h"
|
||||
# lines and .h files containing the same lines surrounded by multiple include
|
||||
# prevention lines. This allows us to build a static depend list that will
|
||||
# satisfy all possible cpp symbol definition combinations.
|
||||
@@ -1222,7 +1291,7 @@ Makefile.simple: ${MAKE_FILE}
|
||||
|
||||
depend:
|
||||
${Q} if [ -f ${MAKE_FILE}.bak ]; then \
|
||||
echo "${MAKE_FILE}.bak exists, remove or move it"; \
|
||||
echo "custom/${MAKE_FILE}.bak exists, remove or move it"; \
|
||||
exit 1; \
|
||||
else \
|
||||
${TRUE}; \
|
||||
@@ -1238,9 +1307,7 @@ depend:
|
||||
fi; \
|
||||
done
|
||||
-${Q} for i in ${H_SRC} /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
if [ "$$i" = "/dev/null" ]; then continue; fi; \
|
||||
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
||||
echo "#if !defined($$tag)" > "skel/custom/$$i"; \
|
||||
echo "#define $$tag" >> "skel/custom/$$i"; \
|
||||
@@ -1249,25 +1316,25 @@ depend:
|
||||
echo '#endif /* '"$$tag"' */' >> "skel/custom/$$i"; \
|
||||
done
|
||||
${Q} (cd ..; ${MAKE} -f ${TOP_MAKE_FILE} hsrc)
|
||||
${Q} for i in `cd ..; ${MAKE} -f ${TOP_MAKE_FILE} h_list 2>&1 | \
|
||||
${SED} -e '/Entering directory/d' \
|
||||
-e '/Nothing to be done/d' \
|
||||
-e '/Leaving directory/d'` /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
||||
echo "#if !defined($$tag)" > "skel/$$i"; \
|
||||
echo "#define $$tag" >> "skel/$$i"; \
|
||||
${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
|
||||
>> "skel/$$i"; \
|
||||
echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
|
||||
done
|
||||
${MAKE} -f ../${TOP_MAKE_FILE} h_list 2>/dev/null | \
|
||||
while read i; do \
|
||||
if [ ! -f "../$$i" ]; then continue; fi; \
|
||||
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
||||
echo "#if !defined($$tag)" > "skel/$$i"; \
|
||||
echo "#define $$tag" >> "skel/$$i"; \
|
||||
${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
|
||||
>> "skel/$$i"; \
|
||||
echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
|
||||
done
|
||||
${Q} ${RM} -f skel/custom/makedep.out
|
||||
${Q} echo custom/skel formed
|
||||
${Q} echo forming custom dependency list
|
||||
${Q} :> skel/custom/makedep.out
|
||||
${Q} cd skel/custom; ${MAKEDEPEND} -I.. -w 1 -f makedep.out ${C_SRC}
|
||||
${Q} cd skel/custom; ${MAKEDEPEND} \
|
||||
-I../../.. -w 1 -f makedep.out -- \
|
||||
${CFLAGS} -- \
|
||||
${C_SRC} 2>/dev/null
|
||||
${Q} ${SED} -e 's|: ../../|: |' -E -i '' -l skel/custom/makedep.out
|
||||
-${Q} for i in ${C_SRC} /dev/null; do \
|
||||
if [ X"$$i" != X"/dev/null" ]; then \
|
||||
echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \
|
||||
@@ -1282,22 +1349,16 @@ depend:
|
||||
${Q} ${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' \
|
||||
${MAKE_FILE}.bak > ${MAKE_FILE}
|
||||
${Q} ${GREP} -v '^#' skel/custom/makedep.out >> ${MAKE_FILE}
|
||||
${Q} echo removing skel
|
||||
${Q} ${RM} -rf skel
|
||||
-${Q} if ${CMP} -s ${MAKE_FILE}.bak ${MAKE_FILE}; then \
|
||||
echo 'custom ${MAKE_FILE} was already up to date'; \
|
||||
echo 'custom/${MAKE_FILE} was already up to date'; \
|
||||
echo 'restoring original custom/${MAKE_FILE}'; \
|
||||
${MV} -f ${MAKE_FILE}.bak ${MAKE_FILE}; \
|
||||
else \
|
||||
${RM} -f ${MAKE_FILE}.tmp; \
|
||||
${MV} ${MAKE_FILE} ${MAKE_FILE}.tmp; \
|
||||
if [ -d RCS -a ! -w "${MAKE_FILE}" ]; then \
|
||||
${CO} -l ${MAKE_FILE}; \
|
||||
fi ;\
|
||||
${MV} ${MAKE_FILE}.tmp ${MAKE_FILE}; \
|
||||
if [ -d RCS ]; then \
|
||||
echo '****************************************************'; \
|
||||
echo 'new custom ${MAKE_FILE} formed -- you to check it in'; \
|
||||
echo '****************************************************'; \
|
||||
fi; \
|
||||
echo 'old custom/${MAKE_FILE} is now custom/${MAKE_FILE}.bak'; \
|
||||
echo 'new custom/${MAKE_FILE} formed'; \
|
||||
echo 'try: diff -u custom/${MAKE_FILE}.bak custom/${MAKE_FILE}'; \
|
||||
fi
|
||||
|
||||
##
|
||||
@@ -1344,6 +1405,7 @@ clobber: clean
|
||||
${RM} -f libcustcalc${LIB_EXT}
|
||||
${RM} -f libcustcalc.a
|
||||
${RM} -f libcustcalc*
|
||||
${RM} -rf skel
|
||||
${V} echo remove files that are obsolete
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
${RM} -f Makefile.simple
|
||||
@@ -1531,7 +1593,7 @@ uninstall:
|
||||
if [ -f "${T}${CUSTOMCALDIR}/libcustcalc.a" ]; then \
|
||||
echo "cannot uninstall ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
|
||||
else \
|
||||
echo "uninstalled ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
|
||||
echo "un-installed ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
|
||||
fi; \
|
||||
fi
|
||||
-${Q} for i in ${CUSTOM_HELP} /dev/null; do \
|
||||
@@ -1543,7 +1605,7 @@ uninstall:
|
||||
if [ -f "${T}${CUSTOMHELPDIR}/$$i" ]; then \
|
||||
echo "cannot uninstall ${T}${CUSTOMHELPDIR}/$$i"; \
|
||||
else \
|
||||
echo "uninstalled ${T}${CUSTOMHELPDIR}/$$i"; \
|
||||
echo "un-installed ${T}${CUSTOMHELPDIR}/$$i"; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
@@ -1556,7 +1618,7 @@ uninstall:
|
||||
if [ -f "${T}${CUSTOMCALDIR}/$$i" ]; then \
|
||||
echo "cannot uninstall ${T}${CUSTOMCALDIR}/$$i"; \
|
||||
else \
|
||||
echo "uninstalled ${T}${CUSTOMCALDIR}/$$i"; \
|
||||
echo "un-installed ${T}${CUSTOMCALDIR}/$$i"; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
@@ -1569,7 +1631,7 @@ uninstall:
|
||||
if [ -f "${T}${CUSTOMINCDIR}/$$i" ]; then \
|
||||
echo "cannot uninstall ${T}${CUSTOMINCDIR}/$$i"; \
|
||||
else \
|
||||
echo "uninstalled ${T}${CUSTOMINCDIR}/$$i"; \
|
||||
echo "un-installed ${T}${CUSTOMINCDIR}/$$i"; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
@@ -1590,6 +1652,7 @@ uninstall:
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
c_argv.o: ../alloc.h
|
||||
c_argv.o: ../banned.h
|
||||
c_argv.o: ../block.h
|
||||
c_argv.o: ../byteswap.h
|
||||
c_argv.o: ../calc.h
|
||||
@@ -1600,6 +1663,7 @@ c_argv.o: ../custom.h
|
||||
c_argv.o: ../decl.h
|
||||
c_argv.o: ../endian_calc.h
|
||||
c_argv.o: ../hash.h
|
||||
c_argv.o: ../have_ban_pragma.h
|
||||
c_argv.o: ../have_const.h
|
||||
c_argv.o: ../have_memmv.h
|
||||
c_argv.o: ../have_newstr.h
|
||||
@@ -1615,6 +1679,7 @@ c_argv.o: ../value.h
|
||||
c_argv.o: ../zmath.h
|
||||
c_argv.o: c_argv.c
|
||||
c_devnull.o: ../alloc.h
|
||||
c_devnull.o: ../banned.h
|
||||
c_devnull.o: ../block.h
|
||||
c_devnull.o: ../byteswap.h
|
||||
c_devnull.o: ../calcerr.h
|
||||
@@ -1624,6 +1689,7 @@ c_devnull.o: ../custom.h
|
||||
c_devnull.o: ../decl.h
|
||||
c_devnull.o: ../endian_calc.h
|
||||
c_devnull.o: ../hash.h
|
||||
c_devnull.o: ../have_ban_pragma.h
|
||||
c_devnull.o: ../have_const.h
|
||||
c_devnull.o: ../have_memmv.h
|
||||
c_devnull.o: ../have_newstr.h
|
||||
@@ -1640,6 +1706,7 @@ c_devnull.o: ../value.h
|
||||
c_devnull.o: ../zmath.h
|
||||
c_devnull.o: c_devnull.c
|
||||
c_help.o: ../alloc.h
|
||||
c_help.o: ../banned.h
|
||||
c_help.o: ../block.h
|
||||
c_help.o: ../byteswap.h
|
||||
c_help.o: ../calcerr.h
|
||||
@@ -1649,6 +1716,7 @@ c_help.o: ../custom.h
|
||||
c_help.o: ../decl.h
|
||||
c_help.o: ../endian_calc.h
|
||||
c_help.o: ../hash.h
|
||||
c_help.o: ../have_ban_pragma.h
|
||||
c_help.o: ../have_const.h
|
||||
c_help.o: ../have_memmv.h
|
||||
c_help.o: ../have_newstr.h
|
||||
@@ -1665,6 +1733,7 @@ c_help.o: ../value.h
|
||||
c_help.o: ../zmath.h
|
||||
c_help.o: c_help.c
|
||||
c_pmodm127.o: ../alloc.h
|
||||
c_pmodm127.o: ../banned.h
|
||||
c_pmodm127.o: ../block.h
|
||||
c_pmodm127.o: ../byteswap.h
|
||||
c_pmodm127.o: ../calcerr.h
|
||||
@@ -1674,6 +1743,7 @@ c_pmodm127.o: ../custom.h
|
||||
c_pmodm127.o: ../decl.h
|
||||
c_pmodm127.o: ../endian_calc.h
|
||||
c_pmodm127.o: ../hash.h
|
||||
c_pmodm127.o: ../have_ban_pragma.h
|
||||
c_pmodm127.o: ../have_const.h
|
||||
c_pmodm127.o: ../have_memmv.h
|
||||
c_pmodm127.o: ../have_newstr.h
|
||||
@@ -1689,6 +1759,7 @@ c_pmodm127.o: ../value.h
|
||||
c_pmodm127.o: ../zmath.h
|
||||
c_pmodm127.o: c_pmodm127.c
|
||||
c_pzasusb8.o: ../alloc.h
|
||||
c_pzasusb8.o: ../banned.h
|
||||
c_pzasusb8.o: ../block.h
|
||||
c_pzasusb8.o: ../byteswap.h
|
||||
c_pzasusb8.o: ../calcerr.h
|
||||
@@ -1698,6 +1769,7 @@ c_pzasusb8.o: ../custom.h
|
||||
c_pzasusb8.o: ../decl.h
|
||||
c_pzasusb8.o: ../endian_calc.h
|
||||
c_pzasusb8.o: ../hash.h
|
||||
c_pzasusb8.o: ../have_ban_pragma.h
|
||||
c_pzasusb8.o: ../have_const.h
|
||||
c_pzasusb8.o: ../have_memmv.h
|
||||
c_pzasusb8.o: ../have_newstr.h
|
||||
@@ -1713,6 +1785,7 @@ c_pzasusb8.o: ../value.h
|
||||
c_pzasusb8.o: ../zmath.h
|
||||
c_pzasusb8.o: c_pzasusb8.c
|
||||
c_register.o: ../alloc.h
|
||||
c_register.o: ../banned.h
|
||||
c_register.o: ../block.h
|
||||
c_register.o: ../byteswap.h
|
||||
c_register.o: ../calc.h
|
||||
@@ -1723,6 +1796,7 @@ c_register.o: ../custom.h
|
||||
c_register.o: ../decl.h
|
||||
c_register.o: ../endian_calc.h
|
||||
c_register.o: ../hash.h
|
||||
c_register.o: ../have_ban_pragma.h
|
||||
c_register.o: ../have_const.h
|
||||
c_register.o: ../have_memmv.h
|
||||
c_register.o: ../have_newstr.h
|
||||
@@ -1738,6 +1812,7 @@ c_register.o: ../value.h
|
||||
c_register.o: ../zmath.h
|
||||
c_register.o: c_register.c
|
||||
c_sysinfo.o: ../alloc.h
|
||||
c_sysinfo.o: ../banned.h
|
||||
c_sysinfo.o: ../block.h
|
||||
c_sysinfo.o: ../byteswap.h
|
||||
c_sysinfo.o: ../calc.h
|
||||
@@ -1750,6 +1825,7 @@ c_sysinfo.o: ../decl.h
|
||||
c_sysinfo.o: ../endian_calc.h
|
||||
c_sysinfo.o: ../fposval.h
|
||||
c_sysinfo.o: ../hash.h
|
||||
c_sysinfo.o: ../have_ban_pragma.h
|
||||
c_sysinfo.o: ../have_const.h
|
||||
c_sysinfo.o: ../have_memmv.h
|
||||
c_sysinfo.o: ../have_newstr.h
|
||||
@@ -1770,6 +1846,7 @@ c_sysinfo.o: ../zrand.h
|
||||
c_sysinfo.o: ../zrandom.h
|
||||
c_sysinfo.o: c_sysinfo.c
|
||||
custtbl.o: ../alloc.h
|
||||
custtbl.o: ../banned.h
|
||||
custtbl.o: ../block.h
|
||||
custtbl.o: ../byteswap.h
|
||||
custtbl.o: ../calcerr.h
|
||||
@@ -1779,6 +1856,7 @@ custtbl.o: ../custom.h
|
||||
custtbl.o: ../decl.h
|
||||
custtbl.o: ../endian_calc.h
|
||||
custtbl.o: ../hash.h
|
||||
custtbl.o: ../have_ban_pragma.h
|
||||
custtbl.o: ../have_const.h
|
||||
custtbl.o: ../have_memmv.h
|
||||
custtbl.o: ../have_newstr.h
|
||||
|
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# custom - makefile for calc custom routines
|
||||
#
|
||||
# Copyright (C) 1999-2006,2014,2017-2018 Landon Curt Noll
|
||||
# Copyright (C) 1999-2006,2014,2017-2018,2021 Landon Curt Noll
|
||||
#
|
||||
# Calc is open software; you can redistribute it and/or modify it under
|
||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -27,6 +27,65 @@
|
||||
# calculator by David I. Bell with help/mods from others
|
||||
# Makefile by Landon Curt Noll
|
||||
|
||||
|
||||
# The shell used by this Makefile
|
||||
#
|
||||
# On some systems, /bin/sh is a rather reduced shell with
|
||||
# deprecated behavor.
|
||||
#
|
||||
# If your system has a up to date, bash shell, then
|
||||
# you may wish to use:
|
||||
#
|
||||
# SHELL= /bin/bash
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point wehre is cannot be depended on.
|
||||
# On such systems, the zsh may be a much better alternative
|
||||
# shell for this Makefile to use:
|
||||
#
|
||||
# SHELL= /bin/zsh
|
||||
#
|
||||
SHELL= /bin/sh
|
||||
#SHELL= /bin/bash
|
||||
#SHELL= /bin/zsh
|
||||
|
||||
|
||||
# CCBAN is given to ${CC} in order to control if banned.h is in effect.
|
||||
#
|
||||
# The banned.h attempts to ban the use of certain dangerous functions
|
||||
# that, if improperly used, could compromise the computational integrity
|
||||
# if calculations.
|
||||
#
|
||||
# In the case of calc, we are motivated in part by the desire for calc
|
||||
# to correctly calculate: even durings extremely long calculations.
|
||||
#
|
||||
# If UNBAN is NOT defined, then calling certain functions
|
||||
# will result in a call to a non-existent function (link error).
|
||||
#
|
||||
# While we do NOT encourage defining UNBAN, there may be
|
||||
# a system / compiler environment where re-defining a
|
||||
# function may lead to a fatal compiler complication.
|
||||
# If that happens, consider compiling as:
|
||||
#
|
||||
# make clobber all chk CCBAN=-DUNBAN
|
||||
#
|
||||
# as see if this is a work-a-round.
|
||||
#
|
||||
# If YOU discover a need for the -DUNBAN work-a-round, PLEASE tell us!
|
||||
# Please send us a bug report. See the file:
|
||||
#
|
||||
# BUGS
|
||||
#
|
||||
# or the URL:
|
||||
#
|
||||
# http://www.isthe.com/chongo/tech/comp/calc/calc-bugrept.html
|
||||
#
|
||||
# for how to send us such a bug report.
|
||||
#
|
||||
CCBAN= -UUNBAN
|
||||
#CCBAN= -DUNBAN
|
||||
|
||||
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=-=-=- Identify the target machine, if possible -=-=-=-=-=-=-=-=-#
|
||||
@@ -36,7 +95,7 @@
|
||||
#
|
||||
# make ...__optional_arguments_... target=value
|
||||
|
||||
# Try uname -s if the target was not alreadhy set on the make command line
|
||||
# Try uname -s if the target was not already set on the make command line
|
||||
#
|
||||
ifeq ($(target),)
|
||||
target=$(shell uname -s 2>/dev/null)
|
||||
@@ -125,7 +184,7 @@ Q=@
|
||||
#INCDIR= /dev/env/DJDIR/include
|
||||
INCDIR= /usr/include
|
||||
|
||||
# where to install calc realted things
|
||||
# where to install calc related things
|
||||
#
|
||||
# ${BINDIR} where to install calc binary files
|
||||
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||
@@ -348,7 +407,7 @@ EXT=
|
||||
|
||||
# The default calc versions
|
||||
#
|
||||
VERSION= 2.12.7.2
|
||||
VERSION= 2.12.9.0
|
||||
|
||||
# Names of shared libraries with versions
|
||||
#
|
||||
@@ -357,26 +416,25 @@ LIB_EXT_VERSION= ${LIB_EXT}.${VERSION}
|
||||
|
||||
# standard tools
|
||||
#
|
||||
SHELL= /bin/sh
|
||||
SED= sed
|
||||
MAKEDEPEND= makedepend
|
||||
GREP= egrep
|
||||
CHMOD= chmod
|
||||
FMT= fmt
|
||||
SORT= sort
|
||||
CMP= cmp
|
||||
AR= ar
|
||||
RM= rm
|
||||
TOUCH= touch
|
||||
MKDIR= mkdir
|
||||
RMDIR= rmdir
|
||||
MV= mv
|
||||
CP= cp
|
||||
CO= co
|
||||
TRUE= true
|
||||
MAKE= make
|
||||
LN= ln
|
||||
AWK= awk
|
||||
CHMOD= chmod
|
||||
CMP= cmp
|
||||
CO= co
|
||||
CP= cp
|
||||
FMT= fmt
|
||||
GREP= egrep
|
||||
LN= ln
|
||||
MAKE= make
|
||||
MAKEDEPEND= makedepend
|
||||
MKDIR= mkdir
|
||||
MV= mv
|
||||
RM= rm
|
||||
RMDIR= rmdir
|
||||
SED= sed
|
||||
SORT= sort
|
||||
TOUCH= touch
|
||||
TRUE= true
|
||||
|
||||
# EXTRA_CFLAGS are flags given to ${CC} when compiling C files
|
||||
# EXTRA_LDFLAGS are flags given to ${CC} when linking progs
|
||||
@@ -391,7 +449,7 @@ AWK= awk
|
||||
# NOTE: These should be left blank in this Makefile to make it
|
||||
# easier to add stuff on the command line. If you want to
|
||||
# to change the way calc is compiled by this Makefile, change
|
||||
# the appropirate host target section below or a flag above.
|
||||
# the appropriate host target section below or a flag above.
|
||||
#
|
||||
EXTRA_CFLAGS=
|
||||
EXTRA_LDFLAGS=
|
||||
@@ -420,9 +478,9 @@ COMMON_LDFLAGS= ${EXTRA_LDFLAGS}
|
||||
# NOTE: This does not work for: make-XYZ-only and BLD_TYPE != make-XYZ-only
|
||||
#
|
||||
ifeq ($(BLD_TYPE),calc-static-only)
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CC_STATIC}
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_STATIC}
|
||||
else
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CC_SHARE}
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_SHARE}
|
||||
endif
|
||||
CFLAGS= ${ICFLAGS} ${CCOPT}
|
||||
|
||||
|
@@ -32,7 +32,7 @@ CUSTCALC_OBJ= ${REQUIRED_OBJ} ${CUSTOM_OBJ}
|
||||
#
|
||||
C_SRC= ${REQUIRED_SRC} ${CUSTOM_SRC}
|
||||
|
||||
# These .h files are used to build the dependecy list
|
||||
# These .h files are used to build the dependency list
|
||||
#
|
||||
H_SRC= ${CUSTOM_H_SRC}
|
||||
|
||||
@@ -49,7 +49,7 @@ DISTLIST= ${CUSTCALC_SRC} ${CUSTOM_CALC_FILES} ${CUSTOM_HELP} \
|
||||
#
|
||||
CALCLIBLIST= ${CUSTCALC_SRC} ${INSTALL_H_SRC} ${MAKE_FILE} HOW_TO_ADD
|
||||
|
||||
# This is the custom dynbamic shared library that is build
|
||||
# This is the custom dynamic shared library that is build
|
||||
#
|
||||
CALC_DYNAMIC_LIBCUSTCALC= libcustcalc${LIB_EXT_VERSION}
|
||||
|
||||
@@ -103,7 +103,7 @@ c_sysinfo.o: c_sysinfo.c ${MAKE_FILE}
|
||||
|
||||
###
|
||||
#
|
||||
# building calc-static and static lib*.a libraires
|
||||
# building calc-static and static lib*.a libraries
|
||||
#
|
||||
###
|
||||
|
||||
@@ -122,7 +122,7 @@ libcustcalc.a: ${CUSTCALC_OBJ} ${MAKE_FILE}
|
||||
# sub-directory called calc/lib.
|
||||
#
|
||||
# NOTE: Due to bogus shells found on one common system we must have
|
||||
# an non-emoty else clause for every if condition. *sigh*
|
||||
# an non-empty else clause for every if condition. *sigh*
|
||||
#
|
||||
##
|
||||
|
||||
@@ -161,7 +161,7 @@ Makefile.simple: ${MAKE_FILE}
|
||||
# Home grown make dependency rules. Your system make not support
|
||||
# or have the needed tools. You can ignore this section.
|
||||
#
|
||||
# We will form a skelaton tree of *.c files containing only #include "foo.h"
|
||||
# We will form a skeleton tree of *.c files containing only #include "foo.h"
|
||||
# lines and .h files containing the same lines surrounded by multiple include
|
||||
# prevention lines. This allows us to build a static depend list that will
|
||||
# satisfy all possible cpp symbol definition combinations.
|
||||
@@ -170,7 +170,7 @@ Makefile.simple: ${MAKE_FILE}
|
||||
|
||||
depend:
|
||||
${Q} if [ -f ${MAKE_FILE}.bak ]; then \
|
||||
echo "${MAKE_FILE}.bak exists, remove or move it"; \
|
||||
echo "custom/${MAKE_FILE}.bak exists, remove or move it"; \
|
||||
exit 1; \
|
||||
else \
|
||||
${TRUE}; \
|
||||
@@ -186,9 +186,7 @@ depend:
|
||||
fi; \
|
||||
done
|
||||
-${Q} for i in ${H_SRC} /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
if [ "$$i" = "/dev/null" ]; then continue; fi; \
|
||||
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
||||
echo "#if !defined($$tag)" > "skel/custom/$$i"; \
|
||||
echo "#define $$tag" >> "skel/custom/$$i"; \
|
||||
@@ -197,25 +195,25 @@ depend:
|
||||
echo '#endif /* '"$$tag"' */' >> "skel/custom/$$i"; \
|
||||
done
|
||||
${Q} (cd ..; ${MAKE} -f ${TOP_MAKE_FILE} hsrc)
|
||||
${Q} for i in `cd ..; ${MAKE} -f ${TOP_MAKE_FILE} h_list 2>&1 | \
|
||||
${SED} -e '/Entering directory/d' \
|
||||
-e '/Nothing to be done/d' \
|
||||
-e '/Leaving directory/d'` /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
||||
echo "#if !defined($$tag)" > "skel/$$i"; \
|
||||
echo "#define $$tag" >> "skel/$$i"; \
|
||||
${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
|
||||
>> "skel/$$i"; \
|
||||
echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
|
||||
done
|
||||
${MAKE} -f ../${TOP_MAKE_FILE} h_list 2>/dev/null | \
|
||||
while read i; do \
|
||||
if [ ! -f "../$$i" ]; then continue; fi; \
|
||||
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
||||
echo "#if !defined($$tag)" > "skel/$$i"; \
|
||||
echo "#define $$tag" >> "skel/$$i"; \
|
||||
${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
|
||||
>> "skel/$$i"; \
|
||||
echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
|
||||
done
|
||||
${Q} ${RM} -f skel/custom/makedep.out
|
||||
${Q} echo custom/skel formed
|
||||
${Q} echo forming custom dependency list
|
||||
${Q} :> skel/custom/makedep.out
|
||||
${Q} cd skel/custom; ${MAKEDEPEND} -I.. -w 1 -f makedep.out ${C_SRC}
|
||||
${Q} cd skel/custom; ${MAKEDEPEND} \
|
||||
-I../../.. -w 1 -f makedep.out -- \
|
||||
${CFLAGS} -- \
|
||||
${C_SRC} 2>/dev/null
|
||||
${Q} ${SED} -e 's|: ../../|: |' -E -i '' -l skel/custom/makedep.out
|
||||
-${Q} for i in ${C_SRC} /dev/null; do \
|
||||
if [ X"$$i" != X"/dev/null" ]; then \
|
||||
echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \
|
||||
@@ -230,22 +228,16 @@ depend:
|
||||
${Q} ${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' \
|
||||
${MAKE_FILE}.bak > ${MAKE_FILE}
|
||||
${Q} ${GREP} -v '^#' skel/custom/makedep.out >> ${MAKE_FILE}
|
||||
${Q} echo removing skel
|
||||
${Q} ${RM} -rf skel
|
||||
-${Q} if ${CMP} -s ${MAKE_FILE}.bak ${MAKE_FILE}; then \
|
||||
echo 'custom ${MAKE_FILE} was already up to date'; \
|
||||
echo 'custom/${MAKE_FILE} was already up to date'; \
|
||||
echo 'restoring original custom/${MAKE_FILE}'; \
|
||||
${MV} -f ${MAKE_FILE}.bak ${MAKE_FILE}; \
|
||||
else \
|
||||
${RM} -f ${MAKE_FILE}.tmp; \
|
||||
${MV} ${MAKE_FILE} ${MAKE_FILE}.tmp; \
|
||||
if [ -d RCS -a ! -w "${MAKE_FILE}" ]; then \
|
||||
${CO} -l ${MAKE_FILE}; \
|
||||
fi ;\
|
||||
${MV} ${MAKE_FILE}.tmp ${MAKE_FILE}; \
|
||||
if [ -d RCS ]; then \
|
||||
echo '****************************************************'; \
|
||||
echo 'new custom ${MAKE_FILE} formed -- you to check it in'; \
|
||||
echo '****************************************************'; \
|
||||
fi; \
|
||||
echo 'old custom/${MAKE_FILE} is now custom/${MAKE_FILE}.bak'; \
|
||||
echo 'new custom/${MAKE_FILE} formed'; \
|
||||
echo 'try: diff -u custom/${MAKE_FILE}.bak custom/${MAKE_FILE}'; \
|
||||
fi
|
||||
|
||||
##
|
||||
@@ -292,6 +284,7 @@ clobber: clean
|
||||
${RM} -f libcustcalc${LIB_EXT}
|
||||
${RM} -f libcustcalc.a
|
||||
${RM} -f libcustcalc*
|
||||
${RM} -rf skel
|
||||
${V} echo remove files that are obsolete
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
${RM} -f Makefile.simple
|
||||
@@ -479,7 +472,7 @@ uninstall:
|
||||
if [ -f "${T}${CUSTOMCALDIR}/libcustcalc.a" ]; then \
|
||||
echo "cannot uninstall ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
|
||||
else \
|
||||
echo "uninstalled ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
|
||||
echo "un-installed ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
|
||||
fi; \
|
||||
fi
|
||||
-${Q} for i in ${CUSTOM_HELP} /dev/null; do \
|
||||
@@ -491,7 +484,7 @@ uninstall:
|
||||
if [ -f "${T}${CUSTOMHELPDIR}/$$i" ]; then \
|
||||
echo "cannot uninstall ${T}${CUSTOMHELPDIR}/$$i"; \
|
||||
else \
|
||||
echo "uninstalled ${T}${CUSTOMHELPDIR}/$$i"; \
|
||||
echo "un-installed ${T}${CUSTOMHELPDIR}/$$i"; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
@@ -504,7 +497,7 @@ uninstall:
|
||||
if [ -f "${T}${CUSTOMCALDIR}/$$i" ]; then \
|
||||
echo "cannot uninstall ${T}${CUSTOMCALDIR}/$$i"; \
|
||||
else \
|
||||
echo "uninstalled ${T}${CUSTOMCALDIR}/$$i"; \
|
||||
echo "un-installed ${T}${CUSTOMCALDIR}/$$i"; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
@@ -517,7 +510,7 @@ uninstall:
|
||||
if [ -f "${T}${CUSTOMINCDIR}/$$i" ]; then \
|
||||
echo "cannot uninstall ${T}${CUSTOMINCDIR}/$$i"; \
|
||||
else \
|
||||
echo "uninstalled ${T}${CUSTOMINCDIR}/$$i"; \
|
||||
echo "un-installed ${T}${CUSTOMINCDIR}/$$i"; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
@@ -538,6 +531,7 @@ uninstall:
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
c_argv.o: ../alloc.h
|
||||
c_argv.o: ../banned.h
|
||||
c_argv.o: ../block.h
|
||||
c_argv.o: ../byteswap.h
|
||||
c_argv.o: ../calc.h
|
||||
@@ -548,6 +542,7 @@ c_argv.o: ../custom.h
|
||||
c_argv.o: ../decl.h
|
||||
c_argv.o: ../endian_calc.h
|
||||
c_argv.o: ../hash.h
|
||||
c_argv.o: ../have_ban_pragma.h
|
||||
c_argv.o: ../have_const.h
|
||||
c_argv.o: ../have_memmv.h
|
||||
c_argv.o: ../have_newstr.h
|
||||
@@ -563,6 +558,7 @@ c_argv.o: ../value.h
|
||||
c_argv.o: ../zmath.h
|
||||
c_argv.o: c_argv.c
|
||||
c_devnull.o: ../alloc.h
|
||||
c_devnull.o: ../banned.h
|
||||
c_devnull.o: ../block.h
|
||||
c_devnull.o: ../byteswap.h
|
||||
c_devnull.o: ../calcerr.h
|
||||
@@ -572,6 +568,7 @@ c_devnull.o: ../custom.h
|
||||
c_devnull.o: ../decl.h
|
||||
c_devnull.o: ../endian_calc.h
|
||||
c_devnull.o: ../hash.h
|
||||
c_devnull.o: ../have_ban_pragma.h
|
||||
c_devnull.o: ../have_const.h
|
||||
c_devnull.o: ../have_memmv.h
|
||||
c_devnull.o: ../have_newstr.h
|
||||
@@ -588,6 +585,7 @@ c_devnull.o: ../value.h
|
||||
c_devnull.o: ../zmath.h
|
||||
c_devnull.o: c_devnull.c
|
||||
c_help.o: ../alloc.h
|
||||
c_help.o: ../banned.h
|
||||
c_help.o: ../block.h
|
||||
c_help.o: ../byteswap.h
|
||||
c_help.o: ../calcerr.h
|
||||
@@ -597,6 +595,7 @@ c_help.o: ../custom.h
|
||||
c_help.o: ../decl.h
|
||||
c_help.o: ../endian_calc.h
|
||||
c_help.o: ../hash.h
|
||||
c_help.o: ../have_ban_pragma.h
|
||||
c_help.o: ../have_const.h
|
||||
c_help.o: ../have_memmv.h
|
||||
c_help.o: ../have_newstr.h
|
||||
@@ -613,6 +612,7 @@ c_help.o: ../value.h
|
||||
c_help.o: ../zmath.h
|
||||
c_help.o: c_help.c
|
||||
c_pmodm127.o: ../alloc.h
|
||||
c_pmodm127.o: ../banned.h
|
||||
c_pmodm127.o: ../block.h
|
||||
c_pmodm127.o: ../byteswap.h
|
||||
c_pmodm127.o: ../calcerr.h
|
||||
@@ -622,6 +622,7 @@ c_pmodm127.o: ../custom.h
|
||||
c_pmodm127.o: ../decl.h
|
||||
c_pmodm127.o: ../endian_calc.h
|
||||
c_pmodm127.o: ../hash.h
|
||||
c_pmodm127.o: ../have_ban_pragma.h
|
||||
c_pmodm127.o: ../have_const.h
|
||||
c_pmodm127.o: ../have_memmv.h
|
||||
c_pmodm127.o: ../have_newstr.h
|
||||
@@ -637,6 +638,7 @@ c_pmodm127.o: ../value.h
|
||||
c_pmodm127.o: ../zmath.h
|
||||
c_pmodm127.o: c_pmodm127.c
|
||||
c_pzasusb8.o: ../alloc.h
|
||||
c_pzasusb8.o: ../banned.h
|
||||
c_pzasusb8.o: ../block.h
|
||||
c_pzasusb8.o: ../byteswap.h
|
||||
c_pzasusb8.o: ../calcerr.h
|
||||
@@ -646,6 +648,7 @@ c_pzasusb8.o: ../custom.h
|
||||
c_pzasusb8.o: ../decl.h
|
||||
c_pzasusb8.o: ../endian_calc.h
|
||||
c_pzasusb8.o: ../hash.h
|
||||
c_pzasusb8.o: ../have_ban_pragma.h
|
||||
c_pzasusb8.o: ../have_const.h
|
||||
c_pzasusb8.o: ../have_memmv.h
|
||||
c_pzasusb8.o: ../have_newstr.h
|
||||
@@ -661,6 +664,7 @@ c_pzasusb8.o: ../value.h
|
||||
c_pzasusb8.o: ../zmath.h
|
||||
c_pzasusb8.o: c_pzasusb8.c
|
||||
c_register.o: ../alloc.h
|
||||
c_register.o: ../banned.h
|
||||
c_register.o: ../block.h
|
||||
c_register.o: ../byteswap.h
|
||||
c_register.o: ../calc.h
|
||||
@@ -671,6 +675,7 @@ c_register.o: ../custom.h
|
||||
c_register.o: ../decl.h
|
||||
c_register.o: ../endian_calc.h
|
||||
c_register.o: ../hash.h
|
||||
c_register.o: ../have_ban_pragma.h
|
||||
c_register.o: ../have_const.h
|
||||
c_register.o: ../have_memmv.h
|
||||
c_register.o: ../have_newstr.h
|
||||
@@ -686,6 +691,7 @@ c_register.o: ../value.h
|
||||
c_register.o: ../zmath.h
|
||||
c_register.o: c_register.c
|
||||
c_sysinfo.o: ../alloc.h
|
||||
c_sysinfo.o: ../banned.h
|
||||
c_sysinfo.o: ../block.h
|
||||
c_sysinfo.o: ../byteswap.h
|
||||
c_sysinfo.o: ../calc.h
|
||||
@@ -698,6 +704,7 @@ c_sysinfo.o: ../decl.h
|
||||
c_sysinfo.o: ../endian_calc.h
|
||||
c_sysinfo.o: ../fposval.h
|
||||
c_sysinfo.o: ../hash.h
|
||||
c_sysinfo.o: ../have_ban_pragma.h
|
||||
c_sysinfo.o: ../have_const.h
|
||||
c_sysinfo.o: ../have_memmv.h
|
||||
c_sysinfo.o: ../have_newstr.h
|
||||
@@ -718,6 +725,7 @@ c_sysinfo.o: ../zrand.h
|
||||
c_sysinfo.o: ../zrandom.h
|
||||
c_sysinfo.o: c_sysinfo.c
|
||||
custtbl.o: ../alloc.h
|
||||
custtbl.o: ../banned.h
|
||||
custtbl.o: ../block.h
|
||||
custtbl.o: ../byteswap.h
|
||||
custtbl.o: ../calcerr.h
|
||||
@@ -727,6 +735,7 @@ custtbl.o: ../custom.h
|
||||
custtbl.o: ../decl.h
|
||||
custtbl.o: ../endian_calc.h
|
||||
custtbl.o: ../hash.h
|
||||
custtbl.o: ../have_ban_pragma.h
|
||||
custtbl.o: ../have_const.h
|
||||
custtbl.o: ../have_memmv.h
|
||||
custtbl.o: ../have_newstr.h
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_argv - a custom function display info about its args
|
||||
*
|
||||
* Copyright (C) 1999-2006 Landon Curt Noll
|
||||
* Copyright (C) 1999-2006,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -38,6 +38,10 @@
|
||||
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* c_argv - a custom function display info about its args
|
||||
*
|
||||
@@ -49,7 +53,7 @@
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
VALUE
|
||||
c_argv(char UNUSED *name, int count, VALUE **vals)
|
||||
c_argv(char *UNUSED(name), int count, VALUE **vals)
|
||||
{
|
||||
VALUE result; /* what we will return */
|
||||
ZVALUE zfilelen; /* length of a file as a ZVALUE */
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_devnull - a custom function that does nothing
|
||||
*
|
||||
* Copyright (C) 1999-2004 Landon Curt Noll
|
||||
* Copyright (C) 1999-2004,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -39,6 +39,9 @@
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* c_devnull - a custom function that does nothing
|
||||
*
|
||||
@@ -47,7 +50,7 @@
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
VALUE
|
||||
c_devnull(char UNUSED *name, int UNUSED count, VALUE UNUSED **vals)
|
||||
c_devnull(char *UNUSED(name), int UNUSED(count), VALUE **UNUSED(vals))
|
||||
{
|
||||
VALUE result; /* what we will return */
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_help - custom help function
|
||||
*
|
||||
* Copyright (C) 1999-2004 Landon Curt Noll
|
||||
* Copyright (C) 1999-2004,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -39,6 +39,9 @@
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* c_help - custom help function
|
||||
*
|
||||
@@ -58,7 +61,7 @@
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
VALUE
|
||||
c_help(char UNUSED *name, int UNUSED count, VALUE **vals)
|
||||
c_help(char *UNUSED(name), int UNUSED(count), VALUE **vals)
|
||||
{
|
||||
VALUE result; /* what we will return */
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_pmodm127 - calculate q mod 2^(2^127-1)
|
||||
*
|
||||
* Copyright (C) 2004-2007 Landon Curt Noll
|
||||
* Copyright (C) 2004-2007,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -35,6 +35,10 @@
|
||||
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/* 2^255 */
|
||||
STATIC HALF h255[] = {
|
||||
#if BASEB == 32
|
||||
@@ -71,7 +75,7 @@ STATIC ZVALUE lastmodinv[1];
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
VALUE
|
||||
c_pmodm127(char UNUSED *name, int UNUSED count, VALUE **vals)
|
||||
c_pmodm127(char *UNUSED(name), int UNUSED(count), VALUE **vals)
|
||||
{
|
||||
VALUE result; /* what we will return */
|
||||
ZVALUE q; /* test factor */
|
||||
@@ -124,7 +128,7 @@ c_pmodm127(char UNUSED *name, int UNUSED count, VALUE **vals)
|
||||
result.v_type = V_NUM;
|
||||
|
||||
/*
|
||||
* compute 2^(2^127-1) mod q by modular exponentation
|
||||
* compute 2^(2^127-1) mod q by modular exponentiation
|
||||
*
|
||||
* We implement the following calc code in C:
|
||||
*
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_pzasusb8 - print numereator as a string of USB8s
|
||||
* c_pzasusb8 - print numerator as a string of USB8s
|
||||
*
|
||||
* Copyright (C) 1999-2004 Ernest Bowen
|
||||
* Copyright (C) 1999-2004,2021 Ernest Bowen
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -35,8 +35,12 @@
|
||||
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* c_pzasusb8 - print numereator as a string of USB8s
|
||||
* c_pzasusb8 - print numerator as a string of USB8s
|
||||
*
|
||||
* given:
|
||||
* count = 1;
|
||||
@@ -47,7 +51,7 @@
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
VALUE
|
||||
c_pzasusb8(char UNUSED *name, int UNUSED count, VALUE **vals)
|
||||
c_pzasusb8(char *UNUSED(name), int UNUSED(count), VALUE **vals)
|
||||
{
|
||||
VALUE result; /* what we will return */
|
||||
ZVALUE z; /* numerator of the value */
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_register - set or print a custom register value
|
||||
*
|
||||
* Copyright (C) 2007 Landon Curt Noll
|
||||
* Copyright (C) 2007,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -39,6 +39,9 @@
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* registers
|
||||
*/
|
||||
@@ -76,7 +79,7 @@ init_custreg(void)
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
VALUE
|
||||
c_register(char UNUSED *name, int count, VALUE **vals)
|
||||
c_register(char *UNUSED(name), int count, VALUE **vals)
|
||||
{
|
||||
VALUE result; /* what we will return */
|
||||
long reg; /* register number */
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_sysinfo - names and values of selected #defines
|
||||
*
|
||||
* Copyright (C) 1999-2007 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -57,6 +57,9 @@
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* sys_info - names and values of selected #defines
|
||||
*/
|
||||
@@ -177,15 +180,15 @@ STATIC struct infoname sys_info[] = {
|
||||
(FULL)MAXUFULL},
|
||||
{"MAXULONG", "largest unsigned long val", NULL,
|
||||
(FULL)MAXULONG},
|
||||
{"MAX_MAP_PRIME", "larest prime in pr_map", NULL,
|
||||
{"MAX_MAP_PRIME", "largest prime in pr_map", NULL,
|
||||
(FULL)MAX_MAP_PRIME},
|
||||
{"MAX_MAP_VAL", "larest bit in pr_map", NULL,
|
||||
{"MAX_MAP_VAL", "largest bit in pr_map", NULL,
|
||||
(FULL)MAX_MAP_VAL},
|
||||
{"MAX_PFACT_VAL", "max x, for which pfact(x) is a long", NULL,
|
||||
(FULL)MAX_PFACT_VAL},
|
||||
{"MAX_SM_PRIME", "larest 32 bit prime", NULL,
|
||||
{"MAX_SM_PRIME", "largest 32 bit prime", NULL,
|
||||
(FULL)MAX_SM_PRIME},
|
||||
{"MAX_SM_VAL", "larest 32 bit value", NULL,
|
||||
{"MAX_SM_VAL", "largest 32 bit value", NULL,
|
||||
(FULL)MAX_SM_VAL},
|
||||
{"MUL_ALG2", "default size for alternative multiply", NULL,
|
||||
(FULL)MUL_ALG2},
|
||||
@@ -266,7 +269,7 @@ S_FUNC void dump_mening_value(void); /* custom("sysinfo", 2) */
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
VALUE
|
||||
c_sysinfo(char UNUSED *name, int count, VALUE **vals)
|
||||
c_sysinfo(char *UNUSED(name), int count, VALUE **vals)
|
||||
{
|
||||
VALUE result; /* what we will return */
|
||||
struct infoname *p; /* current infoname */
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* custtbl - custom interface table
|
||||
*
|
||||
* Copyright (C) 1999-2007 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -30,6 +30,10 @@
|
||||
#include "value.h"
|
||||
#include "custom.h"
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/*
|
||||
* NOTE: See the file CUSTOM for instructions on how to add
|
||||
* custom functions.
|
||||
@@ -40,7 +44,7 @@
|
||||
|
||||
|
||||
/*
|
||||
* add your forward custom function declaractions here
|
||||
* add your forward custom function declarations here
|
||||
*
|
||||
* Declare custom functions as follows:
|
||||
*
|
||||
|
@@ -10,7 +10,7 @@ TYPES
|
||||
return null
|
||||
|
||||
DESCRIPTION
|
||||
This custom function does nothing. It is intented for testing
|
||||
This custom function does nothing. It is intended for testing
|
||||
of the general custom interface.
|
||||
|
||||
EXAMPLE
|
||||
@@ -26,7 +26,7 @@ LIBRARY
|
||||
SEE ALSO
|
||||
custom
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -25,7 +25,7 @@ DESCRIPTION
|
||||
SPECIAL NOTE:
|
||||
|
||||
Can you find a value, q, for which this custom function returns 1?
|
||||
If you do, send the value of q to chongo using the EMail address
|
||||
If you do, send the value of q to chongo using the Email address
|
||||
found at:
|
||||
|
||||
http://www.isthe.com/chongo/address.html
|
||||
@@ -51,7 +51,7 @@ LIBRARY
|
||||
SEE ALSO
|
||||
custom
|
||||
|
||||
## Copyright (C) 2004 Landon Curt Noll
|
||||
## Copyright (C) 2004,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -21,7 +21,7 @@ DESCRIPTION
|
||||
|
||||
for details.
|
||||
|
||||
This custom function is intented for testing of the general
|
||||
This custom function is intended for testing of the general
|
||||
custom interface.
|
||||
|
||||
EXAMPLE
|
||||
@@ -49,7 +49,7 @@ LIBRARY
|
||||
SEE ALSO
|
||||
custom
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* pzasusb8 - print numereator as a string of USB8s
|
||||
* pzasusb8 - print numerator as a string of USB8s
|
||||
*
|
||||
* Copyright (C) 1999,2004 Ernest Bowen and Landon Curt Noll
|
||||
* Copyright (C) 1999,2004,2021 Ernest Bowen and Landon Curt Noll
|
||||
*
|
||||
* Primary author: Ernest Bowen
|
||||
*
|
||||
|
@@ -20,14 +20,14 @@ DESCRIPTION
|
||||
|
||||
The number of custom registers is defined at compile time.
|
||||
There will be at least 32 registers although there could be more
|
||||
added in the future. It may be deterimed by:
|
||||
added in the future. It may be determined by:
|
||||
|
||||
custom("sysinfo", "REGNUM_MAX")
|
||||
|
||||
The custom registers are initialized to 0 by the internal
|
||||
function libcalc_call_me_first() during calc startup.
|
||||
|
||||
This custom interface is intented to make it easier to interface
|
||||
This custom interface is intended to make it easier to interface
|
||||
with special purpose hardware.
|
||||
|
||||
EXAMPLE
|
||||
@@ -46,7 +46,7 @@ EXAMPLE
|
||||
LIMITS
|
||||
calc must be built with ALLOW_CUSTOM= -DCUSTOM
|
||||
calc must be executed with a -C arg.
|
||||
The regnum numbe bee an integer >= 0 and < REGNUM_MAX where
|
||||
The regnum number bee an integer >= 0 and < REGNUM_MAX where
|
||||
REGNUM_MAX is a compile time constant that is >= 32.
|
||||
|
||||
LIBRARY
|
||||
@@ -55,7 +55,7 @@ LIBRARY
|
||||
SEE ALSO
|
||||
custom
|
||||
|
||||
## Copyright (C) 2007 Landon Curt Noll
|
||||
## Copyright (C) 2007,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -13,7 +13,7 @@ DESCRIPTION
|
||||
|
||||
This custom function will return the value certain selected #define
|
||||
values. The infoname arg must be a string that matches the given
|
||||
#define name. For conveience, the case infoname does not matter,
|
||||
#define name. For convenience, the case infoname does not matter,
|
||||
so "baseb" and "BASEB" refer to the same #define value.
|
||||
|
||||
The return value is either an integer or a string depending on
|
||||
@@ -53,7 +53,7 @@ LIBRARY
|
||||
SEE ALSO
|
||||
custom
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
2
decl.h
2
decl.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* decl - variable and function declaration macros
|
||||
*
|
||||
* Copyright (C) 2007,2014 Landon Curt Noll
|
||||
* Copyright (C) 2007,2014,2021 Landon Curt Noll
|
||||
*
|
||||
* Primary author: Landon Curt Noll
|
||||
*
|
||||
|
8
endian.c
8
endian.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* endian - determine the byte order of a long on your machine
|
||||
*
|
||||
* Copyright (C) 1999-2013 Landon Curt Noll
|
||||
* Copyright (C) 1999-2013,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -25,7 +25,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Big Endian: Amdahl, 68k, Pyramid, Mips, Sparc, ...
|
||||
* Big Endian: Amdahl, 68k, Pyramid, MIPS, Sparc, ...
|
||||
* Little Endian: Vax, 32k, Spim (Dec Mips), i386, i486, ...
|
||||
*/
|
||||
|
||||
@@ -42,6 +42,10 @@
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
/* byte order array */
|
||||
char byte[8] = { (char)0x12, (char)0x36, (char)0x48, (char)0x59,
|
||||
(char)0x01, (char)0x23, (char)0x45, (char)0x67 };
|
||||
|
90
file.c
90
file.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* file - file I/O routines callable by users
|
||||
*
|
||||
* Copyright (C) 1999-2007,2018 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2018,2021 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -37,19 +37,27 @@
|
||||
#endif /* HAVE_UNISTD_H */
|
||||
#include <ctype.h>
|
||||
#include "calc.h"
|
||||
#include "alloc.h"
|
||||
#include "longbits.h"
|
||||
#include "have_fpos.h"
|
||||
#include "have_fpos_pos.h"
|
||||
#include "fposval.h"
|
||||
#include "file.h"
|
||||
#include "calcerr.h"
|
||||
#include "strl.h"
|
||||
|
||||
#if defined(_WIN32)
|
||||
# include <io.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
#define READSIZE 1024 /* buffer size for reading */
|
||||
|
||||
#define MIN(a,b) (((a) <= (b)) ? (a) : (b))
|
||||
|
||||
/*
|
||||
* external STDIO functions
|
||||
*/
|
||||
@@ -97,7 +105,7 @@ S_FUNC void fskipnum(FILE *fp);
|
||||
|
||||
|
||||
/*
|
||||
* file_init - perform needed initilization work
|
||||
* file_init - perform needed initialization work
|
||||
*
|
||||
* On some systems, one cannot initialize a pointer to a FILE *.
|
||||
* This routine, called once at startup is a work-a-round for
|
||||
@@ -139,6 +147,7 @@ file_init(void)
|
||||
files[idnum].reading = TRUE;
|
||||
files[idnum].writing = TRUE;
|
||||
files[idnum].action = 0;
|
||||
memset(files[idnum].mode, 0, MODE_LEN+1);
|
||||
/*
|
||||
* stat the descriptor to see what we have
|
||||
*/
|
||||
@@ -146,16 +155,19 @@ file_init(void)
|
||||
size_t snprintf_len; /* malloced snprintf length */
|
||||
fp = (FILE *) fdopen(i,"r+"); /*guess mode*/
|
||||
if (fp) {
|
||||
strcpy(files[idnum].mode, "r+");
|
||||
strlcpy(files[idnum].mode, "r+",
|
||||
sizeof(files[idnum].mode));
|
||||
} else {
|
||||
fp = (FILE *) fdopen(i, "r");
|
||||
if (fp) {
|
||||
strcpy(files[idnum].mode, "r");
|
||||
strlcpy(files[idnum].mode, "r",
|
||||
sizeof(files[idnum].mode));
|
||||
files[idnum].writing = FALSE;
|
||||
} else {
|
||||
fp = (FILE *) fdopen(i, "w");
|
||||
if (fp) {
|
||||
strcpy(files[idnum].mode, "w");
|
||||
strlcpy(files[idnum].mode, "w",
|
||||
sizeof(files[idnum].mode));
|
||||
files[idnum].reading = FALSE;
|
||||
}
|
||||
else
|
||||
@@ -206,10 +218,14 @@ S_FUNC void
|
||||
init_fileio(FILEIO *fiop, char *name, char *mode,
|
||||
struct stat *sbufp, FILEID id, FILE *fp)
|
||||
{
|
||||
char modestr[sizeof(fiop->mode)]; /* mode [rwa]b?\+? */
|
||||
size_t namelen; /* length of name */
|
||||
char modestr[MODE_LEN+1]; /* mode [rwa]b?\+? */
|
||||
size_t namelen; /* length of name */
|
||||
|
||||
/* clear modestr */
|
||||
memset(modestr, 0, sizeof(modestr));
|
||||
|
||||
/* allocate filename if requested */
|
||||
namelen = 0;
|
||||
if (name != NULL) {
|
||||
namelen = strlen(name);
|
||||
fiop->name = (char *)malloc(namelen + 1);
|
||||
@@ -221,7 +237,7 @@ init_fileio(FILEIO *fiop, char *name, char *mode,
|
||||
|
||||
/* initialize FILEIO structure */
|
||||
if (name != NULL) {
|
||||
strncpy(fiop->name, name, namelen+1);
|
||||
strlcpy(fiop->name, name, namelen+1);
|
||||
}
|
||||
fiop->id = id;
|
||||
fiop->fp = fp;
|
||||
@@ -232,13 +248,13 @@ init_fileio(FILEIO *fiop, char *name, char *mode,
|
||||
fiop->appending = FALSE;
|
||||
fiop->binary = FALSE;
|
||||
fiop->action = 0;
|
||||
fiop->mode[0] = '\0';
|
||||
memset(fiop->mode, 0, sizeof(fiop->mode));
|
||||
|
||||
/*
|
||||
* determine file open mode
|
||||
*
|
||||
* While a leading 'r' is for reading and a leading 'w' is
|
||||
* for writing, the presense of a '+' in the string means
|
||||
* for writing, the presence of a '+' in the string means
|
||||
* both reading and writing. A leading 'a' means append
|
||||
* which is writing.
|
||||
*/
|
||||
@@ -246,65 +262,65 @@ init_fileio(FILEIO *fiop, char *name, char *mode,
|
||||
if (mode[0] == 'r') {
|
||||
|
||||
/* note read mode */
|
||||
strcpy(modestr, "r");
|
||||
strlcpy(modestr, "r", sizeof(modestr));
|
||||
fiop->reading = TRUE;
|
||||
|
||||
/* note binary mode even though mode is not used / ignored */
|
||||
if (strchr(mode, 'b') != NULL) {
|
||||
strcat(modestr, "b");
|
||||
strlcat(modestr, "b", sizeof(modestr));
|
||||
}
|
||||
|
||||
/* note if reading and writing */
|
||||
if (strchr(mode, '+') != NULL) {
|
||||
fiop->writing = TRUE;
|
||||
strcat(modestr, "+");
|
||||
strlcat(modestr, "+", sizeof(modestr));
|
||||
}
|
||||
|
||||
/* canonicalize write modes */
|
||||
} else if (mode[0] == 'w') {
|
||||
|
||||
/* note write mode */
|
||||
strcpy(modestr, "w");
|
||||
strlcpy(modestr, "w", sizeof(modestr));
|
||||
fiop->writing = TRUE;
|
||||
|
||||
/* note binary mode even though mode is not used / ignored */
|
||||
if (strchr(mode, 'b') != NULL) {
|
||||
strcat(modestr, "b");
|
||||
strlcat(modestr, "b", sizeof(modestr));
|
||||
}
|
||||
|
||||
/* note if reading and writing */
|
||||
if (strchr(mode, '+') != NULL) {
|
||||
fiop->reading = TRUE;
|
||||
strcat(modestr, "+");
|
||||
strlcat(modestr, "+", sizeof(modestr));
|
||||
}
|
||||
|
||||
/* canonicalize append modes */
|
||||
} else if (mode[0] == 'a') {
|
||||
|
||||
/* note append mode */
|
||||
strcpy(modestr, "a");
|
||||
strlcpy(modestr, "a", sizeof(modestr));
|
||||
fiop->writing = TRUE;
|
||||
fiop->appending = TRUE;
|
||||
|
||||
/* note binary mode even though mode is not used / ignored */
|
||||
if (strchr(mode, 'b') != NULL) {
|
||||
strcat(modestr, "b");
|
||||
strlcat(modestr, "b", sizeof(modestr));
|
||||
}
|
||||
|
||||
/* note if reading and writing */
|
||||
if (strchr(mode, '+') != NULL) {
|
||||
fiop->reading = TRUE;
|
||||
strcat(modestr, "+");
|
||||
strlcat(modestr, "+", sizeof(modestr));
|
||||
}
|
||||
|
||||
/* canonicalize no I/O modes */
|
||||
} else {
|
||||
modestr[0] = '\0';
|
||||
}
|
||||
modestr[sizeof(modestr)-1] = '\0'; /* firewall */
|
||||
modestr[MODE_LEN] = '\0'; /* firewall */
|
||||
|
||||
/* record canonical open mode string */
|
||||
strncpy(fiop->mode, modestr, sizeof(fiop->mode));
|
||||
strlcpy(fiop->mode, modestr, sizeof(fiop->mode));
|
||||
}
|
||||
|
||||
|
||||
@@ -1021,6 +1037,7 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
|
||||
switch (ch) {
|
||||
case 's':
|
||||
printstring = TRUE;
|
||||
/*FALLTHRU*/
|
||||
case 'c':
|
||||
printchar = TRUE;
|
||||
case 'd':
|
||||
@@ -1405,7 +1422,7 @@ z2filepos(ZVALUE zpos)
|
||||
/*
|
||||
* firewall
|
||||
*/
|
||||
zpos.sign = 0; /* deal only with the absolue value */
|
||||
zpos.sign = 0; /* deal only with the absolute value */
|
||||
|
||||
/*
|
||||
* quick return if the position can fit into a long
|
||||
@@ -1413,23 +1430,22 @@ z2filepos(ZVALUE zpos)
|
||||
#if FILEPOS_BITS == FULL_BITS
|
||||
/* ztofull puts the value into native byte order */
|
||||
pos = ztofull(zpos);
|
||||
/* on some hosts, FILEPOS is not a scalar */
|
||||
memset(&ret, 0, sizeof(FILEPOS));
|
||||
memcpy((void *)&ret, (void *)&pos, sizeof(FILEPOS));
|
||||
memset(&ret, 0, sizeof(ret)); /* FILEPOS could be non-scalar */
|
||||
memcpy((void *)&ret, (void *)&pos, MIN(sizeof(ret), sizeof(pos)));
|
||||
return ret;
|
||||
#elif FILEPOS_BITS < FULL_BITS
|
||||
/* ztofull puts the value into native byte order */
|
||||
pos = ztolong(zpos);
|
||||
/* on some hosts, FILEPOS is not a scalar */
|
||||
memset(&ret, 0, sizeof(FILEPOS));
|
||||
memcpy((void *)&ret, (void *)&pos, sizeof(pos));
|
||||
memset(&ret, 0, sizeof(ret)); /* FILEPOS could be non-scalar */
|
||||
memcpy((void *)&ret, (void *)&pos, MIN(sizeof(ret), sizeof(pos)));
|
||||
return ret;
|
||||
#else /* FILEPOS_BITS > FULL_BITS */
|
||||
if (!zgtmaxfull(zpos)) {
|
||||
/* ztofull puts the value into native byte order */
|
||||
pos = ztofull(zpos);
|
||||
memset(&ret, 0, sizeof(FILEPOS));
|
||||
memcpy((void *)&ret, (void *)&pos, sizeof(pos));
|
||||
memset(&ret, 0, sizeof(ret)); /* FILEPOS could be non-scalar */
|
||||
memcpy((void *)&ret, (void *)&pos,
|
||||
MIN(sizeof(ret), sizeof(pos)));
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1438,11 +1454,13 @@ z2filepos(ZVALUE zpos)
|
||||
*/
|
||||
if (zpos.len >= FILEPOS_BITS/BASEB) {
|
||||
/* copy the lower FILEPOS_BITS of the ZVALUE */
|
||||
memcpy(&tmp, zpos.v, sizeof(FILEPOS));
|
||||
memset(&tmp, 0, sizeof(tmp)); /* FILEPOS could be non-scalar */
|
||||
memcpy(&tmp, zpos.v, MIN(sizeof(tmp), FILEPOS_LEN);
|
||||
} else {
|
||||
/* copy what bits we can into the temp value */
|
||||
memset(&tmp, 0, sizeof(FILEPOS));
|
||||
memcpy(&tmp, zpos.v, zpos.len*BASEB/8);
|
||||
memset(&tmp, 0, sizeof(tmp)); /* FILEPOS could be non-scalar */
|
||||
memcpy(&tmp, zpos.v, MIN(sizeof(tmp),
|
||||
MIN(zpos.len*BASEB/8, FILEPOS_LEN)));
|
||||
}
|
||||
/* swap into native byte order */
|
||||
SWAP_HALF_IN_FILEPOS(&ret, &tmp);
|
||||
@@ -1645,7 +1663,7 @@ set_open_pos(FILE *fp, ZVALUE zpos)
|
||||
}
|
||||
|
||||
/*
|
||||
* return sucess
|
||||
* return success
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
@@ -2602,7 +2620,7 @@ isattyid(FILEID id)
|
||||
* given:
|
||||
* id FILEID to search
|
||||
* str string to look for
|
||||
* pos file postion to start at (NULL => current position)
|
||||
* pos file position to start at (NULL => current position)
|
||||
*
|
||||
* returns:
|
||||
* EOF if system error
|
||||
@@ -2612,7 +2630,7 @@ isattyid(FILEID id)
|
||||
*
|
||||
* XXX - This search is a translation of the original search that did not
|
||||
* work with large files. The search algorithm used is slow and
|
||||
* should be spead up much more.
|
||||
* should be speed up much more.
|
||||
*/
|
||||
int
|
||||
fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res)
|
||||
|
7
file.h
7
file.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* file - file I/O routines callable by users
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2014,2021 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -41,6 +41,7 @@
|
||||
/*
|
||||
* Definition of opened files.
|
||||
*/
|
||||
#define MODE_LEN (sizeof("rb+")-1)
|
||||
typedef struct {
|
||||
FILEID id; /* id to identify this file */
|
||||
FILE *fp; /* real file structure for I/O */
|
||||
@@ -52,7 +53,7 @@ typedef struct {
|
||||
BOOL appending; /* TRUE if also opened for appending */
|
||||
BOOL binary; /* TRUE if binary mode - mode ignored/unused */
|
||||
char action; /* most recent use for 'r', 'w' or 0 */
|
||||
char mode[sizeof("rb+")+1];/* open mode */
|
||||
char mode[MODE_LEN+1]; /* open mode */
|
||||
} FILEIO;
|
||||
|
||||
|
||||
@@ -63,7 +64,7 @@ typedef struct {
|
||||
* Seek loc bytes from the beginning of the open file, stream.
|
||||
*
|
||||
* f_tell(FILE *stream, FILEPOS *loc)
|
||||
* Set loc to bytes from the beinning of the open file, stream.
|
||||
* Set loc to bytes from the beginning of the open file, stream.
|
||||
*
|
||||
* We assume that if your system does not have fgetpos/fsetpos,
|
||||
* then it will have a FILEPOS that is a scalar type (e.g., long).
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user