mirror of
https://github.com/lcn2/calc.git
synced 2025-08-22 01:23:28 +03:00
Compare commits
24 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
cd736fdbd4 | ||
|
f753884008 | ||
|
1d9a4941ce | ||
|
5bde797ba4 | ||
|
ecba35fc26 | ||
|
a4f8f367c3 | ||
|
41b11ab785 | ||
|
3d33c6c6f4 | ||
|
dbd8926022 | ||
|
f7f110b686 | ||
|
ebf065dcb8 | ||
|
6bc0747a71 | ||
|
04861939fc | ||
|
ca0aaa0c3a | ||
|
f5d5319a51 | ||
|
263b8a78ef | ||
|
3c866367c6 | ||
|
09d7080547 | ||
|
f480c8c5df | ||
|
a230431a3b | ||
|
eaec46982d | ||
|
a86d629982 | ||
|
bcbc0cb766 | ||
|
6dc62c1ab7 |
50
BUGS
50
BUGS
@@ -116,59 +116,9 @@ of a context diff patch).
|
||||
|
||||
Known bugs in calc:
|
||||
|
||||
Under macOS, the installation of the calc man page fails.
|
||||
|
||||
The output of the alg_config.cal resource file is bogus.
|
||||
We would welcome a replacement for this code.
|
||||
|
||||
Calc shell scripts do not read from stdin properly,
|
||||
we all as a number of the cscript examples.
|
||||
|
||||
The argv() function is behaving differently
|
||||
when run in calc shell script mode:
|
||||
|
||||
When calc is run as:
|
||||
|
||||
calc -s a bb ccc
|
||||
|
||||
and given this input on the command prompt:
|
||||
|
||||
print "config(\"program\")=", config("program");
|
||||
print "argv()=", argv();
|
||||
argc = argv();
|
||||
for (i=0; i < argc; ++i) {
|
||||
print "argv(":i:")=", argv(i);
|
||||
}
|
||||
|
||||
calc prints:
|
||||
|
||||
config("program")= calc
|
||||
argv()= 3
|
||||
argv(0)= a
|
||||
argv(1)= bb
|
||||
argv(2)= ccc
|
||||
|
||||
but when it is run as a script called ./simple:
|
||||
|
||||
#!/usr/local/bin/calc -q -s -f
|
||||
print "config(\"program\")=", config("program");
|
||||
print "argv()=", argv();
|
||||
argc = argv();
|
||||
for (i=0; i < argc; ++i) {
|
||||
print "argv(":i:")=", argv(i);
|
||||
}
|
||||
|
||||
under Linux prints:
|
||||
|
||||
config("program")= /usr/bin/calc
|
||||
argv()= 4
|
||||
argv(0)= ./simple
|
||||
argv(1)= a
|
||||
argv(2)= bb
|
||||
argv(3)= ccc
|
||||
|
||||
and under macOS simply enters into interactive mode.
|
||||
|
||||
We are sure some more bugs exist. When you find them, please let
|
||||
us know! See the above for details on how to report and were to
|
||||
Email your bug reports and hopefully patches to fix them.
|
||||
|
155
CHANGES
155
CHANGES
@@ -1,4 +1,148 @@
|
||||
The following are the changes from calc version 2.12.9.0 to date:
|
||||
The following are the changes from calc version 2.14.0.0 to date:
|
||||
|
||||
The :-separated default CALCRC value has been reversed.
|
||||
The default CALCRC was:
|
||||
|
||||
${CALC_SHAREDIR}/startup:~/.calcrc:./.calcinit
|
||||
|
||||
The default CALCRC is now:
|
||||
|
||||
./.calcinit:~/.calcrc:${CALC_SHAREDIR}/startup
|
||||
|
||||
See "help environment" for details.
|
||||
|
||||
Added engineering mode as per a GitHub pull request from
|
||||
<GitHub user heitzmann>. Thank you! For example:
|
||||
|
||||
; config("mode","eng"),
|
||||
; 10^41
|
||||
100e39
|
||||
|
||||
or for example:
|
||||
|
||||
; base(1000),
|
||||
; 2^23209-1
|
||||
~402.87411577898877818187e6984
|
||||
|
||||
For more information see:
|
||||
|
||||
help base
|
||||
|
||||
Added regression test code for engineering mode. Improved and
|
||||
expanded regression test code related to the base() and base2()
|
||||
builtin functions.
|
||||
|
||||
Fixed a critical bug in the above mentioned pull request where
|
||||
a call to base2(1000) would make calc unstable and likely to
|
||||
dump core.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.13.0.1 to 2.13.0.1:
|
||||
|
||||
Replaced /usr/local with the use of ${PREFIX} in calc Makefiles.
|
||||
|
||||
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.
|
||||
|
||||
Corrected a few more typos in Makefile comments.
|
||||
|
||||
Added Makefile.local, a file with a single comment. The main
|
||||
Makefile includes Makefile.local just before the first all rule.
|
||||
One may override any Makefile setting by modifying Makefile.local.
|
||||
For example, Makefile.local could force BLD_TYPE:
|
||||
|
||||
HAVE_STRING_H:= YES
|
||||
HAVE_TIMES_H:= YES
|
||||
SED:= /usr/local/bin/nsed
|
||||
|
||||
Added ${LOC_MKF} to specify the make of the file that is
|
||||
included just before the all file. So one could place
|
||||
the above override lines into a different file and call
|
||||
make changing the ${LOC_MKF} value. For example:
|
||||
|
||||
make LOC_MKF=Makefile.private clobber all chk
|
||||
|
||||
Updated HOWTO.INSTALL to mention Makefile.local.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.13.0.0 to 2.13.0.0:
|
||||
|
||||
Fixed typo (missing quotes) in the env rule.
|
||||
|
||||
Fixed intendation problem in CHANGES.
|
||||
|
||||
Combined 2.12.9.1 changes into the 2.12.8.2 to 2.12.9.0
|
||||
range, and thus renamed the range to 2.12.8.2 to 2.12.9.1.
|
||||
|
||||
Fixed issues related to building Makefile.simple.
|
||||
|
||||
Fixed how the Makefile variable MANPATH is set for macOS.
|
||||
|
||||
Added a bunch of information to the near bottom of HOWTO.INSTALL
|
||||
on calc Makefiles. This information discusses the various
|
||||
Makefiles found in the calc source.
|
||||
|
||||
Added comments in various calc Makefiles about their origin.
|
||||
In particular, for Makefiles that are constructed such as
|
||||
Makefile.simple, custom/Makefile and custom/Makefile.simple
|
||||
there are comments about how they were made.
|
||||
|
||||
For all calc Makefiles, including those in sub-directories,
|
||||
near the top there is now a line of the form:
|
||||
|
||||
# SRC: ... some message about the origin ...
|
||||
|
||||
Fixed how the calc(1) man page is installed under macOS.
|
||||
|
||||
Fixed how calc man page in ${CATDIR} is formed.
|
||||
|
||||
Fixed how Makefile.simple is formed.
|
||||
|
||||
Fixed the #! calc script argument processing. The initial #!
|
||||
line must end in a -f. For example, if calc is in /usr/local/bin/calc,
|
||||
then the following would be the first line of a calc script:
|
||||
|
||||
#!/usr/local/bin/calc -f
|
||||
...
|
||||
|
||||
It is common that -q be usde with a calc script, so assuming the
|
||||
same /usr/local/bin/calc path:
|
||||
|
||||
#!/usr/local/bin/calc -q -f
|
||||
...
|
||||
|
||||
Use of -s in the #! first line of a calc script is not needed
|
||||
since -f implies -f.
|
||||
|
||||
The argv() will now return values more typical of C's main().
|
||||
Before it returned one less than the number of arguments. Now,
|
||||
for example, when calc is given 2 args, argv() will return 3.
|
||||
|
||||
The value of argv(0) will be the path to calc, or in the
|
||||
case of a #! calc cscript, it will return the name of the script.
|
||||
|
||||
Updated the calc man page and help/argv to reflect the
|
||||
above changes.
|
||||
|
||||
Improved the formatting of the calc man page.
|
||||
|
||||
Fixed the formation of the win32 sub-directory via the win32_hsrc
|
||||
Makefile rule.
|
||||
|
||||
Due to incompatible changes to the argv() function, and #! calc
|
||||
scripts, we are setting the version to the next minor number:
|
||||
|
||||
2.13.0.x
|
||||
|
||||
Updated BUGS file as per v2.13.0 fixes.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.8.2 to 2.12.9.1:
|
||||
|
||||
Added notes to help/unexpected about:
|
||||
|
||||
@@ -30,7 +174,7 @@ The following are the changes from calc version 2.12.9.0 to date:
|
||||
Changed the UNUSED define in have_unused.h to be a macro with
|
||||
a parameter. Changed all use of UNUSED in *.c to be UNUSED(x).
|
||||
|
||||
Removed need for HAVE_UNUSED in building the have_unused.h file.
|
||||
Removed the need for HAVE_UNUSED in building the have_unused.h file.
|
||||
|
||||
CCBAN is given to ${CC} in order to control if banned.h is in effect.
|
||||
|
||||
@@ -113,6 +257,13 @@ The following are the changes from calc version 2.12.9.0 to date:
|
||||
|
||||
Compile custom code, if needed, after main code is compiled.
|
||||
|
||||
Fixed a typo typo in help/Makefile that caused the build of
|
||||
2.12.9.0 to fail in a number of cases. Thanks to a report by
|
||||
<GitHub user balducci>.
|
||||
|
||||
Pass form Makefile variables ${Q}, ${S}, ${E}, ${H} and ${V} down
|
||||
to all sub-directory Makefiles from the top level Makefile.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.12.8.1 to 2.12.8.2:
|
||||
|
||||
|
243
HOWTO.INSTALL
243
HOWTO.INSTALL
@@ -1,6 +1,10 @@
|
||||
|
||||
IMPORTANT: Please see the section at the bottom of this file for
|
||||
some important information on Makefiles used in calc.
|
||||
|
||||
Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
|
||||
0) If your platform supports i686 RPMs, you may want to go to:
|
||||
(0) If your platform supports i686 RPMs, you may want to go to:
|
||||
|
||||
http://www.isthe.com/chongo/src/calc/
|
||||
|
||||
@@ -25,25 +29,25 @@ 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 -
|
||||
|
||||
1) Look at the makefile, and adjust it to suit your needs.
|
||||
(1) Look at the makefile, and adjust it to suit your needs.
|
||||
|
||||
The top level Makefile and the custom/Makefile require a GNU
|
||||
The top level Makefile and the custom/Makefile require a modern
|
||||
Make (such as gmake) or an equivalently advanced make. On many
|
||||
targets, the default make is sufficient. On FreeBSD for example,
|
||||
one must use gmake instead of make.
|
||||
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:
|
||||
to be Darwin. So for macOS, one might have to do:
|
||||
|
||||
# for macOS users only, force the target to be darwin
|
||||
# for macOS users only, force the target to be Darwin
|
||||
#
|
||||
make target=Darwin clobber
|
||||
make target=Darwin all
|
||||
make target=Darwin chk
|
||||
make target=Darwin install
|
||||
|
||||
If your target system does not have GNU Make (or equivalent), then
|
||||
you should try using the Makefile.simple and custom/Makefile.simple
|
||||
If your target system does not have a moderm Makefile (such as gmake),
|
||||
then you should try using the Makefile.simple and custom/Makefile.simple
|
||||
files:
|
||||
|
||||
mv Makefile Makefile.gmake
|
||||
@@ -56,6 +60,14 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
values should work. If in doubt, follow the 'When in doubt'
|
||||
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
|
||||
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 !
|
||||
! (such as Cygwin or DJGPP), read the README.WINDOWS file. !
|
||||
@@ -148,7 +160,7 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
|
||||
Adjust other Makefile variables as needed.
|
||||
|
||||
2) build calc:
|
||||
(2) build calc:
|
||||
|
||||
The top level Makefile and the custom/Makefile require a GNU
|
||||
Make (such as gmake) or an equivalently advanced make. On many
|
||||
@@ -180,7 +192,7 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
make clobber
|
||||
make calc-dynamic-only BLD_TYPE=calc-dynamic-only
|
||||
|
||||
3) test calc:
|
||||
(3) test calc:
|
||||
|
||||
make check
|
||||
|
||||
@@ -191,13 +203,222 @@ Installing calc from the bzip2-ed tarball in 4 easy steps:
|
||||
|
||||
make chk
|
||||
|
||||
4) install calc:
|
||||
(4) install calc:
|
||||
|
||||
make install
|
||||
|
||||
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.
|
||||
|
||||
=-=
|
||||
|
||||
On calc Makefiles:
|
||||
|
||||
How to tell the origin of of a Makefile:
|
||||
|
||||
The "# SRC: ... - ..." comment line near the top
|
||||
of the file indicates the origin of this file.
|
||||
In each segment below, we indicate what the SRC
|
||||
comment like will read.
|
||||
|
||||
SHELL= ...
|
||||
|
||||
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 edit the Makefile 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
|
||||
|
||||
Makefile
|
||||
|
||||
# SRC: Makefile - Our calc build environment
|
||||
|
||||
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.
|
||||
|
||||
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:
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
# SRC: Makefile.ship - top level Makefile
|
||||
|
||||
This is the main top level Makefile.
|
||||
|
||||
In calc packages such as RPMs, and the tar.bz2 source tarball,
|
||||
Makefile.ship has been moved into 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
|
||||
|
||||
The Makefile.simple rule of Makefile.ship, when forming the
|
||||
Makefile.simple file, removes lines from Makefile.ship between
|
||||
pairs of '#if 0' AND '#endif':
|
||||
|
||||
#if 0
|
||||
lines removed when forming Makefile.simple
|
||||
...
|
||||
lines removed when forming Makefile.simple
|
||||
#endif
|
||||
|
||||
The '#if 0' AND '#endif' MUST be at the start of the line.
|
||||
Any text after the '#if 0' OR '#endif' is ignored.
|
||||
|
||||
While they may look like a CPP directives, they are not. The
|
||||
inline awk script of the Makefile.simple rule does NOT allow
|
||||
them to nest:
|
||||
|
||||
#if 0 /* DO NOT DO THIS */
|
||||
lines removed when forming Makefile.simple
|
||||
...
|
||||
#if 0 /* DO NOT DO THIS */
|
||||
...
|
||||
#endif /* DO NOT DO THIS */
|
||||
...
|
||||
#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
|
||||
|
||||
This is a non-GNU or simple Makefile designed for environments
|
||||
that do not have a modern make command.
|
||||
|
||||
If you have a Makefile.simple file, use these commands to
|
||||
form a Makefile:
|
||||
|
||||
if [ -f Makefile ]; then mv -f Makefile Makefile.orig; fi
|
||||
cp Makefile.simple Makefile
|
||||
|
||||
The Makefile.simple rule from Makefile.ship is used to construct
|
||||
this file from the contents of Makefile.ship.
|
||||
|
||||
In calc packages such as RPMs, and the tar.bz2 source the
|
||||
Makefile.simple exists. In the calc GitHub repo:
|
||||
|
||||
https://github.com/lcn2/calc
|
||||
|
||||
this file does NOT exist and must be made via the Makefile.simple
|
||||
make rule. Therefore, non-GNU and simple make commands are NOT
|
||||
supported by the calc GitHub repo master branch. Instead, you
|
||||
need to extract Makefile.simple from one of the calc tar.bz2
|
||||
source tarball source from a calc source mirror:
|
||||
|
||||
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
|
||||
|
||||
This is a non-GNU or simple Makefile for the custom directory
|
||||
that is designed for environments that do not have a modern make
|
||||
command.
|
||||
|
||||
In calc packages such as RPMs, and the tar.bz2 source the
|
||||
Makefile.simple exists. In the calc GitHub repo:
|
||||
|
||||
https://github.com/lcn2/calc
|
||||
|
||||
this file does NOT exist and must be made via the
|
||||
custom/Makefile.simple make rule. Therefore, non-GNU and simple
|
||||
make commands are NOT supported by the calc GitHub repo master
|
||||
branch. Instead, you need to extract custom/Makefile.simple
|
||||
from one of the calc tar.bz2 source tarball source from a calc
|
||||
source mirror:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/calc-mirror.html
|
||||
|
||||
cal/Makefile
|
||||
|
||||
# SRC: cal/Makefile
|
||||
|
||||
The Makefile for the cal sub-directory.
|
||||
|
||||
cscript/Makefile
|
||||
|
||||
# SRC: cscript/Makefile
|
||||
|
||||
The Makefile for the cscript sub-directory.
|
||||
|
||||
help/Makefile
|
||||
|
||||
# SRC: help/Makefile
|
||||
|
||||
The Makefile for the help sub-directory.
|
||||
|
||||
## Copyright (C) 1999-2007,2021 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
|
96
Makefile
96
Makefile
@@ -2,33 +2,15 @@
|
||||
#
|
||||
# calc - arbitrary precision calculator
|
||||
#
|
||||
# (Linux calc rpm building makefile)
|
||||
#
|
||||
# NOTE: 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 the following ways:
|
||||
#
|
||||
# CCWERR= -Werror
|
||||
# USE_READLINE= -DUSE_READLINE
|
||||
# READLINE_LIB= -lreadline -lhistory -lncurses
|
||||
#
|
||||
# Copyright (C) 1999-2018,2021 Landon Curt Noll
|
||||
#
|
||||
# The Makefile.ship makefile becomes the Makefile found in the
|
||||
# calc-*.tar.bz2 bzip2 source tarball.
|
||||
# SRC: Makefile - Our calc build environment
|
||||
#
|
||||
# This Makefile drives the makefile: Makefile.ship.
|
||||
# The "# SRC: ... - ..." comment line above indicates
|
||||
# the origin of this file.
|
||||
#
|
||||
# This makefile mostly contains critical variables (such as SHELL, MAKE, etc.)
|
||||
# as well as those which we choose to override defaults found in
|
||||
# Makefile.ship. Make variables unique to this Makefile start with X.
|
||||
#
|
||||
# This makefile contains only those critical rules (such as all, clean, etc.)
|
||||
# and the common rules needed in development (such as chk, check, etc.).
|
||||
# This makefile has a few special rules that are used to set the version
|
||||
# string in the shipped makefiles (such as Makefile.ship).
|
||||
|
||||
# Copyright (C) 1999-2008,2014 Landon Curt Noll
|
||||
# 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
|
||||
@@ -53,11 +35,16 @@
|
||||
# calculator by David I. Bell with help/mods from others
|
||||
# Makefile by Landon Curt Noll
|
||||
|
||||
# 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
|
||||
|
||||
# The shell used by this Makefile
|
||||
#
|
||||
# On some systems, /bin/sh is a rather reduced shell with
|
||||
# deprecated behavor.
|
||||
# deprecated behavior.
|
||||
#
|
||||
# If your system has a up to date, bash shell, then
|
||||
# you may wish to use:
|
||||
@@ -71,10 +58,31 @@
|
||||
#
|
||||
# SHELL= /bin/zsh
|
||||
#
|
||||
#SHELL= /bin/sh
|
||||
ifeq ($(target),Darwin)
|
||||
SHELL= /bin/zsh
|
||||
else
|
||||
SHELL= /bin/bash
|
||||
#SHELL= /bin/zsh
|
||||
endif
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=-=-=- You may want to change some values below -=-=-=-=-=-=-=-=-#
|
||||
##############################################################################
|
||||
|
||||
# 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. :-)
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
@@ -111,17 +119,6 @@ SHELL= /bin/bash
|
||||
CCBAN= -UUNBAN
|
||||
#CCBAN= -DUNBAN
|
||||
|
||||
|
||||
# Try uname -s if the target was not already set on the make command line
|
||||
#
|
||||
ifeq ($(target),)
|
||||
target=$(shell uname -s 2>/dev/null)
|
||||
endif
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=-=-=- You may want to change some values below -=-=-=-=-=-=-=-=-#
|
||||
##############################################################################
|
||||
|
||||
# Determine of the GNU-readline facility will be used instead of the
|
||||
# built-in calc binding method.
|
||||
#
|
||||
@@ -130,28 +127,22 @@ USE_READLINE= -DUSE_READLINE
|
||||
#
|
||||
#READLINE_LIB=
|
||||
#READLINE_LIB= -L/usr/gnu/lib -lreadline -lhistory -lncurses
|
||||
#READLINE_LIB= -L/usr/local/lib -lreadline -lhistory -lncurses
|
||||
#READLINE_LIB= -L${PREFIX}/lib -lreadline -lhistory -lncurses
|
||||
ifeq ($(target),Darwin)
|
||||
# homebrew installs readline & history libs in /usr/local/opt/readline/lib
|
||||
READLINE_LIB= -L/usr/local/opt/readline/lib -lreadline -lhistory -lncurses
|
||||
# homebrew installs readline & history libs in ${PREFIX}/opt/readline/lib
|
||||
READLINE_LIB= -L${PREFIX}/opt/readline/lib -lreadline -lhistory -lncurses
|
||||
else
|
||||
READLINE_LIB= -lreadline -lhistory -lncurses
|
||||
endif
|
||||
#
|
||||
ifeq ($(target),Darwin)
|
||||
# homebrew installs readline & history *.h under /usr/local/opt/readline/include
|
||||
READLINE_INCLUDE= -I/usr/local/opt/readline/include
|
||||
# homebrew installs readline & history *.h under ${PREFIX}/opt/readline/include
|
||||
READLINE_INCLUDE= -I${PREFIX}/opt/readline/include
|
||||
else
|
||||
READLINE_INCLUDE=
|
||||
endif
|
||||
#READLINE_INCLUDE= -I/usr/gnu/include
|
||||
#READLINE_INCLUDE= -I/usr/local/include
|
||||
|
||||
# Where man pages are installed
|
||||
#
|
||||
# Under macOS, we cannot modify /usr/share/man.
|
||||
#
|
||||
MANDIR= /usr/local/man/man1
|
||||
#READLINE_INCLUDE= -I${PREFIX}/include
|
||||
|
||||
# Normally certain files depend on the Makefile. If the Makefile is
|
||||
# changed, then certain steps should be redone. If MAKE_FILE is
|
||||
@@ -265,9 +256,9 @@ XVAR= \
|
||||
EXT='${EXT}' \
|
||||
H='${H}' \
|
||||
MAKE_FILE='${MAKE_FILE}' \
|
||||
MANDIR='${MANDIR}' \
|
||||
NROFF='${NROFF}' \
|
||||
Q='${Q}' \
|
||||
PREFIX='${PREFIX}' \
|
||||
READLINE_INCLUDE='${READLINE_INCLUDE}' \
|
||||
READLINE_LIB='${READLINE_LIB}' \
|
||||
RPM_TOP='${RPM_TOP}' \
|
||||
@@ -757,6 +748,11 @@ Makefile.simple:
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
custom/Makefile.simple:
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule start =-=-=-=-='
|
||||
${Q} ${MAKE} ${XARG} -f ${MAKE_FILE} $@ ${XVAR}
|
||||
${V} echo '=-=-=-=-= private Makefile $@ rule end =-=-=-=-='
|
||||
|
||||
|
||||
##
|
||||
#
|
||||
|
1
Makefile.local
Normal file
1
Makefile.local
Normal file
@@ -0,0 +1 @@
|
||||
# Add below to override Makefile values (using :=) as in: HAVE_STRING_H:= YES
|
451
Makefile.ship
451
Makefile.ship
File diff suppressed because it is too large
Load Diff
@@ -126,7 +126,7 @@ recommends the following settings:
|
||||
CATDIR= /dev/env/DJDIR/man/cat1
|
||||
NROFF= groff
|
||||
CALCPATH= .;./cal;~/.cal;${CALC_SHAREDIR};${CUSTOMCALDIR}
|
||||
CALCRC= ${CALC_SHAREDIR}/startup;~/.calcrc;./.calcinit
|
||||
CALCRC= ./.calcinit;~/.calcrc;${CALC_SHAREDIR}/startup
|
||||
CALCPAGER= less.exe -ci
|
||||
DEBUG= -O2 -gstabs+ -DWINDOZ
|
||||
|
||||
|
24
byteswap.c
24
byteswap.c
@@ -126,8 +126,8 @@ swap_b8_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
* swap or copy the rest of the ZVALUE elements
|
||||
*/
|
||||
if (all) {
|
||||
dest->len = (LEN)SWAP_B8_IN_LEN(&dest->len, &src->len);
|
||||
dest->sign = (BOOL)SWAP_B8_IN_BOOL(&dest->sign, &src->sign);
|
||||
SWAP_B8_IN_LEN(&dest->len, &src->len);
|
||||
SWAP_B8_IN_BOOL(&dest->sign, &src->sign);
|
||||
} else {
|
||||
dest->len = src->len;
|
||||
dest->sign = src->sign;
|
||||
@@ -192,7 +192,7 @@ swap_b8_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
* swap or copy the rest of the NUMBER elements
|
||||
*/
|
||||
if (all) {
|
||||
dest->links = (long)SWAP_B8_IN_LONG(&dest->links, &src->links);
|
||||
SWAP_B8_IN_LONG(&dest->links, &src->links);
|
||||
} else {
|
||||
dest->links = src->links;
|
||||
}
|
||||
@@ -256,7 +256,7 @@ swap_b8_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all)
|
||||
* swap or copy the rest of the NUMBER elements
|
||||
*/
|
||||
if (all) {
|
||||
dest->links = (long)SWAP_B8_IN_LONG(&dest->links, &src->links);
|
||||
SWAP_B8_IN_LONG(&dest->links, &src->links);
|
||||
} else {
|
||||
dest->links = src->links;
|
||||
}
|
||||
@@ -361,8 +361,8 @@ swap_b16_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
* swap or copy the rest of the ZVALUE elements
|
||||
*/
|
||||
if (all) {
|
||||
dest->len = (LEN)SWAP_B16_IN_LEN(&dest->len, &src->len);
|
||||
dest->sign = (BOOL)SWAP_B16_IN_BOOL(&dest->sign, &src->sign);
|
||||
SWAP_B16_IN_LEN(&dest->len, &src->len);
|
||||
SWAP_B16_IN_BOOL(&dest->sign, &src->sign);
|
||||
} else {
|
||||
dest->len = src->len;
|
||||
dest->sign = src->sign;
|
||||
@@ -427,7 +427,7 @@ swap_b16_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
* swap or copy the rest of the NUMBER elements
|
||||
*/
|
||||
if (all) {
|
||||
dest->links = (long)SWAP_B16_IN_LONG(&dest->links, &src->links);
|
||||
SWAP_B16_IN_LONG(&dest->links, &src->links);
|
||||
} else {
|
||||
dest->links = src->links;
|
||||
}
|
||||
@@ -491,7 +491,7 @@ swap_b16_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all)
|
||||
* swap or copy the rest of the NUMBER elements
|
||||
*/
|
||||
if (all) {
|
||||
dest->links = (long)SWAP_B16_IN_LONG(&dest->links, &src->links);
|
||||
SWAP_B16_IN_LONG(&dest->links, &src->links);
|
||||
} else {
|
||||
dest->links = src->links;
|
||||
}
|
||||
@@ -557,8 +557,8 @@ swap_HALF_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all)
|
||||
* swap or copy the rest of the ZVALUE elements
|
||||
*/
|
||||
if (all) {
|
||||
dest->len = (LEN)SWAP_HALF_IN_LEN(&dest->len, &src->len);
|
||||
dest->sign = (BOOL)SWAP_HALF_IN_BOOL(&dest->sign, &src->sign);
|
||||
SWAP_HALF_IN_LEN(&dest->len, &src->len);
|
||||
SWAP_HALF_IN_BOOL(&dest->sign, &src->sign);
|
||||
} else {
|
||||
dest->len = src->len;
|
||||
dest->sign = src->sign;
|
||||
@@ -623,7 +623,7 @@ swap_HALF_in_NUMBER(NUMBER *dest, NUMBER *src, BOOL all)
|
||||
* swap or copy the rest of the NUMBER elements
|
||||
*/
|
||||
if (all) {
|
||||
dest->links = (long)SWAP_HALF_IN_LONG(&dest->links,&src->links);
|
||||
SWAP_HALF_IN_LONG(&dest->links, &src->links);
|
||||
} else {
|
||||
dest->links = src->links;
|
||||
}
|
||||
@@ -687,7 +687,7 @@ swap_HALF_in_COMPLEX(COMPLEX *dest, COMPLEX *src, BOOL all)
|
||||
* swap or copy the rest of the NUMBER elements
|
||||
*/
|
||||
if (all) {
|
||||
dest->links = (long)SWAP_HALF_IN_LONG(&dest->links,&src->links);
|
||||
SWAP_HALF_IN_LONG(&dest->links, &src->links);
|
||||
} else {
|
||||
dest->links = src->links;
|
||||
}
|
||||
|
80
cal/Makefile
80
cal/Makefile
@@ -4,6 +4,14 @@
|
||||
#
|
||||
# Copyright (C) 1999-2006,2017,2021 Landon Curt Noll
|
||||
#
|
||||
# SRC: cal/Makefile
|
||||
#
|
||||
# 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.
|
||||
@@ -31,7 +39,7 @@
|
||||
# The shell used by this Makefile
|
||||
#
|
||||
# On some systems, /bin/sh is a rather reduced shell with
|
||||
# deprecated behavor.
|
||||
# deprecated behavior.
|
||||
#
|
||||
# If your system has a up to date, bash shell, then
|
||||
# you may wish to use:
|
||||
@@ -39,7 +47,7 @@
|
||||
# SHELL= /bin/bash
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point wehre is cannot be depended on.
|
||||
# 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:
|
||||
#
|
||||
@@ -55,6 +63,36 @@ SHELL= /bin/sh
|
||||
# a default here just in case you want to build from this directory.
|
||||
####
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
@@ -84,11 +122,11 @@ TOP_MAKE_FILE= Makefile
|
||||
# INCDIR= /usr/include
|
||||
#
|
||||
|
||||
#INCDIR= /usr/local/include
|
||||
#INCDIR= ${PREFIX}/include
|
||||
#INCDIR= /dev/env/DJDIR/include
|
||||
INCDIR= /usr/include
|
||||
|
||||
# where to install calc realted things
|
||||
# where to install calc related things
|
||||
#
|
||||
# ${BINDIR} where to install calc binary files
|
||||
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||
@@ -110,15 +148,15 @@ INCDIR= /usr/include
|
||||
# LIBDIR= /usr/lib
|
||||
# CALC_SHAREDIR= /usr/share/calc
|
||||
#
|
||||
#BINDIR= /usr/local/bin
|
||||
#BINDIR= ${PREFIX}/bin
|
||||
#BINDIR= /dev/env/DJDIR/bin
|
||||
BINDIR= /usr/bin
|
||||
|
||||
#LIBDIR= /usr/local/lib
|
||||
#LIBDIR= ${PREFIX}/lib
|
||||
#LIBDIR= /dev/env/DJDIR/lib
|
||||
LIBDIR= /usr/lib
|
||||
|
||||
#CALC_SHAREDIR= /usr/local/lib/calc
|
||||
#CALC_SHAREDIR= ${PREFIX}/lib/calc
|
||||
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||
CALC_SHAREDIR= /usr/share/calc
|
||||
|
||||
@@ -176,11 +214,35 @@ T=
|
||||
|
||||
# Makefile debug
|
||||
#
|
||||
# Q=@ do not echo internal makefile actions (quiet mode)
|
||||
# Q= echo internal makefile actions (debug / verbose mode)
|
||||
# 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=@
|
||||
|
||||
# standard tools
|
||||
#
|
||||
|
334
cal/regress.cal
334
cal/regress.cal
@@ -1881,96 +1881,298 @@ define test_mode()
|
||||
vrfy(tmp == "octal", '1620: tmp == "octal"');
|
||||
vrfy(base() == 2, '1621: base() == 2');
|
||||
|
||||
tmp = config("mode", "real");
|
||||
print '1622: tmp = config("mode", "real")';
|
||||
tmp = config("mode", "eng");
|
||||
print '1622: tmp = config("mode", "eng")';
|
||||
vrfy(tmp == "binary", '1623: tmp == "binary"');
|
||||
vrfy(base() == 1000, '1624: base() == 1000');
|
||||
|
||||
tmp = config("mode", "real");
|
||||
print '1625: tmp = config("mode", "real")';
|
||||
vrfy(tmp == "engineering", '1626: tmp == "engineering"');
|
||||
|
||||
tmp = base(1/3);
|
||||
print '1624: tmp = base(1/3)';
|
||||
print '1627: tmp = base(1/3)';
|
||||
vrfy(config("mode") == "fraction",
|
||||
'1625: config("mode") == "fraction"');
|
||||
'1628: config("mode") == "fraction"');
|
||||
|
||||
tmp = base(-10);
|
||||
print '1626: tmp = base(-10)';
|
||||
print '1629: tmp = base(-10)';
|
||||
vrfy(config("mode") == "integer",
|
||||
'1627: config("mode") == "integer"');
|
||||
'1630: config("mode") == "integer"');
|
||||
|
||||
tmp = base(10);
|
||||
print '1628: tmp = base(10)';
|
||||
vrfy(config("mode") == "real", '1629: config("mode") == "real"');
|
||||
print '1631: tmp = base(10)';
|
||||
vrfy(config("mode") == "real", '1632: config("mode") == "real"');
|
||||
|
||||
tmp = base(1e20);
|
||||
print '1630: tmp = base(1e20)';
|
||||
print '1633: tmp = base(1e20)';
|
||||
vrfy(config("mode") == "scientific",
|
||||
'1631: config("mode") == "scientific"');
|
||||
'1634: config("mode") == "scientific"');
|
||||
|
||||
tmp = base(16);
|
||||
print '1632: tmp = base(16)';
|
||||
print '1635: tmp = base(16)';
|
||||
vrfy(config("mode") == "hexadecimal", \
|
||||
'1633: config("mode") == "hexadecimal"');
|
||||
'1636: config("mode") == "hexadecimal"');
|
||||
|
||||
tmp = base(8);
|
||||
print '1634: tmp = base(8)';
|
||||
vrfy(config("mode") == "octal", '1635: config("mode") == "octal"');
|
||||
print '1637: tmp = base(8)';
|
||||
vrfy(config("mode") == "octal", '1638: config("mode") == "octal"');
|
||||
|
||||
tmp = base(2);
|
||||
print '1636: tmp = base(2)';
|
||||
vrfy(config("mode") == "binary",'1637: config("mode") == "binary"');
|
||||
print '1639: tmp = base(2)';
|
||||
vrfy(config("mode") == "binary",'1640: config("mode") == "binary"');
|
||||
|
||||
tmp = base(1000);
|
||||
print '1641: tmp = base(1000)';
|
||||
vrfy(config("mode") == "engineering",
|
||||
'1642: config("mode") == "engineering"');
|
||||
|
||||
tmp = base(1/3);
|
||||
print '1643: tmp = base(1/3)';
|
||||
vrfy(str(0x80000000) == "2147483648", \
|
||||
'1644: str(0x8000000) == \"2147483648\"');
|
||||
vrfy(str(0xffffffff) == "4294967295", \
|
||||
'1645: str(0xffffffff) == \"4294967295\"');
|
||||
vrfy(str(3e9) == "3000000000", \
|
||||
'1646: str(3e9) == \"3000000000\"');
|
||||
vrfy(str(1/3) == "1/3", \
|
||||
'1647: str(1/3) == \"1/3\"');
|
||||
vrfy(str(2e8) == "200000000", \
|
||||
'1648: str(2e8) == \"200000000"');
|
||||
vrfy(str(200e6) == "200000000", \
|
||||
'1649: str(200e6) == \"200000000"');
|
||||
vrfy(str(0b100111) == "39", \
|
||||
'1650: str(0b100111) == \"39"');
|
||||
vrfy(str(07543) == "3939", \
|
||||
'1651: str(07543) == \"3939"');
|
||||
vrfy(str(7543) == "7543", \
|
||||
'1652: str(7543) == \"7543"');
|
||||
|
||||
tmp = base(8);
|
||||
print '1638: tmp = base(8)';
|
||||
print '1653: tmp = base(8)';
|
||||
vrfy(str(0x80000000) == "020000000000", \
|
||||
'1639: str(0x8000000) == \"020000000000\"');
|
||||
'1654: str(0x8000000) == \"020000000000\"');
|
||||
vrfy(str(0xffffffff) == "037777777777", \
|
||||
'1640: str(0xffffffff) == \"037777777777\"');
|
||||
'1655: str(0xffffffff) == \"037777777777\"');
|
||||
vrfy(str(3e9) == "026264057000", \
|
||||
'1641: str(3e9) == \"026264057000\"');
|
||||
'1656: str(3e9) == \"026264057000\"');
|
||||
vrfy(str(1/3) == "1/3", \
|
||||
'1657: str(1/3) == \"1/3\"');
|
||||
vrfy(str(2e8) == "01372741000", \
|
||||
'1658: str(2e8) == \"01372741000"');
|
||||
vrfy(str(200e6) == "01372741000", \
|
||||
'1659: str(200e6) == \"01372741000"');
|
||||
vrfy(str(0b100111) == "047", \
|
||||
'1660: str(0b100111) == \"047"');
|
||||
vrfy(str(07543) == "07543", \
|
||||
'1661: str(07543) == \"07543"');
|
||||
vrfy(str(7543) == "016567", \
|
||||
'1662: str(7543) == \"016567"');
|
||||
|
||||
tmp = base(16);
|
||||
print '1642: tmp = base(16)';
|
||||
print '1663: tmp = base(16)';
|
||||
vrfy(str(0x80000000) == "0x80000000", \
|
||||
'1643: str(0x8000000) == \"0x80000000\"');
|
||||
'1664: str(0x8000000) == \"0x80000000\"');
|
||||
vrfy(str(0xffffffff) == "0xffffffff", \
|
||||
'1644: str(0xffffffff) == \"0xffffffff\"');
|
||||
'1665: str(0xffffffff) == \"0xffffffff\"');
|
||||
vrfy(str(3e9) == "0xb2d05e00", \
|
||||
'1645: str(3e9) == \"0xb2d05e00\"');
|
||||
'1666: str(3e9) == \"0xb2d05e00\"');
|
||||
vrfy(str(1/3) == "1/3", \
|
||||
'1667: str(1/3) == \"1/3\"');
|
||||
vrfy(str(2e8) == "0xbebc200", \
|
||||
'1668: str(2e8) == \"0xbebc200"');
|
||||
vrfy(str(200e6) == "0xbebc200", \
|
||||
'1669: str(200e6) == \"0xbebc200"');
|
||||
vrfy(str(0b100111) == "0x27", \
|
||||
'1670: str(0b100111) == \"0x27"');
|
||||
vrfy(str(07543) == "0xf63", \
|
||||
'1671: str(07543) == \"0xf63"');
|
||||
vrfy(str(7543) == "0x1d77", \
|
||||
'1672: str(7543) == \"0x1d77"');
|
||||
|
||||
tmp = base(2);
|
||||
print '1673: tmp = base(2)';
|
||||
vrfy(str(0x80000000) == "0b10000000000000000000000000000000", \
|
||||
'1674: str(0x8000000) == \"0b10000000000000000000000000000000\"');
|
||||
vrfy(str(0xffffffff) == "0b11111111111111111111111111111111", \
|
||||
'1675: str(0xffffffff) == \"0b11111111111111111111111111111111\"');
|
||||
vrfy(str(3e9) == "0b10110010110100000101111000000000", \
|
||||
'1676: str(3e9) == \"0b10110010110100000101111000000000\"');
|
||||
vrfy(str(1/3) == "1/0b11", \
|
||||
'1677: str(1/3) == \"1/0b11\"');
|
||||
vrfy(str(2e8) == "0b1011111010111100001000000000", \
|
||||
'1678: str(2e8) == \"0b1011111010111100001000000000"');
|
||||
vrfy(str(200e6) == "0b1011111010111100001000000000", \
|
||||
'1679: str(200e6) == \"0b1011111010111100001000000000"');
|
||||
vrfy(str(0b100111) == "0b100111", \
|
||||
'1680: str(0b100111) == \"0b100111"');
|
||||
vrfy(str(07543) == "0b111101100011", \
|
||||
'1681: str(07543) == \"0b111101100011"');
|
||||
vrfy(str(7543) == "0b1110101110111", \
|
||||
'1682: str(7543) == \"0b1110101110111"');
|
||||
|
||||
tmp = base(1e20);
|
||||
print '1683: tmp = base(1e20)';
|
||||
vrfy(str(0x80000000) == "2.147483648e9", \
|
||||
'1684: str(0x8000000) == \"2.147483648e9\"');
|
||||
vrfy(str(0xffffffff) == "4.294967295e9", \
|
||||
'1685: str(0xffffffff) == \"4.294967295e9\"');
|
||||
vrfy(str(3e9) == "3e9", \
|
||||
'1686: str(3e9) == \"3e9\"');
|
||||
vrfy(str(1/3) == "~3.33333333333333333333e-1", \
|
||||
'1687: str(1/3) == \"~3.33333333333333333333e-1\"');
|
||||
vrfy(str(2e8) == "2e8", \
|
||||
'1688: str(2e8) == \"2e8"');
|
||||
vrfy(str(200e6) == "2e8", \
|
||||
'1689: str(200e6) == \"2e8"');
|
||||
vrfy(str(0b100111) == "3.9e1", \
|
||||
'1690: str(0b100111) == \"3.9e1"');
|
||||
vrfy(str(07543) == "3.939e3", \
|
||||
'1691: str(07543) == \"3.939e3"');
|
||||
vrfy(str(7543) == "7.543e3", \
|
||||
'1692: str(7543) == \"7.543e3"');
|
||||
|
||||
tmp = base(1000);
|
||||
print '1693: tmp = base(1000)';
|
||||
vrfy(str(0x80000000) == "2.147483648e9", \
|
||||
'1694: str(0x8000000) == \"2.147483648e9"');
|
||||
vrfy(str(0xffffffff) == "4.294967295e9", \
|
||||
'1695: str(0xffffffff) == \"4.294967295e9\"');
|
||||
vrfy(str(3e9) == "3e9", \
|
||||
'1696: str(3e9) == \"3e9\"');
|
||||
vrfy(str(1/3) == "~333.33333333333333333333e-3", \
|
||||
'1697: str(1/3) == \"~333.33333333333333333333e-3\"');
|
||||
vrfy(str(2e8) == "200e6", \
|
||||
'1698: str(2e8) == \"200e6"');
|
||||
vrfy(str(200e6) == "200e6", \
|
||||
'1699: str(200e6) == \"200e6"');
|
||||
vrfy(str(0b100111) == "39", \
|
||||
'1700: str(0b100111) == \"39"');
|
||||
vrfy(str(07543) == "3.939e3", \
|
||||
'1701: str(07543) == \"3.939e3"');
|
||||
vrfy(str(7543) == "7.543e3", \
|
||||
'1702: str(7543) == \"7.543e3"');
|
||||
|
||||
tmp = base(-10);
|
||||
print '1703: tmp = base(-10)';
|
||||
vrfy(str(0x80000000) == "2147483648", \
|
||||
'1704: str(0x8000000) == \"2147483648\"');
|
||||
vrfy(str(0xffffffff) == "4294967295", \
|
||||
'1705: str(0xffffffff) == \"4294967295\"');
|
||||
vrfy(str(3e9) == "3000000000", \
|
||||
'1706: str(3e9) == \"3000000000\"');
|
||||
vrfy(str(1/3) == "~0", \
|
||||
'1707: str(1/3) == \"~0\"');
|
||||
vrfy(str(2e8) == "200000000", \
|
||||
'1708: str(2e8) == \"200000000"');
|
||||
vrfy(str(200e6) == "200000000", \
|
||||
'1709: str(200e6) == \"200000000"');
|
||||
vrfy(str(0b100111) == "39", \
|
||||
'1710: str(0b100111) == \"39"');
|
||||
vrfy(str(07543) == "3939", \
|
||||
'1711: str(07543) == \"3939"');
|
||||
vrfy(str(7543) == "7543", \
|
||||
'1712: str(7543) == \"7543"');
|
||||
|
||||
tmp = base(10);
|
||||
print '1646: tmp = base(10)';
|
||||
vrfy(config("mode") == "real", \
|
||||
'1647: config("mode") == "real"');
|
||||
|
||||
print '1713: tmp = base(10)';
|
||||
vrfy(str(0x80000000) == "2147483648", \
|
||||
'1648: str(0x80000000) == \"2147483648\"');
|
||||
'1714: str(0x8000000) == \"2147483648\"');
|
||||
vrfy(str(0xffffffff) == "4294967295", \
|
||||
'1649: str(0xffffffff) == \"4294967295\"');
|
||||
'1715: str(0xffffffff) == \"4294967295\"');
|
||||
vrfy(str(3e9) == "3000000000", \
|
||||
'1650: str(3e9) == \"3000000000\"');
|
||||
'1716: str(3e9) == \"3000000000\"');
|
||||
vrfy(str(1/3) == "~0.33333333333333333333", \
|
||||
'1717: str(1/3) == \"~0.33333333333333333333"');
|
||||
vrfy(str(2e8) == "200000000", \
|
||||
'1718: str(2e8) == \"200000000"');
|
||||
vrfy(str(200e6) == "200000000", \
|
||||
'1719: str(200e6) == \"200000000"');
|
||||
vrfy(str(0b100111) == "39", \
|
||||
'1720: str(0b100111) == \"39"');
|
||||
vrfy(str(07543) == "3939", \
|
||||
'1721: str(07543) == \"3939"');
|
||||
vrfy(str(7543) == "7543", \
|
||||
'1722: str(7543) == \"7543"');
|
||||
|
||||
/* test base2() functionality */
|
||||
vrfy(base2() == 0, '1651: base2() == 0');
|
||||
vrfy(base2(0) == 0, '1652: base2(0) == 0');
|
||||
vrfy(base2() == 0, '1653: base2() == 0');
|
||||
vrfy(base2(16) == 0, '1654: base2(16) == 0');
|
||||
vrfy(base2() == 16, '1655: base2() == 16');
|
||||
vrfy(str(3e9) == "3000000000 /* 0xb2d05e00 */",
|
||||
'1656: str(3e9) == "3000000000 /* 0xb2d05e00 */"');
|
||||
vrfy(base2(1/3) == 16, '1657: base2(16) == 16');
|
||||
vrfy(str(23209) == "23209 /* 23209 */",
|
||||
'1658: str(23209) == "23209 /* 23209 */"');
|
||||
vrfy(str(3/2) == "1.5 /* 3/2 */",
|
||||
'1659: str(3/2) == "1.5 /* 3/2 */"');
|
||||
vrfy(base() == 10, '1660: base() == 10');
|
||||
vrfy(base2(0) == 1/3, '1661: base2(0) == 1/3');
|
||||
vrfy(base2() == 0, '1723: base2() == 0');
|
||||
vrfy(base2(0) == 0, '1724: base2(0) == 0');
|
||||
vrfy(base2() == 0, '1725: base2() == 0');
|
||||
|
||||
print '1662: Ending mode/base test';
|
||||
vrfy(base2(16) == 0, '1726: base2(16) == 0');
|
||||
vrfy(base2() == 16, '1727: base2() == 16');
|
||||
vrfy(str(3e9) == "3000000000 /* 0xb2d05e00 */",
|
||||
'1728: str(3e9) == "3000000000 /* 0xb2d05e00 */"');
|
||||
|
||||
vrfy(base2(1/3) == 16, '1728: base2(16) == 16');
|
||||
vrfy(base2() == 1/3, '1729: base2() == 1/3');
|
||||
vrfy(str(23209) == "23209 /* 23209 */",
|
||||
'1730: str(23209) == "23209 /* 23209 */"');
|
||||
vrfy(str(3/2) == "1.5 /* 3/2 */",
|
||||
'1731: str(3/2) == "1.5 /* 3/2 */"');
|
||||
|
||||
vrfy(base2(8) == 1/3, '1732: base2(8) == 1/3');
|
||||
vrfy(base2() == 8, '1733: base2() == 8');
|
||||
vrfy(str(23209) == "23209 /* 055251 */",
|
||||
'1734: str(23209) == "23209 /* 055251 */"');
|
||||
vrfy(str(3/2) == "1.5 /* 3/2 */",
|
||||
'1735: str(3/2) == "1.5 /* 3/2 */"');
|
||||
|
||||
vrfy(base2(2) == 8, '1736: base2(2) == 8');
|
||||
vrfy(base2() == 2, '1737: base2() == 2');
|
||||
vrfy(str(23209) == "23209 /* 0b101101010101001 */",
|
||||
'1738: str(23209) == "23209 /* 0b101101010101001 */"');
|
||||
vrfy(str(3/2) == "1.5 /* 0b11/0b10 */",
|
||||
'1739: str(3/2) == "1.5 /* 0b11/0b10 */"');
|
||||
|
||||
vrfy(base2(1e20) == 2, '1740: base2(1e20) == 2');
|
||||
vrfy(base2() == 1e20, '1741: base2() == 1e20');
|
||||
vrfy(str(23209) == "23209 /* 2.3209e4 */",
|
||||
'1742: str(23209) == "23209 /* 2.3209e4 */"');
|
||||
vrfy(str(3/2) == "1.5 /* 1.5 */",
|
||||
'1743: str(3/2) == "1.5 /* 1.5 */"');
|
||||
|
||||
vrfy(base2(-10) == 1e20, '1744: base2(-10) == 1e20');
|
||||
vrfy(base2() == -10, '1745: base2() == -10');
|
||||
vrfy(str(23209) == "23209 /* 23209 */",
|
||||
'1746: str(23209) == "23209 /* 23209 */"');
|
||||
vrfy(str(3/2) == "1.5 /* ~2 */",
|
||||
'1747: str(3/2) == "1.5 /* ~2 */"');
|
||||
|
||||
vrfy(base2(1000) == -10, '1748: base2(1000) == -1000');
|
||||
vrfy(base2() == 1000, '1749: base2() == 1000');
|
||||
vrfy(str(23209) == "23209 /* 23.209e3 */",
|
||||
'1750: str(23209) == "23209 /* 23.209e3 */"');
|
||||
vrfy(str(3/2) == "1.5 /* 1.5 */",
|
||||
'1751: str(3/2) == "1.5 /* 1.5 */"');
|
||||
|
||||
vrfy(base2(10) == 1000, '1752: base2(10) == 1000');
|
||||
vrfy(base2() == 10, '1753: base2() == 10');
|
||||
vrfy(str(23209) == "23209 /* 23209 */",
|
||||
'1754: str(23209) == "23209 /* 23209 */"');
|
||||
vrfy(str(3/2) == "1.5 /* 1.5 */",
|
||||
'1755: str(3/2) == "1.5 /* 1.5 */"');
|
||||
|
||||
vrfy(base2(0) == 10, '1756: base2(0) == 10');
|
||||
vrfy(base2() == 0, '1757: base2() == 0');
|
||||
vrfy(str(23209) == "23209",
|
||||
'1758: str(23209) == "23209"');
|
||||
vrfy(str(3/2) == "1.5",
|
||||
'1759: str(3/2) == "1.5"');
|
||||
|
||||
vrfy(base() == 10, '1760: base() == 10');
|
||||
vrfy(base2() == 0, '1761: base2() == 0');
|
||||
|
||||
print '1762: Ending mode/base test';
|
||||
}
|
||||
print '026: parsed test_mode()';
|
||||
|
||||
|
||||
/*
|
||||
* The 1700's contain tests for reading resource files. These tests are
|
||||
* done inline near the bottom.
|
||||
* The 1780's and 1790's contain tests for reading resource files.
|
||||
*
|
||||
* These tests are done inline near the bottom.
|
||||
*/
|
||||
|
||||
|
||||
@@ -7635,31 +7837,31 @@ print;
|
||||
return test_mode();
|
||||
print;
|
||||
|
||||
print '1700: Beginning read test';
|
||||
print '1780: Beginning read test';
|
||||
value = 0;
|
||||
vrfy(value == 0, '1701: value == 0');
|
||||
vrfy(value == 0, '1781: value == 0');
|
||||
read "test1700";
|
||||
print '1702: read "test1700";';
|
||||
vrfy(value == 1, '1703: value == 1');
|
||||
print '1782: read "test1700";';
|
||||
vrfy(value == 1, '1783: value == 1');
|
||||
read -once "test1700";
|
||||
print '1704: read -once "test1700";';
|
||||
vrfy(value == 1, '1705: value == 1');
|
||||
print '1784: read -once "test1700";';
|
||||
vrfy(value == 1, '1785: value == 1');
|
||||
read "test1700.cal";
|
||||
print '1706: read "test1700.cal";';
|
||||
vrfy(value == 2, '1707: value == 2');
|
||||
read -once "test1700.cal";
|
||||
print '1708: read -once "test1700.cal";';
|
||||
vrfy(value == 2, '1709: value == 2');
|
||||
print '1786: read "test1700.cal";';
|
||||
vrfy(value == 2, '1787: value == 2');
|
||||
read -once "test1700.cal"
|
||||
print '1788: read -once "test1700.cal";';
|
||||
vrfy(value == 2, '1789: value == 2');
|
||||
read "test1700.cal";
|
||||
print '1710: read "test1700.cal";';
|
||||
vrfy(value == 3, '1711: value == 3');
|
||||
print '1790: read "test1700.cal";';
|
||||
vrfy(value == 3, '1791: value == 3');
|
||||
{++value;} read "test1700.cal";
|
||||
print '1712: {++value;} read "test1700.cal";';
|
||||
vrfy(value == 5, '1713: value == 5');
|
||||
print '1792: {++value;} read "test1700.cal";';
|
||||
vrfy(value == 5, '1793: value == 5');
|
||||
{++value;} read -once "test1700.cal";
|
||||
print '1714: {++value;} read -once "test1700.cal";';
|
||||
vrfy(value == 6, '1715: value == 6');
|
||||
print '1716: Ending read test';
|
||||
print '1794: {++value;} read -once "test1700.cal";';
|
||||
vrfy(value == 6, '1795: value == 6');
|
||||
print '1796: Ending read test';
|
||||
|
||||
print;
|
||||
return test_obj();
|
||||
|
46
calc.c
46
calc.c
@@ -123,6 +123,11 @@ main(int argc, char **argv)
|
||||
* parse args
|
||||
*/
|
||||
program = argv[0];
|
||||
script_name = strdup(argv[0]);
|
||||
if (script_name == NULL) {
|
||||
fprintf(stderr, "%s: failed to strdup(argv[0])\n", program);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
cmdbuf[0] = '\0';
|
||||
cmdlen = 0;
|
||||
@@ -399,19 +404,35 @@ main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
bp = cmdbuf + cmdlen;
|
||||
/*
|
||||
* duplicate -f filename arg
|
||||
* as a new script_name value
|
||||
*/
|
||||
if (script_name != NULL) {
|
||||
free(script_name);
|
||||
}
|
||||
script_name = NULL;
|
||||
script_name = strdup(cp);
|
||||
if (script_name == NULL) {
|
||||
fprintf(stderr,
|
||||
"strdup(-f argument)"
|
||||
"failed\n");
|
||||
exit(17);
|
||||
}
|
||||
/* process -f filename arg */
|
||||
if (haveendstr) {
|
||||
len = strlen(cp);
|
||||
if (len == 0) {
|
||||
fprintf(stderr,
|
||||
"Null"
|
||||
" filename!");
|
||||
exit(17);
|
||||
" filename!\n");
|
||||
exit(18);
|
||||
}
|
||||
if (cmdlen + len + 2 > MAXCMD) {
|
||||
fprintf(stderr,
|
||||
"Commands too"
|
||||
" long");
|
||||
exit(18);
|
||||
" long\n");
|
||||
exit(19);
|
||||
}
|
||||
/* XXX - what if *cp = '\''? */
|
||||
*bp++ = '\'';
|
||||
@@ -425,8 +446,8 @@ main(int argc, char **argv)
|
||||
if (cmdlen > MAXCMD) {
|
||||
fprintf(stderr,
|
||||
"Commands"
|
||||
" too long");
|
||||
exit(19);
|
||||
" too long\n");
|
||||
exit(20);
|
||||
}
|
||||
*bp++ = *cp++;
|
||||
cmdlen++;
|
||||
@@ -439,7 +460,10 @@ main(int argc, char **argv)
|
||||
*bp++ = ';';
|
||||
*bp = '\0';
|
||||
cmdlen++;
|
||||
s_flag = TRUE; /* -f implies -s */
|
||||
|
||||
/* -f implies -s */
|
||||
s_flag = TRUE;
|
||||
maxindex = index + 1;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
@@ -462,7 +486,7 @@ main(int argc, char **argv)
|
||||
"usage: %s ... -f filename\n"
|
||||
"1st cscript line: #/path/to/calc ... -s -f\n",
|
||||
program, program);
|
||||
exit(20);
|
||||
exit(21);
|
||||
}
|
||||
if (havearg)
|
||||
break;
|
||||
@@ -488,7 +512,7 @@ main(int argc, char **argv)
|
||||
fprintf(stderr,
|
||||
"%s: commands too long\n",
|
||||
program);
|
||||
exit(21);
|
||||
exit(22);
|
||||
}
|
||||
strlcpy(cmdbuf + cmdlen, cp, cplen+1);
|
||||
cmdbuf[newcmdlen] = '\0';
|
||||
@@ -511,7 +535,7 @@ main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
argc_value = argc - maxindex;
|
||||
argc_value = argc - maxindex + 1;
|
||||
argv_value = argv + maxindex;
|
||||
|
||||
/*
|
||||
@@ -799,7 +823,7 @@ calc_interrupt(char *fmt, ...)
|
||||
* don't call libcalc_call_me_last() -- we might loop
|
||||
* and besides ... this is an unusual internal error case
|
||||
*/
|
||||
exit(22);
|
||||
exit(24);
|
||||
}
|
||||
}
|
||||
|
||||
|
1
calc.h
1
calc.h
@@ -216,6 +216,7 @@ EXTERN int havecommands; /* TRUE if have cmd args) */
|
||||
EXTERN char *program; /* our name */
|
||||
EXTERN char *base_name; /* basename of our name */
|
||||
EXTERN char cmdbuf[]; /* command line expression */
|
||||
EXTERN char *script_name; /* program name or -f filename arg or NULL */
|
||||
|
||||
EXTERN int abortlevel; /* current level of aborts */
|
||||
EXTERN BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||
|
226
calc.man
226
calc.man
@@ -37,6 +37,7 @@ calc \- arbitrary precision calculator
|
||||
.RB [ -D\ \&calc_debug[:resource_debug[:user_debug]] ]
|
||||
.br
|
||||
.RB [ \-e ]
|
||||
.RB [ \-f\ \&filename ]
|
||||
.RB [ \-h ]
|
||||
.RB [ \-i ]
|
||||
.RB [ \-m\ \&mode ]
|
||||
@@ -50,11 +51,12 @@ calc \- arbitrary precision calculator
|
||||
.RB [ [\-\-]\ calc_cmd\ \&.\|.\|. ]
|
||||
.in -5n
|
||||
.sp
|
||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-s\fP \fB\-f\fP
|
||||
\fI#!${BINDIR}/calc\fP\ [optional_other_flags\ \&...] \fB\-f\fP
|
||||
|
||||
.PP
|
||||
|
||||
.SH DESCRIPTION
|
||||
\&
|
||||
.br
|
||||
CALC OPTIONS
|
||||
|
||||
.PP
|
||||
|
||||
.TP
|
||||
@@ -218,48 +220,55 @@ Ignore any environment variables on startup.
|
||||
The getenv() builtin will still return values, however.
|
||||
|
||||
.TP
|
||||
.B \-f
|
||||
.BR \-f " filename"
|
||||
This flag is normally only with calc shell scripts.
|
||||
.sp 1
|
||||
This flag is required when using calc in
|
||||
.BR "shell script mode" .
|
||||
It must be at the end of the initial
|
||||
.B #!
|
||||
line of the script
|
||||
and must be immediately preceded by the
|
||||
.B \-s
|
||||
flag.
|
||||
.sp 1
|
||||
If the first line of an executable file begins
|
||||
.B #!
|
||||
followed by the absolute pathname of the
|
||||
.B calc
|
||||
program and if the first line ends with the two flags
|
||||
.B \-s
|
||||
.B \-f
|
||||
as in:
|
||||
line of the script, as in:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-s\fP \fB\-f\fP
|
||||
\fI#!${BINDIR}/calc\fP\ [optional_other_flags\ \&...] \fB\-f\fP
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
the rest of the file will be processed in
|
||||
.BR "shell script mode" .
|
||||
|
||||
.sp 1
|
||||
A common flag to use, prior to the
|
||||
.B \-f
|
||||
on the #! line is the
|
||||
.B \-q
|
||||
flag.
|
||||
For example:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
\fI#!${BINDIR}/calc\fP \fB\-q\fP \fB\-f\fP
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
This allows the script to run independely of
|
||||
startup scripts.
|
||||
|
||||
.sp 1
|
||||
See
|
||||
.B "SHELL SCRIPT MODE"
|
||||
section of this man page
|
||||
below for details.
|
||||
.sp 1
|
||||
The actual form of this flag is:
|
||||
While the actual form of this flag is:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.B \-f
|
||||
.BR \-f
|
||||
filename
|
||||
.in -5n
|
||||
.sp 1
|
||||
On systems that treat an executable that begins with
|
||||
for systems that treat an executable that begins with
|
||||
.B #!
|
||||
as a script, the path of the executable is appended by the kernel
|
||||
as the final argument to the exec() system call.
|
||||
@@ -270,12 +279,13 @@ flag at the very end of the
|
||||
line.
|
||||
.sp 1
|
||||
It is possible use
|
||||
.B \-f\ filename
|
||||
.B \-f
|
||||
filename
|
||||
on the command line:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
\fIcalc\fP\ [other_flags\ \&...] \fB\-s\fP \fB\-f\fP filename
|
||||
\fIcalc\fP\ [optional_other_flags\ \&...] \fB\-f\fP filename
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
@@ -283,28 +293,14 @@ This will cause calc to process lines in
|
||||
.B filename
|
||||
in
|
||||
.BR "shell script mode" .
|
||||
.sp 1
|
||||
Use of
|
||||
.B \-f
|
||||
implies
|
||||
.BR \-s .
|
||||
However in a calc shell script,
|
||||
one must include
|
||||
.B \-f
|
||||
before
|
||||
.B \-s
|
||||
on the initial
|
||||
.B #!
|
||||
line.
|
||||
|
||||
.sp 1
|
||||
In addition,
|
||||
.B \-d
|
||||
and
|
||||
.B \-p
|
||||
are implied if
|
||||
.B \-i
|
||||
is not given.
|
||||
The use of
|
||||
.B \-f
|
||||
filename
|
||||
implies the
|
||||
.B \-s
|
||||
flag.
|
||||
|
||||
.TP
|
||||
.B \-h
|
||||
@@ -491,16 +487,16 @@ This is useful when entering negative values on the command line as in:
|
||||
.in +5n
|
||||
.nf
|
||||
calc \-p \-\- \-1 - -7
|
||||
.sp 1
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
|
||||
.PP
|
||||
|
||||
\&
|
||||
.br
|
||||
CALC COMMAND LINE
|
||||
.SH CALC COMMAND LINE
|
||||
|
||||
.PP
|
||||
|
||||
With no
|
||||
.I calc_cmd
|
||||
arguments,
|
||||
@@ -638,10 +634,10 @@ to parse interactive commands, flushes data on standard input.
|
||||
|
||||
.PP
|
||||
|
||||
\&
|
||||
.br
|
||||
CALC STARTUP FILES
|
||||
.SH CALC STARTUP FILES
|
||||
|
||||
.PP
|
||||
|
||||
Normally on startup,
|
||||
if the environment variable
|
||||
.B $CALCRC
|
||||
@@ -678,10 +674,12 @@ files is also disabled as if
|
||||
.B \-q
|
||||
was given.
|
||||
|
||||
\&
|
||||
.br
|
||||
CALC FILE SEARCH PATH
|
||||
.PP
|
||||
|
||||
.SH CALC FILE SEARCH PATH
|
||||
|
||||
.PP
|
||||
|
||||
If the environment variable
|
||||
.B $CALCPATH
|
||||
is undefined, or if it
|
||||
@@ -758,24 +756,24 @@ help config
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
|
||||
.PP
|
||||
|
||||
\&
|
||||
.br
|
||||
SHELL SCRIPT MODE
|
||||
.SH SHELL SCRIPT MODE
|
||||
|
||||
.PP
|
||||
|
||||
If the first line of an executable file begins
|
||||
.B #!
|
||||
followed by the absolute pathname of the
|
||||
.B calc
|
||||
program and the first line ends with the two flags
|
||||
.B \-s
|
||||
program and the first line ends with the flag
|
||||
.B \-f
|
||||
as in:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-s\fP \fB\-f\fP
|
||||
\fI#!${BINDIR}/calc\fP\ [optional_other_flags\ \&...] \fB\-f\fP
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
@@ -786,11 +784,11 @@ Note that
|
||||
.B \-f
|
||||
must at the end of the initial ``#!'' line.
|
||||
Any other optional
|
||||
.B "other_flags"
|
||||
.B "optional_other_flags"
|
||||
must come before
|
||||
the
|
||||
.B \-s
|
||||
.BR \-f .
|
||||
.B \-f
|
||||
flag.
|
||||
.sp 1
|
||||
In
|
||||
.B "shell script mode"
|
||||
@@ -799,7 +797,7 @@ executed as if they were in a file being processed by a read
|
||||
command, except that a "command" beginning with '#' followed by
|
||||
whitespace and ending at the next newline is treated as a comment.
|
||||
Any optional
|
||||
.B "other_flags"
|
||||
.B "optional_other_flags"
|
||||
will be parsed first followed by
|
||||
the later lines within the script itself.
|
||||
.sp 1
|
||||
@@ -821,7 +819,7 @@ the file
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
\fI#!${BINDIR}/calc\fP\ \&\fB\-q\fP \&\fB\-s\fP \fB\-f\fP
|
||||
\fI#!${BINDIR}/calc\fP\ \&\fB\-q\fP \fB\-f\fP
|
||||
|
||||
/* setup */
|
||||
argc = argv();
|
||||
@@ -894,12 +892,13 @@ whereas
|
||||
.in -5n
|
||||
.sp 1
|
||||
will not.
|
||||
|
||||
.PP
|
||||
|
||||
\&
|
||||
.br
|
||||
DATA TYPES
|
||||
.SH DATA TYPES
|
||||
|
||||
.PP
|
||||
|
||||
Fundamental builtin data types include integers, real numbers,
|
||||
rational numbers, complex numbers and strings.
|
||||
.PP
|
||||
@@ -922,12 +921,13 @@ help obj
|
||||
.br
|
||||
show objfuncs
|
||||
.in -1.0i
|
||||
|
||||
.PP
|
||||
|
||||
\&
|
||||
.br
|
||||
VARIABLES
|
||||
.SH VARIABLES
|
||||
|
||||
.PP
|
||||
|
||||
Variables in \fIcalc\fP are typeless.
|
||||
In other words, the fundamental type of a variable is determined by its content.
|
||||
Before a variable is assigned a value it has the value of zero.
|
||||
@@ -950,12 +950,13 @@ help list
|
||||
.br
|
||||
show globals
|
||||
.in -1.0i
|
||||
|
||||
.PP
|
||||
|
||||
\&
|
||||
.br
|
||||
INPUT/OUTPUT
|
||||
.SH INPUT/OUTPUT
|
||||
|
||||
.PP
|
||||
|
||||
A leading ``0x'' implies a hexadecimal value,
|
||||
a leading ``0b'' implies a binary value,
|
||||
and a ``0'' followed by a digit implies an octal value.
|
||||
@@ -985,12 +986,13 @@ command:
|
||||
.in 1.0i
|
||||
help file
|
||||
.in -1.0i
|
||||
|
||||
.PP
|
||||
|
||||
\&
|
||||
.br
|
||||
CALC LANGUAGE
|
||||
.SH CALC LANGUAGE
|
||||
|
||||
.PP
|
||||
|
||||
The \fIcalc\fP language is a C-like language.
|
||||
The language includes commands such as variable declarations,
|
||||
expressions, tests, labels, loops, file operations, function calls.
|
||||
@@ -1017,10 +1019,13 @@ help operator
|
||||
.br
|
||||
help config
|
||||
.in -1.0i
|
||||
|
||||
.PP
|
||||
|
||||
.SH FILES
|
||||
\&
|
||||
.br
|
||||
|
||||
.PP
|
||||
|
||||
.PD 0
|
||||
.TP 5
|
||||
${BINDIR}/calc
|
||||
@@ -1062,9 +1067,13 @@ custom resource files
|
||||
${CUSTOMHELPDIR}/*
|
||||
custom help files
|
||||
.sp 1
|
||||
|
||||
.PP
|
||||
|
||||
.SH ENVIRONMENT
|
||||
\&
|
||||
.br
|
||||
|
||||
.PP
|
||||
|
||||
.PD 0
|
||||
.TP 5
|
||||
CALCPATH
|
||||
@@ -1123,9 +1132,13 @@ Location of the calc custom help directory.
|
||||
.sp
|
||||
Default value: ${CUSTOMHELPDIR}
|
||||
.sp
|
||||
|
||||
.PP
|
||||
|
||||
.SH CREDIT
|
||||
\&
|
||||
.br
|
||||
|
||||
.PP
|
||||
|
||||
The main chunk of
|
||||
.B calc
|
||||
was written by David I. Bell.
|
||||
@@ -1154,10 +1167,13 @@ public domain arbitrarily precision routines which was posted
|
||||
to the net around 1984.
|
||||
By now, there is almost no recognizable
|
||||
code left from that original source.
|
||||
.sp
|
||||
|
||||
.PP
|
||||
|
||||
.SH "COPYING / CALC GNU LESSER GENERAL PUBLIC LICENSE"
|
||||
\&
|
||||
.sp
|
||||
|
||||
.PP
|
||||
|
||||
Calc is open software, and is
|
||||
covered under version 2.1 of the GNU Lesser General Public License.
|
||||
You are
|
||||
@@ -1217,10 +1233,13 @@ Copyright (C) 1999-2021 Landon Curt Noll
|
||||
.sp
|
||||
and is covered under version 2.1 GNU Lesser General
|
||||
Public License.
|
||||
.sp
|
||||
|
||||
.PP
|
||||
|
||||
.SH "CALC QUESTIONS"
|
||||
\&
|
||||
.br
|
||||
|
||||
.PP
|
||||
|
||||
If you have a simple general question about calc, send Email to:
|
||||
.sp
|
||||
.in +0.5i
|
||||
@@ -1276,11 +1295,13 @@ nor can we do your homework, nor can
|
||||
we do much more than answer short general questions about calc.
|
||||
.sp
|
||||
Please be patient as we cannot always respond to Email messages quickly.
|
||||
.sp
|
||||
|
||||
.PP
|
||||
|
||||
.SH "BUG REPORTS / BUG FIXES"
|
||||
\&
|
||||
.br
|
||||
.sp
|
||||
|
||||
.PP
|
||||
|
||||
Send bug reports and bug fixes to:
|
||||
.sp
|
||||
.in +0.5i
|
||||
@@ -1346,11 +1367,13 @@ help bugs
|
||||
for more information about bug reporting.
|
||||
.sp
|
||||
Please be patient as we cannot always respond to Email messages quickly.
|
||||
.sp
|
||||
|
||||
.PP
|
||||
|
||||
.SH "CONTRIBUTING CODE TO CALC"
|
||||
\&
|
||||
.br
|
||||
.sp
|
||||
|
||||
.PP
|
||||
|
||||
.I Calc
|
||||
is open source.
|
||||
Contributions of code are welcome.
|
||||
@@ -1473,10 +1496,13 @@ you have that
|
||||
somewhere in the subject line!
|
||||
.sp
|
||||
Please be patient as we cannot always respond to Email messages quickly.
|
||||
.sp
|
||||
|
||||
.PP
|
||||
|
||||
.SH "CALC WEB SITE"
|
||||
\&
|
||||
.br
|
||||
|
||||
.PP
|
||||
|
||||
Landon Noll maintains the
|
||||
.B calc
|
||||
web site is located at:
|
||||
|
2
config.c
2
config.c
@@ -274,6 +274,8 @@ STATIC NAMETYPE modes[] = {
|
||||
{"scientific", MODE_EXP},
|
||||
{"sci", MODE_EXP},
|
||||
{"exp", MODE_EXP},
|
||||
{"engineering", MODE_ENG},
|
||||
{"eng", MODE_ENG},
|
||||
{"hexadecimal", MODE_HEX},
|
||||
{"hex", MODE_HEX},
|
||||
{"octal", MODE_OCTAL},
|
||||
|
@@ -1,7 +1,9 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
#!/usr/local/src/bin/calc/calc -q -f
|
||||
/*
|
||||
* 4dsphere - determine if 6 points lie on the surface of a sphere in R^4
|
||||
*
|
||||
* Copyright (C) 2001,2014,2019,2021 Landon Curt Noll
|
||||
*
|
||||
* usage:
|
||||
* 4dsphere x0 y0 z0 w0 x1 y1 z1 w1 ... x5 y5 z5 w5
|
||||
*
|
||||
@@ -10,8 +12,6 @@
|
||||
* ... ...
|
||||
* x5 y5 z5 w5 point 5 in R^4
|
||||
*
|
||||
* Copyright (C) 2001,2014,2019 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation.
|
||||
|
@@ -3,6 +3,14 @@
|
||||
#
|
||||
# Copyright (C) 1999-2006,2014,2017,2021 Landon Curt Noll
|
||||
#
|
||||
# SRC: cscript/Makefile
|
||||
#
|
||||
# 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.
|
||||
@@ -30,7 +38,7 @@
|
||||
# The shell used by this Makefile
|
||||
#
|
||||
# On some systems, /bin/sh is a rather reduced shell with
|
||||
# deprecated behavor.
|
||||
# deprecated behavior.
|
||||
#
|
||||
# If your system has a up to date, bash shell, then
|
||||
# you may wish to use:
|
||||
@@ -38,7 +46,7 @@
|
||||
# SHELL= /bin/bash
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point wehre is cannot be depended on.
|
||||
# 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:
|
||||
#
|
||||
@@ -54,6 +62,36 @@ SHELL= /bin/sh
|
||||
# a default here just in case you want to build from this directory.
|
||||
####
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
@@ -83,11 +121,11 @@ TOP_MAKE_FILE= Makefile
|
||||
# INCDIR= /usr/include
|
||||
#
|
||||
|
||||
#INCDIR= /usr/local/include
|
||||
#INCDIR= ${PREFIX}/include
|
||||
#INCDIR= /dev/env/DJDIR/include
|
||||
INCDIR= /usr/include
|
||||
|
||||
# where to install calc realted things
|
||||
# where to install calc related things
|
||||
#
|
||||
# ${BINDIR} where to install calc binary files
|
||||
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||
@@ -109,15 +147,15 @@ INCDIR= /usr/include
|
||||
# LIBDIR= /usr/lib
|
||||
# CALC_SHAREDIR= /usr/share/calc
|
||||
#
|
||||
#BINDIR= /usr/local/bin
|
||||
#BINDIR= ${PREFIX}/bin
|
||||
#BINDIR= /dev/env/DJDIR/bin
|
||||
BINDIR= /usr/bin
|
||||
|
||||
#LIBDIR= /usr/local/lib
|
||||
#LIBDIR= ${PREFIX}/lib
|
||||
#LIBDIR= /dev/env/DJDIR/lib
|
||||
LIBDIR= /usr/lib
|
||||
|
||||
#CALC_SHAREDIR= /usr/local/lib/calc
|
||||
#CALC_SHAREDIR= ${PREFIX}/lib/calc
|
||||
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||
CALC_SHAREDIR= /usr/share/calc
|
||||
|
||||
@@ -175,11 +213,35 @@ T=
|
||||
|
||||
# Makefile debug
|
||||
#
|
||||
# Q=@ do not echo internal makefile actions (quiet mode)
|
||||
# Q= echo internal makefile actions (debug / verbose mode)
|
||||
# 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=@
|
||||
|
||||
# standard tools
|
||||
#
|
||||
@@ -307,7 +369,7 @@ detaillist:
|
||||
# Home grown make dependency rules. Your system make not support
|
||||
# or have the needed tools. You can ignore this section.
|
||||
#
|
||||
# We will form a skelaton tree of *.c files containing only #include "foo.h"
|
||||
# We will form a skeleton tree of *.c files containing only #include "foo.h"
|
||||
# lines and .h files containing the same lines surrounded by multiple include
|
||||
# prevention lines. This allows us to build a static depend list that will
|
||||
# satisfy all possible cpp symbol definition combinations.
|
||||
|
@@ -1,15 +1,15 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
#!/usr/local/src/bin/calc/calc -q -f
|
||||
/*
|
||||
* fproduct - write the big Endian product of terms to a file
|
||||
*
|
||||
* Copyright (C) 2001,2014,2019,2021 Landon Curt Noll
|
||||
*
|
||||
* usage:
|
||||
* fproduct filename term [term ...]
|
||||
*
|
||||
* filename where to write the product, use - for stdout
|
||||
* term ... terms to multiply
|
||||
*
|
||||
* Copyright (C) 2001,2014,2019 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation.
|
||||
|
@@ -1,8 +1,8 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
#!/usr/local/src/bin/calc/calc -q -f
|
||||
/*
|
||||
* mersenne - print the value of a mersenne number
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014,2019 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2014,2019,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -1,4 +1,4 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
#!/usr/local/src/bin/calc/calc -q -f
|
||||
/*
|
||||
* piforever - print digits of pi forever (or as long as your mem/CPU allow)
|
||||
*
|
||||
|
@@ -1,8 +1,8 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
#!/usr/local/src/bin/calc/calc -q -f
|
||||
/*
|
||||
* plus - add two or more arguments together
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014,2019 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2014,2019,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -47,7 +47,7 @@ if (argc < 2) {
|
||||
* Since args are strings, we must eval them before using them numerically.
|
||||
*/
|
||||
sum = 0;
|
||||
for (i=1; i < argv(); ++i) {
|
||||
for (i=1; i < argc; ++i) {
|
||||
sum += eval(argv(i));
|
||||
}
|
||||
print sum;
|
||||
|
@@ -1,14 +1,22 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
#!/usr/local/src/bin/calc/calc -q -f
|
||||
/*
|
||||
* powerterm - print the argument as a sum of powers of integers
|
||||
*
|
||||
* Copyright (C) 2001,2014,2019,2021 Landon Curt Noll
|
||||
*
|
||||
* usage:
|
||||
* powerterm [base_limit] value
|
||||
*
|
||||
* base_limit largest base we will consider (def: 10000)
|
||||
* value value to convert into sums of powers of integers
|
||||
*
|
||||
* Copyright (C) 2001,2014,2019 Landon Curt Noll
|
||||
* Example:
|
||||
*
|
||||
* powerterm 5 1000000
|
||||
*
|
||||
* prints:
|
||||
*
|
||||
* 4^10 - 3^10 + 5^6 - 4^6 - 4^5 - 2^5
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the powerterm of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -1,8 +1,8 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
#!/usr/local/src/bin/calc/calc -q -f
|
||||
/*
|
||||
* simple - an example of a simple calc shell script
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014,2019 Landon Curt Noll
|
||||
* Copyright (C) 1999-2007,2014,2019,2021 Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
|
@@ -1,8 +1,8 @@
|
||||
#!/usr/local/src/bin/calc/calc -q -s -f
|
||||
#!/usr/local/src/bin/calc/calc -q -p -f
|
||||
/*
|
||||
* sqaure - print the squares of input values
|
||||
*
|
||||
* Copyright (C) 2000-2007,2014,2019 Ernest Bowen
|
||||
* Copyright (C) 2000-2007,2014,2019,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
|
||||
@@ -48,6 +48,8 @@
|
||||
* 1522756
|
||||
* ln(2)
|
||||
* ~.48045301391820142467
|
||||
* 2i
|
||||
* -4
|
||||
* config("mode","frac"), bernoulli(10)
|
||||
* 25/4356
|
||||
* config("mode", "hex"), 0xff
|
||||
|
182
custom/Makefile
182
custom/Makefile
@@ -4,6 +4,14 @@
|
||||
#
|
||||
# Copyright (C) 1999-2006,2014,2017-2018,2021 Landon Curt Noll
|
||||
#
|
||||
# SRC: Makefile via make -f Makefile.ship custom/Makefile
|
||||
#
|
||||
# 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.
|
||||
@@ -27,11 +35,30 @@
|
||||
# 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 behavor.
|
||||
# deprecated behavior.
|
||||
#
|
||||
# If your system has a up to date, bash shell, then
|
||||
# you may wish to use:
|
||||
@@ -39,7 +66,7 @@
|
||||
# SHELL= /bin/bash
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point wehre is cannot be depended on.
|
||||
# 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:
|
||||
#
|
||||
@@ -50,6 +77,37 @@ SHELL= /bin/sh
|
||||
#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
|
||||
@@ -57,7 +115,7 @@ SHELL= /bin/sh
|
||||
# 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).
|
||||
@@ -155,14 +213,38 @@ CUSTOM_OBJ= c_argv.o c_devnull.o c_help.o c_sysinfo.o c_pzasusb8.o \
|
||||
|
||||
# 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)
|
||||
# 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
|
||||
@@ -180,7 +262,7 @@ Q=@
|
||||
# INCDIR= /usr/include
|
||||
#
|
||||
|
||||
#INCDIR= /usr/local/include
|
||||
#INCDIR= ${PREFIX}/include
|
||||
#INCDIR= /dev/env/DJDIR/include
|
||||
INCDIR= /usr/include
|
||||
|
||||
@@ -206,15 +288,15 @@ INCDIR= /usr/include
|
||||
# LIBDIR= /usr/lib
|
||||
# CALC_SHAREDIR= /usr/share/calc
|
||||
#
|
||||
#BINDIR= /usr/local/bin
|
||||
#BINDIR= ${PREFIX}/bin
|
||||
#BINDIR= /dev/env/DJDIR/bin
|
||||
BINDIR= /usr/bin
|
||||
|
||||
#LIBDIR= /usr/local/lib
|
||||
#LIBDIR= ${PREFIX}/lib
|
||||
#LIBDIR= /dev/env/DJDIR/lib
|
||||
LIBDIR= /usr/lib
|
||||
|
||||
#CALC_SHAREDIR= /usr/local/lib/calc
|
||||
#CALC_SHAREDIR= ${PREFIX}/lib/calc
|
||||
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||
CALC_SHAREDIR= /usr/share/calc
|
||||
|
||||
@@ -407,7 +489,7 @@ EXT=
|
||||
|
||||
# The default calc versions
|
||||
#
|
||||
VERSION= 2.12.9.0
|
||||
VERSION= 2.14.0.0
|
||||
|
||||
# Names of shared libraries with versions
|
||||
#
|
||||
@@ -493,7 +575,16 @@ ILDFLAGS= ${COMMON_LDFLAGS}
|
||||
LDFLAGS= ${LD_DEBUG} ${ILDFLAGS}
|
||||
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
|
||||
##################################################
|
||||
# NOTE: End of section from custom/Makefile.head #
|
||||
##################################################
|
||||
# start of host target cut - Do not remove this line
|
||||
|
||||
###########################################################
|
||||
# NOTE: Start of section from the middle of Makefile.ship #
|
||||
###########################################################
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=- host target section - targets that override defaults -=-=-=-=-=-#
|
||||
##############################################################################
|
||||
@@ -576,7 +667,7 @@ ifeq ($(target),Linux)
|
||||
BLD_TYPE= calc-dynamic-only
|
||||
#
|
||||
CC_SHARE= -fPIC
|
||||
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:/usr/local/lib
|
||||
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}"
|
||||
@@ -603,10 +694,8 @@ LIBCUSTCALC_STATIC=
|
||||
# This facility requires a Gnu Makefile, or a make command
|
||||
# that understands the += make operand.
|
||||
#
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
COMMON_CFLAGS+= ${COMMON_ADD}
|
||||
COMMON_LDFLAGS+= ${COMMON_ADD}
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
#
|
||||
CCWARN= -Wall
|
||||
WNO_IMPLICT= -Wno-implicit
|
||||
@@ -621,16 +710,16 @@ CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
endif
|
||||
|
||||
##############################
|
||||
# Apple OS X / Darwin target #
|
||||
##############################
|
||||
###############################
|
||||
# Apple macOS / Darwin target #
|
||||
###############################
|
||||
|
||||
ifeq ($(target),Darwin)
|
||||
#
|
||||
BLD_TYPE= calc-dynamic-only
|
||||
#
|
||||
CC_SHARE= -fPIC
|
||||
DEFAULT_LIB_INSTALL_PATH= ${PWD}:${LIBDIR}:/usr/local/lib
|
||||
DEFAULT_LIB_INSTALL_PATH= ${PWD}:${LIBDIR}:${PREFIX}/lib
|
||||
LD_SHARE= ${DARWIN_ARCH}
|
||||
#SET_INSTALL_NAME= no
|
||||
SET_INSTALL_NAME= yes
|
||||
@@ -671,10 +760,8 @@ LIBCUSTCALC_STATIC=
|
||||
# This facility requires a Gnu Makefile, or a make command
|
||||
# that understands the += make operand.
|
||||
#
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
COMMON_CFLAGS+= ${COMMON_ADD}
|
||||
COMMON_LDFLAGS+= ${COMMON_ADD}
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
#
|
||||
CCWARN= -Wall
|
||||
WNO_IMPLICT= -Wno-implicit
|
||||
@@ -714,7 +801,7 @@ ifeq ($(target),FreeBSD)
|
||||
BLD_TYPE= calc-dynamic-only
|
||||
#
|
||||
CC_SHARE= -fPIC
|
||||
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:/usr/local/lib
|
||||
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}"
|
||||
@@ -741,10 +828,8 @@ LIBCUSTCALC_STATIC=
|
||||
# This facility requires a Gnu Makefile, or a make command
|
||||
# that understands the += make operand.
|
||||
#
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
COMMON_CFLAGS+= ${COMMON_ADD}
|
||||
COMMON_LDFLAGS+= ${COMMON_ADD}
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
#
|
||||
CCWARN= -Wall
|
||||
WNO_IMPLICT= -Wno-implicit
|
||||
@@ -776,7 +861,7 @@ ifeq ($(target),OpenBSD)
|
||||
BLD_TYPE= calc-dynamic-only
|
||||
#
|
||||
CC_SHARE= -fPIC
|
||||
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:/usr/local/lib
|
||||
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}"
|
||||
@@ -803,10 +888,8 @@ LIBCUSTCALC_STATIC=
|
||||
# This facility requires a Gnu Makefile, or a make command
|
||||
# that understands the += make operand.
|
||||
#
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
COMMON_CFLAGS+= ${COMMON_ADD}
|
||||
COMMON_LDFLAGS+= ${COMMON_ADD}
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
#
|
||||
CCWARN= -Wall
|
||||
WNO_IMPLICT= -Wno-implicit
|
||||
@@ -832,7 +915,7 @@ ifeq ($(target),SunOS)
|
||||
BLD_TYPE= calc-dynamic-only
|
||||
#
|
||||
CC_SHARE= -fPIC
|
||||
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:/usr/local/lib
|
||||
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}"
|
||||
@@ -859,10 +942,8 @@ LD_STATIC=
|
||||
# This facility requires a Gnu Makefile, or a make command
|
||||
# that understands the += make operand.
|
||||
#
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
COMMON_CFLAGS+= ${COMMON_ADD}
|
||||
COMMON_LDFLAGS+= ${COMMON_ADD}
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
#
|
||||
CCWARN= -Wall
|
||||
WNO_IMPLICT= -Wno-implicit
|
||||
@@ -886,7 +967,7 @@ ifeq ($(target),Cygwin)
|
||||
BLD_TYPE= calc-static-only
|
||||
#
|
||||
CC_SHARE= -fPIC
|
||||
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:/usr/local/lib
|
||||
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}"
|
||||
@@ -913,10 +994,8 @@ LD_STATIC=
|
||||
# This facility requires a Gnu Makefile, or a make command
|
||||
# that understands the += make operand.
|
||||
#
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
COMMON_CFLAGS+= ${COMMON_ADD}
|
||||
COMMON_LDFLAGS+= ${COMMON_ADD}
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
#
|
||||
CCWARN= -Wall
|
||||
WNO_IMPLICT= -Wno-implicit
|
||||
@@ -944,7 +1023,7 @@ ifeq ($(target),simple)
|
||||
BLD_TYPE= calc-static-only
|
||||
#
|
||||
CC_SHARE= -fPIC
|
||||
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:/usr/local/lib
|
||||
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}"
|
||||
@@ -998,12 +1077,12 @@ CALCPATH= .;./cal;~/.cal;${T}${CALC_SHAREDIR};${T}${CUSTOMCALDIR}
|
||||
else
|
||||
CALCPATH= .;./cal;~/.cal;${T}${CALC_SHAREDIR}
|
||||
endif
|
||||
CALCRC= ${CALC_SHAREDIR}/startup;~/.calcrc;./.calcinit
|
||||
CALCRC= ./.calcinit;~/.calcrc;${CALC_SHAREDIR}/startup
|
||||
#
|
||||
BLD_TYPE= calc-static-only
|
||||
#
|
||||
CC_SHARE= -fPIC
|
||||
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:/usr/local/lib
|
||||
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}"
|
||||
@@ -1043,7 +1122,7 @@ ifeq ($(target),)
|
||||
BLD_TYPE= calc-static-only
|
||||
#
|
||||
CC_SHARE= -fPIC
|
||||
DEFAULT_LIB_INSTALL_PATH= ${PWD}:/lib:/usr/lib:${LIBDIR}:/usr/local/lib
|
||||
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}"
|
||||
@@ -1070,10 +1149,8 @@ LD_STATIC=
|
||||
# This facility requires a Gnu Makefile, or a make command
|
||||
# that understands the += make operand.
|
||||
#
|
||||
#if 0 /* start of skip for non-Gnu makefiles */
|
||||
COMMON_CFLAGS+= ${COMMON_ADD}
|
||||
COMMON_LDFLAGS+= ${COMMON_ADD}
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
#
|
||||
CCWARN= -Wall
|
||||
WNO_IMPLICT= -Wno-implicit
|
||||
@@ -1118,7 +1195,27 @@ LDFLAGS= ${LD_DEBUG} ${ILDFLAGS}
|
||||
#######################################################################
|
||||
#-=-=-=-=-=- end of target section - only make rules below -=-=-=-=-=-#
|
||||
#######################################################################
|
||||
|
||||
#########################################################
|
||||
# NOTE: End of section from the middle of Makefile.ship #
|
||||
#########################################################
|
||||
|
||||
# end of host target cut - Do not remove this line
|
||||
#
|
||||
# Copyright (C) 1999-2006,2014,2017-2018,2021 Landon Curt Noll
|
||||
#
|
||||
# SRC: Makefile via make -f Makefile.ship custom/Makefile
|
||||
#
|
||||
# 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.
|
||||
|
||||
####################################################
|
||||
# NOTE: Start of section from custom/Makefile.tail #
|
||||
####################################################
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=-=-=- Be careful if you change something below -=-=-=-=-=-=-=-=-#
|
||||
##############################################################################
|
||||
@@ -1269,7 +1366,10 @@ 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} > $@
|
||||
${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 '"\\" >> $@
|
||||
@@ -1870,3 +1970,7 @@ custtbl.o: ../str.h
|
||||
custtbl.o: ../value.h
|
||||
custtbl.o: ../zmath.h
|
||||
custtbl.o: custtbl.c
|
||||
|
||||
##################################################
|
||||
# NOTE: End of section from custom/Makefile.tail #
|
||||
##################################################
|
||||
|
@@ -4,6 +4,14 @@
|
||||
#
|
||||
# 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.
|
||||
@@ -27,11 +35,30 @@
|
||||
# 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 behavor.
|
||||
# deprecated behavior.
|
||||
#
|
||||
# If your system has a up to date, bash shell, then
|
||||
# you may wish to use:
|
||||
@@ -39,7 +66,7 @@
|
||||
# SHELL= /bin/bash
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point wehre is cannot be depended on.
|
||||
# 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:
|
||||
#
|
||||
@@ -50,6 +77,37 @@ SHELL= /bin/sh
|
||||
#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
|
||||
@@ -57,7 +115,7 @@ SHELL= /bin/sh
|
||||
# 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).
|
||||
@@ -155,14 +213,38 @@ CUSTOM_OBJ= c_argv.o c_devnull.o c_help.o c_sysinfo.o c_pzasusb8.o \
|
||||
|
||||
# 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)
|
||||
# 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
|
||||
@@ -180,7 +262,7 @@ Q=@
|
||||
# INCDIR= /usr/include
|
||||
#
|
||||
|
||||
#INCDIR= /usr/local/include
|
||||
#INCDIR= ${PREFIX}/include
|
||||
#INCDIR= /dev/env/DJDIR/include
|
||||
INCDIR= /usr/include
|
||||
|
||||
@@ -206,15 +288,15 @@ INCDIR= /usr/include
|
||||
# LIBDIR= /usr/lib
|
||||
# CALC_SHAREDIR= /usr/share/calc
|
||||
#
|
||||
#BINDIR= /usr/local/bin
|
||||
#BINDIR= ${PREFIX}/bin
|
||||
#BINDIR= /dev/env/DJDIR/bin
|
||||
BINDIR= /usr/bin
|
||||
|
||||
#LIBDIR= /usr/local/lib
|
||||
#LIBDIR= ${PREFIX}/lib
|
||||
#LIBDIR= /dev/env/DJDIR/lib
|
||||
LIBDIR= /usr/lib
|
||||
|
||||
#CALC_SHAREDIR= /usr/local/lib/calc
|
||||
#CALC_SHAREDIR= ${PREFIX}/lib/calc
|
||||
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||
CALC_SHAREDIR= /usr/share/calc
|
||||
|
||||
@@ -407,7 +489,7 @@ EXT=
|
||||
|
||||
# The default calc versions
|
||||
#
|
||||
VERSION= 2.12.9.0
|
||||
VERSION= 2.14.0.0
|
||||
|
||||
# Names of shared libraries with versions
|
||||
#
|
||||
@@ -493,3 +575,7 @@ ILDFLAGS= ${COMMON_LDFLAGS}
|
||||
LDFLAGS= ${LD_DEBUG} ${ILDFLAGS}
|
||||
|
||||
#endif /* end of skip for non-Gnu makefiles */
|
||||
|
||||
##################################################
|
||||
# NOTE: End of section from custom/Makefile.head #
|
||||
##################################################
|
||||
|
@@ -1,3 +1,18 @@
|
||||
#
|
||||
# Copyright (C) 1999-2006,2014,2017-2018,2021 Landon Curt Noll
|
||||
#
|
||||
# SRC: custom/Makefile.tail
|
||||
#
|
||||
# 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.
|
||||
|
||||
####################################################
|
||||
# NOTE: Start of section from custom/Makefile.tail #
|
||||
####################################################
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=-=-=- Be careful if you change something below -=-=-=-=-=-=-=-=-#
|
||||
##############################################################################
|
||||
@@ -148,7 +163,10 @@ 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} > $@
|
||||
${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 '"\\" >> $@
|
||||
@@ -749,3 +767,7 @@ custtbl.o: ../str.h
|
||||
custtbl.o: ../value.h
|
||||
custtbl.o: ../zmath.h
|
||||
custtbl.o: custtbl.c
|
||||
|
||||
##################################################
|
||||
# NOTE: End of section from custom/Makefile.tail #
|
||||
##################################################
|
||||
|
3
file.c
3
file.c
@@ -1048,6 +1048,9 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
|
||||
case 'e':
|
||||
newmode = MODE_EXP;
|
||||
break;
|
||||
case 'n':
|
||||
newmode = MODE_ENG;
|
||||
break;
|
||||
case 'g':
|
||||
newmode = MODE_REAL_AUTO;
|
||||
break;
|
||||
|
30
func.c
30
func.c
@@ -7839,6 +7839,9 @@ f_base(int count, NUMBER **vals)
|
||||
case 16:
|
||||
oldbase = math_setmode(MODE_HEX);
|
||||
break;
|
||||
case 1000:
|
||||
oldbase = math_setmode(MODE_ENG);
|
||||
break;
|
||||
default:
|
||||
math_error("Unsupported base");
|
||||
/*NOTREACHED*/
|
||||
@@ -7893,6 +7896,9 @@ f_base2(int count, NUMBER **vals)
|
||||
case 16:
|
||||
oldbase = math_setmode2(MODE_HEX);
|
||||
break;
|
||||
case 1000:
|
||||
oldbase = math_setmode2(MODE_ENG);
|
||||
break;
|
||||
default:
|
||||
math_error("Unsupported base");
|
||||
/*NOTREACHED*/
|
||||
@@ -7933,6 +7939,9 @@ base_value(long mode, int defval)
|
||||
result = qalloc();
|
||||
ztenpow(20, &result->num);
|
||||
break;
|
||||
case MODE_ENG:
|
||||
result = itoq(1000);
|
||||
break;
|
||||
case MODE_HEX:
|
||||
result = itoq(16);
|
||||
break;
|
||||
@@ -7964,6 +7973,9 @@ base_value(long mode, int defval)
|
||||
result = qalloc();
|
||||
ztenpow(20, &result->num);
|
||||
break;
|
||||
case MODE_ENG:
|
||||
result = itoq(1000);
|
||||
break;
|
||||
case MODE_HEX:
|
||||
result = itoq(16);
|
||||
break;
|
||||
@@ -8464,11 +8476,23 @@ f_argv(int count, VALUE **vals)
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
/* return the n-th argv string */
|
||||
/* determine the arg value of the argv() function */
|
||||
arg = qtoi(vals[0]->v_num);
|
||||
if (arg < argc_value && argv_value[arg] != NULL) {
|
||||
|
||||
/* argv(0) is program or script_name if -f filename was used */
|
||||
if (arg == 0) {
|
||||
if (script_name == NULL) {
|
||||
/* paranoia */
|
||||
result.v_type = V_NULL;
|
||||
} else {
|
||||
result.v_type = V_STR;
|
||||
result.v_str = makestring(strdup(argv_value[arg]));
|
||||
result.v_str = makenewstring(script_name);
|
||||
}
|
||||
|
||||
/* return the n-th argv string */
|
||||
} else if (arg < argc_value && argv_value[arg-1] != NULL) {
|
||||
result.v_type = V_STR;
|
||||
result.v_str = makestring(strdup(argv_value[arg-1]));
|
||||
} else {
|
||||
result.v_type = V_NULL;
|
||||
}
|
||||
|
@@ -4,6 +4,14 @@
|
||||
#
|
||||
# Copyright (C) 1999-2006,2017,2021 Landon Curt Noll
|
||||
#
|
||||
# SRC: help/Makefile
|
||||
#
|
||||
# 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.
|
||||
@@ -31,7 +39,7 @@
|
||||
# The shell used by this Makefile
|
||||
#
|
||||
# On some systems, /bin/sh is a rather reduced shell with
|
||||
# deprecated behavor.
|
||||
# deprecated behavior.
|
||||
#
|
||||
# If your system has a up to date, bash shell, then
|
||||
# you may wish to use:
|
||||
@@ -39,7 +47,7 @@
|
||||
# SHELL= /bin/bash
|
||||
#
|
||||
# On some systems such as macOS, the bash shell is very
|
||||
# far behind to the point wehre is cannot be depended on.
|
||||
# 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:
|
||||
#
|
||||
@@ -55,6 +63,36 @@ SHELL= /bin/sh
|
||||
# a default here just in case you want to build from this directory.
|
||||
####
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
@@ -110,15 +148,15 @@ INCDIR= /usr/include
|
||||
# LIBDIR= /usr/lib
|
||||
# CALC_SHAREDIR= /usr/share/calc
|
||||
#
|
||||
#BINDIR= /usr/local/bin
|
||||
#BINDIR= ${PREFIX}/bin
|
||||
#BINDIR= /dev/env/DJDIR/bin
|
||||
BINDIR= /usr/bin
|
||||
|
||||
#LIBDIR= /usr/local/lib
|
||||
#LIBDIR= ${PREFIX}/lib
|
||||
#LIBDIR= /dev/env/DJDIR/lib
|
||||
LIBDIR= /usr/lib
|
||||
|
||||
#CALC_SHAREDIR= /usr/local/lib/calc
|
||||
#CALC_SHAREDIR= ${PREFIX}/lib/calc
|
||||
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||
CALC_SHAREDIR= /usr/share/calc
|
||||
|
||||
@@ -176,11 +214,35 @@ T=
|
||||
|
||||
# Makefile debug
|
||||
#
|
||||
# Q=@ do not echo internal makefile actions (quiet mode)
|
||||
# Q= echo internal makefile actions (debug / verbose mode)
|
||||
# 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=@
|
||||
|
||||
# standard tools
|
||||
#
|
||||
@@ -252,7 +314,7 @@ BLT_HELP_FILES_13= bugs changes
|
||||
|
||||
STD_HELP_FILES_14= credit
|
||||
|
||||
BLT_HELP_FILES_14= contrib COPYING COPYING-LGPL question
|
||||
BLT_HELP_FILES_14= contrib COPYING COPYING-LGPL questions
|
||||
|
||||
STD_HELP_FILES_15= wishlist todo
|
||||
|
||||
@@ -536,7 +598,7 @@ COPYING-LGPL: ../COPYING-LGPL
|
||||
${TRUE}; \
|
||||
fi
|
||||
|
||||
question: ../QUESTIONS
|
||||
questions: ../QUESTIONS
|
||||
${RM} -f $@
|
||||
${CP} ../QUESTIONS $@
|
||||
${CHMOD} 0444 $@
|
||||
@@ -637,8 +699,8 @@ builtin: builtin.top builtin.end ../func.c funclist.sed
|
||||
${Q} ${SED} -n -f funclist.sed ../func.c > funclist.c
|
||||
${Q} ${RM} -f funclist.o funclist${EXT}
|
||||
${Q} ${LCC} ${ICFLAGS} -DFUNCLIST -I/usr/include \
|
||||
-I.. funclist.c -c 2>/dev/null
|
||||
${Q} ${LCC} ${ILDFLAGS} funclist.o -o funclist${EXT}
|
||||
-I.. funclist.c -c ${S}
|
||||
${Q} ${LCC} ${ILDFLAGS} funclist.o -o funclist${EXT} ${S}
|
||||
${Q} ${RM} -f builtin
|
||||
${Q} ${GREP} -v '^#' builtin.top > builtin
|
||||
${Q} ./funclist${EXT} | \
|
||||
@@ -705,7 +767,7 @@ detail_help_list:
|
||||
! -name mat ! -name obj.file ! -name operator \
|
||||
! -name overview ! -name script ! -name statement \
|
||||
! -name todo ! -name types ! -name unexpected \
|
||||
! -name variable ! -name wishlist ! -name question \
|
||||
! -name variable ! -name wishlist ! -name questions \
|
||||
-print | \
|
||||
while read i; do \
|
||||
if [ X"$$i" != X"/dev/null" ]; then \
|
||||
@@ -740,7 +802,7 @@ echo_inst_files:
|
||||
|
||||
clean:
|
||||
${RM} -f obj mkbuiltin funclist.c funclist.o funclist${EXT}
|
||||
${RM} -f COPYING COPYING-LGPL question
|
||||
${RM} -f COPYING COPYING-LGPL questions
|
||||
|
||||
clobber: clean
|
||||
${RM} -f ${BLT_HELP_FILES} full .all calc
|
||||
|
45
help/argv
45
help/argv
@@ -11,14 +11,33 @@ TYPES
|
||||
|
||||
DESCRIPTION
|
||||
Without args, this builtin returns the number of calc command line
|
||||
strings available.
|
||||
strings available, including the program or script name.
|
||||
|
||||
If the numeric arg is supplied, then the corresponding command line
|
||||
string is return, if it exists. Otherwise a nul() value is returned.
|
||||
|
||||
In keeping with the argc/argv convention of C, argv(0) will refer
|
||||
to the 1st argv string, and argv(argv()-1) will refer to the last.
|
||||
This differs from the way the param() builtin works.
|
||||
to the name of the program. If the -f filename argument is used,
|
||||
then argv(0) will refer to the filename. In the case of a #! script,
|
||||
assuming the calc is located in /usr/local/bin/calc, the first
|
||||
line of a calc script would be:
|
||||
|
||||
#!/usr/local/bin/calc -f
|
||||
...
|
||||
|
||||
then argv(0) will refer to the filename of the script.
|
||||
|
||||
As it is common to use -q in a calc script, and using that same
|
||||
/usr/local/bin/calc location:
|
||||
|
||||
#!/usr/local/bin/calc -q -f
|
||||
...
|
||||
|
||||
and again, argv(0) will refer to the filename of the script.
|
||||
|
||||
The 1st argument to calc will be argv(1), and argv(argv()-1)
|
||||
will refer to the last. This differs from the way the param()
|
||||
builtin works.
|
||||
|
||||
By default, calc will evaluate all of its command line arguments.
|
||||
However, if calc is invoked with -s, all non-dashed options will
|
||||
@@ -27,22 +46,26 @@ DESCRIPTION
|
||||
calc -i 2+2
|
||||
|
||||
will cause calc to print 4 and enter interactive mode. In this case
|
||||
argv() will return 0.
|
||||
argv() will return 1.
|
||||
|
||||
On the other hand:
|
||||
|
||||
calc -i -s 2+2
|
||||
|
||||
will cause calc to interactive mode. The argv() builtin will return 1
|
||||
and argv(0) will return the string "2+2".
|
||||
will cause calc to interactive mode. The argv() builtin will return 2
|
||||
and argv(1) will return the string "2+2".
|
||||
|
||||
EXAMPLE
|
||||
$ calc -s a bb ccc
|
||||
; argc = argv();
|
||||
; for (i = 0; i < argc; i++) print "argv[": i : '] = "': argv(i) : '"';
|
||||
argv[0] = "a"
|
||||
argv[1] = "bb"
|
||||
argv[2] = "ccc"
|
||||
; print "argc =", argc;
|
||||
argc = 4
|
||||
; print 'argv[0] = "': argv(0) : '"';
|
||||
argv[0] = "calc"
|
||||
; for (i = 1; i < argc; i++) print "argv[": i : '] = "': argv(i) : '"';
|
||||
argv[1] = "a"
|
||||
argv[2] = "bb"
|
||||
argv[3] = "ccc"
|
||||
|
||||
LIMITS
|
||||
0 <= n < 2^31
|
||||
@@ -53,7 +76,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
param, system, usage
|
||||
|
||||
## 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
|
||||
|
@@ -44,6 +44,9 @@ DESCRIPTION
|
||||
"sci"
|
||||
"exp"
|
||||
|
||||
1000 "engineering" base 10 notation with exponent
|
||||
"eng" multiple of 3
|
||||
|
||||
For convenience, any non-integer value is assumed to mean base 10
|
||||
fractions and any integer >= 2^64 is assumed to mean base 10
|
||||
scientific notation.
|
||||
@@ -76,7 +79,7 @@ LINK LIBRARY
|
||||
int math_setmode(int newmode)
|
||||
|
||||
NOTE: newmode must be one of MODE_DEFAULT, MODE_FRAC, MODE_INT,
|
||||
MODE_REAL, MODE_EXP, MODE_HEX, MODE_OCTAL, MODE_BINARY
|
||||
MODE_REAL, MODE_EXP, MODE_ENG, MODE_HEX, MODE_OCTAL, MODE_BINARY
|
||||
|
||||
SEE ALSO
|
||||
base2, config, str
|
||||
|
@@ -50,6 +50,9 @@ DESCRIPTION
|
||||
"sci"
|
||||
"exp"
|
||||
|
||||
1000 "engineering" base 10 notation with exponent
|
||||
"eng" multiple of 3
|
||||
|
||||
0 "off" disable double base output
|
||||
|
||||
For convenience, any non-integer non-zero value is assumed to mean
|
||||
@@ -87,7 +90,7 @@ LINK LIBRARY
|
||||
int math_setmode2(int newmode)
|
||||
|
||||
NOTE: newmode must be one of MODE_DEFAULT, MODE_FRAC, MODE_INT,
|
||||
MODE_REAL, MODE_EXP, MODE_HEX, MODE_OCTAL, MODE_BINARY,
|
||||
MODE_REAL, MODE_EXP, MODE_ENG, MODE_HEX, MODE_OCTAL, MODE_BINARY,
|
||||
MODE2_OFF
|
||||
|
||||
SEE ALSO
|
||||
|
@@ -165,8 +165,8 @@ DESCRIPTION
|
||||
config("display", int)
|
||||
|
||||
The "display" parameter specifies the maximum number of digits after
|
||||
the decimal point to be printed in real or exponential mode in
|
||||
normal unformatted printing (print, strprint, fprint) or in
|
||||
the decimal point to be printed in real, exponential or engineering
|
||||
mode in normal unformatted printing (print, strprint, fprint) or in
|
||||
formatted printing (printf, strprintf, fprintf) when precision is not
|
||||
specified. The initial value for oldstd is 20, for newstd 10.
|
||||
The parameter may be changed to the value d by either
|
||||
@@ -234,6 +234,9 @@ DESCRIPTION
|
||||
"sci"
|
||||
"exp"
|
||||
|
||||
"engineering" base 10 notation with exponent base(10e6)
|
||||
"eng" multiple of 3
|
||||
|
||||
Where multiple strings are given, the first string listed is what
|
||||
config("mode") will return.
|
||||
|
||||
|
20
help/script
20
help/script
@@ -123,7 +123,7 @@ Calc shell scripts
|
||||
calc "-q -s" $* << +
|
||||
global i, n, s;
|
||||
n = argv();
|
||||
for (i = 0; i < n; i++)
|
||||
for (i = 1; i < n; i++)
|
||||
s += eval(argv(i));
|
||||
print "sum =", s;
|
||||
+
|
||||
@@ -133,20 +133,24 @@ Calc shell scripts
|
||||
./addall2 2 3 4
|
||||
|
||||
the $* in this script expands to 2 3 4, and because of the "-s"
|
||||
in the options, calc starts with argv(0) = "2", argv(1) = "3",
|
||||
argv(2)= "4". As there is only one calc process involved and
|
||||
in the options, calc starts with argv(1) = "2", argv(2) = "3",
|
||||
argv(3)= "4". As there is only one calc process involved and
|
||||
the eval() function accepts as argument any string that
|
||||
represents the body of a calc function, the strings argv(0),
|
||||
argv(1), ... could evaluate to any value types for which the
|
||||
represents the body of a calc function, the strings argv(1),
|
||||
argv(2), ... could evaluate to any value types for which the
|
||||
additions to be performed are defined, and variables defined in
|
||||
one argv() can be used in later arguments.
|
||||
|
||||
In case you are wondering, argv(0) returns the program
|
||||
or calc script name. In the case of the above example,
|
||||
argv(0) = "./addall2".
|
||||
|
||||
For systems that support interpreter files, essentially the
|
||||
same thing may be done more efficiently by using calc as an
|
||||
interpreter. Assuming the full path for calc is
|
||||
/usr/local/bin/calc, one could use the file addall3 with contents
|
||||
|
||||
#!/usr/bin/calc -q -s -f
|
||||
#!/usr/bin/calc -q -f
|
||||
global i, n, s;
|
||||
n = argv();
|
||||
for (i = 1; i < n; i++)
|
||||
@@ -161,9 +165,9 @@ Calc shell scripts
|
||||
|
||||
After the command:
|
||||
|
||||
addall3 2 3 4
|
||||
./addall3 2 3 4
|
||||
|
||||
the arguments calc receives are argv(0) = "addall3", argv(1) =
|
||||
the arguments calc receives are argv(0) = "./addall3", argv(1) =
|
||||
"2", argv(3) = "3", argv(4) = "4".
|
||||
|
||||
Another kind of script that can be useful is sqrts1:
|
||||
|
@@ -119,6 +119,7 @@ char *program = "calc"; /* our name */
|
||||
char *base_name = "calc"; /* basename of our name */
|
||||
char cmdbuf[MAXCMD+1+1+1]; /* command line expression + "\n\0" + guard */
|
||||
run run_state = RUN_ZERO; /* calc startup run state */
|
||||
char *script_name = NULL; /* program name or -f filename arg or NULL */
|
||||
|
||||
|
||||
/*
|
||||
@@ -614,6 +615,14 @@ libcalc_call_me_last(void)
|
||||
*/
|
||||
random_libcalc_cleanup();
|
||||
|
||||
/*
|
||||
* free script_name
|
||||
*/
|
||||
if (script_name != NULL) {
|
||||
free(script_name);
|
||||
script_name = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* restore all changed descriptor states
|
||||
*/
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* math_error - a simple libcalc math error routine
|
||||
* lib_calc - calc link library initialization and shutdown routines
|
||||
*
|
||||
* Copyright (C) 1999-2007,2014,2021 Landon Curt Noll
|
||||
*
|
||||
|
31
qio.c
31
qio.c
@@ -247,6 +247,37 @@ qprintnum(NUMBER *q, int outmode, LEN outdigits)
|
||||
PRINTF1("e%ld", exp);
|
||||
break;
|
||||
|
||||
case MODE_ENG:
|
||||
if (qiszero(q)) {
|
||||
PUTCHAR('0');
|
||||
return;
|
||||
}
|
||||
tmpval = *q;
|
||||
tmpval.num.sign = 0;
|
||||
exp = qilog10(&tmpval);
|
||||
if (exp == 0) { /* in range to output as real */
|
||||
qprintnum(q, MODE_REAL, outdigits);
|
||||
return;
|
||||
}
|
||||
tmpval.num = _one_;
|
||||
tmpval.den = _one_;
|
||||
if (exp > 0) {
|
||||
exp -= exp % 3;
|
||||
ztenpow(exp, &tmpval.den);
|
||||
} else {
|
||||
long remainder = exp % 3;
|
||||
if (remainder)
|
||||
exp -= remainder + 3;
|
||||
ztenpow(-exp, &tmpval.num);
|
||||
}
|
||||
q = qmul(q, &tmpval);
|
||||
zfree(tmpval.num);
|
||||
zfree(tmpval.den);
|
||||
qprintnum(q, MODE_REAL, outdigits);
|
||||
qfree(q);
|
||||
if (exp) PRINTF1("e%ld", exp);
|
||||
break;
|
||||
|
||||
case MODE_REAL_AUTO:
|
||||
{
|
||||
const int P = conf->outdigits ? conf->outdigits : 1;
|
||||
|
@@ -52,8 +52,8 @@ static char *program;
|
||||
|
||||
|
||||
#define MAJOR_VER 2 /* major library version */
|
||||
#define MINOR_VER 12 /* minor library version */
|
||||
#define MAJOR_PATCH 9 /* major software version level */
|
||||
#define MINOR_VER 14 /* minor library version */
|
||||
#define MAJOR_PATCH 0 /* major software version level */
|
||||
#define MINOR_PATCH 0 /* minor software version level */
|
||||
|
||||
|
||||
|
@@ -49,11 +49,12 @@ NROFF_ARG=
|
||||
MANMAKE=
|
||||
MANMODE=
|
||||
CALCPATH=./cal
|
||||
CALCRC='/lib/calc/startup:~/.calcrc:./.calcinit'
|
||||
CALCRC='./.calcinit:~/.calcrc:/lib/calc/startup'
|
||||
USE_READLINE=-DUSE_READLINE
|
||||
READLINE_LIB=
|
||||
READLINE_INCLUDE=
|
||||
CALCPAGER=less.exe
|
||||
CCBAN=-DUNBAN
|
||||
|
||||
EXT=.exe
|
||||
|
||||
|
3
zmath.h
3
zmath.h
@@ -594,7 +594,8 @@ E_FUNC void zredcpower(REDC *rp, ZVALUE z1, ZVALUE z2, ZVALUE *res);
|
||||
#define MODE_OCTAL 6
|
||||
#define MODE_BINARY 7
|
||||
#define MODE_REAL_AUTO 8
|
||||
#define MODE_MAX 8
|
||||
#define MODE_ENG 9
|
||||
#define MODE_MAX 9
|
||||
#define MODE2_OFF (MODE_MAX+1)
|
||||
|
||||
/* XXX - perhaps we need the MODE_REAL_AUTO vs MODE_REAL as a config mode? */
|
||||
|
Reference in New Issue
Block a user