mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Compare commits
98 Commits
v2.14.0.9
...
prod-2.14.
Author | SHA1 | Date | |
---|---|---|---|
|
741ea46853 | ||
|
56b6613da8 | ||
|
e9eef2dfa2 | ||
|
0dbf258696 | ||
|
f6d558783a | ||
|
6f27a32f79 | ||
|
d58f605866 | ||
|
b83c5be515 | ||
|
561928a45c | ||
|
7f89af37f5 | ||
|
4470f1f62e | ||
|
8217c49b94 | ||
|
d2cb03b4cc | ||
|
80f13a4e45 | ||
|
1658343227 | ||
|
3f177f2d81 | ||
|
dcd5a987af | ||
|
cb77888045 | ||
|
ce17b267be | ||
|
738dd0334e | ||
|
7ba1dbdc65 | ||
|
ee70c12481 | ||
|
d4970d66ce | ||
|
c3ea3d28a4 | ||
|
3fa34dabfe | ||
|
ffd4422870 | ||
|
b5b2c3f812 | ||
|
f7dadbf1f8 | ||
|
22e123140c | ||
|
1242700601 | ||
|
5b7dfeaf11 | ||
|
b3c015d338 | ||
|
5985ad2f33 | ||
|
e401c9abf1 | ||
|
ad79b6384d | ||
|
862dbd6777 | ||
|
0d31eb6828 | ||
|
c0be37d4e3 | ||
|
4344532c28 | ||
|
0f6efb29bb | ||
|
39c0cba1ca | ||
|
a68e41248f | ||
|
e213cc5072 | ||
|
95ebb60619 | ||
|
e5c8f00adc | ||
|
265713778f | ||
|
4b08a896b0 | ||
|
44f3778af1 | ||
|
8db8f93ae0 | ||
|
e688c22c0e | ||
|
af72992ead | ||
|
9f3a7817d3 | ||
|
dd0610db0a | ||
|
177a5d00d1 | ||
|
a02f8aa9f9 | ||
|
b7d1fb096d | ||
|
48c4f3b948 | ||
|
2023175fcc | ||
|
c54e2648dc | ||
|
faf40b7149 | ||
|
4b2ae40c86 | ||
|
af57104e25 | ||
|
5ae3ca059a | ||
|
cc5fb9a45b | ||
|
5dcadad8b6 | ||
|
9c67ceeed8 | ||
|
7ffbaf922e | ||
|
f9464652fe | ||
|
b30c5c1855 | ||
|
7417f2e776 | ||
|
71138215a9 | ||
|
241f777d07 | ||
|
9d27f0aaa7 | ||
|
a28edba4e9 | ||
|
de47c960d3 | ||
|
c3a51f42e2 | ||
|
f5c5cea8b0 | ||
|
769ac51f8c | ||
|
cdda633369 | ||
|
50f349f4d7 | ||
|
ef00e00328 | ||
|
bb041098bc | ||
|
f794b8d859 | ||
|
bd990cef1f | ||
|
febb9d96b3 | ||
|
13ae9b804e | ||
|
56cc4897d6 | ||
|
eb940e0a21 | ||
|
f3adb35e36 | ||
|
d1d365d7ba | ||
|
af214b166d | ||
|
51b933dfff | ||
|
c4e5007587 | ||
|
c838798f04 | ||
|
23d49a41fe | ||
|
3d300acca1 | ||
|
8f449ba6d2 | ||
|
f4d754b47d |
70
.github/ISSUE_TEMPLATE/calc-bug-report.md
vendored
Normal file
70
.github/ISSUE_TEMPLATE/calc-bug-report.md
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
name: Calc bug report
|
||||
about: Create a report to help us improve
|
||||
title: 'Bug: XXX-change-this-part-XXX'
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Calc bug report template version: 1.2 2022-02-24
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
|
||||
0. How you started calc
|
||||
I.e., provide the command line you used to launch calc
|
||||
|
||||
1. Calc commands and their output
|
||||
Please provide any calc commands you entered on the the terminal.
|
||||
Please provide the calc command line output inline as well.
|
||||
If the above is long, please attach a file.
|
||||
|
||||
Or if you cannot compile calc: The make command you used try and compile calc
|
||||
and all error and warning messages produced during that action. If long, consider
|
||||
attaching a file.
|
||||
|
||||
2. Indicate where the problem is
|
||||
Referring to the information for step 1 above, indicate where the problem is to be found
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Attach make debug output**
|
||||
IMPORTANT: Please attach the output from `make debug`.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, attach screenshots to help explain your problem.
|
||||
|
||||
**Execution environment (please complete the following information):**
|
||||
- OS:
|
||||
E.g., macOS, FreeBSD, Linux, Windows 11, etc.
|
||||
|
||||
- OS version:
|
||||
E.g., Preferred: give the output of `uname -a`
|
||||
or if no uname command, a description of the OS version/release you are using
|
||||
|
||||
- OS distribution:
|
||||
E.g., macOS Monterey, contents of /etc/redhat-releaseor /etc/os-release, etc.
|
||||
|
||||
- Calc Version
|
||||
E.g., output of calc -v
|
||||
or if you cannot compile calc, the version you downloaded and from where it came from
|
||||
|
||||
- Shell and shell version
|
||||
E.g.., bash, zsh, power shell, etc.
|
||||
and the version of the shell you are using, if known
|
||||
|
||||
**Calc mods**
|
||||
If you have modified the calc source for some reason, please description what you modified.
|
||||
Please consider attaching a patch (diff -u) between an official calc release and the source
|
||||
you are using.
|
||||
|
||||
**Patch**
|
||||
If you have a recommended code patch to address the problem, please attach your file
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
8
.gitignore
vendored
8
.gitignore
vendored
@@ -6,7 +6,6 @@
|
||||
#
|
||||
.dynamic
|
||||
.hsrc
|
||||
Makefile.simple
|
||||
NOTES
|
||||
align32.h
|
||||
args.h
|
||||
@@ -16,6 +15,7 @@ calc.1
|
||||
calc.usage
|
||||
calcerr.c
|
||||
calcerr.h
|
||||
charbit.h
|
||||
conf.h
|
||||
cscript/.all
|
||||
cscript/4dsphere
|
||||
@@ -28,19 +28,21 @@ cscript/powerterm
|
||||
cscript/simple
|
||||
cscript/square
|
||||
custom/.all
|
||||
custom/Makefile.simple
|
||||
custom/libcustcalc*
|
||||
endian
|
||||
endian_calc.h
|
||||
fposval.h
|
||||
have_arc4random.h
|
||||
have_ban_pragma.h
|
||||
have_const.h
|
||||
have_environ.h
|
||||
have_fpos.h
|
||||
have_fpos_pos.h
|
||||
have_getpgid.h
|
||||
have_getprid.h
|
||||
have_getsid.h
|
||||
have_gettime.h
|
||||
have_limits.h
|
||||
have_memmv.h
|
||||
have_newstr.h
|
||||
have_offscl.h
|
||||
@@ -82,6 +84,7 @@ help/man
|
||||
help/new_custom
|
||||
help/question
|
||||
help/questions
|
||||
help/releases
|
||||
help/resource
|
||||
help/type
|
||||
help/usage
|
||||
@@ -89,6 +92,7 @@ libcalc*
|
||||
libcustcalc*
|
||||
longbits
|
||||
longbits.h
|
||||
Makefile.our
|
||||
sample_many
|
||||
sample_rand
|
||||
tags
|
||||
|
28
BUGS
28
BUGS
@@ -15,19 +15,37 @@ Look at the end of the output, it should say something like:
|
||||
|
||||
If it does not, then something is really broken!
|
||||
|
||||
To be sure that your version of calc is up to date, check out:
|
||||
To be sure that your version of calc is up to date.
|
||||
Look for the latest release on GitHub:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-mirror.html
|
||||
https://github.com/lcn2/calc/releases
|
||||
|
||||
Just below latest GitHub release sectiop is something called:
|
||||
|
||||
> Assets
|
||||
|
||||
Click in the triangle to open up the Assets then click on
|
||||
the approptiate package to download.
|
||||
|
||||
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 those changges out and see if things get
|
||||
better.
|
||||
|
||||
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.
|
||||
|
||||
=-=
|
||||
|
||||
The BEST WAY TO SEND IN A BUG REPORT is via calc GitHub issue URL:
|
||||
If you encounter a warning or error in compiling, or if you
|
||||
find a calc bug and you wish to send is a fix, we recommend
|
||||
that you submit your change using the GitHub pull request:
|
||||
|
||||
https://github.com/lcn2/calc/pulls
|
||||
|
||||
=-=
|
||||
|
||||
If you just want to send us a bug report, we recommend
|
||||
doing so via the GitHub issue process:
|
||||
|
||||
https://github.com/lcn2/calc/issues
|
||||
|
||||
@@ -119,6 +137,8 @@ Known bugs in calc:
|
||||
The output of the alg_config.cal resource file is bogus.
|
||||
We would welcome a replacement for this code.
|
||||
|
||||
Calc may not compile natively under Windows 11. See README.WINDOWS.
|
||||
|
||||
We are sure some more bugs exist. When you find them, please let
|
||||
us know! See the above for details on how to report and were to
|
||||
Email your bug reports and hopefully patches to fix them.
|
||||
|
255
CHANGES
255
CHANGES
@@ -1,4 +1,206 @@
|
||||
The following are the changes from calc version 2.14.0.9 to date:
|
||||
The following are the changes from calc version 2.14.1.0 to date:
|
||||
|
||||
Fixed alignment of show item section of help command.
|
||||
|
||||
Bug fix: While 0^0 == 1, now for y > 0, 0^y == 0.
|
||||
Adjusted cal/test8900.cal to reflect this bug fix.
|
||||
Added tests to cal/regress.cal to help verify bug fix is fixed.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.14.0.15 to 2.14.0.15:
|
||||
|
||||
Changed Makefile to set shell before setting the SHELL Makefile
|
||||
variable.
|
||||
|
||||
Added text to HOWTO.INSTALL to help people with systems that
|
||||
lack the readline package.
|
||||
|
||||
Trimmed long line in the CONTRIBUTING.md file.
|
||||
|
||||
Expanded the globalsymbol string table size: from 1024 to 65536.
|
||||
|
||||
Expanded the how often to reallocate string table is performed:
|
||||
from 100 to 1024.
|
||||
|
||||
Expanded the number env_pool elements to allocate at a time:
|
||||
from 10 to 256.
|
||||
|
||||
Improve comments on Makefile.local and add a few more examples
|
||||
of how it might be used.
|
||||
|
||||
Changed /*NOTREACHED*/ to not_reached(); and use "attribute.h".
|
||||
|
||||
Added .PHONY rule, just after all rule, to Makefiles.
|
||||
|
||||
Made minor format update on help/commands.
|
||||
|
||||
Added ${WINGM} Makefile variable for users under Windows 11 who
|
||||
use Cygwin and the MinGW64 packages.
|
||||
|
||||
Updated README.WINDOWS for Windows 11 users based on advice
|
||||
form a Microsoft 11 developer.
|
||||
|
||||
Fixed missing quotes in the PASSDOWN makefile variables.
|
||||
|
||||
Disable use of gettime() under _WIN32 or _WIN64.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.14.0.14 to 2.14.0.14:
|
||||
|
||||
Fixed typo in Makefile.local comment.
|
||||
|
||||
Established a tagging procedure for a production release.
|
||||
Production git tags will be of the form:
|
||||
|
||||
prod-2.x.y.z
|
||||
|
||||
|
||||
The following are the changes from calc version 2.14.0.13 to 2.14.0.13:
|
||||
|
||||
Made major changes to our release process in order to avoid
|
||||
missing critical files that happened in calc v2.4.0.12.
|
||||
|
||||
Minor tweak to seed() builtin. Updated help/srand and help/srandom.
|
||||
|
||||
Moved Makefile.ship into Makefile.
|
||||
|
||||
Removed custom/Makefile.head and custom/Makefile.tail.
|
||||
|
||||
The custom/Makefile is now part of source and includes Makefile.
|
||||
In particular, custom/Makefile makes use of the 'middle' of
|
||||
the new top level Makefile where calc's top level Makefile
|
||||
variables are defined.
|
||||
|
||||
Makefile.simple and custom/Makefile.simple are now part of the source
|
||||
and are constructed from Makefile and custom/Makefile respectively.
|
||||
The Makefile.simple and custom/Makefile.simple avoid using GNU
|
||||
conditionals. They may be used with older/classic make commands.
|
||||
|
||||
Makefile.local will include comments about how to better use
|
||||
it. Between releases, Makefile.local at the top of the master branch
|
||||
will contain how we typically build calc and test calc (FYI: we
|
||||
normally enable things such as -Werror -Wextra -pedantic). When we
|
||||
push out a release, Makefile.local will be stripped of non-comment
|
||||
lines. Thus, releases of calc, and, released "calc*.src.rpm"
|
||||
files and the source tarballs, will have a Makefile.local with
|
||||
only comments.
|
||||
|
||||
The "README.*" files and "HOWTO.INSTALL" file have been updated.
|
||||
|
||||
By default, compiler warnings have been turned up. The Makefile
|
||||
variable ${CCWARN} now defaults to:
|
||||
|
||||
CCWARN= -Wall -Wextra -pedantic
|
||||
|
||||
The previous level of compiler warnings can be easily restored by
|
||||
adding to Makefile.local:
|
||||
|
||||
CCWARN:= -Wall
|
||||
|
||||
The readline, history and ncurses libraries are now default.
|
||||
The Makefile variables ${USE_READLINE}, ${READLINE_LIB}, and
|
||||
${READLINE_EXTRAS} now default to:
|
||||
|
||||
USE_READLINE= -DUSE_READLINE
|
||||
READLINE_LIB= -lreadline
|
||||
READLINE_EXTRAS= -lhistory -lncurses
|
||||
|
||||
The previous mode where readline, history and ncurses libraries
|
||||
were not compiled in by default can be easily restored by
|
||||
adding to Makefile.local:
|
||||
|
||||
USE_READLINE:=
|
||||
READLINE_LIB:=
|
||||
READLINE_EXTRAS:=
|
||||
|
||||
We have renamed "stable" as "production".
|
||||
We have renamed "unstable" as "tested".
|
||||
|
||||
On the web site:
|
||||
|
||||
http://www.isthe.com/chongo/src/calc/
|
||||
|
||||
these files has been renamed:
|
||||
|
||||
2.x.y.z_IS_LATEST_STABLE ==> 2.x.y.z_IS_LATEST_PRODUCTION
|
||||
2.x.y.z_IS_LATEST_UNSTABLE ==> 2.x.y.z_IS_LATEST_TESTED
|
||||
|
||||
The terms 'stable' and 'unstable' were both misleading and
|
||||
inaccurate. For details see the new documention file:
|
||||
|
||||
README.RELEASE
|
||||
|
||||
See also the help command:
|
||||
|
||||
; help release
|
||||
|
||||
Fixed bug impacting how have_ustat.h was formed.
|
||||
|
||||
Updated help/archive, BUGS, HOWTO.INSTALL to reflect GitHub use.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.14.0.11 to 2.14.0.12:
|
||||
|
||||
Fixed a number of typos.
|
||||
|
||||
Drop support for SunOS, IRIX and MINGW32_NT-5.0 targets.
|
||||
Drop support for CLOCK_SGI_CYCLE. Drop testing for __MSDOS__.
|
||||
|
||||
Minor improvement of various help files. Made format of help
|
||||
files more consistent.
|
||||
|
||||
Corrected a few comments in zrandom.c, including a case where
|
||||
the comment referred to 1007 when it should have used 2^32.
|
||||
|
||||
Improved seed() generation. Improved some comments in seed.c.
|
||||
Added have_environ.c to build have_environ.h in order to
|
||||
determine if:
|
||||
|
||||
extern char **environ; /* user environment */
|
||||
|
||||
is an valid external symbol.
|
||||
|
||||
Fixed documentation that referred to the old additive 55
|
||||
generator. We have been using the subtractive 100 in place
|
||||
of the additive 55 generator for a while now.
|
||||
|
||||
Fixed depend rule for custom/Makefile.
|
||||
|
||||
Fixed how Makefile variable SHELL is set on macOS vs. Linux.
|
||||
Using /bin/sh on macOS due to how zsh treats globs by default.
|
||||
|
||||
Added charbit.h to define CALC_CHARBIT which is either CHAR_BIT
|
||||
from <limits.h> or 8 or a value set by the Makefile variable
|
||||
CALC_CHARBIT. Added have_limits.h to determine if <limits.h>
|
||||
is a system include file.
|
||||
|
||||
Compiling now tests for _WIN64 as well when testing for _WIN32.
|
||||
|
||||
Now assuming that <stdio.h> is available under _WIN32 and _WIN64.
|
||||
|
||||
Added some preliminary notes about attempts to compile calc
|
||||
under Windows 11.
|
||||
|
||||
BTW: While we are unable to use Windows 11, we welcome
|
||||
Windows 11 developers to try compiling calc natively
|
||||
(instead of via a Linux virtual machine). If you are
|
||||
able to compile Windows 11 natively, we would welcome
|
||||
GitHub pull requests showing any needed modifications:
|
||||
|
||||
https://github.com/lcn2/calc/pulls
|
||||
|
||||
Please also add notes to the 'Compiling calc under Windows 11'
|
||||
section in README.WINDOWS file.
|
||||
|
||||
We added Makefile.simple as part of the master branch source
|
||||
to help those who may be using a make tool that does not support
|
||||
GNU Make-like features such as "ifeq" and ":=".
|
||||
|
||||
Fixed incorrect ustat_dev member ref in seed() builtin that
|
||||
was part of the unreleased calc v2.12.0.11.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.14.0.9 to 2.14.0.10:
|
||||
|
||||
Due to issues with clang and Apple Silicon, ARCH_CFLAGS is now,
|
||||
by default, empty:
|
||||
@@ -17,11 +219,24 @@ The following are the changes from calc version 2.14.0.9 to date:
|
||||
arch: uname -p
|
||||
hardware: uname -m
|
||||
|
||||
Fixed compiling calc on Apple Silicon with homebrew. On Apple
|
||||
Fixed compiling calc on Apple Silicon with HomeBrew. On Apple
|
||||
Silicon, HomeBrew installs on into a different location. The
|
||||
Makefile checks if ${hardware} is arm64 and adjusts the location
|
||||
of libraries such as readline and history accordingly.
|
||||
|
||||
Plugged a number of memory leaks.
|
||||
|
||||
Fixed a few cases where v_subtype was not properly initialized.
|
||||
|
||||
Improved the way that internal pre-defined constants are managed.
|
||||
Removed unused internal pre-defined constants. Added code to
|
||||
prevent an internal pre-defined constant (that was never allocated)
|
||||
from being freed.
|
||||
|
||||
Remove unnecessary spaces in-between or next to tabs.
|
||||
|
||||
Update Copyright dates to account for 2021 modifications.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.14.0.7 to 2.14.0.8:
|
||||
|
||||
@@ -95,7 +310,7 @@ The following are the changes from calc version 2.14.0.0 to 2.14.0.6:
|
||||
The optional 2nd argument is ignored by g2d(grad, ep) and d2g(deg, ep).
|
||||
|
||||
The clean and clobber makefile rules no longer list custom/Makefile
|
||||
as a dependecy.
|
||||
as a dependency.
|
||||
|
||||
Unfortunately due to the complex dependency issues between
|
||||
Makefile, Makefile.ship and custom/Makefile, parallel GNU make
|
||||
@@ -233,7 +448,7 @@ The following are the changes from calc version 2.14.0.0 to 2.14.0.6:
|
||||
Fixed typo in cal/statistics.cal thanks to a report by <GitHub user
|
||||
dennisaldea>.
|
||||
|
||||
Fixed an old Windoz pun in README.WINDOWS as requested by <GitHub
|
||||
Fixed an old Windows pun in README.WINDOWS as requested by <GitHub
|
||||
user marcodegio>.
|
||||
|
||||
Fixed a really obscure bug in the internal initconstants()
|
||||
@@ -244,7 +459,7 @@ The following are the changes from calc version 2.14.0.0 to 2.14.0.6:
|
||||
multi-architecture testing found the bug. Now, after all
|
||||
those years, it is fixed.
|
||||
|
||||
Fixed issues identied by the default CodeUL GitHub security code scan:
|
||||
Fixed issues identified by the default CodeUL GitHub security code scan:
|
||||
|
||||
Wrong type of arguments to printf in have_fpos_pos.c
|
||||
Multiplication result converted to larger type in zfunc.c
|
||||
@@ -1291,7 +1506,7 @@ The following are the changes from calc version 2.12.4.0 to 2.12.4.2:
|
||||
dot org) for this patch.
|
||||
|
||||
Michael Penk (mpenk at wuska dot com) reported success in installs
|
||||
under windoz via Cygwin by making a change to the Cygwin target.
|
||||
under Windows via Cygwin by making a change to the Cygwin target.
|
||||
These changes have been folded into the main calc Makefile.
|
||||
The old recommendation of using 'make win32_hsrc' is no longer
|
||||
required for Cygwin. See the README.WINDOWS file for details.
|
||||
@@ -1465,7 +1680,7 @@ The following are the changes from calc version 2.12.1.10 to 2.12.2:
|
||||
All extern functions are now declared with the symbol E_FUNC.
|
||||
The include file decl.h defines these 4 symbols by default
|
||||
to static, extern, static, and extern respectively. Under
|
||||
Windoz, DLL is also defined according to the _EXPORTING symbol
|
||||
Windows, DLL is also defined according to the _EXPORTING symbol
|
||||
and is prepended to the EXTERN and E_FUNC symbols. The decl.h
|
||||
file has replaced the win32dll.h file.
|
||||
|
||||
@@ -2199,8 +2414,8 @@ The following are the changes from calc version 2.12.0 to 2.12.0.8:
|
||||
doalltimes(1e6)
|
||||
|
||||
Calc now ignores carriage returns (\r), vertical tabs (\v), and
|
||||
form feeds (\f) when token parsing. Thus users on Windoz systems
|
||||
can write files using their \r\n format and users on non-Windoz
|
||||
form feeds (\f) when token parsing. Thus users on Windows systems
|
||||
can write files using their \r\n format and users on non-Windows
|
||||
systems can read them without errors.
|
||||
|
||||
The quomod() builtin function now takes an optional 5th argument
|
||||
@@ -2542,7 +2757,7 @@ The following are the changes from calc version 2.11.6.0 to 2.11.6.2:
|
||||
|
||||
Fixed help typos reported by Marc Mezzarobba <mm at mm dot ovh dot org>.
|
||||
|
||||
Forced system("") to return 0 under windoz.
|
||||
Forced system("") to return 0 under Windows.
|
||||
|
||||
The direct.h include file is not used when compiling under Cygwin.
|
||||
|
||||
@@ -2852,10 +3067,10 @@ The following are the changes from calc version 2.11.5t2 to 2.11.5t2.1:
|
||||
The calc builtin function, fopen(), now allows one to specify
|
||||
opening files in binary modes. On POSIX / Linux / Un*x-like systems,
|
||||
text file is the same as a binary file and so 'b' to an fopen has
|
||||
no effect and is ignored. However on systems such as MS Windoz
|
||||
no effect and is ignored. However on systems such as MS Windows
|
||||
the 'b' / binary mode has meaning. See 'help fopen' for details.
|
||||
|
||||
On systems (such as MS Windoz), calc will produce a different error
|
||||
On systems (such as MS Windows), calc will produce a different error
|
||||
message when it attempts to open /dev/tty. This will condition
|
||||
will occur in things like calc scripts when they switch from ``batch
|
||||
processing'' commands from and want to start interactive mode.
|
||||
@@ -2890,14 +3105,14 @@ The following are the changes from calc version 2.11.5t0 to 2.11.5t1.1:
|
||||
Thanks goes to Martin Buck <m at rtin-buck dot de> for reporting
|
||||
this bug and testing the fix.
|
||||
|
||||
An effort was made to make calc easier to build under Windoz
|
||||
An effort was made to make calc easier to build under Windows
|
||||
using the Cygwin project (http://sources.redhat.com/cygwin/).
|
||||
Thanks to the work of Thomas Jones-Low (tjoneslo at softstart
|
||||
dot com), a number of #if defined(_WIN32)'s have been added
|
||||
to calc source. These changes should not effect Windoz
|
||||
to calc source. These changes should not effect Windows
|
||||
free system such as GNU/Linux, Solaris, POSIX-like, etc ...
|
||||
|
||||
Added windll.h to deal with Windoz related DLL issues.
|
||||
Added windll.h to deal with Windows related DLL issues.
|
||||
Using the convention of 'extern DLL' instead of 'DLL extern'
|
||||
to deal with symbols that export to or import from a DLL.
|
||||
|
||||
@@ -2914,12 +3129,12 @@ The following are the changes from calc version 2.11.5t0 to 2.11.5t1.1:
|
||||
If HAVE_URANDOM is NO, then the Makefile will assume /dev/urandom does
|
||||
not exist.
|
||||
|
||||
If TERMCONTROL is -DUSE_WIN32, then the Windoz terminal control
|
||||
If TERMCONTROL is -DUSE_WIN32, then the Windows terminal control
|
||||
(no TERMIOS, no TERMIO, no SGTTY) will be assumed.
|
||||
|
||||
Added a win32_hsrc Makefile rule to create hsrc files appropriate
|
||||
for a Windoz system using Cygwin gcc environment. Added win32.mkdef
|
||||
which is used by the win32_hsrc rule to set the Windoz specific
|
||||
for a Windows system using Cygwin gcc environment. Added win32.mkdef
|
||||
which is used by the win32_hsrc rule to set the Windows specific
|
||||
Makefile values to build hsrc files. The hsrc files are built
|
||||
under the win32 directory.
|
||||
|
||||
@@ -3000,7 +3215,7 @@ The following are the changes from calc version 2.11.5t0 to 2.11.5t1.1:
|
||||
config("windows")
|
||||
|
||||
Now shipping a win32 sub-directory that contains hsrc .h files
|
||||
that have been attempted to be built for windoz.
|
||||
that have been attempted to be built for Windows.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.11.4t1 to 2.11.4t2:
|
||||
@@ -8029,7 +8244,7 @@ Following is a list of visible changes to calc from version 1.24.7 to 1.26.1:
|
||||
|
||||
A small bug in the library file regress.cal was fixed.
|
||||
|
||||
## Copyright (C) 2001-2017,2021 Landon Curt Noll
|
||||
## Copyright (C) 2001-2017,2021,2022 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
|
||||
|
128
CODE_OF_CONDUCT.md
Normal file
128
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
https://github.com/lcn2/calc/blob/master/QUESTIONS.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
7
CONTRIBUTING.md
Normal file
7
CONTRIBUTING.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# How to contribue code to calc
|
||||
|
||||
## CONTRIB-CODE
|
||||
|
||||
See the file
|
||||
<A HREF="https://github.com/lcn2/calc/blob/master/CONTRIB-CODE">CONTRIB-CODE</A>
|
||||
for how to contribue code to calc.
|
222
HOWTO.INSTALL
222
HOWTO.INSTALL
@@ -3,20 +3,21 @@ IMPORTANT: Please see the section at the bottom of this file for
|
||||
some important information on Makefiles used in calc.
|
||||
|
||||
###################################################################
|
||||
# IMPORTANT: DO NOT run GNU make in parallel mode!!! #
|
||||
# IMPORTANT: DO NOT use make in parallel mode!!! #
|
||||
###################################################################
|
||||
# Unfortunately due to the complex dependency issues between #
|
||||
# Makefile, Makefile.ship and custom/Makefile, parallel GNU make #
|
||||
# Makefile, Makefile.ship and custom/Makefile, parallel make #
|
||||
# is NOT recommended. Sorry (tm Canada) :) #
|
||||
###################################################################
|
||||
|
||||
Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
Installing calc from the bzip2-ed tarball: 4 easy steps:
|
||||
|
||||
(0) If your platform supports i686 RPMs, you may want to go to:
|
||||
|
||||
http://www.isthe.com/chongo/src/calc/
|
||||
https://github.com/lcn2/calc/releases
|
||||
|
||||
and use these RPMs:
|
||||
Open up the 'Assets' tag below a given release and
|
||||
download these RPMs:
|
||||
|
||||
* calc*.i686.rpm
|
||||
- all that is needed if you just want to use calc
|
||||
@@ -25,7 +26,14 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
- calc *.h header and *.a lib files for use in other programs
|
||||
|
||||
* calc.*.src.rpm
|
||||
- calc source in RPM package form
|
||||
- calc source via a SRPM package
|
||||
|
||||
Alternately to the above github link, you might try looking at
|
||||
the RPMs under:
|
||||
|
||||
http://www.isthe.com/chongo/src/calc/
|
||||
|
||||
=-=
|
||||
|
||||
The following 4 steps apply to calc source tree that comes from either:
|
||||
|
||||
@@ -37,6 +45,8 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
cd /var/tmp
|
||||
bunzip2 -c /usr/src/redhat/SOURCES/calc-*.tar.bz2 | tar -xvf -
|
||||
|
||||
4 steps:
|
||||
|
||||
(1) Look at the makefile, and adjust it to suit your needs.
|
||||
|
||||
The top level Makefile and the custom/Makefile require a modern
|
||||
@@ -44,17 +54,109 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
targets, the default make is sufficient. On FreeBSD for example,
|
||||
probably want to use gmake instead of make.
|
||||
|
||||
Some report that under macOS, one has to declare the target
|
||||
to be Darwin. So for macOS, one might have to do:
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! By default, calc assumes you have the readline package installed !
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! macOS does not have readline, so mac users need to make a choice !
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
# for macOS users only, force the target to be Darwin
|
||||
The readline package (-lreadline, -lhistory, -lncurses) used by and
|
||||
linked into calc by default. If your system does NOT have those
|
||||
libaraies, then you have two options:
|
||||
|
||||
(1-with readline) Install the readline package <- Recommended
|
||||
|
||||
Install the readline package first, then compile calc.
|
||||
|
||||
For information on the readline package, see:
|
||||
|
||||
https://tiswww.case.edu/php/chet/readline/rltop.html
|
||||
|
||||
MacOS users can use MacPorts or HomeBrew to install readline:
|
||||
|
||||
https://www.macports.org
|
||||
https://brew.sh
|
||||
|
||||
Or compile from the readline.git repo:
|
||||
|
||||
http://git.savannah.gnu.org/cgit/readline.git/
|
||||
|
||||
(1-w/o readline) Compile calc without readline (not recommended)
|
||||
|
||||
Why do we not recommend (1b)? Because using calc with readline
|
||||
provides a beter user experience.
|
||||
|
||||
If you feel you must use calc without the readline package, then you
|
||||
will need to change your calc Makefile with this patch:
|
||||
|
||||
--- Makefile.old 2021-12-29 14:57:56.000000000 -0800
|
||||
+++ Makefile 2021-12-29 14:59:13.000000000 -0800
|
||||
@@ -1140,14 +1140,14 @@
|
||||
#
|
||||
make target=Darwin clobber
|
||||
make target=Darwin all
|
||||
make target=Darwin chk
|
||||
make target=Darwin install
|
||||
# If in doubt, set USE_READLINE, READLINE_LIB and READLINE_INCLUDE to nothing.
|
||||
#
|
||||
-#USE_READLINE=
|
||||
-USE_READLINE= -DUSE_READLINE
|
||||
+USE_READLINE=
|
||||
+#USE_READLINE= -DUSE_READLINE
|
||||
#
|
||||
-#READLINE_LIB=
|
||||
-#READLINE_EXTRAS=
|
||||
+READLINE_LIB=
|
||||
+READLINE_EXTRAS=
|
||||
#
|
||||
-READLINE_LIB= -lreadline
|
||||
-READLINE_EXTRAS= -lhistory -lncurses
|
||||
+#READLINE_LIB= -lreadline
|
||||
+#READLINE_EXTRAS= -lhistory -lncurses
|
||||
#
|
||||
#READLINE_LIB= -L/usr/gnu/lib -lreadline
|
||||
#READLINE_EXTRAS= -lhistory -lncurses
|
||||
@@ -1181,8 +1181,8 @@
|
||||
# # and using the readline, history, and ncurses libraries.
|
||||
# #
|
||||
ifneq ($(HOMEBREW_PREFIX),)
|
||||
-READLINE_LIB:= -L${HOMEBREW_PREFIX}/opt/readline/lib -lreadline
|
||||
-READLINE_INCLUDE:= -I${HOMEBREW_PREFIX}/opt/readline/include
|
||||
+#READLINE_LIB:= -L${HOMEBREW_PREFIX}/opt/readline/lib -lreadline
|
||||
+#READLINE_INCLUDE:= -I${HOMEBREW_PREFIX}/opt/readline/include
|
||||
endif
|
||||
#
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
|
||||
If your target system does not have a moderm Makefile (such as gmake),
|
||||
If your target system does not have a modern Makefile
|
||||
(such as gmake), then you will need to change your
|
||||
Makefile.simple with this patch:
|
||||
|
||||
--- Makefile.simple.orig 2021-12-29 15:00:53.000000000 -0800
|
||||
+++ Makefile.simple 2021-12-29 15:01:00.000000000 -0800
|
||||
@@ -1005,14 +1005,14 @@
|
||||
#
|
||||
# If in doubt, set USE_READLINE, READLINE_LIB and READLINE_INCLUDE to nothing.
|
||||
#
|
||||
-#USE_READLINE=
|
||||
-USE_READLINE= -DUSE_READLINE
|
||||
+USE_READLINE=
|
||||
+#USE_READLINE= -DUSE_READLINE
|
||||
#
|
||||
-#READLINE_LIB=
|
||||
-#READLINE_EXTRAS=
|
||||
+READLINE_LIB=
|
||||
+READLINE_EXTRAS=
|
||||
#
|
||||
-READLINE_LIB= -lreadline
|
||||
-READLINE_EXTRAS= -lhistory -lncurses
|
||||
+#READLINE_LIB= -lreadline
|
||||
+#READLINE_EXTRAS= -lhistory -lncurses
|
||||
#
|
||||
#READLINE_LIB= -L/usr/gnu/lib -lreadline
|
||||
#READLINE_EXTRAS= -lhistory -lncurses
|
||||
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! By default, calc assumes you are using a modern gnu-like make tool !
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
If your target system does not have a modern Makefile (such as gmake),
|
||||
then you should try using the Makefile.simple and custom/Makefile.simple
|
||||
files:
|
||||
|
||||
@@ -69,17 +171,17 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
suggestion.
|
||||
|
||||
If you are using a modern make (such as gmake), you may override
|
||||
any values set in the Mkefile by adding them to Makefile.local
|
||||
any values set in the Makefile by adding them to Makefile.local
|
||||
using the := directive. For example:
|
||||
|
||||
HAVE_STRING_H:= YES
|
||||
HAVE_TIMES_H:= YES
|
||||
SED:= /usr/local/bin/nsed
|
||||
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! If you are building under Windoz or a Windoz-like environment !
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! If you are building under Windows or a Windows-like environment !
|
||||
! (such as Cygwin or DJGPP), read the README.WINDOWS file. !
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
You should determine if these Makefile variables are reasonable:
|
||||
|
||||
@@ -204,9 +306,6 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
|
||||
make check
|
||||
|
||||
==> If you run into problems, read the BUGS file and follow
|
||||
the instructions found in there.
|
||||
|
||||
NOTE: For a quiet check which only prints if something goes wrong:
|
||||
|
||||
make chk
|
||||
@@ -218,6 +317,9 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
We suggest that you might want to read the README.FIRST file and look at
|
||||
the calc help subsystem. See also the README.md file.
|
||||
|
||||
In general, if you run into problems, read the BUGS file and follow
|
||||
the instructions.
|
||||
|
||||
=-=
|
||||
|
||||
On calc Makefiles:
|
||||
@@ -241,50 +343,38 @@ SHELL= ...
|
||||
|
||||
On some systems such as macOS, the bash shell is very
|
||||
far behind to the point where is cannot be depended on.
|
||||
On such systems, the zsh may be a much better alternative
|
||||
On such systems, the sh may be a much better alternative
|
||||
shell for this Makefile to use:
|
||||
|
||||
SHELL= /bin/zsh
|
||||
SHELL= /bin/sh
|
||||
|
||||
Makefile
|
||||
Makefile.local
|
||||
|
||||
# SRC: Makefile - Our calc build environment
|
||||
# SRC: Makefile.local - tweaks to the top level Makefile
|
||||
|
||||
This is our internal Makefile that drives how we build calc.
|
||||
For critical rules in Makefile.ship, there is a corresponding
|
||||
rule in Makefile that calls ${MAKE} -f Makefile.ship with,
|
||||
additional commands, args and Makefile variables. The ${XVAR}
|
||||
Makefile variable, for example, is passed on each call to
|
||||
${MAKE} -f Makefile.ship so that the environment and parameters of
|
||||
Makefile.ship may be managed for our build environment.
|
||||
Between releases, Makefile.local at the top of the master branch
|
||||
will contain how we typically build calc and test calc (FYI: we
|
||||
normally enable things such as -Werror -Wextra -pedantic). When we
|
||||
push out a release, Makefile.local will be stripped of non-comment
|
||||
lines. Thus, releases of calc, and, released "calc*.src.rpm"
|
||||
files and the source tarballs, will have a Makefile.local with
|
||||
only comments.
|
||||
|
||||
This Makefile is used to make the calc rpm. In addition to these
|
||||
comments, this Makefile differs from the non-rpm bzip2-ed tarball
|
||||
source Makefile in at least the the following ways:
|
||||
If the Makefile is not suitable for you (say because you fetch it
|
||||
from the top of the master branch between releases), then you may
|
||||
wish to remove all non-comment lines. I.e., lines that do not start
|
||||
with the # character.
|
||||
|
||||
CCWERR= -Werror
|
||||
USE_READLINE= -DUSE_READLINE
|
||||
READLINE_LIB= -lreadline -lhistory -lncurses
|
||||
|
||||
If the Makefile is not suitable for you, then
|
||||
you may wish to replace it with Makefile.ship:
|
||||
|
||||
mv -f -v Makefile.ship Makefile
|
||||
|
||||
This Makefile assumes you have a modern make command such as
|
||||
This Makefile.local assumes you have a modern make command such as
|
||||
the GNU make. See Makefile.simple comment below if you do not
|
||||
have such a modern make command.
|
||||
|
||||
In packages such as RPMs, and the tar.bz2 source tarball,
|
||||
Makefile contains the contents of Makefile.ship. If Makefile.ship
|
||||
is missing it has likely moved to replace Makefile.
|
||||
|
||||
In the calc GitHub repo, Makefile is the calc build environment
|
||||
and Makefile.ship is the top level Makefile:
|
||||
|
||||
https://github.com/lcn2/calc
|
||||
|
||||
Makefile.ship
|
||||
Makefile
|
||||
|
||||
# SRC: Makefile.ship - top level Makefile
|
||||
|
||||
@@ -324,16 +414,9 @@ Makefile.ship
|
||||
...
|
||||
#endif /* DO NOT DO THIS */
|
||||
|
||||
The custom/Makefile rule of Makefile.ship is used to form
|
||||
the custom/Makefile. In particular the Makefile.ship lines:
|
||||
|
||||
# start of host target cut
|
||||
... these go in between custom/Makefile.head and custom/Makefile.tail
|
||||
# end of host target cut
|
||||
|
||||
Makefile.simple
|
||||
|
||||
# SRC: non-GNU Makefile via make -f Makefile.ship Makefile.simple
|
||||
# SRC: Makefile.simple - non-GNU version
|
||||
|
||||
This is a non-GNU or simple Makefile designed for environments
|
||||
that do not have a modern make command.
|
||||
@@ -360,36 +443,15 @@ Makefile.simple
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-mirror.html
|
||||
|
||||
custom/Makefile.head
|
||||
|
||||
# SRC: custom/Makefile.head
|
||||
|
||||
This file forms the top part of the custom/Makefile.
|
||||
|
||||
custom/Makefile.tail
|
||||
|
||||
# SRC: custom/Makefile.tail
|
||||
|
||||
This file forms the bottom part of the custom/Makefile.
|
||||
|
||||
custom/Makefile
|
||||
|
||||
# SRC: Makefile via make -f Makefile custom/Makefile
|
||||
|
||||
This is the custom directory Makefile.
|
||||
|
||||
The custom/Makefile rule of Makefile.ship is used to form
|
||||
the custom/Makefile. In particular the Makefile.ship lines:
|
||||
|
||||
# start of host target cut
|
||||
... these go in between custom/Makefile.head and custom/Makefile.tail
|
||||
# end of host target cut
|
||||
|
||||
NOTE: The clobber rule does not remove this file. - XXX
|
||||
|
||||
custom/Makefile.simple
|
||||
|
||||
# SRC: non-GNU Makefile via make -f Makefile custom/Makefile.simple
|
||||
# SRC: custom/Makefile.simple - non-GNU version
|
||||
|
||||
This is a non-GNU or simple Makefile for the custom directory
|
||||
that is designed for environments that do not have a modern make
|
||||
|
12
LIBRARY
12
LIBRARY
@@ -320,10 +320,10 @@ The arbitrary precision integer routines define a structure called a ZVALUE.
|
||||
This is defined in zmath.h. A ZVALUE contains a pointer to an array of
|
||||
integers, the length of the array, and a sign flag. The array is allocated
|
||||
using malloc, so you need to free this array when you are done with a
|
||||
ZVALUE. To do this, you should call zfree with the ZVALUE as an argument
|
||||
(or call freeh with the pointer as an argument) and never try to free the
|
||||
array yourself using free. The reason for this is that sometimes the pointer
|
||||
points to one of two statically allocated arrays which should NOT be freed.
|
||||
ZVALUE. To do this, you should call zfree() with the ZVALUE as an argument
|
||||
and never try to free the array yourself using free(). The reason for this
|
||||
is that sometimes the pointer points to a statically allocated arrays which
|
||||
should NOT be freed.
|
||||
|
||||
The ZVALUE structures are passed to routines by value, and are returned
|
||||
through pointers. For example, to multiply two small integers together,
|
||||
@@ -615,14 +615,14 @@ These have the values 0, 1, and i.
|
||||
LAST THINGS LAST
|
||||
----------------
|
||||
|
||||
If you wish, when you are all doen you can call libcalc_call_me_last()
|
||||
If you wish, when you are all done you can call libcalc_call_me_last()
|
||||
to free a small amount of storage associated with the libcalc_call_me_first()
|
||||
call. This is not required, but is does bring things to a closure.
|
||||
|
||||
The function libcalc_call_me_last() takes no args and returns void. You
|
||||
need call libcalc_call_me_last() only once.
|
||||
|
||||
## Copyright (C) 1999 David I. Bell and Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 David I. Bell and Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -1 +1,39 @@
|
||||
# Add below to override Makefile values (using :=) as in: HAVE_STRING_H:= YES
|
||||
#
|
||||
# Makefile.local - local Makefile variables
|
||||
#
|
||||
# This file is included by Makefile after the last Makefile is set and
|
||||
# before the first make rule. This makes this file suitable to override
|
||||
# Makefile variables.
|
||||
#
|
||||
# To replace a Makefile variable, use := symbols. For example:
|
||||
#
|
||||
# CCWERR:= -Werror
|
||||
|
||||
###################################################################
|
||||
# NOTE: For this and other commended out examples in this file, #
|
||||
# you need to remove the leading '#<whitespaces>' to take effect. #
|
||||
# #
|
||||
# Comments start with a #-character. #
|
||||
###################################################################
|
||||
|
||||
# You can append to an existing Makefile variable using '+=' symbols.
|
||||
# For example:
|
||||
#
|
||||
# CFLAGS+= -Ofast
|
||||
|
||||
# For example, a AddressSanitizer. You do NOT want to do this by
|
||||
# by default! Do this only if you are debugging with libasan:
|
||||
#
|
||||
# For Linux gcc version 4.8.5 with libasan-4.8.5-4 you might try:
|
||||
#
|
||||
# CDEBUG:= -O0 -g
|
||||
# CFLAGS+= -fsanitize=address -fno-omit-frame-pointer
|
||||
# LDFLAGS+= -fsanitize=address -fno-omit-frame-pointer
|
||||
# CALC_ENV+= ASAN_OPTIONS=detect_stack_use_after_return=1
|
||||
#
|
||||
# For macOS 12.1 with clang version 13.0.0 (clang-1300.0.29.30) you might try:
|
||||
#
|
||||
# CDEBUG:= -O0 -g
|
||||
# CFLAGS+= -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined
|
||||
# LDFLAGS+= -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined
|
||||
# CALC_ENV+= ASAN_OPTIONS=detect_stack_use_after_return=1
|
||||
|
File diff suppressed because it is too large
Load Diff
117
README.RELEASE
Normal file
117
README.RELEASE
Normal file
@@ -0,0 +1,117 @@
|
||||
On calc versions and releases
|
||||
|
||||
Calc version numbers have 4 levels. For example:
|
||||
|
||||
++=== top 2 levels: calc builtin functions compatibility
|
||||
||
|
||||
vvvv
|
||||
|
||||
2.14.0.8
|
||||
\\\\\\
|
||||
^ \\\\----> top 3 levels: calc important code base change
|
||||
|
|
||||
+--- top version level: internal representation compatibility
|
||||
|
||||
The top version level (e.g., 2) refers to the internal representation
|
||||
of values. Any library or hardware linked/built for calc 2 will be able
|
||||
to use values from other 2.x.y.z versions.
|
||||
|
||||
The top 2 levels (e.g., 2.14) refers to a specific compatible set of
|
||||
builtin functions. Calc interpreted code (such as calc resource files)
|
||||
written for, say calc 2.14, will be able to use the same set of builtin
|
||||
functions for any other 2.14.y.z version. Any new builtin functions or
|
||||
significant changes to existing builtin functions would be introduced in
|
||||
a later release such as version 2.15.y.z. While calc scripts written for
|
||||
2.14.y.z will highly likely be able to run under version 2.15.y.z, any
|
||||
new builtin functions added in calc 2.15 may collide with an identically
|
||||
named used defined function.
|
||||
|
||||
The top 3 levels (e.g., 2.14.0) change to reflect an important change to
|
||||
the code base such as a bug fix or performance improvement. There was
|
||||
neither a change to the internal representation format (a top level
|
||||
version change), nor were there new calc builtins introduced in such
|
||||
a top 3 level release.
|
||||
|
||||
There are 3 classes of changes to the calc source tree:
|
||||
|
||||
alpha => untagged GitHub commit
|
||||
|
||||
Any untagged commit to the GitHub master branch should be
|
||||
considered as alpha code that may make calc unstable.
|
||||
|
||||
While we try to avoid breaking the calc code with commits,
|
||||
there is a risk that picking up such a change could
|
||||
negatively impact the code.
|
||||
|
||||
tested => tagged GitHub pre-release commit
|
||||
|
||||
A new version of calc has been released and has recently passed
|
||||
regression testing on at least to different platforms and chip
|
||||
architectures.
|
||||
|
||||
The "tested" class was historically called "untested",
|
||||
however this term was misleading as such releases ARE tested.
|
||||
Since 2.14.0.13 we have used the term "tested".
|
||||
|
||||
All tested releases are tagged with a new version number.
|
||||
Such releases have GitHub assets such as a source tarball,
|
||||
zip file, source rpm, development rpm and binary rpm. See the
|
||||
orange "Pre-release" GitHub releases under:
|
||||
|
||||
https://github.com/lcn2/calc/releases
|
||||
|
||||
At the bottom of a given release is a "> Assets" that may
|
||||
be opened to reveal down-loadable files.
|
||||
|
||||
production => tagged GitHub release commit
|
||||
|
||||
A new version of calc has been released and has undergone
|
||||
extensive testing over time over a number of platforms.
|
||||
Sometimes a "tested" release that is found work well over
|
||||
a period of time will be re-released with a new version
|
||||
number as a "production" release.
|
||||
|
||||
The latest production GitHub release is marked with green
|
||||
"Latest" label under:
|
||||
|
||||
https://github.com/lcn2/calc/releases
|
||||
|
||||
A release that has neither an orange "Pre-release" nor
|
||||
a green "Latest" label is a prior production class release.
|
||||
|
||||
At the bottom of a given release is a "> Assets" that may
|
||||
be opened to reveal down-loadable files.
|
||||
|
||||
Production class code where stability is critical should use a
|
||||
"production" release.
|
||||
|
||||
A historical note and apology:
|
||||
|
||||
In the past, some version number changes were made that did not fully
|
||||
reflect the above version number or change class. Moreover older terms
|
||||
such as "stable" and "unstable" were misleading and did not properly
|
||||
reflect the nature of the change. Sorry! The purpose of this document
|
||||
is to try and bring a better level of conformity to source code updates,
|
||||
tagged releases and version numbers.
|
||||
|
||||
## 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/12/12 19:36:26
|
||||
## 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/
|
@@ -3,17 +3,53 @@ Dear calc user on a Windows based system,
|
||||
See the HOWTO.INSTALL file for information on how to build and install calc.
|
||||
See also the README file.
|
||||
|
||||
NOTE: The main developers do not have access to a Windoz based platform.
|
||||
While we will make an effort to not break calc Windoz based system,
|
||||
our lack of a Windoz test environment will mean we will make mistakes
|
||||
from time to time. Hopefully Windowz users can overcome these mistakes.
|
||||
BTW: While we are unable to use Windows 11, we welcome
|
||||
Windows 11 developers to try compiling calc natively
|
||||
(instead of via a Linux virtual machine). If you are
|
||||
able to compile Windows 11 natively, we would welcome
|
||||
GitHub pull requests showing any needed modifications:
|
||||
|
||||
https://github.com/lcn2/calc/pulls
|
||||
|
||||
Please also add notes to the 'Compiling calc under Windows 11'
|
||||
section in README.WINDOWS file.
|
||||
|
||||
NOTE: The main developers do not have access to a Windows based platform.
|
||||
While we will make an effort to not break calc Windows based system,
|
||||
our lack of a Windows test environment will mean we will make mistakes
|
||||
from time to time. Hopefully Windows users can overcome these mistakes.
|
||||
Of course you are welcome to send us any patches that fix your
|
||||
Windoz build environment.
|
||||
Windows build environment.
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
=-= Compiling calc under Windows 11 =-=
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
=-= compiling with Windows Subsystem for Linux (WSL) =-Cygwin =-=
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
We were given this advice from a Windows 11 developer:
|
||||
|
||||
Windows 11 users could use Cygwin:
|
||||
|
||||
https://cygwin.com/install.html
|
||||
|
||||
IMPORTANT: While installing Cygwin, and during Cygwin Setup, be sure to
|
||||
select all the MinGW64 packages relating to gcc.
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
=-= Compiling calc via virtual machine under Windows 11 =-=
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
We would prefer a Windows 11 solution that does not require a Windows 11
|
||||
developer to install a Linux virtual machine. Nevertheless, a Windows 11
|
||||
user might want to use the Microsoft Windows Subsystem (WSL) for Linux:
|
||||
|
||||
https://docs.microsoft.com/en-us/windows/wsl/
|
||||
|
||||
We have been told that you will need to turn on virtualization
|
||||
to use this WSL subsystem.
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
=-= Compiling calc under Windows 10 via Windows Subsystem for Linux (WSL) =-=
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
It has been reported that calc version 2.12.6.4 has been successfully
|
||||
compiled, installed and running on Windows 10 on 2018 Jan 21.
|
||||
@@ -128,7 +164,9 @@ recommends the following settings:
|
||||
CALCPATH= .;./cal;~/.cal;${CALC_SHAREDIR};${CUSTOMCALDIR}
|
||||
CALCRC= ./.calcinit;~/.calcrc;${CALC_SHAREDIR}/startup
|
||||
CALCPAGER= less.exe -ci
|
||||
DEBUG= -O2 -gstabs+ -DWINDOZ
|
||||
DEBUG= -O2 -gstabs+ -D_WIN32
|
||||
HAVE_ENVIRON=-DHAVE_NO_ENVIRON
|
||||
HAVE_ARC4RANDOM=-DHAVE_NO_ARC4RANDOM
|
||||
|
||||
The 'Linux set' or 'gcc set' (see the Select your compiler type section)
|
||||
should work for DJGPP systems if you set the above Makefile variables.
|
||||
@@ -141,7 +179,7 @@ Follow those recommendations. In cases where they conflict with
|
||||
the above Makefile list, follow the recommendation in the Makefile.
|
||||
|
||||
|
||||
## Copyright (C) 2002-2009 Landon Curt Noll and Thomas Jones-Low
|
||||
## Copyright (C) 2002-2009,2021 Landon Curt Noll and Thomas Jones-Low
|
||||
##
|
||||
## 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
|
||||
|
22
SECURITY.md
22
SECURITY.md
@@ -2,20 +2,18 @@
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Use this section to tell people about which versions of your project are
|
||||
currently being supported with security updates.
|
||||
The most recent version of calc is supported with security updates.
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 5.1.x | :white_check_mark: |
|
||||
| 5.0.x | :x: |
|
||||
| 4.0.x | :white_check_mark: |
|
||||
| < 4.0 | :x: |
|
||||
If the most recent stable of calc is also supported with security updates.
|
||||
|
||||
FYI: please review the BUGS file, or enter the calc command:
|
||||
|
||||
; help BUGS
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Use this section to tell people how to report a vulnerability.
|
||||
Please create a calc GitHub repo issue:
|
||||
|
||||
Tell them where to go, how often they can expect to get an update on a
|
||||
reported vulnerability, what to expect if the vulnerability is accepted or
|
||||
declined, etc.
|
||||
https://github.com/lcn2/calc/issues
|
||||
|
||||
Click on ((New issue)) and follow the issue template.
|
||||
|
21
addop.c
21
addop.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* addop - add opcodes to a function being compiled
|
||||
*
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2021,2022 David I. Bell and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "symbol.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -68,12 +69,12 @@ initfunctions(void)
|
||||
functemplate = (FUNC *) malloc(funcsize(maxopcodes));
|
||||
if (functemplate == NULL) {
|
||||
math_error("Cannot allocate function template");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
functions = (FUNC **) malloc(sizeof(FUNC *) * FUNCALLOCSIZE);
|
||||
if (functions == NULL) {
|
||||
math_error("Cannot allocate function table");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
funccount = 0;
|
||||
funcavail = FUNCALLOCSIZE;
|
||||
@@ -155,7 +156,7 @@ beginfunc(char *name, BOOL newflag)
|
||||
fp = (FUNC *) malloc(funcsize(maxopcodes));
|
||||
if (fp == NULL) {
|
||||
math_error("Cannot allocate temporary function");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
}
|
||||
fp->f_next = NULL;
|
||||
@@ -203,7 +204,7 @@ endfunc(void)
|
||||
fp = (FUNC *) malloc(size);
|
||||
if (fp == NULL) {
|
||||
math_error("Cannot commit function");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
memcpy((char *) fp, (char *) curfunc, size);
|
||||
if (curfunc != functemplate)
|
||||
@@ -257,13 +258,13 @@ adduserfunc(char *name)
|
||||
sizeof(FUNC *) * (funcavail + FUNCALLOCSIZE));
|
||||
if (functions == NULL) {
|
||||
math_error("Failed to reallocate function table");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
funcavail += FUNCALLOCSIZE;
|
||||
}
|
||||
if (addstr(&funcnames, name) == NULL) {
|
||||
math_error("Cannot save function name");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
index = funccount++;
|
||||
functions[index] = NULL;
|
||||
@@ -316,7 +317,7 @@ freefunc(FUNC *fp)
|
||||
}
|
||||
if (index == funccount) {
|
||||
math_error("Bad call to freefunc!!!");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
}
|
||||
if (newname[0] != '*' && (conf->traceflags & TRACE_FNCODES)) {
|
||||
@@ -386,7 +387,7 @@ findfunc(long index)
|
||||
{
|
||||
if (index >= funccount) {
|
||||
math_error("Undefined function");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
return functions[index];
|
||||
}
|
||||
@@ -438,7 +439,7 @@ addop(long op)
|
||||
fp = (FUNC *) malloc(funcsize(maxopcodes));
|
||||
if (fp == NULL) {
|
||||
math_error("cannot malloc function");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
memcpy((char *) fp, (char *) curfunc,
|
||||
funcsize(curfunc->f_opcodecount));
|
||||
|
2
alloc.h
2
alloc.h
@@ -42,9 +42,7 @@
|
||||
# include <string.h>
|
||||
|
||||
#else
|
||||
#if defined(_WIN32) && defined(NOTCYGWIN)
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
# if defined(HAVE_NEWSTR)
|
||||
E_FUNC void *memcpy();
|
||||
|
23
assocfunc.c
23
assocfunc.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* assocfunc - association table routines
|
||||
*
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell
|
||||
* Copyright (C) 1999-2007,2021,2022 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "value.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -74,7 +75,7 @@ associndex(ASSOC *ap, BOOL create, long dim, VALUE *indices)
|
||||
|
||||
if (dim < 0) {
|
||||
math_error("Negative dimension for indexing association");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -112,7 +113,7 @@ associndex(ASSOC *ap, BOOL create, long dim, VALUE *indices)
|
||||
ep = (ASSOCELEM *) malloc(ELEMSIZE(dim));
|
||||
if (ep == NULL) {
|
||||
math_error("Cannot allocate association element");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
ep->e_dim = dim;
|
||||
ep->e_hash = hash;
|
||||
@@ -142,13 +143,13 @@ assocsearch(ASSOC *ap, VALUE *vp, long i, long j, ZVALUE *index)
|
||||
|
||||
if (i < 0 || j > ap->a_count) {
|
||||
math_error("This should not happen in assocsearch");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
while (i < j) {
|
||||
ep = elemindex(ap, i);
|
||||
if (ep == NULL) {
|
||||
math_error("This should not happen in assocsearch");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (acceptvalue(&ep->e_value, vp)) {
|
||||
utoz(i, index);
|
||||
@@ -172,14 +173,14 @@ assocrsearch(ASSOC *ap, VALUE *vp, long i, long j, ZVALUE *index)
|
||||
|
||||
if (i < 0 || j > ap->a_count) {
|
||||
math_error("This should not happen in assocsearch");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
j--;
|
||||
while (j >= i) {
|
||||
ep = elemindex(ap, j);
|
||||
if (ep == NULL) {
|
||||
math_error("This should not happen in assocsearch");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (acceptvalue(&ep->e_value, vp)) {
|
||||
utoz(j, index);
|
||||
@@ -333,7 +334,7 @@ assoccopy(ASSOC *oldap)
|
||||
if (ep == NULL) {
|
||||
math_error("Cannot allocate "
|
||||
"association element");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
ep->e_dim = oldep->e_dim;
|
||||
ep->e_hash = oldep->e_hash;
|
||||
@@ -374,7 +375,7 @@ resize(ASSOC *ap, long newsize)
|
||||
newtable = (ASSOCELEM **) malloc(sizeof(ASSOCELEM *) * newsize);
|
||||
if (newtable == NULL) {
|
||||
math_error("No memory to grow association");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
for (i = 0; i < newsize; i++)
|
||||
newtable[i] = NULL;
|
||||
@@ -430,7 +431,7 @@ assocalloc(long initsize)
|
||||
ap = (ASSOC *) malloc(sizeof(ASSOC));
|
||||
if (ap == NULL) {
|
||||
math_error("No memory for association");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
ap->a_count = 0;
|
||||
ap->a_size = initsize;
|
||||
@@ -438,7 +439,7 @@ assocalloc(long initsize)
|
||||
if (ap->a_table == NULL) {
|
||||
free((char *) ap);
|
||||
math_error("No memory for association");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
for (i = 0; i < initsize; i++)
|
||||
ap->a_table[i] = NULL;
|
||||
|
69
attribute.h
Normal file
69
attribute.h
Normal file
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* attribute - control use of attributes in a backward compatible way
|
||||
*
|
||||
* Copyright (C) 2022 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: 2022/01/21 22:51:25
|
||||
* File existed as early as: 2022
|
||||
*
|
||||
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(INCLUDE_ATTRIBUTE_H)
|
||||
#define INCLUDE_ATTRIBUTE_H
|
||||
|
||||
|
||||
/*
|
||||
* backward compatibility
|
||||
*
|
||||
* Not all compilers support __attribute__ nor do they suuport __has_builtin.
|
||||
* For example, MSVC, TenDRAm and Little C Compiler doesn't support __attribute__.
|
||||
* Early gcc does not support __attribute__.
|
||||
*
|
||||
* Not all compiles have __has_builtin
|
||||
*/
|
||||
#if !defined(__attribute__) && \
|
||||
(defined(__cplusplus) || !defined(__GNUC__) || __GNUC__ == 2 && __GNUC_MINOR__ < 8)
|
||||
# define __attribute__(A)
|
||||
#endif
|
||||
#if !defined __has_builtin
|
||||
# define __has_builtin(x) 0
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* not_reached
|
||||
*
|
||||
* In the old days of lint, one could give lint and friends a hint by
|
||||
* placing the token NOTREACHED immediately between opening and closing
|
||||
* comments. Modern compilers do not honor such commented tokens
|
||||
* and instead rely on features such as __builtin_unreachable
|
||||
* and __attribute__((noreturn)).
|
||||
*
|
||||
* The not_reached will either yield a __builtin_unreachable() feature call,
|
||||
* or it will call abort from stdlib.
|
||||
*/
|
||||
#if __has_builtin(__builtin_unreachable)
|
||||
# define not_reached() __builtin_unreachable()
|
||||
#else
|
||||
# define not_reached() abort()
|
||||
#endif /* __has_builtin(__builtin_unreachable) */
|
||||
|
||||
|
||||
#endif /* !INCLUDE_ATTRIBUTE_H */
|
12
banned.h
12
banned.h
@@ -1,14 +1,14 @@
|
||||
/*
|
||||
* banned - optionally ban dqngerious functions
|
||||
* banned - optionally ban dangerous 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.
|
||||
* calc to correctly calculate: even during extremely long calculations.
|
||||
*
|
||||
* If UNBAN is NOT defined, then calling certain functions
|
||||
* will result in a syntaxc error.
|
||||
* will result in a syntax error.
|
||||
*
|
||||
* If we define UNBAN, then the effect of this file is disabled.
|
||||
*
|
||||
@@ -17,7 +17,7 @@
|
||||
* 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.
|
||||
* 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).
|
||||
@@ -88,11 +88,11 @@
|
||||
* 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
|
||||
* for calc to correctly calculate: even during extremely long
|
||||
* calculations.
|
||||
*
|
||||
* If UNBAN is NOT defined, then calling certain functions
|
||||
* will result in a syntaxc error.
|
||||
* will result in a syntax error.
|
||||
*
|
||||
* Unlike the above URL, we suggest an alternative function.
|
||||
* In many cases, additional logic is required to use the
|
||||
|
29
blkcpy.c
29
blkcpy.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* blkcpy - general values and related routines used by the calculator
|
||||
*
|
||||
* Copyright (C) 1999-2007,2021 Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2021,2022 Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: Landon Curt Noll
|
||||
*
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "str.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -298,7 +299,7 @@ copymat2mat(MATRIX *smat, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||
if (vtemp == NULL) {
|
||||
math_error("Out of memory for mat-to-mat copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
vp = smat->m_table + ssi;
|
||||
vq = vtemp;
|
||||
@@ -347,7 +348,7 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||
if (vtemp == NULL) {
|
||||
math_error("Out of memory for block-to-matrix copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
vp = vtemp;
|
||||
i = num;
|
||||
@@ -404,7 +405,7 @@ copymat2blk(MATRIX *smat, long ssi, long num, BLOCK *dblk, long dsi,
|
||||
newdata = (USB8*) realloc(dblk->data, newsize);
|
||||
if (newdata == NULL) {
|
||||
math_error("Out of memory for matrix-to-block copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
dblk->data = newdata;
|
||||
dblk->maxsize = newsize;
|
||||
@@ -447,7 +448,7 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
|
||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||
if (vtemp == NULL) {
|
||||
math_error("Out of memory for matrix-to-list copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
vp = smat->m_table + ssi;
|
||||
vq = vtemp;
|
||||
@@ -497,7 +498,7 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||
if (vtemp == NULL) {
|
||||
math_error("Out of memory for list-to-matrix copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
ep = listelement(lp, (long) ssi);
|
||||
vp = vtemp;
|
||||
@@ -547,7 +548,7 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
|
||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||
if (vtemp == NULL) {
|
||||
math_error("Out of memory for list-to-list copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
sep = listelement(slp, (long) ssi);
|
||||
vp = vtemp;
|
||||
@@ -662,7 +663,7 @@ copyfile2blk(FILEID id, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
|
||||
newdata = (USB8*) realloc(dblk->data, newsize);
|
||||
if (newdata == NULL) {
|
||||
math_error("Out of memory for block-to-block copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
dblk->data = newdata;
|
||||
dblk->maxsize = newsize;
|
||||
@@ -748,7 +749,7 @@ copyblk2blk(BLOCK *sblk, long ssi, long num, BLOCK *dblk, long dsi,
|
||||
newdata = (USB8*) realloc(dblk->data, newsize);
|
||||
if (newdata == NULL) {
|
||||
math_error("Out of memory for block-to-block copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
dblk->data = newdata;
|
||||
dblk->maxsize = newsize;
|
||||
@@ -792,7 +793,7 @@ copystr2blk(STRING *str, long ssi, long num, BLOCK *dblk, long dsi,
|
||||
newdata = (USB8*) realloc(dblk->data, newsize);
|
||||
if (newdata == NULL) {
|
||||
math_error("Out of memory for string-to-block copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
dblk->data = newdata;
|
||||
dblk->maxsize = newsize;
|
||||
@@ -913,7 +914,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
||||
newdata = (USB8*) realloc(dblk->data, newsize);
|
||||
if (newdata == NULL) {
|
||||
math_error("Out of memory for string-to-block copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
dblk->data = newdata;
|
||||
dblk->maxsize = newsize;
|
||||
@@ -945,7 +946,7 @@ memmove(void *s1, CONST void *s2, MEMMOVE_SIZE_T n)
|
||||
*/
|
||||
if (s1 == NULL || s2 == NULL) {
|
||||
math_error("bogus memmove NULL ptr");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (n <= 0) {
|
||||
/* neg or 0 count does nothing */
|
||||
@@ -1015,7 +1016,7 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi,
|
||||
newdata = (USB8*) realloc(dblk->data, newsize);
|
||||
if (newdata == NULL) {
|
||||
math_error("Out of memory for num-to-block copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
dblk->data = newdata;
|
||||
dblk->maxsize = newsize;
|
||||
@@ -1086,7 +1087,7 @@ copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi,
|
||||
swapped = (HALF *)malloc(halflen * sizeof(HALF));
|
||||
if (swapped == NULL) {
|
||||
math_error("Out of memory for block-to-num copy");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
/* ensure that any trailing octets will be zero filled */
|
||||
swapped[halflen-1] = 0;
|
||||
|
41
block.c
41
block.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* block - fixed, dynamic, fifo and circular memory blocks
|
||||
*
|
||||
* Copyright (C) 1999-2007,2021 Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2021,2022 Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: Landon Curt Noll
|
||||
*
|
||||
@@ -42,6 +42,7 @@
|
||||
#include "calcerr.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -87,7 +88,7 @@ blkalloc(int len, int chunk)
|
||||
nblk = (BLOCK *)malloc(sizeof(BLOCK));
|
||||
if (nblk == NULL) {
|
||||
math_error("cannot allocate block");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -98,7 +99,7 @@ blkalloc(int len, int chunk)
|
||||
nblk->data = (USB8*)malloc(nblk->maxsize);
|
||||
if (nblk->data == NULL) {
|
||||
math_error("cannot allocate block data storage");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
memset(nblk->data, 0, nblk->maxsize);
|
||||
nblk->datalen = len;
|
||||
@@ -156,7 +157,7 @@ blk_free(BLOCK *blk)
|
||||
* blk - the BLOCK to check
|
||||
*
|
||||
* returns:
|
||||
* if all is ok, otherwise math_error() is called and this
|
||||
* if all is OK, otherwise math_error() is called and this
|
||||
* function does not return
|
||||
*/
|
||||
S_FUNC void
|
||||
@@ -172,7 +173,7 @@ blkchk(BLOCK *blk)
|
||||
}
|
||||
if (blk == NULL) {
|
||||
math_error("internal: blk ptr is NULL");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -180,7 +181,7 @@ blkchk(BLOCK *blk)
|
||||
*/
|
||||
if (blk->data == NULL) {
|
||||
math_error("internal: blk->data ptr is NULL");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -188,7 +189,7 @@ blkchk(BLOCK *blk)
|
||||
*/
|
||||
if (blk->datalen < 0) {
|
||||
math_error("internal: blk->datalen < 0");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -196,7 +197,7 @@ blkchk(BLOCK *blk)
|
||||
*/
|
||||
if (blk->datalen < 0) {
|
||||
math_error("internal: blk->datalen < 0");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -259,7 +260,7 @@ blkrealloc(BLOCK *blk, int newlen, int newchunk)
|
||||
nblk = (USB8*)realloc(blk->data, newmax);
|
||||
if (nblk == NULL) {
|
||||
math_error("cannot reallocate block storage");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/* clear any new storage */
|
||||
@@ -367,7 +368,7 @@ blktrunc(BLOCK *blk)
|
||||
blk->data = (USB8*)malloc(1);
|
||||
if (blk->data == NULL) {
|
||||
math_error("cannot allocate truncated block storage");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
blk->data[0] = (USB8)0;
|
||||
if (conf->calc_debug & CALCDBG_BLOCK) {
|
||||
@@ -397,7 +398,7 @@ blk_copy(BLOCK *blk)
|
||||
nblk = (BLOCK *)malloc(sizeof(BLOCK));
|
||||
if (nblk == NULL) {
|
||||
math_error("blk_copy: cannot malloc BLOCK");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -411,7 +412,7 @@ blk_copy(BLOCK *blk)
|
||||
nblk->data = (USB8 *)malloc(blk->maxsize);
|
||||
if (nblk->data == NULL) {
|
||||
math_error("blk_copy: cannot duplicate block data");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
memcpy(nblk->data, blk->data, blk->maxsize);
|
||||
return nblk;
|
||||
@@ -539,7 +540,7 @@ reallocnblock(int id, int len, int chunk)
|
||||
/* Fire wall */
|
||||
if (id < 0 || id >= nblockcount) {
|
||||
math_error("Bad id in call to reallocnblock");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
blk = nblocks[id]->blk;
|
||||
@@ -556,13 +557,13 @@ reallocnblock(int id, int len, int chunk)
|
||||
newdata = malloc(newsize);
|
||||
if (newdata == NULL) {
|
||||
math_error("Allocation failed");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
} else if (newsize != oldsize) {
|
||||
newdata = realloc(blk->data, newsize);
|
||||
if (newdata == NULL) {
|
||||
math_error("Reallocation failed");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
}
|
||||
memset(newdata + len, 0, newsize - len);
|
||||
@@ -593,7 +594,7 @@ createnblock(char *name, int len, int chunk)
|
||||
if (nblocks == NULL) {
|
||||
maxnblockcount = 0;
|
||||
math_error("unable to malloc new named blocks");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
} else {
|
||||
maxnblockcount += NBLOCKCHUNK;
|
||||
@@ -602,7 +603,7 @@ createnblock(char *name, int len, int chunk)
|
||||
if (nblocks == NULL) {
|
||||
maxnblockcount = 0;
|
||||
math_error("cannot malloc more named blocks");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -610,18 +611,18 @@ createnblock(char *name, int len, int chunk)
|
||||
initstr(&nblocknames);
|
||||
if (findstr(&nblocknames, name) >= 0) {
|
||||
math_error("Named block already exists!!!");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
newname = addstr(&nblocknames, name);
|
||||
if (newname == NULL) {
|
||||
math_error("Block name allocation failed");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
res = (NBLOCK *) malloc(sizeof(NBLOCK));
|
||||
if (res == NULL) {
|
||||
math_error("Named block allocation failed");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
nblocks[nblockcount] = res;
|
||||
|
43
byteswap.c
43
byteswap.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* byteswap - byte swapping routines
|
||||
*
|
||||
* Copyright (C) 1999,2021 Landon Curt Noll
|
||||
* Copyright (C) 1999,2021,2022 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "byteswap.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -36,7 +37,7 @@
|
||||
* swap_b8_in_HALFs - swap 8 and if needed, 16 bits in an array of HALFs
|
||||
*
|
||||
* given:
|
||||
* dest - pointer to where the swapped src wil be put or
|
||||
* dest - pointer to where the swapped src will be put or
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a HALF array to swap
|
||||
* len - length of the src HALF array
|
||||
@@ -76,7 +77,7 @@ swap_b8_in_HALFs(HALF *dest, HALF *src, LEN len)
|
||||
* swap_b8_in_ZVALUE - swap 8 and if needed, 16 bits in a ZVALUE
|
||||
*
|
||||
* given:
|
||||
* dest - pointer to where the swapped src wil be put or
|
||||
* dest - pointer to where the swapped src will be put or
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a ZVALUE to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
@@ -103,7 +104,7 @@ swap_b8_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
if (dest == NULL) {
|
||||
math_error("swap_b8_in_ZVALUE: swap_b8_in_ZVALUE: "
|
||||
"Not enough memory");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -144,7 +145,7 @@ swap_b8_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
* swap_b8_in_NUMBER - swap 8 and if needed, 16 bits in a NUMBER
|
||||
*
|
||||
* given:
|
||||
* dest - pointer to where the swapped src wil be put or
|
||||
* dest - pointer to where the swapped src will be put or
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a NUMBER to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
@@ -170,7 +171,7 @@ swap_b8_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
dest = malloc(sizeof(NUMBER));
|
||||
if (dest == NULL) {
|
||||
math_error("swap_b8_in_NUMBER: Not enough memory");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -208,7 +209,7 @@ swap_b8_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
* swap_b8_in_COMPLEX - swap 8 and if needed, 16 bits in a COMPLEX
|
||||
*
|
||||
* given:
|
||||
* dest - pointer to where the swapped src wil be put or
|
||||
* dest - pointer to where the swapped src will be put or
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a COMPLEX to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
@@ -234,7 +235,7 @@ swap_b8_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all)
|
||||
dest = malloc(sizeof(COMPLEX));
|
||||
if (dest == NULL) {
|
||||
math_error("swap_b8_in_COMPLEX: Not enough memory");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -272,7 +273,7 @@ swap_b8_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all)
|
||||
* swap_b16_in_HALFs - swap 16 bits in an array of HALFs
|
||||
*
|
||||
* given:
|
||||
* dest - pointer to where the swapped src wil be put or
|
||||
* dest - pointer to where the swapped src will be put or
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a HALF array to swap
|
||||
* len - length of the src HALF array
|
||||
@@ -312,7 +313,7 @@ swap_b16_in_HALFs(HALF *dest, HALF *src, LEN len)
|
||||
* swap_b16_in_ZVALUE - swap 16 bits in a ZVALUE
|
||||
*
|
||||
* given:
|
||||
* dest - pointer to where the swapped src wil be put or
|
||||
* dest - pointer to where the swapped src will be put or
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a ZVALUE to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
@@ -338,7 +339,7 @@ swap_b16_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
dest = malloc(sizeof(ZVALUE));
|
||||
if (dest == NULL) {
|
||||
math_error("swap_b16_in_ZVALUE: Not enough memory");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -379,7 +380,7 @@ swap_b16_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
* swap_b16_in_NUMBER - swap 16 bits in a NUMBER
|
||||
*
|
||||
* given:
|
||||
* dest - pointer to where the swapped src wil be put or
|
||||
* dest - pointer to where the swapped src will be put or
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a NUMBER to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
@@ -405,7 +406,7 @@ swap_b16_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
dest = malloc(sizeof(NUMBER));
|
||||
if (dest == NULL) {
|
||||
math_error("swap_b16_in_NUMBER: Not enough memory");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -443,7 +444,7 @@ swap_b16_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
* swap_b16_in_COMPLEX - swap 16 bits in a COMPLEX
|
||||
*
|
||||
* given:
|
||||
* dest - pointer to where the swapped src wil be put or
|
||||
* dest - pointer to where the swapped src will be put or
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a COMPLEX to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
@@ -469,7 +470,7 @@ swap_b16_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all)
|
||||
dest = malloc(sizeof(COMPLEX));
|
||||
if (dest == NULL) {
|
||||
math_error("swap_b16_in_COMPLEX: Not enough memory");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -507,7 +508,7 @@ swap_b16_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all)
|
||||
* swap_HALF_in_ZVALUE - swap HALFs in a ZVALUE
|
||||
*
|
||||
* given:
|
||||
* dest - pointer to where the swapped src wil be put or
|
||||
* dest - pointer to where the swapped src will be put or
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a ZVALUE to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
@@ -533,7 +534,7 @@ swap_HALF_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
dest = malloc(sizeof(ZVALUE));
|
||||
if (dest == NULL) {
|
||||
math_error("swap_HALF_in_ZVALUE: Not enough memory");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -575,7 +576,7 @@ swap_HALF_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
* swap_HALF_in_NUMBER - swap HALFs in a NUMBER
|
||||
*
|
||||
* given:
|
||||
* dest - pointer to where the swapped src wil be put or
|
||||
* dest - pointer to where the swapped src will be put or
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a NUMBER to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
@@ -601,7 +602,7 @@ swap_HALF_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
dest = malloc(sizeof(NUMBER));
|
||||
if (dest == NULL) {
|
||||
math_error("swap_HALF_in_NUMBER: Not enough memory");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -639,7 +640,7 @@ swap_HALF_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
* swap_HALF_in_COMPLEX - swap HALFs in a COMPLEX
|
||||
*
|
||||
* given:
|
||||
* dest - pointer to where the swapped src wil be put or
|
||||
* dest - pointer to where the swapped src will be put or
|
||||
* NULL to allocate the storage
|
||||
* src - pointer to a COMPLEX to swap
|
||||
* all - TRUE => swap every element, FALSE => swap only the
|
||||
@@ -665,7 +666,7 @@ swap_HALF_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all)
|
||||
dest = malloc(sizeof(COMPLEX));
|
||||
if (dest == NULL) {
|
||||
math_error("swap_HALF_in_COMPLEX: Not enough memory");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
|
20
byteswap.h
20
byteswap.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* byteswap - byte swapping macros
|
||||
*
|
||||
* Copyright (C) 1999,2014 Landon Curt Noll
|
||||
* Copyright (C) 1999,2014,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -39,7 +39,7 @@
|
||||
/*
|
||||
* SWAP_B8_IN_B16 - swap 8 bits in 16 bits
|
||||
*
|
||||
* dest - pointer to where the swapped src wil be put
|
||||
* dest - pointer to where the swapped src will be put
|
||||
* src - pointer to a 16 bit value to swap
|
||||
*
|
||||
* This macro will either switch to the opposite byte sex (Big Endian vs.
|
||||
@@ -53,7 +53,7 @@
|
||||
/*
|
||||
* SWAP_B16_IN_B32 - swap 16 bits in 32 bits
|
||||
*
|
||||
* dest - pointer to where the swapped src wil be put
|
||||
* dest - pointer to where the swapped src will be put
|
||||
* src - pointer to a 32 bit value to swap
|
||||
*/
|
||||
#define SWAP_B16_IN_B32(dest, src) ( \
|
||||
@@ -64,7 +64,7 @@
|
||||
/*
|
||||
* SWAP_B8_IN_B32 - swap 8 & 16 bits in 32 bits
|
||||
*
|
||||
* dest - pointer to where the swapped src wil be put
|
||||
* dest - pointer to where the swapped src will be put
|
||||
* src - pointer to a 32 bit value to swap
|
||||
*
|
||||
* This macro will either switch to the opposite byte sex (Big Endian vs.
|
||||
@@ -82,7 +82,7 @@
|
||||
/*
|
||||
* SWAP_B32_IN_B64 - swap 32 bits in 64 bits
|
||||
*
|
||||
* dest - pointer to where the swapped src wil be put
|
||||
* dest - pointer to where the swapped src will be put
|
||||
* src - pointer to a 64 bit value to swap
|
||||
*/
|
||||
#define SWAP_B32_IN_B64(dest, src) ( \
|
||||
@@ -93,7 +93,7 @@
|
||||
/*
|
||||
* SWAP_B16_IN_B64 - swap 16 & 32 bits in 64 bits
|
||||
*
|
||||
* dest - pointer to where the swapped src wil be put
|
||||
* dest - pointer to where the swapped src will be put
|
||||
* src - pointer to a 64 bit value to swap
|
||||
*/
|
||||
#define SWAP_B16_IN_B64(dest, src) ( \
|
||||
@@ -106,7 +106,7 @@
|
||||
/*
|
||||
* SWAP_B8_IN_B64 - swap 16 & 32 bits in 64 bits
|
||||
*
|
||||
* dest - pointer to where the swapped src wil be put
|
||||
* dest - pointer to where the swapped src will be put
|
||||
* src - pointer to a 64 bit value to swap
|
||||
*
|
||||
* This macro will either switch to the opposite byte sex (Big Endian vs.
|
||||
@@ -124,7 +124,7 @@
|
||||
/*
|
||||
* SWAP_B32_IN_B64 - swap 32 bits in 64 bits (simulated by 2 32 bit values)
|
||||
*
|
||||
* dest - pointer to where the swapped src wil be put
|
||||
* dest - pointer to where the swapped src will be put
|
||||
* src - pointer to a 64 bit value to swap
|
||||
*/
|
||||
#define SWAP_B32_IN_B64(dest, src) ( \
|
||||
@@ -135,7 +135,7 @@
|
||||
/*
|
||||
* SWAP_B16_IN_B64 - swap 16 & 32 bits in 64 bits (simulated by 2 32 bit vals)
|
||||
*
|
||||
* dest - pointer to where the swapped src wil be put
|
||||
* dest - pointer to where the swapped src will be put
|
||||
* src - pointer to a 64 bit value to swap
|
||||
*/
|
||||
#define SWAP_B16_IN_B64(dest, src) ( \
|
||||
@@ -146,7 +146,7 @@
|
||||
/*
|
||||
* SWAP_B8_IN_B64 - swap 16 & 32 bits in 64 bits (simulated by 2 32 bit vals)
|
||||
*
|
||||
* dest - pointer to where the swapped src wil be put
|
||||
* dest - pointer to where the swapped src will be put
|
||||
* src - pointer to a 64 bit value to swap
|
||||
*
|
||||
* This macro will either switch to the opposite byte sex (Big Endian vs.
|
||||
|
35
cal/Makefile
35
cal/Makefile
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# cal - makefile for calc standard resource files
|
||||
#
|
||||
# Copyright (C) 1999-2006,2017,2021 Landon Curt Noll
|
||||
# Copyright (C) 1999-2006,2017,2021,2022 Landon Curt Noll
|
||||
#
|
||||
# SRC: cal/Makefile
|
||||
#
|
||||
@@ -48,14 +48,18 @@
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point where is cannot be depended on.
|
||||
# On such systems, the zsh may be a much better alternative
|
||||
# On such systems, the sh 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
|
||||
SHELL= /bin/bash
|
||||
#SHELL= /bin/sh
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
ifeq ($(target),Darwin)
|
||||
SHELL:= /bin/zsh
|
||||
endif
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
|
||||
|
||||
####
|
||||
@@ -102,15 +106,6 @@ PREFIX= /usr/local
|
||||
#
|
||||
MAKE_FILE= Makefile
|
||||
|
||||
# Controlling file makefile basename (without the path)
|
||||
#
|
||||
# This is the basename same of the makefile that may/does/will drive
|
||||
# this makefile.
|
||||
#
|
||||
# If in doubt, set TOP_MAKE_FILE to Makefile
|
||||
#
|
||||
TOP_MAKE_FILE= Makefile
|
||||
|
||||
# Where the system include (.h) files are kept
|
||||
#
|
||||
# For DJGPP, select:
|
||||
@@ -220,10 +215,10 @@ T=
|
||||
# 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= >/dev/null 2>&1 silence ${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= 2>/dev/null silence command stderr during hsrc file formation
|
||||
# E= full command stderr during hsrc file formation
|
||||
#
|
||||
# V=@: do not echo debug statements (quiet mode)
|
||||
@@ -298,6 +293,10 @@ DISTLIST= ${CALC_FILES} ${MAKE_FILE}
|
||||
# These files are used to make (but not built) a calc .a link library
|
||||
#
|
||||
CALCLIBLIST=
|
||||
#
|
||||
# rules that are not also names of files
|
||||
#
|
||||
PHONY= all clobber distlist install
|
||||
|
||||
all: ${CALC_FILES} ${MAKE_FILE} .all
|
||||
|
||||
@@ -307,6 +306,8 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
|
||||
${RM} -f .all
|
||||
${TOUCH} .all
|
||||
|
||||
.PHONY: ${PHONY}
|
||||
|
||||
##
|
||||
#
|
||||
# File list generation. You can ignore this section.
|
||||
|
@@ -892,7 +892,7 @@ palindrome.cal
|
||||
nextprimepal(val)
|
||||
prevprimepal(val)
|
||||
|
||||
Functions to form and manipulate palendromes in base 10.
|
||||
Functions to form and manipulate palindromes in base 10.
|
||||
|
||||
Important functions are:
|
||||
|
||||
@@ -932,7 +932,7 @@ pi.cal
|
||||
as your free memory space and system up time allows.
|
||||
|
||||
The piforever() function (written by Klaus Alexander Seistrup
|
||||
<klaus@seistrup.dk>) was inspired by an algorithm conceived by
|
||||
<klaus at seistrup dot dk>) was inspired by an algorithm conceived by
|
||||
Lambert Meertens. See also the ABC Programmer's Handbook, by Geurts,
|
||||
Meertens & Pemberton, published by Prentice-Hall (UK) Ltd., 1990.
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* pi - various routines to calculate pi
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell
|
||||
* Copyright (C) 1999-2004,2021 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -74,7 +74,7 @@ define qpi(epsilon)
|
||||
/*
|
||||
* Print digits of PI forever, neatly formatted, using calc.
|
||||
*
|
||||
* Written by Klaus Alexander Seistrup <klaus@seistrup.dk>
|
||||
* Written by Klaus Alexander Seistrup <klaus at seistrup dot dk>
|
||||
* on a dull Friday evening in November 1999.
|
||||
*
|
||||
* Inspired by an algorithm conceived by Lambert Meertens.
|
||||
|
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* qtime - Display time as English sentence
|
||||
*
|
||||
* Copyright (C) 1999 Klaus Alexander Seistrup and Landon Curt Noll
|
||||
* Copyright (C) 1999,2021 Klaus Alexander Seistrup and Landon Curt Noll
|
||||
*
|
||||
* Written by: Klaus Alexander Seistrup <kseis@magnetic-ink.dk>
|
||||
* Written by: Klaus Alexander Seistrup <kseis at magnetic-ink dot dk>
|
||||
* With mods by: Landon Curt Noll <http://www.isthe.com/chongo/>
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
|
@@ -305,6 +305,8 @@ print '008: parsed test_variables()';
|
||||
*/
|
||||
define test_arithmetic()
|
||||
{
|
||||
local x;
|
||||
|
||||
print '400: Beginning test_arithmetic';
|
||||
|
||||
vrfy(3+4==7, '401: 3 + 4 == 7');
|
||||
@@ -366,8 +368,18 @@ define test_arithmetic()
|
||||
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');
|
||||
vrfy(0^2 == 0, '459: 0^2 == 0');
|
||||
vrfy(0^3 == 0, '460: 0^3 == 0');
|
||||
vrfy(0^12 == 0, '461: 0^12 == 0');
|
||||
vrfy(0^13 == 0, '462: 0^13 == 0');
|
||||
x = 0;
|
||||
vrfy(x == 0, '463: x == 0');
|
||||
vrfy(0^2 == 0, '464: 0^2 == 0');
|
||||
vrfy(0^3 == 0, '465: 0^3 == 0');
|
||||
vrfy(0^12 == 0, '466: 0^12 == 0');
|
||||
vrfy(x^13 == 0, '467: x^13 == 0');
|
||||
|
||||
print '459: Ending test_arithmetic';
|
||||
print '462: Ending test_arithmetic';
|
||||
}
|
||||
print '009: parsed test_arithmetic()';
|
||||
|
||||
@@ -1720,7 +1732,7 @@ define test_rand()
|
||||
print '1503: state0 = srand(0)';
|
||||
vrfy(state0 == init, '1504: state0 == init');
|
||||
|
||||
/* test the additive 55 shuffle generator */
|
||||
/* test the subtractive 100 shuffle generator */
|
||||
tmp = srand(0);
|
||||
print '1505: tmp = srand(0)';
|
||||
vrfy(rand() == 0x1fe5b46fba7e069d, \
|
||||
@@ -4750,7 +4762,7 @@ define test_random()
|
||||
print '5303: state0 = srandom(0)';
|
||||
vrfy(state0 == init, '5304: state0 == init');
|
||||
|
||||
/* test the additive 55 shuffle generator */
|
||||
/* test the subtractive 100 shuffle generator */
|
||||
tmp = srandom(0);
|
||||
print '5305: tmp = srandom(0)';
|
||||
vrfy(random() == 0x7fb838a8a0a95046, \
|
||||
@@ -7101,9 +7113,10 @@ define test_sha1()
|
||||
vrfy(sha1("x", "y", "z") == sha1("xyz"),
|
||||
'7208: sha1("x", "y", "z") == sha1("xyz")');
|
||||
|
||||
vrfy(sha1(sha1("this is",7^19-8,"a composit",3i+4.5,"hash")) ==
|
||||
0xc3e1b562bf45b3bcfc055ac65b5b39cdeb6a6c55,
|
||||
'7209: sha1(sha1("this is",7^19-8,"a composit",3i+4.5,"hash")) == ...');
|
||||
vrfy(sha1(sha1("this is",7^19-8,"a composite",3i+4.5,"hash")) ==
|
||||
0x68aa4fe0a9b6d1662f8d2dbdeee8879239185d09,
|
||||
'7209: sha1(sha1("this is",7^19-8,"a composite",3i+4.5,"hash")) ' +
|
||||
'== ...');
|
||||
|
||||
|
||||
z = sha1(list(1,2,3), "curds and whey", 2^21701-1, pi(1e-100));
|
||||
|
@@ -1,7 +1,7 @@
|
||||
##
|
||||
## set8700 - dotest line tests for the 8700 set of regress.cal
|
||||
##
|
||||
## Copyright (C) 2006 Ernest Bowen and Landon Curt Noll
|
||||
## Copyright (C) 2006,2021 Ernest Bowen and Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -159,7 +159,7 @@ set8700_A = 42, protect(set8700_A,1024), set8700_B = set8700_A, protect(set8700_
|
||||
set8700_A = 6 * 7, protect(set8700_A) == 1024
|
||||
set8700_A == set8700_B
|
||||
|
||||
## Testing matrix protectioon
|
||||
## Testing matrix protection
|
||||
set8700_A = mat [3] = {1, 2, list(3,4)}; 1
|
||||
protect(set8700_A, 65, 1), protect(set8700_A) == 1089
|
||||
protect(set8700_A[0]) == 65
|
||||
@@ -261,7 +261,7 @@ protect(set8700_L[0]) == 0
|
||||
protect(set8700_L[1]) == 512 ## protect(set8700_A) copied
|
||||
protect(set8700_L[1][1]) == 1024 ## protect(set8700_A[1]) copied
|
||||
|
||||
## Testing list with "intialization"
|
||||
## Testing list with "initialization"
|
||||
set8700_L = list(1,2,3), protect(set8700_L) == 0
|
||||
protect(set8700_L[0]) | protect(set8700_L[1]) | protect(set8700_L[2]) == 0 ## All zero
|
||||
set8700_L = {1,set8700_A}, set8700_L[1] == set8700_A
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* sumtimes - runtimes evaluating sums & squares of large lists and mats
|
||||
* sumtimes - runtime evaluating sums & squares of large lists and mats
|
||||
*
|
||||
* Copyright (C) 2006 Ernest Bowen
|
||||
* Copyright (C) 2006,2021 Ernest Bowen
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -2058,11 +2058,17 @@ define t010()
|
||||
return 5;
|
||||
}
|
||||
/*
|
||||
* Once, when an expression such as 0^(6-6) returned 0,
|
||||
* When an expression such as 0^(6-6) returned 0,
|
||||
* then stirling2(10, 5) == 42525. However when we made9
|
||||
* 0^(6-6) == 0^0 == 1, then stirling2(10, 5) == 5102999/120.
|
||||
* 0^(6-6) == 0^0 == 1, then stirling2(10, 5) == 5102999/120
|
||||
* as in:
|
||||
*
|
||||
* if ((stirling2(10, 5) - (5102999/120)) != 0) {
|
||||
* epsilon(eps);
|
||||
* return 6;
|
||||
* }
|
||||
*/
|
||||
if ((stirling2(10, 5) - (5102999/120)) != 0) {
|
||||
if ((stirling2(10, 5) - 42525) != 0) {
|
||||
epsilon(eps);
|
||||
return 6;
|
||||
}
|
||||
@@ -2867,7 +2873,7 @@ define t035()
|
||||
epsilon(eps);
|
||||
return 6;
|
||||
}
|
||||
/* Percentiles. Numbers shamlessly stolen from a question at stackoverflow*/
|
||||
/* Percentiles. Numbers shamelessly stolen from a question at stackoverflow */
|
||||
if (abs
|
||||
(invbetainc(0.025, 10008, 151744) -
|
||||
0.060703546312525377697082321820950758320207425674954679415395) >
|
||||
@@ -3081,7 +3087,7 @@ define test8900(verbose = 0, tnum, testnum = 8903)
|
||||
return tnum;
|
||||
}
|
||||
|
||||
/* We will cause erors intentionally. A lot of them. */
|
||||
/* We will cause errors intentionally. A lot of them. */
|
||||
old_errmax = errmax(-1);
|
||||
|
||||
/*
|
||||
|
25
calc.c
25
calc.c
@@ -1,8 +1,7 @@
|
||||
/*
|
||||
* calc - arbitrary precision calculator
|
||||
*
|
||||
* Copyright (C) 1999-2013,2021 David I. Bell, Landon Curt Noll
|
||||
* and Ernest Bowen
|
||||
* Copyright (C) 1999-2013,2021,2022 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -29,14 +28,14 @@
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
|
||||
#if !defined (_WIN32)
|
||||
#if !defined(_WIN32) && !defined(_WIN64)
|
||||
# include <pwd.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
# include <io.h>
|
||||
# if !defined(NOTCYGWIN)
|
||||
/*
|
||||
@@ -49,7 +48,7 @@
|
||||
# endif
|
||||
# define strdup _strdup
|
||||
# define isatty _isatty
|
||||
#endif /* Windoz */
|
||||
#endif /* Windows */
|
||||
|
||||
#define CALC_C
|
||||
#include "calc.h"
|
||||
@@ -85,6 +84,7 @@
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -548,7 +548,6 @@ main(int argc, char **argv)
|
||||
setbuf(stdout, NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* initialize
|
||||
*/
|
||||
@@ -705,18 +704,18 @@ main(int argc, char **argv)
|
||||
if (!p_flag && i_flag && !stdin_tty) {
|
||||
closeinput();
|
||||
if(!freopen("/dev/tty", "r", stdin)) {
|
||||
#if defined (_WIN32)
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
fprintf(stderr,
|
||||
"/dev/tty does not exist on "
|
||||
"this operating system. "
|
||||
"Change operating systems\n"
|
||||
"or don't use this calc mode "
|
||||
"in the future, sorry!\n");
|
||||
#else /* Windoz free systems */
|
||||
#else /* Windows free systems */
|
||||
fprintf(stderr,
|
||||
"Unable to associate stdin"
|
||||
" with /dev/tty");
|
||||
#endif /* Windoz free systems */
|
||||
#endif /* Windows free systems */
|
||||
set_run_state(RUN_EXIT_WITH_ERROR);
|
||||
break;
|
||||
}
|
||||
@@ -735,18 +734,18 @@ main(int argc, char **argv)
|
||||
!p_flag && (!havecommands||i_flag)) {
|
||||
closeinput();
|
||||
if(!freopen("/dev/tty", "r", stdin)) {
|
||||
#if defined (_WIN32)
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
fprintf(stderr,
|
||||
"/dev/tty does not exist on "
|
||||
"this operating system. "
|
||||
"Change operating systems\n"
|
||||
"or don't use this calc mode "
|
||||
"in the future, sorry!\n");
|
||||
#else /* Windoz free systems */
|
||||
#else /* Windows free systems */
|
||||
fprintf(stderr,
|
||||
"Unable to associate stdin"
|
||||
" with /dev/tty");
|
||||
#endif /* Windoz free systems */
|
||||
#endif /* Windows free systems */
|
||||
set_run_state(RUN_EXIT_WITH_ERROR);
|
||||
break;
|
||||
}
|
||||
@@ -787,7 +786,7 @@ intint(int UNUSED(arg))
|
||||
(void) signal(SIGINT, intint);
|
||||
if (inputwait || (++abortlevel >= ABORT_NOW)) {
|
||||
calc_interrupt("\nABORT");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (abortlevel >= ABORT_MATH)
|
||||
_math_abort_ = TRUE;
|
||||
|
6
calc.h
6
calc.h
@@ -59,7 +59,7 @@
|
||||
#define HOMECHAR '~' /* char which indicates home directory */
|
||||
#define DOTCHAR '.' /* char which indicates current directory */
|
||||
#define PATHCHAR '/' /* char which separates path components */
|
||||
#if defined(__MSDOS__) || defined(__WIN32)
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
#define LISTCHAR ';' /* char which separates paths in a list */
|
||||
#else
|
||||
#define LISTCHAR ':' /* char which separates paths in a list */
|
||||
@@ -123,7 +123,7 @@ E_FUNC int get_inode(FILEID id, ZVALUE *ino);
|
||||
E_FUNC FILEID reopenid(FILEID id, char *mode, char *name);
|
||||
E_FUNC int closeall(void);
|
||||
|
||||
#if !defined(_WIN32)
|
||||
#if !defined(_WIN32) && !defined(_WIN64)
|
||||
E_FUNC int flushall(void);
|
||||
#endif
|
||||
|
||||
@@ -186,7 +186,7 @@ E_FUNC char *calc_strdup(CONST char *);
|
||||
*/
|
||||
E_FUNC void initialize(void);
|
||||
E_FUNC void reinitialize(void);
|
||||
#if !defined (_WIN32)
|
||||
#if !defined(_WIN32) && !defined(_WIN64)
|
||||
E_FUNC int isatty(int tty); /* TRUE if fd is a tty */
|
||||
#endif
|
||||
E_FUNC char *version(void); /* return version string */
|
||||
|
4
calc.man
4
calc.man
@@ -252,7 +252,7 @@ For example:
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
This allows the script to run independely of
|
||||
This allows the script to run independently of
|
||||
startup scripts.
|
||||
|
||||
.sp 1
|
||||
@@ -1445,7 +1445,7 @@ 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:
|
||||
If you do not want to use calc GitHub, then send Email to:
|
||||
.sp
|
||||
.in +0.5i
|
||||
.nf
|
||||
|
12
calc.spec.in
12
calc.spec.in
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# calc.spec.in - template specfile for calc
|
||||
#
|
||||
# Copyright (C) 2003-2014 Petteri Kettunen and Landon Curt Noll
|
||||
# Copyright (C) 2003-2014,2021 Petteri Kettunen and Landon Curt Noll
|
||||
#
|
||||
# Calc is open software; you can redistribute it and/or modify it under
|
||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -49,7 +49,7 @@ BuildRoot: %{_tmppath}/build-root
|
||||
Calc is arbitrary precision C-like arithmetic system that is a
|
||||
calculator, an algorithm prototype and mathematical research
|
||||
tool. Calc comes with a rich set of builtin mathematical and
|
||||
programmatic functions.
|
||||
programming functions.
|
||||
|
||||
For the latest calc release, see the calc project home page:
|
||||
|
||||
@@ -165,11 +165,11 @@ echo '-=- calc.spec beginning make clean -=-'
|
||||
%attr(644, root, root) %{_libdir}/libcustcalc.a
|
||||
|
||||
%changelog
|
||||
* Sun Mar 24 2019 cLandon Curt Noll http://www.isthe.com/chongo
|
||||
* Sun Mar 24 2019 Landon Curt Noll http://www.isthe.com/chongo
|
||||
- Release: 13
|
||||
- Disable compiling with the default ARCH_CFLAGS= -march=native
|
||||
by clearking the ARCH_CFLAGS value in order to maximize
|
||||
the RPM binary protability.
|
||||
by clearing the ARCH_CFLAGS value in order to maximize
|
||||
the RPM binary portability.
|
||||
|
||||
* Mon Sep 01 2014 Landon Curt Noll http://www.isthe.com/chongo
|
||||
- Release: 12
|
||||
@@ -178,7 +178,7 @@ echo '-=- calc.spec beginning make clean -=-'
|
||||
use -j1 while building these RPMs to avoid this make bug.
|
||||
This only impacts the speed of building the rpms.
|
||||
- Stopped removing %{_buildroot} at the beginning of install
|
||||
as this, acording to a number of sources, was asking for trouble.
|
||||
as this, according to a number of sources, was asking for trouble.
|
||||
- Clean removes tmp, BUILD, SPEC, and BUILDROOT dirs under topdir.
|
||||
- Fixed the building of the calc-debuginfo rpm.
|
||||
- Eliminated rpmbuild "bogus date" warnings due to inconsistent weekday,
|
||||
|
14
calcerr.tbl
14
calcerr.tbl
@@ -259,7 +259,7 @@ E_COPY6 Non-integer or negative destination index for copy
|
||||
E_COPY7 Destination index too large for copy
|
||||
E_COPY8 Freed block source for copy
|
||||
E_COPY9 Unsuitable source type for copy
|
||||
E_COPY10 Freed block destinction for copy
|
||||
E_COPY10 Freed block destination for copy
|
||||
E_COPY11 Unsuitable destination type for copy
|
||||
E_COPY12 Incompatible source and destination for copy
|
||||
E_COPY13 No-copy-from source variable
|
||||
@@ -530,15 +530,15 @@ E_H2HM1 Non-lvalue arguments 2 or 3 for h2hm
|
||||
E_H2HM2 Non-real-number arg 1 for h2hm
|
||||
E_H2HM3 No-assign-to argument 2 or 3 for h2hm
|
||||
E_H2HM4 Invalid rounding arg 4 for h2hm
|
||||
E_DMS2D1 Non-real-number aarguments 1, 2 or 3 for dms2d
|
||||
E_DMS2D1 Non-real-number arguments 1, 2 or 3 for dms2d
|
||||
E_DMS2D2 Invalid rounding arg 4 for dms2d
|
||||
E_DM2D1 Non-real-number aarguments 1 or 2 for dm2d
|
||||
E_DM2D1 Non-real-number arguments 1 or 2 for dm2d
|
||||
E_DM2D2 Invalid rounding arg 4 for dm2d
|
||||
E_GMS2G1 Non-real-number aarguments 1, 2 or 3 for gms2g
|
||||
E_GMS2G1 Non-real-number arguments 1, 2 or 3 for gms2g
|
||||
E_GMS2G2 Invalid rounding arg 4 for gms2g
|
||||
E_GM2G1 Non-real-number aarguments 1 or 2 for gm2g
|
||||
E_GM2G1 Non-real-number arguments 1 or 2 for gm2g
|
||||
E_GM2G2 Invalid rounding arg 4 for gm2g
|
||||
E_HMS2H1 Non-real-number aarguments 1, 2 or 3 for hms2h
|
||||
E_HMS2H1 Non-real-number arguments 1, 2 or 3 for hms2h
|
||||
E_HMS2H2 Invalid rounding arg 4 for hms2h
|
||||
E_HM2H1 Non-real-number aarguments 1 or 2 for hm2h
|
||||
E_HM2H1 Non-real-number arguments 1 or 2 for hm2h
|
||||
E_HM2H2 Invalid rounding arg 4 for hm2h
|
||||
|
67
charbit.c
Normal file
67
charbit.c
Normal file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* charbit - determine what CHAR_BIT is and define CALC_CHARBIT
|
||||
*
|
||||
* 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/12/07 20:57:50
|
||||
* 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:
|
||||
* charbit
|
||||
*
|
||||
* This prog outputs several defines:
|
||||
*
|
||||
* CALC_CHARBIT
|
||||
* after including have_limits.h and perhaps <limits.h>,
|
||||
* output CALC_CHARBIT as CHAR_BIT (from <limits.h>, or as 8.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "have_limits.h"
|
||||
#if defined(HAVE_LIMITS_H)
|
||||
#include <limits.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
printf("#include \"have_limits.h\"\n");
|
||||
printf("#if defined(HAVE_LIMITS_H)\n");
|
||||
printf("#include <limits.h>\n");
|
||||
printf("#endif\n\n");
|
||||
#if defined(CHAR_BIT)
|
||||
|
||||
printf("#define CALC_CHARBIT (CHAR_BIT) /* from <limits.h> */\n");
|
||||
|
||||
#else /* CHAR_BIT */
|
||||
|
||||
printf("#define CALC_CHARBIT (8) /* no CHAR_BIT, assume 8 */\n");
|
||||
|
||||
#endif /* CHAR_BIT */
|
||||
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
17
codegen.c
17
codegen.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* codegen - module to generate opcodes from the input tokens
|
||||
*
|
||||
* Copyright (C) 1999-2007,2017,2021 David I. Bell and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2017,2021,2022 David I. Bell and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -44,11 +44,14 @@
|
||||
#include "conf.h"
|
||||
#include "strl.h"
|
||||
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
#if !defined(__CYGWIN__)
|
||||
# include <direct.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -451,7 +454,7 @@ getsimplebody(void)
|
||||
|
||||
|
||||
/*
|
||||
* Get the body of a function, or a subbody of a function.
|
||||
* Get the body of a function, or a sub-body of a function.
|
||||
* body = '{' [ declarations ] ... [ statement ] ... '}'
|
||||
* | [ declarations ] ... [statement ] ... '\n'
|
||||
*/
|
||||
@@ -1516,7 +1519,7 @@ getexprlist(void)
|
||||
|
||||
|
||||
/*
|
||||
* Get an opassignment or possibly just an assignment or expression.
|
||||
* Get an op-assignment or possibly just an assignment or expression.
|
||||
* Returns flags describing the type of assignment or expression found.
|
||||
* assignment = lvalue '=' assignment
|
||||
* | lvalue '+=' assignment
|
||||
@@ -2381,16 +2384,16 @@ getfilename(char *name, size_t namelen, BOOL *once)
|
||||
if (symstr == NULL) {
|
||||
math_error(
|
||||
"string value pointer is NULL!!");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
} else {
|
||||
math_error(
|
||||
"a filename variable must be a string");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
} else {
|
||||
math_error("no such global variable");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
|
25
comfunc.c
25
comfunc.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* comfunc - extended precision complex arithmetic non-primitive routines
|
||||
*
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell and Ernest Bowen
|
||||
* Copyright (C) 1999-2007,2021,2022 David I. Bell and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "cmath.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -60,16 +61,16 @@ c_powi(COMPLEX *c, NUMBER *q)
|
||||
|
||||
if (qisfrac(q)) {
|
||||
math_error("Raising number to non-integral power");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (zge31b(q->num)) {
|
||||
math_error("Raising number to very large power");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
power = ztolong(q->num);
|
||||
if (ciszero(c) && (power == 0)) {
|
||||
math_error("Raising zero to zeroth power");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
sign = 1;
|
||||
if (qisneg(q))
|
||||
@@ -381,7 +382,7 @@ c_root(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
||||
|
||||
if (qisneg(q) || qiszero(q) || qisfrac(q)) {
|
||||
math_error("Taking bad root of complex number");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (cisone(c) || qisone(q))
|
||||
return clink(c);
|
||||
@@ -446,7 +447,7 @@ c_exp(COMPLEX *c, NUMBER *epsilon)
|
||||
|
||||
if (qiszero(epsilon)) {
|
||||
math_error("Zero epsilon for cexp");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (cisreal(c)) {
|
||||
tmp1 = qexp(c->real, epsilon);
|
||||
@@ -502,7 +503,7 @@ c_ln(COMPLEX *c, NUMBER *epsilon)
|
||||
|
||||
if (ciszero(c)) {
|
||||
math_error("logarithm of zero");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (cisone(c))
|
||||
return clink(&_czero_);
|
||||
@@ -599,7 +600,7 @@ c_cos(COMPLEX *c, NUMBER *epsilon)
|
||||
|
||||
if (qiszero(epsilon)) {
|
||||
math_error("Zero epsilon for ccos");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
n = qilog2(epsilon);
|
||||
ctmp1 = comalloc();
|
||||
@@ -649,7 +650,7 @@ c_sin(COMPLEX *c, NUMBER *epsilon)
|
||||
|
||||
if (qiszero(epsilon)) {
|
||||
math_error("Zero epsilon for csin");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (ciszero(c))
|
||||
return clink(&_czero_);
|
||||
@@ -1072,7 +1073,7 @@ c_polar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon)
|
||||
|
||||
if (qiszero(epsilon)) {
|
||||
math_error("Zero epsilon for cpolar");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (qiszero(q1))
|
||||
return clink(&_czero_);
|
||||
@@ -1114,12 +1115,12 @@ c_power(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon)
|
||||
|
||||
if (qiszero(epsilon)) {
|
||||
math_error("Zero epsilon for cpower");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (ciszero(c1)) {
|
||||
if (cisreal(c2) && qisneg(c2->real)) {
|
||||
math_error ("Non-positive real exponent of zero");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
return clink(&_czero_);
|
||||
}
|
||||
|
11
commath.c
11
commath.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* commath - extended precision complex arithmetic primitive routines
|
||||
*
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell
|
||||
* Copyright (C) 1999-2007,2021,2022 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "cmath.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -189,7 +190,7 @@ c_div(COMPLEX *c1, COMPLEX *c2)
|
||||
|
||||
if (ciszero(c2)) {
|
||||
math_error("Division by zero");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if ((c1->real == c2->real) && (c1->imag == c2->imag))
|
||||
return clink(&_cone_);
|
||||
@@ -260,7 +261,7 @@ c_inv(COMPLEX *c)
|
||||
|
||||
if (ciszero(c)) {
|
||||
math_error("Inverting zero");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
r = comalloc();
|
||||
if (cisreal(c)) {
|
||||
@@ -522,7 +523,7 @@ c_divq(COMPLEX *c, NUMBER *q)
|
||||
|
||||
if (qiszero(q)) {
|
||||
math_error("Division by zero");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (qisone(q))
|
||||
return clink(c);
|
||||
@@ -605,7 +606,7 @@ comalloc(void)
|
||||
r = (COMPLEX *) malloc(sizeof(COMPLEX));
|
||||
if (r == NULL) {
|
||||
math_error("Cannot allocate complex number");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
r->links = 1;
|
||||
r->real = qlink(&_qzero_);
|
||||
|
196
config.c
196
config.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* config - configuration routines
|
||||
*
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2021,2022 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -62,6 +62,7 @@
|
||||
#endif /* HAVE_STRDUP */
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -149,8 +150,8 @@ CONFIG oldstd = { /* backward compatible standard configuration */
|
||||
SQ_ALG2, /* size of number to use square alg 2 */
|
||||
POW_ALG2, /* size of modulus to use REDC for powers */
|
||||
REDC_ALG2, /* size of modulus to use REDC algorithm 2 */
|
||||
TRUE, /* ok to print a tilde on approximations */
|
||||
TRUE, /* ok to print tab before numeric values */
|
||||
TRUE, /* OK to print a tilde on approximations */
|
||||
TRUE, /* OK to print tab before numeric values */
|
||||
0, /* quomod() default rounding mode */
|
||||
2, /* quotient // default rounding mode */
|
||||
0, /* mod % default rounding mode */
|
||||
@@ -160,8 +161,8 @@ CONFIG oldstd = { /* backward compatible standard configuration */
|
||||
8, /* cfsim() default rounding mode */
|
||||
2, /* output default rounding mode */
|
||||
24, /* round()/bround() default rounding mode */
|
||||
FALSE, /* ok to print leading 0 before decimal pt */
|
||||
0, /* ok to print trailing 0's */
|
||||
FALSE, /* OK to print leading 0 before decimal pt */
|
||||
0, /* OK to print trailing 0's */
|
||||
MAXSCANCOUNT, /* max scan errors before abort */
|
||||
PROMPT1, /* normal prompt */
|
||||
PROMPT2, /* prompt when inside multi-line input */
|
||||
@@ -176,10 +177,10 @@ CONFIG oldstd = { /* backward compatible standard configuration */
|
||||
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
||||
NULL, /* our name */
|
||||
NULL, /* basename of our name */
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
TRUE, /* running under windows */
|
||||
#else
|
||||
FALSE, /* congrats, you are not using windows */
|
||||
FALSE, /* not using windows */
|
||||
#endif
|
||||
#if defined(__CYGWIN__)
|
||||
TRUE, /* compiled under cygwin */
|
||||
@@ -209,8 +210,8 @@ CONFIG newstd = { /* new non-backward compatible configuration */
|
||||
SQ_ALG2, /* size of number to use square alg 2 */
|
||||
POW_ALG2, /* size of modulus to use REDC for powers */
|
||||
REDC_ALG2, /* size of modulus to use REDC algorithm 2 */
|
||||
TRUE, /* ok to print a tilde on approximations */
|
||||
TRUE, /* ok to print tab before numeric values */
|
||||
TRUE, /* OK to print a tilde on approximations */
|
||||
TRUE, /* OK to print tab before numeric values */
|
||||
0, /* quomod() default rounding mode */
|
||||
2, /* quotient // default rounding mode */
|
||||
0, /* mod % default rounding mode */
|
||||
@@ -220,8 +221,8 @@ CONFIG newstd = { /* new non-backward compatible configuration */
|
||||
8, /* cfsim() default rounding mode */
|
||||
24, /* output default rounding mode */
|
||||
24, /* round()/bround() default rounding mode */
|
||||
TRUE, /* ok to print leading 0 before decimal pt */
|
||||
0, /* ok to print trailing 0's */
|
||||
TRUE, /* OK to print leading 0 before decimal pt */
|
||||
0, /* OK to print trailing 0's */
|
||||
MAXSCANCOUNT, /* max scan errors before abort */
|
||||
"; ", /* normal prompt */
|
||||
";; ", /* prompt when inside multi-line input */
|
||||
@@ -236,10 +237,10 @@ CONFIG newstd = { /* new non-backward compatible configuration */
|
||||
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
||||
NULL, /* our name */
|
||||
NULL, /* basename of our name */
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
TRUE, /* running under windows */
|
||||
#else
|
||||
FALSE, /* congrats, you are not using windows */
|
||||
FALSE, /* not using windows */
|
||||
#endif
|
||||
#if defined(__CYGWIN__)
|
||||
TRUE, /* compiled under cygwin */
|
||||
@@ -488,11 +489,11 @@ setconfig(int type, VALUE *vp)
|
||||
newconf = &newstd;
|
||||
} else {
|
||||
math_error("CONFIG alias not oldstd or newstd");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
} else if (vp->v_type != V_CONFIG) {
|
||||
math_error("non-CONFIG for all");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
} else {
|
||||
newconf = vp->v_config;
|
||||
}
|
||||
@@ -507,14 +508,14 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_TRACE:
|
||||
if (vp->v_type != V_NUM) {
|
||||
math_error("Non-numeric for trace");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
q = vp->v_num;
|
||||
temp = qtoi(q);
|
||||
if (qisfrac(q) || !zistiny(q->num) ||
|
||||
((unsigned long) temp > TRACE_MAX)) {
|
||||
math_error("Bad trace value");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->traceflags = (FLAG)temp;
|
||||
break;
|
||||
@@ -522,7 +523,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_DISPLAY:
|
||||
if (getlen(vp, &len)) {
|
||||
math_error("Bad value for display");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
math_setdigits(len);
|
||||
break;
|
||||
@@ -530,12 +531,12 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_MODE:
|
||||
if (vp->v_type != V_STR) {
|
||||
math_error("Non-string for mode");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
temp = lookup_long(modes, vp->v_str->s_str);
|
||||
if (temp < 0) {
|
||||
math_error("Unknown mode \"%s\"", vp->v_str->s_str);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
math_setmode((int) temp);
|
||||
break;
|
||||
@@ -543,12 +544,12 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_MODE2:
|
||||
if (vp->v_type != V_STR) {
|
||||
math_error("Non-string for mode");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
temp = lookup_long(modes, vp->v_str->s_str);
|
||||
if (temp < 0) {
|
||||
math_error("Unknown mode \"%s\"", vp->v_str->s_str);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
math_setmode2((int) temp);
|
||||
break;
|
||||
@@ -556,7 +557,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_EPSILON:
|
||||
if (vp->v_type != V_NUM) {
|
||||
math_error("Non-numeric for epsilon");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
setepsilon(vp->v_num);
|
||||
break;
|
||||
@@ -564,7 +565,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_MAXPRINT:
|
||||
if (getlen(vp, &len)) {
|
||||
math_error("Bad value for maxprint");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->maxprint = len;
|
||||
break;
|
||||
@@ -572,7 +573,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_MUL2:
|
||||
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||
math_error("Bad value for mul2");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (len == 0)
|
||||
len = MUL_ALG2;
|
||||
@@ -582,7 +583,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_SQ2:
|
||||
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||
math_error("Bad value for sq2");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (len == 0)
|
||||
len = SQ_ALG2;
|
||||
@@ -592,7 +593,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_POW2:
|
||||
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||
math_error("Bad value for pow2");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (len == 0)
|
||||
len = POW_ALG2;
|
||||
@@ -602,7 +603,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_REDC2:
|
||||
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||
math_error("Bad value for redc2");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (len == 0)
|
||||
len = REDC_ALG2;
|
||||
@@ -617,7 +618,7 @@ setconfig(int type, VALUE *vp)
|
||||
temp = lookup_long(truth, vp->v_str->s_str);
|
||||
if (temp < 0) {
|
||||
math_error("Illegal truth value for tilde");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->tilde_ok = (int)temp;
|
||||
}
|
||||
@@ -631,7 +632,7 @@ setconfig(int type, VALUE *vp)
|
||||
temp = lookup_long(truth, vp->v_str->s_str);
|
||||
if (temp < 0) {
|
||||
math_error("Illegal truth value for tab");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->tab_ok = (int)temp;
|
||||
}
|
||||
@@ -640,7 +641,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_QUOMOD:
|
||||
if (getlen(vp, &len)) {
|
||||
math_error("Illegal value for quomod");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->quomod = len;
|
||||
break;
|
||||
@@ -648,7 +649,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_QUO:
|
||||
if (getlen(vp, &len)) {
|
||||
math_error("Illegal value for quo");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->quo = len;
|
||||
break;
|
||||
@@ -656,7 +657,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_MOD:
|
||||
if (getlen(vp, &len)) {
|
||||
math_error("Illegal value for mod");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->mod = len;
|
||||
break;
|
||||
@@ -664,7 +665,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_SQRT:
|
||||
if (getlen(vp, &len)) {
|
||||
math_error("Illegal value for sqrt");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->sqrt = len;
|
||||
break;
|
||||
@@ -672,7 +673,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_APPR:
|
||||
if (getlen(vp, &len)) {
|
||||
math_error("Illegal value for appr");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->appr = len;
|
||||
break;
|
||||
@@ -680,7 +681,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_CFAPPR:
|
||||
if (getlen(vp, &len)) {
|
||||
math_error("Illegal value for cfappr");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->cfappr = len;
|
||||
break;
|
||||
@@ -688,7 +689,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_CFSIM:
|
||||
if (getlen(vp, &len)) {
|
||||
math_error("Illegal value for cfsim");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->cfsim = len;
|
||||
break;
|
||||
@@ -696,7 +697,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_OUTROUND:
|
||||
if (getlen(vp, &len)) {
|
||||
math_error("Illegal value for outround");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->outround = len;
|
||||
break;
|
||||
@@ -704,7 +705,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_ROUND:
|
||||
if (getlen(vp, &len)) {
|
||||
math_error("Illegal value for round");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->round = len;
|
||||
break;
|
||||
@@ -715,10 +716,9 @@ setconfig(int type, VALUE *vp)
|
||||
conf->leadzero = !qiszero(q);
|
||||
} else if (vp->v_type == V_STR) {
|
||||
temp = lookup_long(truth, vp->v_str->s_str);
|
||||
if (temp < 0) { {
|
||||
if (temp < 0) {
|
||||
math_error("Illegal truth value for leadzero");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
not_reached();
|
||||
}
|
||||
conf->leadzero = (int)temp;
|
||||
}
|
||||
@@ -732,7 +732,7 @@ setconfig(int type, VALUE *vp)
|
||||
temp = lookup_long(truth, vp->v_str->s_str);
|
||||
if (temp < 0) { {
|
||||
math_error("Illegal truth value for fullzero");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
}
|
||||
conf->fullzero = (int)temp;
|
||||
@@ -742,7 +742,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_MAXSCAN:
|
||||
if (vp->v_type != V_NUM) {
|
||||
math_error("Non-numeric for maxscancount");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
q = vp->v_num;
|
||||
temp = qtoi(q);
|
||||
@@ -750,7 +750,7 @@ setconfig(int type, VALUE *vp)
|
||||
temp = -1;
|
||||
if (temp < 0) {
|
||||
math_error("Maxscan value is out of range");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->maxscancount = temp;
|
||||
break;
|
||||
@@ -758,12 +758,12 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_PROMPT:
|
||||
if (vp->v_type != V_STR) {
|
||||
math_error("Non-string for prompt");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
p = (char *)malloc(vp->v_str->s_len + 1);
|
||||
if (p == NULL) {
|
||||
math_error("Cannot duplicate new prompt");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
strlcpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||
free(conf->prompt1);
|
||||
@@ -773,12 +773,12 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_MORE:
|
||||
if (vp->v_type != V_STR) {
|
||||
math_error("Non-string for more prompt");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
p = (char *)malloc(vp->v_str->s_len + 1);
|
||||
if (p == NULL) {
|
||||
math_error("Cannot duplicate new more prompt");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
strlcpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||
free(conf->prompt2);
|
||||
@@ -788,7 +788,7 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_BLKMAXPRINT:
|
||||
if (vp->v_type != V_NUM) {
|
||||
math_error("Non-numeric for blkmaxprint");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
q = vp->v_num;
|
||||
temp = qtoi(q);
|
||||
@@ -796,7 +796,7 @@ setconfig(int type, VALUE *vp)
|
||||
temp = -1;
|
||||
if (temp < 0) {
|
||||
math_error("Blkmaxprint value is out of range");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->blkmaxprint = temp;
|
||||
break;
|
||||
@@ -809,7 +809,7 @@ setconfig(int type, VALUE *vp)
|
||||
temp = lookup_long(truth, vp->v_str->s_str);
|
||||
if (temp < 0) {
|
||||
math_error("Illegal truth value for blkverbose");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->blkverbose = (int)temp;
|
||||
}
|
||||
@@ -818,13 +818,13 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_BLKBASE:
|
||||
if (vp->v_type != V_STR) {
|
||||
math_error("Non-string for blkbase");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
temp = lookup_long(blk_base, vp->v_str->s_str);
|
||||
if (temp < 0) {
|
||||
math_error("Unknown mode \"%s\" for blkbase",
|
||||
vp->v_str->s_str);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->blkbase = temp;
|
||||
break;
|
||||
@@ -832,13 +832,13 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_BLKFMT:
|
||||
if (vp->v_type != V_STR) {
|
||||
math_error("Non-string for blkfmt");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
temp = lookup_long(blk_fmt, vp->v_str->s_str);
|
||||
if (temp < 0) {
|
||||
math_error("Unknown mode \"%s\" for blkfmt",
|
||||
vp->v_str->s_str);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->blkfmt = temp;
|
||||
break;
|
||||
@@ -846,13 +846,13 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_CALC_DEBUG:
|
||||
if (vp->v_type != V_NUM) {
|
||||
math_error("Non numeric for calc_debug");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
q = vp->v_num;
|
||||
temp = qtoi(q);
|
||||
if (qisfrac(q) || !zistiny(q->num)) {
|
||||
math_error("Illegal calc_debug parameter value");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->calc_debug = temp;
|
||||
break;
|
||||
@@ -860,13 +860,13 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_RESOURCE_DEBUG:
|
||||
if (vp->v_type != V_NUM) {
|
||||
math_error("Non numeric for resource_debug");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
q = vp->v_num;
|
||||
temp = qtoi(q);
|
||||
if (qisfrac(q) || !zistiny(q->num)) {
|
||||
math_error("Illegal resource_debug parameter value");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->resource_debug = temp;
|
||||
break;
|
||||
@@ -874,13 +874,13 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_USER_DEBUG:
|
||||
if (vp->v_type != V_NUM) {
|
||||
math_error("Non numeric for user_debug");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
q = vp->v_num;
|
||||
temp = qtoi(q);
|
||||
if (qisfrac(q) || !zistiny(q->num)) {
|
||||
math_error("Illegal user_debug parameter value");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->user_debug = temp;
|
||||
break;
|
||||
@@ -894,7 +894,7 @@ setconfig(int type, VALUE *vp)
|
||||
if (temp < 0) {
|
||||
math_error("Illegal truth value "
|
||||
"for verbose_quit");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->verbose_quit = (int)temp;
|
||||
}
|
||||
@@ -903,56 +903,56 @@ setconfig(int type, VALUE *vp)
|
||||
case CONFIG_CTRL_D:
|
||||
if (vp->v_type != V_STR) {
|
||||
math_error("Non-string for ctrl_d");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
temp = lookup_long(ctrl_d, vp->v_str->s_str);
|
||||
if (temp < 0) {
|
||||
math_error("Unknown mode \"%s\" for ctrl_d",
|
||||
vp->v_str->s_str);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->ctrl_d = temp;
|
||||
break;
|
||||
|
||||
case CONFIG_PROGRAM:
|
||||
math_error("The program config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
not_reached();
|
||||
break;
|
||||
|
||||
case CONFIG_BASENAME:
|
||||
math_error("The basename config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
not_reached();
|
||||
break;
|
||||
|
||||
case CONFIG_WINDOWS:
|
||||
math_error("The windows config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
not_reached();
|
||||
break;
|
||||
|
||||
case CONFIG_CYGWIN:
|
||||
math_error("The cygwin config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
not_reached();
|
||||
break;
|
||||
|
||||
case CONFIG_COMPILE_CUSTOM:
|
||||
math_error("The custom config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
not_reached();
|
||||
break;
|
||||
|
||||
case CONFIG_ALLOW_CUSTOM:
|
||||
math_error("The allow_custom config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
not_reached();
|
||||
break;
|
||||
|
||||
case CONFIG_VERSION:
|
||||
math_error("The version config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
not_reached();
|
||||
break;
|
||||
|
||||
case CONFIG_BASEB:
|
||||
math_error("The baseb config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
not_reached();
|
||||
break;
|
||||
|
||||
case CONFIG_REDECL_WARN:
|
||||
if (vp->v_type == V_NUM) {
|
||||
@@ -963,7 +963,7 @@ setconfig(int type, VALUE *vp)
|
||||
if (temp < 0) {
|
||||
math_error("Illegal truth value for "
|
||||
"redecl_warn");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->redecl_warn = (int)temp;
|
||||
}
|
||||
@@ -978,7 +978,7 @@ setconfig(int type, VALUE *vp)
|
||||
if (temp < 0) {
|
||||
math_error("Illegal truth value for "
|
||||
"dupvar_warn");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
conf->dupvar_warn = (int)temp;
|
||||
}
|
||||
@@ -986,13 +986,13 @@ setconfig(int type, VALUE *vp)
|
||||
|
||||
case CONFIG_HZ:
|
||||
math_error("The clock tick rate config parameter is read-only");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
not_reached();
|
||||
break;
|
||||
|
||||
default:
|
||||
math_error("Setting illegal config parameter");
|
||||
/*NOTREACHED*/
|
||||
abort();
|
||||
not_reached();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1017,7 +1017,7 @@ config_copy(CONFIG *src)
|
||||
if (src == NULL || src->epsilon == NULL || src->prompt1 == NULL ||
|
||||
src->prompt2 == NULL) {
|
||||
math_error("bad CONFIG value");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1026,7 +1026,7 @@ config_copy(CONFIG *src)
|
||||
dest = (CONFIG *)malloc(sizeof(CONFIG));
|
||||
if (dest == NULL) {
|
||||
math_error("malloc of CONFIG failed");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1134,7 +1134,7 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
if (cfg == NULL || cfg->epsilon == NULL || cfg->prompt1 == NULL ||
|
||||
cfg->prompt2 == NULL) {
|
||||
math_error("bad CONFIG value");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1161,7 +1161,7 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
p = lookup_name(modes, cfg->outmode);
|
||||
if (p == NULL) {
|
||||
math_error("invalid output mode: %d", cfg->outmode);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
vp->v_str = makenewstring(p);
|
||||
return;
|
||||
@@ -1172,7 +1172,7 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
if (p == NULL) {
|
||||
math_error("invalid secondary output mode: %d",
|
||||
cfg->outmode2);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
vp->v_str = makenewstring(p);
|
||||
return;
|
||||
@@ -1280,7 +1280,7 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
p = lookup_name(blk_base, cfg->blkbase);
|
||||
if (p == NULL) {
|
||||
math_error("invalid block base: %d", cfg->blkbase);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
vp->v_str = makenewstring(p);
|
||||
return;
|
||||
@@ -1290,7 +1290,7 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
p = lookup_name(blk_fmt, cfg->blkfmt);
|
||||
if (p == NULL) {
|
||||
math_error("invalid block format: %d", cfg->blkfmt);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
vp->v_str = makenewstring(p);
|
||||
return;
|
||||
@@ -1316,7 +1316,7 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
p = lookup_name(ctrl_d, cfg->ctrl_d);
|
||||
if (p == NULL) {
|
||||
math_error("invalid Control-D: %d", cfg->ctrl_d);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
vp->v_str = makenewstring(p);
|
||||
return;
|
||||
@@ -1386,7 +1386,7 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
|
||||
default:
|
||||
math_error("Getting illegal CONFIG element");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1416,12 +1416,12 @@ config_cmp(CONFIG *cfg1, CONFIG *cfg2)
|
||||
if (cfg1 == NULL || cfg1->epsilon == NULL || cfg1->prompt1 == NULL ||
|
||||
cfg1->prompt2 == NULL) {
|
||||
math_error("CONFIG #1 value is invalid");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (cfg2 == NULL || cfg2->epsilon == NULL || cfg2->prompt1 == NULL ||
|
||||
cfg2->prompt2 == NULL) {
|
||||
math_error("CONFIG #2 value is invalid");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
|
8
config.h
8
config.h
@@ -130,8 +130,8 @@ struct config {
|
||||
LEN sq2; /* size of number to use square algorithm 2 */
|
||||
LEN pow2; /* size of modulus to use REDC for powers */
|
||||
LEN redc2; /* size of modulus to use REDC algorithm 2 */
|
||||
BOOL tilde_ok; /* ok to print a tilde on approximations */
|
||||
BOOL tab_ok; /* ok to print tab before numeric values */
|
||||
BOOL tilde_ok; /* OK to print a tilde on approximations */
|
||||
BOOL tab_ok; /* OK to print tab before numeric values */
|
||||
LEN quomod; /* quomod() default rounding mode */
|
||||
LEN quo; /* quotient // default rounding mode */
|
||||
LEN mod; /* mod % default rounding mode */
|
||||
@@ -141,8 +141,8 @@ struct config {
|
||||
LEN cfsim; /* cfsim() default rounding mode */
|
||||
LEN outround; /* output default rounding mode */
|
||||
LEN round; /* round()/bround() default rounding mode */
|
||||
BOOL leadzero; /* ok to print leading 0 before decimal pt */
|
||||
BOOL fullzero; /* ok to print trailing 0's */
|
||||
BOOL leadzero; /* OK to print leading 0 before decimal pt */
|
||||
BOOL fullzero; /* OK to print trailing 0's */
|
||||
long maxscancount; /* max scan errors before abort */
|
||||
char *prompt1; /* normal prompt */
|
||||
char *prompt2; /* prompt when inside multi-line input */
|
||||
|
15
const.c
15
const.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* const - constant number storage module
|
||||
*
|
||||
* Copyright (C) 1999-2007,2021 David I. Bell
|
||||
* Copyright (C) 1999-2007,2021,2022 David I. Bell
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "qmath.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -47,7 +48,7 @@ initconstants(void)
|
||||
consttable = (NUMBER **) calloc(sizeof(NUMBER *), CONSTALLOCSIZE);
|
||||
if (consttable == NULL) {
|
||||
math_error("Unable to allocate constant table");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
for (i = 0; initnumbs[i] != NULL; i++) {
|
||||
consttable[i] = initnumbs[i];
|
||||
@@ -108,7 +109,7 @@ addqconstant(NUMBER *q)
|
||||
sizeof(NUMBER *) * (constcount + CONSTALLOCSIZE));
|
||||
if (tp == NULL) {
|
||||
math_error("Unable to reallocate const table");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
consttable = tp;
|
||||
constavail = CONSTALLOCSIZE;
|
||||
@@ -179,11 +180,11 @@ constvalue(unsigned long index)
|
||||
{
|
||||
if (index >= constcount) {
|
||||
math_error("Bad index value for constvalue");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (consttable[index]->links == 0) {
|
||||
math_error("Constvalue has been freed!!!");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
return consttable[index];
|
||||
}
|
||||
@@ -196,12 +197,12 @@ freeconstant(unsigned long index)
|
||||
|
||||
if (index >= constcount) {
|
||||
math_error("Bad index value for freeconst");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
q = consttable[index];
|
||||
if (q->links == 0) {
|
||||
math_error("Attempting to free freed const location");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
qfree(q);
|
||||
if (index == constcount - 1) {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# cscript - makefile for calc shell script files
|
||||
#
|
||||
# Copyright (C) 1999-2006,2014,2017,2021 Landon Curt Noll
|
||||
# Copyright (C) 1999-2006,2014,2017,2021,2022 Landon Curt Noll
|
||||
#
|
||||
# SRC: cscript/Makefile
|
||||
#
|
||||
@@ -47,14 +47,18 @@
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point where is cannot be depended on.
|
||||
# On such systems, the zsh may be a much better alternative
|
||||
# On such systems, the sh 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
|
||||
SHELL= /bin/bash
|
||||
#SHELL= /bin/sh
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
ifeq ($(target),Darwin)
|
||||
SHELL:= /bin/zsh
|
||||
endif
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
|
||||
|
||||
####
|
||||
@@ -101,15 +105,6 @@ PREFIX= /usr/local
|
||||
#
|
||||
MAKE_FILE= Makefile
|
||||
|
||||
# Controlling file makefile basename (without the path)
|
||||
#
|
||||
# This is the basename same of the makefile that may/does/will drive
|
||||
# this makefile.
|
||||
#
|
||||
# If in doubt, set TOP_MAKE_FILE to Makefile
|
||||
#
|
||||
TOP_MAKE_FILE= Makefile
|
||||
|
||||
# Where the system include (.h) files are kept
|
||||
#
|
||||
# For DJGPP, select:
|
||||
@@ -219,10 +214,10 @@ T=
|
||||
# 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= >/dev/null 2>&1 silence ${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= 2>/dev/null silence command stderr during hsrc file formation
|
||||
# E= full command stderr during hsrc file formation
|
||||
#
|
||||
# V=@: do not echo debug statements (quiet mode)
|
||||
@@ -302,11 +297,17 @@ CALCLIBLIST=
|
||||
#
|
||||
CSCRIPT_TARGETS= ${SCRIPT}
|
||||
TARGETS= ${CSCRIPT_TARGETS} README
|
||||
#
|
||||
# rules that are not also names of files
|
||||
#
|
||||
PHONY= all clobber distlist install
|
||||
|
||||
# The reason for this Makefile
|
||||
#
|
||||
all: ${TARGETS} .all
|
||||
|
||||
.PHONY: ${PHONY}
|
||||
|
||||
README: README.src
|
||||
@${RM} -f $@
|
||||
@${SED} -e "s:#!/usr/local/src/bin/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||
|
@@ -92,7 +92,7 @@ if (base_lim <= 2^20+1) { /* 2^20 requires ~96 Megs of memory */
|
||||
}
|
||||
|
||||
/*
|
||||
* remove nestest powers
|
||||
* remove nearest powers
|
||||
*/
|
||||
while (abs(x) >= base_lim) {
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -p -f
|
||||
/*
|
||||
* sqaure - print the squares of input values
|
||||
* square - print the squares of input values
|
||||
*
|
||||
* Copyright (C) 2000-2007,2014,2019,2021 Ernest Bowen
|
||||
*
|
||||
|
9
custom.c
9
custom.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* custom - interface for custom software and hardware interfaces
|
||||
*
|
||||
* Copyright (C) 1999-2006,2018,2021 Landon Curt Noll
|
||||
* Copyright (C) 1999-2006,2018,2021,2022 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
|
||||
@@ -48,6 +48,7 @@
|
||||
#endif /* CUSTOM */
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -77,12 +78,12 @@ custom(char *name, int count, VALUE **vals)
|
||||
if (count < p->minargs) {
|
||||
math_error("Too few arguments for custom "
|
||||
"function \"%s\"", p->name);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (count > p->maxargs) {
|
||||
math_error("Too many arguments for custom "
|
||||
"function \"%s\"", p->name);
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/* call the custom function */
|
||||
@@ -200,7 +201,7 @@ customhelp(char *name)
|
||||
customname = (char *)malloc(snprintf_len+1);
|
||||
if (customname == NULL) {
|
||||
math_error("bad malloc of customname");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
snprintf(customname, snprintf_len, "custhelp/%s", name);
|
||||
customname[snprintf_len] = '\0'; /* paranoia */
|
||||
|
@@ -4,7 +4,7 @@ Custom calc resource files
|
||||
The following custom calc resource files are provided because they serve
|
||||
as examples of how use the custom interface. The custom interface
|
||||
allows for machine dependent and/or non-portable code to be added as
|
||||
builtins to the calc program. A few example custom functions and
|
||||
built-ins to the calc program. A few example custom functions and
|
||||
resource files are shipped with calc to provide you with examples.
|
||||
|
||||
By default, the custom builtin returns an error. Calc have been
|
||||
@@ -41,7 +41,7 @@ pzasusb8.cal
|
||||
Run custom("pzasusb8") on a standard set of data, print Endian
|
||||
related information and print value size information.
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
814
custom/Makefile
814
custom/Makefile
File diff suppressed because it is too large
Load Diff
@@ -1,588 +0,0 @@
|
||||
#!/bin/make
|
||||
#
|
||||
# custom - makefile for calc custom routines
|
||||
#
|
||||
# Copyright (C) 1999-2006,2014,2017-2018,2021 Landon Curt Noll
|
||||
#
|
||||
# SRC: custom/Makefile.head
|
||||
#
|
||||
# The "# SRC: ... - ..." comment line above indicates
|
||||
# the origin of this file.
|
||||
#
|
||||
# IMPORTANT: Please see the section on Makefiles near the
|
||||
# bottom of the HOWTO.INSTALL file.
|
||||
#
|
||||
# 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 02:28:54
|
||||
# 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/
|
||||
#
|
||||
# calculator by David I. Bell with help/mods from others
|
||||
# Makefile by Landon Curt Noll
|
||||
|
||||
####################################################
|
||||
# NOTE: Start of section from custom/Makefile.head #
|
||||
####################################################
|
||||
|
||||
#.###############################################################.#
|
||||
#.# #.#
|
||||
#.# WARNING: This Makefile is generated from a combination of #.#
|
||||
#.# custom/Makefile.head, Makefile.ship, and #.#
|
||||
#.# custom/Makefile.tail. We recommend that you NOT #.#
|
||||
#.# edit this file, but instead edit the proper source #.#
|
||||
#.# file and then make custom/Makefile: #.#
|
||||
#.# #.#
|
||||
#.# make custom/Makefile #.#
|
||||
#.# #.#
|
||||
#.# See the '# NOTE .. section from ..' lines for #.#
|
||||
#.# where the source file for the lines are from. #.#
|
||||
#.# #.#
|
||||
#.###############################################################.#
|
||||
|
||||
|
||||
# The shell used by this Makefile
|
||||
#
|
||||
# On some systems, /bin/sh is a rather reduced shell with
|
||||
# deprecated behavior.
|
||||
#
|
||||
# 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 where 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
|
||||
|
||||
|
||||
# PREFIX - Top level location for calc
|
||||
#
|
||||
# The PREFIX is often prepended to paths within calc and calc Makefiles.
|
||||
#
|
||||
# Starting with calc v2.13.0.1, nearly all Makefile places that used
|
||||
# /usr/local now use ${PREFIX}. An exception is the olduninstall rule
|
||||
# and, of course, this section. :-)
|
||||
#
|
||||
# NOTE: The ${PREFIX} is not the same as ${T}. The ${T} specifies
|
||||
# a top level directory under which calc installs things.
|
||||
# While usually ${T} is empty, it can be specific path
|
||||
# as if calc where "chrooted" during an install.
|
||||
# The ${PREFIX} value, during install, is a path between
|
||||
# the top level ${T} install directory and the object
|
||||
# such as an include file.
|
||||
#
|
||||
# NOTE: See also, ${T}, below.
|
||||
#
|
||||
# There are some paths that do NOT call under ${PREFIX}, such as
|
||||
# ${CALCPATH}, that include paths not under ${PREFIX}, but those
|
||||
# too are exceptions to this general rule.
|
||||
#
|
||||
# When in doubt, try:
|
||||
#
|
||||
# PREFIX= /usr/local
|
||||
#
|
||||
PREFIX= /usr/local
|
||||
#PREFIX= /usr
|
||||
#PREFIX= /usr/global
|
||||
|
||||
|
||||
# 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.
|
||||
#
|
||||
CCBAN= -UUNBAN
|
||||
#CCBAN= -DUNBAN
|
||||
|
||||
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
|
||||
# Unfortunately due to the complex dependency issues between
|
||||
# Makefile, Makefile.ship and custom/Makefile, parallel GNU make
|
||||
# is NOT recommended. Sorry.
|
||||
#
|
||||
.NOTPARALLEL:
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=-=-=- Identify the target machine, if possible -=-=-=-=-=-=-=-=-#
|
||||
##############################################################################
|
||||
|
||||
# NOTE: You can force a target value by defining target as in:
|
||||
#
|
||||
# make ...__optional_arguments_... target=value
|
||||
|
||||
# Try uname -s if the target was not already set on the make command line
|
||||
#
|
||||
ifeq ($(target),)
|
||||
target=$(shell uname -s 2>/dev/null)
|
||||
endif
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=-=-=- You may want to change some values below -=-=-=-=-=-=-=-=-#
|
||||
##############################################################################
|
||||
|
||||
# The custom calc resource files to install
|
||||
#
|
||||
# Put your custom calc resource files here.
|
||||
#
|
||||
CUSTOM_CALC_FILES= argv.cal halflen.cal pzasusb8.cal pmodm127.cal register.cal
|
||||
|
||||
# The custom help files to install
|
||||
#
|
||||
# Put your custom help files here.
|
||||
#
|
||||
CUSTOM_HELP= argv devnull help sysinfo pzasusb8 pmodm127 register
|
||||
|
||||
# Any .h files that are needed by programs that use
|
||||
# libcustcalc${LIB_EXT_VERSION}
|
||||
#
|
||||
# Put any .h files that you add which might be useful to other
|
||||
# programs here.
|
||||
#
|
||||
CUSTOM_H_SRC=
|
||||
|
||||
# Any .c files that are needed to build libcustcalc${LIB_EXT_VERSION}.
|
||||
#
|
||||
# Don't put ${REQUIRED_SRC} files in this list.
|
||||
#
|
||||
# There MUST be a .c in CUSTOM_SRC for every .o in CUSTOM_OBJ.
|
||||
#
|
||||
# Put your custom .c files here.
|
||||
#
|
||||
CUSTOM_SRC= c_argv.c c_devnull.c c_help.c c_sysinfo.c c_pzasusb8.c \
|
||||
c_pmodm127.c c_register.c
|
||||
|
||||
# Any .o files that are needed by program that use
|
||||
# libcustcalc${LIB_EXT_VERSION}.
|
||||
#
|
||||
# Don't put ${REQUIRED_OBJ} files in this list.
|
||||
#
|
||||
# There MUST be a .c in CUSTOM_SRC for every .o in CUSTOM_OBJ.
|
||||
#
|
||||
# Put your custom .o files here.
|
||||
#
|
||||
CUSTOM_OBJ= c_argv.o c_devnull.o c_help.o c_sysinfo.o c_pzasusb8.o \
|
||||
c_pmodm127.o c_register.o
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=- Defaults in case you want to build from this dir -=-=-=-=-=-=-#
|
||||
##############################################################################
|
||||
|
||||
# Normally, the upper level makefile will set these values. We provide
|
||||
# a default here just in case you want to build from this directory.
|
||||
|
||||
# Makefile debug
|
||||
#
|
||||
# Q=@ do not echo internal Makefile actions (quiet mode)
|
||||
# Q= echo internal Makefile actions (debug / verbose mode)
|
||||
#
|
||||
# H=@: do not report hsrc file formation progress
|
||||
# H=@ do echo hsrc file formation progress
|
||||
#
|
||||
# S= >/dev/null 2>&1 slience ${CC} output during hsrc file formation
|
||||
# S= full ${CC} output during hsrc file formation
|
||||
#
|
||||
# E= 2>/dev/null slience command stderr during hsrc file formation
|
||||
# E= full command stderr during hsrc file formation
|
||||
#
|
||||
# V=@: do not echo debug statements (quiet mode)
|
||||
# V=@ do echo debug statements (debug / verbose mode)
|
||||
#
|
||||
#Q=
|
||||
Q=@
|
||||
#
|
||||
S= >/dev/null 2>&1
|
||||
#S=
|
||||
#
|
||||
E= 2>/dev/null
|
||||
#E=
|
||||
#
|
||||
#H=@:
|
||||
H=@
|
||||
#
|
||||
V=@:
|
||||
#V=@
|
||||
|
||||
####
|
||||
# Normally, the upper level makefile will set these values. We provide
|
||||
# a default here just in case you want to build from this directory.
|
||||
####
|
||||
|
||||
# Where the system include (.h) files are kept
|
||||
#
|
||||
# For DJGPP, select:
|
||||
#
|
||||
# INCDIR= /dev/env/DJDIR/include
|
||||
#
|
||||
# If in doubt, set:
|
||||
#
|
||||
# INCDIR= /usr/include
|
||||
#
|
||||
|
||||
#INCDIR= ${PREFIX}/include
|
||||
#INCDIR= /dev/env/DJDIR/include
|
||||
INCDIR= /usr/include
|
||||
|
||||
# where to install calc related things
|
||||
#
|
||||
# ${BINDIR} where to install calc binary files
|
||||
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
|
||||
#
|
||||
# NOTE: The install rule prepends installation paths with ${T}, which
|
||||
# by default is empty. If ${T} is non-empty, then installation
|
||||
# locations will be relative to the ${T} directory.
|
||||
#
|
||||
# For DJGPP, select:
|
||||
#
|
||||
# BINDIR= /dev/env/DJDIR/bin
|
||||
# LIBDIR= /dev/env/DJDIR/lib
|
||||
# CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||
#
|
||||
# If in doubt, set:
|
||||
#
|
||||
# BINDIR= /usr/bin
|
||||
# LIBDIR= /usr/lib
|
||||
# CALC_SHAREDIR= /usr/share/calc
|
||||
#
|
||||
#BINDIR= ${PREFIX}/bin
|
||||
#BINDIR= /dev/env/DJDIR/bin
|
||||
BINDIR= /usr/bin
|
||||
|
||||
#LIBDIR= ${PREFIX}/lib
|
||||
#LIBDIR= /dev/env/DJDIR/lib
|
||||
LIBDIR= /usr/lib
|
||||
|
||||
#CALC_SHAREDIR= ${PREFIX}/lib/calc
|
||||
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||
CALC_SHAREDIR= /usr/share/calc
|
||||
|
||||
# By default, these values are based CALC_SHAREDIR, INCDIR, BINDIR
|
||||
# ---------------------------------------------------------------
|
||||
# ${HELPDIR} where the help directory is installed
|
||||
# ${CALC_INCDIR} where the calc include files are installed
|
||||
# ${CUSTOMCALDIR} where custom *.cal files are installed
|
||||
# ${CUSTOMHELPDIR} where custom help files are installed
|
||||
# ${CUSTOMINCDIR} where custom .h files are installed
|
||||
# ${SCRIPTDIR} where calc shell scripts are installed
|
||||
#
|
||||
# NOTE: The install rule prepends installation paths with ${T}, which
|
||||
# by default is empty. If ${T} is non-empty, then installation
|
||||
# locations will be relative to the ${T} directory.
|
||||
#
|
||||
# If in doubt, set:
|
||||
#
|
||||
# HELPDIR= ${CALC_SHAREDIR}/help
|
||||
# CALC_INCDIR= ${INCDIR}/calc
|
||||
# CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||
# CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||
# CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||
# SCRIPTDIR= ${BINDIR}/cscript
|
||||
#
|
||||
HELPDIR= ${CALC_SHAREDIR}/help
|
||||
CALC_INCDIR= ${INCDIR}/calc
|
||||
CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||
CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||
CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||
SCRIPTDIR= ${BINDIR}/cscript
|
||||
|
||||
# T - top level directory under which calc will be installed
|
||||
#
|
||||
# The calc install is performed under ${T}, the calc build is
|
||||
# performed under /. The purpose for ${T} is to allow someone
|
||||
# to install calc somewhere other than into the system area.
|
||||
#
|
||||
# For example, if:
|
||||
#
|
||||
# BINDIR= /usr/bin
|
||||
# LIBDIR= /usr/lib
|
||||
# CALC_SHAREDIR= /usr/share/calc
|
||||
#
|
||||
# and if:
|
||||
#
|
||||
# T= /var/tmp/testing
|
||||
#
|
||||
# Then the installation locations will be:
|
||||
#
|
||||
# calc binary files: /var/tmp/testing/usr/bin
|
||||
# calc link library: /var/tmp/testing/usr/lib
|
||||
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||
# ... etc ... /var/tmp/testing/...
|
||||
#
|
||||
# If ${T} is empty, calc is installed under /, which is the same
|
||||
# top of tree for which it was built. If ${T} is non-empty, then
|
||||
# calc is installed under ${T}, as if one had to chroot under
|
||||
# ${T} for calc to operate.
|
||||
#
|
||||
# If in doubt, use T=
|
||||
#
|
||||
T=
|
||||
|
||||
# Debug/Optimize options for ${CC} and ${LCC}
|
||||
#
|
||||
# Select DEBUG= -O2 -gstabs+ -DWINDOZ for DJGPP.
|
||||
#
|
||||
#DEBUG=
|
||||
#
|
||||
#DEBUG= -O
|
||||
#DEBUG= -O -g
|
||||
#DEBUG= -O -g3
|
||||
#
|
||||
#DEBUG= -O1
|
||||
#DEBUG= -O1 -g
|
||||
#DEBUG= -O1 -g3
|
||||
#
|
||||
#DEBUG= -O2
|
||||
#DEBUG= -O2 -g
|
||||
#DEBUG= -O2 -g3
|
||||
#DEBUG= -O2 -ipa
|
||||
#DEBUG= -O2 -g3 -ipa
|
||||
#
|
||||
#DEBUG= -O3
|
||||
#DEBUG= -O3 -g
|
||||
DEBUG= -O3 -g3
|
||||
#DEBUG= -O3 -ipa
|
||||
#DEBUG= -O3 -g3 -ipa
|
||||
#
|
||||
#DEBUG= -g
|
||||
#DEBUG= -g3
|
||||
#DEBUG= -gx
|
||||
#DEBUG= -WM,-g
|
||||
#
|
||||
#DEBUG= -O2 -gstabs+ -DWINDOZ
|
||||
|
||||
# Some systems require one to use ranlib to add a symbol table to
|
||||
# a *.a link library. Set RANLIB to the utility that performs this
|
||||
# action. Set RANLIB to : if your system does not need such a utility.
|
||||
#
|
||||
RANLIB=ranlib
|
||||
#RANLIB=:
|
||||
|
||||
# Normally certain files depend on the Makefile. If the Makefile is
|
||||
# changed, then certain steps should be redone. If MAKE_FILE is
|
||||
# set to Makefile, then these files will depend on Makefile. If
|
||||
# MAKE_FILE is empty, then they wont.
|
||||
#
|
||||
# If in doubt, set MAKE_FILE to Makefile
|
||||
#
|
||||
MAKE_FILE= Makefile
|
||||
#MAKE_FILE=
|
||||
|
||||
# Controlling file makefile basename (without the path)
|
||||
#
|
||||
# This is the basename same of the makefile that may/does/will drive
|
||||
# this makefile.
|
||||
#
|
||||
# If in doubt, set TOP_MAKE_FILE to Makefile
|
||||
#
|
||||
TOP_MAKE_FILE= Makefile
|
||||
|
||||
# If you do not wish to use purify, set PURIFY to an empty string.
|
||||
#
|
||||
# If in doubt, use PURIFY=
|
||||
#
|
||||
#PURIFY= purify
|
||||
#PURIFY= purify -m71-engine
|
||||
#PURIFY= purify -logfile=pure.out
|
||||
#PURIFY= purify -m71-engine -logfile=pure.out
|
||||
PURIFY=
|
||||
|
||||
# If you want to use a debugging link library such as a malloc debug link
|
||||
# library, or need to add special ld flags after the calc link libraries
|
||||
# are included, set ${LD_DEBUG} below.
|
||||
#
|
||||
# If in doubt, set LD_DEBUG to empty.
|
||||
#
|
||||
#LD_DEBUG= -lmalloc_cv
|
||||
LD_DEBUG=
|
||||
|
||||
# When doing a:
|
||||
#
|
||||
# make check
|
||||
# make chk
|
||||
# make debug
|
||||
#
|
||||
# the ${CALC_ENV} is used to supply the proper environment variables
|
||||
# to calc. Most people will simply need 'CALCPATH=./cal' to ensure
|
||||
# that these debug rules will only use calc resource files under the
|
||||
# local source directory. The longer lines (with MALLOC_VERBOSE=1 ...)
|
||||
# are useful for SGI IRIX people who have 'WorkShop Performance Tools'
|
||||
# and who also set 'LD_DEBUG= -lmalloc_cv' above.
|
||||
#
|
||||
# If in doubt, use CALC_ENV= CALCPATH=./cal.
|
||||
#
|
||||
CALC_ENV= CALCPATH=./cal
|
||||
#CALC_ENV= CALCPATH=./cal MALLOC_VERBOSE=1 MALLOC_TRACING=1 \
|
||||
# MALLOC_FASTCHK=1 MALLOC_FULLWARN=1
|
||||
#CALC_ENV= CALCPATH=./cal MALLOC_VERBOSE=1 MALLOC_TRACING=1 \
|
||||
# MALLOC_FASTCHK=1 MALLOC_FULLWARN=1 MALLOC_CLEAR_FREE=1 \
|
||||
# MALLOC_CLEAR_MALLOC=1
|
||||
|
||||
# By default, custom builtin functions may only be executed if calc
|
||||
# is given the -C option. This is because custom builtin functions
|
||||
# may invoke non-standard or non-portable code. One may completely
|
||||
# disable custom builtin functions by not compiling any of code
|
||||
#
|
||||
# ALLOW_CUSTOM= -DCUSTOM # allow custom only if -C is given
|
||||
# ALLOW_CUSTOM= # disable custom even if -C is given
|
||||
#
|
||||
# If in doubt, use ALLOW_CUSTOM= -DCUSTOM
|
||||
#
|
||||
ALLOW_CUSTOM= -DCUSTOM
|
||||
#ALLOW_CUSTOM=
|
||||
|
||||
# Some out of date operating systems require / want an executable to
|
||||
# end with a certain file extension. Some compile systems such as
|
||||
# Cygwin build calc as calc.exe. The EXT variable is used to denote
|
||||
# the extension required by such.
|
||||
#
|
||||
# EXT= # normal Un*x / Linux / GNU/Linux systems
|
||||
# EXT=.exe # windoz / Cygwin
|
||||
#
|
||||
# If in doubt, use EXT=
|
||||
#
|
||||
EXT=
|
||||
#EXT=.exe
|
||||
|
||||
# The default calc versions
|
||||
#
|
||||
VERSION= 2.14.0.9
|
||||
|
||||
# Names of shared libraries with versions
|
||||
#
|
||||
LIB_EXT= .so
|
||||
LIB_EXT_VERSION= ${LIB_EXT}.${VERSION}
|
||||
|
||||
# standard tools
|
||||
#
|
||||
AR= ar
|
||||
AWK= awk
|
||||
CHMOD= chmod
|
||||
CMP= cmp
|
||||
CO= co
|
||||
CP= cp
|
||||
FMT= fmt
|
||||
GREP= egrep
|
||||
LN= ln
|
||||
MAKE= make
|
||||
MAKEDEPEND= makedepend
|
||||
MKDIR= mkdir
|
||||
MV= mv
|
||||
RM= rm
|
||||
RMDIR= rmdir
|
||||
SED= sed
|
||||
SORT= sort
|
||||
TOUCH= touch
|
||||
TRUE= true
|
||||
|
||||
# EXTRA_CFLAGS are flags given to ${CC} when compiling C files
|
||||
# EXTRA_LDFLAGS are flags given to ${CC} when linking progs
|
||||
#
|
||||
# Both CFLAGS and LDFLAGS are left blank in this Makefile by
|
||||
# default so that users may use them on the make command line
|
||||
# to always the way that C is compiled and files are linked
|
||||
# respectively. For example:
|
||||
#
|
||||
# make all EXTRA_CFLAGS="-DMAGIC" EXTRA_LDFLAGS="-lmagic"
|
||||
#
|
||||
# NOTE: These should be left blank in this Makefile to make it
|
||||
# easier to add stuff on the command line. If you want to
|
||||
# to change the way calc is compiled by this Makefile, change
|
||||
# the appropriate host target section below or a flag above.
|
||||
#
|
||||
EXTRA_CFLAGS=
|
||||
EXTRA_LDFLAGS=
|
||||
|
||||
# COMMON_CFLAGS are the common ${CC} flags used for all progs, both
|
||||
# intermediate and final calc and calc related progs
|
||||
#
|
||||
COMMON_CFLAGS= -DCALC_SRC ${ALLOW_CUSTOM} ${CCWARN} ${CCMISC} ${EXTRA_CFLAGS}
|
||||
|
||||
# COMMON_LDFLAGS are the common flags used for linking all progs, both
|
||||
# intermediate and final calc and calc related progs
|
||||
#
|
||||
COMMON_LDFLAGS= ${EXTRA_LDFLAGS}
|
||||
|
||||
###########################################
|
||||
# Set the default compile flags for ${CC} #
|
||||
###########################################
|
||||
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
|
||||
# Required flags to compile C files for calc
|
||||
#
|
||||
# ICFLAGS are given to ${CC} for intermediate progs used to help compile calc
|
||||
# CFLAGS are given to ${CC} for calc progs other than intermediate progs
|
||||
#
|
||||
# NOTE: This does not work for: make-XYZ-only and BLD_TYPE != make-XYZ-only
|
||||
#
|
||||
ifeq ($(BLD_TYPE),calc-static-only)
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_STATIC}
|
||||
else
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_SHARE}
|
||||
endif
|
||||
CFLAGS= ${ICFLAGS} ${CCOPT}
|
||||
|
||||
# Required flags to link files for calc
|
||||
#
|
||||
# ILDFLAGS for ${CC} in linking intermediate progs used to help compile calc
|
||||
# LDFLAGS for ${CC} in linking calc progs other than intermediate progs
|
||||
#
|
||||
ILDFLAGS= ${COMMON_LDFLAGS}
|
||||
LDFLAGS= ${LD_DEBUG} ${ILDFLAGS}
|
||||
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
|
||||
##################################################
|
||||
# NOTE: End of section from custom/Makefile.head #
|
||||
##################################################
|
@@ -1,22 +1,656 @@
|
||||
#!/bin/make
|
||||
#
|
||||
# custom - makefile for calc custom routines
|
||||
#
|
||||
# Copyright (C) 1999-2006,2014,2017-2018,2021 Landon Curt Noll
|
||||
#
|
||||
# SRC: custom/Makefile.tail
|
||||
# SRC: custom/Makefile.simple - non-GNU version
|
||||
#
|
||||
# The "# SRC: ... - ..." comment line above indicates
|
||||
# the origin of this file.
|
||||
#
|
||||
# IMPORTANT: Please see the section on Makefiles near the
|
||||
# bottom of the HOWTO.INSTALL file.
|
||||
#
|
||||
# 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 02:28:54
|
||||
# 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/
|
||||
#
|
||||
# calculator by David I. Bell with help/mods from others
|
||||
# Makefile by Landon Curt Noll
|
||||
|
||||
####################################################
|
||||
# NOTE: Start of section from custom/Makefile.tail #
|
||||
####################################################
|
||||
|
||||
# The shell used by this Makefile
|
||||
#
|
||||
# On some systems, /bin/sh is a rather reduced shell with
|
||||
# deprecated behavior.
|
||||
#
|
||||
# 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 where 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/bash
|
||||
#SHELL= /bin/sh
|
||||
|
||||
|
||||
# PREFIX - Top level location for calc
|
||||
#
|
||||
# The PREFIX is often prepended to paths within calc and calc Makefiles.
|
||||
#
|
||||
# Starting with calc v2.13.0.1, nearly all Makefile places that used
|
||||
# /usr/local now use ${PREFIX}. An exception is the olduninstall rule
|
||||
# and, of course, this section. :-)
|
||||
#
|
||||
# NOTE: The ${PREFIX} is not the same as ${T}. The ${T} specifies
|
||||
# a top level directory under which calc installs things.
|
||||
# While usually ${T} is empty, it can be specific path
|
||||
# as if calc where "chrooted" during an install.
|
||||
# The ${PREFIX} value, during install, is a path between
|
||||
# the top level ${T} install directory and the object
|
||||
# such as an include file.
|
||||
#
|
||||
# NOTE: See also, ${T}, below.
|
||||
#
|
||||
# There are some paths that do NOT call under ${PREFIX}, such as
|
||||
# ${CALCPATH}, that include paths not under ${PREFIX}, but those
|
||||
# too are exceptions to this general rule.
|
||||
#
|
||||
# When in doubt, try:
|
||||
#
|
||||
# PREFIX= /usr/local
|
||||
#
|
||||
PREFIX= /usr/local
|
||||
#PREFIX= /usr
|
||||
#PREFIX= /usr/global
|
||||
|
||||
|
||||
# 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.
|
||||
#
|
||||
CCBAN= -UUNBAN
|
||||
#CCBAN= -DUNBAN
|
||||
|
||||
|
||||
|
||||
# The custom calc resource files to install
|
||||
#
|
||||
# Put your custom calc resource files here.
|
||||
#
|
||||
CUSTOM_CALC_FILES= argv.cal halflen.cal pzasusb8.cal pmodm127.cal register.cal
|
||||
|
||||
# The custom help files to install
|
||||
#
|
||||
# Put your custom help files here.
|
||||
#
|
||||
CUSTOM_HELP= argv devnull help sysinfo pzasusb8 pmodm127 register
|
||||
|
||||
# Any .h files that are needed by programs that use
|
||||
# libcustcalc${LIB_EXT_VERSION}
|
||||
#
|
||||
# Put any .h files that you add which might be useful to other
|
||||
# programs here.
|
||||
#
|
||||
CUSTOM_H_SRC=
|
||||
|
||||
# Any .c files that are needed to build libcustcalc${LIB_EXT_VERSION}.
|
||||
#
|
||||
# Don't put ${REQUIRED_SRC} files in this list.
|
||||
#
|
||||
# There MUST be a .c in CUSTOM_SRC for every .o in CUSTOM_OBJ.
|
||||
#
|
||||
# Put your custom .c files here.
|
||||
#
|
||||
CUSTOM_SRC= c_argv.c c_devnull.c c_help.c c_sysinfo.c c_pzasusb8.c \
|
||||
c_pmodm127.c c_register.c
|
||||
|
||||
# Any .o files that are needed by program that use
|
||||
# libcustcalc${LIB_EXT_VERSION}.
|
||||
#
|
||||
# Don't put ${REQUIRED_OBJ} files in this list.
|
||||
#
|
||||
# There MUST be a .c in CUSTOM_SRC for every .o in CUSTOM_OBJ.
|
||||
#
|
||||
# Put your custom .o files here.
|
||||
#
|
||||
CUSTOM_OBJ= c_argv.o c_devnull.o c_help.o c_sysinfo.o c_pzasusb8.o \
|
||||
c_pmodm127.o c_register.o
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=-=-=- Be careful if you change something below -=-=-=-=-=-=-=-=-#
|
||||
#-=-=-=-=-=-=-=-=- You may want to change some values below -=-=-=-=-=-=-=-=-#
|
||||
##############################################################################
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=- Defaults in case you want to build from this dir -=-=-=-=-=-=-#
|
||||
##############################################################################
|
||||
|
||||
# Normally, the upper level makefile will set these values. We provide
|
||||
# a default here just in case you want to build from this directory.
|
||||
|
||||
# Makefile debug
|
||||
#
|
||||
# Q=@ do not echo internal Makefile actions (quiet mode)
|
||||
# Q= echo internal Makefile actions (debug / verbose mode)
|
||||
#
|
||||
# H=@: do not report hsrc file formation progress
|
||||
# H=@ do echo hsrc file formation progress
|
||||
#
|
||||
# S= >/dev/null 2>&1 silence ${CC} output during hsrc file formation
|
||||
# S= full ${CC} output during hsrc file formation
|
||||
#
|
||||
# E= 2>/dev/null silence command stderr during hsrc file formation
|
||||
# E= full command stderr during hsrc file formation
|
||||
#
|
||||
# V=@: do not echo debug statements (quiet mode)
|
||||
# V=@ do echo debug statements (debug / verbose mode)
|
||||
#
|
||||
#Q=
|
||||
Q=@
|
||||
#
|
||||
S= >/dev/null 2>&1
|
||||
#S=
|
||||
#
|
||||
E= 2>/dev/null
|
||||
#E=
|
||||
#
|
||||
#H=@:
|
||||
H=@
|
||||
#
|
||||
V=@:
|
||||
#V=@
|
||||
|
||||
####
|
||||
# Normally, the upper level makefile will set these values. We provide
|
||||
# a default here just in case you want to build from this directory.
|
||||
####
|
||||
|
||||
# Where the system include (.h) files are kept
|
||||
#
|
||||
# For DJGPP, select:
|
||||
#
|
||||
# INCDIR= /dev/env/DJDIR/include
|
||||
#
|
||||
# If in doubt, set:
|
||||
#
|
||||
# INCDIR= /usr/include
|
||||
#
|
||||
|
||||
#INCDIR= ${PREFIX}/include
|
||||
#INCDIR= /dev/env/DJDIR/include
|
||||
INCDIR= /usr/include
|
||||
|
||||
# where to install calc related things
|
||||
#
|
||||
# ${BINDIR} where to install calc binary files
|
||||
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
|
||||
#
|
||||
# NOTE: The install rule prepends installation paths with ${T}, which
|
||||
# by default is empty. If ${T} is non-empty, then installation
|
||||
# locations will be relative to the ${T} directory.
|
||||
#
|
||||
# For DJGPP, select:
|
||||
#
|
||||
# BINDIR= /dev/env/DJDIR/bin
|
||||
# LIBDIR= /dev/env/DJDIR/lib
|
||||
# CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||
#
|
||||
# If in doubt, set:
|
||||
#
|
||||
# BINDIR= /usr/bin
|
||||
# LIBDIR= /usr/lib
|
||||
# CALC_SHAREDIR= /usr/share/calc
|
||||
#
|
||||
#BINDIR= ${PREFIX}/bin
|
||||
#BINDIR= /dev/env/DJDIR/bin
|
||||
BINDIR= /usr/bin
|
||||
|
||||
#LIBDIR= ${PREFIX}/lib
|
||||
#LIBDIR= /dev/env/DJDIR/lib
|
||||
LIBDIR= /usr/lib
|
||||
|
||||
#CALC_SHAREDIR= ${PREFIX}/lib/calc
|
||||
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||
CALC_SHAREDIR= /usr/share/calc
|
||||
|
||||
# By default, these values are based CALC_SHAREDIR, INCDIR, BINDIR
|
||||
# ---------------------------------------------------------------
|
||||
# ${HELPDIR} where the help directory is installed
|
||||
# ${CALC_INCDIR} where the calc include files are installed
|
||||
# ${CUSTOMCALDIR} where custom *.cal files are installed
|
||||
# ${CUSTOMHELPDIR} where custom help files are installed
|
||||
# ${CUSTOMINCDIR} where custom .h files are installed
|
||||
# ${SCRIPTDIR} where calc shell scripts are installed
|
||||
#
|
||||
# NOTE: The install rule prepends installation paths with ${T}, which
|
||||
# by default is empty. If ${T} is non-empty, then installation
|
||||
# locations will be relative to the ${T} directory.
|
||||
#
|
||||
# If in doubt, set:
|
||||
#
|
||||
# HELPDIR= ${CALC_SHAREDIR}/help
|
||||
# CALC_INCDIR= ${INCDIR}/calc
|
||||
# CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||
# CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||
# CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||
# SCRIPTDIR= ${BINDIR}/cscript
|
||||
#
|
||||
HELPDIR= ${CALC_SHAREDIR}/help
|
||||
CALC_INCDIR= ${INCDIR}/calc
|
||||
CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||
CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||
CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||
SCRIPTDIR= ${BINDIR}/cscript
|
||||
|
||||
# T - top level directory under which calc will be installed
|
||||
#
|
||||
# The calc install is performed under ${T}, the calc build is
|
||||
# performed under /. The purpose for ${T} is to allow someone
|
||||
# to install calc somewhere other than into the system area.
|
||||
#
|
||||
# For example, if:
|
||||
#
|
||||
# BINDIR= /usr/bin
|
||||
# LIBDIR= /usr/lib
|
||||
# CALC_SHAREDIR= /usr/share/calc
|
||||
#
|
||||
# and if:
|
||||
#
|
||||
# T= /var/tmp/testing
|
||||
#
|
||||
# Then the installation locations will be:
|
||||
#
|
||||
# calc binary files: /var/tmp/testing/usr/bin
|
||||
# calc link library: /var/tmp/testing/usr/lib
|
||||
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||
# ... etc ... /var/tmp/testing/...
|
||||
#
|
||||
# If ${T} is empty, calc is installed under /, which is the same
|
||||
# top of tree for which it was built. If ${T} is non-empty, then
|
||||
# calc is installed under ${T}, as if one had to chroot under
|
||||
# ${T} for calc to operate.
|
||||
#
|
||||
# If in doubt, use T=
|
||||
#
|
||||
T=
|
||||
|
||||
# Debug/Optimize options for ${CC} and ${LCC}
|
||||
#
|
||||
# Select DEBUG= -O2 -gstabs+ -D_WIN32 for DJGPP.
|
||||
#
|
||||
#DEBUG=
|
||||
#
|
||||
#DEBUG= -O
|
||||
#DEBUG= -O -g
|
||||
#DEBUG= -O -g3
|
||||
#
|
||||
#DEBUG= -O1
|
||||
#DEBUG= -O1 -g
|
||||
#DEBUG= -O1 -g3
|
||||
#
|
||||
#DEBUG= -O2
|
||||
#DEBUG= -O2 -g
|
||||
#DEBUG= -O2 -g3
|
||||
#DEBUG= -O2 -ipa
|
||||
#DEBUG= -O2 -g3 -ipa
|
||||
#
|
||||
#DEBUG= -O3
|
||||
#DEBUG= -O3 -g
|
||||
DEBUG= -O3 -g3
|
||||
#DEBUG= -O3 -ipa
|
||||
#DEBUG= -O3 -g3 -ipa
|
||||
#
|
||||
#DEBUG= -g
|
||||
#DEBUG= -g3
|
||||
#DEBUG= -gx
|
||||
#DEBUG= -WM,-g
|
||||
#
|
||||
#DEBUG= -O2 -gstabs+ -D_WIN32
|
||||
|
||||
# Some systems require one to use ranlib to add a symbol table to
|
||||
# a *.a link library. Set RANLIB to the utility that performs this
|
||||
# action. Set RANLIB to : if your system does not need such a utility.
|
||||
#
|
||||
RANLIB=ranlib
|
||||
#RANLIB=:
|
||||
|
||||
# Normally certain files depend on the Makefile. If the Makefile is
|
||||
# changed, then certain steps should be redone. If MAKE_FILE is
|
||||
# set to Makefile, then these files will depend on Makefile. If
|
||||
# MAKE_FILE is empty, then they wont.
|
||||
#
|
||||
# If in doubt, set MAKE_FILE to Makefile
|
||||
#
|
||||
MAKE_FILE= Makefile
|
||||
#MAKE_FILE=
|
||||
|
||||
# If you do not wish to use purify, set PURIFY to an empty string.
|
||||
#
|
||||
# If in doubt, use PURIFY=
|
||||
#
|
||||
#PURIFY= purify
|
||||
#PURIFY= purify -m71-engine
|
||||
#PURIFY= purify -logfile=pure.out
|
||||
#PURIFY= purify -m71-engine -logfile=pure.out
|
||||
PURIFY=
|
||||
|
||||
# If you want to use a debugging link library such as a malloc debug link
|
||||
# library, or need to add special ld flags after the calc link libraries
|
||||
# are included, set ${LD_DEBUG} below.
|
||||
#
|
||||
# If in doubt, set LD_DEBUG to empty.
|
||||
#
|
||||
#LD_DEBUG= -lmalloc_cv
|
||||
LD_DEBUG=
|
||||
|
||||
# When doing a:
|
||||
#
|
||||
# make check
|
||||
# make chk
|
||||
# make debug
|
||||
#
|
||||
# the ${CALC_ENV} is used to supply the proper environment variables
|
||||
# to calc. Most people will simply need 'CALCPATH=./cal' to ensure
|
||||
# that these debug rules will only use calc resource files under the
|
||||
# local source directory. The longer lines (with MALLOC_VERBOSE=1 ...)
|
||||
# are useful for SGI IRIX people who have 'WorkShop Performance Tools'
|
||||
# and who also set 'LD_DEBUG= -lmalloc_cv' above.
|
||||
#
|
||||
# If in doubt, use CALC_ENV= CALCPATH=./cal.
|
||||
#
|
||||
CALC_ENV= CALCPATH=./cal
|
||||
#CALC_ENV= CALCPATH=./cal MALLOC_VERBOSE=1 MALLOC_TRACING=1 \
|
||||
# MALLOC_FASTCHK=1 MALLOC_FULLWARN=1
|
||||
#CALC_ENV= CALCPATH=./cal MALLOC_VERBOSE=1 MALLOC_TRACING=1 \
|
||||
# MALLOC_FASTCHK=1 MALLOC_FULLWARN=1 MALLOC_CLEAR_FREE=1 \
|
||||
# MALLOC_CLEAR_MALLOC=1
|
||||
|
||||
# By default, custom builtin functions may only be executed if calc
|
||||
# is given the -C option. This is because custom builtin functions
|
||||
# may invoke non-standard or non-portable code. One may completely
|
||||
# disable custom builtin functions by not compiling any of code
|
||||
#
|
||||
# ALLOW_CUSTOM= -DCUSTOM # allow custom only if -C is given
|
||||
# ALLOW_CUSTOM= # disable custom even if -C is given
|
||||
#
|
||||
# If in doubt, use ALLOW_CUSTOM= -DCUSTOM
|
||||
#
|
||||
ALLOW_CUSTOM= -DCUSTOM
|
||||
#ALLOW_CUSTOM=
|
||||
|
||||
# Some out of date operating systems require / want an executable to
|
||||
# end with a certain file extension. Some compile systems such as
|
||||
# Cygwin build calc as calc.exe. The EXT variable is used to denote
|
||||
# the extension required by such.
|
||||
#
|
||||
# EXT= # normal Un*x / Linux / GNU/Linux systems
|
||||
# EXT=.exe # Windows / Cygwin
|
||||
#
|
||||
# If in doubt, use EXT=
|
||||
#
|
||||
EXT=
|
||||
#EXT=.exe
|
||||
|
||||
# The default calc versions
|
||||
#
|
||||
VERSION= 2.14.1.0
|
||||
|
||||
# Names of shared libraries with versions
|
||||
#
|
||||
LIB_EXT= .so
|
||||
LIB_EXT_VERSION= ${LIB_EXT}.${VERSION}
|
||||
|
||||
# standard tools
|
||||
#
|
||||
AR= ar
|
||||
AWK= awk
|
||||
CHMOD= chmod
|
||||
CMP= cmp
|
||||
CO= co
|
||||
CP= cp
|
||||
DIFF= diff
|
||||
FMT= fmt
|
||||
GREP= egrep
|
||||
LN= ln
|
||||
LS= ls
|
||||
MAKE= make
|
||||
MAKEDEPEND= makedepend
|
||||
MKDIR= mkdir
|
||||
MV= mv
|
||||
RM= rm
|
||||
RMDIR= rmdir
|
||||
SED= sed
|
||||
SORT= sort
|
||||
TAIL= tail
|
||||
TOUCH= touch
|
||||
TRUE= true
|
||||
|
||||
# EXTRA_CFLAGS are flags given to ${CC} when compiling C files
|
||||
# EXTRA_LDFLAGS are flags given to ${CC} when linking progs
|
||||
#
|
||||
# Both CFLAGS and LDFLAGS are left blank in this Makefile by
|
||||
# default so that users may use them on the make command line
|
||||
# to always the way that C is compiled and files are linked
|
||||
# respectively. For example:
|
||||
#
|
||||
# make all EXTRA_CFLAGS="-DMAGIC" EXTRA_LDFLAGS="-lmagic"
|
||||
#
|
||||
# NOTE: These should be left blank in this Makefile to make it
|
||||
# easier to add stuff on the command line. If you want to
|
||||
# to change the way calc is compiled by this Makefile, change
|
||||
# the appropriate host target section below or a flag above.
|
||||
#
|
||||
EXTRA_CFLAGS=
|
||||
EXTRA_LDFLAGS=
|
||||
|
||||
# COMMON_CFLAGS are the common ${CC} flags used for all progs, both
|
||||
# intermediate and final calc and calc related progs
|
||||
#
|
||||
COMMON_CFLAGS= -DCALC_SRC ${ALLOW_CUSTOM} ${CCWARN} ${CCMISC} ${EXTRA_CFLAGS}
|
||||
|
||||
# COMMON_LDFLAGS are the common flags used for linking all progs, both
|
||||
# intermediate and final calc and calc related progs
|
||||
#
|
||||
COMMON_LDFLAGS= ${EXTRA_LDFLAGS}
|
||||
|
||||
###########################################
|
||||
# Set the default compile flags for ${CC} #
|
||||
###########################################
|
||||
|
||||
|
||||
##########################################################################
|
||||
#=-=-=-=-=- Be careful if you change something below this line -=-=-=-=-=#
|
||||
##########################################################################
|
||||
|
||||
# include start from top Makefile - keep this line
|
||||
######################################################
|
||||
# NOTE: Start of section from the middle of Makefile #
|
||||
# #
|
||||
# These lines are shared in common with the lower #
|
||||
# custom/Makefile. That is, until the comment line #
|
||||
# that starts with '# NOTE: End of section ..' line, #
|
||||
# these Makefile lines are used in BOTH Makefiles. #
|
||||
######################################################
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=- host target section - targets that override defaults -=-=-=-=-=-#
|
||||
##############################################################################
|
||||
|
||||
# Common values set in targets
|
||||
#
|
||||
# BLD_TYPE determines if calc is built with static and/or dynamic libs.
|
||||
# Set this value to one of:
|
||||
#
|
||||
# BLD_TYPE= calc-dynamic-only
|
||||
# BLD_TYPE= calc-static-only
|
||||
#
|
||||
# CC_SHARE are flags given to ${CC} to build .o files suitable for shared libs
|
||||
# DEFAULT_LIB_INSTALL_PATH is where calc programs look for calc shared libs
|
||||
# LD_SHARE are common flags given to ${CC} to link with shared libraries
|
||||
# LIBCALC_SHLIB are flags given to ${CC} to build libcalc shared libraries
|
||||
# LIBCUSTCALC_SHLIB are flags given to ${CC} to build libcustcalc shared lib
|
||||
#
|
||||
# NOTE: The above 5 values are unused if BLD_TYPE= calc-static-only
|
||||
#
|
||||
# CC_STATIC are flags given to ${CC} to build .o files suitable for static libs
|
||||
# LD_STATIC are common flags given to ${CC} to link with static libraries
|
||||
# LIBCALC_STATIC are flags given to ${CC} to build libcalc static libraries
|
||||
# LIBCUSTCALC_STATIC are flags given to ${CC} to build libcustcalc static lib
|
||||
#
|
||||
# NOTE: The above 4 values are unused if BLD_TYPE= calc-dynamic-only
|
||||
#
|
||||
# CCOPT are flags given to ${CC} for optimization
|
||||
# CCWARN are flags given to ${CC} for warning message control
|
||||
#
|
||||
# The following are given to ${CC}:
|
||||
#
|
||||
# WNO_IMPLICT
|
||||
# WNO_ERROR_LONG_LONG
|
||||
# WNO_LONG_LONG
|
||||
#
|
||||
# when compiling special .o files that may need special compile options:
|
||||
#
|
||||
# NOTE: These flags simply turn off certain compiler warnings,
|
||||
# which is useful only when CCWERR is set to -Werror.
|
||||
#
|
||||
# NOTE: If your compiler does not have these -Wno files, just
|
||||
# set these variables to nothing as in:
|
||||
#
|
||||
# WNO_IMPLICT=
|
||||
# WNO_ERROR_LONG_LONG=
|
||||
# WNO_LONG_LONG=
|
||||
#
|
||||
# CCWERR are flags given to ${CC} to make warnings fatal errors
|
||||
# NOTE: CCWERR is only set in development Makefiles and must only be
|
||||
# used with ${CC}, not ${LCC}. If you do not want the compiler
|
||||
# to abort on warnings, then leave CCWERR blank.
|
||||
# CCMISC are misc flags given to ${CC}
|
||||
#
|
||||
# CCBAN is given to ${CC} in order to control if banned.h is in effect.
|
||||
# NOTE: See where CCBAN is defined above for details.
|
||||
#
|
||||
# LCC is how the C compiler is invoked on locally executed intermediate programs
|
||||
# CC is how the C compiler is invoked (with an optional Purify)
|
||||
#
|
||||
# Specific target overrides or modifications to default values
|
||||
|
||||
##########################################################################
|
||||
# NOTE: If your target is not supported below and the default target #
|
||||
# is not suitable for your needs, please send to the: #
|
||||
# #
|
||||
# calc-contrib at asthe dot com #
|
||||
# #
|
||||
# Email address an "ifeq ($(target),YOUR_TARGET_NAME)" ... "endif" #
|
||||
# set of lines so that we can consider them for the next release. #
|
||||
##########################################################################
|
||||
|
||||
#
|
||||
BLD_TYPE= calc-static-only
|
||||
#
|
||||
CC_SHARE= -fPIC
|
||||
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:${PREFIX}/lib
|
||||
LD_SHARE= "-Wl,-rpath,${DEFAULT_LIB_INSTALL_PATH}" \
|
||||
"-Wl,-rpath-link,${DEFAULT_LIB_INSTALL_PATH}"
|
||||
LIBCALC_SHLIB= -shared "-Wl,-soname,libcalc${LIB_EXT_VERSION}"
|
||||
LIBCUSTCALC_SHLIB= -shared "-Wl,-soname,libcustcalc${LIB_EXT_VERSION}"
|
||||
#
|
||||
CC_STATIC=
|
||||
LD_STATIC=
|
||||
LIBCALC_STATIC=
|
||||
LIBCUSTCALC_STATIC=
|
||||
#
|
||||
#CCWARN= -Wall
|
||||
CCWARN= -Wall -Wextra -pedantic
|
||||
WNO_IMPLICT= -Wno-implicit
|
||||
WNO_ERROR_LONG_LONG= -Wno-error=long-long
|
||||
WNO_LONG_LONG= -Wno-long-long
|
||||
CCWERR=
|
||||
CCOPT= ${DEBUG}
|
||||
CCMISC=
|
||||
#
|
||||
LCC= cc
|
||||
CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
# The simple makefile forces the use of static ${CC} flags
|
||||
#
|
||||
# ICFLAGS are given to ${CC} for intermediate programs used to help compile calc
|
||||
# CFLAGS are given to ${CC} for calc programs other than intermediate programs
|
||||
# ILDFLAGS for ${CC} in linking intermediate programs used to help compile calc
|
||||
# LDFLAGS for ${CC} in linking calc programs other than intermediate programs
|
||||
#
|
||||
ICFLAGS= ${COMMON_CFLAGS} ${CCBAN} ${CC_STATIC}
|
||||
CFLAGS= ${ICFLAGS} ${CCOPT}
|
||||
#
|
||||
ILDFLAGS= ${COMMON_LDFLAGS} ${LD_STATIC}
|
||||
LDFLAGS= ${LD_DEBUG} ${ILDFLAGS} ${LIBCALC_STATIC} ${LIBCUSTCALC_STATIC}
|
||||
#
|
||||
|
||||
#######################################################################
|
||||
#-=-=-=-=-=- end of target section - only make rules below -=-=-=-=-=-#
|
||||
#######################################################################
|
||||
|
||||
######################################################
|
||||
# NOTE: End of section from the middle of Makefile #
|
||||
# #
|
||||
# These lines are shared in common with the lower #
|
||||
# custom/Makefile. That is, starting with the line #
|
||||
# that starts with '# NOTE: End of section ..' line, #
|
||||
# these Makefile lines are used in BOTH Makefiles. #
|
||||
######################################################
|
||||
# include end from top Makefile - keep this line
|
||||
|
||||
# These .c files are required for the main custom interface and
|
||||
# for the custom support functions for libcustcalc${LIB_EXT_VERSION}.
|
||||
#
|
||||
@@ -57,8 +691,7 @@ H_SRC= ${CUSTOM_H_SRC}
|
||||
# directory but are installed as help files from the help/Makefile.
|
||||
#
|
||||
DISTLIST= ${CUSTCALC_SRC} ${CUSTOM_CALC_FILES} ${CUSTOM_HELP} \
|
||||
${INSTALL_H_SRC} CUSTOM_CAL HOW_TO_ADD ${MAKE_FILE}.head \
|
||||
${MAKE_FILE}.tail
|
||||
${INSTALL_H_SRC} CUSTOM_CAL HOW_TO_ADD Makefile Makefile.simple
|
||||
|
||||
# These files are used to make (but not built) a calc .a link library
|
||||
#
|
||||
@@ -78,7 +711,7 @@ TARGETS= ${BLD_TYPE} Makefile.simple
|
||||
|
||||
###
|
||||
#
|
||||
# The reason for this Makefile :-)
|
||||
# The main reason for this Makefile :-)
|
||||
#
|
||||
###
|
||||
|
||||
@@ -158,21 +791,6 @@ calcliblist: ${CALCLIBLIST}
|
||||
fi; \
|
||||
done
|
||||
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
Makefile.simple: ${MAKE_FILE}
|
||||
${V} echo '=-=-=-=-= custom/${MAKE_FILE} start of $@ rule =-=-=-=-='
|
||||
${Q} ${RM} -f $@
|
||||
${Q} ${AWK} '/^#if 0/{skp=1} {if(!skp){print $$0}} /^#endif/{skp=0}' \
|
||||
${MAKE_FILE} | \
|
||||
${GREP} -v '#\.#' | \
|
||||
${SED} -e 's;^# SRC:.*;# SRC: non-GNU Makefile via;' \
|
||||
-e 's;via$$;via ${MAKE} -f ${MAKE_FILE} custom/$@;' > $@
|
||||
${Q} echo >> $@
|
||||
${Q} echo 'Makefile.simple:' >> $@
|
||||
${Q} echo ' $${Q} if [ ! -f Makefile.simple ]; then '"\\" >> $@
|
||||
${Q} echo ' $${CP} -f $${MAKE_FILE} $$@; fi' >> $@
|
||||
${V} echo '=-=-=-=-= custom/${MAKE_FILE} end of $@ rule =-=-=-=-='
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
|
||||
##
|
||||
#
|
||||
@@ -212,8 +830,8 @@ depend:
|
||||
>> "skel/custom/$$i"; \
|
||||
echo '#endif /* '"$$tag"' */' >> "skel/custom/$$i"; \
|
||||
done
|
||||
${Q} (cd ..; ${MAKE} -f ${TOP_MAKE_FILE} hsrc)
|
||||
${MAKE} -f ../${TOP_MAKE_FILE} h_list 2>/dev/null | \
|
||||
${Q} (cd ..; ${MAKE} -f ${MAKE_FILE} hsrc)
|
||||
${MAKE} -f ../${MAKE_FILE} h_list 2>/dev/null | \
|
||||
while read i; do \
|
||||
if [ ! -f "../$$i" ]; then continue; fi; \
|
||||
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
||||
@@ -223,7 +841,7 @@ depend:
|
||||
>> "skel/$$i"; \
|
||||
echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
|
||||
done
|
||||
${Q} ${RM} -f skel/custom/makedep.out
|
||||
${Q} ${RM} -f skel/custom/makedep.out skel/custom/makedep.in
|
||||
${Q} echo custom/skel formed
|
||||
${Q} echo forming custom dependency list
|
||||
${Q} :> skel/custom/makedep.out
|
||||
@@ -231,7 +849,9 @@ depend:
|
||||
-I../../.. -w 1 -f makedep.out -- \
|
||||
${CFLAGS} -- \
|
||||
${C_SRC} 2>/dev/null
|
||||
${Q} ${SED} -e 's|: ../../|: |' -E -i '' -l skel/custom/makedep.out
|
||||
${Q} ${CP} -f skel/custom/makedep.out skel/custom/makedep.in
|
||||
${Q} ${SED} -e 's|: ../../|: |' -E < skel/custom/makedep.in | \
|
||||
${GREP} -v /usr/include > skel/custom/makedep.out
|
||||
-${Q} for i in ${C_SRC} /dev/null; do \
|
||||
if [ X"$$i" != X"/dev/null" ]; then \
|
||||
echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \
|
||||
@@ -304,9 +924,6 @@ clobber: clean
|
||||
${RM} -f libcustcalc*
|
||||
${RM} -rf skel
|
||||
${V} echo remove files that are obsolete
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
${RM} -f Makefile.simple
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
-${Q} if [ -e .DS_Store ]; then \
|
||||
echo ${RM} -rf .DS_Store; \
|
||||
${RM} -rf .DS_Store; \
|
||||
@@ -549,6 +1166,7 @@ uninstall:
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
c_argv.o: ../alloc.h
|
||||
c_argv.o: ../attribute.h
|
||||
c_argv.o: ../banned.h
|
||||
c_argv.o: ../block.h
|
||||
c_argv.o: ../byteswap.h
|
||||
@@ -576,6 +1194,7 @@ c_argv.o: ../value.h
|
||||
c_argv.o: ../zmath.h
|
||||
c_argv.o: c_argv.c
|
||||
c_devnull.o: ../alloc.h
|
||||
c_devnull.o: ../attribute.h
|
||||
c_devnull.o: ../banned.h
|
||||
c_devnull.o: ../block.h
|
||||
c_devnull.o: ../byteswap.h
|
||||
@@ -603,6 +1222,7 @@ c_devnull.o: ../value.h
|
||||
c_devnull.o: ../zmath.h
|
||||
c_devnull.o: c_devnull.c
|
||||
c_help.o: ../alloc.h
|
||||
c_help.o: ../attribute.h
|
||||
c_help.o: ../banned.h
|
||||
c_help.o: ../block.h
|
||||
c_help.o: ../byteswap.h
|
||||
@@ -630,6 +1250,7 @@ c_help.o: ../value.h
|
||||
c_help.o: ../zmath.h
|
||||
c_help.o: c_help.c
|
||||
c_pmodm127.o: ../alloc.h
|
||||
c_pmodm127.o: ../attribute.h
|
||||
c_pmodm127.o: ../banned.h
|
||||
c_pmodm127.o: ../block.h
|
||||
c_pmodm127.o: ../byteswap.h
|
||||
@@ -656,6 +1277,7 @@ c_pmodm127.o: ../value.h
|
||||
c_pmodm127.o: ../zmath.h
|
||||
c_pmodm127.o: c_pmodm127.c
|
||||
c_pzasusb8.o: ../alloc.h
|
||||
c_pzasusb8.o: ../attribute.h
|
||||
c_pzasusb8.o: ../banned.h
|
||||
c_pzasusb8.o: ../block.h
|
||||
c_pzasusb8.o: ../byteswap.h
|
||||
@@ -682,6 +1304,7 @@ c_pzasusb8.o: ../value.h
|
||||
c_pzasusb8.o: ../zmath.h
|
||||
c_pzasusb8.o: c_pzasusb8.c
|
||||
c_register.o: ../alloc.h
|
||||
c_register.o: ../attribute.h
|
||||
c_register.o: ../banned.h
|
||||
c_register.o: ../block.h
|
||||
c_register.o: ../byteswap.h
|
||||
@@ -709,6 +1332,7 @@ c_register.o: ../value.h
|
||||
c_register.o: ../zmath.h
|
||||
c_register.o: c_register.c
|
||||
c_sysinfo.o: ../alloc.h
|
||||
c_sysinfo.o: ../attribute.h
|
||||
c_sysinfo.o: ../banned.h
|
||||
c_sysinfo.o: ../block.h
|
||||
c_sysinfo.o: ../byteswap.h
|
||||
@@ -743,6 +1367,7 @@ c_sysinfo.o: ../zrand.h
|
||||
c_sysinfo.o: ../zrandom.h
|
||||
c_sysinfo.o: c_sysinfo.c
|
||||
custtbl.o: ../alloc.h
|
||||
custtbl.o: ../attribute.h
|
||||
custtbl.o: ../banned.h
|
||||
custtbl.o: ../block.h
|
||||
custtbl.o: ../byteswap.h
|
||||
@@ -767,7 +1392,3 @@ custtbl.o: ../str.h
|
||||
custtbl.o: ../value.h
|
||||
custtbl.o: ../zmath.h
|
||||
custtbl.o: custtbl.c
|
||||
|
||||
##################################################
|
||||
# NOTE: End of section from custom/Makefile.tail #
|
||||
##################################################
|
@@ -57,7 +57,7 @@ c_argv(char *UNUSED(name), int count, VALUE **vals)
|
||||
{
|
||||
VALUE result; /* what we will return */
|
||||
ZVALUE zfilelen; /* length of a file as a ZVALUE */
|
||||
NUMBER *filelen; /* pointer to length of a file as a NUMER */
|
||||
NUMBER *filelen; /* pointer to length of a file as a NUMBER */
|
||||
char *type; /* the name of the arg type */
|
||||
int i;
|
||||
|
||||
@@ -103,12 +103,12 @@ c_argv(char *UNUSED(name), int count, VALUE **vals)
|
||||
type = "assoc";
|
||||
break;
|
||||
case V_OBJ: /* address of object structure */
|
||||
type = "ocject";
|
||||
type = "object";
|
||||
break;
|
||||
case V_FILE: /* opened file id */
|
||||
type = "file";
|
||||
break;
|
||||
case V_RAND: /* address of additive 55 random state */
|
||||
case V_RAND: /* subtractive 100 random state */
|
||||
type = "rand_state";
|
||||
break;
|
||||
case V_RANDOM: /* address of Blum random state */
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_help - custom help function
|
||||
*
|
||||
* Copyright (C) 1999-2004,2021 Landon Curt Noll
|
||||
* Copyright (C) 1999-2004,2021,2022 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -70,7 +71,7 @@ c_help(char *UNUSED(name), int UNUSED(count), VALUE **vals)
|
||||
*/
|
||||
if (vals[0]->v_type != V_STR) {
|
||||
math_error("custom help arg 1 must be a string");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_pmodm127 - calculate q mod 2^(2^127-1)
|
||||
*
|
||||
* Copyright (C) 2004-2007,2021 Landon Curt Noll
|
||||
* Copyright (C) 2004-2007,2021,2022 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
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -88,15 +89,15 @@ c_pmodm127(char *UNUSED(name), int UNUSED(count), VALUE **vals)
|
||||
result.v_type = V_NULL;
|
||||
if (vals[0]->v_type != V_NUM) {
|
||||
math_error("Non-numeric argument for pmodm127");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (qisfrac(vals[0]->v_num)) {
|
||||
math_error("Non-integer argument for pmodm127");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (qisneg(vals[0]->v_num) || qiszero(vals[0]->v_num)) {
|
||||
math_error("argument for pmodm127 <= 0");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -250,7 +251,7 @@ zmod5_or_zmod(ZVALUE *zp)
|
||||
subcount++;
|
||||
if (subcount > 2) {
|
||||
math_error("Too many subtractions in zmod5_or_zmod");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
j = modlen;
|
||||
a = zp->v;
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_pzasusb8 - print numerator as a string of USB8s
|
||||
*
|
||||
* Copyright (C) 1999-2004,2021 Ernest Bowen
|
||||
* Copyright (C) 1999-2004,2021,2022 Ernest Bowen
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -67,7 +68,7 @@ c_pzasusb8(char *UNUSED(name), int UNUSED(count), VALUE **vals)
|
||||
result.v_type = V_NULL;
|
||||
if (vals[0]->v_type != V_NUM) {
|
||||
math_error("Non-real argument for pzasusb8");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_register - set or print a custom register value
|
||||
*
|
||||
* Copyright (C) 2007,2021 Landon Curt Noll
|
||||
* Copyright (C) 2007,2021,2022 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -90,24 +91,24 @@ c_register(char *UNUSED(name), int count, VALUE **vals)
|
||||
result.v_type = V_NULL;
|
||||
if (vals[0]->v_type != V_NUM) {
|
||||
math_error("Non-numeric register number");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (qisfrac(vals[0]->v_num)) {
|
||||
math_error("Non-integer register number");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (qisneg(vals[0]->v_num)) {
|
||||
math_error("register number < 0");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (! qistiny(vals[0]->v_num)) {
|
||||
math_error("register is huge");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
reg = qtoi(vals[0]->v_num);
|
||||
if (reg > CUSTOM_REG_MAX) {
|
||||
math_error("register is larger than CUSTOM_REG_MAX");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_sysinfo - names and values of selected #defines
|
||||
*
|
||||
* Copyright (C) 1999-2007,2021 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2021,2022 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -57,6 +57,7 @@
|
||||
#include "have_unused.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -208,7 +209,7 @@ STATIC struct infoname sys_info[] = {
|
||||
(FULL)SBITS},
|
||||
{"SBYTES", "size of additive or shuffle entry in bytes", NULL,
|
||||
(FULL)SBYTES},
|
||||
{"SCNT", "length of additive 55 table in FULLs", NULL,
|
||||
{"SCNT", "length of subtractive 100 table in FULLs", NULL,
|
||||
(FULL)SCNT},
|
||||
{"SEEDXORBITS", "low bits of a55 seed devoted to xor", NULL,
|
||||
(FULL)SEEDXORBITS},
|
||||
@@ -301,7 +302,7 @@ c_sysinfo(char *UNUSED(name), int count, VALUE **vals)
|
||||
qisfrac(vals[0]->v_num) ||
|
||||
zge31b(vals[0]->v_num->num)) {
|
||||
math_error("sysinfo: arg must be string, 0, 1 or 2");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -319,7 +320,7 @@ c_sysinfo(char *UNUSED(name), int count, VALUE **vals)
|
||||
break;
|
||||
default:
|
||||
math_error("sysinfo: arg must be string, 0, 1 or 2");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -368,7 +369,7 @@ c_sysinfo(char *UNUSED(name), int count, VALUE **vals)
|
||||
*/
|
||||
} else {
|
||||
math_error("sysinfo: arg must be string, 0, 1 or 2");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
|
11
decl.h
11
decl.h
@@ -52,9 +52,9 @@
|
||||
|
||||
|
||||
/*
|
||||
* MS windoz macros
|
||||
* MS Windows macros
|
||||
*/
|
||||
#elif defined(_WIN32) || defined(WINDOZ)
|
||||
#elif defined(_WIN32) || defined(_WIN64)
|
||||
|
||||
|
||||
/* determine which type of DLL we must generate */
|
||||
@@ -94,12 +94,5 @@
|
||||
|
||||
#endif
|
||||
|
||||
/* Perform printf-style argument type checking for known compilers */
|
||||
#ifdef __GNUC__
|
||||
# define PRINTF_FORMAT(fmt_idx, arg_idx) __attribute__ \
|
||||
((format (printf, fmt_idx, arg_idx)))
|
||||
#else
|
||||
# define PRINTF_FORMAT(fmt_idx, arg_idx)
|
||||
#endif
|
||||
|
||||
#endif /* !INCLUDE_DECL_H */
|
||||
|
51
file.c
51
file.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* file - file I/O routines callable by users
|
||||
*
|
||||
* Copyright (C) 1999-2007,2018,2021 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2018,2021,2022 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -46,11 +46,12 @@
|
||||
#include "calcerr.h"
|
||||
#include "strl.h"
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
# include <io.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -179,7 +180,7 @@ file_init(void)
|
||||
tname = (char *)malloc(snprintf_len+1);
|
||||
if (tname == NULL) {
|
||||
math_error("Out of memory for init_file");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
snprintf(tname, snprintf_len, "descriptor[%d]", i);
|
||||
tname[snprintf_len] = '\0'; /* paranoia */
|
||||
@@ -231,7 +232,7 @@ init_fileio(FILEIO *fiop, char *name, char *mode,
|
||||
fiop->name = (char *)malloc(namelen + 1);
|
||||
if (fiop->name == NULL) {
|
||||
math_error("No memory for filename");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -338,7 +339,7 @@ init_fileio(FILEIO *fiop, char *name, char *mode,
|
||||
* NOTE: This function will not return 0, 1 or 2 since they are
|
||||
* reserved for stdin, stdout, stderr. In fact, it must not
|
||||
* return 0, 1, or 2 because it will confuse those who call
|
||||
* the opensearchfiile() function
|
||||
* the opensearchfile() function
|
||||
*/
|
||||
FILEID
|
||||
openid(char *name, char *mode)
|
||||
@@ -367,7 +368,7 @@ openid(char *name, char *mode)
|
||||
}
|
||||
if (fstat(fileno(fp), &sbuf) < 0) {
|
||||
math_error("bad fstat");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/* get a new FILEID */
|
||||
@@ -383,7 +384,7 @@ openid(char *name, char *mode)
|
||||
|
||||
|
||||
/*
|
||||
* openpathid - open the specified abse filename, or
|
||||
* openpathid - open the specified base filename, or
|
||||
* relative filename along a search path
|
||||
*
|
||||
* given:
|
||||
@@ -398,7 +399,7 @@ openid(char *name, char *mode)
|
||||
* NOTE: This function will not return 0, 1 or 2 since they are
|
||||
* reserved for stdin, stdout, stderr. In fact, it must not
|
||||
* return 0, 1, or 2 because it will confuse those who call
|
||||
* the opensearchfiile() function
|
||||
* the opensearchfile() function
|
||||
*/
|
||||
FILEID
|
||||
openpathid(char *name, char *mode, char *pathlist)
|
||||
@@ -436,12 +437,12 @@ openpathid(char *name, char *mode, char *pathlist)
|
||||
free(openpath);
|
||||
}
|
||||
math_error("bad fstat");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (openpath == NULL) {
|
||||
fclose(fp);
|
||||
math_error("bad openpath");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/* get a new FILEID */
|
||||
@@ -482,7 +483,7 @@ reopenid(FILEID id, char *mode, char *name)
|
||||
if ((id == FILEID_STDIN) || (id == FILEID_STDOUT) ||
|
||||
(id == FILEID_STDERR)) {
|
||||
math_error("Cannot freopen stdin, stdout, or stderr");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/* reopen the file */
|
||||
@@ -507,7 +508,7 @@ reopenid(FILEID id, char *mode, char *name)
|
||||
}
|
||||
if (i >= MAXFILES) {
|
||||
math_error("This should not happen in reopenid");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
fp = f_open(name, mode);
|
||||
if (fp == NULL) {
|
||||
@@ -532,7 +533,7 @@ reopenid(FILEID id, char *mode, char *name)
|
||||
}
|
||||
if (fstat(fileno(fp), &sbuf) < 0) {
|
||||
math_error("bad fstat");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/* initialize FILEIO structure */
|
||||
@@ -632,7 +633,7 @@ closeid(FILEID id)
|
||||
if ((id == FILEID_STDIN) || (id == FILEID_STDOUT) ||
|
||||
(id == FILEID_STDERR)) {
|
||||
math_error("Cannot close stdin, stdout, or stderr");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/* get file structure */
|
||||
@@ -728,7 +729,7 @@ flushid(FILEID id)
|
||||
}
|
||||
|
||||
|
||||
#if !defined(_WIN32)
|
||||
#if !defined(_WIN32) && !defined(_WIN64)
|
||||
int
|
||||
flushall(void)
|
||||
{
|
||||
@@ -744,7 +745,7 @@ flushall(void)
|
||||
}
|
||||
return err;
|
||||
}
|
||||
#endif /* Windoz free systems */
|
||||
#endif /* Windows free systems */
|
||||
|
||||
|
||||
/*
|
||||
@@ -832,7 +833,7 @@ readid(FILEID id, int flags, STRING **retstr)
|
||||
str = (char *)malloc(n + 1);
|
||||
if (str == NULL) {
|
||||
math_error("Out of memory for readid");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (n > 0)
|
||||
memcpy(&str[totlen], buf, n);
|
||||
@@ -1536,7 +1537,7 @@ getloc(FILEID id, ZVALUE *res)
|
||||
fp = fiop->fp;
|
||||
if (fp == NULL) {
|
||||
math_error("Bogus internal file pointer!");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1695,7 +1696,7 @@ setloc(FILEID id, ZVALUE zpos)
|
||||
if ((id == FILEID_STDIN) || (id == FILEID_STDOUT) ||
|
||||
(id == FILEID_STDERR)) {
|
||||
math_error("Cannot fseek stdin, stdout, or stderr");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1709,7 +1710,7 @@ setloc(FILEID id, ZVALUE zpos)
|
||||
fp = fiop->fp;
|
||||
if (fp == NULL) {
|
||||
math_error("Bogus internal file pointer!");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
fiop->action = 0;
|
||||
@@ -1960,7 +1961,7 @@ filesize(FILEIO *fiop)
|
||||
/* return length */
|
||||
if (fstat(fileno(fiop->fp), &sbuf) < 0) {
|
||||
math_error("bad fstat");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
return sbuf.st_size;
|
||||
}
|
||||
@@ -2099,7 +2100,7 @@ getscanfield(FILE *fp, BOOL skip, unsigned int width, int scannum,
|
||||
str = (char *) malloc(len + 1);
|
||||
if (str == NULL) {
|
||||
math_error("Out of memory for scanning");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (len)
|
||||
memcpy(&str[totlen], buf, len);
|
||||
@@ -2177,7 +2178,7 @@ getscanwhite(FILE *fp, BOOL skip, unsigned int width, int scannum,
|
||||
str = (char *) malloc(len + 1);
|
||||
if (str == NULL) {
|
||||
math_error("Out of memory for scanning");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
if (len)
|
||||
memcpy(&str[totlen], buf, len);
|
||||
@@ -2328,7 +2329,7 @@ fscanfile(FILE *fp, char *fmt, int count, VALUE **vals)
|
||||
var = *vals++;
|
||||
count--;
|
||||
if (var->v_type != V_ADDR)
|
||||
math_error("Assigning to nonvariable");
|
||||
math_error("Assigning to non-variable");
|
||||
var = var->v_addr;
|
||||
subtype = var->v_subtype;
|
||||
freevalue(var);
|
||||
@@ -2721,7 +2722,7 @@ fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res)
|
||||
while (k < tmp.len && tmp.v[k] == 0);
|
||||
if (k == tmp.len) {
|
||||
math_error("This should not happen");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
tmp.v[k]--;
|
||||
if (tmp.v[tmp.len - 1] == 0)
|
||||
|
11
hash.c
11
hash.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* hash - one-way hash routines
|
||||
*
|
||||
* Copyright (C) 1999-2007,2021 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2021,2022 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
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "hash.h"
|
||||
|
||||
|
||||
#include "attribute.h"
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
@@ -94,7 +95,7 @@ hash_init(int type, HASH *state)
|
||||
state = (HASH *)malloc(sizeof(HASH));
|
||||
if (state == NULL) {
|
||||
math_error("hash_init: cannot malloc HASH");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,7 +120,7 @@ hash_init(int type, HASH *state)
|
||||
if (state->chunksize > MAX_CHUNKSIZE) {
|
||||
math_error(
|
||||
"internal error: MAX_CHUNKSIZE is too small");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
return state;
|
||||
}
|
||||
@@ -174,7 +175,7 @@ hash_copy(HASH *state)
|
||||
hnew = (HASH *)malloc(sizeof(HASH));
|
||||
if (hnew == NULL) {
|
||||
math_error("hash_init: cannot malloc HASH");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1048,7 +1049,7 @@ hash_value(int type, void *v, HASH *state)
|
||||
|
||||
default:
|
||||
math_error("hashing an unknown value");
|
||||
/*NOTREACHED*/
|
||||
not_reached();
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
73
have_arc4random.c
Normal file
73
have_arc4random.c
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* have_arc4random - Determine if we have the arc4random_buf() RNG
|
||||
*
|
||||
* 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/12/06 23:58:51
|
||||
* 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_arc4random
|
||||
*
|
||||
* Not all enviroments have the arc4random_buf() function,
|
||||
* so this may not compile on your system.
|
||||
*
|
||||
* This prog outputs:
|
||||
*
|
||||
* HAVE_ARC4RANDOM
|
||||
* defined ==> have arc4random_buf() call
|
||||
* undefined ==> do not have arc4random_buf() call
|
||||
*/
|
||||
|
||||
#include "have_stdlib.h"
|
||||
#if defined(HAVE_STDLIB_H)
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
#define BUFLEN (32) /* length of the buffer to fill */
|
||||
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#if defined(HAVE_NO_ARC4RANDOM)
|
||||
|
||||
printf("#undef HAVE_ARC4RANDOM /* no */\n");
|
||||
|
||||
#else /* HAVE_NO_ARC4RANDOM */
|
||||
|
||||
/* buffer for arc4random_buf() to fill */
|
||||
static char buf[BUFLEN];
|
||||
|
||||
arc4random_buf(buf, BUFLEN);
|
||||
printf("#define HAVE_ARC4RANDOM /* yes */\n");
|
||||
|
||||
#endif /* HAVE_NO_ARC4RANDOM */
|
||||
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
@@ -33,7 +33,7 @@
|
||||
* This prog outputs several defines:
|
||||
*
|
||||
* HAVE_CONST
|
||||
* defined ==> ok to use const
|
||||
* defined ==> OK to use const
|
||||
* undefined ==> do not use const
|
||||
*
|
||||
* CONST
|
||||
|
71
have_environ.c
Normal file
71
have_environ.c
Normal file
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* have_environ - Determine if we have the environ user environment synbol
|
||||
*
|
||||
* 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/12/06 19:34:32
|
||||
* 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_environ
|
||||
*
|
||||
* Not all enviroments have the user environment external:
|
||||
*
|
||||
* extern char **environ;
|
||||
*
|
||||
* so this may not compile on your system.
|
||||
*
|
||||
* This prog outputs:
|
||||
*
|
||||
* HAVE_ENVIRON
|
||||
* defined ==> environ is an non-NULL extern symbol
|
||||
* undefined ==> environ is NOT an extern symbol or is NULL
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
#include "banned.h" /* include after system header <> includes */
|
||||
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#if defined(HAVE_NO_ENVIRON)
|
||||
|
||||
printf("#undef HAVE_ENVIRON /* no */\n");
|
||||
|
||||
#else /* HAVE_NO_ENVIRON */
|
||||
|
||||
extern char **environ;
|
||||
|
||||
if (environ == NULL) {
|
||||
printf("#define HAVE_ENVIRON /* no */\n");
|
||||
} else {
|
||||
printf("#define HAVE_ENVIRON /* yes */\n");
|
||||
}
|
||||
|
||||
#endif /* HAVE_NO_ENVIRON */
|
||||
|
||||
/* exit(0); */
|
||||
return 0;
|
||||
}
|
@@ -34,10 +34,9 @@
|
||||
* This prog outputs several defines:
|
||||
*
|
||||
* HAVE_GETTIME
|
||||
* defined ==> use clock_gettime() for either CLOCK_SGI_CYCLE
|
||||
* and/or CLOCK_REALTIME
|
||||
* undefined ==> clock_gettime() is not available for both
|
||||
* CLOCK_SGI_CYCLE and CLOCK_REALTIME
|
||||
* defined ==> use clock_gettime() from CLOCK_REALTIME
|
||||
* undefined ==> clock_gettime() is not available from
|
||||
* CLOCK_REALTIME
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -50,19 +49,13 @@
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#if defined(HAVE_NO_GETTIME)
|
||||
#if defined(HAVE_NO_GETTIME) || defined(_WIN32) || defined(_WIN64)
|
||||
|
||||
printf("#undef HAVE_GETTIME /* no */\n");
|
||||
|
||||
#else /* HAVE_NO_GETTIME */
|
||||
|
||||
# if defined(CLOCK_SGI_CYCLE)
|
||||
|
||||
struct timespec sgi_cycle; /* SGI hardware clock */
|
||||
(void) clock_gettime(CLOCK_SGI_CYCLE, &sgi_cycle);
|
||||
printf("#define HAVE_GETTIME /* yes - w/CLOCK_SGI_CYCLE */\n");
|
||||
|
||||
# elif defined(CLOCK_REALTIME)
|
||||
# if defined(CLOCK_REALTIME)
|
||||
|
||||
struct timespec realtime; /* POSIX realtime clock */
|
||||
(void) clock_gettime(CLOCK_REALTIME, &realtime);
|
||||
@@ -70,7 +63,7 @@ main(void)
|
||||
|
||||
# else
|
||||
|
||||
printf("#undef HAVE_GETTIME /* no - no SGI_CYCLE and no REALTIME */\n");
|
||||
printf("#undef HAVE_GETTIME /* no - no CLOCK_REALTIME */\n");
|
||||
|
||||
# endif /* CLOCK_REALTIME */
|
||||
|
||||
|
@@ -38,7 +38,7 @@
|
||||
* This prog outputs several defines:
|
||||
*
|
||||
* HAVE_OFF_T_SCALAR
|
||||
* defined ==> ok to perform arithmetic ops, = and comparisons
|
||||
* defined ==> OK to perform arithmetic ops, = and comparisons
|
||||
* undefined ==> convert to ZVALUE first
|
||||
*/
|
||||
|
||||
@@ -69,7 +69,7 @@ main(void)
|
||||
if (value > (off_t)1) {
|
||||
--value;
|
||||
}
|
||||
#if !defined(_WIN32)
|
||||
#if !defined(_WIN32) && !defined(_WIN64)
|
||||
if (value <= (off_t)getppid()) {
|
||||
--value;
|
||||
}
|
||||
|
@@ -37,7 +37,7 @@
|
||||
* This prog outputs several defines:
|
||||
*
|
||||
* HAVE_FILEPOS_SCALAR
|
||||
* defined ==> ok to perform arithmetic ops, = and comparisons
|
||||
* defined ==> OK to perform arithmetic ops, = and comparisons
|
||||
* undefined ==> convert to ZVALUE first
|
||||
*/
|
||||
|
||||
@@ -69,7 +69,7 @@ main(void)
|
||||
if (value > (FILEPOS)1) {
|
||||
--value;
|
||||
}
|
||||
#if !defined(_WIN32)
|
||||
#if !defined(_WIN32) && !defined(_WIN64)
|
||||
if (value <= (FILEPOS)getppid()) {
|
||||
--value;
|
||||
}
|
||||
|
@@ -152,7 +152,7 @@ main(void)
|
||||
puts(" *");
|
||||
puts(" * Systems that do not have vsnprintf() need something. In some");
|
||||
puts(" * cases the snprintf function will deal correctly with the");
|
||||
puts(" * va_alist 4th arg. Same gors for a lack of an vsnprintf()");
|
||||
puts(" * va_alist 4th arg. Same goes for a lack of an vsnprintf()");
|
||||
puts(" * function. In either case we use the #defines below and");
|
||||
puts(" * hope for the best!");
|
||||
puts(" */");
|
||||
|
@@ -33,7 +33,7 @@
|
||||
* This prog outputs several defines:
|
||||
*
|
||||
* HAVE_UID_T
|
||||
* defined ==> ok to use uid_t
|
||||
* defined ==> OK to use uid_t
|
||||
* undefined ==> do not use uid_t
|
||||
*/
|
||||
|
||||
|
@@ -34,7 +34,7 @@
|
||||
* This prog outputs several defines:
|
||||
*
|
||||
* HAVE_UNUSED
|
||||
* defined ==> ok to use unused
|
||||
* defined ==> OK to use unused
|
||||
* undefined ==> do not use unused
|
||||
*
|
||||
* UNUSED
|
||||
|
@@ -141,7 +141,7 @@ main(void)
|
||||
puts(" *");
|
||||
puts(" * Systems that do not have vsnprintf() need something. In some");
|
||||
puts(" * cases the snprintf() function will deal correctly with the");
|
||||
puts(" * va_alist 4th arg. Same gors for a lack of an vsnprintf()");
|
||||
puts(" * va_alist 4th arg. Same goes for a lack of an vsnprintf()");
|
||||
puts(" * function. In either case we use the #defines below and");
|
||||
puts(" * hope for the best!");
|
||||
puts(" */");
|
||||
|
3
help.c
3
help.c
@@ -40,7 +40,7 @@
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
# define popen _popen
|
||||
# define pclose _pclose
|
||||
#endif
|
||||
@@ -87,6 +87,7 @@ STATIC struct help_alias {
|
||||
{"dm2d", "dms2d"},
|
||||
{"gm2g", "gms2g"},
|
||||
{"hm2d", "hms2d"},
|
||||
{"release", "releases"},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# help - makefile for calc help files
|
||||
#
|
||||
# Copyright (C) 1999-2006,2017,2021 Landon Curt Noll
|
||||
# Copyright (C) 1999-2006,2017,2021,2022 Landon Curt Noll
|
||||
#
|
||||
# SRC: help/Makefile
|
||||
#
|
||||
@@ -48,14 +48,18 @@
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point where is cannot be depended on.
|
||||
# On such systems, the zsh may be a much better alternative
|
||||
# On such systems, the sh 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
|
||||
SHELL= /bin/bash
|
||||
#SHELL= /bin/sh
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
ifeq ($(target),Darwin)
|
||||
SHELL:= /bin/zsh
|
||||
endif
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
|
||||
|
||||
####
|
||||
@@ -102,15 +106,6 @@ PREFIX= /usr/local
|
||||
#
|
||||
MAKE_FILE= Makefile
|
||||
|
||||
# Controlling file makefile basename (without the path)
|
||||
#
|
||||
# This is the basename same of the makefile that may/does/will drive
|
||||
# this makefile.
|
||||
#
|
||||
# If in doubt, set TOP_MAKE_FILE to Makefile
|
||||
#
|
||||
TOP_MAKE_FILE= Makefile
|
||||
|
||||
# Where the system include (.h) files are kept
|
||||
#
|
||||
# For DJGPP, select:
|
||||
@@ -220,10 +215,10 @@ T=
|
||||
# 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= >/dev/null 2>&1 silence ${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= 2>/dev/null silence command stderr during hsrc file formation
|
||||
# E= full command stderr during hsrc file formation
|
||||
#
|
||||
# V=@: do not echo debug statements (quiet mode)
|
||||
@@ -270,7 +265,7 @@ TRUE= true
|
||||
# the extension required by such.
|
||||
#
|
||||
# EXT= # normal Un*x / Linux / GNU/Linux systems
|
||||
# EXT=.exe # windoz / Cygwin
|
||||
# EXT=.exe # Windows / Cygwin
|
||||
#
|
||||
# If in doubt, use EXT=
|
||||
#
|
||||
@@ -314,7 +309,7 @@ BLT_HELP_FILES_13= bugs changes
|
||||
|
||||
STD_HELP_FILES_14= credit
|
||||
|
||||
BLT_HELP_FILES_14= contrib COPYING COPYING-LGPL questions
|
||||
BLT_HELP_FILES_14= contrib COPYING COPYING-LGPL questions releases
|
||||
|
||||
STD_HELP_FILES_15= wishlist todo
|
||||
|
||||
@@ -413,6 +408,10 @@ DISTLIST= ${STD_HELP_FILES} ${DETAIL_HELP} ${MAKE_FILE} \
|
||||
# These files are used to make (but not built) a calc .a link library
|
||||
#
|
||||
CALCLIBLIST=
|
||||
#
|
||||
# rules that are not also names of files
|
||||
#
|
||||
PHONY= all clobber distlist install
|
||||
|
||||
all: ${FULL_HELP_FILES} full ${DETAIL_HELP} ${DETAIL_CLONE} \
|
||||
${SINGULAR_FILES} .all
|
||||
@@ -426,6 +425,8 @@ all: ${FULL_HELP_FILES} full ${DETAIL_HELP} ${DETAIL_CLONE} \
|
||||
${RM} -f .all
|
||||
${TOUCH} .all
|
||||
|
||||
.PHONY: ${PHONY}
|
||||
|
||||
bindings: ../cal/bindings
|
||||
${RM} -f $@
|
||||
${CP} ../cal/bindings $@
|
||||
@@ -525,7 +526,7 @@ usage: ../calc.usage
|
||||
fi
|
||||
|
||||
../calc.usage:
|
||||
(cd ..; ${MAKE} -f ${TOP_MAKE_FILE} calc.usage)
|
||||
(cd ..; ${MAKE} -f ${MAKE_FILE} calc.usage)
|
||||
|
||||
custom_cal: ../custom/CUSTOM_CAL
|
||||
${RM} -f $@
|
||||
@@ -628,6 +629,18 @@ cscript: ../cscript/README
|
||||
${Q} ${RM} -f $@
|
||||
(cd ../cscript; ${MAKE} -f Makefile README)
|
||||
|
||||
releases: ../README.RELEASE
|
||||
${RM} -f $@
|
||||
${CP} ../README.RELEASE $@
|
||||
${CHMOD} 0444 $@
|
||||
-@if [ -z "${Q}" ]; then \
|
||||
echo ''; \
|
||||
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
|
||||
echo ''; \
|
||||
else \
|
||||
${TRUE}; \
|
||||
fi
|
||||
|
||||
full: ${FULL_HELP_FILES} ${MAKE_FILE}
|
||||
${Q} echo "forming full"
|
||||
${Q} ${RM} -f $@
|
||||
@@ -685,7 +698,7 @@ ${SINGULAR_FILES}: ${PLURAL_FILES}
|
||||
# into a stand-alone program that generates a suitable function list
|
||||
# that is sandwiched between the top and bottom builtin help text.
|
||||
#
|
||||
# We form funclist.c by sedding out unwanted stuff from builtins table,
|
||||
# We form funclist.c by sed-ing out unwanted stuff from builtins table,
|
||||
# converting NUMBER* and VALUE into harmless types and converting
|
||||
# the showbuiltins() function into main(). Combined with the -DFUNCLIST
|
||||
# we will avoid all of the complex calc types, macros and defines and
|
||||
@@ -743,14 +756,6 @@ calcliblist:
|
||||
fi; \
|
||||
done
|
||||
|
||||
# The BSDI cdrom makefile expects all help files to be pre-built. This rule
|
||||
# creates these files so that the release can be shipped off to BSDI. You can
|
||||
# ignore this rule.
|
||||
#
|
||||
bsdi: all
|
||||
${RM} -f obj
|
||||
${CP} obj.file obj
|
||||
|
||||
# These next rule help form the ${DETAIL_HELP} makefile variables above.
|
||||
#
|
||||
# NOTE: The ${DETAIL_HELP} list does not include special help files.
|
||||
|
2
help/abs
2
help/abs
@@ -44,7 +44,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
cmp, epsilon, hypot, norm, near, obj
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -20,8 +20,8 @@ DESCRIPTION
|
||||
'w' or bit 1 for writing, 'x' or bit 0 for execution.
|
||||
|
||||
EXAMPLE
|
||||
The system error-numbers and messages may differ for different
|
||||
implementations
|
||||
; ## The system error-numbers and messages may differ
|
||||
; ## for different implementations
|
||||
|
||||
; !rm -f junk
|
||||
; access("junk")
|
||||
@@ -48,7 +48,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
fopen, fclose, isfile, files
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -18,7 +18,7 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
; print acot(2, 1e-5), acot(2, 1e-10), acot(2, 1e-15), acot(2, 1e-20)
|
||||
.46365 .463647609 .463647609000806 .46364760900080611621
|
||||
0.46365 0.463647609 0.463647609000806 0.46364760900080611621
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -29,7 +29,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
asin, acos, atan, asec, acsc, epsilon
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -20,7 +20,7 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
; print acoth(2, 1e-5), acoth(2, 1e-10), acoth(2, 1e-15), acoth(2, 1e-20)
|
||||
.54931 .5493061443 .549306144334055 .5493061443340548457
|
||||
0.54931 0.5493061443 0.549306144334055 0.5493061443340548457
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -31,7 +31,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
asinh, acosh, atanh, asech, acsch, epsilon
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -18,7 +18,7 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
; print acsc(2, 1e-5), acsc(2, 1e-10), acsc(2, 1e-15), acsc(2, 1e-20)
|
||||
.5236 .5235987756 .523598775598299 .52359877559829887308
|
||||
0.5236 0.5235987756 0.523598775598299 0.52359877559829887308
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -29,7 +29,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
asin, acos, atan, asec, acot, epsilon
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -18,10 +18,9 @@ DESCRIPTION
|
||||
|
||||
acsch(x) = ln((1 + sqrt(1 + x^2))/x)
|
||||
|
||||
|
||||
EXAMPLE
|
||||
; print acsch(2, 1e-5), acsch(2, 1e-10), acsch(2, 1e-15), acsch(2, 1e-20)
|
||||
.48121 .4812118251 .481211825059603 .4812118250596034475
|
||||
0.48121 0.4812118251 0.481211825059603 0.4812118250596034475
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -32,7 +31,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
asinh, acosh, atanh, asech, acoth, epsilon
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
3
help/agd
3
help/agd
@@ -33,7 +33,6 @@ DESCRIPTION
|
||||
|
||||
agd(z) = atanh(sin(x)/cosh(y)) + i * atan(sinh(y)/cos(x)>
|
||||
|
||||
|
||||
EXAMPLE
|
||||
; print agd(1, 1e-5), agd(1, 1e-10), agd(1, 1e-15)
|
||||
1.22619 1.2261911709 1.226191170883517
|
||||
@@ -45,7 +44,7 @@ EXAMPLE
|
||||
-1.93237 -1.9323667197 -1.932366719745925
|
||||
|
||||
; print agd(1+2i, 1e-5), agd(1+2i, 1e-10)
|
||||
.22751+1.42291i .2275106584+1.4229114625i
|
||||
0.22751+1.42291i 0.2275106584+1.4229114625i
|
||||
|
||||
LIMITS
|
||||
none
|
||||
|
18
help/appr
18
help/appr
@@ -96,7 +96,7 @@ PROPERTIES
|
||||
|
||||
If y is nonzero, appr(x,y,8)/y = an odd integer n only if x = n * y.
|
||||
|
||||
EXAMPLES
|
||||
EXAMPLE
|
||||
; print appr(-5.44,0.1,0), appr(5.44,0.1,0), appr(5.7,1,0), appr(-5.7,1,0)
|
||||
-5.5 5.4 5 -6
|
||||
|
||||
@@ -119,26 +119,26 @@ EXAMPLES
|
||||
-5.5 5.5 5 -5
|
||||
|
||||
; print appr(-.44,0.1,11), appr(.44,0.1,11), appr(5.7,1,11), appr(-5.7,1,11)
|
||||
-.4 .5 5 -6
|
||||
-0.4 0.5 5 -6
|
||||
|
||||
; print appr(-.44,-.1,11),appr(.44,-.1,11),appr(5.7,-1,11),appr(-5.7,-1,11)
|
||||
-.5 .4 6 -5
|
||||
-0.5 0.4 6 -5
|
||||
|
||||
; print appr(-.44,0.1,12), appr(.44,0.1,12), appr(5.7,1,12), appr(-5.7,1,12)
|
||||
-.4 .5 5 -6
|
||||
-0.4 0.5 5 -6
|
||||
|
||||
; print appr(-.44,-.1,12),appr(.44,-.1,12),appr(5.7,-1,12),appr(-5.7,-1,12)
|
||||
-.5 .4 6 -5
|
||||
-0.5 0.4 6 -5
|
||||
|
||||
; print appr(-.44,0.1,15), appr(.44,0.1,15), appr(5.7,1,15), appr(-5.7,1,15)
|
||||
-.4 .5 5 -6
|
||||
-0.4 0.5 5 -6
|
||||
|
||||
; print appr(-.44,-.1,15),appr(.44,-.1,15),appr(5.7,-1,15),appr(-5.7,-1,15)
|
||||
-.4 .5 5 -6
|
||||
-0.4 0.5 5 -6
|
||||
|
||||
; x = sqrt(7-3i, 1e-20)
|
||||
; print appr(x,1e-5,0), appr(x,1e-5,1), appr(x,1e-5,2), appr(x,1e-6,3)
|
||||
2.70331-.55488i 2.70332-.55487i 2.70331-.55487i 2.70332-.55488i
|
||||
2.70331-0.55488i 2.70332-0.55487i 2.70331-0.55487i 2.70332-0.55488i
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -151,7 +151,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
round, bround, cfappr, cfsim
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
22
help/archive
22
help/archive
@@ -1,21 +1,27 @@
|
||||
Where to get the latest versions of calc
|
||||
|
||||
Landon Noll maintains the official calc home page at:
|
||||
Official calc source is maintained on GitHub:
|
||||
|
||||
https://github.com/lcn2/calc
|
||||
|
||||
Calc releases may be found as GitHub tagged releases:
|
||||
|
||||
https://github.com/lcn2/calc/releases?page=2
|
||||
|
||||
At the bottom of a given release is a "> Assets" that may
|
||||
be opened to reveal down-loadable files such as source
|
||||
tarballs, source zip files and RPMs.
|
||||
|
||||
Landon Noll also maintains a calc home page at:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/
|
||||
|
||||
See:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-download.html
|
||||
|
||||
for information on how to obtain up a recent version of calc.
|
||||
|
||||
Landon Curt Noll
|
||||
http://www.isthe.com/chongo/
|
||||
|
||||
chongo <was here> /\../\
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
4
help/arg
4
help/arg
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
; print arg(2), arg(2+3i, 1e-5), arg(2+3i, 1e-10), arg(2+3i, 1e-20)
|
||||
0 .98279 .9827937232 .98279372324732906799
|
||||
0 0.98279 0.9827937232 0.98279372324732906799
|
||||
|
||||
; pi = pi(1e-10); deg = pi/180; eps = deg/10000
|
||||
; print arg(2+3i, eps)/deg, arg(-1 +1i, eps)/deg, arg(-1 - 1i,eps)/deg
|
||||
@@ -32,7 +32,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
conj, im, polar, re
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
13
help/arrow
13
help/arrow
@@ -22,24 +22,23 @@ DESCRIPTION
|
||||
|
||||
Spaces or tabs on either side of -> are optional.
|
||||
|
||||
EXAMPLES
|
||||
EXAMPLE
|
||||
; obj pair {one, two}
|
||||
; obj pair A, B
|
||||
; obj pair A; obj pair B
|
||||
; p = &A
|
||||
; p->one = 1; p->two = 2
|
||||
; A
|
||||
obj pair {1, 2}
|
||||
|
||||
; A->two = &B
|
||||
; p->two->one = 3; p->two->two = 4
|
||||
; p->one = 3; p->two = 4
|
||||
|
||||
; *p->ptwo
|
||||
; *p
|
||||
obj pair {3, 4}
|
||||
|
||||
; B = {5,6}
|
||||
; *p->two
|
||||
obj pair {5, 6}
|
||||
|
||||
4
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -50,7 +49,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
address, dereference, isptr, dot
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -29,7 +29,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
asin, acos, atan, acsc, acot, epsilon
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -18,7 +18,7 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
; print asin(.5, 1e-5), asin(.5, 1e-10), asin(.5, 1e-15), asin(.5, 1e-20)
|
||||
.5236 .5235987756 .523598775598299 .52359877559829887308
|
||||
0.5236 0.5235987756 0.523598775598299 0.52359877559829887308
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -29,7 +29,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
acos, atan, asec, acsc, acot, epsilon
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -74,7 +74,6 @@ DESCRIPTION
|
||||
results in the value 3 being stored not only as the new value for A
|
||||
but also at the now unnamed location earlier used for A[0].
|
||||
|
||||
|
||||
EXAMPLE
|
||||
; b = 3+1
|
||||
; a = b
|
||||
|
@@ -82,7 +82,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
isassoc, rsearch, search, size
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -25,7 +25,7 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
; print atan2(0,0), atan2(1,sqrt(3)), atan2(17,53,1e-100)
|
||||
0 ~.52359877559829887307 ~.31038740713235146535
|
||||
0 ~0.52359877559829887307 ~0.31038740713235146535
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -36,7 +36,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
acos, asin, atan, cos, epsilon, sin, tan
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -20,7 +20,7 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
; print atanh(.5,1e-5), atanh(.5,1e-10), atanh(.5,1e-15), atanh(.5,1e-20)
|
||||
.54931 .5493061443 .549306144334055 .5493061443340548457
|
||||
0.54931 0.5493061443 0.549306144334055 0.5493061443340548457
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -31,7 +31,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
asinh, acosh, asech, acsch, acoth, epsilon
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
2
help/avg
2
help/avg
@@ -49,7 +49,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
hmean
|
||||
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -106,7 +106,6 @@ DESCRIPTION
|
||||
and dsi refer to the double-bracket method of indexing, i.e. the
|
||||
matrix is as if its elements were indexed 0, 1, ..., size(M) - 1.
|
||||
|
||||
|
||||
EXAMPLE
|
||||
; A = blk() = {1,2,3,4}
|
||||
; B = blk()
|
||||
@@ -190,7 +189,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
blk, mat, file, list, str
|
||||
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -19,7 +19,6 @@ DESCRIPTION
|
||||
of their creation.
|
||||
|
||||
EXAMPLE
|
||||
|
||||
; A = blk("alpha")
|
||||
; B = blk("beta") = {1,2,3}
|
||||
; blocks()
|
||||
@@ -42,7 +41,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
blk, blkfree
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
32
help/bround
32
help/bround
@@ -65,29 +65,29 @@ DESCRIPTION
|
||||
changed by assignments; plcs and rnd are copied to temporary
|
||||
variables, so their values are not changed by the call.
|
||||
|
||||
EXAMPLES
|
||||
EXAMPLE
|
||||
; a = 7/32, b = -7/32
|
||||
|
||||
; print a, b
|
||||
.21875 -.21875
|
||||
0.21875 -0.21875
|
||||
|
||||
; print round(a,3,0), round(a,3,1), round(a,3,2), print round(a,3,3)
|
||||
.218, .219, .218, .219
|
||||
0.218, 0.219, 0.218, 0.219
|
||||
|
||||
; print round(b,3,0), round(b,3,1), round(b,3,2), print round(b,3,3)
|
||||
-.219, -.218, -.218, -.219
|
||||
-0.219, -0.218, -0.218, -0.219
|
||||
|
||||
; print round(a,3,16), round(a,3,17), round(a,3,18), print round(a,3,19)
|
||||
.2188 .2188 .2188 .2188
|
||||
0.2188 0.2188 0.2188 0.2188
|
||||
|
||||
; print round(a,4,16), round(a,4,17), round(a,4,18), print round(a,4,19)
|
||||
.2187 .2188 .2187 .2188
|
||||
0.2187 0.2188 0.2187 0.2188
|
||||
|
||||
; print round(a,2,8), round(a,3,8), round(a,4,8), round(a,5,8)
|
||||
.22 .218 .2188 .21875
|
||||
0.22 0.218 0.2188 0.21875
|
||||
|
||||
; print round(a,2,24), round(a,3,24), round(a,4,24), round(a,5,24)
|
||||
.22 .219 .2188 .21875
|
||||
0.22 0.219 0.2188 0.21875
|
||||
|
||||
; c = 21875
|
||||
; print round(c,-2,0), round(c,-2,1), round(c,-3,0), round(c,-3,16)
|
||||
@@ -100,13 +100,13 @@ EXAMPLES
|
||||
; print round(A,2,24)
|
||||
|
||||
list(7 elements, 7 nonzero):
|
||||
[[0]] = .12
|
||||
[[1]] = .25
|
||||
[[3]] = .38
|
||||
[[4]] = .5
|
||||
[[5]] = .62
|
||||
[[6]] = .75
|
||||
[[7]] = .88
|
||||
[[0]] = 0.12
|
||||
[[1]] = 0.25
|
||||
[[3]] = 0.38
|
||||
[[4]] = 0.5
|
||||
[[5]] = 0.62
|
||||
[[6]] = 0.75
|
||||
[[7]] = 0.88
|
||||
|
||||
LIMITS
|
||||
For non-object case:
|
||||
@@ -122,7 +122,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
round, trunc, btrunc, int, appr
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -23,7 +23,10 @@ DESCRIPTION
|
||||
depths.
|
||||
|
||||
EXAMPLE
|
||||
n/a
|
||||
; ## NOTE: Your current calculation level may vary:
|
||||
|
||||
; calclevel()
|
||||
0
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -34,7 +37,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
eval, read, quit, abort, inputlevel
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -18,7 +18,10 @@ DESCRIPTION
|
||||
information on CALCPATH.
|
||||
|
||||
EXAMPLE
|
||||
n/a
|
||||
; ## NOTE: Your current CALCPATH search path may vary:
|
||||
|
||||
; calcpath()
|
||||
".:./cal:~/.cal:/usr/local/share/calc:/usr/local/share/calc/custom"
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -29,7 +32,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
environment, fpathopen
|
||||
|
||||
## Copyright (C) 2006 Landon Curt Noll
|
||||
## Copyright (C) 2006,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -34,7 +34,7 @@ DESCRIPTION
|
||||
consider the two cases rnd = 8 and rnd = 16.
|
||||
|
||||
If den(x) > 2, cfsim(x, 8) returns the value of the penultimate simple
|
||||
continued-fraction approximant to x, i.e. if:
|
||||
continued-fraction approximate to x, i.e. if:
|
||||
|
||||
x = a_0 + 1/(a_1 + 1/(a_2 + ... + 1/a_n) ...)),
|
||||
|
||||
@@ -47,7 +47,7 @@ DESCRIPTION
|
||||
of x described above, this is given by replacing a_n by a_n - 1.
|
||||
|
||||
If den(x) = 2, the definition adopted is to round towards zero for the
|
||||
approximant case (rnd = 8) and from zero for the "nearest" case (rnd = 16).
|
||||
approximate case (rnd = 8) and from zero for the "nearest" case (rnd = 16).
|
||||
|
||||
For integral x, cfsim(x, 8) returns zero, cfsim(x,16) returns x - sgn(x).
|
||||
|
||||
@@ -55,7 +55,7 @@ DESCRIPTION
|
||||
|
||||
rnd integer x half-integer x den(x) > 2
|
||||
|
||||
8 0 x - sgn(x)/2 approximant
|
||||
8 0 x - sgn(x)/2 approximate
|
||||
16 x - sgn(x) x + sgn(x)/2 nearest
|
||||
|
||||
From either cfsim(x, 0) and cfsim(x, 1), the other is easily
|
||||
@@ -73,7 +73,7 @@ DESCRIPTION
|
||||
"good" approximations to x with decreasing denominators and
|
||||
correspondingly decreasing accuracy; each denominator is less than half
|
||||
the preceding denominator. (Unlike the "forward" sequence of
|
||||
continued-fraction approximants these are not necessarily alternately
|
||||
continued-fraction approximates these are not necessarily alternately
|
||||
greater than and less than x.)
|
||||
|
||||
Some other properties:
|
||||
|
@@ -13,11 +13,12 @@ DESCRIPTION
|
||||
this function will return an empty string.
|
||||
|
||||
EXAMPLE
|
||||
% calc "print cmdbuf(); a = 3; print a^2;"
|
||||
# NOTE: The following is intended to a shell command line:
|
||||
|
||||
$ calc "print cmdbuf(); a = 3; print a^2;"
|
||||
print cmdbuf(); a = 3; print a^2;
|
||||
|
||||
9
|
||||
%
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -28,7 +29,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
argv, system
|
||||
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -223,10 +223,10 @@ Command sequence
|
||||
globaltypes global variables
|
||||
objfunctions possible object functions
|
||||
objtypes defined objects
|
||||
opcodes func internal opcodes for function `func'
|
||||
opcodes internal opcodes for function `func'
|
||||
sizes size in octets of calc value types
|
||||
realglobals numeric global variables
|
||||
statics unscoped static variables
|
||||
statics un-scoped static variables
|
||||
numbers calc number cache
|
||||
redcdata REDC data defined
|
||||
strings calc string cache
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user