Compare commits

...

25 Commits

Author SHA1 Message Date
Landon Curt Noll
ac0d84eef8 Release v2.12.9.0
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.
2021-03-11 01:54:28 -08:00
Landon Curt Noll
9b4580d861 Fix typo in make depend messages 2021-03-07 02:37:59 -08:00
Landon Curt Noll
2085361df1 Fix make depend plus make depend Makefile changes 2021-03-07 02:03:28 -08:00
Landon Curt Noll
bf4657c138 Cleanup of Makefiles
Fixed Makefile dependenies 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.
2021-03-07 01:26:40 -08:00
Landon Curt Noll
1b5636afed Use ${ECHON} for when /bin/echo -n is needed 2021-03-06 22:21:36 -08:00
Landon Curt Noll
7eba99ac29 Add notes about unexpeded things in using calc 2021-03-06 22:12:14 -08:00
Landon Curt Noll
de6474bf28 Declare SHELL at makefile top, sort and fix standard tool list in Makefiles 2021-03-06 22:09:10 -08:00
Landon Curt Noll
55bc690cd1 Fix dependencies for args.h 2021-03-06 21:00:45 -08:00
Landon Curt Noll
0aca07d278 Release 2.12.8.2
The following are the changes in this release:

    Calc can now correctly compile without CUSTOM being defined,
    thanks to a report by <GitHub user barsnick>.
2021-02-20 09:27:50 -08:00
Landon Curt Noll
1ab3b2c313 Restore ability to compile calc without -DCUSTOM 2021-02-20 09:25:48 -08:00
Landon Curt Noll
64e2c6a262 Release 2.12.8.1
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.
2021-02-15 22:53:22 -08:00
Landon Curt Noll
eac02835ed Test pre-release of 2.12.8.1 2021-02-15 22:33:13 -08:00
Landon Curt Noll
33657bb2cc Test pre-release of 2.12.8.1 2021-02-15 22:32:27 -08:00
Landon Curt Noll
8af0b351ae Release 2.12.8.1
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.
2021-02-15 22:21:02 -08:00
Landon Curt Noll
3260f90a73 Changed default MANDIR to make it easier to install on macOS 11 2021-02-12 23:16:26 -08:00
Landon Curt Noll
b7e15195f9 Release 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
2021-02-12 22:35:46 -08:00
Landon Curt Noll
c02725f036 Update copyright date to 2021 for all prev typo fixes 2021-02-12 22:27:51 -08:00
Landon Curt Noll
507fe026e5 Fix many spelling errors 2021-02-12 22:09:47 -08:00
Landon Curt Noll
486f4c5626 Update a few copyright years to 2021 2021-02-12 16:07:00 -08:00
Landon Curt Noll
91991bb729 Checkpoint on calc version 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 compliation
    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 QUESIONS help file.

    If the environment variable $CALCHELP is defined and is non-empty,
    then calc help files will be in the direcgory 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 direcgory
    by the $CALCCUSTOMHELP environment variable.

    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
2021-02-12 15:50:39 -08:00
Landon Curt Noll
71a116ca6f Fix gcc/9.3.1 and gcc/10.2.1 errors and warnings 2021-02-04 17:20:20 -08:00
Landon Curt Noll
8b7e01f426 Added missing malloc failure checks 2021-02-04 15:28:51 -08:00
Landon Curt Noll
229345ade8 Release 2.12.7.6
The following are the changes in this release:

    The missing cscript/square.calc file has been restored.
2021-02-03 13:03:50 -08:00
Landon Curt Noll
0f902b95cf Clarify when factor() builtin returns 1
Clarify that the factor() builtin return 1
if it does not find a factor below the limit.
2021-02-03 12:45:10 -08:00
Landon Curt Noll
8684e1be9c Fix for missing cscript/simple.calc in tarball 2021-02-03 12:44:11 -08:00
225 changed files with 5078 additions and 2541 deletions

7
.gitignore vendored
View File

@@ -33,6 +33,7 @@ custom/libcustcalc*
endian endian
endian_calc.h endian_calc.h
fposval.h fposval.h
have_ban_pragma.h
have_const.h have_const.h
have_fpos.h have_fpos.h
have_fpos_pos.h have_fpos_pos.h
@@ -49,6 +50,8 @@ have_stdlib.h
have_stdvs have_stdvs
have_strdup.h have_strdup.h
have_string.h have_string.h
have_strlcat.h
have_strlcpy.h
have_times.h have_times.h
have_uid_t.h have_uid_t.h
have_unistd.h have_unistd.h
@@ -65,6 +68,7 @@ help/bugs
help/builtin help/builtin
help/change help/change
help/changes help/changes
help/contrib
help/copy help/copy
help/cscript help/cscript
help/custom_cal help/custom_cal
@@ -76,6 +80,8 @@ help/funclist.c
help/libcalc help/libcalc
help/man help/man
help/new_custom help/new_custom
help/question
help/questions
help/resource help/resource
help/type help/type
help/usage help/usage
@@ -85,6 +91,7 @@ longbits
longbits.h longbits.h
sample_many sample_many
sample_rand sample_rand
tags
terminal.h terminal.h
ver_calc ver_calc

154
BUGS
View File

@@ -1,12 +1,12 @@
If you notice something wrong, strange or broken, try rereading: If you notice something wrong, strange or broken, try rereading:
README.FIRST README.FIRST
HOWTO.INSTALL HOWTO.INSTALL
BUGS (this file) BUGS (this file)
If that does not help, cd to the calc source directory and try: If that does not help, cd to the calc source directory and try:
make check make check
Look at the end of the output, it should say something like: Look at the end of the output, it should say something like:
@@ -15,67 +15,108 @@ Look at the end of the output, it should say something like:
If it does not, then something is really broken! 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 If you made and modifications to calc beyond the simple Makefile
configuration, try backing them out and see if things get better. configuration, try backing them out and see if things get better.
To be sure that your version of calc is up to date, check out: 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.
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, The BEST WAY TO SEND IN A BUG REPORT is via calc GitHub issue URL:
then it may be time to send in a bug report. You can send bug
and bug fixes reports to:
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 If you don't see your issue addressed, then on the above
following phase in your EMail Subject line: 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 If you prefer to not use GitHub, then you
to the calc-tester mailing list (see below) and then to may send bug and bug fixes reports to:
send your report to that mailing list as a wider set calc
testers may be able to help you.
When you send your report, please include the following information: calc-bugrept-mail at asthe dot com
* a description of the problem NOTE: Remove spaces and replace 'at' with @, 'dot' with .
* 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:
make debug > debug.out 2>&1 (sh, ksh, bash users) NOTE: This replaces the old calc-bugs at asthe dot com address.
make debug >& debug.out (csh, tcsh users)
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). 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. The output of the alg_config.cal resource file is bogus.
We would welcome a replacement for this code. We would welcome a replacement for this code.
@@ -130,7 +171,7 @@ Known bugs:
We are sure some more bugs exist. When you find them, please let 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 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.
=-= =-=
@@ -183,32 +224,7 @@ mis-features in calc:
=-= =-=
To subscribe to the calc-tester mailing list, visit the following URL: ## Copyright (C) 1999-2014,2021 Landon Curt Noll
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
## ##
## Calc is open software; you can redistribute it and/or modify it under ## 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 ## the terms of the version 2.1 of the GNU Lesser General Public License

238
CHANGES
View File

@@ -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 & 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 NL. The code in 2.12.7.0 is correct. The CHANGE notes should
@@ -47,14 +236,14 @@ The following are the changes from calc version 2.12.7.1 to date:
Copied missing description lines from help/intro to README.md Copied missing description lines from help/intro to README.md
"What is calc?" section. <<GitHub guilhermgonzaga>> "What is calc?" section. <<GitHub guilhermgonzaga>>
GCC 7 added a warning on fall throughs in case statements. It's 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 enabled by -Wextra and treated as an error due to -Wall so it
breaks compilation. See -Wimplicit-fallthrough in the GCC breaks compilation. See -Wimplicit-fallthrough in the GCC
manual. The default value is 3, which means a comment matching manual. The default value is 3, which means a comment matching
some specific regexes is enough to disable the warning. some specific regexes is enough to disable the warning.
Fixed spaces vs tabs and use FALLTHRU as it's used elsewhere. Fixed spaces vs tabs and use FALLTHRU as it's used elsewhere.
Fixed one FALLTHRU comment that was inconsistent with others. Fixed one FALLTHRU comment that was inconsistent with others.
<<thanks jcul>> <<GitHub jcul>>
Fixed minor typo on help/power. <<GitHub thegithubr>> Fixed minor typo on help/power. <<GitHub thegithubr>>
@@ -64,10 +253,12 @@ The following are the changes from calc version 2.12.7.1 to date:
by the $CALCHISTFILE environment variable. by the $CALCHISTFILE environment variable.
Calc as defined 0^0 as 1. However in the past, 0 raised to Calc as defined 0^0 as 1. However in the past, 0 raised to
an expression that evaluted to zero returned 1. The result an expression that evaluated to zero returned 1. The result
was that 0^0 was different than 0^(6-6) or even 0^(0). 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. 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: The following are the changes from calc version 2.12.6.10: to 2.12.7.0:
@@ -128,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, Added regression tests 3729 thru 3732 to test E_TAN3, E_COT3,
E_SEC3 and E_CSC3 respectively. 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. 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: /usr/include. The INCDIR for macOS uses:
INCDIR= $(shell xcrun --show-sdk-path --sdk macosx)/usr/include INCDIR= $(shell xcrun --show-sdk-path --sdk macosx)/usr/include
@@ -185,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 Fixed an error message buffer overflow thanks to a report by
Frank Peters <nlp at northernlightsphoto dot biz>. 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 use of the C funcion vsprintf() with vsnprintf().
Replaced all DONT_HAVE_VSPRINTF with DONT_HAVE_VSNPRINTF. Replaced all DONT_HAVE_VSPRINTF with DONT_HAVE_VSNPRINTF.
Replaced all Makefile var ${HAVE_VSPRINTF} with ${HAVE_VSNPRINTF}. Replaced all Makefile var ${HAVE_VSPRINTF} with ${HAVE_VSNPRINTF}.
@@ -321,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 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 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 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. exhaustive search for a v1 value to return.
Removed lucas_tbl.cal calc resource file. This file was made Removed lucas_tbl.cal calc resource file. This file was made
@@ -411,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: 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: There is a new calc bug report Email address:
calc-bug-report at asthe dot com calc-bug-report at asthe dot com
@@ -651,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' Silenced annoying warning about unused variable 'intp'
while compiling endian.c under some circumstances. 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. Christoph Zurnieden <czurnieden at gmx dot de> for this report.
Added a number of calc resource files by Added a number of calc resource files by
@@ -2761,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, Using calc-bugs at asthe dot com for calc bug reports,
calc-contrib at asthe dot com for calc contributions, 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-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 Replaced explicit Email addresses found this file with the <user at
site dot domain> notation to reduce the potential for those folks site dot domain> notation to reduce the potential for those folks
@@ -7501,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. 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 ## 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 ## the terms of the version 2.1 of the GNU Lesser General Public License

100
CONTRIB-CODE Normal file
View 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
View File

@@ -6,7 +6,7 @@ This file is Copyrighted
This file is covered under the following Copyright: 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. All rights reserved.
Everyone is permitted to copy and distribute verbatim copies 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 Boston, MA 02110-1301
USA 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 Calc's relationship to the GNU Lesser General Public License
------------------------------------------------------------ ------------------------------------------------------------

View File

@@ -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 The top level Makefile and the custom/Makefile require a GNU
Make (such as gmake) or an equivalently advanced make. On many 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. one must use gmake instead of make.
Some report that under macOS, one has to declare the target 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 found below, comment out the Linux set and comment in that
set or edit the gcc set or the common cc set as needed. 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 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 The top level Makefile and the custom/Makefile require a GNU
Make (such as gmake) or an equivalently advanced make. On many 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. one must use gmake instead of make.
If your target system does not have GNU Make (or equivalent), then 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 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. 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 ## 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 ## the terms of the version 2.1 of the GNU Lesser General Public License

181
Makefile
View File

@@ -8,11 +8,12 @@
# comments, this Makefile differs from the non-rpm bzip2-ed tarball # comments, this Makefile differs from the non-rpm bzip2-ed tarball
# source Makefile in the following ways: # source Makefile in the following ways:
# #
# MAKEFILE_REV= $$Revision: 30.26 $$
# CCWERR= -Werror # CCWERR= -Werror
# USE_READLINE= -DUSE_READLINE # USE_READLINE= -DUSE_READLINE
# READLINE_LIB= -lreadline -lhistory -lncurses # READLINE_LIB= -lreadline -lhistory -lncurses
# #
# Copyright (C) 1999-2018,2021 Landon Curt Noll
#
# The Makefile.ship makefile becomes the Makefile found in the # The Makefile.ship makefile becomes the Makefile found in the
# calc-*.tar.bz2 bzip2 source tarball. # calc-*.tar.bz2 bzip2 source tarball.
# #
@@ -24,7 +25,7 @@
# #
# This makefile contains only those critical rules (such as all, clean, etc.) # This makefile contains only those critical rules (such as all, clean, etc.)
# and the common rules needed in development (such as chk, check, 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). # string in the shipped makefiles (such as Makefile.ship).
# Copyright (C) 1999-2008,2014 Landon Curt Noll # Copyright (C) 1999-2008,2014 Landon Curt Noll
@@ -52,7 +53,66 @@
# calculator by David I. Bell with help/mods from others # calculator by David I. Bell with help/mods from others
# Makefile by Landon Curt Noll # 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),) ifeq ($(target),)
target=$(shell uname -s 2>/dev/null) target=$(shell uname -s 2>/dev/null)
@@ -87,6 +147,12 @@ endif
#READLINE_INCLUDE= -I/usr/gnu/include #READLINE_INCLUDE= -I/usr/gnu/include
#READLINE_INCLUDE= -I/usr/local/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 # Normally certain files depend on the Makefile. If the Makefile is
# changed, then certain steps should be redone. If MAKE_FILE is # changed, then certain steps should be redone. If MAKE_FILE is
# set to Makefile, then these files will depend on Makefile. If # set to Makefile, then these files will depend on Makefile. If
@@ -109,7 +175,7 @@ TOP_MAKE_FILE= Makefile
EXT= EXT=
#EXT=.exe #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 RPM_TOP= ${HOME}/rpm/calc
@@ -135,7 +201,6 @@ endif
# standard utilities used during make # standard utilities used during make
# #
SHELL= /bin/sh
MAKE= make MAKE= make
SED= sed SED= sed
GREP= egrep GREP= egrep
@@ -153,11 +218,30 @@ CI= ci
# Q=@ do not echo internal Makefile actions (quiet mode) # Q=@ do not echo internal Makefile actions (quiet mode)
# Q= echo internal Makefile actions (debug / verbose 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 not echo debug statements (quiet mode)
# V=@ do echo debug statements (debug / verbose mode) # V=@ do echo debug statements (debug / verbose mode)
# #
#Q= #Q=
Q=@ Q=@
#
S= >/dev/null 2>&1
#S=
#
E= 2>/dev/null
#E=
#
#H=@:
H=@
#
V=@: V=@:
#V=@ #V=@
@@ -169,23 +253,28 @@ V=@:
# #
XARG= 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}. # that invokes the ${MAKE_FILE}.
# #
XVAR= \ XVAR= \
target=${target} \ CCBAN='${CCBAN}' \
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}' \
CCWERR='${CCWERR}' \ CCWERR='${CCWERR}' \
NROFF='${NROFF}' \
COMMON_ADD='${COMMON_ADD}' \ COMMON_ADD='${COMMON_ADD}' \
DARWIN_ARCH='${DARWIN_ARCH}' \
E='${E}' \
EXT='${EXT}' \
H='${H}' \
MAKE_FILE='${MAKE_FILE}' \
MANDIR='${MANDIR}' \
NROFF='${NROFF}' \
Q='${Q}' \ 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 # 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 =-=-=-=-=' ${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR} ${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-=' ${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
@@ -496,6 +585,20 @@ have_unused.h:
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR} ${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-=' ${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} ${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-=' ${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 # 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 # Home grown make dependency rules. Your system make not support
# or have the needed tools. You can ignore this section. # 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 # 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 # prevention lines. This allows us to build a static depend list that will
# satisfy all possible cpp symbol definition combinations. # satisfy all possible cpp symbol definition combinations.
@@ -710,6 +785,9 @@ chk:
# #
# debug # debug
# #
# make calcinfo:
# * print information about the host and compile environment
#
# make env: # make env:
# * print major Makefile variables # * print major Makefile variables
# #
@@ -727,6 +805,11 @@ chk:
# * compile without optimizers to make debugging easier # * 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: env:
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-=' ${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR} ${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
@@ -827,7 +910,7 @@ inst_files:
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR} ${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-=' ${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 # locations under the /usr/local directory. If you are using the
# new default values for ${BINDIR}, ${CALC_SHAREDIR}, ${INCDIR} and ${LIBDIR} # new default values for ${BINDIR}, ${CALC_SHAREDIR}, ${INCDIR} and ${LIBDIR}
# then you can use this rule to clean out the older calc stuff under # 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} ${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-=' ${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: calc-symlink:
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-=' ${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='

File diff suppressed because it is too large Load Diff

54
QUESTIONS Normal file
View 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/

View File

@@ -32,30 +32,30 @@ something that you type in.
For list of help topics: For list of help topics:
> help ; help
For overview of calc overview: For overview of calc overview:
> help intro ; help intro
> help overview ; help overview
> help command ; help command
> help define ; help define
> help statement ; help statement
> help variable ; help variable
> help usage ; help usage
For list of builtin functions: For list of builtin functions:
> help builtin ; help builtin
C programmers should note some unexpected differences in the calc syntax: 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. Calc is shipped with a standard collection of calc resource files.
For a list of calc standard resource files see: 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. 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, for information about how to report a bug.
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: 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 for information about how to ask a question.
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: ## Copyright (C) 1999,2014,2017,2021 Landon Curt Noll
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
## ##
## Calc is open software; you can redistribute it and/or modify it under ## 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 ## the terms of the version 2.1 of the GNU Lesser General Public License

View File

@@ -260,4 +260,4 @@ help unexpected
``` ```
It contains information about differences between C and calc It contains information about differences between C and calc
that may surprize C programmers. that may surprise C programmers.

View File

@@ -1,7 +1,7 @@
/* /*
* addop - add opcodes to a function being compiled * 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 * Primary author: David I. Bell
* *
@@ -28,6 +28,7 @@
#include <stdio.h> #include <stdio.h>
#include "calc.h" #include "calc.h"
#include "alloc.h"
#include "opcodes.h" #include "opcodes.h"
#include "str.h" #include "str.h"
#include "func.h" #include "func.h"
@@ -36,6 +37,9 @@
#include "symbol.h" #include "symbol.h"
#include "banned.h" /* include after system header <> includes */
#define FUNCALLOCSIZE 20 /* reallocate size for functions */ #define FUNCALLOCSIZE 20 /* reallocate size for functions */
#define OPCODEALLOCSIZE 100 /* reallocate size for opcodes in functions */ #define OPCODEALLOCSIZE 100 /* reallocate size for opcodes in functions */

View File

@@ -1,7 +1,7 @@
/* /*
* align32 - determine if 32 bit accesses must be aligned * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -34,6 +34,10 @@
#include <unistd.h> #include <unistd.h>
#endif #endif
#include "banned.h" /* include after system header <> includes */
static void buserr(void); /* catch alignment errors */ static void buserr(void); /* catch alignment errors */

View File

@@ -1,7 +1,7 @@
/* /*
* assocfunc - association table routines * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -36,6 +36,9 @@
#include "value.h" #include "value.h"
#include "banned.h" /* include after system header <> includes */
#define MINHASHSIZE 31 /* minimum size of hash tables */ #define MINHASHSIZE 31 /* minimum size of hash tables */
#define GROWHASHSIZE 50 /* approximate growth for hash tables */ #define GROWHASHSIZE 50 /* approximate growth for hash tables */
#define CHAINLENGTH 10 /* desired number of elements on a hash chain */ #define CHAINLENGTH 10 /* desired number of elements on a hash chain */

180
banned.h Normal file
View 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 */

View File

@@ -1,7 +1,7 @@
/* /*
* blkcpy - general values and related routines used by the calculator * 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 * Primary author: Landon Curt Noll
* *
@@ -29,12 +29,16 @@
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
#include "calc.h" #include "calc.h"
#include "alloc.h"
#include "value.h" #include "value.h"
#include "file.h" #include "file.h"
#include "blkcpy.h" #include "blkcpy.h"
#include "str.h" #include "str.h"
#include "banned.h" /* include after system header <> includes */
/* /*
* copystod - copy num indexed items from source value to destination value * 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 */ NUMBER *ret; /* cloned and modified numerator */
#if CALC_BYTE_ORDER == BIG_ENDIAN #if CALC_BYTE_ORDER == BIG_ENDIAN
HALF *swapped; /* byte swapped input data */ 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 */ HALF *h; /* copy byteswap pointer */
unsigned long i; unsigned long i;
#endif #endif

13
block.c
View File

@@ -1,7 +1,7 @@
/* /*
* block - fixed, dynamic, fifo and circular memory blocks * 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 * Primary author: Landon Curt Noll
* *
@@ -28,6 +28,11 @@
#include <stdio.h> #include <stdio.h>
#include "have_string.h"
#ifdef HAVE_STRING_H
# include <string.h>
#endif
#include "alloc.h"
#include "value.h" #include "value.h"
#include "zmath.h" #include "zmath.h"
#include "config.h" #include "config.h"
@@ -36,6 +41,10 @@
#include "str.h" #include "str.h"
#include "calcerr.h" #include "calcerr.h"
#include "banned.h" /* include after system header <> includes */
#define NBLOCKCHUNK 16 #define NBLOCKCHUNK 16
STATIC long nblockcount = 0; STATIC long nblockcount = 0;
@@ -291,7 +300,7 @@ blkrealloc(BLOCK *blk, int newlen, int newchunk)
* Set the data length * Set the data length
* *
* We also know that the new block is not empty since we have * 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 * After this section of code, limit and datalen will be
* correct in terms of the new type. * correct in terms of the new type.

10
block.h
View File

@@ -1,7 +1,7 @@
/* /*
* block - fixed, dynamic, fifo and circular memory blocks * 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 * Primary author: Landon Curt Noll
* *
@@ -55,7 +55,7 @@
* blkchunk defaults to BLK_CHUNKSIZE * blkchunk defaults to BLK_CHUNKSIZE
* *
* blkfree(x) * blkfree(x)
* Reduce storage down to 0 octetes. * Reduce storage down to 0 octets.
* *
* size(x) * size(x)
* The length of data stored in the block. * The length of data stored in the block.
@@ -88,7 +88,7 @@
* blkmove(dest, src, length [, dest_offset [, src_offset]]) * blkmove(dest, src, length [, dest_offset [, src_offset]])
* 0 <= length <= blksize(x) * 0 <= length <= blksize(x)
* offset's are restricted in value by block type * 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]]) * blkccpy(dest, src, stopval, length [, dest_offset [, src_offset]])
* 0 <= length <= blksize(x) * 0 <= length <= blksize(x)
@@ -104,7 +104,7 @@
* b = a*k for some integer k >= 1 * b = a*k for some integer k >= 1
* *
* scatter(src, dest1, dest2 [, dest3 ] ...) * 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 * restarting with dest1 after end of list
* stops at end of src * stops at end of src
* *
@@ -184,7 +184,7 @@ EXTERN int blk_debug; /* 0 => debug off */
/* length of data stored in a block */ /* length of data stored in a block */
#define blklen(blk) ((blk)->datalen) #define blklen(blk) ((blk)->datalen)
/* block footpint in memory */ /* block footprint in memory */
#define blksizeof(blk) ((blk)->maxsize) #define blksizeof(blk) ((blk)->maxsize)
/* block allocation chunk size */ /* block allocation chunk size */

View File

@@ -1,7 +1,7 @@
/* /*
* byteswap - byte swapping routines * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -29,6 +29,9 @@
#include "byteswap.h" #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 * 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 * NULL to allocate the storage
* src - pointer to a ZVALUE to swap * src - pointer to a ZVALUE to swap
* all - TRUE => swap every element, FALSE => swap only the * all - TRUE => swap every element, FALSE => swap only the
* multiprecision storage * multi-precision storage
* *
* returns: * returns:
* pointer to where the swapped src has been put * 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 * NULL to allocate the storage
* src - pointer to a NUMBER to swap * src - pointer to a NUMBER to swap
* all - TRUE => swap every element, FALSE => swap only the * all - TRUE => swap every element, FALSE => swap only the
* multiprecision storage * multi-precision storage
* *
* returns: * returns:
* pointer to where the swapped src has been put * 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 * NULL to allocate the storage
* src - pointer to a COMPLEX to swap * src - pointer to a COMPLEX to swap
* all - TRUE => swap every element, FALSE => swap only the * all - TRUE => swap every element, FALSE => swap only the
* multiprecision storage * multi-precision storage
* *
* returns: * returns:
* pointer to where the swapped src has been put * 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 * NULL to allocate the storage
* src - pointer to a ZVALUE to swap * src - pointer to a ZVALUE to swap
* all - TRUE => swap every element, FALSE => swap only the * all - TRUE => swap every element, FALSE => swap only the
* multiprecision storage * multi-precision storage
* *
* returns: * returns:
* pointer to where the swapped src has been put * 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 * NULL to allocate the storage
* src - pointer to a NUMBER to swap * src - pointer to a NUMBER to swap
* all - TRUE => swap every element, FALSE => swap only the * all - TRUE => swap every element, FALSE => swap only the
* multiprecision storage * multi-precision storage
* *
* returns: * returns:
* pointer to where the swapped src has been put * 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 * NULL to allocate the storage
* src - pointer to a COMPLEX to swap * src - pointer to a COMPLEX to swap
* all - TRUE => swap every element, FALSE => swap only the * all - TRUE => swap every element, FALSE => swap only the
* multiprecision storage * multi-precision storage
* *
* returns: * returns:
* pointer to where the swapped src has been put * 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 * NULL to allocate the storage
* src - pointer to a ZVALUE to swap * src - pointer to a ZVALUE to swap
* all - TRUE => swap every element, FALSE => swap only the * all - TRUE => swap every element, FALSE => swap only the
* multiprecision storage * multi-precision storage
* *
* returns: * returns:
* pointer to where the swapped src has been put * 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 * NULL to allocate the storage
* src - pointer to a NUMBER to swap * src - pointer to a NUMBER to swap
* all - TRUE => swap every element, FALSE => swap only the * all - TRUE => swap every element, FALSE => swap only the
* multiprecision storage * multi-precision storage
* *
* returns: * returns:
* pointer to where the swapped src has been put * 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 * NULL to allocate the storage
* src - pointer to a COMPLEX to swap * src - pointer to a COMPLEX to swap
* all - TRUE => swap every element, FALSE => swap only the * all - TRUE => swap every element, FALSE => swap only the
* multiprecision storage * multi-precision storage
* *
* returns: * returns:
* pointer to where the swapped src has been put * pointer to where the swapped src has been put

View File

@@ -2,7 +2,7 @@
# #
# cal - makefile for calc standard resource files # 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 # 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 # 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 # calculator by David I. Bell with help/mods from others
# Makefile by Landon Curt Noll # 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/sh
#SHELL= /bin/bash
#SHELL= /bin/zsh
#### ####
# Normally, the upper level makefile will set these values. We provide # Normally, the upper level makefile will set these values. We provide
@@ -167,45 +186,44 @@ Q=@
# #
CHMOD= chmod CHMOD= chmod
CMP= cmp CMP= cmp
RM= rm
MKDIR= mkdir
RMDIR= rmdir
CP= cp
MV= mv
CO= co CO= co
TRUE= true CP= cp
TOUCH= touch FMT= fmt
MKDIR= mkdir
MV= mv
RM= rm
RMDIR= rmdir
SED= sed SED= sed
SORT= sort SORT= sort
FMT= fmt TOUCH= touch
TRUE= true
# The calc files to install # 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: # Please use:
# #
# make calc_files_list # make calc_files_list
# #
# to keep this list in nice sorted order and to check that these # to keep this list in nice sorted order.
# deailed help files are under RCS control.
# #
CALC_FILES= README alg_config.cal beer.cal bernoulli.cal \ CALC_FILES= README alg_config.cal beer.cal bernoulli.cal \
bernpoly.cal bigprime.cal bindings brentsolve.cal chi.cal chrem.cal \ bernpoly.cal bigprime.cal bindings brentsolve.cal chi.cal chrem.cal \
constants.cal deg.cal dms.cal dotest.cal ellip.cal factorial.cal \ constants.cal deg.cal dms.cal dotest.cal ellip.cal factorial.cal \
factorial2.cal gvec.cal hello.cal hms.cal infinities.cal \ factorial2.cal gvec.cal hello.cal hms.cal infinities.cal intfile.cal \
intfile.cal intnum.cal lambertw.cal linear.cal lnseries.cal \ intnum.cal lambertw.cal linear.cal lnseries.cal lucas.cal \
lucas.cal lucas_chk.cal mersenne.cal mfactor.cal \ lucas_chk.cal mersenne.cal mfactor.cal mod.cal natnumset.cal pell.cal \
mod.cal natnumset.cal pell.cal pi.cal pix.cal pollard.cal poly.cal \ pi.cal pix.cal pollard.cal poly.cal prompt.cal psqrt.cal qtime.cal \
prompt.cal psqrt.cal qtime.cal quat.cal randbitrun.cal randmprime.cal \ quat.cal randbitrun.cal randmprime.cal randombitrun.cal randomrun.cal \
randombitrun.cal randomrun.cal randrun.cal regress.cal repeat.cal \ randrun.cal regress.cal repeat.cal screen.cal seedrandom.cal \
screen.cal seedrandom.cal set8700.cal set8700.line smallfactors.cal \ set8700.cal set8700.line smallfactors.cal solve.cal \
solve.cal specialfunctions.cal statistics.cal strings.cal sumsq.cal \ specialfunctions.cal statistics.cal strings.cal sumsq.cal sumtimes.cal \
sumtimes.cal surd.cal test1700.cal test2300.cal test2600.cal \ surd.cal test1700.cal test2300.cal test2600.cal test2700.cal \
test2700.cal test3100.cal test3300.cal test3400.cal test3500.cal \ test3100.cal test3300.cal test3400.cal test3500.cal test4000.cal \
test4000.cal test4100.cal test4600.cal test5100.cal test5200.cal \ test4100.cal test4600.cal test5100.cal test5200.cal test8400.cal \
test8400.cal test8500.cal test8600.cal test8900.cal toomcook.cal \ test8500.cal test8600.cal test8900.cal toomcook.cal unitfrac.cal \
unitfrac.cal varargs.cal xx_print.cal zeta2.cal varargs.cal xx_print.cal zeta2.cal
# These calc files are now obsolete and are removed by the install rule. # 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. # sub-directory called calc/cal.
# #
# NOTE: Due to bogus shells found on one common system we must have # 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: calc_files_list:
${Q} -(find . -mindepth 1 -maxdepth 1 -type f -name '*.cal' -print | \ ${Q} -(find . -mindepth 1 -maxdepth 1 -type f -name '*.cal' -print | \
while read i; do \ while read i; do \
if [ X"$$i" != X"/dev/null" ]; then \ echo $$i; \
if [ ! -f RCS/$$i,v ]; then \ done; \
echo "WARNING: $$i not under RCS control" 1>&2; \ echo '--first_line--'; \
else \ echo README; \
echo $$i; \ echo set8700.line; \
fi; \ echo bindings) | \
fi; \
done; \
echo '--first_line--'; \
echo README; \
echo set8700.line; \
echo bindings) | \
${SED} -e 's:^\./::' | LANG=C ${SORT} | ${FMT} -70 | \ ${SED} -e 's:^\./::' | LANG=C ${SORT} | ${FMT} -70 | \
${SED} -e '1s/--first_line--/CALC_FILES=/' -e '2,$$s/^/ /' \ ${SED} -e '1s/--first_line--/CALC_FILES=/' -e '2,$$s/^/ /' \
-e 's/$$/ \\/' -e '$$s/ \\$$//' -e 's/$$/ \\/' -e '$$s/ \\$$//'
@@ -391,7 +403,7 @@ uninstall:
if [ -f "${T}${CALC_SHAREDIR}/$$i" ]; then \ if [ -f "${T}${CALC_SHAREDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CALC_SHAREDIR}/$$i"; \ echo "cannot uninstall ${T}${CALC_SHAREDIR}/$$i"; \
else \ else \
echo "uninstalled ${T}${CALC_SHAREDIR}/$$i"; \ echo "un-installed ${T}${CALC_SHAREDIR}/$$i"; \
fi; \ fi; \
fi; \ fi; \
done done

View File

@@ -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 how use the calc language, and/or because the authors thought them to
be useful! 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, By convention, a resource file only defines and/or initializes functions,
@@ -250,12 +213,12 @@ brentsolve.cal
brentsolve(low, high,eps) 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) brentsolve2(low, high,which,eps)
The second function, brentsolve2(low, high,which,eps) has some lines 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". different from the obligatory "f".
See: See:
@@ -429,7 +392,7 @@ factorial2.cal
bigcatalan(n) 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 above n~50,000 but defaults to the builtin function for smaller
values.Meant as a complete replacement for catalan(n) with only a values.Meant as a complete replacement for catalan(n) with only a
very small overhead. See: very small overhead. See:
@@ -470,9 +433,9 @@ factorial2.cal
k = 0 k = 0
The other function stirling2caching(n,m) does it by way of the 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 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: a series. See:
http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind
@@ -583,7 +546,7 @@ infinities.cal
pinf() pinf()
The symbolic handling of infinities. Needed for intnum.cal but might be The symbolic handling of infinities. Needed for intnum.cal but might be
usefull elsewhere, too. useful elsewhere, too.
intfile.cal intfile.cal
@@ -632,13 +595,13 @@ intnum.cal
This file offers some methods for numerical integration. Implemented are This file offers some methods for numerical integration. Implemented are
the Gauss-Legendre and the tanh-sinh quadrature. 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. 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 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 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). file infinities.cal (automatically linked in by intnum.cal).
Integration in parts and contour is supported by the "points" argument 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 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. 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() ; quadgldeletenodes()
; define f(x){ return exp(x);} ; define f(x){ return exp(x);}
@@ -760,7 +723,7 @@ lambertw.cal
ProductLog[branch,z] with the tested values. ProductLog[branch,z] with the tested values.
The series is only valid for the branches 0,-1, real z, converges 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 be given the branches explicitly. See the code in lambertw.cal
for further information. for further information.
@@ -783,7 +746,7 @@ lnseries.cal
does so by computing the prime factorization of all of the number does so by computing the prime factorization of all of the number
sequence 1,2,3...n, calculates the natural logarithms of the primes 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 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 the primes in the factorization. This is faster for high precision
of the logarithms and/or long sequences. 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. 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. 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 requires about ~13 Megs of memory. The p_elim == 13 overhead
takes about 3 seconds and requires ~1.5 Megs of memory. takes about 3 seconds and requires ~1.5 Megs of memory.
@@ -1354,7 +1317,7 @@ specialfunctions.cal
http://en.wikipedia.org/wiki/Polygamma http://en.wikipedia.org/wiki/Polygamma
http://dlmf.nist.gov/5 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. function depends on the script zeta2.cal.
@@ -1371,7 +1334,7 @@ specialfunctions.cal
zeta(s) 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://en.wikipedia.org/wiki/Riemann_zeta_function
http://dlmf.nist.gov/25.2 http://dlmf.nist.gov/25.2
@@ -1390,7 +1353,7 @@ statistics.cal
invbetainc(x,a,b) invbetainc(x,a,b)
Computes the inverse of the regularized beta function. Does so the 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) betapdf(x,a,b)
betacdf(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 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 squares, etc, for large lists and matrices. N is the size of
the list or matrix to use. The doalltimes() function will run 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); doalltimes(1e6);
@@ -1816,7 +1779,7 @@ zeta2.cal
for information on this special zeta function. 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 ## Primary author: Landon Curt Noll
## ##

View File

@@ -1,7 +1,7 @@
/* /*
* alg_config - help determine optimal values for algorithm levels * 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 * 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 * 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: * given:
* ratio the ratio of time between two algorithms * ratio the ratio of time between two algorithms
* *
* retuns: * returns:
* 1 When ratio is near 1.0 * 1 When ratio is near 1.0
* 0 otherwise * 0 otherwise
* *
@@ -354,7 +354,7 @@ define best_mul2()
local high; /* high loop value tested */ local high; /* high loop value tested */
local mid; /* between low and high */ local mid; /* between low and high */
local best_val; /* value found with ratio closest to unity */ 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 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"); printf("WARNING: This tool may not be computing the correct best value\n");
test_time = 5.0; test_time = 5.0;
printf("The best_mul2() function will take a LONG time to run!\n"); 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) { if (config("user_debug") <= 0) {
printf("To monitor progress, set user_debug to 2: " printf("To monitor progress, set user_debug to 2: "
"config(\"user_debug\", 2)\n"); "config(\"user_debug\", 2)\n");
@@ -392,7 +392,7 @@ define best_mul2()
*/ */
do { 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 * We will multiplicatively expand our test level until
* the ratio drops below 1.0. * the ratio drops below 1.0.
@@ -419,7 +419,7 @@ define best_mul2()
best_val = high; best_val = high;
best_ratio = ratio; best_ratio = ratio;
if (config("user_debug") > 1) { 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); best_val, best_ratio);
} }
} }
@@ -442,7 +442,7 @@ define best_mul2()
high /= 2; high /= 2;
low = high / 2; low = high / 2;
if (config("user_debug") > 0) { 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); high);
} }
ratio = mul_ratio(high); ratio = mul_ratio(high);
@@ -450,7 +450,8 @@ define best_mul2()
best_val = high; best_val = high;
best_ratio = ratio; best_ratio = ratio;
if (config("user_debug") > 1) { 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); best_val, best_ratio);
} }
} }
@@ -483,7 +484,7 @@ define best_mul2()
best_val = mid; best_val = mid;
best_ratio = ratio; best_ratio = ratio;
if (config("user_debug") > 1) { 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); best_val, best_ratio);
} }
} }
@@ -535,7 +536,7 @@ define best_mul2()
printf("config(\"mul2\", %d),;\n", best_val); printf("config(\"mul2\", %d),;\n", best_val);
printf("WARNING: It is believed that the output " printf("WARNING: It is believed that the output "
"of this resource file is bogus!\n"); "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; return mid;
} }
@@ -835,7 +836,7 @@ define best_sq2()
local high; /* high loop value tested */ local high; /* high loop value tested */
local mid; /* between low and high */ local mid; /* between low and high */
local best_val; /* value found with ratio closest to unity */ 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 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"); printf("WARNING: This tool may not be computing the correct best value\n");
test_time = 5.0; test_time = 5.0;
printf("The best_sq2() function will take a LONG time to run!\n"); 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) { if (config("user_debug") <= 0) {
printf("To monitor progress, set user_debug to 2: " printf("To monitor progress, set user_debug to 2: "
"config(\"user_debug\", 2)\n"); "config(\"user_debug\", 2)\n");
@@ -873,7 +874,7 @@ define best_sq2()
*/ */
do { 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 * We will multiplicatively expand our test level until
* the ratio drops below 1.0. * the ratio drops below 1.0.
@@ -900,7 +901,7 @@ define best_sq2()
best_val = high; best_val = high;
best_ratio = ratio; best_ratio = ratio;
if (config("user_debug") > 1) { 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); best_val, best_ratio);
} }
} }
@@ -923,7 +924,7 @@ define best_sq2()
high /= 2; high /= 2;
low = high / 2; low = high / 2;
if (config("user_debug") > 0) { 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); high);
} }
ratio = mul_ratio(high); ratio = mul_ratio(high);
@@ -931,7 +932,8 @@ define best_sq2()
best_val = high; best_val = high;
best_ratio = ratio; best_ratio = ratio;
if (config("user_debug") > 1) { 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); best_val, best_ratio);
} }
} }
@@ -964,7 +966,7 @@ define best_sq2()
best_val = mid; best_val = mid;
best_ratio = ratio; best_ratio = ratio;
if (config("user_debug") > 1) { 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); best_val, best_ratio);
} }
} }
@@ -1017,7 +1019,7 @@ define best_sq2()
printf("config(\"sq2\", %d),;\n", best_val); printf("config(\"sq2\", %d),;\n", best_val);
printf("WARNING: It is believed that the output " printf("WARNING: It is believed that the output "
"of this resource file is bogus!\n"); "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; return mid;
} }
@@ -1337,7 +1339,7 @@ define best_pow2()
local high; /* high loop value tested */ local high; /* high loop value tested */
local mid; /* between low and high */ local mid; /* between low and high */
local best_val; /* value found with ratio closest to unity */ 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 expand; /* how fast to expand the length */
local looped; /* 1 ==> we have expanded lengths before */ 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"); printf("WARNING: This tool may not be computing the correct best value\n");
test_time = 60.0; test_time = 60.0;
printf("The best_pow2() function will take a LONG time to run!\n"); 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) { if (config("user_debug") <= 0) {
printf("To monitor progress, set user_debug to 2: " printf("To monitor progress, set user_debug to 2: "
"config(\"user_debug\", 2)\n"); "config(\"user_debug\", 2)\n");
@@ -1358,7 +1360,7 @@ define best_pow2()
* firewall - must have a >1.02 ratio for the initial length * firewall - must have a >1.02 ratio for the initial length
* *
* We select 1.02 because of the precision of the CPU timing. We * 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. * dominates.
*/ */
low = 4; low = 4;
@@ -1375,7 +1377,7 @@ define best_pow2()
best_val = high; best_val = high;
best_ratio = ratio; best_ratio = ratio;
if (config("user_debug") > 1) { 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); best_val, best_ratio);
} }
} }
@@ -1397,7 +1399,7 @@ define best_pow2()
looped = 0; looped = 0;
do { 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 * We will multiplicatively expand our test level until
* the ratio drops below 1.0. * the ratio drops below 1.0.
@@ -1435,7 +1437,7 @@ define best_pow2()
best_val = high; best_val = high;
best_ratio = ratio; best_ratio = ratio;
if (config("user_debug") > 1) { 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); best_val, best_ratio);
} }
} }
@@ -1463,7 +1465,7 @@ define best_pow2()
best_val = mid; best_val = mid;
best_ratio = ratio; best_ratio = ratio;
if (config("user_debug") > 1) { 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); best_val, best_ratio);
} }
} }
@@ -1516,7 +1518,7 @@ define best_pow2()
printf("config(\"pow2\", %d),;\n", best_val); printf("config(\"pow2\", %d),;\n", best_val);
printf("WARNING: It is believed that the output " printf("WARNING: It is believed that the output "
"of this resource file is bogus!\n"); "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; return mid;
} }

View File

@@ -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 * 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 * 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). * 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 * (b+1)^(n+1) - b^(n+1) = 0
* *
@@ -42,7 +42,7 @@
* B(3) = -(6*B(2) + 4*B(1) + 1) / 4 * B(3) = -(6*B(2) + 4*B(1) + 1) / 4
* *
* The combinatorial factors in the expansion of the above formula are * 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 * 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. * values obtained are saved in an array for ease in repeated calculations.
*/ */

View File

@@ -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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License

View File

@@ -1,7 +1,7 @@
/* /*
* brentsolve - Root finding with the Brent-Dekker trick * 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 * 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 * 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)){ switch(param(0)){
case 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); case 2: eps = epsilon(epsilon()*1e-2);
which = 0;break; which = 0;break;
case 3: eps = epsilon(epsilon()*1e-2);break; case 3: eps = epsilon(epsilon()*1e-2);break;

View File

@@ -1,7 +1,7 @@
/* /*
* chi - chi^2 probabilities with degrees of freedom for null hypothesis * 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 * 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 * 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. * 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; x2 = x*x;
x_term = 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. * 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 * 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. * NOTE: This function does not work well with odd degrees of freedom.
* Can somebody help / find a bug / provide a better method of * 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; /* index in finite sum */
local r_lim; /* limit value for r */ local r_lim; /* limit value for r */
local s; /* sum */ 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 chi_term; /* chi_sq^r */
local ret; /* return value */ local ret; /* return value */

View File

@@ -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 * 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: * of the form:
* *
* x = r1 (mod m1) * x = r1 (mod m1)
@@ -35,7 +35,7 @@
* *
* where the residues r1, r2, ... and the moduli m1, m2, ... are * where the residues r1, r2, ... and the moduli m1, m2, ... are
* given integers. The Chinese remainder theorem states that if * 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, ... * have a unique solution modulo m1 * m2 * ... If m1, m2, ...
* are not relatively prime in pairs, it is possible that no solution * are not relatively prime in pairs, it is possible that no solution
* exists. If solutions exist, the general solution is expressible as: * exists. If solutions exist, the general solution is expressible as:

View File

@@ -1,7 +1,7 @@
/* /*
* dms - calculate in degrees, minutes, and seconds (based on deg) * 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 * 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 * 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 */ local obj dms ans; /* return value */
/* initalize value to 1st arg */ /* initialize value to 1st arg */
if (istype(a, ans)) { if (istype(a, ans)) {
/* 1st arg is dms object, load it */ /* 1st arg is dms object, load it */
ans.deg = a.deg; ans.deg = a.deg;
@@ -110,7 +110,7 @@ define dms_sub(a, b)
{ {
local obj dms ans; /* return value */ local obj dms ans; /* return value */
/* initalize value to 1st arg */ /* initialize value to 1st arg */
if (istype(a, ans)) { if (istype(a, ans)) {
/* 1st arg is dms object, load it */ /* 1st arg is dms object, load it */
ans.deg = a.deg; ans.deg = a.deg;
@@ -352,11 +352,11 @@ define fixdms(a)
quit "attempt to fix a non dms object"; 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.min += frac(a.deg) * 60;
a.deg = int(a.deg); a.deg = int(a.deg);
/* force degrees to be intergral */ /* force degrees to be integral */
a.sec += frac(a.min) * 60; a.sec += frac(a.min) * 60;
a.min = int(a.min); a.min = int(a.min);

View File

@@ -8,8 +8,8 @@
* copyright this dotest_code. * copyright this dotest_code.
* *
* ERNEST BOWEN AND LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO * ERNEST BOWEN AND LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MER- * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MER-
* CHANTABILITY AND FITNESS. IN NO EVENT SHALL LANDON CURT * CHANTABILITY AND FITNESS. IN NO EVENT SHALL LANDON CURT
* NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * 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 * We increase the caller's error count by the number
* of line tests that failed, not the number of internal * of line tests that failed, not the number of internal

View File

@@ -1,7 +1,7 @@
/* /*
* factorial2 - implementation of different factorial related functions * 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 * 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 * 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 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 the extreme case binomial(2N,N) but for a high price, the memory
needed is pi(N)--theoretically. needed is pi(N)--theoretically.
*/ */
@@ -626,7 +626,7 @@ define subfactorialrecursive(n){
return n * subfactorialrecursive(n-1) + (-1)^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*/ PARI/GP + GMP*/
define subfactorialiterative(n){ define subfactorialiterative(n){
local k temp1 temp2 ret; local k temp1 temp2 ret;

View File

@@ -1,7 +1,7 @@
/* /*
* hms - calculate in hours, minutes, and seconds * 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 * 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 * 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 */ local obj hms ans; /* return value */
/* initalize value to 1st arg */ /* initialize value to 1st arg */
if (istype(a, ans)) { if (istype(a, ans)) {
/* 1st arg is hms object, load it */ /* 1st arg is hms object, load it */
ans.hour = a.hour; ans.hour = a.hour;
@@ -110,7 +110,7 @@ define hms_sub(a, b)
{ {
local obj hms ans; /* return value */ local obj hms ans; /* return value */
/* initalize value to 1st arg */ /* initialize value to 1st arg */
if (istype(a, ans)) { if (istype(a, ans)) {
/* 1st arg is hms object, load it */ /* 1st arg is hms object, load it */
ans.hour = a.hour; ans.hour = a.hour;
@@ -352,11 +352,11 @@ define fixhms(a)
quit "attempt to fix a non hms object"; 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.min += frac(a.hour) * 60;
a.hour = int(a.hour); a.hour = int(a.hour);
/* force hours to be intergral */ /* force hours to be integral */
a.sec += frac(a.min) * 60; a.sec += frac(a.min) * 60;
a.min = int(a.min); a.min = int(a.min);

View File

@@ -1,7 +1,7 @@
/* /*
* intfile - integer to file and file to integer conversion * 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 * 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 * 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 * NOTE: Because leading HALF values are trimmed from integer, a file
* that begins with lots of 0 bits (in the case of big 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) * or that ends with lots of 0 bits (in the case of little Endian)
* will be changed when the subsequent integer is written back. * 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: * given:
* filename filename to read * filename filename to read
* *
* returns: * returns:
* integer read from its contents on big endian order * integer read from its contents on big Endian order
*/ */
define file2be(filename) 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: * given:
* filename filename to read * filename filename to read
* *
* returns: * returns:
* integer read from its contents on little endian order * integer read from its contents on little Endian order
*/ */
define file2le(filename) 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: * given:
* v integer to write to the file * 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: * given:
* v integer to write to the file * v integer to write to the file

View File

@@ -1,7 +1,7 @@
/* /*
* intnum - implementation of tanhsinh- and Gauss-Legendre quadrature * 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 * 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 * 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 * as the number of equally spaced intervals on a straight line
* connecting a and b. Computing the segments here is a bit * connecting a and b. Computing the segments here is a bit
* more complicated but not much, it should have been taught in * more complicated but not much, it should have been taught in
* highschool. * high school.
* Other contours by way of a list of points */ * Other contours by way of a list of points */
slope = (im(b) - im(a)) / (re(b) - re(a)); slope = (im(b) - im(a)) / (re(b) - re(a));
C = (im(a) + slope) * re(a); C = (im(a) + slope) * re(a);

View File

@@ -1,7 +1,7 @@
/* /*
* lambertw - Lambert's W-function * 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 * 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 * 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 or by using the function lambertw_series_print() after running
lambertw_series(z,eps,branch,terms) at least once with the wanted number of 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 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.: The exact branch must be given explicitly, e.g.:
; lambertw(-exp(-1)+.001)-lambertw_series(-exp(-1)+.001,epsilon()*1e-10,0) ; lambertw(-exp(-1)+.001)-lambertw_series(-exp(-1)+.001,epsilon()*1e-10,0)

View File

@@ -1,7 +1,7 @@
/* /*
* linear - perform a simple two point 2D linear interpolation * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -29,7 +29,7 @@
* *
* given: * given:
* x0, y0 first known point on the line * 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 * x a given point to interpolate on
* *
* returns: * returns:

View File

@@ -1,7 +1,7 @@
/* /*
* lucas - perform a Lucas primality test on h*2^n-1 * 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 * 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 * 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 * Without Jacobi symbol value caching, it requires on average
* 4.851377 Jacobi symbol evaluations. With Jacobi symbol value caching * 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, * Given this information, when odd h is a multiple of 3 we try, in order,
* these odd values of X: * 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
* 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 * 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. * 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 * else
* v(1) = 4 * 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 1
* jacobi(X+2, h*2^n-1) == -1 part 2 * 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 * 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) * 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; testval = h*2^n-1;
for (i=0; i < x_tbl_len; ++i) { 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 * 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 * 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; x = next_x;
while (rodseth_xhn(x, h, n) != 1) { while (rodseth_xhn(x, h, n) != 1) {

View File

@@ -1,7 +1,7 @@
/* /*
* lucas_chk - test all primes of the form h*2^n-1, 1<=h<200 and n <= high_n * 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 * 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 * 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 * [quiet] if given and != 0, then do not print individual test results
* *
* returns: * returns:
* 1 all is ok * 1 all is OK
* 0 something went wrong * 0 something went wrong
*/ */
define define

View File

@@ -1,7 +1,7 @@
/* /*
* mfactor - return the lowest factor of 2^n-1, for n > 0 * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -79,7 +79,7 @@
* hindx = 0; * hindx = 0;
* } while (test_factor < some_limit); * } 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[]) * 210.83 (prior to use of hset[])
* 78.35 (hset[] for p_elim = 7) * 78.35 (hset[] for p_elim = 7)
@@ -99,7 +99,7 @@
* 57.78 (hset[] for p_elim = 17) * 57.78 (hset[] for p_elim = 17)
* p_elim == 19 rejected because of memory size * 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 * requires about ~13 Megs of memory. The p_elim == 13 overhead
* takes about 3 seconds and requires ~1.5 Megs of memory. * 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; return q;
} else { } else {
/* report this 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()); (q-1)/(2*n), n, usertime());
fflush(files(1)); fflush(files(1));
loop = 0; loop = 0;
@@ -269,14 +269,14 @@ define mfactor(n, start_k, rept_loop, p_elim)
*/ */
if (rept_loop <= ++loop) { if (rept_loop <= ++loop) {
/* report this 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()); (q-1)/(2*n), n, usertime());
fflush(files(1)); fflush(files(1));
loop = 0; loop = 0;
} }
/* /*
* skip if divisable by a prime <= 449 * skip if divisible by a prime <= 449
* *
* The value 281 was determined by timing loops * The value 281 was determined by timing loops
* which found that 281 was at or near the * 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); * The addition of the do { ... } while (factor(q, 449)>1);
* loop reduced the factoring loop time (36504 k values with * loop reduced the factoring loop time (36504 k values with
* the hset[] initialization time removed) from 25.69 sec to * 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 { do {
/* /*

View File

@@ -1,7 +1,7 @@
/* /*
* natnumset - functions for sets of natural numbers not exceeding a fixed bound * 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 * 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 * 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 \ B = set difference, integers in A but not in B
* *
* ~A = complement of A, integers not in A * ~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 = 1 or 0 according as A is empty or not empty
* +A = sum of the members of A * +A = sum of the members of A
* *
@@ -100,7 +100,7 @@
* A >= B = (B <= A) * A >= B = (B <= A)
* 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 * the usual way, with parentheses for variations from the usual precedence
* rules. For example * rules. For example
* *

View File

@@ -1,7 +1,7 @@
/* /*
* pell - solve Pell's equation * 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 * 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 * 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. * 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.
*/ */

View File

@@ -1,7 +1,7 @@
/* /*
* poly - calculate with polynomials of one variable * 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 * 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 * 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 * variable has only one name. For some purposes, a name like
* "sin(t)" or "(a + b)" or "\lambda" might be useful; * "sin(t)" or "(a + b)" or "\lambda" might be useful;
* names like "*" or "-27" are legal but might give expressions * 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 * Polynomial expressions may be constructed from numbers and the
* independent variable and other polynomials by the algebraic * independent variable and other polynomials by the algebraic
@@ -43,7 +43,7 @@
* The operations // and % are defined to have the quotient and * The operations // and % are defined to have the quotient and
* remainder meanings as usually defined for polynomials. * 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 * 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 * 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 * would assign to q a number value. As with number expressions

View File

@@ -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 * 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 * 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 * nothing to sum. The last line returns the value 3, i.e. the last
* non-null value found for the expressions separated by semicolons, * non-null value found for the expressions separated by semicolons,
* so sum will be increased by 3 after the "print sum^2;" command * 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 * 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, * 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 * 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)". * "sin(x)", "x^2 + 3*x", "exp(x, 1e-5)".
* *
* Values of the function so defined are returned for values of x * 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". * entering "end", "exit" or "quit".
*/ */

View File

@@ -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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License

View File

@@ -1,7 +1,7 @@
/* /*
* randmprime - generate a random prime of the form h*2^n-1 * 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 * 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 * 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 n; /* n as in h*2^n-1 */
local h; /* h 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 plush; /* value added to h since the beginning */
local init; /* initial cpu time */ local init; /* initial CPU time */
local start; /* cpu time before last test */ local start; /* CPU time before last test */
local stop; /* cpu time afte last test */ local stop; /* CPU time after last test */
local tmp; /* just a tmp place holder value */ local tmp; /* just a tmp place holder value */
local ret; /* h*2^n-1 that is prime */ local ret; /* h*2^n-1 that is prime */

View File

@@ -1,7 +1,7 @@
/* /*
* regress - calc regression and correctness test suite * 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 * 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 * 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 */ prob = 0; /* clear problem counter */
errcount(0),; /* clear error count */ errcount(0),; /* clear error count */
errmax(-1),; /* prevent errcount from abouting */ errmax(-1),; /* prevent errcount from aborting */
global ecnt; /* expected value of errcount() */ global ecnt; /* expected value of errcount() */
ecnt = 0; /* clear expected errcount() value */ ecnt = 0; /* clear expected errcount() value */
@@ -356,8 +356,18 @@ define test_arithmetic()
vrfy(-16^-2 == -1/256, '447: -16^-2 == -1/256'); vrfy(-16^-2 == -1/256, '447: -16^-2 == -1/256');
vrfy(-7^2 == -49, '448: -7^2 == -49'); vrfy(-7^2 == -49, '448: -7^2 == -49');
vrfy(-3! == -6, '449: -3! == -6'); 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()'; print '009: parsed test_arithmetic()';
@@ -453,7 +463,7 @@ define test_config()
'539: config("more", ">> ") == ";; "'); '539: config("more", ">> ") == ";; "');
vrfy(config("all") == oldcfg, '540: config("all") == oldcfg'); 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, vrfy(config("all",callcfg) == oldcfg,
'541: 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"; read -once "test3300";
print '048: 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() define test_noarg()
{ {
@@ -5183,7 +5193,7 @@ define test_size()
'5715: sizeof(17^139 + 674)*2 == sizeof(q)'); '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; q = 1/13;
print '5716: 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 * 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}; mat m[] = {z,q,c};
print '5752: 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 loc; /* unassigned local variable */
local a; /* assoc */ local a; /* assoc */
local ofd; /* open file desriptor */ local ofd; /* open file descriptor */
local cfd; /* closed file descriptor */ local cfd; /* closed file descriptor */
local blk; /* unnamed block */ local blk; /* unnamed block */
local nblk; /* named block */ local nblk; /* named block */
@@ -5398,7 +5408,7 @@ define test_is()
local object; /* object */ local object; /* object */
local rand; /* rand seed */ local rand; /* rand seed */
local random; /* random seed */ local random; /* random seed */
local real; /* real non-intger value */ local real; /* real non-integer value */
local prime; /* odd prime */ local prime; /* odd prime */
local square; /* square of an odd prime */ local square; /* square of an odd prime */
local string; /* string */ 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() define test_exponentiation()
{ {
@@ -7573,7 +7583,7 @@ define test_quit()
quit; quit;
prob('quit did not end the test_quit() function'); 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()'; 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;
print '8500: Starting test of divmod' 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(config("dupvar_warn",0), '8652: config("dupvar_warn",0)');
vrfy(u_glob == 6, '8653: u_glob == 6'); vrfy(u_glob == 6, '8653: u_glob == 6');
global u_glob = 555; global u_glob = 555;
print '8654: reclare u_glob'; print '8654: declare u_glob';
vrfy(u_glob == 555, '8655: u_glob == 555'); vrfy(u_glob == 555, '8655: u_glob == 555');
define func_8650(u_glob) { local u_glob; return u_glob; } define func_8650(u_glob) { local u_glob; return u_glob; }
print '8656: u_glob as both local and parameter'; 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; print;
return test_exponentiation(); return test_exponentiation();
@@ -8074,7 +8084,7 @@ return test_functions2();
* *
* beer.cal - prints a bunch of things when loaded * beer.cal - prints a bunch of things when loaded
* hello.cal - designed to go into an infinite loop * 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 * lucas_chk.cal - already read by this file
* regress.cal - this file * regress.cal - this file
* surd.cal - already read by this file * surd.cal - already read by this file

View File

@@ -1,7 +1,7 @@
/* /*
* specialfunctions - special functions (e.g.: gamma, zeta, psi) * 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 * 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 * 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) { if (tmp2 < tmp) {
return return
newerror(strcat newerror(strcat
("lngamma(1): something happend that ", ("lngamma(1): something happened ",
"should not have happend")); "that shouldn't have happened"));
} }
} }
} }
@@ -519,8 +519,8 @@ define lngamma(z)
if (tmp2 < tmp) { if (tmp2 < tmp) {
return return
newerror(strcat newerror(strcat
("lngamma(1): something happend ", ("lngamma(1): something happened ",
"that should not have happend")); "that should not have happened"));
} }
} }
} }
@@ -576,8 +576,8 @@ define lngamma(z)
if (tmp2 < tmp) { if (tmp2 < tmp) {
return return
newerror(strcat newerror(strcat
("lngamma(1): something happend ", ("lngamma(1): something happened ",
"that should not have happend")); "that should not have happened"));
} }
} }
} }
@@ -1047,7 +1047,7 @@ define __CZ__ibeta_cf_var_dm(a, b, z, max)
} }
} }
if (m > max) { if (m > max) {
return newerror("ibeta: continous fraction does not converge"); return newerror("ibeta: continuous fraction does not converge");
} }
return f; return f;
} }
@@ -1290,7 +1290,7 @@ define __CZ__erfinvapprox(x)
- (2 / (pi() * a) + (ln(1 - x ^ 2)) / 2)); - (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 Henry E. Fettis. "A stable algorithm for computing the inverse error function
in the 'tail-end' region" Math. Comp., 28:585-587, 1974. in the 'tail-end' region" Math. Comp., 28:585-587, 1974.
*/ */
@@ -1324,7 +1324,7 @@ define __CZ__fettiscf(y, n)
return t / (1 + r); return t / (1 + r);
} }
/* inverse errror function, faster at about x<=.91*/ /* inverse error function, faster at about x<=.91*/
define __CZ__inverfbin(x) define __CZ__inverfbin(x)
{ {
local places approx flow fhigh eps high low mid fmid epsilon; local places approx flow fhigh eps high low mid fmid epsilon;
@@ -1370,7 +1370,7 @@ define erfinv(x)
x = -x; x = -x;
flag = 1; flag = 1;
} }
/* No need for full pecision */ /* No need for full precision */
eps = epsilon(1e-20); eps = epsilon(1e-20);
if (eps >= 1e-40) { if (eps >= 1e-40) {
/* Winitzki, Sergei (6 February 2008). "A handy approximation for the /* Winitzki, Sergei (6 February 2008). "A handy approximation for the

View File

@@ -1,7 +1,7 @@
/* /*
* statistics - Some assorted statistics functions. * 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 * 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 * 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, GW Cran, KJ Martin, GE Thomas,
Remark AS R19 and Algorithm AS 109: Remark AS R19 and Algorithm AS 109:
A Remark on Algorithms AS 63: The Incomplete Beta Integral 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, Applied Statistics,
Volume 26, Number 1, 1977, pages 111-114. Volume 26, Number 1, 1977, pages 111-114.

View File

@@ -1,7 +1,7 @@
/* /*
* test2600 - 2600 series of the regress.cal test suite * 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 * Primary author: Ernest Bowen
* *
@@ -50,7 +50,7 @@
* of b in power(a, b, eps) is large, the computation required for * of b in power(a, b, eps) is large, the computation required for
* a test may be very heavy. * a test may be very heavy.
* *
* Test funcations are called as: * Test functions are called as:
* *
* testabc(str, ..., verbose) * testabc(str, ..., verbose)
* *

View File

@@ -1,7 +1,7 @@
/* /*
* test2700 - 2700 series of the regress.cal test suite * 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 * Primary author: Ernest Bowen
* *
@@ -84,7 +84,7 @@ define mkfrac() = rand(2) ? mkposfrac() : -mkposfrac();
define mksquarereal() = mknonnegreal()^2; 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: * positive integer less than 1e6, could use:
* x = rand(1, 1000); * x = rand(1, 1000);
* return rand(x^2 + 1, (x + 1)^2); * return rand(x^2 + 1, (x + 1)^2);

View File

@@ -1,7 +1,7 @@
/* /*
* test5100 - 5100 series of the regress.cal test suite * 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 * Primary author: Ernest Bowen
* *
@@ -35,7 +35,7 @@ defaultverbose = 1; /* default verbose value */
* with zero value, when the definition is read. * with zero value, when the definition is read.
* *
* The variable a5100 is initialized with the value x if and when this * 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 * is similarly initialized if and when this function is first called positive
* odd x. * odd x.
* *

View File

@@ -1,7 +1,7 @@
/* /*
* test8500 - 8500 series of the regress.cal test suite * 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 * 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); rnd = rand(32);

View File

@@ -1,7 +1,7 @@
/* /*
* test8900 - 8900 series of the regress.cal test suite * 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 * 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 * 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 bernpoly.cal;
read -once brentsolve.cal; read -once brentsolve.cal;
@@ -45,7 +45,7 @@ read -once intnum.cal;
/* /*
* tests of correctness of the functions implemented by the above listed * tests of correctness of the functions implemented by the above listed
* author. All values tested against have been computed with at least two * 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() define t01()
{ {
@@ -1649,7 +1649,7 @@ define t03()
/* test 04 tests polygamma(m,z) for the following values (m==0 gets computed /* test 04 tests polygamma(m,z) for the following values (m==0 gets computed
* by psi()). * by psi()).
* Values tested against were computed with Mathematica(TM) only * 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() define t04()
{ {

View File

@@ -1,7 +1,7 @@
/* /*
* toomcook - implementation of Toom-Cook(3,4) multiplication algorithm * 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 * 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 * 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 * produce_long_random_number(n) returns large pseudo-random numbers.
numbers, e.g.: * Really large numbers, e.g.:
produce_long_random_number(16) * produce_long_random_number(16)
is ca 4,128,561 bits (ca 1,242,821 dec. digits) large. Exact length is not * 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(). * pre-determinable because of the chaotic output of the function random().
*/ */
define __CZ__produce_long_random_number(n) define __CZ__produce_long_random_number(n)
{ {
local ret k; local ret k;

View File

@@ -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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License

View File

@@ -34,7 +34,7 @@ define hurwitzzeta(s,a){
/* /*
According to Linas Vepstas' "An efficient algorithm for accelerating According to Linas Vepstas' "An efficient algorithm for accelerating
the convergence of oscillatory series, useful for computing the 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. is the fastest in most cases.
With a lot of help of the PARI/GP implementation by Prof. Henri Cohen, 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 "limit = " limit;
print "prec = " precision; print "prec = " precision;
} }
/* Full precison plus 5 digits angstzuschlag*/ /* Full precision plus 5 digits angstzuschlag*/
epsilon( (10^(-precision)) * 1e-5); epsilon( (10^(-precision)) * 1e-5);
tmp3=(a+limit_function+0.)^(-s); tmp3=(a+limit_function+0.)^(-s);
sum3 = tmp3/2; sum3 = tmp3/2;

38
calc.c
View File

@@ -1,7 +1,8 @@
/* /*
* calc - arbitrary precision calculator * 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 * Primary author: David I. Bell
* *
@@ -25,7 +26,6 @@
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/ * Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/ */
#include <stdio.h> #include <stdio.h>
#include <signal.h> #include <signal.h>
@@ -65,6 +65,7 @@
#include "lib_calc.h" #include "lib_calc.h"
#include "args.h" #include "args.h"
#include "zmath.h" #include "zmath.h"
#include "strl.h"
#include "have_unistd.h" #include "have_unistd.h"
#if defined(HAVE_UNISTD_H) #if defined(HAVE_UNISTD_H)
@@ -84,6 +85,9 @@
#include "have_unused.h" #include "have_unused.h"
#include "banned.h" /* include after system header <> includes */
/* /*
* S_FUNC definitions and functions * S_FUNC definitions and functions
*/ */
@@ -372,14 +376,20 @@ main(int argc, char **argv)
havearg = TRUE; havearg = TRUE;
if (cmdlen > 0) if (cmdlen > 0)
cmdbuf[cmdlen++] = ' '; cmdbuf[cmdlen++] = ' ';
strcpy(cmdbuf + cmdlen, "read "); strlcpy(cmdbuf + cmdlen, "read ",
cmdlen += 5; sizeof("read "));
if (strncmp(cp, "-once", 5) == 0 && cmdlen += sizeof("read ")-1;
(cp[5] == '\0' || cp[5] == ' ')) { cmdbuf[cmdlen] = '\0';
cp += 5; if (strncmp(cp, "-once",
sizeof("-once")) == 0 &&
(cp[sizeof("-once")-1] == '\0' ||
cp[sizeof("-once")-1] == ' ')) {
cp += sizeof("-once")-1;
haveendstr = (*cp == '\0'); haveendstr = (*cp == '\0');
strcpy(cmdbuf+cmdlen, "-once "); strlcpy(cmdbuf+cmdlen, "-once ",
cmdlen += 6; sizeof("-once "));
cmdlen += sizeof("-once ")-1;
cmdbuf[cmdlen] = '\0';
if (nextcp(&cp, &index, argc, if (nextcp(&cp, &index, argc,
argv, haveendstr)) { argv, haveendstr)) {
fprintf(stderr, "-f -once" fprintf(stderr, "-f -once"
@@ -403,9 +413,9 @@ main(int argc, char **argv)
" long"); " long");
exit(18); exit(18);
} }
/* XXX What if *cp = '\''? */ /* XXX - what if *cp = '\''? */
*bp++ = '\''; *bp++ = '\'';
strncpy(bp, cp, len+1); strlcpy(bp, cp, len+1);
bp += len; bp += len;
*bp++ = '\''; *bp++ = '\'';
cp += len; cp += len;
@@ -427,6 +437,7 @@ main(int argc, char **argv)
if (*cp == ';') if (*cp == ';')
cp++; cp++;
*bp++ = ';'; *bp++ = ';';
*bp = '\0';
cmdlen++; cmdlen++;
s_flag = TRUE; /* -f implies -s */ s_flag = TRUE; /* -f implies -s */
break; break;
@@ -479,7 +490,8 @@ main(int argc, char **argv)
program); program);
exit(21); exit(21);
} }
strncpy(cmdbuf + cmdlen, cp, cplen+1); strlcpy(cmdbuf + cmdlen, cp, cplen+1);
cmdbuf[newcmdlen] = '\0';
cmdlen = newcmdlen; cmdlen = newcmdlen;
index++; index++;
if (index < maxindex) if (index < maxindex)
@@ -746,7 +758,7 @@ main(int argc, char **argv)
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
S_FUNC void S_FUNC void
intint(int UNUSED arg) intint(int UNUSED(arg))
{ {
(void) signal(SIGINT, intint); (void) signal(SIGINT, intint);
if (inputwait || (++abortlevel >= ABORT_NOW)) { if (inputwait || (++abortlevel >= ABORT_NOW)) {

8
calc.h
View File

@@ -1,7 +1,7 @@
/* /*
* calc - definitions for calculator program * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -49,6 +49,8 @@
#define PAGER "PAGER" /* environment variable for help */ #define PAGER "PAGER" /* environment variable for help */
#define SHELL "SHELL" /* environment variable for shell */ #define SHELL "SHELL" /* environment variable for shell */
#define CALCHISTFILE "CALCHISTFILE" /* history file environment variable */ #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 DEFAULTCALCBINDINGS "bindings" /* default calc bindings file */
#define DEFAULTCALCHELP "help" /* help file that -h prints */ #define DEFAULTCALCHELP "help" /* help file that -h prints */
#define DEFAULTSHELL "sh" /* default shell to use */ #define DEFAULTSHELL "sh" /* default shell to use */
@@ -230,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 long errmax; /* if >= 0, error when errcount exceeds errmax */
EXTERN int use_old_std; /* TRUE (-O) => use classic configuration */ EXTERN int use_old_std; /* TRUE (-O) => use classic configuration */
EXTERN int allow_read; /* FALSE => dont open any files for reading */ EXTERN int allow_read; /* FALSE => don't open any files for reading */
EXTERN int allow_write; /* FALSE => dont open any files for writing */ EXTERN int allow_write; /* FALSE => don't open any files for writing */
EXTERN int allow_exec; /* FALSE => may not execute any commands */ EXTERN int allow_exec; /* FALSE => may not execute any commands */
/* /*

295
calc.man
View File

@@ -24,7 +24,7 @@
.\" calculator by David I. Bell .\" calculator by David I. Bell
.\" man page by Landon Noll .\" man page by Landon Noll
.\" .\"
.TH calc 1 "^..^" "2007-02-06" .TH calc 1 "^..^" "Share and enjoy! :-)"
.SH NAME .SH NAME
calc \- arbitrary precision calculator calc \- arbitrary precision calculator
.SH SYNOPSIS .SH SYNOPSIS
@@ -226,7 +226,7 @@ This flag is required when using calc in
It must be at the end of the initial It must be at the end of the initial
.B #! .B #!
line of the script line of the script
and must be immedately preceeded by the and must be immediately preceded by the
.B \-s .B \-s
flag. flag.
.sp 1 .sp 1
@@ -1111,6 +1111,18 @@ Default value: ~/.calc_history
.sp .sp
This variable is not used if calc was compiled with GNU-readline support. This variable is not used if calc was compiled with GNU-readline support.
.sp .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 .SH CREDIT
\& \&
.br .br
@@ -1120,7 +1132,7 @@ was written by David I. Bell.
.sp .sp
The The
.B calc .B calc
primary mirror, calc mailing list and calc bug report primary mirror, and calc bug report
processing is performed by Landon Curt Noll. processing is performed by Landon Curt Noll.
.sp .sp
Landon Curt Noll maintains the master reference source, performs Landon Curt Noll maintains the master reference source, performs
@@ -1199,76 +1211,71 @@ This man page is:
.sp .sp
.in +0.5i .in +0.5i
.nf .nf
Copyright (C) 1999 Landon Curt Noll Copyright (C) 1999-2021 Landon Curt Noll
.fi .fi
.in -0.5i .in -0.5i
.sp .sp
and is covered under version 2.1 GNU Lesser General and is covered under version 2.1 GNU Lesser General
Public License. Public License.
.sp .sp
.SH "CALC MAILING LIST / CALC UPDATES / ENHANCEMENTS" .SH "CALC QUESTIONS"
\& \&
.br .br
If you have a simple general question about calc, send Email to:
.sp .sp
To contribute comments, suggestions, enhancements .in +0.5i
and interesting calc-quest-mail at asthe dot com
.B calc
resource files, and
shell scripts please join the calc-tester
low volume moderated calc mailing list.
.sp .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 .sp
.in +0.5i .in +0.5i
.nf .nf
https://www.listbox.com/subscribe/?list_id=239342 http://www.isthe.com/chongo/tech/comp/calc/calc-question.html
.fi .fi
.in -0.5i .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 .in -0.5i
.sp .sp
If you need a human to help you with your mailing list subscription, Please limit your questions to general questions about calc.
or if you have problems with the above procedure, please We cannot go into great detail in our answers,
send EMail to our special address: nor can we do your homework, nor can
we do much more than answer short general questions about calc.
.sp .sp
.in +0.5i Please be patient as we cannot always respond to Email messages quickly.
.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.
.sp .sp
.SH "BUG REPORTS / BUG FIXES" .SH "BUG REPORTS / BUG FIXES"
\& \&
@@ -1278,28 +1285,51 @@ Send bug reports and bug fixes to:
.sp .sp
.in +0.5i .in +0.5i
.nf .nf
calc-bug-report at asthe dot com calc-bugrept 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 .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 .in -0.5i
.sp .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 .sp
.in +0.5i .in +0.5i
.nf .nf
calc bug report http://www.isthe.com/chongo/tech/comp/calc/calc-bugrept.html
.fi .fi
.in -0.5i .in -0.5i
.in -0.5i
.sp .sp
You may have additional words in your subject line. .B IMPORTANT:
.in If your Email doesn't contain the above phrase,
However, you may find it more helpful to simply subscribe to the then we
calc-tester mailing list (see above) and then to send your report .B WILL NOT SEE
to that mailing list as a wider set calc testers may be able to help you. your Email.
.sp
.B PLEASE BE SURE
you have that
.B SPECIAL PHRASE
somewhere in the subject line!
.sp .sp
See the See the
.I BUGS .I BUGS
@@ -1315,6 +1345,135 @@ help bugs
.sp .sp
for more information about bug reporting. for more information about bug reporting.
.sp .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" .SH "CALC WEB SITE"
\& \&
.br .br

View File

@@ -28,6 +28,8 @@ BEGIN {
printf("#include <stdio.h>\n"); printf("#include <stdio.h>\n");
printf("#include \"calcerr.h\"\n\n"); printf("#include \"calcerr.h\"\n\n");
printf("#include \"have_const.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("/*\n");
printf(" * names of calc error values\n"); printf(" * names of calc error values\n");
printf(" */\n"); printf(" */\n");

View File

@@ -1,7 +1,7 @@
/* /*
* codegen - module to generate opcodes from the input tokens * 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 * Primary author: David I. Bell
* *
@@ -34,6 +34,7 @@
#include "lib_calc.h" #include "lib_calc.h"
#include "calc.h" #include "calc.h"
#include "alloc.h"
#include "token.h" #include "token.h"
#include "symbol.h" #include "symbol.h"
#include "label.h" #include "label.h"
@@ -41,11 +42,16 @@
#include "str.h" #include "str.h"
#include "func.h" #include "func.h"
#include "conf.h" #include "conf.h"
#include "strl.h"
#if defined(_WIN32) && !defined(__CYGWIN__) #if defined(_WIN32) && !defined(__CYGWIN__)
# include <direct.h> # include <direct.h>
#endif #endif
#include "banned.h" /* include after system header <> includes */
STATIC BOOL rdonce; /* TRUE => do not reread this file */ STATIC BOOL rdonce; /* TRUE => do not reread this file */
FUNC *curfunc; FUNC *curfunc;
@@ -144,11 +150,9 @@ getcommands(BOOL toplevel)
case 1: case 1:
case -1: case -1:
if(i == 1) { if(i == 1) {
strncpy(name, strlcpy(name,
DEFAULTCALCHELP, DEFAULTCALCHELP,
MAXCMD); MAXCMD+1);
/* paranoia */
name[MAXCMD] = '\0';
givehelp(name); givehelp(name);
} }
break; break;
@@ -2354,8 +2358,7 @@ getfilename(char *name, size_t namelen, BOOL *once)
/* use the value of the literal string */ /* use the value of the literal string */
s = findstring(tokenstring()); s = findstring(tokenstring());
strncpy(name, s->s_str, namelen-1); strlcpy(name, s->s_str, namelen);
name[namelen-1] = '\0';
sfree(s); sfree(s);
break; break;
@@ -2392,8 +2395,7 @@ getfilename(char *name, size_t namelen, BOOL *once)
} }
/* return symbol name or value of global var string */ /* return symbol name or value of global var string */
strncpy(name, symstr, namelen-1); strlcpy(name, symstr, namelen);
name[namelen-1] = '\0';
break; break;
case T_NEWLINE: case T_NEWLINE:
@@ -2431,7 +2433,7 @@ getshowstatement(void)
switch (gettoken()) { switch (gettoken()) {
case T_SYMBOL: case T_SYMBOL:
strncpy(name, tokensymbol(), 4); strlcpy(name, tokensymbol(), sizeof(name));
name[4] = '\0'; name[4] = '\0';
/* Yuck! */ /* Yuck! */
arg = stringindex("buil\000" arg = stringindex("buil\000"
@@ -2595,8 +2597,7 @@ getid(char *buf)
*buf = '\0'; *buf = '\0';
return FALSE; return FALSE;
} }
strncpy(buf, tokensymbol(), SYMBOLSIZE); strlcpy(buf, tokensymbol(), SYMBOLSIZE+1);
buf[SYMBOLSIZE] = '\0';
return TRUE; return TRUE;
} }
@@ -2607,7 +2608,7 @@ getid(char *buf)
* global or if symtype is static and the old variable is at the same * 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 * level. Warnings are issued when a global or local variable is
* redeclared and when in the same body the variable will be accessible only * redeclared and when in the same body the variable will be accessible only
^ with the appropriate specfier. ^ with the appropriate specifier.
*/ */
S_FUNC void S_FUNC void
definesymbol(char *name, int symtype) definesymbol(char *name, int symtype)

View File

@@ -1,7 +1,7 @@
/* /*
* comfunc - extended precision complex arithmetic non-primitive routines * 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 * Primary author: David I. Bell
* *
@@ -29,6 +29,10 @@
#include "config.h" #include "config.h"
#include "cmath.h" #include "cmath.h"
#include "banned.h" /* include after system header <> includes */
/* /*
* cache the natural logarithm of 10 * cache the natural logarithm of 10
*/ */
@@ -553,7 +557,7 @@ c_log(COMPLEX *c, NUMBER *epsilon)
/* first time call */ /* first time call */
cln_10_epsilon = qcopy(epsilon); cln_10_epsilon = qcopy(epsilon);
} else if (qcmp(cln_10_epsilon, epsilon) == TRUE) { } else if (qcmp(cln_10_epsilon, epsilon) == TRUE) {
/* replaced cacheed value with epsilon arg */ /* replaced cached value with epsilon arg */
qfree(cln_10_epsilon); qfree(cln_10_epsilon);
cln_10_epsilon = qcopy(epsilon); cln_10_epsilon = qcopy(epsilon);
} else if (cln_10 != NULL) { } else if (cln_10 != NULL) {

View File

@@ -1,7 +1,7 @@
/* /*
* commath - extended precision complex arithmetic primitive routines * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -27,6 +27,9 @@
#include "cmath.h" #include "cmath.h"
#include "banned.h" /* include after system header <> includes */
COMPLEX _czero_ = { &_qzero_, &_qzero_, 1 }; COMPLEX _czero_ = { &_qzero_, &_qzero_, 1 };
COMPLEX _cone_ = { &_qone_, &_qzero_, 1 }; COMPLEX _cone_ = { &_qone_, &_qzero_, 1 };
COMPLEX _conei_ = { &_qzero_, &_qone_, 1 }; COMPLEX _conei_ = { &_qzero_, &_qone_, 1 };

View File

@@ -1,7 +1,7 @@
/* /*
* config - configuration routines * 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 * Primary author: David I. Bell
* *
@@ -46,6 +46,7 @@
#endif #endif
#include "calc.h" #include "calc.h"
#include "alloc.h"
#include "token.h" #include "token.h"
#include "zrand.h" #include "zrand.h"
#include "block.h" #include "block.h"
@@ -53,12 +54,17 @@
#include "config.h" #include "config.h"
#include "str.h" #include "str.h"
#include "custom.h" #include "custom.h"
#include "strl.h"
#include "have_strdup.h" #include "have_strdup.h"
#if !defined(HAVE_STRDUP) #if !defined(HAVE_STRDUP)
# define strdup(x) calc_strdup((CONST char *)(x)) # define strdup(x) calc_strdup((CONST char *)(x))
#endif /* HAVE_STRDUP */ #endif /* HAVE_STRDUP */
#include "banned.h" /* include after system header <> includes */
/* /*
* deal with systems that lack a defined CLK_TCK * deal with systems that lack a defined CLK_TCK
*/ */
@@ -757,7 +763,7 @@ setconfig(int type, VALUE *vp)
math_error("Cannot duplicate new prompt"); math_error("Cannot duplicate new prompt");
/*NOTREACHED*/ /*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); free(conf->prompt1);
conf->prompt1 = p; conf->prompt1 = p;
break; break;
@@ -772,7 +778,7 @@ setconfig(int type, VALUE *vp)
math_error("Cannot duplicate new more prompt"); math_error("Cannot duplicate new more prompt");
/*NOTREACHED*/ /*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); free(conf->prompt2);
conf->prompt2 = p; conf->prompt2 = p;
break; break;

View File

@@ -1,7 +1,7 @@
/* /*
* config - configuration routines * 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 * Primary author: Landon Curt Noll
* *
@@ -130,7 +130,7 @@ struct config {
LEN sq2; /* size of number to use square algorithm 2 */ LEN sq2; /* size of number to use square algorithm 2 */
LEN pow2; /* size of modulus to use REDC for powers */ LEN pow2; /* size of modulus to use REDC for powers */
LEN redc2; /* size of modulus to use REDC algorithm 2 */ 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 */ BOOL tab_ok; /* ok to print tab before numeric values */
LEN quomod; /* quomod() default rounding mode */ LEN quomod; /* quomod() default rounding mode */
LEN quo; /* quotient // 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 */ BOOL *allow_custom; /* ptr to if custom functions are allowed */
char *version; /* calc version string */ char *version; /* calc version string */
int baseb; /* base for calculations */ 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 */ BOOL dupvar_warn; /* TRUE => warn of var name collisions */
}; };
typedef struct config CONFIG; typedef struct config CONFIG;

View File

@@ -1,7 +1,7 @@
/* /*
* const - constant number storage module * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -28,6 +28,10 @@
#include "calc.h" #include "calc.h"
#include "qmath.h" #include "qmath.h"
#include "banned.h" /* include after system header <> includes */
#define CONSTALLOCSIZE 400 /* number of constants to allocate */ #define CONSTALLOCSIZE 400 /* number of constants to allocate */
STATIC unsigned long constcount;/* number of constants defined */ STATIC unsigned long constcount;/* number of constants defined */

View File

@@ -1,7 +1,7 @@
# #
# cscript - makefile for calc shell script files # 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 # 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 # the terms of the version 2.1 of the GNU Lesser General Public License
@@ -27,9 +27,27 @@
# Makefile by Landon Curt Noll # 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/sh
#SHELL= /bin/bash
#SHELL= /bin/zsh
#### ####
# Normally, the upper level makefile will set these values. We provide # Normally, the upper level makefile will set these values. We provide
@@ -165,20 +183,27 @@ Q=@
# standard tools # standard tools
# #
CAT= cat
CHMOD= chmod CHMOD= chmod
CMP= cmp
CO= co
CP= cp
FMT= fmt
MKDIR= mkdir
MV= mv
RM= rm
RMDIR= rmdir
SED= sed SED= sed
SORT= sort SORT= sort
FMT= fmt
CMP= cmp
MKDIR= mkdir
RMDIR= rmdir
RM= rm
TOUCH= touch TOUCH= touch
MV= mv
CP= cp
CO= co
TRUE= true 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 # The ${SCRIPT} list is the list of calc shell script files (without the .calc
# extension) which will be installed. # extension) which will be installed.
# #
@@ -188,18 +213,17 @@ TRUE= true
# To add a script: # To add a script:
# #
# 1) Name the file with a .calc filename extension # 1) Name the file with a .calc filename extension
# 2) Place that file under RCS control # 2) Add the name, without the .calc extension to the ${SCRIPT} below
# 3) Add the name, without the .calc extension to the ${SCRIPT} below # 3) Write out this Makefile
# 4) Write out this Makefile # 4) Replace the SCRIPT= and SCRIPT_SRC= lines with the output of:
# 5) Replace the ${SCRIPT} and ${SCRIPT_SRC} lines with the output of:
# #
# make detaillist # make detaillist
# #
SCRIPT= 4dsphere fproduct mersenne piforever plus powerterm \ SCRIPT= 4dsphere fproduct mersenne piforever plus powerterm simple \
simple square square
SCRIPT_SRC= 4dsphere.calc fproduct.calc mersenne.calc \ SCRIPT_SRC= 4dsphere.calc fproduct.calc mersenne.calc piforever.calc \
piforever.calc plus.calc powerterm.calc simple.calc plus.calc powerterm.calc simple.calc square.calc
# These files are found (but not built) in the distribution # These files are found (but not built) in the distribution
# #
@@ -263,11 +287,7 @@ detaillist:
${Q} -(echo "xxxxxxx"; \ ${Q} -(echo "xxxxxxx"; \
for i in ${SCRIPT} /dev/null; do \ for i in ${SCRIPT} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
if [ ! -f RCS/$$i.calc,v ]; then \ echo $$i; \
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
else \
echo $$i; \
fi; \
fi; \ fi; \
done | LANG=C ${SORT}) | ${FMT} -70 | \ done | LANG=C ${SORT}) | ${FMT} -70 | \
${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \ ${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \
@@ -276,11 +296,7 @@ detaillist:
${Q} -(echo "xxxxxxxxxxx"; \ ${Q} -(echo "xxxxxxxxxxx"; \
for i in ${SCRIPT} /dev/null; do \ for i in ${SCRIPT} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
if [ ! -f RCS/$$i.calc,v ]; then \ echo $$i.calc; \
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
else \
echo $$i.calc; \
fi; \
fi; \ fi; \
done | LANG=C ${SORT}) | ${FMT} -70 | \ done | LANG=C ${SORT}) | ${FMT} -70 | \
${SED} -e '1s/xxxxxxxxxxx/SCRIPT_SRC=/' -e '2,$$s/^/ /' \ ${SED} -e '1s/xxxxxxxxxxx/SCRIPT_SRC=/' -e '2,$$s/^/ /' \
@@ -311,7 +327,7 @@ depend:
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
echo "$$i: $$i.calc"; \ echo "$$i: $$i.calc"; \
echo ' @$${RM} -f $$@'; \ 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 'calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \
echo ' @$${CHMOD} +x $$@'; \ echo ' @$${CHMOD} +x $$@'; \
fi; \ fi; \
@@ -326,20 +342,13 @@ depend:
${Q} ${CAT} makedep.out >> ${MAKE_FILE} ${Q} ${CAT} makedep.out >> ${MAKE_FILE}
${Q} ${RM} -f makedep.out ${Q} ${RM} -f makedep.out
-${Q} if ${CMP} -s ${MAKE_FILE}.bak ${MAKE_FILE}; then \ -${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}; \ ${MV} -f ${MAKE_FILE}.bak ${MAKE_FILE}; \
else \ else \
${RM} -f ${MAKE_FILE}.tmp; \ echo 'old cscript/${MAKE_FILE} is now cscript/${MAKE_FILE}.bak'; \
${MV} ${MAKE_FILE} ${MAKE_FILE}.tmp; \ echo 'new cscript/${MAKE_FILE} formed'; \
if [ -d RCS -a ! -w "${MAKE_FILE}" ]; then \ echo 'try: diff -u cscript/${MAKE_FILE}.bak cscript/${MAKE_FILE}'; \
${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; \
fi fi
## ##

View File

@@ -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 4dsphere
Determine if 6 points lie on the surface of a 4-dimensional sphere in R^4. Determine if 6 points lie on the surface of a 4-dimensional sphere in R^4.
@@ -107,7 +76,7 @@ mersenne exp
piforever 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 ... plus arg ...
@@ -125,7 +94,7 @@ simple
A trivial example of a calc shell script. 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 ## 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 ## the terms of the version 2.1 of the GNU Lesser General Public License

View File

@@ -1,8 +1,8 @@
#!/usr/local/src/bin/calc/calc -q -s -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,2019 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License

0
cscript/simple.calc Executable file → Normal file
View File

View File

@@ -1,7 +1,7 @@
/* /*
* custom - interface for custom software and hardware interfaces * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -47,6 +47,10 @@
#endif /* CUSTOM */ #endif /* CUSTOM */
#include "banned.h" /* include after system header <> includes */
BOOL allow_custom = FALSE; /* TRUE => custom builtins allowed */ 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*/ /*ARGSUSED*/
void void

View File

@@ -1,7 +1,7 @@
/* /*
* custom - interface for custom software and hardware interfaces * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -35,7 +35,7 @@
* *
* before they include this file. * 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! * stuff in this file!
*/ */
@@ -45,7 +45,7 @@
/* /*
* arg count definitons * arg count definitions
*/ */
#define MAX_CUSTOM_ARGS 100 /* maximum number of custom arguments */ #define MAX_CUSTOM_ARGS 100 /* maximum number of custom arguments */

View File

@@ -220,7 +220,7 @@ Step 5: Write your custom function
NOTE: If you do not use any of the 3 function parameters, NOTE: If you do not use any of the 3 function parameters,
then you should declare that function parameter to be UNUSED. then you should declare that function parameter to be UNUSED.
For example, if the count and vals parameters were not used 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*/ /*ARGSUSED*/
VALUE VALUE
@@ -645,7 +645,7 @@ Step 12: Contribute
and consider submitting your custom function for possible and consider submitting your custom function for possible
inclusion in later versions of calc. 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 ## 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 ## the terms of the version 2.1 of the GNU Lesser General Public License

View File

@@ -2,7 +2,7 @@
# #
# custom - makefile for calc custom routines # 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 # 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 # 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 # calculator by David I. Bell with help/mods from others
# Makefile by Landon Curt Noll # 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 */ #if 0 /* start of skip for non-Gnu makefiles */
############################################################################## ##############################################################################
#-=-=-=-=-=-=-=-=- Identify the target machine, if possible -=-=-=-=-=-=-=-=-# #-=-=-=-=-=-=-=-=- Identify the target machine, if possible -=-=-=-=-=-=-=-=-#
@@ -36,7 +95,7 @@
# #
# make ...__optional_arguments_... target=value # 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),) ifeq ($(target),)
target=$(shell uname -s 2>/dev/null) target=$(shell uname -s 2>/dev/null)
@@ -125,7 +184,7 @@ Q=@
#INCDIR= /dev/env/DJDIR/include #INCDIR= /dev/env/DJDIR/include
INCDIR= /usr/include INCDIR= /usr/include
# where to install calc realted things # where to install calc related things
# #
# ${BINDIR} where to install calc binary files # ${BINDIR} where to install calc binary files
# ${LIBDIR} where calc link library (*.a) files are installed # ${LIBDIR} where calc link library (*.a) files are installed
@@ -348,7 +407,7 @@ EXT=
# The default calc versions # The default calc versions
# #
VERSION= 2.12.7.5 VERSION= 2.12.9.0
# Names of shared libraries with versions # Names of shared libraries with versions
# #
@@ -357,26 +416,25 @@ LIB_EXT_VERSION= ${LIB_EXT}.${VERSION}
# standard tools # standard tools
# #
SHELL= /bin/sh
SED= sed
MAKEDEPEND= makedepend
GREP= egrep
CHMOD= chmod
FMT= fmt
SORT= sort
CMP= cmp
AR= ar AR= ar
RM= rm
TOUCH= touch
MKDIR= mkdir
RMDIR= rmdir
MV= mv
CP= cp
CO= co
TRUE= true
MAKE= make
LN= ln
AWK= awk 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_CFLAGS are flags given to ${CC} when compiling C files
# EXTRA_LDFLAGS are flags given to ${CC} when linking progs # 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 # NOTE: These should be left blank in this Makefile to make it
# easier to add stuff on the command line. If you want to # easier to add stuff on the command line. If you want to
# to change the way calc is compiled by this Makefile, change # 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_CFLAGS=
EXTRA_LDFLAGS= 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 # NOTE: This does not work for: make-XYZ-only and BLD_TYPE != make-XYZ-only
# #
ifeq ($(BLD_TYPE),calc-static-only) ifeq ($(BLD_TYPE),calc-static-only)
ICFLAGS= ${COMMON_CFLAGS} ${CC_STATIC} ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_STATIC}
else else
ICFLAGS= ${COMMON_CFLAGS} ${CC_SHARE} ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_SHARE}
endif endif
CFLAGS= ${ICFLAGS} ${CCOPT} CFLAGS= ${ICFLAGS} ${CCOPT}
@@ -466,12 +524,20 @@ LDFLAGS= ${LD_DEBUG} ${ILDFLAGS}
# CCOPT are flags given to ${CC} for optimization # CCOPT are flags given to ${CC} for optimization
# CCWARN are flags given to ${CC} for warning message control # CCWARN are flags given to ${CC} for warning message control
# #
# WNO_IMPLICT, WNO_ERROR_LONG_LONG and WNO_LONG_LONG are given to ${CC} # The following are given to ${CC}:
# when compiling special .o files that may need special compile options #
# 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, # NOTE: These flags simply turn off certain compiler warnings,
# which is useful only when CCWERR is set to -Werror. # which is useful only when CCWERR is set to -Werror.
#
# NOTE: If your compiler does not have these -Wno files, just # NOTE: If your compiler does not have these -Wno files, just
# set these variables to nothing as in: # set these variables to nothing as in:
#
# WNO_IMPLICT= # WNO_IMPLICT=
# WNO_ERROR_LONG_LONG= # WNO_ERROR_LONG_LONG=
# WNO_LONG_LONG= # WNO_LONG_LONG=
@@ -482,6 +548,9 @@ LDFLAGS= ${LD_DEBUG} ${ILDFLAGS}
# to abort on warnings, then leave CCWERR blank. # to abort on warnings, then leave CCWERR blank.
# CCMISC are misc flags given to ${CC} # 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 # 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) # 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 # # 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. # # 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 # ILDFLAGS for ${CC} in linking intermediate programs used to help compile calc
# LDFLAGS for ${CC} in linking calc programs other than intermediate programs # 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} CFLAGS= ${ICFLAGS} ${CCOPT}
# #
ILDFLAGS= ${COMMON_LDFLAGS} ${LD_STATIC} 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 # NOTE: This does not work for: make-XYZ-only and BLD_TYPE != make-XYZ-only
# #
ifeq ($(BLD_TYPE),calc-static-only) ifeq ($(BLD_TYPE),calc-static-only)
ICFLAGS= ${COMMON_CFLAGS} ${CC_STATIC} ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_STATIC}
else else
ICFLAGS= ${COMMON_CFLAGS} ${CC_SHARE} ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_SHARE}
endif endif
CFLAGS= ${ICFLAGS} ${CCOPT} CFLAGS= ${ICFLAGS} ${CCOPT}
@@ -1084,7 +1153,7 @@ CUSTCALC_OBJ= ${REQUIRED_OBJ} ${CUSTOM_OBJ}
# #
C_SRC= ${REQUIRED_SRC} ${CUSTOM_SRC} 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} 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 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} 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. # sub-directory called calc/lib.
# #
# NOTE: Due to bogus shells found on one common system we must have # 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 # Home grown make dependency rules. Your system make not support
# or have the needed tools. You can ignore this section. # 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 # 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 # prevention lines. This allows us to build a static depend list that will
# satisfy all possible cpp symbol definition combinations. # satisfy all possible cpp symbol definition combinations.
@@ -1222,7 +1291,7 @@ Makefile.simple: ${MAKE_FILE}
depend: depend:
${Q} if [ -f ${MAKE_FILE}.bak ]; then \ ${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; \ exit 1; \
else \ else \
${TRUE}; \ ${TRUE}; \
@@ -1238,9 +1307,7 @@ depend:
fi; \ fi; \
done done
-${Q} for i in ${H_SRC} /dev/null; do \ -${Q} for i in ${H_SRC} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \ if [ "$$i" = "/dev/null" ]; then continue; fi; \
continue; \
fi; \
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \ tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
echo "#if !defined($$tag)" > "skel/custom/$$i"; \ echo "#if !defined($$tag)" > "skel/custom/$$i"; \
echo "#define $$tag" >> "skel/custom/$$i"; \ echo "#define $$tag" >> "skel/custom/$$i"; \
@@ -1249,25 +1316,25 @@ depend:
echo '#endif /* '"$$tag"' */' >> "skel/custom/$$i"; \ echo '#endif /* '"$$tag"' */' >> "skel/custom/$$i"; \
done done
${Q} (cd ..; ${MAKE} -f ${TOP_MAKE_FILE} hsrc) ${Q} (cd ..; ${MAKE} -f ${TOP_MAKE_FILE} hsrc)
${Q} for i in `cd ..; ${MAKE} -f ${TOP_MAKE_FILE} h_list 2>&1 | \ ${MAKE} -f ../${TOP_MAKE_FILE} h_list 2>/dev/null | \
${SED} -e '/Entering directory/d' \ while read i; do \
-e '/Nothing to be done/d' \ if [ ! -f "../$$i" ]; then continue; fi; \
-e '/Leaving directory/d'` /dev/null; do \ tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
if [ "$$i" = "/dev/null" ]; then \ echo "#if !defined($$tag)" > "skel/$$i"; \
continue; \ echo "#define $$tag" >> "skel/$$i"; \
fi; \ ${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \ >> "skel/$$i"; \
echo "#if !defined($$tag)" > "skel/$$i"; \ echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
echo "#define $$tag" >> "skel/$$i"; \ done
${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
>> "skel/$$i"; \
echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
done
${Q} ${RM} -f skel/custom/makedep.out ${Q} ${RM} -f skel/custom/makedep.out
${Q} echo custom/skel formed ${Q} echo custom/skel formed
${Q} echo forming custom dependency list ${Q} echo forming custom dependency list
${Q} :> skel/custom/makedep.out ${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 \ -${Q} for i in ${C_SRC} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \ echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \
@@ -1282,22 +1349,16 @@ depend:
${Q} ${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' \ ${Q} ${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' \
${MAKE_FILE}.bak > ${MAKE_FILE} ${MAKE_FILE}.bak > ${MAKE_FILE}
${Q} ${GREP} -v '^#' skel/custom/makedep.out >> ${MAKE_FILE} ${Q} ${GREP} -v '^#' skel/custom/makedep.out >> ${MAKE_FILE}
${Q} echo removing skel
${Q} ${RM} -rf skel ${Q} ${RM} -rf skel
-${Q} if ${CMP} -s ${MAKE_FILE}.bak ${MAKE_FILE}; then \ -${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}; \ ${MV} -f ${MAKE_FILE}.bak ${MAKE_FILE}; \
else \ else \
${RM} -f ${MAKE_FILE}.tmp; \ echo 'old custom/${MAKE_FILE} is now custom/${MAKE_FILE}.bak'; \
${MV} ${MAKE_FILE} ${MAKE_FILE}.tmp; \ echo 'new custom/${MAKE_FILE} formed'; \
if [ -d RCS -a ! -w "${MAKE_FILE}" ]; then \ echo 'try: diff -u custom/${MAKE_FILE}.bak custom/${MAKE_FILE}'; \
${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; \
fi fi
## ##
@@ -1344,6 +1405,7 @@ clobber: clean
${RM} -f libcustcalc${LIB_EXT} ${RM} -f libcustcalc${LIB_EXT}
${RM} -f libcustcalc.a ${RM} -f libcustcalc.a
${RM} -f libcustcalc* ${RM} -f libcustcalc*
${RM} -rf skel
${V} echo remove files that are obsolete ${V} echo remove files that are obsolete
#if 0 /* start of skip for non-Gnu makefiles */ #if 0 /* start of skip for non-Gnu makefiles */
${RM} -f Makefile.simple ${RM} -f Makefile.simple
@@ -1531,7 +1593,7 @@ uninstall:
if [ -f "${T}${CUSTOMCALDIR}/libcustcalc.a" ]; then \ if [ -f "${T}${CUSTOMCALDIR}/libcustcalc.a" ]; then \
echo "cannot uninstall ${T}${CUSTOMCALDIR}/libcustcalc.a"; \ echo "cannot uninstall ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
else \ else \
echo "uninstalled ${T}${CUSTOMCALDIR}/libcustcalc.a"; \ echo "un-installed ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
fi; \ fi; \
fi fi
-${Q} for i in ${CUSTOM_HELP} /dev/null; do \ -${Q} for i in ${CUSTOM_HELP} /dev/null; do \
@@ -1543,7 +1605,7 @@ uninstall:
if [ -f "${T}${CUSTOMHELPDIR}/$$i" ]; then \ if [ -f "${T}${CUSTOMHELPDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CUSTOMHELPDIR}/$$i"; \ echo "cannot uninstall ${T}${CUSTOMHELPDIR}/$$i"; \
else \ else \
echo "uninstalled ${T}${CUSTOMHELPDIR}/$$i"; \ echo "un-installed ${T}${CUSTOMHELPDIR}/$$i"; \
fi; \ fi; \
fi; \ fi; \
done done
@@ -1556,7 +1618,7 @@ uninstall:
if [ -f "${T}${CUSTOMCALDIR}/$$i" ]; then \ if [ -f "${T}${CUSTOMCALDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CUSTOMCALDIR}/$$i"; \ echo "cannot uninstall ${T}${CUSTOMCALDIR}/$$i"; \
else \ else \
echo "uninstalled ${T}${CUSTOMCALDIR}/$$i"; \ echo "un-installed ${T}${CUSTOMCALDIR}/$$i"; \
fi; \ fi; \
fi; \ fi; \
done done
@@ -1569,7 +1631,7 @@ uninstall:
if [ -f "${T}${CUSTOMINCDIR}/$$i" ]; then \ if [ -f "${T}${CUSTOMINCDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CUSTOMINCDIR}/$$i"; \ echo "cannot uninstall ${T}${CUSTOMINCDIR}/$$i"; \
else \ else \
echo "uninstalled ${T}${CUSTOMINCDIR}/$$i"; \ echo "un-installed ${T}${CUSTOMINCDIR}/$$i"; \
fi; \ fi; \
fi; \ fi; \
done done
@@ -1590,6 +1652,7 @@ uninstall:
# DO NOT DELETE THIS LINE -- make depend depends on it. # DO NOT DELETE THIS LINE -- make depend depends on it.
c_argv.o: ../alloc.h c_argv.o: ../alloc.h
c_argv.o: ../banned.h
c_argv.o: ../block.h c_argv.o: ../block.h
c_argv.o: ../byteswap.h c_argv.o: ../byteswap.h
c_argv.o: ../calc.h c_argv.o: ../calc.h
@@ -1600,6 +1663,7 @@ c_argv.o: ../custom.h
c_argv.o: ../decl.h c_argv.o: ../decl.h
c_argv.o: ../endian_calc.h c_argv.o: ../endian_calc.h
c_argv.o: ../hash.h c_argv.o: ../hash.h
c_argv.o: ../have_ban_pragma.h
c_argv.o: ../have_const.h c_argv.o: ../have_const.h
c_argv.o: ../have_memmv.h c_argv.o: ../have_memmv.h
c_argv.o: ../have_newstr.h c_argv.o: ../have_newstr.h
@@ -1615,6 +1679,7 @@ c_argv.o: ../value.h
c_argv.o: ../zmath.h c_argv.o: ../zmath.h
c_argv.o: c_argv.c c_argv.o: c_argv.c
c_devnull.o: ../alloc.h c_devnull.o: ../alloc.h
c_devnull.o: ../banned.h
c_devnull.o: ../block.h c_devnull.o: ../block.h
c_devnull.o: ../byteswap.h c_devnull.o: ../byteswap.h
c_devnull.o: ../calcerr.h c_devnull.o: ../calcerr.h
@@ -1624,6 +1689,7 @@ c_devnull.o: ../custom.h
c_devnull.o: ../decl.h c_devnull.o: ../decl.h
c_devnull.o: ../endian_calc.h c_devnull.o: ../endian_calc.h
c_devnull.o: ../hash.h c_devnull.o: ../hash.h
c_devnull.o: ../have_ban_pragma.h
c_devnull.o: ../have_const.h c_devnull.o: ../have_const.h
c_devnull.o: ../have_memmv.h c_devnull.o: ../have_memmv.h
c_devnull.o: ../have_newstr.h c_devnull.o: ../have_newstr.h
@@ -1640,6 +1706,7 @@ c_devnull.o: ../value.h
c_devnull.o: ../zmath.h c_devnull.o: ../zmath.h
c_devnull.o: c_devnull.c c_devnull.o: c_devnull.c
c_help.o: ../alloc.h c_help.o: ../alloc.h
c_help.o: ../banned.h
c_help.o: ../block.h c_help.o: ../block.h
c_help.o: ../byteswap.h c_help.o: ../byteswap.h
c_help.o: ../calcerr.h c_help.o: ../calcerr.h
@@ -1649,6 +1716,7 @@ c_help.o: ../custom.h
c_help.o: ../decl.h c_help.o: ../decl.h
c_help.o: ../endian_calc.h c_help.o: ../endian_calc.h
c_help.o: ../hash.h c_help.o: ../hash.h
c_help.o: ../have_ban_pragma.h
c_help.o: ../have_const.h c_help.o: ../have_const.h
c_help.o: ../have_memmv.h c_help.o: ../have_memmv.h
c_help.o: ../have_newstr.h c_help.o: ../have_newstr.h
@@ -1665,6 +1733,7 @@ c_help.o: ../value.h
c_help.o: ../zmath.h c_help.o: ../zmath.h
c_help.o: c_help.c c_help.o: c_help.c
c_pmodm127.o: ../alloc.h c_pmodm127.o: ../alloc.h
c_pmodm127.o: ../banned.h
c_pmodm127.o: ../block.h c_pmodm127.o: ../block.h
c_pmodm127.o: ../byteswap.h c_pmodm127.o: ../byteswap.h
c_pmodm127.o: ../calcerr.h c_pmodm127.o: ../calcerr.h
@@ -1674,6 +1743,7 @@ c_pmodm127.o: ../custom.h
c_pmodm127.o: ../decl.h c_pmodm127.o: ../decl.h
c_pmodm127.o: ../endian_calc.h c_pmodm127.o: ../endian_calc.h
c_pmodm127.o: ../hash.h c_pmodm127.o: ../hash.h
c_pmodm127.o: ../have_ban_pragma.h
c_pmodm127.o: ../have_const.h c_pmodm127.o: ../have_const.h
c_pmodm127.o: ../have_memmv.h c_pmodm127.o: ../have_memmv.h
c_pmodm127.o: ../have_newstr.h c_pmodm127.o: ../have_newstr.h
@@ -1689,6 +1759,7 @@ c_pmodm127.o: ../value.h
c_pmodm127.o: ../zmath.h c_pmodm127.o: ../zmath.h
c_pmodm127.o: c_pmodm127.c c_pmodm127.o: c_pmodm127.c
c_pzasusb8.o: ../alloc.h c_pzasusb8.o: ../alloc.h
c_pzasusb8.o: ../banned.h
c_pzasusb8.o: ../block.h c_pzasusb8.o: ../block.h
c_pzasusb8.o: ../byteswap.h c_pzasusb8.o: ../byteswap.h
c_pzasusb8.o: ../calcerr.h c_pzasusb8.o: ../calcerr.h
@@ -1698,6 +1769,7 @@ c_pzasusb8.o: ../custom.h
c_pzasusb8.o: ../decl.h c_pzasusb8.o: ../decl.h
c_pzasusb8.o: ../endian_calc.h c_pzasusb8.o: ../endian_calc.h
c_pzasusb8.o: ../hash.h c_pzasusb8.o: ../hash.h
c_pzasusb8.o: ../have_ban_pragma.h
c_pzasusb8.o: ../have_const.h c_pzasusb8.o: ../have_const.h
c_pzasusb8.o: ../have_memmv.h c_pzasusb8.o: ../have_memmv.h
c_pzasusb8.o: ../have_newstr.h c_pzasusb8.o: ../have_newstr.h
@@ -1713,6 +1785,7 @@ c_pzasusb8.o: ../value.h
c_pzasusb8.o: ../zmath.h c_pzasusb8.o: ../zmath.h
c_pzasusb8.o: c_pzasusb8.c c_pzasusb8.o: c_pzasusb8.c
c_register.o: ../alloc.h c_register.o: ../alloc.h
c_register.o: ../banned.h
c_register.o: ../block.h c_register.o: ../block.h
c_register.o: ../byteswap.h c_register.o: ../byteswap.h
c_register.o: ../calc.h c_register.o: ../calc.h
@@ -1723,6 +1796,7 @@ c_register.o: ../custom.h
c_register.o: ../decl.h c_register.o: ../decl.h
c_register.o: ../endian_calc.h c_register.o: ../endian_calc.h
c_register.o: ../hash.h c_register.o: ../hash.h
c_register.o: ../have_ban_pragma.h
c_register.o: ../have_const.h c_register.o: ../have_const.h
c_register.o: ../have_memmv.h c_register.o: ../have_memmv.h
c_register.o: ../have_newstr.h c_register.o: ../have_newstr.h
@@ -1738,6 +1812,7 @@ c_register.o: ../value.h
c_register.o: ../zmath.h c_register.o: ../zmath.h
c_register.o: c_register.c c_register.o: c_register.c
c_sysinfo.o: ../alloc.h c_sysinfo.o: ../alloc.h
c_sysinfo.o: ../banned.h
c_sysinfo.o: ../block.h c_sysinfo.o: ../block.h
c_sysinfo.o: ../byteswap.h c_sysinfo.o: ../byteswap.h
c_sysinfo.o: ../calc.h c_sysinfo.o: ../calc.h
@@ -1750,6 +1825,7 @@ c_sysinfo.o: ../decl.h
c_sysinfo.o: ../endian_calc.h c_sysinfo.o: ../endian_calc.h
c_sysinfo.o: ../fposval.h c_sysinfo.o: ../fposval.h
c_sysinfo.o: ../hash.h c_sysinfo.o: ../hash.h
c_sysinfo.o: ../have_ban_pragma.h
c_sysinfo.o: ../have_const.h c_sysinfo.o: ../have_const.h
c_sysinfo.o: ../have_memmv.h c_sysinfo.o: ../have_memmv.h
c_sysinfo.o: ../have_newstr.h c_sysinfo.o: ../have_newstr.h
@@ -1770,6 +1846,7 @@ c_sysinfo.o: ../zrand.h
c_sysinfo.o: ../zrandom.h c_sysinfo.o: ../zrandom.h
c_sysinfo.o: c_sysinfo.c c_sysinfo.o: c_sysinfo.c
custtbl.o: ../alloc.h custtbl.o: ../alloc.h
custtbl.o: ../banned.h
custtbl.o: ../block.h custtbl.o: ../block.h
custtbl.o: ../byteswap.h custtbl.o: ../byteswap.h
custtbl.o: ../calcerr.h custtbl.o: ../calcerr.h
@@ -1779,6 +1856,7 @@ custtbl.o: ../custom.h
custtbl.o: ../decl.h custtbl.o: ../decl.h
custtbl.o: ../endian_calc.h custtbl.o: ../endian_calc.h
custtbl.o: ../hash.h custtbl.o: ../hash.h
custtbl.o: ../have_ban_pragma.h
custtbl.o: ../have_const.h custtbl.o: ../have_const.h
custtbl.o: ../have_memmv.h custtbl.o: ../have_memmv.h
custtbl.o: ../have_newstr.h custtbl.o: ../have_newstr.h

View File

@@ -2,7 +2,7 @@
# #
# custom - makefile for calc custom routines # 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 # 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 # 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 # calculator by David I. Bell with help/mods from others
# Makefile by Landon Curt Noll # 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 */ #if 0 /* start of skip for non-Gnu makefiles */
############################################################################## ##############################################################################
#-=-=-=-=-=-=-=-=- Identify the target machine, if possible -=-=-=-=-=-=-=-=-# #-=-=-=-=-=-=-=-=- Identify the target machine, if possible -=-=-=-=-=-=-=-=-#
@@ -36,7 +95,7 @@
# #
# make ...__optional_arguments_... target=value # 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),) ifeq ($(target),)
target=$(shell uname -s 2>/dev/null) target=$(shell uname -s 2>/dev/null)
@@ -125,7 +184,7 @@ Q=@
#INCDIR= /dev/env/DJDIR/include #INCDIR= /dev/env/DJDIR/include
INCDIR= /usr/include INCDIR= /usr/include
# where to install calc realted things # where to install calc related things
# #
# ${BINDIR} where to install calc binary files # ${BINDIR} where to install calc binary files
# ${LIBDIR} where calc link library (*.a) files are installed # ${LIBDIR} where calc link library (*.a) files are installed
@@ -348,7 +407,7 @@ EXT=
# The default calc versions # The default calc versions
# #
VERSION= 2.12.7.5 VERSION= 2.12.9.0
# Names of shared libraries with versions # Names of shared libraries with versions
# #
@@ -357,26 +416,25 @@ LIB_EXT_VERSION= ${LIB_EXT}.${VERSION}
# standard tools # standard tools
# #
SHELL= /bin/sh
SED= sed
MAKEDEPEND= makedepend
GREP= egrep
CHMOD= chmod
FMT= fmt
SORT= sort
CMP= cmp
AR= ar AR= ar
RM= rm
TOUCH= touch
MKDIR= mkdir
RMDIR= rmdir
MV= mv
CP= cp
CO= co
TRUE= true
MAKE= make
LN= ln
AWK= awk 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_CFLAGS are flags given to ${CC} when compiling C files
# EXTRA_LDFLAGS are flags given to ${CC} when linking progs # 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 # NOTE: These should be left blank in this Makefile to make it
# easier to add stuff on the command line. If you want to # easier to add stuff on the command line. If you want to
# to change the way calc is compiled by this Makefile, change # 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_CFLAGS=
EXTRA_LDFLAGS= 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 # NOTE: This does not work for: make-XYZ-only and BLD_TYPE != make-XYZ-only
# #
ifeq ($(BLD_TYPE),calc-static-only) ifeq ($(BLD_TYPE),calc-static-only)
ICFLAGS= ${COMMON_CFLAGS} ${CC_STATIC} ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_STATIC}
else else
ICFLAGS= ${COMMON_CFLAGS} ${CC_SHARE} ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_SHARE}
endif endif
CFLAGS= ${ICFLAGS} ${CCOPT} CFLAGS= ${ICFLAGS} ${CCOPT}

View File

@@ -32,7 +32,7 @@ CUSTCALC_OBJ= ${REQUIRED_OBJ} ${CUSTOM_OBJ}
# #
C_SRC= ${REQUIRED_SRC} ${CUSTOM_SRC} 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} 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 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} 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. # sub-directory called calc/lib.
# #
# NOTE: Due to bogus shells found on one common system we must have # 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 # Home grown make dependency rules. Your system make not support
# or have the needed tools. You can ignore this section. # 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 # 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 # prevention lines. This allows us to build a static depend list that will
# satisfy all possible cpp symbol definition combinations. # satisfy all possible cpp symbol definition combinations.
@@ -170,7 +170,7 @@ Makefile.simple: ${MAKE_FILE}
depend: depend:
${Q} if [ -f ${MAKE_FILE}.bak ]; then \ ${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; \ exit 1; \
else \ else \
${TRUE}; \ ${TRUE}; \
@@ -186,9 +186,7 @@ depend:
fi; \ fi; \
done done
-${Q} for i in ${H_SRC} /dev/null; do \ -${Q} for i in ${H_SRC} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \ if [ "$$i" = "/dev/null" ]; then continue; fi; \
continue; \
fi; \
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \ tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
echo "#if !defined($$tag)" > "skel/custom/$$i"; \ echo "#if !defined($$tag)" > "skel/custom/$$i"; \
echo "#define $$tag" >> "skel/custom/$$i"; \ echo "#define $$tag" >> "skel/custom/$$i"; \
@@ -197,25 +195,25 @@ depend:
echo '#endif /* '"$$tag"' */' >> "skel/custom/$$i"; \ echo '#endif /* '"$$tag"' */' >> "skel/custom/$$i"; \
done done
${Q} (cd ..; ${MAKE} -f ${TOP_MAKE_FILE} hsrc) ${Q} (cd ..; ${MAKE} -f ${TOP_MAKE_FILE} hsrc)
${Q} for i in `cd ..; ${MAKE} -f ${TOP_MAKE_FILE} h_list 2>&1 | \ ${MAKE} -f ../${TOP_MAKE_FILE} h_list 2>/dev/null | \
${SED} -e '/Entering directory/d' \ while read i; do \
-e '/Nothing to be done/d' \ if [ ! -f "../$$i" ]; then continue; fi; \
-e '/Leaving directory/d'` /dev/null; do \ tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
if [ "$$i" = "/dev/null" ]; then \ echo "#if !defined($$tag)" > "skel/$$i"; \
continue; \ echo "#define $$tag" >> "skel/$$i"; \
fi; \ ${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \ >> "skel/$$i"; \
echo "#if !defined($$tag)" > "skel/$$i"; \ echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
echo "#define $$tag" >> "skel/$$i"; \ done
${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
>> "skel/$$i"; \
echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
done
${Q} ${RM} -f skel/custom/makedep.out ${Q} ${RM} -f skel/custom/makedep.out
${Q} echo custom/skel formed ${Q} echo custom/skel formed
${Q} echo forming custom dependency list ${Q} echo forming custom dependency list
${Q} :> skel/custom/makedep.out ${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 \ -${Q} for i in ${C_SRC} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \ echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \
@@ -230,22 +228,16 @@ depend:
${Q} ${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' \ ${Q} ${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' \
${MAKE_FILE}.bak > ${MAKE_FILE} ${MAKE_FILE}.bak > ${MAKE_FILE}
${Q} ${GREP} -v '^#' skel/custom/makedep.out >> ${MAKE_FILE} ${Q} ${GREP} -v '^#' skel/custom/makedep.out >> ${MAKE_FILE}
${Q} echo removing skel
${Q} ${RM} -rf skel ${Q} ${RM} -rf skel
-${Q} if ${CMP} -s ${MAKE_FILE}.bak ${MAKE_FILE}; then \ -${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}; \ ${MV} -f ${MAKE_FILE}.bak ${MAKE_FILE}; \
else \ else \
${RM} -f ${MAKE_FILE}.tmp; \ echo 'old custom/${MAKE_FILE} is now custom/${MAKE_FILE}.bak'; \
${MV} ${MAKE_FILE} ${MAKE_FILE}.tmp; \ echo 'new custom/${MAKE_FILE} formed'; \
if [ -d RCS -a ! -w "${MAKE_FILE}" ]; then \ echo 'try: diff -u custom/${MAKE_FILE}.bak custom/${MAKE_FILE}'; \
${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; \
fi fi
## ##
@@ -292,6 +284,7 @@ clobber: clean
${RM} -f libcustcalc${LIB_EXT} ${RM} -f libcustcalc${LIB_EXT}
${RM} -f libcustcalc.a ${RM} -f libcustcalc.a
${RM} -f libcustcalc* ${RM} -f libcustcalc*
${RM} -rf skel
${V} echo remove files that are obsolete ${V} echo remove files that are obsolete
#if 0 /* start of skip for non-Gnu makefiles */ #if 0 /* start of skip for non-Gnu makefiles */
${RM} -f Makefile.simple ${RM} -f Makefile.simple
@@ -479,7 +472,7 @@ uninstall:
if [ -f "${T}${CUSTOMCALDIR}/libcustcalc.a" ]; then \ if [ -f "${T}${CUSTOMCALDIR}/libcustcalc.a" ]; then \
echo "cannot uninstall ${T}${CUSTOMCALDIR}/libcustcalc.a"; \ echo "cannot uninstall ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
else \ else \
echo "uninstalled ${T}${CUSTOMCALDIR}/libcustcalc.a"; \ echo "un-installed ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
fi; \ fi; \
fi fi
-${Q} for i in ${CUSTOM_HELP} /dev/null; do \ -${Q} for i in ${CUSTOM_HELP} /dev/null; do \
@@ -491,7 +484,7 @@ uninstall:
if [ -f "${T}${CUSTOMHELPDIR}/$$i" ]; then \ if [ -f "${T}${CUSTOMHELPDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CUSTOMHELPDIR}/$$i"; \ echo "cannot uninstall ${T}${CUSTOMHELPDIR}/$$i"; \
else \ else \
echo "uninstalled ${T}${CUSTOMHELPDIR}/$$i"; \ echo "un-installed ${T}${CUSTOMHELPDIR}/$$i"; \
fi; \ fi; \
fi; \ fi; \
done done
@@ -504,7 +497,7 @@ uninstall:
if [ -f "${T}${CUSTOMCALDIR}/$$i" ]; then \ if [ -f "${T}${CUSTOMCALDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CUSTOMCALDIR}/$$i"; \ echo "cannot uninstall ${T}${CUSTOMCALDIR}/$$i"; \
else \ else \
echo "uninstalled ${T}${CUSTOMCALDIR}/$$i"; \ echo "un-installed ${T}${CUSTOMCALDIR}/$$i"; \
fi; \ fi; \
fi; \ fi; \
done done
@@ -517,7 +510,7 @@ uninstall:
if [ -f "${T}${CUSTOMINCDIR}/$$i" ]; then \ if [ -f "${T}${CUSTOMINCDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CUSTOMINCDIR}/$$i"; \ echo "cannot uninstall ${T}${CUSTOMINCDIR}/$$i"; \
else \ else \
echo "uninstalled ${T}${CUSTOMINCDIR}/$$i"; \ echo "un-installed ${T}${CUSTOMINCDIR}/$$i"; \
fi; \ fi; \
fi; \ fi; \
done done
@@ -538,6 +531,7 @@ uninstall:
# DO NOT DELETE THIS LINE -- make depend depends on it. # DO NOT DELETE THIS LINE -- make depend depends on it.
c_argv.o: ../alloc.h c_argv.o: ../alloc.h
c_argv.o: ../banned.h
c_argv.o: ../block.h c_argv.o: ../block.h
c_argv.o: ../byteswap.h c_argv.o: ../byteswap.h
c_argv.o: ../calc.h c_argv.o: ../calc.h
@@ -548,6 +542,7 @@ c_argv.o: ../custom.h
c_argv.o: ../decl.h c_argv.o: ../decl.h
c_argv.o: ../endian_calc.h c_argv.o: ../endian_calc.h
c_argv.o: ../hash.h c_argv.o: ../hash.h
c_argv.o: ../have_ban_pragma.h
c_argv.o: ../have_const.h c_argv.o: ../have_const.h
c_argv.o: ../have_memmv.h c_argv.o: ../have_memmv.h
c_argv.o: ../have_newstr.h c_argv.o: ../have_newstr.h
@@ -563,6 +558,7 @@ c_argv.o: ../value.h
c_argv.o: ../zmath.h c_argv.o: ../zmath.h
c_argv.o: c_argv.c c_argv.o: c_argv.c
c_devnull.o: ../alloc.h c_devnull.o: ../alloc.h
c_devnull.o: ../banned.h
c_devnull.o: ../block.h c_devnull.o: ../block.h
c_devnull.o: ../byteswap.h c_devnull.o: ../byteswap.h
c_devnull.o: ../calcerr.h c_devnull.o: ../calcerr.h
@@ -572,6 +568,7 @@ c_devnull.o: ../custom.h
c_devnull.o: ../decl.h c_devnull.o: ../decl.h
c_devnull.o: ../endian_calc.h c_devnull.o: ../endian_calc.h
c_devnull.o: ../hash.h c_devnull.o: ../hash.h
c_devnull.o: ../have_ban_pragma.h
c_devnull.o: ../have_const.h c_devnull.o: ../have_const.h
c_devnull.o: ../have_memmv.h c_devnull.o: ../have_memmv.h
c_devnull.o: ../have_newstr.h c_devnull.o: ../have_newstr.h
@@ -588,6 +585,7 @@ c_devnull.o: ../value.h
c_devnull.o: ../zmath.h c_devnull.o: ../zmath.h
c_devnull.o: c_devnull.c c_devnull.o: c_devnull.c
c_help.o: ../alloc.h c_help.o: ../alloc.h
c_help.o: ../banned.h
c_help.o: ../block.h c_help.o: ../block.h
c_help.o: ../byteswap.h c_help.o: ../byteswap.h
c_help.o: ../calcerr.h c_help.o: ../calcerr.h
@@ -597,6 +595,7 @@ c_help.o: ../custom.h
c_help.o: ../decl.h c_help.o: ../decl.h
c_help.o: ../endian_calc.h c_help.o: ../endian_calc.h
c_help.o: ../hash.h c_help.o: ../hash.h
c_help.o: ../have_ban_pragma.h
c_help.o: ../have_const.h c_help.o: ../have_const.h
c_help.o: ../have_memmv.h c_help.o: ../have_memmv.h
c_help.o: ../have_newstr.h c_help.o: ../have_newstr.h
@@ -613,6 +612,7 @@ c_help.o: ../value.h
c_help.o: ../zmath.h c_help.o: ../zmath.h
c_help.o: c_help.c c_help.o: c_help.c
c_pmodm127.o: ../alloc.h c_pmodm127.o: ../alloc.h
c_pmodm127.o: ../banned.h
c_pmodm127.o: ../block.h c_pmodm127.o: ../block.h
c_pmodm127.o: ../byteswap.h c_pmodm127.o: ../byteswap.h
c_pmodm127.o: ../calcerr.h c_pmodm127.o: ../calcerr.h
@@ -622,6 +622,7 @@ c_pmodm127.o: ../custom.h
c_pmodm127.o: ../decl.h c_pmodm127.o: ../decl.h
c_pmodm127.o: ../endian_calc.h c_pmodm127.o: ../endian_calc.h
c_pmodm127.o: ../hash.h c_pmodm127.o: ../hash.h
c_pmodm127.o: ../have_ban_pragma.h
c_pmodm127.o: ../have_const.h c_pmodm127.o: ../have_const.h
c_pmodm127.o: ../have_memmv.h c_pmodm127.o: ../have_memmv.h
c_pmodm127.o: ../have_newstr.h c_pmodm127.o: ../have_newstr.h
@@ -637,6 +638,7 @@ c_pmodm127.o: ../value.h
c_pmodm127.o: ../zmath.h c_pmodm127.o: ../zmath.h
c_pmodm127.o: c_pmodm127.c c_pmodm127.o: c_pmodm127.c
c_pzasusb8.o: ../alloc.h c_pzasusb8.o: ../alloc.h
c_pzasusb8.o: ../banned.h
c_pzasusb8.o: ../block.h c_pzasusb8.o: ../block.h
c_pzasusb8.o: ../byteswap.h c_pzasusb8.o: ../byteswap.h
c_pzasusb8.o: ../calcerr.h c_pzasusb8.o: ../calcerr.h
@@ -646,6 +648,7 @@ c_pzasusb8.o: ../custom.h
c_pzasusb8.o: ../decl.h c_pzasusb8.o: ../decl.h
c_pzasusb8.o: ../endian_calc.h c_pzasusb8.o: ../endian_calc.h
c_pzasusb8.o: ../hash.h c_pzasusb8.o: ../hash.h
c_pzasusb8.o: ../have_ban_pragma.h
c_pzasusb8.o: ../have_const.h c_pzasusb8.o: ../have_const.h
c_pzasusb8.o: ../have_memmv.h c_pzasusb8.o: ../have_memmv.h
c_pzasusb8.o: ../have_newstr.h c_pzasusb8.o: ../have_newstr.h
@@ -661,6 +664,7 @@ c_pzasusb8.o: ../value.h
c_pzasusb8.o: ../zmath.h c_pzasusb8.o: ../zmath.h
c_pzasusb8.o: c_pzasusb8.c c_pzasusb8.o: c_pzasusb8.c
c_register.o: ../alloc.h c_register.o: ../alloc.h
c_register.o: ../banned.h
c_register.o: ../block.h c_register.o: ../block.h
c_register.o: ../byteswap.h c_register.o: ../byteswap.h
c_register.o: ../calc.h c_register.o: ../calc.h
@@ -671,6 +675,7 @@ c_register.o: ../custom.h
c_register.o: ../decl.h c_register.o: ../decl.h
c_register.o: ../endian_calc.h c_register.o: ../endian_calc.h
c_register.o: ../hash.h c_register.o: ../hash.h
c_register.o: ../have_ban_pragma.h
c_register.o: ../have_const.h c_register.o: ../have_const.h
c_register.o: ../have_memmv.h c_register.o: ../have_memmv.h
c_register.o: ../have_newstr.h c_register.o: ../have_newstr.h
@@ -686,6 +691,7 @@ c_register.o: ../value.h
c_register.o: ../zmath.h c_register.o: ../zmath.h
c_register.o: c_register.c c_register.o: c_register.c
c_sysinfo.o: ../alloc.h c_sysinfo.o: ../alloc.h
c_sysinfo.o: ../banned.h
c_sysinfo.o: ../block.h c_sysinfo.o: ../block.h
c_sysinfo.o: ../byteswap.h c_sysinfo.o: ../byteswap.h
c_sysinfo.o: ../calc.h c_sysinfo.o: ../calc.h
@@ -698,6 +704,7 @@ c_sysinfo.o: ../decl.h
c_sysinfo.o: ../endian_calc.h c_sysinfo.o: ../endian_calc.h
c_sysinfo.o: ../fposval.h c_sysinfo.o: ../fposval.h
c_sysinfo.o: ../hash.h c_sysinfo.o: ../hash.h
c_sysinfo.o: ../have_ban_pragma.h
c_sysinfo.o: ../have_const.h c_sysinfo.o: ../have_const.h
c_sysinfo.o: ../have_memmv.h c_sysinfo.o: ../have_memmv.h
c_sysinfo.o: ../have_newstr.h c_sysinfo.o: ../have_newstr.h
@@ -718,6 +725,7 @@ c_sysinfo.o: ../zrand.h
c_sysinfo.o: ../zrandom.h c_sysinfo.o: ../zrandom.h
c_sysinfo.o: c_sysinfo.c c_sysinfo.o: c_sysinfo.c
custtbl.o: ../alloc.h custtbl.o: ../alloc.h
custtbl.o: ../banned.h
custtbl.o: ../block.h custtbl.o: ../block.h
custtbl.o: ../byteswap.h custtbl.o: ../byteswap.h
custtbl.o: ../calcerr.h custtbl.o: ../calcerr.h
@@ -727,6 +735,7 @@ custtbl.o: ../custom.h
custtbl.o: ../decl.h custtbl.o: ../decl.h
custtbl.o: ../endian_calc.h custtbl.o: ../endian_calc.h
custtbl.o: ../hash.h custtbl.o: ../hash.h
custtbl.o: ../have_ban_pragma.h
custtbl.o: ../have_const.h custtbl.o: ../have_const.h
custtbl.o: ../have_memmv.h custtbl.o: ../have_memmv.h
custtbl.o: ../have_newstr.h custtbl.o: ../have_newstr.h

View File

@@ -1,7 +1,7 @@
/* /*
* c_argv - a custom function display info about its args * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -38,6 +38,10 @@
#include "have_unused.h" #include "have_unused.h"
#include "banned.h" /* include after system header <> includes */
/* /*
* c_argv - a custom function display info about its args * c_argv - a custom function display info about its args
* *
@@ -49,7 +53,7 @@
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
VALUE 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 */ VALUE result; /* what we will return */
ZVALUE zfilelen; /* length of a file as a ZVALUE */ ZVALUE zfilelen; /* length of a file as a ZVALUE */

View File

@@ -1,7 +1,7 @@
/* /*
* c_devnull - a custom function that does nothing * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -39,6 +39,9 @@
#include "have_unused.h" #include "have_unused.h"
#include "banned.h" /* include after system header <> includes */
/* /*
* c_devnull - a custom function that does nothing * c_devnull - a custom function that does nothing
* *
@@ -47,7 +50,7 @@
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
VALUE 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 */ VALUE result; /* what we will return */

View File

@@ -1,7 +1,7 @@
/* /*
* c_help - custom help function * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -39,6 +39,9 @@
#include "have_unused.h" #include "have_unused.h"
#include "banned.h" /* include after system header <> includes */
/* /*
* c_help - custom help function * c_help - custom help function
* *
@@ -58,7 +61,7 @@
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
VALUE 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 */ VALUE result; /* what we will return */

View File

@@ -1,7 +1,7 @@
/* /*
* c_pmodm127 - calculate q mod 2^(2^127-1) * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -35,6 +35,10 @@
#include "have_unused.h" #include "have_unused.h"
#include "banned.h" /* include after system header <> includes */
/* 2^255 */ /* 2^255 */
STATIC HALF h255[] = { STATIC HALF h255[] = {
#if BASEB == 32 #if BASEB == 32
@@ -71,7 +75,7 @@ STATIC ZVALUE lastmodinv[1];
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
VALUE 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 */ VALUE result; /* what we will return */
ZVALUE q; /* test factor */ ZVALUE q; /* test factor */
@@ -124,7 +128,7 @@ c_pmodm127(char UNUSED *name, int UNUSED count, VALUE **vals)
result.v_type = V_NUM; 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: * We implement the following calc code in C:
* *

View File

@@ -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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -35,8 +35,12 @@
#include "have_unused.h" #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: * given:
* count = 1; * count = 1;
@@ -47,7 +51,7 @@
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
VALUE 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 */ VALUE result; /* what we will return */
ZVALUE z; /* numerator of the value */ ZVALUE z; /* numerator of the value */

View File

@@ -1,7 +1,7 @@
/* /*
* c_register - set or print a custom register value * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -39,6 +39,9 @@
#include "have_unused.h" #include "have_unused.h"
#include "banned.h" /* include after system header <> includes */
/* /*
* registers * registers
*/ */
@@ -76,7 +79,7 @@ init_custreg(void)
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
VALUE 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 */ VALUE result; /* what we will return */
long reg; /* register number */ long reg; /* register number */

View File

@@ -1,7 +1,7 @@
/* /*
* c_sysinfo - names and values of selected #defines * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -57,6 +57,9 @@
#include "have_unused.h" #include "have_unused.h"
#include "banned.h" /* include after system header <> includes */
/* /*
* sys_info - names and values of selected #defines * sys_info - names and values of selected #defines
*/ */
@@ -177,15 +180,15 @@ STATIC struct infoname sys_info[] = {
(FULL)MAXUFULL}, (FULL)MAXUFULL},
{"MAXULONG", "largest unsigned long val", NULL, {"MAXULONG", "largest unsigned long val", NULL,
(FULL)MAXULONG}, (FULL)MAXULONG},
{"MAX_MAP_PRIME", "larest prime in pr_map", NULL, {"MAX_MAP_PRIME", "largest prime in pr_map", NULL,
(FULL)MAX_MAP_PRIME}, (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}, (FULL)MAX_MAP_VAL},
{"MAX_PFACT_VAL", "max x, for which pfact(x) is a long", NULL, {"MAX_PFACT_VAL", "max x, for which pfact(x) is a long", NULL,
(FULL)MAX_PFACT_VAL}, (FULL)MAX_PFACT_VAL},
{"MAX_SM_PRIME", "larest 32 bit prime", NULL, {"MAX_SM_PRIME", "largest 32 bit prime", NULL,
(FULL)MAX_SM_PRIME}, (FULL)MAX_SM_PRIME},
{"MAX_SM_VAL", "larest 32 bit value", NULL, {"MAX_SM_VAL", "largest 32 bit value", NULL,
(FULL)MAX_SM_VAL}, (FULL)MAX_SM_VAL},
{"MUL_ALG2", "default size for alternative multiply", NULL, {"MUL_ALG2", "default size for alternative multiply", NULL,
(FULL)MUL_ALG2}, (FULL)MUL_ALG2},
@@ -266,7 +269,7 @@ S_FUNC void dump_mening_value(void); /* custom("sysinfo", 2) */
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
VALUE 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 */ VALUE result; /* what we will return */
struct infoname *p; /* current infoname */ struct infoname *p; /* current infoname */

View File

@@ -1,7 +1,7 @@
/* /*
* custtbl - custom interface table * 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -30,6 +30,10 @@
#include "value.h" #include "value.h"
#include "custom.h" #include "custom.h"
#include "banned.h" /* include after system header <> includes */
/* /*
* NOTE: See the file CUSTOM for instructions on how to add * NOTE: See the file CUSTOM for instructions on how to add
* custom functions. * 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: * Declare custom functions as follows:
* *

View File

@@ -10,7 +10,7 @@ TYPES
return null return null
DESCRIPTION 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. of the general custom interface.
EXAMPLE EXAMPLE
@@ -26,7 +26,7 @@ LIBRARY
SEE ALSO SEE ALSO
custom 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 ## 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 ## the terms of the version 2.1 of the GNU Lesser General Public License

View File

@@ -25,7 +25,7 @@ DESCRIPTION
SPECIAL NOTE: SPECIAL NOTE:
Can you find a value, q, for which this custom function returns 1? 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: found at:
http://www.isthe.com/chongo/address.html http://www.isthe.com/chongo/address.html
@@ -51,7 +51,7 @@ LIBRARY
SEE ALSO SEE ALSO
custom 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 ## 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 ## the terms of the version 2.1 of the GNU Lesser General Public License

View File

@@ -21,7 +21,7 @@ DESCRIPTION
for details. for details.
This custom function is intented for testing of the general This custom function is intended for testing of the general
custom interface. custom interface.
EXAMPLE EXAMPLE
@@ -49,7 +49,7 @@ LIBRARY
SEE ALSO SEE ALSO
custom 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 ## 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 ## the terms of the version 2.1 of the GNU Lesser General Public License

View File

@@ -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 * Primary author: Ernest Bowen
* *

View File

@@ -20,14 +20,14 @@ DESCRIPTION
The number of custom registers is defined at compile time. The number of custom registers is defined at compile time.
There will be at least 32 registers although there could be more 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") custom("sysinfo", "REGNUM_MAX")
The custom registers are initialized to 0 by the internal The custom registers are initialized to 0 by the internal
function libcalc_call_me_first() during calc startup. 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. with special purpose hardware.
EXAMPLE EXAMPLE
@@ -46,7 +46,7 @@ EXAMPLE
LIMITS LIMITS
calc must be built with ALLOW_CUSTOM= -DCUSTOM calc must be built with ALLOW_CUSTOM= -DCUSTOM
calc must be executed with a -C arg. 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. REGNUM_MAX is a compile time constant that is >= 32.
LIBRARY LIBRARY
@@ -55,7 +55,7 @@ LIBRARY
SEE ALSO SEE ALSO
custom 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 ## 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 ## the terms of the version 2.1 of the GNU Lesser General Public License

View File

@@ -13,7 +13,7 @@ DESCRIPTION
This custom function will return the value certain selected #define This custom function will return the value certain selected #define
values. The infoname arg must be a string that matches the given 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. so "baseb" and "BASEB" refer to the same #define value.
The return value is either an integer or a string depending on The return value is either an integer or a string depending on
@@ -53,7 +53,7 @@ LIBRARY
SEE ALSO SEE ALSO
custom 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 ## 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 ## the terms of the version 2.1 of the GNU Lesser General Public License

2
decl.h
View File

@@ -1,7 +1,7 @@
/* /*
* decl - variable and function declaration macros * 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 * Primary author: Landon Curt Noll
* *

View File

@@ -1,7 +1,7 @@
/* /*
* endian - determine the byte order of a long on your machine * 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 * 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 * 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, ... * Little Endian: Vax, 32k, Spim (Dec Mips), i386, i486, ...
*/ */
@@ -42,6 +42,10 @@
#include <unistd.h> #include <unistd.h>
#endif #endif
#include "banned.h" /* include after system header <> includes */
/* byte order array */ /* byte order array */
char byte[8] = { (char)0x12, (char)0x36, (char)0x48, (char)0x59, char byte[8] = { (char)0x12, (char)0x36, (char)0x48, (char)0x59,
(char)0x01, (char)0x23, (char)0x45, (char)0x67 }; (char)0x01, (char)0x23, (char)0x45, (char)0x67 };

89
file.c
View File

@@ -1,7 +1,7 @@
/* /*
* file - file I/O routines callable by users * 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 * Primary author: David I. Bell
* *
@@ -37,19 +37,27 @@
#endif /* HAVE_UNISTD_H */ #endif /* HAVE_UNISTD_H */
#include <ctype.h> #include <ctype.h>
#include "calc.h" #include "calc.h"
#include "alloc.h"
#include "longbits.h" #include "longbits.h"
#include "have_fpos.h" #include "have_fpos.h"
#include "have_fpos_pos.h" #include "have_fpos_pos.h"
#include "fposval.h" #include "fposval.h"
#include "file.h" #include "file.h"
#include "calcerr.h" #include "calcerr.h"
#include "strl.h"
#if defined(_WIN32) #if defined(_WIN32)
# include <io.h> # include <io.h>
#endif #endif
#include "banned.h" /* include after system header <> includes */
#define READSIZE 1024 /* buffer size for reading */ #define READSIZE 1024 /* buffer size for reading */
#define MIN(a,b) (((a) <= (b)) ? (a) : (b))
/* /*
* external STDIO functions * 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 *. * On some systems, one cannot initialize a pointer to a FILE *.
* This routine, called once at startup is a work-a-round for * 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].reading = TRUE;
files[idnum].writing = TRUE; files[idnum].writing = TRUE;
files[idnum].action = 0; files[idnum].action = 0;
memset(files[idnum].mode, 0, MODE_LEN+1);
/* /*
* stat the descriptor to see what we have * stat the descriptor to see what we have
*/ */
@@ -146,16 +155,19 @@ file_init(void)
size_t snprintf_len; /* malloced snprintf length */ size_t snprintf_len; /* malloced snprintf length */
fp = (FILE *) fdopen(i,"r+"); /*guess mode*/ fp = (FILE *) fdopen(i,"r+"); /*guess mode*/
if (fp) { if (fp) {
strcpy(files[idnum].mode, "r+"); strlcpy(files[idnum].mode, "r+",
sizeof(files[idnum].mode));
} else { } else {
fp = (FILE *) fdopen(i, "r"); fp = (FILE *) fdopen(i, "r");
if (fp) { if (fp) {
strcpy(files[idnum].mode, "r"); strlcpy(files[idnum].mode, "r",
sizeof(files[idnum].mode));
files[idnum].writing = FALSE; files[idnum].writing = FALSE;
} else { } else {
fp = (FILE *) fdopen(i, "w"); fp = (FILE *) fdopen(i, "w");
if (fp) { if (fp) {
strcpy(files[idnum].mode, "w"); strlcpy(files[idnum].mode, "w",
sizeof(files[idnum].mode));
files[idnum].reading = FALSE; files[idnum].reading = FALSE;
} }
else else
@@ -206,10 +218,14 @@ S_FUNC void
init_fileio(FILEIO *fiop, char *name, char *mode, init_fileio(FILEIO *fiop, char *name, char *mode,
struct stat *sbufp, FILEID id, FILE *fp) struct stat *sbufp, FILEID id, FILE *fp)
{ {
char modestr[sizeof(fiop->mode)]; /* mode [rwa]b?\+? */ char modestr[MODE_LEN+1]; /* mode [rwa]b?\+? */
size_t namelen; /* length of name */ size_t namelen; /* length of name */
/* clear modestr */
memset(modestr, 0, sizeof(modestr));
/* allocate filename if requested */ /* allocate filename if requested */
namelen = 0;
if (name != NULL) { if (name != NULL) {
namelen = strlen(name); namelen = strlen(name);
fiop->name = (char *)malloc(namelen + 1); fiop->name = (char *)malloc(namelen + 1);
@@ -221,7 +237,7 @@ init_fileio(FILEIO *fiop, char *name, char *mode,
/* initialize FILEIO structure */ /* initialize FILEIO structure */
if (name != NULL) { if (name != NULL) {
strncpy(fiop->name, name, namelen+1); strlcpy(fiop->name, name, namelen+1);
} }
fiop->id = id; fiop->id = id;
fiop->fp = fp; fiop->fp = fp;
@@ -232,13 +248,13 @@ init_fileio(FILEIO *fiop, char *name, char *mode,
fiop->appending = FALSE; fiop->appending = FALSE;
fiop->binary = FALSE; fiop->binary = FALSE;
fiop->action = 0; fiop->action = 0;
fiop->mode[0] = '\0'; memset(fiop->mode, 0, sizeof(fiop->mode));
/* /*
* determine file open mode * determine file open mode
* *
* While a leading 'r' is for reading and a leading 'w' is * 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 * both reading and writing. A leading 'a' means append
* which is writing. * which is writing.
*/ */
@@ -246,65 +262,65 @@ init_fileio(FILEIO *fiop, char *name, char *mode,
if (mode[0] == 'r') { if (mode[0] == 'r') {
/* note read mode */ /* note read mode */
strcpy(modestr, "r"); strlcpy(modestr, "r", sizeof(modestr));
fiop->reading = TRUE; fiop->reading = TRUE;
/* note binary mode even though mode is not used / ignored */ /* note binary mode even though mode is not used / ignored */
if (strchr(mode, 'b') != NULL) { if (strchr(mode, 'b') != NULL) {
strcat(modestr, "b"); strlcat(modestr, "b", sizeof(modestr));
} }
/* note if reading and writing */ /* note if reading and writing */
if (strchr(mode, '+') != NULL) { if (strchr(mode, '+') != NULL) {
fiop->writing = TRUE; fiop->writing = TRUE;
strcat(modestr, "+"); strlcat(modestr, "+", sizeof(modestr));
} }
/* canonicalize write modes */ /* canonicalize write modes */
} else if (mode[0] == 'w') { } else if (mode[0] == 'w') {
/* note write mode */ /* note write mode */
strcpy(modestr, "w"); strlcpy(modestr, "w", sizeof(modestr));
fiop->writing = TRUE; fiop->writing = TRUE;
/* note binary mode even though mode is not used / ignored */ /* note binary mode even though mode is not used / ignored */
if (strchr(mode, 'b') != NULL) { if (strchr(mode, 'b') != NULL) {
strcat(modestr, "b"); strlcat(modestr, "b", sizeof(modestr));
} }
/* note if reading and writing */ /* note if reading and writing */
if (strchr(mode, '+') != NULL) { if (strchr(mode, '+') != NULL) {
fiop->reading = TRUE; fiop->reading = TRUE;
strcat(modestr, "+"); strlcat(modestr, "+", sizeof(modestr));
} }
/* canonicalize append modes */ /* canonicalize append modes */
} else if (mode[0] == 'a') { } else if (mode[0] == 'a') {
/* note append mode */ /* note append mode */
strcpy(modestr, "a"); strlcpy(modestr, "a", sizeof(modestr));
fiop->writing = TRUE; fiop->writing = TRUE;
fiop->appending = TRUE; fiop->appending = TRUE;
/* note binary mode even though mode is not used / ignored */ /* note binary mode even though mode is not used / ignored */
if (strchr(mode, 'b') != NULL) { if (strchr(mode, 'b') != NULL) {
strcat(modestr, "b"); strlcat(modestr, "b", sizeof(modestr));
} }
/* note if reading and writing */ /* note if reading and writing */
if (strchr(mode, '+') != NULL) { if (strchr(mode, '+') != NULL) {
fiop->reading = TRUE; fiop->reading = TRUE;
strcat(modestr, "+"); strlcat(modestr, "+", sizeof(modestr));
} }
/* canonicalize no I/O modes */ /* canonicalize no I/O modes */
} else { } else {
modestr[0] = '\0'; modestr[0] = '\0';
} }
modestr[sizeof(modestr)-1] = '\0'; /* firewall */ modestr[MODE_LEN] = '\0'; /* firewall */
/* record canonical open mode string */ /* record canonical open mode string */
strncpy(fiop->mode, modestr, sizeof(fiop->mode)); strlcpy(fiop->mode, modestr, sizeof(fiop->mode));
} }
@@ -1406,7 +1422,7 @@ z2filepos(ZVALUE zpos)
/* /*
* firewall * 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 * quick return if the position can fit into a long
@@ -1414,23 +1430,22 @@ z2filepos(ZVALUE zpos)
#if FILEPOS_BITS == FULL_BITS #if FILEPOS_BITS == FULL_BITS
/* ztofull puts the value into native byte order */ /* ztofull puts the value into native byte order */
pos = ztofull(zpos); pos = ztofull(zpos);
/* on some hosts, FILEPOS is not a scalar */ memset(&ret, 0, sizeof(ret)); /* FILEPOS could be non-scalar */
memset(&ret, 0, sizeof(FILEPOS)); memcpy((void *)&ret, (void *)&pos, MIN(sizeof(ret), sizeof(pos)));
memcpy((void *)&ret, (void *)&pos, sizeof(FILEPOS));
return ret; return ret;
#elif FILEPOS_BITS < FULL_BITS #elif FILEPOS_BITS < FULL_BITS
/* ztofull puts the value into native byte order */ /* ztofull puts the value into native byte order */
pos = ztolong(zpos); pos = ztolong(zpos);
/* on some hosts, FILEPOS is not a scalar */ memset(&ret, 0, sizeof(ret)); /* FILEPOS could be non-scalar */
memset(&ret, 0, sizeof(FILEPOS)); memcpy((void *)&ret, (void *)&pos, MIN(sizeof(ret), sizeof(pos)));
memcpy((void *)&ret, (void *)&pos, sizeof(pos));
return ret; return ret;
#else /* FILEPOS_BITS > FULL_BITS */ #else /* FILEPOS_BITS > FULL_BITS */
if (!zgtmaxfull(zpos)) { if (!zgtmaxfull(zpos)) {
/* ztofull puts the value into native byte order */ /* ztofull puts the value into native byte order */
pos = ztofull(zpos); pos = ztofull(zpos);
memset(&ret, 0, sizeof(FILEPOS)); memset(&ret, 0, sizeof(ret)); /* FILEPOS could be non-scalar */
memcpy((void *)&ret, (void *)&pos, sizeof(pos)); memcpy((void *)&ret, (void *)&pos,
MIN(sizeof(ret), sizeof(pos)));
return ret; return ret;
} }
@@ -1439,11 +1454,13 @@ z2filepos(ZVALUE zpos)
*/ */
if (zpos.len >= FILEPOS_BITS/BASEB) { if (zpos.len >= FILEPOS_BITS/BASEB) {
/* copy the lower FILEPOS_BITS of the ZVALUE */ /* 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 { } else {
/* copy what bits we can into the temp value */ /* copy what bits we can into the temp value */
memset(&tmp, 0, sizeof(FILEPOS)); memset(&tmp, 0, sizeof(tmp)); /* FILEPOS could be non-scalar */
memcpy(&tmp, zpos.v, zpos.len*BASEB/8); memcpy(&tmp, zpos.v, MIN(sizeof(tmp),
MIN(zpos.len*BASEB/8, FILEPOS_LEN)));
} }
/* swap into native byte order */ /* swap into native byte order */
SWAP_HALF_IN_FILEPOS(&ret, &tmp); SWAP_HALF_IN_FILEPOS(&ret, &tmp);
@@ -1646,7 +1663,7 @@ set_open_pos(FILE *fp, ZVALUE zpos)
} }
/* /*
* return sucess * return success
*/ */
return 0; return 0;
} }
@@ -2603,7 +2620,7 @@ isattyid(FILEID id)
* given: * given:
* id FILEID to search * id FILEID to search
* str string to look for * str string to look for
* pos file postion to start at (NULL => current position) * pos file position to start at (NULL => current position)
* *
* returns: * returns:
* EOF if system error * EOF if system error
@@ -2613,7 +2630,7 @@ isattyid(FILEID id)
* *
* XXX - This search is a translation of the original search that did not * XXX - This search is a translation of the original search that did not
* work with large files. The search algorithm used is slow and * work with large files. The search algorithm used is slow and
* should be spead up much more. * should be speed up much more.
*/ */
int int
fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res) fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res)

7
file.h
View File

@@ -1,7 +1,7 @@
/* /*
* file - file I/O routines callable by users * 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 * Primary author: David I. Bell
* *
@@ -41,6 +41,7 @@
/* /*
* Definition of opened files. * Definition of opened files.
*/ */
#define MODE_LEN (sizeof("rb+")-1)
typedef struct { typedef struct {
FILEID id; /* id to identify this file */ FILEID id; /* id to identify this file */
FILE *fp; /* real file structure for I/O */ FILE *fp; /* real file structure for I/O */
@@ -52,7 +53,7 @@ typedef struct {
BOOL appending; /* TRUE if also opened for appending */ BOOL appending; /* TRUE if also opened for appending */
BOOL binary; /* TRUE if binary mode - mode ignored/unused */ BOOL binary; /* TRUE if binary mode - mode ignored/unused */
char action; /* most recent use for 'r', 'w' or 0 */ 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; } FILEIO;
@@ -63,7 +64,7 @@ typedef struct {
* Seek loc bytes from the beginning of the open file, stream. * Seek loc bytes from the beginning of the open file, stream.
* *
* f_tell(FILE *stream, FILEPOS *loc) * 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, * 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). * then it will have a FILEPOS that is a scalar type (e.g., long).

View File

@@ -1,7 +1,7 @@
/* /*
* fposval - Determine information about the file position type * fposval - Determine information about the file position type
* *
* 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -64,6 +64,11 @@
#include "have_offscl.h" #include "have_offscl.h"
#include "have_posscl.h" #include "have_posscl.h"
#include "have_fpos_pos.h" #include "have_fpos_pos.h"
#include "alloc.h"
#include "banned.h" /* include after system header <> includes */
char *program; /* our name */ char *program; /* our name */
@@ -122,7 +127,7 @@ main(int argc, char **argv)
#else /* HAVE_FILEPOS_SCALAR */ #else /* HAVE_FILEPOS_SCALAR */
/* /*
* Normally a "(*(dest) = *(src))" would do, but on some * Normally a "(*(dest) = *(src))" would do, but on some
* systems a FILEPOS is not a scalar hince we must memcpy. * systems a FILEPOS is not a scalar hence we must memcpy.
*/ */
printf("#define SWAP_HALF_IN_FILEPOS(dest, src)\t%s\n", printf("#define SWAP_HALF_IN_FILEPOS(dest, src)\t%s\n",
"\\\n\tmemcpy((void *)(dest), (void *)(src), " "\\\n\tmemcpy((void *)(dest), (void *)(src), "
@@ -163,7 +168,7 @@ main(int argc, char **argv)
* Little Endian * Little Endian
* *
* Normally a "(*(dest) = *(src))" would do, but on some * Normally a "(*(dest) = *(src))" would do, but on some
* systems an off_t is not a scalar hince we must memcpy. * systems an off_t is not a scalar hence we must memcpy.
*/ */
#if defined(HAVE_OFF_T_SCALAR) #if defined(HAVE_OFF_T_SCALAR)
printf("#define SWAP_HALF_IN_OFF_T(dest, src)\t\t%s\n", printf("#define SWAP_HALF_IN_OFF_T(dest, src)\t\t%s\n",
@@ -171,7 +176,7 @@ main(int argc, char **argv)
#else /* HAVE_OFF_T_SCALAR */ #else /* HAVE_OFF_T_SCALAR */
/* /*
* Normally a "(*(dest) = *(src))" would do, but on some * Normally a "(*(dest) = *(src))" would do, but on some
* systems, a off_t is not a scalar hince we must memcpy. * systems, a off_t is not a scalar hence we must memcpy.
*/ */
printf("#define SWAP_HALF_IN_OFF_T(dest, src)\t%s%d%s\n", printf("#define SWAP_HALF_IN_OFF_T(dest, src)\t%s%d%s\n",
"memcpy((void *)(dest), (void *)(src), ", stsizelen/8, ")"); "memcpy((void *)(dest), (void *)(src), ", stsizelen/8, ")");
@@ -214,7 +219,7 @@ main(int argc, char **argv)
* Little Endian * Little Endian
* *
* Normally a "(*(dest) = *(src))" would do, but on some * Normally a "(*(dest) = *(src))" would do, but on some
* systems, a DEV is not a scalar hince we must memcpy. * systems, a DEV is not a scalar hence we must memcpy.
*/ */
printf("#define SWAP_HALF_IN_DEV(dest, src)\t%s%d%s\n", printf("#define SWAP_HALF_IN_DEV(dest, src)\t%s%d%s\n",
"memcpy((void *)(dest), (void *)(src), ", devlen/8, ")"); "memcpy((void *)(dest), (void *)(src), ", devlen/8, ")");
@@ -256,7 +261,7 @@ main(int argc, char **argv)
* Little Endian * Little Endian
* *
* Normally a "(*(dest) = *(src))" would do, but on some * Normally a "(*(dest) = *(src))" would do, but on some
* systems, a INODE is not a scalar hince we must memcpy. * systems, a INODE is not a scalar hence we must memcpy.
*/ */
printf("#define SWAP_HALF_IN_INODE(dest, src)\t%s%d%s\n", printf("#define SWAP_HALF_IN_INODE(dest, src)\t%s%d%s\n",
"memcpy((void *)(dest), (void *)(src), ", inodelen/8, ")"); "memcpy((void *)(dest), (void *)(src), ", inodelen/8, ")");

54
fposval.h.def Normal file
View File

@@ -0,0 +1,54 @@
/*
* fposval.h.def - fposval.h default macros
*
* 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/10 22;14:26
* File existed as early as: 2021
*
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/*
* WARNING: For some reason fposval failed to generate values
* so we choose these values that are hopefully OK
*/
/* what are our file position & size types? */
#undef FILEPOS_BITS
#define FILEPOS_BITS 64
#undef FILEPOS_LEN
#define FILEPOS_LEN 8
#define SWAP_HALF_IN_FILEPOS(dest, src) (*(dest) = *(src))
#undef OFF_T_BITS
#define OFF_T_BITS 64
#undef OFF_T_LEN
#define OFF_T_LEN 8
#define SWAP_HALF_IN_OFF_T(dest, src) (*(dest) = *(src))
#undef DEV_BITS
#define DEV_BITS 32
#undef DEV_LEN
#define DEV_LEN 4
#define SWAP_HALF_IN_DEV(dest, src) memcpy((void *)(dest), (void *)(src), 4)
#undef INODE_BITS
#define INODE_BITS 64
#undef INODE_LEN
#define INODE_LEN 8
#define SWAP_HALF_IN_INODE(dest, src) memcpy((void *)(dest), (void *)(src), 8)

81
func.c
View File

@@ -1,7 +1,8 @@
/* /*
* func - built-in functions implemented here * func - built-in functions implemented here
* *
* Copyright (C) 1999-2007,2018 David I. Bell, Landon Curt Noll & Ernest Bowen * Copyright (C) 1999-2007,2018,2021 David I. Bell, Landon Curt Noll
* and Ernest Bowen
* *
* Primary author: David I. Bell * Primary author: David I. Bell
* *
@@ -104,6 +105,7 @@
#include "zrand.h" #include "zrand.h"
#include "zrandom.h" #include "zrandom.h"
#include "custom.h" #include "custom.h"
#include "strl.h"
#if defined(CUSTOM) #if defined(CUSTOM)
# define E_CUSTOM_ERROR E_NO_C_ARG # define E_CUSTOM_ERROR E_NO_C_ARG
@@ -112,6 +114,9 @@
#endif #endif
#include "banned.h" /* include after system header <> includes */
/* /*
* forward declarations * forward declarations
*/ */
@@ -268,7 +273,7 @@ f_prompt(VALUE *vp)
math_error("Cannot allocate string"); math_error("Cannot allocate string");
/*NOTREACHED*/ /*NOTREACHED*/
} }
strncpy(newcp, cp, len+1); strlcpy(newcp, cp, len+1);
result.v_str = makestring(newcp); result.v_str = makestring(newcp);
return result; return result;
} }
@@ -301,7 +306,7 @@ f_display(int count, VALUE **vals)
/*ARGSUSED*/ /*ARGSUSED*/
S_FUNC VALUE S_FUNC VALUE
f_null(int UNUSED count, VALUE UNUSED **vals) f_null(int UNUSED(count), VALUE **UNUSED(vals))
{ {
VALUE res; VALUE res;
@@ -5325,7 +5330,7 @@ f_list(int count, VALUE **vals)
/*ARGSUSED*/ /*ARGSUSED*/
S_FUNC VALUE S_FUNC VALUE
f_assoc(int UNUSED count, VALUE UNUSED **vals) f_assoc(int UNUSED(count), VALUE **UNUSED(vals))
{ {
VALUE result; VALUE result;
@@ -5522,7 +5527,7 @@ f_usertime(void)
NUMBER *secret; /* whole sconds of CPU time to return */ NUMBER *secret; /* whole sconds of CPU time to return */
NUMBER *usecret; /* microseconds of CPU time to return */ NUMBER *usecret; /* microseconds of CPU time to return */
/* get the resource informaion for ourself */ /* get the resource information for ourself */
status = getrusage(who, &usage); status = getrusage(who, &usage);
if (status < 0) { if (status < 0) {
/* system call error, so return 0 */ /* system call error, so return 0 */
@@ -5561,7 +5566,7 @@ f_systime(void)
NUMBER *secret; /* whole sconds of CPU time to return */ NUMBER *secret; /* whole sconds of CPU time to return */
NUMBER *usecret; /* microseconds of CPU time to return */ NUMBER *usecret; /* microseconds of CPU time to return */
/* get the resource informaion for ourself */ /* get the resource information for ourself */
status = getrusage(who, &usage); status = getrusage(who, &usage);
if (status < 0) { if (status < 0) {
/* system call error, so return 0 */ /* system call error, so return 0 */
@@ -5601,7 +5606,7 @@ f_runtime(void)
NUMBER *secret; /* whole sconds of CPU time to return */ NUMBER *secret; /* whole sconds of CPU time to return */
NUMBER *usecret; /* microseconds of CPU time to return */ NUMBER *usecret; /* microseconds of CPU time to return */
/* get the resource informaion for ourself */ /* get the resource information for ourself */
status = getrusage(who, &usage); status = getrusage(who, &usage);
if (status < 0) { if (status < 0) {
/* system call error, so return 0 */ /* system call error, so return 0 */
@@ -5718,7 +5723,7 @@ f_fpathopen(int count, VALUE **vals)
/* initialize VALUE */ /* initialize VALUE */
result.v_subtype = V_NOSUBTYPE; result.v_subtype = V_NOSUBTYPE;
/* check for valid strongs */ /* check for valid strong */
if (vals[0]->v_type != V_STR || vals[1]->v_type != V_STR) { if (vals[0]->v_type != V_STR || vals[1]->v_type != V_STR) {
return error_value(E_FPATHOPEN1); return error_value(E_FPATHOPEN1);
} }
@@ -7446,7 +7451,11 @@ f_cmdbuf(void)
cmdbuf_len = strlen(cmdbuf); cmdbuf_len = strlen(cmdbuf);
newcp = (char *)malloc(cmdbuf_len+1); newcp = (char *)malloc(cmdbuf_len+1);
strncpy(newcp, cmdbuf, cmdbuf_len+1); if (newcp == NULL) {
math_error("Cannot allocate string in cmdbuf");
/*NOTREACHED*/
}
strlcpy(newcp, cmdbuf, cmdbuf_len+1);
result.v_str = makestring(newcp); result.v_str = makestring(newcp);
return result; return result;
} }
@@ -7624,17 +7633,35 @@ f_putenv(int count, VALUE **vals)
/* convert putenv("foo","bar") into putenv("foo=bar") */ /* convert putenv("foo","bar") into putenv("foo=bar") */
snprintf_len = vals[0]->v_str->s_len + 1 + snprintf_len = vals[0]->v_str->s_len + 1 +
vals[1]->v_str->s_len + 1; vals[1]->v_str->s_len;
putenv_str = (char *)malloc(snprintf_len+1); putenv_str = (char *)malloc(snprintf_len+1);
if (putenv_str == NULL) { if (putenv_str == NULL) {
math_error("Cannot allocate string in putenv"); math_error("Cannot allocate string in putenv");
/*NOTREACHED*/ /*NOTREACHED*/
} }
snprintf(putenv_str, snprintf_len, /*
"%s=%s", vals[0]->v_str->s_str, * The next statement could be:
vals[1]->v_str->s_str); *
putenv_str[snprintf_len] = '\0'; /* paranoia */ * snprintf(putenv_str, snprintf_len,
* "%s=%s", vals[0]->v_str->s_str,
* vals[1]->v_str->s_str);
*
* however compilers like gcc would issue warnings such as:
*
* null destination pointer
*
* even though we check that putenv_str is non-NULL
* above before using it. Therefore we call strlcpy()
* twice and make an assignment instead to avoid such warnings.
*/
strlcpy(putenv_str,
vals[0]->v_str->s_str,
vals[0]->v_str->s_len+1);
putenv_str[vals[0]->v_str->s_len] = '=';
strlcpy(putenv_str + vals[0]->v_str->s_len + 1,
vals[1]->v_str->s_str,
vals[1]->v_str->s_len+1);
putenv_str[snprintf_len] = '\0';
} else { } else {
/* firewall */ /* firewall */
@@ -7658,8 +7685,8 @@ f_putenv(int count, VALUE **vals)
math_error("Cannot allocate string in putenv"); math_error("Cannot allocate string in putenv");
/*NOTREACHED*/ /*NOTREACHED*/
} }
strncpy(putenv_str, vals[0]->v_str->s_str, strlcpy(putenv_str, vals[0]->v_str->s_str,
vals[0]->v_str->s_len + 1); vals[0]->v_str->s_len+1);
} }
/* return putenv result */ /* return putenv result */
@@ -7786,7 +7813,7 @@ f_base(int count, NUMBER **vals)
return base_value(conf->outmode, conf->outmode); return base_value(conf->outmode, conf->outmode);
} }
/* deal with the specal modes first */ /* deal with the special modes first */
if (qisfrac(vals[0])) { if (qisfrac(vals[0])) {
return base_value(math_setmode(MODE_FRAC), conf->outmode); return base_value(math_setmode(MODE_FRAC), conf->outmode);
} }
@@ -7837,7 +7864,7 @@ f_base2(int count, NUMBER **vals)
return base_value(conf->outmode2, conf->outmode2); return base_value(conf->outmode2, conf->outmode2);
} }
/* deal with the specal modes first */ /* deal with the special modes first */
if (qisfrac(vals[0])) { if (qisfrac(vals[0])) {
return base_value(math_setmode2(MODE_FRAC), conf->outmode2); return base_value(math_setmode2(MODE_FRAC), conf->outmode2);
} }
@@ -8457,7 +8484,7 @@ f_version(void)
{ {
VALUE result; VALUE result;
/* return the calc verstion string */ /* return the calc version string */
result.v_type = V_STR; result.v_type = V_STR;
result.v_subtype = V_NOSUBTYPE; result.v_subtype = V_NOSUBTYPE;
result.v_str = makestring(strdup(version())); result.v_str = makestring(strdup(version()));
@@ -8523,7 +8550,7 @@ STATIC CONST struct builtin builtins[] = {
{"acsch", 1, 2, 0, OP_NOP, 0, f_acsch, {"acsch", 1, 2, 0, OP_NOP, 0, f_acsch,
"inverse csch of a within accuracy b"}, "inverse csch of a within accuracy b"},
{"agd", 1, 2, 0, OP_NOP, 0, f_agd, {"agd", 1, 2, 0, OP_NOP, 0, f_agd,
"inverse gudermannian function"}, "inverse Gudermannian function"},
{"append", 1, IN, FA, OP_NOP, 0, f_listappend, {"append", 1, IN, FA, OP_NOP, 0, f_listappend,
"append values to end of list"}, "append values to end of list"},
{"appr", 1, 3, 0, OP_NOP, 0, f_appr, {"appr", 1, 3, 0, OP_NOP, 0, f_appr,
@@ -8734,7 +8761,7 @@ STATIC CONST struct builtin builtins[] = {
{"gcdrem", 2, 2, 0, OP_NOP, qgcdrem, 0, {"gcdrem", 2, 2, 0, OP_NOP, qgcdrem, 0,
"a divided repeatedly by gcd with b"}, "a divided repeatedly by gcd with b"},
{"gd", 1, 2, 0, OP_NOP, 0, f_gd, {"gd", 1, 2, 0, OP_NOP, 0, f_gd,
"gudermannian function"}, "Gudermannian function"},
{"getenv", 1, 1, 0, OP_NOP, 0, f_getenv, {"getenv", 1, 1, 0, OP_NOP, 0, f_getenv,
"value of environment variable (or NULL)"}, "value of environment variable (or NULL)"},
{"hash", 1, IN, 0, OP_NOP, 0, f_hash, {"hash", 1, IN, 0, OP_NOP, 0, f_hash,
@@ -9014,7 +9041,7 @@ STATIC CONST struct builtin builtins[] = {
"reverse search matrix or list for value b\n" "reverse search matrix or list for value b\n"
"\t\t\tstarting at index c"}, "\t\t\tstarting at index c"},
{"runtime", 0, 0, 0, OP_NOP, f_runtime, 0, {"runtime", 0, 0, 0, OP_NOP, f_runtime, 0,
"user and kernel mode cpu time in seconds"}, "user and kernel mode CPU time in seconds"},
{"saveval", 1, 1, 0, OP_SAVEVAL, 0, 0, {"saveval", 1, 1, 0, OP_SAVEVAL, 0, 0,
"set flag for saving values"}, "set flag for saving values"},
{"scale", 2, 2, 0, OP_SCALE, 0, 0, {"scale", 2, 2, 0, OP_SCALE, 0, 0,
@@ -9033,7 +9060,7 @@ STATIC CONST struct builtin builtins[] = {
{"sech", 1, 2, 0, OP_NOP, 0, f_sech, {"sech", 1, 2, 0, OP_NOP, 0, f_sech,
"hyperbolic secant of a within accuracy b"}, "hyperbolic secant of a within accuracy b"},
{"seed", 0, 0, 0, OP_NOP, f_seed, 0, {"seed", 0, 0, 0, OP_NOP, f_seed, 0,
"return a 64 bit seed for a psuedo-random generator"}, "return a 64 bit seed for a pseudo-random generator"},
{"segment", 2, 3, 0, OP_NOP, 0, f_segment, {"segment", 2, 3, 0, OP_NOP, 0, f_segment,
"specified segment of specified list"}, "specified segment of specified list"},
{"select", 2, 2, 0, OP_NOP, 0, f_select, {"select", 2, 2, 0, OP_NOP, 0, f_select,
@@ -9107,7 +9134,7 @@ STATIC CONST struct builtin builtins[] = {
{"system", 1, 1, 0, OP_NOP, 0, f_system, {"system", 1, 1, 0, OP_NOP, 0, f_system,
"call Unix command"}, "call Unix command"},
{"systime", 0, 0, 0, OP_NOP, f_systime, 0, {"systime", 0, 0, 0, OP_NOP, f_systime, 0,
"kernel mode cpu time in seconds"}, "kernel mode CPU time in seconds"},
{"tail", 2, 2, 0, OP_NOP, 0, f_tail, {"tail", 2, 2, 0, OP_NOP, 0, f_tail,
"retain list of specified number at tail of list"}, "retain list of specified number at tail of list"},
{"tan", 1, 2, 0, OP_NOP, 0, f_tan, {"tan", 1, 2, 0, OP_NOP, 0, f_tan,
@@ -9123,7 +9150,7 @@ STATIC CONST struct builtin builtins[] = {
{"ungetc", 2, 2, 0, OP_NOP, 0, f_ungetc, {"ungetc", 2, 2, 0, OP_NOP, 0, f_ungetc,
"unget char read from file"}, "unget char read from file"},
{"usertime", 0, 0, 0, OP_NOP, f_usertime, 0, {"usertime", 0, 0, 0, OP_NOP, f_usertime, 0,
"user mode cpu time in seconds"}, "user mode CPU time in seconds"},
{"version", 0, 0, 0, OP_NOP, 0, f_version, {"version", 0, 0, 0, OP_NOP, 0, f_version,
"calc version string"}, "calc version string"},
{"xor", 1, IN, 0, OP_NOP, 0, f_xor, {"xor", 1, IN, 0, OP_NOP, 0, f_xor,
@@ -9140,7 +9167,7 @@ STATIC CONST struct builtin builtins[] = {
* *
* When FUNCLIST is defined, we are being compiled by rules from the help * When FUNCLIST is defined, we are being compiled by rules from the help
* sub-directory to form a program that will produce the main part of the * sub-directory to form a program that will produce the main part of the
* buiiltin help file. * builtin help file.
* *
* See the builtin rule in the help/Makefile for details. * See the builtin rule in the help/Makefile for details.
*/ */

13
hash.c
View File

@@ -1,7 +1,7 @@
/* /*
* hash - one-way hash routines * hash - one-way hash routines
* *
* 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -26,16 +26,23 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include "have_string.h"
#ifdef HAVE_STRING_H
# include <string.h>
#endif
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include "calc.h" #include "calc.h"
#include "alloc.h"
#include "value.h" #include "value.h"
#include "zrand.h" #include "zrand.h"
#include "zrandom.h" #include "zrandom.h"
#include "hash.h" #include "hash.h"
#include "banned.h" /* include after system header <> includes */
/* /*
* external hash_setup functions * external hash_setup functions
*/ */
@@ -270,7 +277,7 @@ hash_final(HASH *state)
* The input is a long. If a long is smaller than 64 bits, we will * The input is a long. If a long is smaller than 64 bits, we will
* hash a final 32 bits of zeros. * hash a final 32 bits of zeros.
* *
* This function is OK to hash BOOL's, unslogned long's, unsigned int's * This function is OK to hash BOOL's, unsigned long's, unsigned int's
* signed int's as well as FLAG's and LEN's. * signed int's as well as FLAG's and LEN's.
*/ */
HASH * HASH *

71
have_ban_pragma.c Normal file
View File

@@ -0,0 +1,71 @@
/*
* have_ban_pragma.c - Determine if we have #pragma GCC poison func_name
*
* 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/08 01:02:34
* 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/
*/
/*
* usage:
* have_ban_pragma
*
* Not all systems have #pragma GCC poison func_name, so this may not
* compile on your system.
*
* This prog outputs several defines:
*
* HAVE_PRAGMA_GCC_POSION
* defined ==> use #pragma GCC poison func_name
* undefined ==> do not use #pragma GCC poison func_name
*
* NOTE: Modern clang compilers allow for 'pragma GCC poison func_name'.
* This is NOT simply a GCC feature.
*/
#include <stdio.h>
/* undef UNBAN to be undefined to force use of banned.h */
#undef UNBAN
/* prevent banned.h from including have_ban_pragma.h */
#define PRE_HAVE_BAN_PRAGMA_H
#include "banned.h" /* include after system header <> includes */
int
main(void)
{
#if defined(HAVE_NO_PRAGMA_GCC_POSION)
printf("#undef HAVE_PRAGMA_GCC_POSION /* no */\n");
#else /* HAVE_NO_PRAGMA_GCC_POSION */
printf("#define HAVE_PRAGMA_GCC_POSION /* yes */\n");
#endif /* HAVE_NO_PRAGMA_GCC_POSION */
/* exit(0); */
return 0;
}

View File

@@ -1,7 +1,7 @@
/* /*
* have_const - Determine if we want or can support ansi const * have_const - Determine if we want or can support ANSI const
* *
* 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -41,9 +41,12 @@
* (nothing) ==> const not used * (nothing) ==> const not used
*/ */
#include <stdio.h> #include <stdio.h>
#include "banned.h" /* include after system header <> includes */
int int
main(void) main(void)
{ {

View File

@@ -1,7 +1,7 @@
/* /*
* have_fpos - Determine if have fgetpos and fsetpos functions * have_fpos - Determine if have fgetpos and fsetpos functions
* *
* 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 * 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 * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -31,9 +31,12 @@
* appropriate have_fpos.h file body. * appropriate have_fpos.h file body.
*/ */
#include <stdio.h> #include <stdio.h>
#include "banned.h" /* include after system header <> includes */
int int
main(void) main(void)
{ {

Some files were not shown because too many files have changed in this diff Show More