mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Compare commits
28 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a6a37f9cad | ||
|
42b089a87c | ||
|
8c5e9e62fa | ||
|
29e956819c | ||
|
66c3d26611 | ||
|
b4952bd44f | ||
|
0d06d90751 | ||
|
e1a3dfda0b | ||
|
8db4e7af47 | ||
|
bb5c624382 | ||
|
8aedcf801a | ||
|
b60eec99bb | ||
|
383290a844 | ||
|
7e40db44e3 | ||
|
a57ee19ca5 | ||
|
a6e226fa80 | ||
|
86e0f98c8f | ||
|
e4dcbf7ecf | ||
|
10c0bd2d95 | ||
|
ad44f1e3ab | ||
|
fd436d7c15 | ||
|
d2cb9c81d5 | ||
|
a0aba073a6 | ||
|
59837e385c | ||
|
bea726fc16 | ||
|
fc0a3dd183 | ||
|
63d9b22067 | ||
|
fc85ac3791 |
145
BUGS
145
BUGS
@@ -29,18 +29,25 @@ The calc web site is located at:
|
|||||||
=-=
|
=-=
|
||||||
|
|
||||||
If you have tried all of the above and things still are not right,
|
If you have tried all of the above and things still are not right,
|
||||||
then it may be time to send in a bug report. You can send bug reports to:
|
then it may be time to send in a bug report. You can send bug
|
||||||
|
and bug fixes reports to:
|
||||||
|
|
||||||
calc-bugs at asthe dot com
|
calc-bugs at asthe dot com
|
||||||
|
|
||||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
[[ NOTE: The EMail address uses 'asthe', the web site URL uses 'isthe' ]]
|
[[ NOTE: The EMail address uses 'asthe', the web site URL uses 'isthe' ]]
|
||||||
|
|
||||||
|
Your subject must contain the words:
|
||||||
|
|
||||||
|
calc bug report
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
When you send your report, please include the following information:
|
When you send your report, please include the following information:
|
||||||
|
|
||||||
* a description of the problem
|
* a description of the problem
|
||||||
* the version of calc you are using (if you cannot get calc
|
* the version of calc you are using (if you cannot get calc
|
||||||
it to run, then send us the 4 #define lines from version.c)
|
to run, then send us the 4 #define lines from version.c)
|
||||||
* if you modified calc from an official patch, send me the mods you made
|
* if you modified calc from an official patch, send me the mods you made
|
||||||
* the type of system you were using
|
* the type of system you were using
|
||||||
* the type of compiler you were using
|
* the type of compiler you were using
|
||||||
@@ -54,18 +61,8 @@ When you send your report, please include the following information:
|
|||||||
|
|
||||||
Stack traces from core dumps are useful to send as well.
|
Stack traces from core dumps are useful to send as well.
|
||||||
|
|
||||||
=-=
|
Fell free to use the above address to send in big fixes (in the form
|
||||||
|
of a context diff patch).
|
||||||
Send any comments, compiler warning messages, suggestions and most
|
|
||||||
importantly, fixes (in the form of a context diff patch) to:
|
|
||||||
|
|
||||||
calc-bugs at asthe dot com
|
|
||||||
|
|
||||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
|
||||||
[[ NOTE: The EMail address uses 'asthe', the web site URL uses 'isthe' ]]
|
|
||||||
|
|
||||||
You should use the above calc-bugs address for bug reports, if you are
|
|
||||||
not currently a member of the calc-tester mailing list.
|
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
@@ -75,14 +72,104 @@ Known bugs:
|
|||||||
us know! See the above for details on how to report and were to
|
us know! See the above for details on how to report and were to
|
||||||
EMail your bug reports and hopefully patches to fix them.
|
EMail your bug reports and hopefully patches to fix them.
|
||||||
|
|
||||||
=-=
|
|
||||||
|
|
||||||
Problems with known work-a-rounds:
|
Problems with known work-a-rounds:
|
||||||
|
|
||||||
|
* The gcc as shipped with Redhat 7 perhaps other Linux distributions
|
||||||
|
has a bug causes calc to dump core on startup when calc is:
|
||||||
|
|
||||||
|
compiled optimized (-O, -O1, -O2 or -O3)
|
||||||
|
|
||||||
|
AND
|
||||||
|
|
||||||
|
compiled with debugging (-g or -g3)
|
||||||
|
|
||||||
|
AND
|
||||||
|
|
||||||
|
when calc is compiled with readline (see USE_READLINE,
|
||||||
|
READLINE_LIB and READLINE_INCLUDE in the Makefile)
|
||||||
|
|
||||||
|
On Redhat, the gcc -v which has this problem is:
|
||||||
|
|
||||||
|
gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-85)
|
||||||
|
|
||||||
|
there may be other gcc versions that also suffer this fate.
|
||||||
|
|
||||||
|
The readlines associated with problem are:
|
||||||
|
|
||||||
|
readline-4.1-5
|
||||||
|
readline2.2.1-2.2.1-2
|
||||||
|
readline-devel-4.1-5
|
||||||
|
|
||||||
|
One work-a-round is to compile calc WITHOUT readline. In the
|
||||||
|
Makefile be sure that:
|
||||||
|
|
||||||
|
USE_READLINE=
|
||||||
|
READLINE_LIB=
|
||||||
|
READLINE_INCLUDE=
|
||||||
|
|
||||||
|
i.e., these Makefile vars are empty.
|
||||||
|
|
||||||
|
If you must use readline, then an alternate work-a-round is to
|
||||||
|
change the DEBUG Makefile variable to either:
|
||||||
|
|
||||||
|
compile for speed: -O3 (or -O2 if you do not have -O3)
|
||||||
|
compile to debug: -g3 (or -g if you do not have -g3)
|
||||||
|
|
||||||
|
but not both.
|
||||||
|
|
||||||
|
See RH bug #57889 for details:
|
||||||
|
|
||||||
|
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=57889
|
||||||
|
|
||||||
* There is a bug in gcc-2.95 that causes calc, when compiled with -O2,
|
* There is a bug in gcc-2.95 that causes calc, when compiled with -O2,
|
||||||
to fail the regression test. The work-a-round is to compile with -O
|
to fail the regression test. The work-a-round is to compile with -O
|
||||||
or to use gcc-2.96 or later.
|
or to use gcc-2.96 or later.
|
||||||
|
|
||||||
|
This bug has been observed on the Sparc and the PowerPC machine.
|
||||||
|
|
||||||
|
On the PowerPC with gcc-2.95 when compiled with -O2, the following
|
||||||
|
patch seems to help:
|
||||||
|
|
||||||
|
*** zfunc.c.orig Fri Feb 23 18:18:39 2001
|
||||||
|
--- zfunc.c Fri Feb 23 18:39:33 2001
|
||||||
|
***************
|
||||||
|
*** 1481,1487 ****
|
||||||
|
{
|
||||||
|
HALF *a, *A, *b, *a0, u;
|
||||||
|
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
|
||||||
|
! FULL d, e, f, g, h, s, t, x, topbit;
|
||||||
|
int remsign;
|
||||||
|
BOOL up, onebit;
|
||||||
|
ZVALUE sqrt;
|
||||||
|
--- 1481,1488 ----
|
||||||
|
{
|
||||||
|
HALF *a, *A, *b, *a0, u;
|
||||||
|
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
|
||||||
|
! volatile FULL d;
|
||||||
|
! FULL e, f, g, h, s, t, x, topbit;
|
||||||
|
int remsign;
|
||||||
|
BOOL up, onebit;
|
||||||
|
ZVALUE sqrt;
|
||||||
|
*** zmath.c 2000/06/07 14:02:13 29.2
|
||||||
|
--- zmath.c 2001/03/13 19:47:03
|
||||||
|
***************
|
||||||
|
*** 1608,1614 ****
|
||||||
|
void
|
||||||
|
zbitvalue(long n, ZVALUE *res)
|
||||||
|
{
|
||||||
|
! ZVALUE z;
|
||||||
|
|
||||||
|
if (n < 0) n = 0;
|
||||||
|
z.sign = 0;
|
||||||
|
--- 1608,1614 ----
|
||||||
|
void
|
||||||
|
zbitvalue(long n, ZVALUE *res)
|
||||||
|
{
|
||||||
|
! volatile ZVALUE z;
|
||||||
|
|
||||||
|
if (n < 0) n = 0;
|
||||||
|
z.sign = 0;
|
||||||
|
|
||||||
* Solaris cc somtimes barfs while compiling zrand.c. In particular, calc
|
* Solaris cc somtimes barfs while compiling zrand.c. In particular, calc
|
||||||
barfs on on the SVAL macro. The work-a-round is to use the Solaric cc
|
barfs on on the SVAL macro. The work-a-round is to use the Solaric cc
|
||||||
Makefile set sets -DFORCE_STDC. I.e,:
|
Makefile set sets -DFORCE_STDC. I.e,:
|
||||||
@@ -163,6 +250,28 @@ Problems with known work-a-rounds:
|
|||||||
or performance. The work-a-round is to ignore these warnings
|
or performance. The work-a-round is to ignore these warnings
|
||||||
under BSDI.
|
under BSDI.
|
||||||
|
|
||||||
|
* The chi.cal resource file does not work well with odd degrees
|
||||||
|
of freedom. Can someone improve this algorithm?
|
||||||
|
|
||||||
|
* The intfile.cal resource file reads and writes big or little Endian
|
||||||
|
integers to/from files the hard way. It does NOT use blkcpy. The
|
||||||
|
following code:
|
||||||
|
|
||||||
|
i = (ord("\n") << 16) | (ord("i") << 8) | ord("H")
|
||||||
|
b = blk()
|
||||||
|
copy(i, b)
|
||||||
|
fd = fopen("file", "w")
|
||||||
|
copy(b, fd);
|
||||||
|
fclose(fd)
|
||||||
|
|
||||||
|
will write an extra NUL octet to the file. Where as:
|
||||||
|
|
||||||
|
read intfile
|
||||||
|
i = (ord("\n") << 16) | (ord("i") << 8) | ord("H")
|
||||||
|
be2file(i, "file2")
|
||||||
|
|
||||||
|
will not.
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
@@ -179,8 +288,8 @@ Problems with known work-a-rounds:
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.5 $
|
## @(#) $Revision: 29.18 $
|
||||||
## @(#) $Id: BUGS,v 29.5 2000/06/07 14:02:13 chongo Exp $
|
## @(#) $Id: BUGS,v 29.18 2004/07/26 05:56:40 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1994/03/18 14:06:13
|
## Under source code control: 1994/03/18 14:06:13
|
||||||
|
49
COPYING
49
COPYING
@@ -12,8 +12,8 @@ This file is Copyrighted
|
|||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
# @(#) $Revision: 29.3 $
|
# @(#) $Revision: 29.7 $
|
||||||
# @(#) $Id: COPYING,v 29.3 2000/12/14 09:18:06 chongo Exp $
|
# @(#) $Id: COPYING,v 29.7 2003/02/26 16:54:59 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
@@ -55,13 +55,18 @@ Calc is covered by the GNU Lesser General Public License
|
|||||||
|
|
||||||
The contact addresses for calc is as follows:
|
The contact addresses for calc is as follows:
|
||||||
|
|
||||||
Web: http://www.isthe.com/chongo/tech/comp/calc/index.html
|
Web: http://www.isthe.com/chongo/tech/comp/calc/email.html
|
||||||
EMail: calc-contrib at asthe dot com
|
|
||||||
|
|
||||||
To join the calc-tester mailing list. Send a request to:
|
To join the low volume calc mailing list. Send a EMail message to:
|
||||||
|
|
||||||
calc-tester-request at asthe dot com
|
calc-tester-request at asthe dot com
|
||||||
|
|
||||||
|
Your subject must contain the words:
|
||||||
|
|
||||||
|
calc mailing list subscription
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
Your message body (not the subject) should consist of:
|
Your message body (not the subject) should consist of:
|
||||||
|
|
||||||
subscribe calc-tester address
|
subscribe calc-tester address
|
||||||
@@ -71,13 +76,23 @@ Calc is covered by the GNU Lesser General Public License
|
|||||||
where ``address'' is your EMail address and ``your_full_name'' is
|
where ``address'' is your EMail address and ``your_full_name'' is
|
||||||
your full name.
|
your full name.
|
||||||
|
|
||||||
Calc bug reports, however should be sent to:
|
Feel free to follow the name line with additional EMail text as desired.
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
Calc bug reports and calc bug fixes should be sent to:
|
||||||
|
|
||||||
calc-bugs at asthe dot com
|
calc-bugs at asthe dot com
|
||||||
|
|
||||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||||
|
|
||||||
|
Your subject must contain the words:
|
||||||
|
|
||||||
|
calc bug report
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
Calc's relationship to the GNU Lesser General Public License
|
Calc's relationship to the GNU Lesser General Public License
|
||||||
@@ -140,7 +155,7 @@ Calc copyrights and exception files
|
|||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
With the exception of the files listed below, Calc is covered under
|
With the exception of the files listed below, Calc is covered under
|
||||||
the following Copyrights:
|
the following GNU Lesser General Public License Copyrights:
|
||||||
|
|
||||||
Copyright (C) year David I. Bell
|
Copyright (C) year David I. Bell
|
||||||
Copyright (C) year David I. Bell and Landon Curt Noll
|
Copyright (C) year David I. Bell and Landon Curt Noll
|
||||||
@@ -149,13 +164,13 @@ Calc copyrights and exception files
|
|||||||
Copyright (C) year Landon Curt Noll
|
Copyright (C) year Landon Curt Noll
|
||||||
Copyright (C) year Ernest Bowen and Landon Curt Noll
|
Copyright (C) year Ernest Bowen and Landon Curt Noll
|
||||||
Copyright (C) year Ernest Bowen
|
Copyright (C) year Ernest Bowen
|
||||||
|
Copyright (C) year Petteri Kettunen and Landon Curt Noll
|
||||||
|
|
||||||
A few files are not covered under the GNU Lesser General Public
|
These files are not covered under one of the Copyrights listed above:
|
||||||
License. The source files not covered are:
|
|
||||||
|
|
||||||
shs1.c shs1.h shs.c shs.h
|
shs1.c shs1.h shs.c shs.h
|
||||||
md5.c md5.h lib/qtime.cal COPYING
|
md5.c md5.h COPYING COPYING-LGPL
|
||||||
COPYING-LGPL
|
cal/qtime.cal
|
||||||
|
|
||||||
The file COPYING-LGPL, which contains a copy of the version 2.1
|
The file COPYING-LGPL, which contains a copy of the version 2.1
|
||||||
GNU Lesser General Public License, is itself Copyrighted by the
|
GNU Lesser General Public License, is itself Copyrighted by the
|
||||||
@@ -168,10 +183,12 @@ Calc copyrights and exception files
|
|||||||
verbatim copies of this file but you may not modify this file.
|
verbatim copies of this file but you may not modify this file.
|
||||||
|
|
||||||
Some of these exception files are in the public domain. Other
|
Some of these exception files are in the public domain. Other
|
||||||
exception files have non-LGPL Copyrights. In all cases one may
|
exception files have non-LGPL Copyrights. Other files are under a
|
||||||
use and distribute these exception files freely. And because one
|
LGPL Copyright but have different authors.
|
||||||
may freely distribute the LGPL covered files, the entire calc
|
|
||||||
source may be freely used and distributed.
|
In all cases one may use and distribute these exception files freely.
|
||||||
|
And because one may freely distribute the LGPL covered files, the
|
||||||
|
entire calc source may be freely used and distributed.
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
|
149
HOWTO.INSTALL
149
HOWTO.INSTALL
@@ -1,34 +1,130 @@
|
|||||||
Installing calc in 4 easy steps:
|
Installing calc from the gziped tarball in 4 easy steps:
|
||||||
|
|
||||||
1) Look at the makefile, and adjust it to suit your needs.
|
0) If your platform supports i686 RPMs, you may want to go to:
|
||||||
|
|
||||||
Here are some Makefile hints:
|
http://www.isthe.com/chongo/src/calc/
|
||||||
|
|
||||||
Select a compiler set by commenting in the appropriate set
|
and use these RPMs:
|
||||||
of cc options. As shipped the Makefile assumes a gcc-like
|
|
||||||
environment such as Linux. If a more appropriate cc set if
|
|
||||||
found below, comment out the Linux set and comment in that
|
|
||||||
set or edit the gcc set or the common cc set as needed.
|
|
||||||
|
|
||||||
You may or may not need RANLIB when building libraries.
|
* calc*.i686.rpm
|
||||||
As shipped the Makefile assumes RANLIB is needed.
|
- all that is needed if you just want to use calc
|
||||||
Comment the in/out the RANLIB value if ranlib does
|
|
||||||
not work or does not exist.
|
|
||||||
|
|
||||||
You may want to change the default pager used by calc.
|
* calc-devel-*.i686.rpm
|
||||||
As shipped the Makefile assumes 'more'. On your system
|
- calc *.h header and *.a lib files for use in other programs
|
||||||
you may find 'less' to be a better pager.
|
|
||||||
|
|
||||||
Set TOPDIR to be the place under which help files, calc,
|
* calc.*.src.rpm
|
||||||
include files and calc libs are to be installed. As shipped
|
- calc source in RPM package form
|
||||||
the Makefile assumes a TOPDIR of /usr/local/lib.
|
|
||||||
|
|
||||||
Set BINDIR to the place where calc is installed. As shipped
|
The following 4 steps apply to calc source tree that comes from either:
|
||||||
the Makefile assumes a BINDIR /usr/local/bin.
|
|
||||||
|
gunzip -c calc-*.tar.gz | tar -xvf -
|
||||||
|
|
||||||
|
or from:
|
||||||
|
|
||||||
|
rpm -ivh calc-*.src.rpm
|
||||||
|
cd /var/tmp
|
||||||
|
gunzip -c /usr/src/redhat/SOURCES/calc-*.tar.gz | tar -xvf -
|
||||||
|
|
||||||
|
1) Look at the makefile, and adjust it to suit your needs.
|
||||||
|
|
||||||
|
The Makefile, as shipped, is suitable for installation under
|
||||||
|
Linux and Un*x-like environments. For the most part, the default
|
||||||
|
values should work. If in doubt, follow the 'When in doubt'
|
||||||
|
suggestion.
|
||||||
|
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
! If you are building under Windoz or a Windoz-like environment !
|
||||||
|
! (such as Cygwin or DJGPP), read the README.WINDOWS file. !
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
You should determine if these Makefile variables are reasonable:
|
||||||
|
|
||||||
|
INCDIR Where the system include (.h) files are kept.
|
||||||
|
BINDIR Where to install calc binary files.
|
||||||
|
LIBDIR Where to install calc link library (*.a) files.
|
||||||
|
CALC_SHAREDIR Where to install calc help, .cal, startup, and
|
||||||
|
config files.
|
||||||
|
|
||||||
|
You may want to change the default installation locations for
|
||||||
|
these values, which are based on the 4 values listed above:
|
||||||
|
|
||||||
|
HELPDIR where the help directory is installed
|
||||||
|
CALC_INCDIR where the calc include files are installed
|
||||||
|
CUSTOMCALDIR where custom *.cal files are installed
|
||||||
|
CUSTOMHELPDIR where custom help files are installed
|
||||||
|
CUSTOMINCPDIR where custom .h files are installed
|
||||||
|
SCRIPTDIR where calc shell scripts are installed
|
||||||
|
|
||||||
|
If you want to install calc files under a top level directory,
|
||||||
|
then set the T value:
|
||||||
|
|
||||||
|
The calc install is performed under $T, the calc build is
|
||||||
|
performed under /. The purpose for $T is to allow someone
|
||||||
|
to install calc somewhere other than into the system area.
|
||||||
|
|
||||||
|
For example, if:
|
||||||
|
|
||||||
|
BINDIR= /usr/bin
|
||||||
|
LIBDIR= /usr/lib
|
||||||
|
CALC_SHAREDIR= /usr/share/calc
|
||||||
|
|
||||||
|
and if:
|
||||||
|
|
||||||
|
T= /var/tmp/testing
|
||||||
|
|
||||||
|
Then the installation locations will be:
|
||||||
|
|
||||||
|
calc binary files: /var/tmp/testing/usr/bin
|
||||||
|
calc link library: /var/tmp/testing/usr/lib
|
||||||
|
calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||||
|
... etc ... /var/tmp/testing/...
|
||||||
|
|
||||||
|
If $T is empty, calc is installed under /, which is the same
|
||||||
|
top of tree for which it was built. If $T is non-empty, then
|
||||||
|
calc is installed under $T, as if one had to chroot under
|
||||||
|
$T for calc to operate.
|
||||||
|
|
||||||
|
Look for the section that starts:
|
||||||
|
|
||||||
|
################
|
||||||
|
# compiler set #
|
||||||
|
################
|
||||||
|
|
||||||
|
Select a compiler set by commenting in the appropriate set
|
||||||
|
of cc options. As shipped the Makefile assumes a gcc-like
|
||||||
|
environment such as Linux. If a more appropriate cc set if
|
||||||
|
found below, comment out the Linux set and comment in that
|
||||||
|
set or edit the gcc set or the common cc set as needed.
|
||||||
|
|
||||||
|
You may want to change these Makrfile variables from their defaults:
|
||||||
|
|
||||||
|
RANLIB
|
||||||
|
|
||||||
|
You may or may not need RANLIB when building libraries.
|
||||||
|
As shipped the Makefile assumes RANLIB is needed.
|
||||||
|
Comment the in/out the RANLIB value if ranlib does
|
||||||
|
not work or does not exist.
|
||||||
|
|
||||||
|
CALCPAGER
|
||||||
|
|
||||||
|
You may want to change the default pager used by calc.
|
||||||
|
As shipped the Makefile assumes 'more'. On your system
|
||||||
|
you may find 'less' to be a better pager.
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
|
||||||
|
Some compilers (to put it mildly) have bugs. Sometimes the
|
||||||
|
DEBUG Makefile variable causes the compiler / optimizer to
|
||||||
|
produce bad code. Other compilers do just fine.
|
||||||
|
|
||||||
|
If possible try to use DEBUG=-O3 -g3 (maximum optimization
|
||||||
|
and debug symbols). If the calc test fails (see step 3),
|
||||||
|
try lowering either the -O value and/or the -g3. Also try
|
||||||
|
using -Osomething without -g.
|
||||||
|
|
||||||
Adjust other Makefile variables as needed.
|
Adjust other Makefile variables as needed.
|
||||||
|
|
||||||
2) build calc:
|
2) build calc:
|
||||||
|
|
||||||
make all
|
make all
|
||||||
|
|
||||||
@@ -36,13 +132,14 @@ Installing calc in 4 easy steps:
|
|||||||
you may find. See the BUGS file if you find any compiler
|
you may find. See the BUGS file if you find any compiler
|
||||||
warning or errors.
|
warning or errors.
|
||||||
|
|
||||||
3) test calc:
|
3) test calc:
|
||||||
|
|
||||||
make check
|
make check
|
||||||
|
|
||||||
==> If you run into problems, follow the BUGS file instructions.
|
==> If you run into problems, read the BUGS file and follow
|
||||||
|
the instructions found in there.
|
||||||
|
|
||||||
4) install calc:
|
4) install calc:
|
||||||
|
|
||||||
make install
|
make install
|
||||||
|
|
||||||
@@ -65,8 +162,8 @@ the calc help subsystem. See the README file for details.
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.7 $
|
||||||
## @(#) $Id: HOWTO.INSTALL,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
## @(#) $Id: HOWTO.INSTALL,v 29.7 2003/04/15 03:38:34 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/HOWTO.INSTALL,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/HOWTO.INSTALL,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1999/09/27 20:48:44
|
## Under source code control: 1999/09/27 20:48:44
|
||||||
|
28
LIBRARY
28
LIBRARY
@@ -48,12 +48,30 @@ convenient for outside use. So you should read the source for a routine
|
|||||||
to see if it really does what you think it does. I won't guarantee that
|
to see if it really does what you think it does. I won't guarantee that
|
||||||
obscure internal routines won't change or disappear in future releases!
|
obscure internal routines won't change or disappear in future releases!
|
||||||
|
|
||||||
When calc is installed, all of the include files needed to build
|
When calc is installed, all of libraries are installed into ${LIBDIR}.
|
||||||
libcalc.a along with the link library itself are installed into ${LIBDIR}.
|
All of the calc header files are installed under ${INCDIRCALC}.
|
||||||
|
|
||||||
|
If CALC_SRC is defined, then the calc header files will assume that
|
||||||
|
they are in or under the current directory. However, most external
|
||||||
|
programs most likely will not be located under calc'c source tree.
|
||||||
|
External programs most likely want to use the installed calc header
|
||||||
|
files under ${INCDIRCALC}. External programs most likely NOT want
|
||||||
|
to define CALC_SRC.
|
||||||
|
|
||||||
External programs may want to compile with:
|
External programs may want to compile with:
|
||||||
|
|
||||||
-I${LIBDIR} -L${LIBDIR} -lcalc
|
-L${LIBDIR} -lcalc
|
||||||
|
|
||||||
|
If custom functions are also used, they may want to compile with:
|
||||||
|
|
||||||
|
-L${LIBDIR} -lcalc -lcustcalc
|
||||||
|
|
||||||
|
The CALC_SRC symbol should NOT be defined by default. However if you are
|
||||||
|
feeling pedantic you may want to force CALC_SRC to be undefined:
|
||||||
|
|
||||||
|
-UCALC_SRC
|
||||||
|
|
||||||
|
as well.
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
ERROR HANDLING
|
ERROR HANDLING
|
||||||
@@ -471,8 +489,8 @@ need call libcalc_call_me_last() only once.
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.5 $
|
||||||
## @(#) $Id: LIBRARY,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
## @(#) $Id: LIBRARY,v 29.5 2001/06/08 22:57:35 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/LIBRARY,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/LIBRARY,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1993/07/30 19:44:49
|
## Under source code control: 1993/07/30 19:44:49
|
||||||
|
24
README
24
README
@@ -73,13 +73,19 @@ for a wish/todo list. Code contributions are welcome.
|
|||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
To join the calc-tester mailing list. Send a request to:
|
To join the calc-tester mailing list. Send an EMail message to:
|
||||||
|
|
||||||
calc-tester-request at asthe dot com
|
calc-tester-request at asthe dot com
|
||||||
|
|
||||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||||
|
|
||||||
|
Your subject must contain the words:
|
||||||
|
|
||||||
|
calc mailing list subscription
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
Your message body (not the subject) should consist of:
|
Your message body (not the subject) should consist of:
|
||||||
|
|
||||||
subscribe calc-tester address
|
subscribe calc-tester address
|
||||||
@@ -89,7 +95,11 @@ Your message body (not the subject) should consist of:
|
|||||||
where ``address'' is your EMail address and ``your_full_name'' is
|
where ``address'' is your EMail address and ``your_full_name'' is
|
||||||
your full name.
|
your full name.
|
||||||
|
|
||||||
Calc bug reports, however should be sent to:
|
Feel free to follow the name line with additional EMail text as desired.
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
Send Calc bug and bug fixes to:
|
||||||
|
|
||||||
calc-bugs at asthe dot com
|
calc-bugs at asthe dot com
|
||||||
|
|
||||||
@@ -98,6 +108,12 @@ Calc bug reports, however should be sent to:
|
|||||||
|
|
||||||
but see the BUGS file first.
|
but see the BUGS file first.
|
||||||
|
|
||||||
|
Your subject must contain the words:
|
||||||
|
|
||||||
|
calc bug report
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
The calc web site is located at:
|
The calc web site is located at:
|
||||||
|
|
||||||
http://www.isthe.com/chongo/tech/comp/calc/
|
http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
@@ -118,8 +134,8 @@ The calc web site is located at:
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: README,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
## @(#) $Id: README,v 29.3 2001/06/01 11:26:53 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1995/10/25 05:27:59
|
## Under source code control: 1995/10/25 05:27:59
|
||||||
|
169
README.WINDOWS
Normal file
169
README.WINDOWS
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
Dear calc user on a Windoz based system,
|
||||||
|
|
||||||
|
See the HOWTO.INSTALL file for information on how to build and install calc.
|
||||||
|
See also the README file.
|
||||||
|
|
||||||
|
NOTE: The main developers do not have access to a Windoz based platform.
|
||||||
|
While we will make an effort to not break calc Windoz based system,
|
||||||
|
our lack of a Windoz test environment will mean we will make mistakes
|
||||||
|
from time to time. Hopefully Windowz users can overcome these mistakes.
|
||||||
|
Of course you are welcome to send us any patches that fix your
|
||||||
|
Windoz build environment.
|
||||||
|
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
=-= compiling under DJGPP =-=
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
|
||||||
|
You might want to try using the DJGPP system to compile calc. See:
|
||||||
|
|
||||||
|
http://www.delorie.com/djgpp/
|
||||||
|
|
||||||
|
for DJGPP details and availability.
|
||||||
|
|
||||||
|
To compile with DJGPP, one needs to select a number of Makefile
|
||||||
|
variable changes. Eli Zaretskii <eliz at is dot elta dot co dot il>
|
||||||
|
recommends the following settings:
|
||||||
|
|
||||||
|
TERMCONTROL= -DUSE_TERMIOS
|
||||||
|
BYTE_ORDER= -DLITTLE_ENDIAN
|
||||||
|
LONG_BITS= 32
|
||||||
|
HAVE_FPOS_POS= -DHAVE_NO_FPOS_POS
|
||||||
|
FPOS_BITS= 32
|
||||||
|
OFF_T_BITS= 32
|
||||||
|
DEV_BITS= 32
|
||||||
|
INODE_BITS= 32
|
||||||
|
HAVE_USTAT= -DHAVE_NO_USTAT
|
||||||
|
HAVE_GETSID= -DHAVE_NO_GETSID
|
||||||
|
HAVE_GETPGID= -DHAVE_NO_GETPGID
|
||||||
|
HAVE_GETTIME= -DHAVE_NO_GETTIME
|
||||||
|
HAVE_GETPRID= -DHAVE_NO_GETPRID
|
||||||
|
HAVE_URANDOM_H= NO
|
||||||
|
ALIGN32= -UMUST_ALIGN32
|
||||||
|
HAVE_MALLOC_H= YES
|
||||||
|
HAVE_STDLIB_H= YES
|
||||||
|
HAVE_STRING_H= YES
|
||||||
|
HAVE_TIMES_H= NO
|
||||||
|
HAVE_SYS_TIMES_H= YES
|
||||||
|
HAVE_TIME_H= YES
|
||||||
|
HAVE_SYS_TIME_H= YES
|
||||||
|
HAVE_UNISTD_H= YES
|
||||||
|
BINDIR= /dev/env/DJDIR/bin
|
||||||
|
INCDIR= /dev/env/DJDIR/include
|
||||||
|
LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
MANDIR= /dev/env/DJDIR/man/man1
|
||||||
|
CATDIR= /dev/env/DJDIR/man/cat1
|
||||||
|
NROFF= groff
|
||||||
|
CALCPATH= .;./cal;~/.cal;${CALC_SHAREDIR};${CUSTOMCALDIR}
|
||||||
|
CALCRC= ${CALC_SHAREDIR}/startup;~/.calcrc;./.calcinit
|
||||||
|
CALCPAGER= less.exe -ci
|
||||||
|
DEBUG= -O2 -gstabs+
|
||||||
|
|
||||||
|
The 'Linux set' or 'gcc set' (see the Select your compiler type section)
|
||||||
|
should work for DJGPP systems if you set the above Makefile variables.
|
||||||
|
|
||||||
|
Look for Makefile comments of the form:
|
||||||
|
|
||||||
|
# Select ...something... for DJGPP.
|
||||||
|
|
||||||
|
Follow those recommendations. In cases where they conflict with
|
||||||
|
the above Makefile list, follow the recommendation in the Makefile.
|
||||||
|
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
=-= compiling with Cygwin =-=
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
|
||||||
|
An effort is being made to allow windows users to compile calc using the
|
||||||
|
Cygwin project (http://sources.redhat.com/cygwin/) with the GCC compiler
|
||||||
|
and Un*x tools for Windows.
|
||||||
|
|
||||||
|
The major porting work was performed by Thomas Jones-Low
|
||||||
|
(tjoneslo at softstart dot com). He said:
|
||||||
|
|
||||||
|
I had previous stated to this group that I have successfully managed
|
||||||
|
to port a version of Calc to Windows, and promised some point to
|
||||||
|
post what was required, so here it is.
|
||||||
|
|
||||||
|
One obvious manner of doing this port is to get the latest version
|
||||||
|
of the Cygwin project (http://sources.redhat.com/cygwin/) with the
|
||||||
|
GCC compiler and Un*x tools for Windows and recompile.
|
||||||
|
|
||||||
|
I built my working version using Calc ... I am using Visual C++
|
||||||
|
version 7.0, which is an older version of the Microsoft development
|
||||||
|
tools. The make file provided with Calc is not compatible with
|
||||||
|
NMAKE, so I used the Visual Studio tools to generate another one
|
||||||
|
(not included). Calc is built in two parts, calc.dll, which is the
|
||||||
|
library, and calc.exe which is the command line interface.
|
||||||
|
|
||||||
|
He recommended that you generate by hand all of the header files that
|
||||||
|
by the Makefile. This has been done for you via the makefile rule:
|
||||||
|
|
||||||
|
make win32_hsrc
|
||||||
|
|
||||||
|
which uses the Makefile variables in win32.mkdef to form these header
|
||||||
|
files under win32 directory.
|
||||||
|
|
||||||
|
You will find generated versions of these files located in the win32
|
||||||
|
sub-directory. These files may be appropriate for your Cygwin building
|
||||||
|
needs.
|
||||||
|
|
||||||
|
In particular:
|
||||||
|
|
||||||
|
Just copy the win32/*.[ch] files up into the top level calc
|
||||||
|
source directory, edit them (if needed) and build using the
|
||||||
|
Cygwin GCC compiler and Cygwin build environment.
|
||||||
|
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
=-=-= calc maintenance folk =-=-=
|
||||||
|
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
|
||||||
|
People who maintain calc need to keep in mind the following:
|
||||||
|
|
||||||
|
The following was added to opcodes.h, config.h, zmath.h and value.h:
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#ifdef _EXPORTING
|
||||||
|
#define DLL __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
#define DLL __declspec(dllimport)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else /* Windoz free systems */
|
||||||
|
|
||||||
|
#define DLL
|
||||||
|
|
||||||
|
#endif /* Windoz free systems */
|
||||||
|
|
||||||
|
Then DLL was added in front of all the exported functions. For example:
|
||||||
|
|
||||||
|
extern int configtype(char*);
|
||||||
|
|
||||||
|
was changed to:
|
||||||
|
|
||||||
|
DLL extern int configtype(char*);
|
||||||
|
|
||||||
|
|
||||||
|
## Copyright (C) 2002 Landon Curt Noll and Thomas Jones-Low
|
||||||
|
##
|
||||||
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
## as published by the Free Software Foundation.
|
||||||
|
##
|
||||||
|
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
## Public License for more details.
|
||||||
|
##
|
||||||
|
## A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
##
|
||||||
|
## @(#) $Revision: 29.12 $
|
||||||
|
## @(#) $Id: README.WINDOWS,v 29.12 2004/07/28 12:52:01 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README.WINDOWS,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 2001/02/25 14:00:05
|
||||||
|
## File existed as early as: 2001
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
14
addop.c
14
addop.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* addop - add opcodes to a function being compiled
|
* addop - add opcodes to a function being compiled
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell and Ernest Bowen
|
* Copyright (C) 1999-2004 David I. Bell and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.3 $
|
* @(#) $Revision: 29.5 $
|
||||||
* @(#) $Id: addop.c,v 29.3 2000/07/17 15:35:49 chongo Exp $
|
* @(#) $Id: addop.c,v 29.5 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:10
|
* Under source code control: 1990/02/15 01:48:10
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
#define OPCODEALLOCSIZE 100 /* reallocate size for opcodes in functions */
|
#define OPCODEALLOCSIZE 100 /* reallocate size for opcodes in functions */
|
||||||
|
|
||||||
|
|
||||||
static long maxopcodes; /* number of opcodes available */
|
static unsigned long maxopcodes;/* number of opcodes available */
|
||||||
static long newindex; /* index of new function */
|
static long newindex; /* index of new function */
|
||||||
static char *newname; /* name of new function */
|
static char *newname; /* name of new function */
|
||||||
static long oldop; /* previous opcode */
|
static long oldop; /* previous opcode */
|
||||||
@@ -185,7 +185,7 @@ endfunc(void)
|
|||||||
{
|
{
|
||||||
register FUNC *fp; /* function just finished */
|
register FUNC *fp; /* function just finished */
|
||||||
unsigned long size; /* size of just created function */
|
unsigned long size; /* size of just created function */
|
||||||
long index;
|
unsigned long index;
|
||||||
|
|
||||||
if (oldop != OP_RETURN) {
|
if (oldop != OP_RETURN) {
|
||||||
addop(OP_UNDEF);
|
addop(OP_UNDEF);
|
||||||
@@ -302,7 +302,7 @@ void
|
|||||||
freefunc(FUNC *fp)
|
freefunc(FUNC *fp)
|
||||||
{
|
{
|
||||||
long index;
|
long index;
|
||||||
long i;
|
unsigned long i;
|
||||||
|
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return;
|
return;
|
||||||
@@ -383,7 +383,7 @@ clearopt(void)
|
|||||||
FUNC *
|
FUNC *
|
||||||
findfunc(long index)
|
findfunc(long index)
|
||||||
{
|
{
|
||||||
if ((unsigned long) index >= funccount) {
|
if (index >= funccount) {
|
||||||
math_error("Undefined function");
|
math_error("Undefined function");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
|
19
alloc.h
19
alloc.h
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: alloc.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: alloc.h,v 29.4 2001/06/08 21:00:58 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/alloc.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/alloc.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:29
|
* Under source code control: 1990/02/15 01:48:29
|
||||||
@@ -32,10 +32,17 @@
|
|||||||
#define __ALLOC_H__
|
#define __ALLOC_H__
|
||||||
|
|
||||||
|
|
||||||
#include "have_malloc.h"
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
#include "have_newstr.h"
|
# include "have_malloc.h"
|
||||||
#include "have_string.h"
|
# include "have_newstr.h"
|
||||||
#include "have_memmv.h"
|
# include "have_string.h"
|
||||||
|
# include "have_memmv.h"
|
||||||
|
#else
|
||||||
|
# include <calc/have_malloc.h>
|
||||||
|
# include <calc/have_newstr.h>
|
||||||
|
# include <calc/have_string.h>
|
||||||
|
# include <calc/have_memmv.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_MALLOC_H
|
#ifdef HAVE_MALLOC_H
|
||||||
# include <malloc.h>
|
# include <malloc.h>
|
||||||
|
52
blkcpy.c
52
blkcpy.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* blkcpy - general values and related routines used by the calculator
|
* blkcpy - general values and related routines used by the calculator
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen
|
* Copyright (C) 1999-2004 Landon Curt Noll and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: Landon Curt Noll
|
* Primary author: Landon Curt Noll
|
||||||
*
|
*
|
||||||
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.5 $
|
||||||
* @(#) $Id: blkcpy.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: blkcpy.c,v 29.5 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/04/18 20:41:26
|
* Under source code control: 1997/04/18 20:41:26
|
||||||
@@ -287,13 +287,13 @@ copymat2mat(MATRIX *smat, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
|
|
||||||
if (num < 0)
|
if (num < 0)
|
||||||
num = smat->m_size - ssi;
|
num = smat->m_size - ssi;
|
||||||
if ((USB32) ssi + num > smat->m_size)
|
if (ssi + num > smat->m_size)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if ((USB32) dsi + num > dmat->m_size)
|
if (dsi + num > dmat->m_size)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||||
if (vtemp == NULL) {
|
if (vtemp == NULL) {
|
||||||
@@ -335,13 +335,13 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
return E_COPY2;
|
return E_COPY2;
|
||||||
if (num < 0)
|
if (num < 0)
|
||||||
num = blk->datalen - ssi;
|
num = blk->datalen - ssi;
|
||||||
if ((USB32) ssi + num > blk->datalen)
|
if (ssi + num > blk->datalen)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if ((USB32) dsi + num > dmat->m_size)
|
if (dsi + num > dmat->m_size)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
op = blk->data + ssi;
|
op = blk->data + ssi;
|
||||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||||
@@ -389,7 +389,7 @@ copymat2blk(MATRIX *smat, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
|
|||||||
num = smat->m_size - ssi;
|
num = smat->m_size - ssi;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if ((USB32) ssi + num > smat->m_size)
|
if (ssi + num > smat->m_size)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = dblk->datalen;
|
dsi = dblk->datalen;
|
||||||
@@ -436,11 +436,11 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
|
|||||||
num = smat->m_size - ssi;
|
num = smat->m_size - ssi;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if ((USB32) ssi + num > smat->m_size)
|
if (ssi + num > smat->m_size)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if ((USB32) dsi + num > lp->l_count)
|
if (dsi + num > lp->l_count)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||||
if (vtemp == NULL) {
|
if (vtemp == NULL) {
|
||||||
@@ -484,11 +484,11 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
num = lp->l_count - ssi;
|
num = lp->l_count - ssi;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if ((USB32) ssi + num > lp->l_count)
|
if (ssi + num > lp->l_count)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if ((USB32) dsi + num > dmat->m_size)
|
if (dsi + num > dmat->m_size)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||||
if (vtemp == NULL) {
|
if (vtemp == NULL) {
|
||||||
@@ -533,11 +533,11 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
|
|||||||
num = slp->l_count - ssi;
|
num = slp->l_count - ssi;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if ((USB32) ssi + num > slp->l_count)
|
if (ssi + num > slp->l_count)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = 0;
|
dsi = 0;
|
||||||
if ((USB32) dsi + num > dlp->l_count)
|
if (dsi + num > dlp->l_count)
|
||||||
return E_COPY7;
|
return E_COPY7;
|
||||||
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
vtemp = (VALUE *) malloc(num * sizeof(VALUE));
|
||||||
if (vtemp == NULL) {
|
if (vtemp == NULL) {
|
||||||
@@ -572,7 +572,7 @@ copyblk2file(BLOCK *sblk, long ssi, long num, FILEID id, long dsi)
|
|||||||
{
|
{
|
||||||
FILEIO *fiop;
|
FILEIO *fiop;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
unsigned int numw;
|
long numw;
|
||||||
|
|
||||||
if (ssi > sblk->datalen)
|
if (ssi > sblk->datalen)
|
||||||
return E_COPY2;
|
return E_COPY2;
|
||||||
@@ -581,7 +581,7 @@ copyblk2file(BLOCK *sblk, long ssi, long num, FILEID id, long dsi)
|
|||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fiop = findid(id, 'w');
|
fiop = findid(id, TRUE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return E_COPYF1;
|
return E_COPYF1;
|
||||||
fp = fiop->fp;
|
fp = fiop->fp;
|
||||||
@@ -609,7 +609,7 @@ copyfile2blk(FILEID id, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
|
|||||||
{
|
{
|
||||||
FILEIO *fiop;
|
FILEIO *fiop;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
unsigned int numw;
|
long numw;
|
||||||
ZVALUE fsize;
|
ZVALUE fsize;
|
||||||
long filelen;
|
long filelen;
|
||||||
long newlen;
|
long newlen;
|
||||||
@@ -618,7 +618,7 @@ copyfile2blk(FILEID id, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
|
|||||||
|
|
||||||
if (id < 3) /* excludes copying from stdin */
|
if (id < 3) /* excludes copying from stdin */
|
||||||
return E_COPYF1;
|
return E_COPYF1;
|
||||||
fiop = findid(id, 'r');
|
fiop = findid(id, FALSE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return E_COPYF1;
|
return E_COPYF1;
|
||||||
|
|
||||||
@@ -639,7 +639,7 @@ copyfile2blk(FILEID id, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
|
|||||||
num = filelen - ssi;
|
num = filelen - ssi;
|
||||||
if (num == 0)
|
if (num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
if ((USB32) ssi + num > filelen)
|
if (ssi + num > filelen)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (fseek(fp, ssi, 0)) /* using system fseek XXX */
|
if (fseek(fp, ssi, 0)) /* using system fseek XXX */
|
||||||
return E_COPYF2;
|
return E_COPYF2;
|
||||||
@@ -677,7 +677,7 @@ copystr2file(STRING *str, long ssi, long num, FILEID id, long dsi)
|
|||||||
{
|
{
|
||||||
long len;
|
long len;
|
||||||
FILEIO *fiop;
|
FILEIO *fiop;
|
||||||
unsigned int numw;
|
long numw;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
len = str->s_len;
|
len = str->s_len;
|
||||||
@@ -688,9 +688,9 @@ copystr2file(STRING *str, long ssi, long num, FILEID id, long dsi)
|
|||||||
num = len - ssi;
|
num = len - ssi;
|
||||||
if (num <= 0) /* Nothing to be copied */
|
if (num <= 0) /* Nothing to be copied */
|
||||||
return 0;
|
return 0;
|
||||||
if ((USB32) ssi + num > len)
|
if (ssi + num > len)
|
||||||
return E_COPY5; /* Insufficient memory in str */
|
return E_COPY5; /* Insufficient memory in str */
|
||||||
fiop = findid(id, 'w');
|
fiop = findid(id, TRUE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return E_COPYF1;
|
return E_COPYF1;
|
||||||
fp = fiop->fp;
|
fp = fiop->fp;
|
||||||
@@ -726,7 +726,7 @@ copyblk2blk(BLOCK *sblk, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc
|
|||||||
num = sblk->datalen - ssi;
|
num = sblk->datalen - ssi;
|
||||||
if (num == 0) /* Nothing to be copied */
|
if (num == 0) /* Nothing to be copied */
|
||||||
return 0;
|
return 0;
|
||||||
if ((unsigned int) ssi + num > sblk->datalen)
|
if (ssi + num > sblk->datalen)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = dblk->datalen;
|
dsi = dblk->datalen;
|
||||||
@@ -888,7 +888,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
|||||||
|
|
||||||
if (ssi > len)
|
if (ssi > len)
|
||||||
return E_COPY2;
|
return E_COPY2;
|
||||||
if (num < 0 || (unsigned long) ssi + num > len)
|
if (num < 0 || ssi + num > len)
|
||||||
num = len - ssi;
|
num = len - ssi;
|
||||||
if (num <= 0) /* Nothing to be copied */
|
if (num <= 0) /* Nothing to be copied */
|
||||||
return 0;
|
return 0;
|
||||||
@@ -991,7 +991,7 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
|
|||||||
num = snum->num.len - ssi;
|
num = snum->num.len - ssi;
|
||||||
if (num == 0) /* Nothing to be copied */
|
if (num == 0) /* Nothing to be copied */
|
||||||
return 0;
|
return 0;
|
||||||
if ((unsigned long) ssi + num > snum->num.len)
|
if (ssi + num > snum->num.len)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = dblk->datalen;
|
dsi = dblk->datalen;
|
||||||
@@ -1044,7 +1044,7 @@ copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi, NUMBER **re
|
|||||||
num = sblk->datalen - ssi;
|
num = sblk->datalen - ssi;
|
||||||
if (num == 0) /* Nothing to be copied */
|
if (num == 0) /* Nothing to be copied */
|
||||||
return 0;
|
return 0;
|
||||||
if ((unsigned long) ssi + num > sblk->datalen)
|
if (ssi + num > sblk->datalen)
|
||||||
return E_COPY5;
|
return E_COPY5;
|
||||||
if (dsi < 0)
|
if (dsi < 0)
|
||||||
dsi = dnum->num.len;
|
dsi = dnum->num.len;
|
||||||
|
10
byteswap.h
10
byteswap.h
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: byteswap.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: byteswap.h,v 29.4 2001/06/08 21:00:58 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/10/11 04:44:01
|
* Under source code control: 1995/10/11 04:44:01
|
||||||
@@ -33,7 +33,11 @@
|
|||||||
#define __BYTESWAP_H__
|
#define __BYTESWAP_H__
|
||||||
|
|
||||||
|
|
||||||
#include "longbits.h"
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
|
# include "longbits.h"
|
||||||
|
#else
|
||||||
|
# include <calc/longbits.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
192
cal/Makefile
192
cal/Makefile
@@ -18,8 +18,8 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.3 $
|
# @(#) $Revision: 29.15 $
|
||||||
# @(#) $Id: Makefile,v 29.3 2000/12/15 14:42:52 chongo Exp $
|
# @(#) $Id: Makefile,v 29.15 2003/01/05 08:10:56 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1991/07/21 05:00:54
|
# Under source code control: 1991/07/21 05:00:54
|
||||||
@@ -36,15 +36,120 @@
|
|||||||
SHELL = /bin/sh
|
SHELL = /bin/sh
|
||||||
MAKE_FILE = Makefile
|
MAKE_FILE = Makefile
|
||||||
|
|
||||||
|
####
|
||||||
# Normally, the upper level makefile will set these values. We provide
|
# Normally, the upper level makefile will set these values. We provide
|
||||||
# a default here just in case you want to build from this directory.
|
# a default here just in case you want to build from this directory.
|
||||||
#
|
####
|
||||||
# where to install things
|
|
||||||
TOPDIR= /usr/local/lib
|
|
||||||
#TOPDIR= /usr/lib
|
|
||||||
#TOPDIR= /usr/libdata
|
|
||||||
|
|
||||||
LIBDIR= ${TOPDIR}/calc
|
# Where the system include (.h) files are kept
|
||||||
|
#
|
||||||
|
# For DJGPP, select:
|
||||||
|
#
|
||||||
|
# INCDIR= /dev/env/DJDIR/include
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# INCDIR= /usr/include
|
||||||
|
#
|
||||||
|
|
||||||
|
#INCDIR= /usr/local/include
|
||||||
|
#INCDIR= /dev/env/DJDIR/include
|
||||||
|
INCDIR= /usr/include
|
||||||
|
|
||||||
|
# where to install calc realted things
|
||||||
|
#
|
||||||
|
# ${BINDIR} where to install calc binary files
|
||||||
|
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||||
|
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# For DJGPP, select:
|
||||||
|
#
|
||||||
|
# BINDIR= /dev/env/DJDIR/bin
|
||||||
|
# LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
# CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
#BINDIR= /usr/local/bin
|
||||||
|
#BINDIR= /dev/env/DJDIR/bin
|
||||||
|
BINDIR= /usr/bin
|
||||||
|
|
||||||
|
#LIBDIR= /usr/local/lib
|
||||||
|
#LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
LIBDIR= /usr/lib
|
||||||
|
|
||||||
|
#CALC_SHAREDIR= /usr/local/lib/calc
|
||||||
|
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
CALC_SHAREDIR= /usr/share/calc
|
||||||
|
|
||||||
|
# By default, these values are based CALC_SHAREDIR, INCDIR, BINDIR
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# ${HELPDIR} where the help directory is installed
|
||||||
|
# ${CALC_INCDIR} where the calc include files are installed
|
||||||
|
# ${CUSTOMCALDIR} where custom *.cal files are installed
|
||||||
|
# ${CUSTOMHELPDIR} where custom help files are installed
|
||||||
|
# ${CUSTOMINCPDIR} where custom .h files are installed
|
||||||
|
# ${SCRIPTDIR} where calc shell scripts are installed
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
# CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
# CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
# CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
# CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
|
# SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
#
|
||||||
|
HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
|
SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
|
||||||
|
# T - top level directory under which calc will be installed
|
||||||
|
#
|
||||||
|
# The calc install is performed under $T, the calc build is
|
||||||
|
# performed under /. The purpose for $T is to allow someone
|
||||||
|
# to install calc somewhere other than into the system area.
|
||||||
|
#
|
||||||
|
# For example, if:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
# and if:
|
||||||
|
#
|
||||||
|
# T= /var/tmp/testing
|
||||||
|
#
|
||||||
|
# Then the installation locations will be:
|
||||||
|
#
|
||||||
|
# calc binary files: /var/tmp/testing/usr/bin
|
||||||
|
# calc link library: /var/tmp/testing/usr/lib
|
||||||
|
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||||
|
# ... etc ... /var/tmp/testing/...
|
||||||
|
#
|
||||||
|
# If $T is empty, calc is installed under /, which is the same
|
||||||
|
# top of tree for which it was built. If $T is non-empty, then
|
||||||
|
# calc is installed under $T, as if one had to chroot under
|
||||||
|
# $T for calc to operate.
|
||||||
|
#
|
||||||
|
# If in doubt, use T=
|
||||||
|
#
|
||||||
|
T=
|
||||||
|
|
||||||
# Makefile debug
|
# Makefile debug
|
||||||
#
|
#
|
||||||
@@ -57,6 +162,7 @@ Q=@
|
|||||||
# standard tools
|
# standard tools
|
||||||
#
|
#
|
||||||
CHMOD= chmod
|
CHMOD= chmod
|
||||||
|
CMP= cmp
|
||||||
|
|
||||||
# The calc files to install
|
# The calc files to install
|
||||||
#
|
#
|
||||||
@@ -69,8 +175,8 @@ CALC_FILES= README bigprime.cal deg.cal ellip.cal lucas.cal lucas_chk.cal \
|
|||||||
test2700.cal test3100.cal test3300.cal test3400.cal prompt.cal \
|
test2700.cal test3100.cal test3300.cal test3400.cal prompt.cal \
|
||||||
test3500.cal seedrandom.cal test4000.cal test4100.cal test4600.cal \
|
test3500.cal seedrandom.cal test4000.cal test4100.cal test4600.cal \
|
||||||
beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
|
beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
|
||||||
randomrun.cal xx_print.cal natnumset.cal qtime.cal test8400.cal \
|
randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.cal \
|
||||||
test8500.cal test8600.cal
|
test8400.cal test8500.cal test8600.cal chi.cal intfile.cal
|
||||||
|
|
||||||
# These files are found (but not built) in the distribution
|
# These files are found (but not built) in the distribution
|
||||||
#
|
#
|
||||||
@@ -102,8 +208,10 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
|
|||||||
##
|
##
|
||||||
|
|
||||||
distlist: ${DISTLIST}
|
distlist: ${DISTLIST}
|
||||||
${Q}for i in ${DISTLIST}; do \
|
${Q}for i in ${DISTLIST} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo cal/$$i; \
|
echo cal/$$i; \
|
||||||
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
distdir:
|
distdir:
|
||||||
@@ -116,34 +224,54 @@ calcliblist:
|
|||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# rpm rules
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
echo_inst_files:
|
||||||
|
${Q}for i in ${CALC_FILES} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
|
echo __file__ ${CALC_SHAREDIR}/$$i; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# Utility rules
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|
||||||
clobber:
|
clobber:
|
||||||
rm -f .all
|
rm -f .all
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
-${Q}if [ ! -d ${TOPDIR} ]; then \
|
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \
|
||||||
echo mkdir ${TOPDIR}; \
|
echo mkdir $T${CALC_SHAREDIR}; \
|
||||||
mkdir ${TOPDIR}; \
|
mkdir $T${CALC_SHAREDIR}; \
|
||||||
|
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${CALC_SHAREDIR}"; \
|
||||||
|
mkdir -p "$T${CALC_SHAREDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \
|
||||||
|
${CHMOD} 0755 $T${CALC_SHAREDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
-${Q}if [ ! -d ${LIBDIR} ]; then \
|
${Q}for i in ${CALC_FILES} /dev/null; do \
|
||||||
echo mkdir ${LIBDIR}; \
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
mkdir ${LIBDIR}; \
|
continue; \
|
||||||
else \
|
fi; \
|
||||||
true; \
|
if ${CMP} -s $$i $T${CALC_SHAREDIR}/$$i; then \
|
||||||
fi
|
true; \
|
||||||
${Q}for i in ${CALC_FILES}; do \
|
else \
|
||||||
echo rm -f ${LIBDIR}/$$i; \
|
rm -f $T${CALC_SHAREDIR}/$$i.new; \
|
||||||
rm -f ${LIBDIR}/$$i; \
|
cp -f $$i $T${CALC_SHAREDIR}/$$i.new; \
|
||||||
echo cp $$i ${LIBDIR}; \
|
${CHMOD} 0444 $T${CALC_SHAREDIR}/$$i.new; \
|
||||||
cp $$i ${LIBDIR}; \
|
mv -f $T${CALC_SHAREDIR}/$$i.new $T${CALC_SHAREDIR}/$$i; \
|
||||||
echo ${CHMOD} 0444 ${LIBDIR}/$$i; \
|
echo "installed $T${CALC_SHAREDIR}/$$i"; \
|
||||||
${CHMOD} 0444 ${LIBDIR}/$$i; \
|
fi; \
|
||||||
done
|
done
|
||||||
${Q}echo remove files that are obsolete
|
|
||||||
-rm -f nextprime.cal nextprim.cal
|
|
||||||
-rm -f test1000.cal test2000.cal ${LIBDIR}/test2000.cal
|
|
||||||
-rm -f ${LIBDIR}/nextprime.cal ${LIBDIR}/nextprim.cal
|
|
||||||
-rm -f ${LIBDIR}/test1000.cal ${LIBDIR}/cryrand.cal
|
|
||||||
|
75
cal/README
75
cal/README
@@ -64,7 +64,7 @@ Zero value of config("resource_debug") means that no such information
|
|||||||
is displayed. For other values, the non-zero bits which currently
|
is displayed. For other values, the non-zero bits which currently
|
||||||
have meanings are as follows:
|
have meanings are as follows:
|
||||||
|
|
||||||
n Meaning of bit n of config("resource_debug")
|
n Meaning of bit n of config("resource_debug")
|
||||||
|
|
||||||
0 When a function is defined, redefined or undefined at
|
0 When a function is defined, redefined or undefined at
|
||||||
interactive level, a message saying what has been done
|
interactive level, a message saying what has been done
|
||||||
@@ -74,6 +74,12 @@ have meanings are as follows:
|
|||||||
the reading of a file, a message saying what has been done
|
the reading of a file, a message saying what has been done
|
||||||
is displayed.
|
is displayed.
|
||||||
|
|
||||||
|
2 Show func will display more information about a functions
|
||||||
|
arguments as well as more argument sdummary information.
|
||||||
|
|
||||||
|
3 During execution, allow calc standard resource files
|
||||||
|
to output additional debugging information.
|
||||||
|
|
||||||
The value for config("resource_debug") in both oldstd and newstd is 3,
|
The value for config("resource_debug") in both oldstd and newstd is 3,
|
||||||
but if calc is invoked with the -d flag, its initial value is zero.
|
but if calc is invoked with the -d flag, its initial value is zero.
|
||||||
Thus, if calc is started without the -d flag, until config("resource_debug")
|
Thus, if calc is started without the -d flag, until config("resource_debug")
|
||||||
@@ -97,6 +103,14 @@ either of the bottom 2 bits set:
|
|||||||
print "funcB(size, mass, ...) defined";
|
print "funcB(size, mass, ...) defined";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
If your the resource file needs to output special debugging informatin,
|
||||||
|
we recommend that you check for bit 3 of the config("resource_debug")
|
||||||
|
before printing the debug statement:
|
||||||
|
|
||||||
|
if (config("resource_debug") & 8) {
|
||||||
|
print "DEBUG: This a sample debug statement";
|
||||||
|
}
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
The following is a brief description of some of the calc resource files
|
The following is a brief description of some of the calc resource files
|
||||||
@@ -128,6 +142,24 @@ bigprime.cal
|
|||||||
A prime test, base a, on p*2^x+1 for even x>m.
|
A prime test, base a, on p*2^x+1 for even x>m.
|
||||||
|
|
||||||
|
|
||||||
|
chi.cal
|
||||||
|
|
||||||
|
Z(x[, eps])
|
||||||
|
P(x[, eps])
|
||||||
|
chi_prob(chi_sq, v[, eps])
|
||||||
|
|
||||||
|
Computes the Probability, given the Null Hypothesis, that a given
|
||||||
|
Chi squared values >= chi_sq with v degrees of freedom.
|
||||||
|
|
||||||
|
The chi_prob() function does not work well with odd degrees of freedom.
|
||||||
|
It is reasonable with even degrees of freedom, although one must give
|
||||||
|
a sifficently small error term as the degress gets large (>100).
|
||||||
|
|
||||||
|
The Z(x) and P(x) are internal statistical funcions.
|
||||||
|
|
||||||
|
eps is an optional epsilon() like error term.
|
||||||
|
|
||||||
|
|
||||||
chrem.cal
|
chrem.cal
|
||||||
|
|
||||||
chrem(r1,m1 [,r2,m2, ...])
|
chrem(r1,m1 [,r2,m2, ...])
|
||||||
@@ -163,6 +195,33 @@ hello.cal
|
|||||||
http://www.latech.edu/~acm/helloworld/calc.html
|
http://www.latech.edu/~acm/helloworld/calc.html
|
||||||
|
|
||||||
|
|
||||||
|
intfile.cal
|
||||||
|
|
||||||
|
file2be(filename)
|
||||||
|
|
||||||
|
Read filename and return an integer that is built from the
|
||||||
|
octets in that file in Big Endian order. The first octets
|
||||||
|
of the file become the most significant bits of the integer.
|
||||||
|
|
||||||
|
file2le(filename)
|
||||||
|
|
||||||
|
Read filename and return an integer that is built from the
|
||||||
|
octets in that file in Little Endian order. The first octets
|
||||||
|
of the file become the most significant bits of the integer.
|
||||||
|
|
||||||
|
be2file(v, filename)
|
||||||
|
|
||||||
|
Write the absolute value of v into filename in Big Endian order.
|
||||||
|
The v argument must be on integer. The most significant bits
|
||||||
|
of the integer become the first octets of the file.
|
||||||
|
|
||||||
|
le2file(v, filename)
|
||||||
|
|
||||||
|
Write the absolute value of v into filename in Little Endian order.
|
||||||
|
The v argument must be on integer. The least significant bits
|
||||||
|
of the integer become the last octets of the file.
|
||||||
|
|
||||||
|
|
||||||
lucas.cal
|
lucas.cal
|
||||||
|
|
||||||
lucas(h, n)
|
lucas(h, n)
|
||||||
@@ -421,6 +480,16 @@ randrun.cal
|
|||||||
|
|
||||||
This tests the a55 generator.
|
This tests the a55 generator.
|
||||||
|
|
||||||
|
repeat.cal
|
||||||
|
|
||||||
|
repeat(digit_set, repeat_count)
|
||||||
|
|
||||||
|
Return the value of the digit_set repeated repeat_count times.
|
||||||
|
Both digit_set and repeat_count must be integers > 0.
|
||||||
|
|
||||||
|
For example repeat(423,5) returns the value 423423423423423,
|
||||||
|
which is the digit_set 423 repeated 5 times.
|
||||||
|
|
||||||
|
|
||||||
regress.cal
|
regress.cal
|
||||||
|
|
||||||
@@ -756,8 +825,8 @@ xx_print.cal
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.4 $
|
## @(#) $Revision: 29.9 $
|
||||||
## @(#) $Id: README,v 29.4 2000/12/17 12:26:04 chongo Exp $
|
## @(#) $Id: README,v 29.9 2003/01/05 08:10:56 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1990/02/15 01:50:32
|
## Under source code control: 1990/02/15 01:50:32
|
||||||
|
251
cal/chi.cal
Normal file
251
cal/chi.cal
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
/*
|
||||||
|
* chi - chi^2 probabilities with degrees of freedom for null hypothesis
|
||||||
|
*
|
||||||
|
* Copyright (C) 2001 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.2 $
|
||||||
|
* @(#) $Id: chi.cal,v 29.2 2001/04/08 10:21:23 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/chi.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2001/03/27 14:10:11
|
||||||
|
* File existed as early as: 2001
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Z(x)
|
||||||
|
*
|
||||||
|
* From Handbook of Mathematical Functions
|
||||||
|
* 10th printing, Dec 1972 with corrections
|
||||||
|
* National Bureau of Standards
|
||||||
|
*
|
||||||
|
* Section 26.2.1, p931.
|
||||||
|
*/
|
||||||
|
define Z(x, eps_term)
|
||||||
|
{
|
||||||
|
local eps; /* error term */
|
||||||
|
|
||||||
|
/* obtain the error term */
|
||||||
|
if (isnull(eps_term)) {
|
||||||
|
eps = epsilon();
|
||||||
|
} else {
|
||||||
|
eps = eps_term;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* compute Z(x) value */
|
||||||
|
return exp(-x*x/2, eps) / sqrt(2*pi(eps), eps);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* P(x[, eps]) asymtotic P(x) expansion for x>0 to an given epsilon error term
|
||||||
|
*
|
||||||
|
* NOTE: If eps is omitted, the stored epsilon value is used.
|
||||||
|
*
|
||||||
|
* From Handbook of Mathematical Functions
|
||||||
|
* 10th printing, Dec 1972 with corrections
|
||||||
|
* National Bureau of Standards
|
||||||
|
*
|
||||||
|
* 26.2.11, p932:
|
||||||
|
*
|
||||||
|
* P(x) = 1/2 + Z(x) * sum(n=0; n < infinity){x^(2*n+1)/(1*3*5*...(2*n+1)};
|
||||||
|
*
|
||||||
|
* We continue the fraction until it is less than epsilon error term.
|
||||||
|
*
|
||||||
|
* Also note 26.2.5:
|
||||||
|
*
|
||||||
|
* P(x) + Q(x) = 1
|
||||||
|
*/
|
||||||
|
define P(x, eps_term)
|
||||||
|
{
|
||||||
|
local eps; /* error term */
|
||||||
|
local s; /* sum */
|
||||||
|
local x2; /* x^2 */
|
||||||
|
local x_term; /* x^(2*r+1) */
|
||||||
|
local odd_prod; /* 1*3*5* ... */
|
||||||
|
local odd_term; /* next odd value to multiply into odd_prod */
|
||||||
|
local term; /* the recent term added to the sum */
|
||||||
|
|
||||||
|
/* obtain the error term */
|
||||||
|
if (isnull(eps_term)) {
|
||||||
|
eps = epsilon();
|
||||||
|
} else {
|
||||||
|
eps = eps_term;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* firewall */
|
||||||
|
if (x <= 0) {
|
||||||
|
if (x == 0) {
|
||||||
|
return 0; /* hack */
|
||||||
|
} else {
|
||||||
|
quit "Q(x[,eps]) 1st argument must be >= 0";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (eps <= 0) {
|
||||||
|
quit "Q(x[,eps]) 2nd argument must be > 0";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* aproximate sum(n=0; n < infinity){x^(2*n+1)/(1*3*5*...(2*n+1)}
|
||||||
|
*/
|
||||||
|
x2 = x*x;
|
||||||
|
x_term = x;
|
||||||
|
s = x_term; /* 1st term */
|
||||||
|
odd_term = 1;
|
||||||
|
odd_prod = 1;
|
||||||
|
do {
|
||||||
|
|
||||||
|
/* compute the term */
|
||||||
|
odd_term += 2;
|
||||||
|
odd_prod *= odd_term;
|
||||||
|
x_term *= x2;
|
||||||
|
term = x_term / odd_prod;
|
||||||
|
s += term;
|
||||||
|
|
||||||
|
} while (term >= eps);
|
||||||
|
|
||||||
|
/* apply term and factor */
|
||||||
|
return 0.5 + Z(x,eps)*s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* chi_prob(chi_sq, v[, eps]) - Prob of >= chi^2 with v degrees of freedom
|
||||||
|
*
|
||||||
|
* Computes the Probability, given the Null Hypothesis, that a given
|
||||||
|
* Chi squared values >= chi_sq with v degrees of freedom.
|
||||||
|
*
|
||||||
|
* The chi_prob() function does not work well with odd degrees of freedom.
|
||||||
|
* It is reasonable with even degrees of freedom, although one must give
|
||||||
|
* a sifficently small error term as the degress gets large (>100).
|
||||||
|
*
|
||||||
|
* NOTE: This function does not work well with odd degrees of freedom.
|
||||||
|
* Can somebody help / find a bug / provide a better method of
|
||||||
|
* this odd degrees of freedom case?
|
||||||
|
*
|
||||||
|
* NOTE: This function works well with even degrees of freedom. However
|
||||||
|
* when the even degrees gets large (say, as you approach 100), you
|
||||||
|
* need to increase your error term.
|
||||||
|
*
|
||||||
|
* From Handbook of Mathematical Functions
|
||||||
|
* 10th printing, Dec 1972 with corrections
|
||||||
|
* National Bureau of Standards
|
||||||
|
*
|
||||||
|
* Section 26.4.4, p941:
|
||||||
|
*
|
||||||
|
* For odd v:
|
||||||
|
*
|
||||||
|
* Q(chi_sq, v) = 2*Q(chi) + 2*Z(chi) * (
|
||||||
|
* sum(r=1, r<=(r-1)/2) {(chi_sq^r/chi) / (1*3*5*...(2*r-1)});
|
||||||
|
*
|
||||||
|
* chi = sqrt(chi_sq)
|
||||||
|
*
|
||||||
|
* NOTE: Q(x) = 1-P(x)
|
||||||
|
*
|
||||||
|
* Section 26.4.5, p941.
|
||||||
|
*
|
||||||
|
* For even v:
|
||||||
|
*
|
||||||
|
* Q(chi_sq, v) = sqrt(2*pi()) * Z(chi) * ( 1 +
|
||||||
|
* sum(r=1, r=((v-2)/2)) { chi_sq^r / (2*4*...*(2r)) } );
|
||||||
|
*
|
||||||
|
* chi = sqrt(chi_sq)
|
||||||
|
*
|
||||||
|
* Observe that:
|
||||||
|
*
|
||||||
|
* Z(x) = exp(-x*x/2) / sqrt(2*pi()); (Section 26.2.1, p931)
|
||||||
|
*
|
||||||
|
* and thus:
|
||||||
|
*
|
||||||
|
* sqrt(2*pi()) * Z(chi) =
|
||||||
|
* sqrt(2*pi()) * Z(sqrt(chi_sq)) =
|
||||||
|
* sqrt(2*pi()) * exp(-sqrt(chi_sq)*sqrt(chi_sq)/2) / sqrt(2*pi()) =
|
||||||
|
* exp(-sqrt(chi_sq)*sqrt(chi_sq)/2) =
|
||||||
|
* exp(-sqrt(-chi_sq/2)
|
||||||
|
*
|
||||||
|
* So:
|
||||||
|
*
|
||||||
|
* Q(chi_sq, v) = exp(-sqrt(-chi_sq/2) * ( 1 + sum(....){...} );
|
||||||
|
*/
|
||||||
|
define chi_prob(chi_sq, v, eps_term)
|
||||||
|
{
|
||||||
|
local eps; /* error term */
|
||||||
|
local r; /* index in finite sum */
|
||||||
|
local r_lim; /* limit value for r */
|
||||||
|
local s; /* sum */
|
||||||
|
local d; /* demoninator (2*4*6*... or 1*3*5...) */
|
||||||
|
local chi_term; /* chi_sq^r */
|
||||||
|
local ret; /* return value */
|
||||||
|
|
||||||
|
/* obtain the error term */
|
||||||
|
if (isnull(eps_term)) {
|
||||||
|
eps = epsilon();
|
||||||
|
} else {
|
||||||
|
eps = eps_term;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* odd degrees of freedom
|
||||||
|
*/
|
||||||
|
if (isodd(v)) {
|
||||||
|
|
||||||
|
local chi; /* sqrt(chi_sq) */
|
||||||
|
|
||||||
|
/* setup for sum */
|
||||||
|
s = 1;
|
||||||
|
d = 1;
|
||||||
|
chi = sqrt(abs(chi_sq), eps);
|
||||||
|
chi_term = chi;
|
||||||
|
r_lim = (v-1)/2;
|
||||||
|
|
||||||
|
/* compute sum(r=1, r=((v-1)/2)) {(chi_sq^r/chi) / (1*3*5...*(2r-1))} */
|
||||||
|
for (r=2; r <= r_lim; ++r) {
|
||||||
|
chi_term *= chi_sq;
|
||||||
|
d *= (2*r)-1;
|
||||||
|
s += chi_term/d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* apply term and factor, Q(x) = 1-P(x) */
|
||||||
|
ret = 2*(1-P(chi)) + 2*Z(chi)*s;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* even degrees of freedom
|
||||||
|
*/
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* setup for sum */
|
||||||
|
s =1;
|
||||||
|
d = 1;
|
||||||
|
chi_term = 1;
|
||||||
|
r_lim = (v-2)/2;
|
||||||
|
|
||||||
|
/* compute sum(r=1, r=((v-2)/2)) { chi_sq^r / (2*4*...*(2r)) } */
|
||||||
|
for (r=1; r <= r_lim; ++r) {
|
||||||
|
chi_term *= chi_sq;
|
||||||
|
d *= r*2;
|
||||||
|
s += chi_term/d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* apply factor - see observation in the main comment above */
|
||||||
|
ret = exp(-chi_sq/2, eps) * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
16
cal/deg.cal
16
cal/deg.cal
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: deg.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: deg.cal,v 29.4 2003/01/26 19:32:41 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/deg.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/deg.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:33
|
* Under source code control: 1990/02/15 01:50:33
|
||||||
@@ -42,7 +42,7 @@ define dms(deg, min, sec)
|
|||||||
ans.deg = deg;
|
ans.deg = deg;
|
||||||
ans.min = min;
|
ans.min = min;
|
||||||
ans.sec = sec;
|
ans.sec = sec;
|
||||||
fixdms(&ans);
|
fixdms(ans);
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ define dms_add(a, b)
|
|||||||
ans.sec += b.sec;
|
ans.sec += b.sec;
|
||||||
} else
|
} else
|
||||||
ans.deg += b;
|
ans.deg += b;
|
||||||
fixdms(&ans);
|
fixdms(ans);
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,9 +75,9 @@ define dms_neg(a)
|
|||||||
{
|
{
|
||||||
local obj dms ans;
|
local obj dms ans;
|
||||||
|
|
||||||
ans.deg = -ans.deg;
|
ans.deg = -a.deg;
|
||||||
ans.min = -ans.min;
|
ans.min = -a.min;
|
||||||
ans.sec = -ans.sec;
|
ans.sec = -a.sec;
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ define dms_mul(a, b)
|
|||||||
ans.min = b.min * a;
|
ans.min = b.min * a;
|
||||||
ans.sec = b.sec * a;
|
ans.sec = b.sec * a;
|
||||||
}
|
}
|
||||||
fixdms(&ans);
|
fixdms(ans);
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
222
cal/intfile.cal
Normal file
222
cal/intfile.cal
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
/*
|
||||||
|
* intfile - integer to file and file to integer conversion
|
||||||
|
*
|
||||||
|
* Copyright (C) 2001 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.5 $
|
||||||
|
* @(#) $Id: intfile.cal,v 29.5 2001/04/10 22:09:34 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/intfile.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2001/03/31 08:13:11
|
||||||
|
* File existed as early as: 2001
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: Because leading HALF values are trimmed from integer, a file
|
||||||
|
* that begins with lots of 0 bits (in the case of big endian)
|
||||||
|
* or that ends with lots of 0 bits (in the case of little endian)
|
||||||
|
* will be changed when the subsequent integer is written back.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* file2be - convert a file into an big endian integer
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* filename filename to read
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* integer read from its contents on big endian order
|
||||||
|
*/
|
||||||
|
define file2be(filename)
|
||||||
|
{
|
||||||
|
local fd; /* open file */
|
||||||
|
local ret; /* integer to return */
|
||||||
|
local c; /* character read from the file */
|
||||||
|
local i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open the file for reading
|
||||||
|
*/
|
||||||
|
fd = fopen(filename, "rb");
|
||||||
|
if (!isfile(fd)) quit "file2be: cannot open file for reading";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* read the contents of the file
|
||||||
|
*
|
||||||
|
* The first octets become the most significant bits of the integer.
|
||||||
|
*/
|
||||||
|
ret = 0;
|
||||||
|
while (! isnull(c = fgetc(fd))) {
|
||||||
|
ret <<= 8;
|
||||||
|
ret += ord(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cleanup and return the integer
|
||||||
|
*/
|
||||||
|
fclose(fd);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* file2le - convert a file into an little endian integer
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* filename filename to read
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* integer read from its contents on little endian order
|
||||||
|
*/
|
||||||
|
define file2le(filename)
|
||||||
|
{
|
||||||
|
local fd; /* open file */
|
||||||
|
local ret; /* integer to return */
|
||||||
|
local c; /* character read from the file */
|
||||||
|
local shft; /* bit shift for the c value */
|
||||||
|
local i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open the file for reading
|
||||||
|
*/
|
||||||
|
fd = fopen(filename, "rb");
|
||||||
|
if (!isfile(fd)) quit "file2le: cannot open file for reading";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* read the contents of the file into a string
|
||||||
|
*
|
||||||
|
* The first octets become are the least significant bits of the integer.
|
||||||
|
*/
|
||||||
|
ret = 0;
|
||||||
|
shft = 0;
|
||||||
|
while (! isnull(c = fgetc(fd))) {
|
||||||
|
ret |= (ord(c) << shft);
|
||||||
|
shft += 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cleanup and return the integer
|
||||||
|
*/
|
||||||
|
fclose(fd);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* be2file - convert a big endian integer into a file
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* v integer to write to the file
|
||||||
|
* filename filename to write
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* The number of octets written to the file.
|
||||||
|
*
|
||||||
|
* NOTE: The absolute value of the integer is written to the file.
|
||||||
|
*/
|
||||||
|
define be2file(v, filename)
|
||||||
|
{
|
||||||
|
local fd; /* open file */
|
||||||
|
local octlen; /* length of v in octets */
|
||||||
|
local i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* firewall
|
||||||
|
*/
|
||||||
|
if (!isint(v)) {
|
||||||
|
quit "be2file: 1st arg not an integer";
|
||||||
|
}
|
||||||
|
v = abs(v);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open the file for writing
|
||||||
|
*/
|
||||||
|
fd = fopen(filename, "wb");
|
||||||
|
if (!isfile(fd)) quit "be2file: cannot open file for writing";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* write the octets to the file
|
||||||
|
*
|
||||||
|
* The most significant bits of the integer become the first file octets.
|
||||||
|
*/
|
||||||
|
octlen = int((highbit(v)+8) / 8);
|
||||||
|
for (i=octlen-1; i >= 0; --i) {
|
||||||
|
fputc(fd, char(v >> (i*8)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cleanup
|
||||||
|
*/
|
||||||
|
fclose(fd);
|
||||||
|
return octlen;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* le2file - convert a little endian integer into a file
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* v integer to write to the file
|
||||||
|
* filename filename to write
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* The number of octets written to the file.
|
||||||
|
*
|
||||||
|
* NOTE: The absolute value of the integer is written to the file.
|
||||||
|
*/
|
||||||
|
define le2file(v, filename)
|
||||||
|
{
|
||||||
|
local fd; /* open file */
|
||||||
|
local cnt; /* octets written */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* firewall
|
||||||
|
*/
|
||||||
|
if (!isint(v)) {
|
||||||
|
quit "be2file: 1st arg not an integer";
|
||||||
|
}
|
||||||
|
v = abs(v);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open the file for writing
|
||||||
|
*/
|
||||||
|
fd = fopen(filename, "wb");
|
||||||
|
if (!isfile(fd)) quit "le2file: cannot open file for writing";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write the octets to the file.
|
||||||
|
*
|
||||||
|
* The least significant bits of the integer become the first file octets.
|
||||||
|
*/
|
||||||
|
cnt = 0;
|
||||||
|
while (v > 0) {
|
||||||
|
fputc(fd, char(v));
|
||||||
|
v >>= 8;
|
||||||
|
++cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cleanup
|
||||||
|
*/
|
||||||
|
fclose(fd);
|
||||||
|
return cnt;
|
||||||
|
}
|
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.6 $
|
||||||
* @(#) $Id: lucas.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: lucas.cal,v 29.6 2002/07/10 09:43:46 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/05/03 16:49:51
|
* Under source code control: 1990/05/03 16:49:51
|
||||||
@@ -28,6 +28,16 @@
|
|||||||
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: This is a standard calc resource file. For information on calc see:
|
||||||
|
*
|
||||||
|
* http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
*
|
||||||
|
* To obtain your own copy of calc, see:
|
||||||
|
*
|
||||||
|
* http://www.isthe.com/chongo/tech/comp/calc/calc-download.html
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* HISTORICAL NOTE:
|
* HISTORICAL NOTE:
|
||||||
*
|
*
|
||||||
@@ -52,12 +62,19 @@
|
|||||||
*
|
*
|
||||||
* At the time of discovery, this was the largest known twin prime pair.
|
* At the time of discovery, this was the largest known twin prime pair.
|
||||||
*
|
*
|
||||||
|
* See:
|
||||||
|
*
|
||||||
|
* http://www.isthe.com/chongo/tech/math/prime/amdahl6.html
|
||||||
|
*
|
||||||
|
* for more information on the Amdahl 6 group.
|
||||||
|
*
|
||||||
* NOTE: Both largest known and largest known twin prime records have been
|
* NOTE: Both largest known and largest known twin prime records have been
|
||||||
* broken. Rather than update this file each time, I'll just
|
* broken. Rather than update this file each time, I'll just
|
||||||
* congratulate the finders and encourage others to try for
|
* congratulate the finders and encourage others to try for
|
||||||
* larger finds. Records were made to be broken afterall!
|
* larger finds. Records were made to be broken afterall!
|
||||||
*
|
*/
|
||||||
* ON GAINING A WORLD RECORD:
|
|
||||||
|
/* ON GAINING A WORLD RECORD:
|
||||||
*
|
*
|
||||||
* The routines in calc were designed to be portable, and to work on
|
* The routines in calc were designed to be portable, and to work on
|
||||||
* numbers of 'sane' size. The Amdahl 6 team used a 'ultra-high speed
|
* numbers of 'sane' size. The Amdahl 6 team used a 'ultra-high speed
|
||||||
@@ -73,7 +90,7 @@
|
|||||||
*
|
*
|
||||||
* test numbers of the form h*2^n-1
|
* test numbers of the form h*2^n-1
|
||||||
* fix a value of n and vary the value h
|
* fix a value of n and vary the value h
|
||||||
* n mod 128 == 0
|
* n mod 2^x == 0 for some value of x, say > 7 or more
|
||||||
* h*2^n-1 is not divisible by any small prime < 2^40
|
* h*2^n-1 is not divisible by any small prime < 2^40
|
||||||
* 0 < h < 2^39
|
* 0 < h < 2^39
|
||||||
* h*2^n+1 is not divisible by any small prime < 2^40
|
* h*2^n+1 is not divisible by any small prime < 2^40
|
||||||
@@ -1030,7 +1047,7 @@ gen_v1(h, n)
|
|||||||
define
|
define
|
||||||
ldebug(funct, str)
|
ldebug(funct, str)
|
||||||
{
|
{
|
||||||
if (config("resource_debug") & 3) {
|
if (config("resource_debug") & 8) {
|
||||||
print "DEBUG:", funct:":", str;
|
print "DEBUG:", funct:":", str;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: lucas_chk.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: lucas_chk.cal,v 29.3 2001/03/31 13:31:34 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_chk.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_chk.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/01/11 05:41:43
|
* Under source code control: 1991/01/11 05:41:43
|
||||||
@@ -336,7 +336,7 @@ lucas_chk(high_n, quiet)
|
|||||||
|
|
||||||
/* skip primes where h>=2^n */
|
/* skip primes where h>=2^n */
|
||||||
if (highbit(h_p[i]) >= n_p[i]) {
|
if (highbit(h_p[i]) >= n_p[i]) {
|
||||||
if (config("resource_debug") & 3) {
|
if (config("resource_debug") & 8) {
|
||||||
print "h>=2^n skip:", h_p[i]:"*2^":n_p[i]:"-1";
|
print "h>=2^n skip:", h_p[i]:"*2^":n_p[i]:"-1";
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
10
cal/pi.cal
10
cal/pi.cal
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* pi - various routines to calculate pi
|
* pi - various routines to calculate pi
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell
|
* Copyright (C) 1999-2004 David I. Bell
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.5 $
|
||||||
* @(#) $Id: pi.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: pi.cal,v 29.5 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pi.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pi.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/05/22 21:56:37
|
* Under source code control: 1991/05/22 21:56:37
|
||||||
@@ -61,7 +61,7 @@ define qpi(epsilon)
|
|||||||
yn = sqrt2 - 1;
|
yn = sqrt2 - 1;
|
||||||
an = 6 - 4 * sqrt2;
|
an = 6 - 4 * sqrt2;
|
||||||
tn = 2;
|
tn = 2;
|
||||||
for (count = 0; count < niter; count++) {
|
for (count = 0; count < niter; ++count) {
|
||||||
ym = yn;
|
ym = yn;
|
||||||
am = an;
|
am = an;
|
||||||
tn *= 4;
|
tn *= 4;
|
||||||
@@ -104,7 +104,7 @@ define piforever()
|
|||||||
* Next approximation
|
* Next approximation
|
||||||
*/
|
*/
|
||||||
p = k * k;
|
p = k * k;
|
||||||
q = k + k++;
|
q = k + ++k;
|
||||||
|
|
||||||
a2 = a;
|
a2 = a;
|
||||||
b2 = b;
|
b2 = b;
|
||||||
|
@@ -1,24 +1,46 @@
|
|||||||
/*
|
/*
|
||||||
* qtime - Display time as English sentence
|
* qtime - Display time as English sentence
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 Klaus Alexander Seistrup and Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Written by: Klaus Alexander Seistrup <kseis@magnetic-ink.dk>
|
||||||
|
* With mods by: Landon Curt Noll <http://www.isthe.com/chongo/>
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.4 $
|
||||||
|
* @(#) $Id: qtime.cal,v 29.4 2000/12/18 10:18:40 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/qtime.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1999/10/13 04:10:33
|
||||||
|
* File existed as early as: 1999
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* usage:
|
* usage:
|
||||||
* qtime(utc_hr_offset)
|
* qtime(utc_hr_offset)
|
||||||
*
|
*
|
||||||
* utc_hr_offset Offset from UTC in hours.
|
* utc_hr_offset Offset from UTC in hours.
|
||||||
*
|
*
|
||||||
* Written by: Klaus Alexander Seistrup <kseis@magnetic-ink.dk>
|
|
||||||
* With minor mods by: Landon Curt Noll <http://www.isthe.com/chongo/>
|
|
||||||
*
|
|
||||||
* See:
|
* See:
|
||||||
* http://www.magnetic-ink.dk/download/qtime.html
|
* http://www.magnetic-ink.dk/download/qtime.html
|
||||||
*
|
*
|
||||||
* for examples of qtime() written on other languages.
|
* for examples of qtime() written on other languages.
|
||||||
*
|
|
||||||
* @(#) $Revision: 29.2 $
|
|
||||||
* @(#) $Id: qtime.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/qtime.cal,v $
|
|
||||||
*
|
|
||||||
* This file is not covered under version 2.1 of the GNU LGPL.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
320
cal/regress.cal
320
cal/regress.cal
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* regress - calc regression and correctness test suite
|
* regress - calc regression and correctness test suite
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell
|
* Copyright (C) 1999-2004 David I. Bell and Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.6 $
|
* @(#) $Revision: 29.19 $
|
||||||
* @(#) $Id: regress.cal,v 29.6 2000/12/17 12:26:42 chongo Exp $
|
* @(#) $Id: regress.cal,v 29.19 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:50:36
|
* Under source code control: 1990/02/15 01:50:36
|
||||||
@@ -52,7 +52,8 @@ errmax(-1),; /* prevent errcount from abouting */
|
|||||||
global ecnt; /* expected value of errcount() */
|
global ecnt; /* expected value of errcount() */
|
||||||
ecnt = 0; /* clear expected errcount() value */
|
ecnt = 0; /* clear expected errcount() value */
|
||||||
|
|
||||||
initcfg = config("all", "oldstd"); /* set config to startup default */
|
initcfg = config("all", "newstd"); /* set config to startup default */
|
||||||
|
defcfg = config("all"); /* capture the default config */
|
||||||
config("resource_debug", 0),; /* disable resource startup messages */
|
config("resource_debug", 0),; /* disable resource startup messages */
|
||||||
config("calc_debug", 0),; /* disable internal debugging */
|
config("calc_debug", 0),; /* disable internal debugging */
|
||||||
config("verbose_quit", 0),; /* disable quit messages */
|
config("verbose_quit", 0),; /* disable quit messages */
|
||||||
@@ -380,19 +381,19 @@ define test_config()
|
|||||||
/* check the set and return of all config */
|
/* check the set and return of all config */
|
||||||
callcfg = config("all");
|
callcfg = config("all");
|
||||||
print '501: callcfg = config("all")';
|
print '501: callcfg = config("all")';
|
||||||
|
vrfy(callcfg == startcfg, '502: callcfg == startcfg');
|
||||||
|
|
||||||
callcfg = config("all", "oldstd");
|
callcfg = config("all", "oldstd");
|
||||||
print '502: callcfg = config("all","oldstd")';
|
print '503: callcfg = config("all","oldstd")';
|
||||||
oldcfg = config("all", "newstd");
|
|
||||||
print '503: oldcfg = config("all","newstd")';
|
|
||||||
vrfy(callcfg == startcfg, '504: callcfg == startcfg');
|
vrfy(callcfg == startcfg, '504: callcfg == startcfg');
|
||||||
newcfg = config("all");
|
oldcfg = config("all");
|
||||||
print '505: newcfg = config("all")';
|
print '505: oldcfg = config("all");';
|
||||||
vrfy(config("all") == newcfg, '506: config("all") == newcfg');
|
vrfy(config("all") == oldcfg, '506: config("all") == oldcfg');
|
||||||
vrfy(config("all", oldcfg) == newcfg,
|
vrfy(oldcfg==config("all","newstd"),
|
||||||
'507: config("all", oldcfg) == newcfg');
|
'507: oldcfg==config("all","newstd")');
|
||||||
|
vrfy(defcfg == config("all"), '508: defcfg == config("all")');
|
||||||
|
|
||||||
/* vrfy the state of the default config */
|
/* vrfy the state of the default config */
|
||||||
vrfy(config("all") == oldcfg, '508: config("all") == oldcfg');
|
|
||||||
vrfy(config("mode") == "real",
|
vrfy(config("mode") == "real",
|
||||||
'509: config("mode") == "real"');
|
'509: config("mode") == "real"');
|
||||||
vrfy(config("display") == 20,
|
vrfy(config("display") == 20,
|
||||||
@@ -411,10 +412,10 @@ define test_config()
|
|||||||
'516: config("pow2") == 40');
|
'516: config("pow2") == 40');
|
||||||
vrfy(config("redc2") == 50,
|
vrfy(config("redc2") == 50,
|
||||||
'517: config("redc2") == 50');
|
'517: config("redc2") == 50');
|
||||||
vrfy(config("tilde") == "true",
|
vrfy(config("tilde"),
|
||||||
'518: config("tilde") == "true"');
|
'518: config("tilde")');
|
||||||
vrfy(config("tab") == "true",
|
vrfy(config("tab"),
|
||||||
'519: config("tab") == "true"');
|
'519: config("tab")');
|
||||||
vrfy(config("quomod") == 0,
|
vrfy(config("quomod") == 0,
|
||||||
'520: config("quomod") == 0');
|
'520: config("quomod") == 0');
|
||||||
vrfy(config("quo") == 2,
|
vrfy(config("quo") == 2,
|
||||||
@@ -429,58 +430,59 @@ define test_config()
|
|||||||
'525: config("cfappr") == 0');
|
'525: config("cfappr") == 0');
|
||||||
vrfy(config("cfsim") == 8,
|
vrfy(config("cfsim") == 8,
|
||||||
'526: config("cfsim") == 8');
|
'526: config("cfsim") == 8');
|
||||||
vrfy(config("outround") == 2,
|
vrfy(config("outround") == 24,
|
||||||
'527: config("outround") == 2');
|
'527: config("outround") == 24');
|
||||||
vrfy(config("round") == 24,
|
vrfy(config("round") == 24,
|
||||||
'528: config("round") == 24');
|
'528: config("round") == 24');
|
||||||
vrfy(config("leadzero") == "false",
|
vrfy(config("leadzero") == 1,
|
||||||
'529: config("leadzero") == "false"');
|
'529: config("leadzero") == 1');
|
||||||
vrfy(config("fullzero") == "false",
|
vrfy(config("fullzero") == 0,
|
||||||
'530: config("fullzero") == "false"');
|
'530: config("fullzero") == 0');
|
||||||
vrfy(config("maxscan") == 20,
|
vrfy(config("maxscan") == 20,
|
||||||
'531: config("maxscan") == 20');
|
'531: config("maxscan") == 20');
|
||||||
vrfy(config("prompt") == "> ",
|
vrfy(config("prompt") == "; ",
|
||||||
'532: config("prompt") == "> "');
|
'532: config("prompt") == "; "');
|
||||||
vrfy(config("more") == ">> ",
|
vrfy(config("more") == ";; ",
|
||||||
'533: config("more") == ">> "');
|
'533: config("more") == ";; "');
|
||||||
|
|
||||||
/* convert to "newstd" config by individual changes */
|
/* convert to "oldstd" config by individual changes */
|
||||||
vrfy(config("display", 10) == 20,
|
print '534: test unused';
|
||||||
'534: config("display") == 20');
|
vrfy(config("outround", 2) == 24,
|
||||||
vrfy(config("epsilon",1e-10)==1e-20,
|
'535: config("outround", 2) == 24');
|
||||||
'535: config("epsilon",1e-10)==1e-20');
|
vrfy(config("leadzero","n") == 1,
|
||||||
vrfy(config("quo", 0) == 2, '536: config("quo", 0) == 2');
|
'536: config("leadzero","n") == 1');
|
||||||
vrfy(config("outround", 24) == 2,
|
print '537: test unused';
|
||||||
'537: config("outround", 24) == 2');
|
vrfy(config("prompt", "> ") == "; ",
|
||||||
vrfy(config("leadzero","y") == "false",
|
'538: config("prompt", "> ") == "; "');
|
||||||
'538: config("leadzero","y") == "false"');
|
vrfy(config("more", ">> ") == ";; ",
|
||||||
vrfy(config("fullzero", 1) == "false",
|
'539: config("more", ">> ") == ";; "');
|
||||||
'539: config("fullzero", 1) == "false"');
|
vrfy(config("all") == oldcfg, '540: config("all") == oldcfg');
|
||||||
vrfy(config("prompt", "; ") == "> ",
|
|
||||||
'540: config("prompt", "; ") == "> "');
|
|
||||||
vrfy(config("more", ";; ") == ">> ",
|
|
||||||
'541: config("more", ";; ") == ">> "');
|
|
||||||
vrfy(config("all") == newcfg, '542: config("all") == newcfg');
|
|
||||||
|
|
||||||
/* check on the new config("fullzero") effect */
|
/* restore the configation at the start of this function */
|
||||||
vrfy(config("all","oldstd") == newcfg,
|
vrfy(config("all",callcfg) == oldcfg,
|
||||||
'543: config("all",callcfg) == newcfg');
|
'541: config("all",callcfg) == oldcfg');
|
||||||
|
|
||||||
|
/* display and fullzero tests */
|
||||||
vrfy(config("display",2) == 20,
|
vrfy(config("display",2) == 20,
|
||||||
'544: config("display",2) == 20');
|
'542: config("display",2) == 20');
|
||||||
vrfy(config("fullzero",1) == "false",
|
vrfy(config("leadzero",0) == 1,
|
||||||
'545: config("fullzero",1) == "false"');
|
'543: config("leadzero",0) == 1');
|
||||||
|
vrfy(config("fullzero",1) == 0,
|
||||||
|
'544: config("fullzero",1) == 0');
|
||||||
vrfy(strprintf("%d %d %d", 0, 1, 2) == ".00 1.00 2.00",
|
vrfy(strprintf("%d %d %d", 0, 1, 2) == ".00 1.00 2.00",
|
||||||
'546: strprintf("%d %d %d", 0, 1, 2) == ".00 1.00 2.00"');
|
'545: strprintf("%d %d %d", 0, 1, 2) == ".00 1.00 2.00"');
|
||||||
vrfy(config("display",20) == 2,
|
vrfy(config("display",20) == 2,
|
||||||
'547: config("display",20) == 2');
|
'546: config("display",20) == 2');
|
||||||
vrfy(config("fullzero",0) == "true",
|
vrfy(config("leadzero",1) == 0,
|
||||||
'548: config("fullzero",0) == "true"');
|
'547: config("leadzero",1) == 0');
|
||||||
|
vrfy(config("fullzero",0) == 1,
|
||||||
|
'548: config("fullzero",0) == 1');
|
||||||
vrfy(strprintf("%d %d %d", 0, 1, 2) == "0 1 2",
|
vrfy(strprintf("%d %d %d", 0, 1, 2) == "0 1 2",
|
||||||
'549: strprintf("%d %d %d", 0, 1, 2) == "0 1 2"');
|
'549: strprintf("%d %d %d", 0, 1, 2) == "0 1 2"');
|
||||||
|
|
||||||
/* restore calling config */
|
/* restore calling config */
|
||||||
vrfy(config("all",callcfg) == oldcfg,
|
vrfy(config("all",callcfg) == startcfg,
|
||||||
'550: config("all",callcfg) == oldcfg');
|
'550: config("all",callcfg) == startcfg');
|
||||||
vrfy(config("all") == callcfg, '551: config("all") == callcfg');
|
vrfy(config("all") == callcfg, '551: config("all") == callcfg');
|
||||||
vrfy(config("all") == startcfg, '552: config("all") == startcfg');
|
vrfy(config("all") == startcfg, '552: config("all") == startcfg');
|
||||||
|
|
||||||
@@ -492,7 +494,11 @@ define test_config()
|
|||||||
vrfy(strlen(config("version")) > 0,
|
vrfy(strlen(config("version")) > 0,
|
||||||
'555: strlen(config("version")) > 0');
|
'555: strlen(config("version")) > 0');
|
||||||
|
|
||||||
print '556: Ending test_config';
|
/* mode2 is off by default */
|
||||||
|
vrfy(config("mode2") == "off",
|
||||||
|
'556: config("mode2") == "off"');
|
||||||
|
|
||||||
|
print '557: Ending test_config';
|
||||||
}
|
}
|
||||||
print '010: parsed test_config()';
|
print '010: parsed test_config()';
|
||||||
|
|
||||||
@@ -755,7 +761,7 @@ define test_functions()
|
|||||||
vrfy(den(17) == 1, '712: den(17) == 1');
|
vrfy(den(17) == 1, '712: den(17) == 1');
|
||||||
vrfy(den(3/7) == 7, '713: den(3/7) == 7');
|
vrfy(den(3/7) == 7, '713: den(3/7) == 7');
|
||||||
vrfy(den(-2/3) == 3, '714: den(-2/3) == 3');
|
vrfy(den(-2/3) == 3, '714: den(-2/3) == 3');
|
||||||
vrfy(digits(0) == 0, '715: digits(0) == 0');
|
vrfy(digits(0) == 1, '715: digits(0) == 1');
|
||||||
vrfy(digits(9) == 1, '716: digits(9) == 1');
|
vrfy(digits(9) == 1, '716: digits(9) == 1');
|
||||||
vrfy(digits(10) == 2, '717: digits(10) == 2');
|
vrfy(digits(10) == 2, '717: digits(10) == 2');
|
||||||
vrfy(digits(-691) == 3, '718: digits(-691) == 3');
|
vrfy(digits(-691) == 3, '718: digits(-691) == 3');
|
||||||
@@ -996,8 +1002,13 @@ define test_functions()
|
|||||||
vrfy(strpos(a, "abc") == 1, '946: strpos(a, "abc") == 1');
|
vrfy(strpos(a, "abc") == 1, '946: strpos(a, "abc") == 1');
|
||||||
vrfy(strpos(a, "xyz") == 0, '947: strpos(a, "xyz") == 0');
|
vrfy(strpos(a, "xyz") == 0, '947: strpos(a, "xyz") == 0');
|
||||||
vrfy(strpos(a, a) == 1, '948: strpos(a, a) == 1');
|
vrfy(strpos(a, a) == 1, '948: strpos(a, a) == 1');
|
||||||
vrfy(system("") == 0, '949: system("") == 0');
|
if (config("windows") || config("cygwin")) {
|
||||||
vrfy(system("true") == 0, '950: system("true") == 0');
|
print '949: test skipped for windows or cygwin systems';
|
||||||
|
print '950: test skipped for windows or cygwin systems';
|
||||||
|
} else {
|
||||||
|
vrfy(system("") == 0, '949: system("") == 0');
|
||||||
|
vrfy(system("true") == 0, '950: system("true") == 0');
|
||||||
|
}
|
||||||
print '951: test disabled due to stdin dependency';
|
print '951: test disabled due to stdin dependency';
|
||||||
print '952: test removed';
|
print '952: test removed';
|
||||||
print '953: test removed';
|
print '953: test removed';
|
||||||
@@ -1029,8 +1040,8 @@ define test_functions()
|
|||||||
vrfy(digit(a,-1) == 4, '974: digit(a,-1) == 4');
|
vrfy(digit(a,-1) == 4, '974: digit(a,-1) == 4');
|
||||||
vrfy(digit(a,-2) == 2, '975: digit(a,-2) == 2');
|
vrfy(digit(a,-2) == 2, '975: digit(a,-2) == 2');
|
||||||
vrfy(digit(a,-3) == 8, '976: digit(a,-3) == 8');
|
vrfy(digit(a,-3) == 8, '976: digit(a,-3) == 8');
|
||||||
vrfy(digits(0) == 0, '977: digits(0) == 0');
|
vrfy(digits(0) == 1, '977: digits(0) == 1');
|
||||||
vrfy(digits(0.0123) == 0, '978: digits(0.0123) == 0');
|
vrfy(digits(0.0123) == 1, '978: digits(0.0123) == 1');
|
||||||
vrfy(digits(3.7) == 1, '979: digits(3.7) == 1');
|
vrfy(digits(3.7) == 1, '979: digits(3.7) == 1');
|
||||||
vrfy(digits(-27) == 2, '980: digits(-27) == 2');
|
vrfy(digits(-27) == 2, '980: digits(-27) == 2');
|
||||||
vrfy(digits(-99.7) == 2, '981: digits(-99.7) == 2');
|
vrfy(digits(-99.7) == 2, '981: digits(-99.7) == 2');
|
||||||
@@ -1562,31 +1573,31 @@ define test_rand()
|
|||||||
/* test the additive 55 shuffle generator */
|
/* test the additive 55 shuffle generator */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1505: tmp = srand(0)';
|
print '1505: tmp = srand(0)';
|
||||||
vrfy(rand() == 0xc79ef743e2e6849c, \
|
vrfy(rand() == 0x1fe5b46fba7e069d, \
|
||||||
'1506: rand() == 0xc79ef743e2e6849c');
|
'1506: rand() == 0x1fe5b46fba7e069d');
|
||||||
vrfy(rand() == 0x8d2dcb2bed321284, \
|
vrfy(rand() == 0x308d32d9bdf2dc6f, \
|
||||||
'1507: rand() == 0x8d2dcb2bed321284');
|
'1507: rand() == 0x308d32d9bdf2dc6f');
|
||||||
tmp = srand(init);
|
tmp = srand(init);
|
||||||
print '1508: tmp = srand(init)';
|
print '1508: tmp = srand(init)';
|
||||||
vrfy(rand() == 0xc79ef743e2e6849c, \
|
vrfy(rand() == 0x1fe5b46fba7e069d, \
|
||||||
'1509: rand() == 0xc79ef743e2e6849c');
|
'1509: rand() == 0x1fe5b46fba7e069d');
|
||||||
vrfy(rand() == 0x8d2dcb2bed321284, \
|
vrfy(rand() == 0x308d32d9bdf2dc6f, \
|
||||||
'1510: rand() == 0x8d2dcb2bed321284');
|
'1510: rand() == 0x308d32d9bdf2dc6f');
|
||||||
|
|
||||||
/* test range interface */
|
/* test range interface */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1511: tmp = srand(0)';
|
print '1511: tmp = srand(0)';
|
||||||
vrfy(rand(12345678901234567890) == 0x8d2dcb2bed321284, \
|
vrfy(rand(12345678901234567890) == 0x1fe5b46fba7e069d, \
|
||||||
'1512: rand(12345678901234567890) == 0x8d2dcb2bed321284');
|
'1512: rand(12345678901234567890) == 0x1fe5b46fba7e069d');
|
||||||
vrfy(rand(216091) == 0x13d2b, '1513: rand(216091) == 0x13d2b');
|
vrfy(rand(216091) == 0xc234, '1513: rand(216091) == 0xc234');
|
||||||
vrfy(rand(100) == 0x26, '1514: rand(100) == 0x26');
|
vrfy(rand(100) == 0x59, '1514: rand(100) == 0x59');
|
||||||
vrfy(rand(-46,46) == -0xf, '1515: rand(-46,46) == -0xf');
|
vrfy(rand(-46,46) == 0x2d, '1515: rand(-46,46) == 0x2d');
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1516: tmp = srand(0)';
|
print '1516: tmp = srand(0)';
|
||||||
vrfy(rand(2^64) == 0xc79ef743e2e6849c, \
|
vrfy(rand(2^64) == 0x1fe5b46fba7e069d, \
|
||||||
'1517: rand(2^64) == 0xc79ef743e2e6849c');
|
'1517: rand(2^64) == 0x1fe5b46fba7e069d');
|
||||||
vrfy(rand(0,2^64) == 0x8d2dcb2bed321284, \
|
vrfy(rand(0,2^64) == 0x308d32d9bdf2dc6f, \
|
||||||
'1518: rand(0,2^64) == 0x8d2dcb2bed321284');
|
'1518: rand(0,2^64) == 0x308d32d9bdf2dc6f');
|
||||||
|
|
||||||
/* test different forms of seeding the initial state */
|
/* test different forms of seeding the initial state */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
@@ -1594,7 +1605,7 @@ define test_rand()
|
|||||||
vrfy(srand() == init, '1520: srand() == init');
|
vrfy(srand() == init, '1520: srand() == init');
|
||||||
tmp = srand(0x87e6ec938ff55aa5<<64);
|
tmp = srand(0x87e6ec938ff55aa5<<64);
|
||||||
print '1521: tmp = srand(0x87e6ec938ff55aa5<<64)';
|
print '1521: tmp = srand(0x87e6ec938ff55aa5<<64)';
|
||||||
vrfy(srand() == init, '1522: srand() == init');
|
print '1522: test disabled';
|
||||||
tmp = srand(state0);
|
tmp = srand(state0);
|
||||||
print '1523: tmp = srand(state0)';
|
print '1523: tmp = srand(state0)';
|
||||||
vrfy(srand() == init, '1524: srand() == init');
|
vrfy(srand() == init, '1524: srand() == init');
|
||||||
@@ -1606,35 +1617,35 @@ define test_rand()
|
|||||||
/* test the bit length interface */
|
/* test the bit length interface */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1528: tmp = srand(0)';
|
print '1528: tmp = srand(0)';
|
||||||
vrfy(randbit(64) == 0xc79ef743e2e6849c, \
|
vrfy(randbit(64) == 0x1fe5b46fba7e069d, \
|
||||||
'1529: randbit(64) == 0xc79ef743e2e6849c');
|
'1529: randbit(64) == 0x1fe5b46fba7e069d');
|
||||||
vrfy(randbit(128) == 0x8d2dcb2bed3212844f4ad31f3818af34, \
|
vrfy(randbit(128) == 0x308d32d9bdf2dc6f45d3e3b3361b79e4, \
|
||||||
'1530: randbit(128) == 0x8d2dcb2bed3212844f4ad31f3818af34');
|
'1530: randbit(128) == 0x308d32d9bdf2dc6f45d3e3b3361b79e4');
|
||||||
vrfy(randbit(64) == 0x23a252f60bae4907, \
|
vrfy(randbit(64) == 0xd4ef1e3336022d81, \
|
||||||
'1531: randbit(64) == 0x23a252f60bae4907');
|
'1531: randbit(64) == 0xd4ef1e3336022d81');
|
||||||
vrfy(randbit(128) == 0xa8ed5b6203e2b1da32848cd9b3f1e3fa, \
|
vrfy(randbit(128) == 0x66b086e6c34e42124a1fc5d4e5c6f598, \
|
||||||
'1532: randbit(128) == 0xa8ed5b6203e2b1da32848cd9b3f1e3fa');
|
'1532: randbit(128) == 0x66b086e6c34e42124a1fc5d4e5c6f598');
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1533: tmp = srand(0)';
|
print '1533: tmp = srand(0)';
|
||||||
vrfy(randbit(32) == 0xc79ef743, '1534: randbit(32) == 0xc79ef743');
|
vrfy(randbit(32) == 0x1fe5b46f, '1534: randbit(32) == 0x1fe5b46f');
|
||||||
vrfy(randbit(32) == 0xe2e6849c, '1535: randbit(32) == 0xe2e6849c');
|
vrfy(randbit(32) == 0xba7e069d, '1535: randbit(32) == 0xba7e069d');
|
||||||
vrfy(randbit(1) == 0x1, '1536: randbit(1) == 0x1');
|
vrfy(randbit(1) == 0x0, '1536: randbit(1) == 0x0');
|
||||||
vrfy(randbit(5) == 0x3, '1537: randbit(5) == 0x3');
|
vrfy(randbit(5) == 0xc, '1537: randbit(5) == 0xc');
|
||||||
vrfy(randbit(33) == 0x96e595f6, '1538: randbit(33) == 0x96e595f6');
|
vrfy(randbit(33) == 0x46996cde, '1538: randbit(33) == 0x46996cde');
|
||||||
vrfy(randbit(25) == 0x1321284, '1539: randbit(25) == 0x1321284');
|
vrfy(randbit(25) == 0x1f2dc6f, '1539: randbit(25) == 0x1f2dc6f');
|
||||||
vrfy(randbit(2) == 0x1, '1540: randbit(2) == 0x1');
|
vrfy(randbit(2) == 0x1, '1540: randbit(2) == 0x1');
|
||||||
vrfy(randbit(13) == 0x7a5, '1541: randbit(13) == 0x7a5');
|
vrfy(randbit(13) == 0x2e9, '1541: randbit(13) == 0x2e9');
|
||||||
vrfy(randbit(18) == 0x1a63e, '1542: randbit(18) == 0x1a63e');
|
vrfy(randbit(18) == 0x3c766, '1542: randbit(18) == 0x3c766');
|
||||||
vrfy(randbit(8) == 0x70, '1543: randbit(8) == 0x70');
|
vrfy(randbit(8) == 0x6c, '1543: randbit(8) == 0x6c');
|
||||||
vrfy(randbit(9) == 0x62, '1544: randbit(9) == 0x62');
|
vrfy(randbit(9) == 0x6d, '1544: randbit(9) == 0x6d');
|
||||||
vrfy(randbit(70) == 0x2f3423a252f60bae49, \
|
vrfy(randbit(70) == 0x39e4d4ef1e3336022d, \
|
||||||
'1545: randbit(70) == 0x2f3423a252f60bae49');
|
'1545: randbit(70) == 0x39e4d4ef1e3336022d');
|
||||||
print '1546: test unused';
|
print '1546: test unused';
|
||||||
vrfy(randbit(8) == 0x7, '1547: randbit(8) == 0x7');
|
vrfy(randbit(8) == 0x81, '1547: randbit(8) == 0x81');
|
||||||
vrfy(randbit(65) == 0x151dab6c407c563b4, \
|
vrfy(randbit(65) == 0xcd610dcd869c8424, \
|
||||||
'1548: randbit(65) == 0x151dab6c407c563b4');
|
'1548: randbit(65) == 0xcd610dcd869c8424');
|
||||||
vrfy(randbit(63) == 0x32848cd9b3f1e3fa, \
|
vrfy(randbit(63) == 0x4a1fc5d4e5c6f598, \
|
||||||
'1549: randbit(63) == 0x32848cd9b3f1e3fa');
|
'1549: randbit(63) == 0x4a1fc5d4e5c6f598');
|
||||||
|
|
||||||
/* check to be sure that the srand(1) bug was fixed */
|
/* check to be sure that the srand(1) bug was fixed */
|
||||||
tmp = srand(1);
|
tmp = srand(1);
|
||||||
@@ -1643,36 +1654,36 @@ define test_rand()
|
|||||||
print '1551: n = 1';
|
print '1551: n = 1';
|
||||||
vrfy(num(n), '1552: num(n)');
|
vrfy(num(n), '1552: num(n)');
|
||||||
vrfy(den(n), '1553: den(n)');
|
vrfy(den(n), '1553: den(n)');
|
||||||
vrfy(randbit(64) == 0x4280429f8069cb27, \
|
vrfy(randbit(64) == 0xbf989a4c504a541d, \
|
||||||
'1554: randbit(64) == 0x4280429f8069cb27');
|
'1554: randbit(64) == 0xbf989a4c504a541d');
|
||||||
|
|
||||||
/* test randbit skip interface */
|
/* test randbit skip interface */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1555: tmp = srand(0)';
|
print '1555: tmp = srand(0)';
|
||||||
vrfy(randbit(20) == 817647, '1556: randbit(20) == 817647');
|
vrfy(randbit(20) == 0x1fe5b, '1556: randbit(20) == 0x1fe5b');
|
||||||
vrfy(randbit(20) == 476130, '1557: randbit(20) == 476130');
|
vrfy(randbit(20) == 0x46fba, '1557: randbit(20) == 0x46fba');
|
||||||
vrfy(randbit(20) == 944201, '1558: randbit(20) == 944201');
|
vrfy(randbit(20) == 0x7e069, '1558: randbit(20) == 0x7e069');
|
||||||
vrfy(randbit(20) == 822573, '1559: randbit(20) == 822573');
|
vrfy(randbit(20) == 0xd308d, '1559: randbit(20) == 0xd308d');
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1560: tmp = srand(0)';
|
print '1560: tmp = srand(0)';
|
||||||
vrfy(randbit(-20) == 20, '1561: randbit(-20) == 20');
|
vrfy(randbit(-20) == 20, '1561: randbit(-20) == 20');
|
||||||
vrfy(randbit(20) == 476130, '1562: randbit(20) == 476130');
|
vrfy(randbit(20) == 290746, '1562: randbit(20) == 290746');
|
||||||
vrfy(randbit(-20) == 20, '1563: randbit(-20) == 20');
|
vrfy(randbit(-20) == 20, '1563: randbit(-20) == 20');
|
||||||
vrfy(randbit(20) == 822573, '1564: randbit(20) == 822573');
|
vrfy(randbit(20) == 864397, '1564: randbit(20) == 864397');
|
||||||
|
|
||||||
/* test randbit without and arg */
|
/* test randbit without and arg */
|
||||||
tmp = srand(0);
|
tmp = srand(0);
|
||||||
print '1565: tmp = srand(0)';
|
print '1565: tmp = srand(0)';
|
||||||
vrfy(randbit() == 1, '1566: randbit() == 1');
|
vrfy(randbit() == 0, '1566: randbit() == 0');
|
||||||
vrfy(randbit() == 1, '1567: randbit() == 1');
|
vrfy(randbit() == 0, '1567: randbit() == 0');
|
||||||
vrfy(randbit() == 0, '1568: randbit() == 0');
|
vrfy(randbit() == 0, '1568: randbit() == 0');
|
||||||
|
vrfy(randbit() == 1, '1569: randbit() == 1');
|
||||||
|
|
||||||
/* test seed() as best as we can */
|
/* test seed() as best as we can */
|
||||||
vrfy(seed() >= 0, '1569: seed() >= 0');
|
vrfy(seed() >= 0, '1570: seed() >= 0');
|
||||||
vrfy(seed() < 2^64, '1570: seed() < 2^64');
|
vrfy(seed() < 2^64, '1571: seed() < 2^64');
|
||||||
vrfy(isrand(srand(seed())), '1571: isrand(srand(seed()))');
|
vrfy(isrand(srand(seed())), '1572: isrand(srand(seed()))');
|
||||||
|
|
||||||
print '1572: Ending rand test';
|
print '1573: Ending rand test';
|
||||||
}
|
}
|
||||||
print '025: parsed test_rand()';
|
print '025: parsed test_rand()';
|
||||||
|
|
||||||
@@ -1788,7 +1799,23 @@ define test_mode()
|
|||||||
vrfy(str(3e9) == "3000000000", \
|
vrfy(str(3e9) == "3000000000", \
|
||||||
'1650: str(3e9) == \"3000000000\"');
|
'1650: str(3e9) == \"3000000000\"');
|
||||||
|
|
||||||
print '1651: Ending mode/base test';
|
/* 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');
|
||||||
|
|
||||||
|
print '1662: Ending mode/base test';
|
||||||
}
|
}
|
||||||
print '026: parsed test_mode()';
|
print '026: parsed test_mode()';
|
||||||
|
|
||||||
@@ -2183,6 +2210,7 @@ print '033: read -once test2300';
|
|||||||
define test_xx_incdec()
|
define test_xx_incdec()
|
||||||
{
|
{
|
||||||
local A, B;
|
local A, B;
|
||||||
|
local n;
|
||||||
|
|
||||||
print '2300: Beginning object increment/decrement test';
|
print '2300: Beginning object increment/decrement test';
|
||||||
|
|
||||||
@@ -2215,6 +2243,20 @@ define test_xx_incdec()
|
|||||||
vrfy(ckmat(B,1,2,3) == 1,
|
vrfy(ckmat(B,1,2,3) == 1,
|
||||||
'2314: ckmat(B,1,2,3) == 1');
|
'2314: ckmat(B,1,2,3) == 1');
|
||||||
|
|
||||||
|
n = 1;
|
||||||
|
print '2315: n = 1';
|
||||||
|
vrfy(n + n + n + n++ == 4,
|
||||||
|
'2316: n + n + n + n++ == 4');
|
||||||
|
vrfy(n == 2, '2317: n == 2');
|
||||||
|
n = 1;
|
||||||
|
print '2318: n = 1';
|
||||||
|
vrfy(n + n + n++ == 3, '2319: n + n + n++ == 3');
|
||||||
|
vrfy(n == 2, '2320: n == 2');
|
||||||
|
n = 1;
|
||||||
|
print '2321: n = 1';
|
||||||
|
vrfy(n + n++ == 2, '2322: n + n++ == 3');
|
||||||
|
vrfy(n == 2, '2323: n == 2');
|
||||||
|
|
||||||
print '2315: Ending object increment/decrement test';
|
print '2315: Ending object increment/decrement test';
|
||||||
}
|
}
|
||||||
print '034: parsed test_xx_incdec()';
|
print '034: parsed test_xx_incdec()';
|
||||||
@@ -4542,7 +4584,14 @@ define test_random()
|
|||||||
vrfy(seed() < 2^64, '5465: seed() < 2^64');
|
vrfy(seed() < 2^64, '5465: seed() < 2^64');
|
||||||
vrfy(israndom(srandom(seed())), '5466: israndom(srandom(seed()))');
|
vrfy(israndom(srandom(seed())), '5466: israndom(srandom(seed()))');
|
||||||
|
|
||||||
print '5467: Ending test_random';
|
/* verify random(10,11) double bug fix */
|
||||||
|
vrfy(random(10,11) == 10, '5467: random(10,11) == 10');
|
||||||
|
vrfy(random(10,11) == 10, '5468: random(10,11) == 10');
|
||||||
|
vrfy(random(10,11) == 10, '5469: random(10,11) == 10');
|
||||||
|
vrfy(random(0,1) == 0, '5470: random(0,1) == 0');
|
||||||
|
vrfy(random(0,1) == 0, '5471: random(0,1) == 0');
|
||||||
|
|
||||||
|
print '5472: Ending test_random';
|
||||||
}
|
}
|
||||||
print '137: parsed test_random()';
|
print '137: parsed test_random()';
|
||||||
|
|
||||||
@@ -5112,10 +5161,17 @@ define test_is()
|
|||||||
*/
|
*/
|
||||||
a = assoc();
|
a = assoc();
|
||||||
print '5901: a = assoc()';
|
print '5901: a = assoc()';
|
||||||
ofd = fopen("/dev/null", "r");
|
if (config("windows")) {
|
||||||
print '5902: ofd = fopen("/dev/null", "r")';
|
ofd = fopen("NUL:", "rb");
|
||||||
cfd = fopen("/dev/null", "r");
|
print '5902: ofd = fopen("NUL:", "rb")';
|
||||||
print '5903: cfd = fopen("/dev/null", "r")';
|
cfd = fopen("NUL:", "rb");
|
||||||
|
print '5903: cfd = fopen("NUL:", "rb")';
|
||||||
|
} else {
|
||||||
|
ofd = fopen("/dev/null","rb");
|
||||||
|
print '5902: ofd = fopen("/dev/null","rb")';
|
||||||
|
cfd = fopen("/dev/null","rb");
|
||||||
|
print '5903: cfd = fopen("/dev/null","rb")';
|
||||||
|
}
|
||||||
fclose(cfd);
|
fclose(cfd);
|
||||||
print '5904: fclose(cfd)';
|
print '5904: fclose(cfd)';
|
||||||
blk = blk();
|
blk = blk();
|
||||||
@@ -6293,8 +6349,8 @@ define test_blkcpy()
|
|||||||
|
|
||||||
/* blkcpy the last 5 octets of B1 to a new block C */
|
/* blkcpy the last 5 octets of B1 to a new block C */
|
||||||
|
|
||||||
blkcpy(C = blk(), B1, 5, ,100);
|
blkcpy(C = blk(), B1,5,,100);
|
||||||
print '6821: blkcpy(C = blk(), B1, 5, ,100);';
|
print '6821: blkcpy(C = blk(), B1,5,,100);';
|
||||||
vrfy(C == A, '6822: C == A');
|
vrfy(C == A, '6822: C == A');
|
||||||
|
|
||||||
/* blkcpy to and from a file */
|
/* blkcpy to and from a file */
|
||||||
@@ -6310,8 +6366,8 @@ define test_blkcpy()
|
|||||||
blkcpy(fs, A, ,100);
|
blkcpy(fs, A, ,100);
|
||||||
print '6828: blkcpy(fs, A, ,100);';
|
print '6828: blkcpy(fs, A, ,100);';
|
||||||
vrfy(size(fs) == 105, '6829: size(f) == 105');
|
vrfy(size(fs) == 105, '6829: size(f) == 105');
|
||||||
blkcpy(C = blk(), fs, 2, ,100);
|
blkcpy(C = blk(), fs,2,,100);
|
||||||
print '6830: blkcpy(C = blk(), fs, 2, ,100)';
|
print '6830: blkcpy(C = blk(), fs,2,,100)';
|
||||||
vrfy(C == (blk() = {1,2}), '6831: C == (blk() = {1,2}');
|
vrfy(C == (blk() = {1,2}), '6831: C == (blk() = {1,2}');
|
||||||
|
|
||||||
/* blkcpy string to a block */
|
/* blkcpy string to a block */
|
||||||
@@ -7593,7 +7649,9 @@ vrfy(j8300(10) == 11, '8307: j8300(10) == 11');
|
|||||||
{static k8300 = 5} define l8300(x) = k8300 + x;
|
{static k8300 = 5} define l8300(x) = k8300 + x;
|
||||||
print '8308: {static k8300 = 5} define l8300(x) = k8300 + x;';
|
print '8308: {static k8300 = 5} define l8300(x) = k8300 + x;';
|
||||||
vrfy(l8300(10) == 15, '8309: l8300(10) == 15');
|
vrfy(l8300(10) == 15, '8309: l8300(10) == 15');
|
||||||
print '8310: Ending define tests';
|
static a8300 = 1, b8300;
|
||||||
|
vrfy(a8300 == 1, '8310: a8300 == 1');
|
||||||
|
print '8311: Ending define tests';
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
53
cal/repeat.cal
Normal file
53
cal/repeat.cal
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* repeat - return the value of a repeated set of digits
|
||||||
|
*
|
||||||
|
* Copyright (C) 2003 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.4 $
|
||||||
|
* @(#) $Id: repeat.cal,v 29.4 2003/01/26 19:42:03 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/repeat.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2003/01/05 00:00:01
|
||||||
|
* File existed as early as: 2003
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* repeat - return the value of a repeated set of digits
|
||||||
|
*
|
||||||
|
* usage:
|
||||||
|
* repeat(digit_set, repeat_count)
|
||||||
|
*/
|
||||||
|
define repeat(digit_set, repeat_count)
|
||||||
|
{
|
||||||
|
local digit_count; /* digits in the digit_set */
|
||||||
|
|
||||||
|
/* firewall */
|
||||||
|
if (!isint(digit_set) || digit_set <= 0) {
|
||||||
|
quit "digit set must be an integer > 0";
|
||||||
|
}
|
||||||
|
if (!isint(repeat_count) || repeat_count <= 0) {
|
||||||
|
quit "repeat count must be an integer > 0";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* return repeated set of digits */
|
||||||
|
digit_count = digits(digit_set);
|
||||||
|
return digit_set * (10^(digit_count*repeat_count)-1) / (10^digit_count-1);
|
||||||
|
}
|
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: seedrandom.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: seedrandom.cal,v 29.3 2001/03/31 13:31:34 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/seedrandom.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/seedrandom.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/01/01 08:21:00
|
* Under source code control: 1996/01/01 08:21:00
|
||||||
@@ -115,7 +115,7 @@ define seedrandom(seed1, seed2, size, trials)
|
|||||||
p = 2*fp+1;
|
p = 2*fp+1;
|
||||||
} while (ptest(p,1,0) == 0);
|
} while (ptest(p,1,0) == 0);
|
||||||
} while(ptest(p, trials) == 0 || ptest(fp, trials) == 0);
|
} while(ptest(p, trials) == 0 || ptest(fp, trials) == 0);
|
||||||
if (config("resource_debug") & 3) {
|
if (config("resource_debug") & 8) {
|
||||||
print "/* 1st Blum prime */ p=", p;
|
print "/* 1st Blum prime */ p=", p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@ define seedrandom(seed1, seed2, size, trials)
|
|||||||
q = 2*fq+1;
|
q = 2*fq+1;
|
||||||
} while (ptest(q,1,0) == 0);
|
} while (ptest(q,1,0) == 0);
|
||||||
} while(ptest(q, trials) == 0 || ptest(fq, trials) == 0);
|
} while(ptest(q, trials) == 0 || ptest(fq, trials) == 0);
|
||||||
if (config("resource_debug") & 3) {
|
if (config("resource_debug") & 8) {
|
||||||
print "/* 2nd Blum prime */ q=", q;
|
print "/* 2nd Blum prime */ q=", q;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@ define seedrandom(seed1, seed2, size, trials)
|
|||||||
n = p*q; /* the Blum modulus */
|
n = p*q; /* the Blum modulus */
|
||||||
binsize = highbit(n)+1; /* smallest power of 2 > p*q */
|
binsize = highbit(n)+1; /* smallest power of 2 > p*q */
|
||||||
r = pmod(rand(1<<ceil(binsize*4/5), 1<<(binsize-2)), 2, n);
|
r = pmod(rand(1<<ceil(binsize*4/5), 1<<(binsize-2)), 2, n);
|
||||||
if (config("resource_debug") & 3) {
|
if (config("resource_debug") & 8) {
|
||||||
print "/* seed quadratic residue */ r=", r;
|
print "/* seed quadratic residue */ r=", r;
|
||||||
print "/* newn", binsize, "bit quadratic residue*/ newn=", n;
|
print "/* newn", binsize, "bit quadratic residue*/ newn=", n;
|
||||||
}
|
}
|
||||||
|
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: test4600.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
* @(#) $Id: test4600.cal,v 29.4 2001/04/10 22:09:02 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4600.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4600.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/07/02 20:04:40
|
* Under source code control: 1996/07/02 20:04:40
|
||||||
@@ -53,10 +53,10 @@ define stest(str, verbose)
|
|||||||
/*
|
/*
|
||||||
* do file operations
|
* do file operations
|
||||||
*/
|
*/
|
||||||
f = fopen("junk4600", "w");
|
f = fopen("junk4600", "wb");
|
||||||
if (iserror(f)) {
|
if (iserror(f)) {
|
||||||
print 'failed';
|
print 'failed';
|
||||||
print '**** fopen("junk4600", "w") failed';
|
print '**** fopen("junk4600", "wb") failed';
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (iserror(fputs(f,
|
if (iserror(fputs(f,
|
||||||
@@ -67,9 +67,9 @@ define stest(str, verbose)
|
|||||||
print '**** fputs(f, "Fourscore ... failed';
|
print '**** fputs(f, "Fourscore ... failed';
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (iserror(freopen(f, "r"))) {
|
if (iserror(freopen(f, "rb"))) {
|
||||||
print 'failed';
|
print 'failed';
|
||||||
print '**** iserror(freopen(f, "r")) failed';
|
print '**** iserror(freopen(f, "rb")) failed';
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (iserror(rewind(f))) {
|
if (iserror(rewind(f))) {
|
||||||
@@ -173,7 +173,7 @@ define ttest(str, m, n, verbose)
|
|||||||
print str:":",:;
|
print str:":",:;
|
||||||
}
|
}
|
||||||
i = rm("-f", "junk4600");
|
i = rm("-f", "junk4600");
|
||||||
f = fopen("junk4600", "w");
|
f = fopen("junk4600", "wb");
|
||||||
|
|
||||||
if (isnull(n))
|
if (isnull(n))
|
||||||
n = 4;
|
n = 4;
|
||||||
@@ -198,7 +198,7 @@ define ttest(str, m, n, verbose)
|
|||||||
fflush(f);
|
fflush(f);
|
||||||
if (verbose > 1)
|
if (verbose > 1)
|
||||||
printf("File has size %d\n", pos[i]);
|
printf("File has size %d\n", pos[i]);
|
||||||
freopen(f, "r");
|
freopen(f, "rb");
|
||||||
if (size(f) != pos[i]) {
|
if (size(f) != pos[i]) {
|
||||||
print 'failed';
|
print 'failed';
|
||||||
printf("**** Failure 1 for file size\n");
|
printf("**** Failure 1 for file size\n");
|
||||||
|
58
calc.c
58
calc.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* calc - arbitrary precision calculator
|
* calc - arbitrary precision calculator
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell, Landon Curt Noll and Ernest Bowen
|
* Copyright (C) 1999-2004 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.5 $
|
* @(#) $Revision: 29.11 $
|
||||||
* @(#) $Id: calc.c,v 29.5 2000/07/17 15:35:49 chongo Exp $
|
* @(#) $Id: calc.c,v 29.11 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:11
|
* Under source code control: 1990/02/15 01:48:11
|
||||||
@@ -32,10 +32,27 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <pwd.h>
|
|
||||||
|
#if !defined (_WIN32)
|
||||||
|
# include <pwd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
# include <io.h>
|
||||||
|
/*
|
||||||
|
* getopt.h file is from the Cygwin GNU library
|
||||||
|
*
|
||||||
|
* See:
|
||||||
|
* http://sources.redhat.com/cygwin/
|
||||||
|
*/
|
||||||
|
# include "../getopt/getopt.h"
|
||||||
|
# define strdup _strdup
|
||||||
|
# define isatty _isatty
|
||||||
|
#endif /* Windoz */
|
||||||
|
|
||||||
#define CALC_C
|
#define CALC_C
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
#include "hist.h"
|
#include "hist.h"
|
||||||
@@ -49,6 +66,7 @@
|
|||||||
#include "custom.h"
|
#include "custom.h"
|
||||||
#include "math_error.h"
|
#include "math_error.h"
|
||||||
#include "args.h"
|
#include "args.h"
|
||||||
|
#include "zmath.h"
|
||||||
|
|
||||||
#include "have_unistd.h"
|
#include "have_unistd.h"
|
||||||
#if defined(HAVE_UNISTD_H)
|
#if defined(HAVE_UNISTD_H)
|
||||||
@@ -65,6 +83,8 @@
|
|||||||
# define strdup(x) calc_strdup((CONST char *)(x))
|
# define strdup(x) calc_strdup((CONST char *)(x))
|
||||||
#endif /* HAVE_STRDUP */
|
#endif /* HAVE_STRDUP */
|
||||||
|
|
||||||
|
#include "have_unused.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* static definitions and functions
|
* static definitions and functions
|
||||||
@@ -196,7 +216,13 @@ main(int argc, char **argv)
|
|||||||
havearg = TRUE;
|
havearg = TRUE;
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
new_std = TRUE;
|
/*
|
||||||
|
* -n is deprecated and may be reused
|
||||||
|
* for another purpose in the future
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
case 'O':
|
||||||
|
use_old_std = TRUE;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
p_flag = TRUE;
|
p_flag = TRUE;
|
||||||
@@ -407,7 +433,7 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"usage: %s [-a] [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]\n"
|
"usage: %s [-a] [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]\n"
|
||||||
"\t[-D calc_debug[:resource_debug[:user_debug]]]\n"
|
"\t[-D calc_debug[:resource_debug[:user_debug]]]\n"
|
||||||
"\t[-n] [-p] [-q] [-u] [-v] "
|
"\t[-O] [-p] [-q] [-u] [-v] "
|
||||||
"[--] [calc_cmd ...]\n",
|
"[--] [calc_cmd ...]\n",
|
||||||
program);
|
program);
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -607,9 +633,18 @@ main(int argc, char **argv)
|
|||||||
if (!p_flag && i_flag && !stdin_tty) {
|
if (!p_flag && i_flag && !stdin_tty) {
|
||||||
closeinput();
|
closeinput();
|
||||||
if(!freopen("/dev/tty", "r", stdin)) {
|
if(!freopen("/dev/tty", "r", stdin)) {
|
||||||
|
#if defined (_WIN32)
|
||||||
|
fprintf(stderr,
|
||||||
|
"/dev/tty does not exist on "
|
||||||
|
"this operating system. "
|
||||||
|
"Change operating systems\n"
|
||||||
|
"or don't use this calc mode "
|
||||||
|
"in the future, sorry!\n");
|
||||||
|
#else /* Windoz free systems */
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Unable to associate stdin"
|
"Unable to associate stdin"
|
||||||
" with /dev/tty");
|
" with /dev/tty");
|
||||||
|
#endif /* Windoz free systems */
|
||||||
set_run_state(RUN_EXIT_WITH_ERROR);
|
set_run_state(RUN_EXIT_WITH_ERROR);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -628,9 +663,18 @@ main(int argc, char **argv)
|
|||||||
!p_flag && (!havecommands||i_flag)) {
|
!p_flag && (!havecommands||i_flag)) {
|
||||||
closeinput();
|
closeinput();
|
||||||
if(!freopen("/dev/tty", "r", stdin)) {
|
if(!freopen("/dev/tty", "r", stdin)) {
|
||||||
|
#if defined (_WIN32)
|
||||||
|
fprintf(stderr,
|
||||||
|
"/dev/tty does not exist on "
|
||||||
|
"this operating system. "
|
||||||
|
"Change operating systems\n"
|
||||||
|
"or don't use this calc mode "
|
||||||
|
"in the future, sorry!\n");
|
||||||
|
#else /* Windoz free systems */
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Unable to associate stdin"
|
"Unable to associate stdin"
|
||||||
" with /dev/tty");
|
" with /dev/tty");
|
||||||
|
#endif /* Windoz free systems */
|
||||||
set_run_state(RUN_EXIT_WITH_ERROR);
|
set_run_state(RUN_EXIT_WITH_ERROR);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -664,7 +708,7 @@ main(int argc, char **argv)
|
|||||||
*/
|
*/
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
static void
|
static void
|
||||||
intint(int arg)
|
intint(int UNUSED arg)
|
||||||
{
|
{
|
||||||
(void) signal(SIGINT, intint);
|
(void) signal(SIGINT, intint);
|
||||||
if (inputwait || (++abortlevel >= ABORT_NOW)) {
|
if (inputwait || (++abortlevel >= ABORT_NOW)) {
|
||||||
|
245
calc.h
245
calc.h
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.5 $
|
* @(#) $Revision: 29.11 $
|
||||||
* @(#) $Id: calc.h,v 29.5 2000/12/04 19:32:33 chongo Exp $
|
* @(#) $Id: calc.h,v 29.11 2003/08/26 04:36:10 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:31
|
* Under source code control: 1990/02/15 01:48:31
|
||||||
@@ -32,10 +32,15 @@
|
|||||||
#define __CALC_H__
|
#define __CALC_H__
|
||||||
|
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
#include "value.h"
|
# include "win32dll.h"
|
||||||
|
# include "value.h"
|
||||||
#include "have_const.h"
|
# include "have_const.h"
|
||||||
|
#else
|
||||||
|
# include <calc/win32dll.h>
|
||||||
|
# include <calc/value.h>
|
||||||
|
# include <calc/have_const.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -55,7 +60,11 @@
|
|||||||
#define HOMECHAR '~' /* char which indicates home directory */
|
#define HOMECHAR '~' /* char which indicates home directory */
|
||||||
#define DOTCHAR '.' /* char which indicates current directory */
|
#define DOTCHAR '.' /* char which indicates current directory */
|
||||||
#define PATHCHAR '/' /* char which separates path components */
|
#define PATHCHAR '/' /* char which separates path components */
|
||||||
|
#if defined(__MSDOS__) || defined(__WIN32)
|
||||||
|
#define LISTCHAR ';' /* char which separates paths in a list */
|
||||||
|
#else
|
||||||
#define LISTCHAR ':' /* char which separates paths in a list */
|
#define LISTCHAR ':' /* char which separates paths in a list */
|
||||||
|
#endif
|
||||||
#define MAXCMD 16384 /* maximum length of command invocation */
|
#define MAXCMD 16384 /* maximum length of command invocation */
|
||||||
#define MAXERROR 512 /* maximum length of error message string */
|
#define MAXERROR 512 /* maximum length of error message string */
|
||||||
|
|
||||||
@@ -94,134 +103,140 @@
|
|||||||
/*
|
/*
|
||||||
* File I/O routines.
|
* File I/O routines.
|
||||||
*/
|
*/
|
||||||
extern FILEID openid(char *name, char *mode);
|
extern DLL FILEID openid(char *name, char *mode);
|
||||||
extern FILEID indexid(long index);
|
extern DLL FILEID indexid(long index);
|
||||||
extern BOOL validid(FILEID id);
|
extern DLL BOOL validid(FILEID id);
|
||||||
extern BOOL errorid(FILEID id);
|
extern DLL BOOL errorid(FILEID id);
|
||||||
extern BOOL eofid(FILEID id);
|
extern DLL BOOL eofid(FILEID id);
|
||||||
extern int closeid(FILEID id);
|
extern DLL int closeid(FILEID id);
|
||||||
extern int getcharid(FILEID id);
|
extern DLL int getcharid(FILEID id);
|
||||||
extern int idprintf(FILEID id, char *fmt, int count, VALUE **vals);
|
extern DLL int idprintf(FILEID id, char *fmt, int count, VALUE **vals);
|
||||||
extern int idfputc(FILEID id, int ch);
|
extern DLL int idfputc(FILEID id, int ch);
|
||||||
extern int idfputs(FILEID id, char *str);
|
extern DLL int idfputs(FILEID id, char *str);
|
||||||
extern int printid(FILEID id, int flags);
|
extern DLL int printid(FILEID id, int flags);
|
||||||
extern int flushid(FILEID id);
|
extern DLL int flushid(FILEID id);
|
||||||
extern int readid(FILEID id, int flags, char **retptr);
|
extern DLL int readid(FILEID id, int flags, char **retptr);
|
||||||
extern int getloc(FILEID id, ZVALUE *loc);
|
extern DLL int getloc(FILEID id, ZVALUE *loc);
|
||||||
extern int setloc(FILEID id, ZVALUE zpos);
|
extern DLL int setloc(FILEID id, ZVALUE zpos);
|
||||||
extern int getsize(FILEID id, ZVALUE *size);
|
extern DLL int getsize(FILEID id, ZVALUE *size);
|
||||||
extern int get_device(FILEID id, ZVALUE *dev);
|
extern DLL int get_device(FILEID id, ZVALUE *dev);
|
||||||
extern int get_inode(FILEID id, ZVALUE *ino);
|
extern DLL int get_inode(FILEID id, ZVALUE *ino);
|
||||||
extern FILEID reopenid(FILEID id, char *mode, char *name);
|
extern DLL FILEID reopenid(FILEID id, char *mode, char *name);
|
||||||
extern int closeall(void);
|
extern DLL int closeall(void);
|
||||||
extern int flushall(void);
|
|
||||||
extern int idfputstr(FILEID id, char *str);
|
#if !defined(_WIN32)
|
||||||
extern int rewindid(FILEID id);
|
extern DLL int flushall(void);
|
||||||
extern void rewindall(void);
|
#endif
|
||||||
extern ZVALUE zfilesize(FILEID id);
|
|
||||||
extern void showfiles(void);
|
extern DLL int idfputstr(FILEID id, char *str);
|
||||||
extern int fscanfid(FILEID id, char *fmt, int count, VALUE **vals);
|
extern DLL int rewindid(FILEID id);
|
||||||
extern int scanfstr(char *str, char *fmt, int count, VALUE **vals);
|
extern DLL void rewindall(void);
|
||||||
extern int ftellid(FILEID id, ZVALUE *res);
|
extern DLL ZVALUE zfilesize(FILEID id);
|
||||||
extern int fseekid(FILEID id, ZVALUE offset, int whence);
|
extern DLL void showfiles(void);
|
||||||
extern int isattyid(FILEID id);
|
extern DLL int fscanfid(FILEID id, char *fmt, int count, VALUE **vals);
|
||||||
extern int fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res);
|
extern DLL int scanfstr(char *str, char *fmt, int count, VALUE **vals);
|
||||||
extern int frsearch(FILEID id, char *str, ZVALUE first, ZVALUE last, ZVALUE *res);
|
extern DLL int ftellid(FILEID id, ZVALUE *res);
|
||||||
extern void showconstants(void);
|
extern DLL int fseekid(FILEID id, ZVALUE offset, int whence);
|
||||||
extern void freeconstant(unsigned long);
|
extern DLL int isattyid(FILEID id);
|
||||||
extern void freestringconstant(long);
|
extern DLL int fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res);
|
||||||
extern void trimconstants(void);
|
extern DLL int frsearch(FILEID id, char *str, ZVALUE first, ZVALUE last, ZVALUE *res);
|
||||||
|
extern DLL void showconstants(void);
|
||||||
|
extern DLL void freeconstant(unsigned long);
|
||||||
|
extern DLL void freestringconstant(long);
|
||||||
|
extern DLL void trimconstants(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Input routines.
|
* Input routines.
|
||||||
*/
|
*/
|
||||||
extern int openstring(char *str, long num);
|
extern DLL int openstring(char *str, long num);
|
||||||
extern int openterminal(void);
|
extern DLL int openterminal(void);
|
||||||
extern int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
|
extern DLL int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
|
||||||
extern char *nextline(void);
|
extern DLL char *nextline(void);
|
||||||
extern int nextchar(void);
|
extern DLL int nextchar(void);
|
||||||
extern void reread(void);
|
extern DLL void reread(void);
|
||||||
extern void resetinput(void);
|
extern DLL void resetinput(void);
|
||||||
extern void setprompt(char *);
|
extern DLL void setprompt(char *);
|
||||||
extern BOOL inputisterminal(void);
|
extern DLL BOOL inputisterminal(void);
|
||||||
extern int inputlevel(void);
|
extern DLL int inputlevel(void);
|
||||||
extern long calclevel(void);
|
extern DLL long calclevel(void);
|
||||||
extern char *inputname(void);
|
extern DLL char *inputname(void);
|
||||||
extern long linenumber(void);
|
extern DLL long linenumber(void);
|
||||||
extern void runrcfiles(void);
|
extern DLL void runrcfiles(void);
|
||||||
extern void closeinput(void);
|
extern DLL void closeinput(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Other routines.
|
* Other routines.
|
||||||
*/
|
*/
|
||||||
extern NUMBER *constvalue(unsigned long index);
|
extern DLL NUMBER *constvalue(unsigned long index);
|
||||||
extern long addnumber(char *str);
|
extern DLL long addnumber(char *str);
|
||||||
extern long addqconstant(NUMBER *q);
|
extern DLL long addqconstant(NUMBER *q);
|
||||||
extern void initstack(void);
|
extern DLL void initstack(void);
|
||||||
extern void getcommands(BOOL toplevel);
|
extern DLL void getcommands(BOOL toplevel);
|
||||||
extern void givehelp(char *type);
|
extern DLL void givehelp(char *type);
|
||||||
extern void libcalc_call_me_first(void);
|
extern DLL void libcalc_call_me_first(void);
|
||||||
extern void libcalc_call_me_last(void);
|
extern DLL void libcalc_call_me_last(void);
|
||||||
extern BOOL calc_tty(int fd);
|
extern DLL BOOL calc_tty(int fd);
|
||||||
extern BOOL orig_tty(int fd);
|
extern DLL BOOL orig_tty(int fd);
|
||||||
extern void showerrors(void);
|
extern DLL void showerrors(void);
|
||||||
extern char *calc_strdup(CONST char *);
|
extern DLL char *calc_strdup(CONST char *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialization
|
* Initialization
|
||||||
*/
|
*/
|
||||||
extern void initialize(void);
|
extern DLL void initialize(void);
|
||||||
extern void reinitialize(void);
|
extern DLL void reinitialize(void);
|
||||||
extern int isatty(int tty); /* TRUE if fd is a tty */
|
#if !defined (_WIN32)
|
||||||
extern char *version(void); /* return version string */
|
extern DLL int isatty(int tty); /* TRUE if fd is a tty */
|
||||||
extern int post_init; /* TRUE => setjmp for math_error is ready */
|
#endif
|
||||||
|
extern DLL char *version(void); /* return version string */
|
||||||
|
extern DLL int post_init; /* TRUE => math_error setjmp is ready */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* global flags and definitions
|
* global flags and definitions
|
||||||
*/
|
*/
|
||||||
extern int abortlevel; /* current level of aborts */
|
extern DLL int abortlevel; /* current level of aborts */
|
||||||
extern BOOL inputwait; /* TRUE if in a terminal input wait */
|
extern DLL BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||||
extern jmp_buf jmpbuf; /* for errors */
|
extern DLL jmp_buf jmpbuf; /* for errors */
|
||||||
|
|
||||||
extern int p_flag; /* TRUE => pipe mode */
|
extern DLL int p_flag; /* TRUE => pipe mode */
|
||||||
extern int q_flag; /* TRUE => don't execute rc files */
|
extern DLL int q_flag; /* TRUE => don't execute rc files */
|
||||||
extern int u_flag; /* TRUE => unbuffer stdin and stdout */
|
extern DLL int u_flag; /* TRUE => unbuffer stdin and stdout */
|
||||||
extern int d_flag; /* TRUE => disable heading, resource_debug */
|
extern DLL int d_flag; /* TRUE => disable heading, resource_debug */
|
||||||
extern int c_flag; /* TRUE => continue after error if permitted */
|
extern DLL int c_flag; /* TRUE => continue after error if permitted */
|
||||||
extern int i_flag; /* TRUE => try to go interactive after error */
|
extern DLL int i_flag; /* TRUE => try to go interactive after error */
|
||||||
extern int s_flag; /* TRUE => keep args as strings for argv() */
|
extern DLL int s_flag; /* TRUE => keep args as strings for argv() */
|
||||||
extern int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
extern DLL int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
||||||
extern BOOL abort_now; /* TRUE => try to go interactive */
|
extern DLL BOOL abort_now; /* TRUE => try to go interactive */
|
||||||
|
|
||||||
extern int argc_value; /* count of argv[] strings for argv() builtin */
|
extern DLL int argc_value; /* count of argv[] strings for argv() builtin */
|
||||||
extern char **argv_value; /* argv[] strings for argv() builtin */
|
extern DLL char **argv_value; /* argv[] strings for argv() builtin */
|
||||||
|
|
||||||
extern char *pager; /* $PAGER or default */
|
extern DLL char *pager; /* $PAGER or default */
|
||||||
extern int stdin_tty; /* TRUE if stdin is a tty */
|
extern DLL int stdin_tty; /* TRUE if stdin is a tty */
|
||||||
extern int havecommands; /* TRUE if have cmd args) */
|
extern DLL int havecommands; /* TRUE if have cmd args) */
|
||||||
extern char *program; /* our name */
|
extern DLL char *program; /* our name */
|
||||||
extern char *base_name; /* basename of our name */
|
extern DLL char *base_name; /* basename of our name */
|
||||||
extern char cmdbuf[]; /* command line expression */
|
extern DLL char cmdbuf[]; /* command line expression */
|
||||||
|
|
||||||
extern int abortlevel; /* current level of aborts */
|
extern DLL int abortlevel; /* current level of aborts */
|
||||||
extern BOOL inputwait; /* TRUE if in a terminal input wait */
|
extern DLL BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||||
extern VALUE *stack; /* execution stack */
|
extern DLL VALUE *stack; /* execution stack */
|
||||||
extern int dumpnames; /* TRUE => dump names rather than indices */
|
extern DLL int dumpnames; /* TRUE => dump names rather than indices */
|
||||||
|
|
||||||
extern char *calcpath; /* $CALCPATH or default */
|
extern DLL char *calcpath; /* $CALCPATH or default */
|
||||||
extern char *calcrc; /* $CALCRC or default */
|
extern DLL char *calcrc; /* $CALCRC or default */
|
||||||
extern char *calcbindings; /* $CALCBINDINGS or default */
|
extern DLL char *calcbindings; /* $CALCBINDINGS or default */
|
||||||
extern char *home; /* $HOME or default */
|
extern DLL char *home; /* $HOME or default */
|
||||||
extern char *shell; /* $SHELL or default */
|
extern DLL char *shell; /* $SHELL or default */
|
||||||
extern char *program; /* our name (argv[0]) */
|
extern DLL char *program; /* our name (argv[0]) */
|
||||||
|
|
||||||
extern int no_env; /* TRUE (-e) => ignore env vars on startup */
|
extern DLL int no_env; /* TRUE (-e) => ignore env vars on startup */
|
||||||
extern int errmax; /* if >= 0, error when errcount exceeds errmax */
|
extern DLL int errmax; /* if >= 0, error when errcount exceeds errmax */
|
||||||
extern int new_std; /* TRUE (-n) => use newstd configuration */
|
extern DLL int use_old_std; /* TRUE (-O) => use classic configuration */
|
||||||
|
|
||||||
extern int allow_read; /* FALSE => may not open any files for reading */
|
extern DLL int allow_read; /* FALSE => dont open any files for reading */
|
||||||
extern int allow_write; /* FALSE => may not open any files for writing */
|
extern DLL int allow_write; /* FALSE => dont open any files for writing */
|
||||||
extern int allow_exec; /* FALSE => may not execute any commands */
|
extern DLL int allow_exec; /* FALSE => may not execute any commands */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* calc startup and run state
|
* calc startup and run state
|
||||||
@@ -237,8 +252,8 @@ typedef enum {
|
|||||||
RUN_EXIT, /* normal exit from calc */
|
RUN_EXIT, /* normal exit from calc */
|
||||||
RUN_EXIT_WITH_ERROR /* exit with error */
|
RUN_EXIT_WITH_ERROR /* exit with error */
|
||||||
} run;
|
} run;
|
||||||
extern run run_state;
|
extern DLL run run_state;
|
||||||
extern char *run_state_name(run state);
|
extern DLL char *run_state_name(run state);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* calc version information
|
* calc version information
|
||||||
@@ -247,9 +262,9 @@ extern char *run_state_name(run state);
|
|||||||
extern int calc_major_ver;
|
extern int calc_major_ver;
|
||||||
extern int calc_minor_ver;
|
extern int calc_minor_ver;
|
||||||
extern int calc_major_patch;
|
extern int calc_major_patch;
|
||||||
extern char *calc_minor_patch;
|
extern int calc_minor_patch;
|
||||||
extern char *Copyright;
|
extern char *Copyright;
|
||||||
extern char *version(void);
|
extern DLL char *version(void);
|
||||||
|
|
||||||
|
|
||||||
#endif /* !__CALC_H__ */
|
#endif /* !__CALC_H__ */
|
||||||
|
153
calc.man
153
calc.man
@@ -1,5 +1,5 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" Copyright (C) 1999 Landon Curt Noll
|
.\" Copyright (C) 1999-2004 Landon Curt Noll
|
||||||
.\"
|
.\"
|
||||||
.\" Calc is open software; you can redistribute it and/or modify it under
|
.\" Calc is open software; you can redistribute it and/or modify it under
|
||||||
.\" the terms of the version 2.1 of the GNU Lesser General Public License
|
.\" the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -15,8 +15,8 @@
|
|||||||
.\" received a copy with calc; if not, write to Free Software Foundation, Inc.
|
.\" received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
.\"
|
.\"
|
||||||
.\" @(#) $Revision: 29.5 $
|
.\" @(#) $Revision: 29.15 $
|
||||||
.\" @(#) $Id: calc.man,v 29.5 2000/06/07 14:02:13 chongo Exp $
|
.\" @(#) $Id: calc.man,v 29.15 2004/08/03 05:06:22 chongo Exp $
|
||||||
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
|
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
|
||||||
.\"
|
.\"
|
||||||
.\" Under source code control: 1991/07/23 05:48:26
|
.\" Under source code control: 1991/07/23 05:48:26
|
||||||
@@ -36,24 +36,25 @@ calc \- arbitrary precision calculator
|
|||||||
.RB [ \-c ]
|
.RB [ \-c ]
|
||||||
.RB [ \-C ]
|
.RB [ \-C ]
|
||||||
.RB [ \-d ]
|
.RB [ \-d ]
|
||||||
.RB [ -D\ \&calc_debug[:resource_debug[:user_debug]] ]
|
|
||||||
.br
|
.br
|
||||||
.in +5n
|
.in +5n
|
||||||
|
.RB [ -D\ \&calc_debug[:resource_debug[:user_debug]] ]
|
||||||
|
.br
|
||||||
.RB [ \-e ]
|
.RB [ \-e ]
|
||||||
.RB [ \-h ]
|
.RB [ \-h ]
|
||||||
.RB [ \-i ]
|
.RB [ \-i ]
|
||||||
.RB [ \-m\ \&mode ]
|
.RB [ \-m\ \&mode ]
|
||||||
.RB [ \-n ]
|
.RB [ \-O ]
|
||||||
|
.br
|
||||||
.RB [ \-p ]
|
.RB [ \-p ]
|
||||||
.RB [ \-q ]
|
.RB [ \-q ]
|
||||||
.RB [ \-s ]
|
.RB [ \-s ]
|
||||||
.RB [ \-u ]
|
.RB [ \-u ]
|
||||||
.RB [ \-v ]
|
.RB [ \-v ]
|
||||||
.br
|
|
||||||
.RB [ calc_cmd\ \&.\|.\|. ]
|
.RB [ calc_cmd\ \&.\|.\|. ]
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp
|
.sp
|
||||||
\fI#!${BINDIR}/calc\fP\ \fB\-S\fP\ [other_flags\ \&...]
|
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
@@ -118,7 +119,7 @@ as if \fBconfig("resource_debug", 0)\fP had been executed.
|
|||||||
For example:
|
For example:
|
||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
calc 'read qtime; qtime(2)'
|
calc "read qtime; qtime(2)"
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
will output something like:
|
will output something like:
|
||||||
@@ -134,7 +135,7 @@ whereas:
|
|||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
calc -d 'read qtime; qtime(2)'
|
calc -d "read qtime; qtime(2)"
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -301,11 +302,22 @@ The reading of key bindings is also disabled
|
|||||||
when the mode disables opening of files for reading.
|
when the mode disables opening of files for reading.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-n
|
.B \-O
|
||||||
Use the new configuration defaults instead of the old
|
Use the old classic defaults instead of the
|
||||||
default classic defaults.
|
default configuration.
|
||||||
This flag as the same effect
|
This flag as the same effect
|
||||||
as executing \fBconfig("all", "newcfg")\fP at startup time.
|
as executing \fBconfig("all", "oldcfg")\fP at startup time.
|
||||||
|
.sp 1
|
||||||
|
NOTE: Older versions of calc used
|
||||||
|
.B \-n
|
||||||
|
to setup a modified form of the default calc configuration.
|
||||||
|
The
|
||||||
|
.B \-n
|
||||||
|
flag currently does nothing.
|
||||||
|
Use of the
|
||||||
|
.B \-n
|
||||||
|
flag is now deprecated and may be used for
|
||||||
|
something else in the future.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-p
|
.B \-p
|
||||||
@@ -315,7 +327,7 @@ For example:
|
|||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
calc -p '2^21701-1' | fizzbin
|
calc -p "2^21701-1" | fizzbin
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -405,7 +417,7 @@ enclosing the command between single marks as in:
|
|||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
calc '23 * 47'
|
calc "23 * 47"
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -413,7 +425,7 @@ and
|
|||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
calc 'print sqrt(2), exp(1)'
|
calc "print sqrt(2), exp(1)"
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp
|
.sp
|
||||||
@@ -513,8 +525,8 @@ searches in succession:
|
|||||||
./myfile.cal
|
./myfile.cal
|
||||||
${LIBDIR}/myfile
|
${LIBDIR}/myfile
|
||||||
${LIBDIR}/myfile.cal
|
${LIBDIR}/myfile.cal
|
||||||
${CUSTOMLIBDIR}/myfile
|
${CUSTOMCALDIR}/myfile
|
||||||
${CUSTOMLIBDIR}/myfile.cal
|
${CUSTOMCALDIR}/myfile.cal
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -571,27 +583,25 @@ If first line of an executable file begins
|
|||||||
followed by the absolute pathname of the
|
followed by the absolute pathname of the
|
||||||
.B calc
|
.B calc
|
||||||
program and the flag
|
program and the flag
|
||||||
.B \-S
|
.B \-f
|
||||||
as in:
|
as in:
|
||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
\fI#!${BINDIR}/calc\fP\ \fB\-S\fP\ [other_flags\ \&...]
|
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP
|
||||||
.fi
|
.fi
|
||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
the rest of the file will be processed in
|
the rest of the file will be processed in
|
||||||
.BR "shell script mode" .
|
.BR "shell script mode" .
|
||||||
Note that
|
Note that
|
||||||
.B \-S
|
.B \-f
|
||||||
(UPPER CASE
|
|
||||||
.BR \-S )
|
|
||||||
must be the first \-flag on the ``#!'' line.
|
must be the first \-flag on the ``#!'' line.
|
||||||
Any other optional
|
Any other optional
|
||||||
.B "other_flags"
|
.B "other_flags"
|
||||||
must come after
|
must come after
|
||||||
the
|
the
|
||||||
.BR \-S .
|
.BR \-f .
|
||||||
.sp 1
|
.sp 1
|
||||||
In
|
In
|
||||||
.B "shell script mode"
|
.B "shell script mode"
|
||||||
@@ -624,7 +634,7 @@ the file
|
|||||||
.sp 1
|
.sp 1
|
||||||
.in +5n
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
\fI#!${BINDIR}/calc\fP\ \fB\-S\fP\ \&\fB\-q\fP
|
\fI#!${BINDIR}/calc\fP\ \&\fB\-q\fP \fB\-f\fP
|
||||||
#
|
#
|
||||||
# mersenne - an example of a calc \fBshell script file\fP
|
# mersenne - an example of a calc \fBshell script file\fP
|
||||||
|
|
||||||
@@ -838,7 +848,7 @@ ${LIBDIR}/bindings
|
|||||||
non-GNU-readline command line editor bindings
|
non-GNU-readline command line editor bindings
|
||||||
.sp 1
|
.sp 1
|
||||||
.TP 5
|
.TP 5
|
||||||
${INCDIRCALC}/*.h
|
${CALC_INCDIR}/*.h
|
||||||
include files for C interface use
|
include files for C interface use
|
||||||
.sp 1
|
.sp 1
|
||||||
.TP 5
|
.TP 5
|
||||||
@@ -850,7 +860,7 @@ ${LIBDIR}/libcustcalc.a
|
|||||||
custom binary link library
|
custom binary link library
|
||||||
.sp 1
|
.sp 1
|
||||||
.TP 5
|
.TP 5
|
||||||
${CUSTOMLIBDIR}/*.cal
|
${CUSTOMCALDIR}/*.cal
|
||||||
custom resource files
|
custom resource files
|
||||||
.sp 1
|
.sp 1
|
||||||
.TP 5
|
.TP 5
|
||||||
@@ -993,25 +1003,58 @@ Copyright (C) 1999 Landon Curt Noll
|
|||||||
and is covered under version 2.1 GNU Lesser General
|
and is covered under version 2.1 GNU Lesser General
|
||||||
Public License.
|
Public License.
|
||||||
.sp
|
.sp
|
||||||
.SH "BUG REPORTS / BUG FIXES / ENHANCEMENTS"
|
.SH "CALC MAILING LIST / CALC UPDATES / ENHANCEMENTS"
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
.sp
|
.sp
|
||||||
Send comments, suggestions, bug fixes, enhancements
|
To contribute comments, suggestions, enhancements
|
||||||
and interesting
|
and interesting
|
||||||
.B calc
|
.B calc
|
||||||
resource files,
|
resource files, and
|
||||||
.B calc
|
shell scripts please join the low volume calc mailing list.
|
||||||
shell scripts that you would like you see included
|
.sp
|
||||||
in future distributions to:
|
To join the low volume calc mailing list, send EMail to:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
.nf
|
.nf
|
||||||
calc-contrib at asthe dot com
|
calc-tester-request at asthe dot com
|
||||||
.fi
|
.fi
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
Bug reports are sent to:
|
Your subject must contain the words:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
calc mailing list subscription
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
.sp
|
||||||
|
Your message body must contain:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
subscribe calc-tester address
|
||||||
|
end
|
||||||
|
name your_full_name
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
where
|
||||||
|
.B address
|
||||||
|
s your EMail address and
|
||||||
|
.B your_full_name
|
||||||
|
is your full name.
|
||||||
|
Feel free to follow the
|
||||||
|
.B name
|
||||||
|
line with additional EMail text as desired.
|
||||||
|
.sp
|
||||||
|
.SH "BUG REPORTS / BUG FIXES"
|
||||||
|
\&
|
||||||
|
.br
|
||||||
|
.sp
|
||||||
|
Send bug reports and bug fixes to:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
.nf
|
.nf
|
||||||
@@ -1022,6 +1065,16 @@ calc-bugs at asthe dot com
|
|||||||
.fi
|
.fi
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
|
Your subject must contain the words:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
calc bug report
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
.sp
|
||||||
See the
|
See the
|
||||||
.I BUGS
|
.I BUGS
|
||||||
source file or use the
|
source file or use the
|
||||||
@@ -1036,7 +1089,7 @@ help bugs
|
|||||||
.sp
|
.sp
|
||||||
for more information about bug reporting.
|
for more information about bug reporting.
|
||||||
.sp
|
.sp
|
||||||
.SH "CALC WEB SITE / MAILING LIST"
|
.SH "CALC WEB SITE"
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
Landon Noll maintains the the
|
Landon Noll maintains the the
|
||||||
@@ -1044,33 +1097,7 @@ Landon Noll maintains the the
|
|||||||
web site is located at:
|
web site is located at:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
http://www.isthe.com/chongo/tech/comp/calc/
|
www.isthe.com/chongo/tech/comp/calc/
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
One may join the
|
|
||||||
.B calc
|
|
||||||
testing group by sending a request to:
|
|
||||||
.sp
|
|
||||||
.in +0.5i
|
|
||||||
.nf
|
|
||||||
calc-tester-request at asthe dot com
|
|
||||||
|
|
||||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
|
||||||
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
|
||||||
.fi
|
|
||||||
.in -0.5i
|
|
||||||
.sp
|
|
||||||
Your message body (not the subject) should consist of:
|
|
||||||
.sp
|
|
||||||
.in +0.5i
|
|
||||||
.nf
|
|
||||||
subscribe calc-tester address
|
|
||||||
end
|
|
||||||
name your_full_name
|
|
||||||
.fi
|
|
||||||
.in -0.5i
|
|
||||||
.sp
|
|
||||||
where "address" is your EMail address and "your_full_name"
|
|
||||||
is your full name.
|
|
||||||
.sp
|
|
||||||
Share and Enjoy! :\-)
|
Share and Enjoy! :\-)
|
||||||
|
116
calc.spec.in
Normal file
116
calc.spec.in
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
#****h* calc/calc.spec.in
|
||||||
|
#
|
||||||
|
# calc.spec.in - template specfile for calc
|
||||||
|
#
|
||||||
|
# Copyright (C) 2003-2004 Petteri Kettunen and Landon Curt Noll
|
||||||
|
#
|
||||||
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
# as published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
# Public License for more details.
|
||||||
|
#
|
||||||
|
# A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# @(#) $Revision: 29.13 $
|
||||||
|
# @(#) $Id: calc.spec.in,v 29.13 2004/02/23 14:04:01 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.spec.in,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 2003/02/16 20:21:39
|
||||||
|
# File existed as early as: 2003
|
||||||
|
#
|
||||||
|
# calculator by David I. Bell with help/mods from others
|
||||||
|
# Makefile by Petteri Kettunen with modifications from Landon Curt Noll
|
||||||
|
|
||||||
|
# BUGS
|
||||||
|
# - Uninstalling calc and calc-devel leaves empty dirs /usr/include/calc
|
||||||
|
# and /usr/share/calc and its subdird. In case e.g. %{_includedir}/calc
|
||||||
|
# is defined in `%files devel' section, then rpmbuild complains that
|
||||||
|
# header files are defined twice - rpmbuild bug or bug in specfile conf???
|
||||||
|
|
||||||
|
Summary: Arbitrary precision calculator.
|
||||||
|
Name: calc
|
||||||
|
Version: <<<PROJECT_VERSION>>>
|
||||||
|
Release: 0
|
||||||
|
Copyright: LGPL
|
||||||
|
Group: Applications/Engineering
|
||||||
|
Source: %{name}-%{version}.tar.gz
|
||||||
|
URL: http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
Requires: ncurses >= 5.2-26, readline >= 4.2, less >= 358
|
||||||
|
BuildRequires: ncurses-devel >= 5.2-26, readline-devel >= 4.2
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-root
|
||||||
|
|
||||||
|
%description
|
||||||
|
Calc is arbitrary precision C-like arithmetic system that is a
|
||||||
|
calculator, an algorithm prototyper and mathematical research
|
||||||
|
tool. Calc comes with a rich set of builtin mathematical and
|
||||||
|
programmatic functions.
|
||||||
|
|
||||||
|
For the latest calc release, see the project home page:
|
||||||
|
|
||||||
|
http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: Development files and documentation for calc.
|
||||||
|
Group: Development/Libraries
|
||||||
|
PreReq: %{name} = %{version}-%{release}
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
This package contains the header files and static libraries for developing
|
||||||
|
calc (arbitrary precision calculator).
|
||||||
|
|
||||||
|
For the latest calc release, see the project home page:
|
||||||
|
|
||||||
|
http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
%build
|
||||||
|
make %{?_smp_mflags} T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 all chk
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
mkdir -p %{buildroot}
|
||||||
|
make T=%{buildroot} BINDIR=%{_bindir} LIBDIR=%{_libdir} CALC_SHAREDIR=%{_datadir}/%{name} CALC_INCDIR=%{_includedir}/calc MANDIR=%{_mandir}/man1 install
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%doc BUGS CHANGES COPYING COPYING-LGPL
|
||||||
|
%{_bindir}/*
|
||||||
|
%{_mandir}/man1/*
|
||||||
|
%{_datadir}/%{name}/*/*
|
||||||
|
%{_datadir}/%{name}/bindings
|
||||||
|
%{_datadir}/%{name}/README
|
||||||
|
%{_datadir}/%{name}/*.cal
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%doc BUGS COPYING COPYING-LGPL LIBRARY
|
||||||
|
%attr(644, root, root) %{_includedir}/calc/*
|
||||||
|
%attr(644, root, root) %{_libdir}/*.a
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Wed Feb 26 2003 Landon Curt Noll http://www.isthe.com/chongo
|
||||||
|
- Release of calc-2.11.7-2
|
||||||
|
- Fixed attributes on include and lib calc-devel files
|
||||||
|
- Added BUGS to calc-devel as well as calc
|
||||||
|
* Tue Feb 25 2003 Landon Curt Noll http://www.isthe.com/chongo
|
||||||
|
- Release of calc-2.11.7-1
|
||||||
|
- Require ncurses, readline and less to install.
|
||||||
|
- Require ncurses-devel and readline-devel to build.
|
||||||
|
* Tue Feb 18 2003 Landon Curt Noll http://www.isthe.com/chongo
|
||||||
|
- Misc changes to fit local directory setup
|
||||||
|
* Sun Feb 16 2003 Petteri Kettunen <petterik@users.sourceforge.net>
|
||||||
|
- initial RPM build
|
||||||
|
|
||||||
|
#****
|
@@ -17,8 +17,8 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.3 $
|
# @(#) $Revision: 29.4 $
|
||||||
# @(#) $Id: calcerr.tbl,v 29.3 2000/07/17 15:35:49 chongo Exp $
|
# @(#) $Id: calcerr.tbl,v 29.4 2001/04/10 22:06:46 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1996/05/23 17:38:44
|
# Under source code control: 1996/05/23 17:38:44
|
||||||
@@ -108,8 +108,8 @@ E_FGETSTR1 Non-file first argument for fgetstr
|
|||||||
E_FGETSTR2 File not open for reading for fgetstr
|
E_FGETSTR2 File not open for reading for fgetstr
|
||||||
E_FGETLINE1 Non-file argument for fgetline
|
E_FGETLINE1 Non-file argument for fgetline
|
||||||
E_FGETLINE2 File not open for reading for fgetline
|
E_FGETLINE2 File not open for reading for fgetline
|
||||||
E_FGETWORD1 Non-file argument for fgetword
|
E_FGETFIELD1 Non-file argument for fgetfield
|
||||||
E_FGETWORD2 File not open for reading for fgetword
|
E_FGETFIELD2 File not open for reading for fgetfield
|
||||||
E_REWIND1 Non-file argument for rewind
|
E_REWIND1 Non-file argument for rewind
|
||||||
E_FILES Non-integer argument for files
|
E_FILES Non-integer argument for files
|
||||||
E_PRINTF1 Non-string fmt argument for fprint
|
E_PRINTF1 Non-string fmt argument for fprint
|
||||||
|
15
cmath.h
15
cmath.h
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.3 $
|
* @(#) $Revision: 29.6 $
|
||||||
* @(#) $Id: cmath.h,v 29.3 2000/07/17 15:35:49 chongo Exp $
|
* @(#) $Id: cmath.h,v 29.6 2002/03/12 09:38:26 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/cmath.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/cmath.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1993/07/30 19:42:45
|
* Under source code control: 1993/07/30 19:42:45
|
||||||
@@ -32,7 +32,11 @@
|
|||||||
#define __CMATH_H__
|
#define __CMATH_H__
|
||||||
|
|
||||||
|
|
||||||
#include "qmath.h"
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
|
# include "qmath.h"
|
||||||
|
#else
|
||||||
|
# include <calc/qmath.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -58,6 +62,7 @@ extern void cprintfr(COMPLEX *c);
|
|||||||
/*
|
/*
|
||||||
* Basic numeric routines.
|
* Basic numeric routines.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern COMPLEX *cadd(COMPLEX *c1, COMPLEX *c2);
|
extern COMPLEX *cadd(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *csub(COMPLEX *c1, COMPLEX *c2);
|
extern COMPLEX *csub(COMPLEX *c1, COMPLEX *c2);
|
||||||
extern COMPLEX *cmul(COMPLEX *c1, COMPLEX *c2);
|
extern COMPLEX *cmul(COMPLEX *c1, COMPLEX *c2);
|
||||||
@@ -70,8 +75,8 @@ extern COMPLEX *cscale(COMPLEX *c, long i);
|
|||||||
extern COMPLEX *cshift(COMPLEX *c, long i);
|
extern COMPLEX *cshift(COMPLEX *c, long i);
|
||||||
extern COMPLEX *csquare(COMPLEX *c);
|
extern COMPLEX *csquare(COMPLEX *c);
|
||||||
extern COMPLEX *cconj(COMPLEX *c);
|
extern COMPLEX *cconj(COMPLEX *c);
|
||||||
extern COMPLEX *creal(COMPLEX *c);
|
extern COMPLEX *c_real(COMPLEX *c);
|
||||||
extern COMPLEX *cimag(COMPLEX *c);
|
extern COMPLEX *c_imag(COMPLEX *c);
|
||||||
extern COMPLEX *cneg(COMPLEX *c);
|
extern COMPLEX *cneg(COMPLEX *c);
|
||||||
extern COMPLEX *cinv(COMPLEX *c);
|
extern COMPLEX *cinv(COMPLEX *c);
|
||||||
extern COMPLEX *cint(COMPLEX *c);
|
extern COMPLEX *cint(COMPLEX *c);
|
||||||
|
38
codegen.c
38
codegen.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* codegen - module to generate opcodes from the input tokens
|
* codegen - module to generate opcodes from the input tokens
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell and Ernest Bowen
|
* Copyright (C) 1999-2004 David I. Bell and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.3 $
|
* @(#) $Revision: 29.9 $
|
||||||
* @(#) $Id: codegen.c,v 29.3 2000/07/17 15:35:49 chongo Exp $
|
* @(#) $Id: codegen.c,v 29.9 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:13
|
* Under source code control: 1990/02/15 01:48:13
|
||||||
@@ -45,6 +45,10 @@
|
|||||||
#include "func.h"
|
#include "func.h"
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
|
# include <direct.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
static BOOL rdonce; /* TRUE => do not reread this file */
|
static BOOL rdonce; /* TRUE => do not reread this file */
|
||||||
|
|
||||||
FUNC *curfunc;
|
FUNC *curfunc;
|
||||||
@@ -123,6 +127,7 @@ getcommands(BOOL toplevel)
|
|||||||
if (!toplevel)
|
if (!toplevel)
|
||||||
enterfilescope();
|
enterfilescope();
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
int i;
|
||||||
(void) tokenmode(TM_NEWLINES);
|
(void) tokenmode(TM_NEWLINES);
|
||||||
switch (gettoken()) {
|
switch (gettoken()) {
|
||||||
|
|
||||||
@@ -140,10 +145,14 @@ getcommands(BOOL toplevel)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case T_HELP:
|
case T_HELP:
|
||||||
for (;;) {
|
for (i=1;;i++) {
|
||||||
switch(getfilename(name, NULL)) {
|
switch(getfilename(name, NULL)) {
|
||||||
case 1:
|
case -1:
|
||||||
strcpy(name, DEFAULTCALCHELP);
|
if(i == 1) {
|
||||||
|
strcpy(name, DEFAULTCALCHELP);
|
||||||
|
givehelp(name);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
givehelp(name);
|
givehelp(name);
|
||||||
continue;
|
continue;
|
||||||
@@ -518,9 +527,10 @@ getsimpledeclaration(int symtype)
|
|||||||
switch (gettoken()) {
|
switch (gettoken()) {
|
||||||
case T_SYMBOL:
|
case T_SYMBOL:
|
||||||
rescantoken();
|
rescantoken();
|
||||||
res = getonevariable(symtype);
|
if (getonevariable(symtype)) {
|
||||||
if (res)
|
res = 1;
|
||||||
addop(OP_POP);
|
addop(OP_POP);
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
case T_COMMA:
|
case T_COMMA:
|
||||||
continue;
|
continue;
|
||||||
@@ -1739,6 +1749,8 @@ getrelation(void)
|
|||||||
rescantoken();
|
rescantoken();
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
if (islvalue(type))
|
||||||
|
addop(OP_GETVALUE);
|
||||||
(void) getsum();
|
(void) getsum();
|
||||||
addop(op);
|
addop(op);
|
||||||
return EXPR_RVALUE;
|
return EXPR_RVALUE;
|
||||||
@@ -1778,6 +1790,8 @@ getsum(void)
|
|||||||
rescantoken();
|
rescantoken();
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
if (islvalue(type))
|
||||||
|
addop(OP_GETVALUE);
|
||||||
(void) getproduct();
|
(void) getproduct();
|
||||||
addop(op);
|
addop(op);
|
||||||
type = EXPR_RVALUE;
|
type = EXPR_RVALUE;
|
||||||
@@ -1807,6 +1821,8 @@ getproduct(void)
|
|||||||
rescantoken();
|
rescantoken();
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
if (islvalue(type))
|
||||||
|
addop(OP_GETVALUE);
|
||||||
(void) getorexpr();
|
(void) getorexpr();
|
||||||
addop(op);
|
addop(op);
|
||||||
type = EXPR_RVALUE;
|
type = EXPR_RVALUE;
|
||||||
@@ -1826,6 +1842,8 @@ getorexpr(void)
|
|||||||
|
|
||||||
type = getandexpr();
|
type = getandexpr();
|
||||||
while (gettoken() == T_OR) {
|
while (gettoken() == T_OR) {
|
||||||
|
if (islvalue(type))
|
||||||
|
addop(OP_GETVALUE);
|
||||||
(void) getandexpr();
|
(void) getandexpr();
|
||||||
addop(OP_OR);
|
addop(OP_OR);
|
||||||
type = EXPR_RVALUE;
|
type = EXPR_RVALUE;
|
||||||
@@ -1857,6 +1875,8 @@ getandexpr(void)
|
|||||||
rescantoken();
|
rescantoken();
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
if (islvalue(type))
|
||||||
|
addop(OP_GETVALUE);
|
||||||
(void) getshiftexpr();
|
(void) getshiftexpr();
|
||||||
addop(op);
|
addop(op);
|
||||||
type = EXPR_RVALUE;
|
type = EXPR_RVALUE;
|
||||||
@@ -1909,6 +1929,8 @@ getshiftexpr(void)
|
|||||||
rescantoken();
|
rescantoken();
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
if (islvalue(type))
|
||||||
|
addop(OP_GETVALUE);
|
||||||
(void) getshiftexpr();
|
(void) getshiftexpr();
|
||||||
addop(op);
|
addop(op);
|
||||||
return EXPR_RVALUE;
|
return EXPR_RVALUE;
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: commath.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: commath.c,v 29.3 2002/03/12 09:38:26 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/commath.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/commath.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:10
|
* Under source code control: 1990/02/15 01:48:10
|
||||||
@@ -381,7 +381,7 @@ cconj(COMPLEX *c)
|
|||||||
* Return the real part of a complex number.
|
* Return the real part of a complex number.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
creal(COMPLEX *c)
|
c_real(COMPLEX *c)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
@@ -400,7 +400,7 @@ creal(COMPLEX *c)
|
|||||||
* Return the imaginary part of a complex number as a real.
|
* Return the imaginary part of a complex number as a real.
|
||||||
*/
|
*/
|
||||||
COMPLEX *
|
COMPLEX *
|
||||||
cimag(COMPLEX *c)
|
c_imag(COMPLEX *c)
|
||||||
{
|
{
|
||||||
COMPLEX *r;
|
COMPLEX *r;
|
||||||
|
|
||||||
|
182
config.c
182
config.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* config - configuration routines
|
* config - configuration routines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell and Landon Curt Noll
|
* Copyright (C) 1999-2004 David I. Bell and Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 29.14 $
|
||||||
* @(#) $Id: config.c,v 29.4 2000/07/17 15:35:49 chongo Exp $
|
* @(#) $Id: config.c,v 29.14 2004/02/25 23:56:13 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/07/20 00:21:56
|
* Under source code control: 1991/07/20 00:21:56
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
#include "nametype.h"
|
#include "nametype.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
#include "custom.h"
|
||||||
|
|
||||||
#include "have_strdup.h"
|
#include "have_strdup.h"
|
||||||
#if !defined(HAVE_STRDUP)
|
#if !defined(HAVE_STRDUP)
|
||||||
@@ -51,6 +52,7 @@
|
|||||||
NAMETYPE configs[] = {
|
NAMETYPE configs[] = {
|
||||||
{"all", CONFIG_ALL},
|
{"all", CONFIG_ALL},
|
||||||
{"mode", CONFIG_MODE},
|
{"mode", CONFIG_MODE},
|
||||||
|
{"mode2", CONFIG_MODE2},
|
||||||
{"display", CONFIG_DISPLAY},
|
{"display", CONFIG_DISPLAY},
|
||||||
{"epsilon", CONFIG_EPSILON},
|
{"epsilon", CONFIG_EPSILON},
|
||||||
/*epsilonprec -- tied to epsilon not a configuration type*/
|
/*epsilonprec -- tied to epsilon not a configuration type*/
|
||||||
@@ -90,6 +92,10 @@ NAMETYPE configs[] = {
|
|||||||
{"ctrl-d", CONFIG_CTRL_D}, /* alias for ctrl_d */
|
{"ctrl-d", CONFIG_CTRL_D}, /* alias for ctrl_d */
|
||||||
{"program", CONFIG_PROGRAM},
|
{"program", CONFIG_PROGRAM},
|
||||||
{"basename", CONFIG_BASENAME},
|
{"basename", CONFIG_BASENAME},
|
||||||
|
{"windows", CONFIG_WINDOWS},
|
||||||
|
{"cygwin", CONFIG_CYGWIN},
|
||||||
|
{"compile_custom", CONFIG_COMPILE_CUSTOM},
|
||||||
|
{"allow_custom", CONFIG_ALLOW_CUSTOM},
|
||||||
{"version", CONFIG_VERSION},
|
{"version", CONFIG_VERSION},
|
||||||
{NULL, 0}
|
{NULL, 0}
|
||||||
};
|
};
|
||||||
@@ -100,6 +106,7 @@ NAMETYPE configs[] = {
|
|||||||
*/
|
*/
|
||||||
CONFIG oldstd = { /* backward compatible standard configuration */
|
CONFIG oldstd = { /* backward compatible standard configuration */
|
||||||
MODE_INITIAL, /* current output mode */
|
MODE_INITIAL, /* current output mode */
|
||||||
|
MODE2_INITIAL, /* current secondary output mode */
|
||||||
20, /* current output digits for float or exp */
|
20, /* current output digits for float or exp */
|
||||||
NULL, /* loaded in at startup - default error for real functions */
|
NULL, /* loaded in at startup - default error for real functions */
|
||||||
EPSILONPREC_DEFAULT, /* binary precision of epsilon */
|
EPSILONPREC_DEFAULT, /* binary precision of epsilon */
|
||||||
@@ -132,17 +139,34 @@ CONFIG oldstd = { /* backward compatible standard configuration */
|
|||||||
0, /* internal calc debug level */
|
0, /* internal calc debug level */
|
||||||
3, /* calc resource file debug level */
|
3, /* calc resource file debug level */
|
||||||
0, /* user defined debug level */
|
0, /* user defined debug level */
|
||||||
TRUE, /* print Quit or abort executed messages */
|
FALSE, /* print Quit or abort executed messages */
|
||||||
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
||||||
NULL, /* our name */
|
NULL, /* our name */
|
||||||
NULL, /* basename of our name */
|
NULL, /* basename of our name */
|
||||||
|
#if defined(_WIN32)
|
||||||
|
TRUE, /* running under windows */
|
||||||
|
#else
|
||||||
|
FALSE, /* congrats, you are not using windows */
|
||||||
|
#endif
|
||||||
|
#if defined(__CYGWIN__)
|
||||||
|
TRUE, /* compiled under cygwin */
|
||||||
|
#else
|
||||||
|
FALSE, /* not compiled with cygwin */
|
||||||
|
#endif
|
||||||
|
#if defined(CUSTOM)
|
||||||
|
TRUE, /* compiled with -DCUSTOM */
|
||||||
|
#else
|
||||||
|
FALSE, /* compiled without -DCUSTOM */
|
||||||
|
#endif
|
||||||
|
&allow_custom, /* *TRUE=> custom functions are enabled */
|
||||||
NULL /* version */
|
NULL /* version */
|
||||||
};
|
};
|
||||||
CONFIG newstd = { /* new non-backward compatible configuration */
|
CONFIG newstd = { /* new non-backward compatible configuration */
|
||||||
MODE_INITIAL, /* current output mode */
|
MODE_INITIAL, /* current output mode */
|
||||||
10, /* current output digits for float or exp */
|
MODE2_INITIAL, /* current output mode */
|
||||||
|
20, /* current output digits for float or exp */
|
||||||
NULL, /* loaded in at startup - default error for real functions */
|
NULL, /* loaded in at startup - default error for real functions */
|
||||||
NEW_EPSILONPREC_DEFAULT, /* binary precision of epsilon */
|
EPSILONPREC_DEFAULT, /* binary precision of epsilon */
|
||||||
FALSE, /* tracing flags */
|
FALSE, /* tracing flags */
|
||||||
MAXPRINT_DEFAULT, /* number of elements to print */
|
MAXPRINT_DEFAULT, /* number of elements to print */
|
||||||
MUL_ALG2, /* size of number to use multiply alg 2 */
|
MUL_ALG2, /* size of number to use multiply alg 2 */
|
||||||
@@ -152,7 +176,7 @@ CONFIG newstd = { /* new non-backward compatible configuration */
|
|||||||
TRUE, /* ok to print a tilde on approximations */
|
TRUE, /* ok to print a tilde on approximations */
|
||||||
TRUE, /* ok to print tab before numeric values */
|
TRUE, /* ok to print tab before numeric values */
|
||||||
0, /* quomod() default rounding mode */
|
0, /* quomod() default rounding mode */
|
||||||
0, /* quotient // default rounding mode */
|
2, /* quotient // default rounding mode */
|
||||||
0, /* mod % default rounding mode */
|
0, /* mod % default rounding mode */
|
||||||
24, /* sqrt() default rounding mode */
|
24, /* sqrt() default rounding mode */
|
||||||
24, /* appr() default rounding mode */
|
24, /* appr() default rounding mode */
|
||||||
@@ -161,7 +185,7 @@ CONFIG newstd = { /* new non-backward compatible configuration */
|
|||||||
24, /* output default rounding mode */
|
24, /* output default rounding mode */
|
||||||
24, /* round()/bround() default rounding mode */
|
24, /* round()/bround() default rounding mode */
|
||||||
TRUE, /* ok to print leading 0 before decimal pt */
|
TRUE, /* ok to print leading 0 before decimal pt */
|
||||||
1, /* ok to print trailing 0's */
|
0, /* ok to print trailing 0's */
|
||||||
MAXSCANCOUNT, /* max scan errors before abort */
|
MAXSCANCOUNT, /* max scan errors before abort */
|
||||||
"; ", /* normal prompt */
|
"; ", /* normal prompt */
|
||||||
";; ", /* prompt when inside multi-line input */
|
";; ", /* prompt when inside multi-line input */
|
||||||
@@ -172,10 +196,26 @@ CONFIG newstd = { /* new non-backward compatible configuration */
|
|||||||
0, /* internal calc debug level */
|
0, /* internal calc debug level */
|
||||||
3, /* calc resource file debug level */
|
3, /* calc resource file debug level */
|
||||||
0, /* user defined debug level */
|
0, /* user defined debug level */
|
||||||
TRUE, /* print Quit or abort executed messages */
|
FALSE, /* print Quit or abort executed messages */
|
||||||
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
||||||
NULL, /* our name */
|
NULL, /* our name */
|
||||||
NULL, /* basename of our name */
|
NULL, /* basename of our name */
|
||||||
|
#if defined(_WIN32)
|
||||||
|
TRUE, /* running under windows */
|
||||||
|
#else
|
||||||
|
FALSE, /* congrats, you are not using windows */
|
||||||
|
#endif
|
||||||
|
#if defined(__CYGWIN__)
|
||||||
|
TRUE, /* compiled under cygwin */
|
||||||
|
#else
|
||||||
|
FALSE, /* not compiled with cygwin */
|
||||||
|
#endif
|
||||||
|
#if defined(CUSTOM)
|
||||||
|
TRUE, /* compiled with -DCUSTOM */
|
||||||
|
#else
|
||||||
|
FALSE, /* compiled without -DCUSTOM */
|
||||||
|
#endif
|
||||||
|
&allow_custom, /* *TRUE=> custom functions are enabled */
|
||||||
NULL /* version */
|
NULL /* version */
|
||||||
};
|
};
|
||||||
CONFIG *conf = NULL; /* loaded in at startup - current configuration */
|
CONFIG *conf = NULL; /* loaded in at startup - current configuration */
|
||||||
@@ -201,6 +241,7 @@ static NAMETYPE modes[] = {
|
|||||||
{"oct", MODE_OCTAL},
|
{"oct", MODE_OCTAL},
|
||||||
{"binary", MODE_BINARY},
|
{"binary", MODE_BINARY},
|
||||||
{"bin", MODE_BINARY},
|
{"bin", MODE_BINARY},
|
||||||
|
{"off", MODE2_OFF},
|
||||||
{NULL, 0}
|
{NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -456,6 +497,19 @@ setconfig(int type, VALUE *vp)
|
|||||||
math_setmode((int) temp);
|
math_setmode((int) temp);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CONFIG_MODE2:
|
||||||
|
if (vp->v_type != V_STR) {
|
||||||
|
math_error("Non-string for mode");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
temp = lookup_long(modes, vp->v_str->s_str);
|
||||||
|
if (temp < 0) {
|
||||||
|
math_error("Unknown mode \"%s\"", vp->v_str);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
math_setmode2((int) temp);
|
||||||
|
break;
|
||||||
|
|
||||||
case CONFIG_EPSILON:
|
case CONFIG_EPSILON:
|
||||||
if (vp->v_type != V_NUM) {
|
if (vp->v_type != V_NUM) {
|
||||||
math_error("Non-numeric for epsilon");
|
math_error("Non-numeric for epsilon");
|
||||||
@@ -822,11 +876,27 @@ setconfig(int type, VALUE *vp)
|
|||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
|
||||||
case CONFIG_BASENAME:
|
case CONFIG_BASENAME:
|
||||||
math_error("The program config parameter is read-only");
|
math_error("The basename config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_WINDOWS:
|
||||||
|
math_error("The windows config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_CYGWIN:
|
||||||
|
math_error("The cygwin config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_COMPILE_CUSTOM:
|
||||||
|
math_error("The custom config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_ALLOW_CUSTOM:
|
||||||
|
math_error("The allow_custom config parameter is read-only");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
|
||||||
case CONFIG_VERSION:
|
case CONFIG_VERSION:
|
||||||
math_error("The program config parameter is read-only");
|
math_error("The version config parameter is read-only");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -889,6 +959,7 @@ config_copy(CONFIG *src)
|
|||||||
} else {
|
} else {
|
||||||
dest->base_name = strdup(src->base_name);
|
dest->base_name = strdup(src->base_name);
|
||||||
}
|
}
|
||||||
|
/* NOTE: allow_custom points to a global variable, so do not clone it */
|
||||||
if (src->version == NULL) {
|
if (src->version == NULL) {
|
||||||
dest->version = strdup(version());
|
dest->version = strdup(version());
|
||||||
} else {
|
} else {
|
||||||
@@ -936,6 +1007,7 @@ config_free(CONFIG *cfg)
|
|||||||
if (cfg->base_name != NULL) {
|
if (cfg->base_name != NULL) {
|
||||||
free(cfg->base_name);
|
free(cfg->base_name);
|
||||||
}
|
}
|
||||||
|
/* NOTE: allow_custom points to a global variable, so do not free it */
|
||||||
if (cfg->version != NULL) {
|
if (cfg->version != NULL) {
|
||||||
free(cfg->version);
|
free(cfg->version);
|
||||||
}
|
}
|
||||||
@@ -1003,6 +1075,16 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
vp->v_str = makenewstring(p);
|
vp->v_str = makenewstring(p);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case CONFIG_MODE2:
|
||||||
|
vp->v_type = V_STR;
|
||||||
|
p = lookup_name(modes, cfg->outmode2);
|
||||||
|
if (p == NULL) {
|
||||||
|
math_error("invalid secondary output mode: %d", cfg->outmode2);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
vp->v_str = makenewstring(p);
|
||||||
|
return;
|
||||||
|
|
||||||
case CONFIG_EPSILON:
|
case CONFIG_EPSILON:
|
||||||
vp->v_num = qlink(cfg->epsilon);
|
vp->v_num = qlink(cfg->epsilon);
|
||||||
return;
|
return;
|
||||||
@@ -1028,20 +1110,18 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_TILDE:
|
case CONFIG_TILDE:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->tilde_ok) {
|
if (cfg->tilde_ok) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case CONFIG_TAB:
|
case CONFIG_TAB:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->tab_ok) {
|
if (cfg->tab_ok) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1082,20 +1162,18 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_LEADZERO:
|
case CONFIG_LEADZERO:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->leadzero) {
|
if (cfg->leadzero) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case CONFIG_FULLZERO:
|
case CONFIG_FULLZERO:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->fullzero) {
|
if (cfg->fullzero) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1118,11 +1196,10 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_BLKVERBOSE:
|
case CONFIG_BLKVERBOSE:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->blkverbose) {
|
if (cfg->blkverbose) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1159,11 +1236,10 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_VERBOSE_QUIT:
|
case CONFIG_VERBOSE_QUIT:
|
||||||
vp->v_type = V_STR;
|
|
||||||
if (cfg->verbose_quit) {
|
if (cfg->verbose_quit) {
|
||||||
vp->v_str = makenewstring(TRUE_STRING);
|
vp->v_num = itoq(1);
|
||||||
} else {
|
} else {
|
||||||
vp->v_str = makenewstring(FALSE_STRING);
|
vp->v_num = itoq(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1195,6 +1271,42 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case CONFIG_WINDOWS:
|
||||||
|
if (cfg->windows) {
|
||||||
|
vp->v_num = itoq(1);
|
||||||
|
} else {
|
||||||
|
vp->v_num = itoq(0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
case CONFIG_CYGWIN:
|
||||||
|
if (cfg->cygwin) {
|
||||||
|
vp->v_num = itoq(1);
|
||||||
|
} else {
|
||||||
|
vp->v_num = itoq(0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
case CONFIG_COMPILE_CUSTOM:
|
||||||
|
if (cfg->compile_custom) {
|
||||||
|
vp->v_num = itoq(1);
|
||||||
|
} else {
|
||||||
|
vp->v_num = itoq(0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
case CONFIG_ALLOW_CUSTOM:
|
||||||
|
/* firewall */
|
||||||
|
if (cfg->allow_custom == NULL) {
|
||||||
|
cfg->allow_custom = &allow_custom;
|
||||||
|
}
|
||||||
|
if (*(cfg->allow_custom)) {
|
||||||
|
vp->v_num = itoq(1);
|
||||||
|
} else {
|
||||||
|
vp->v_num = itoq(0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
case CONFIG_VERSION:
|
case CONFIG_VERSION:
|
||||||
vp->v_type = V_STR;
|
vp->v_type = V_STR;
|
||||||
if (cfg->version == NULL) {
|
if (cfg->version == NULL) {
|
||||||
@@ -1250,6 +1362,7 @@ config_cmp(CONFIG *cfg1, CONFIG *cfg2)
|
|||||||
return cfg1->traceflags != cfg2->traceflags ||
|
return cfg1->traceflags != cfg2->traceflags ||
|
||||||
cfg1->outdigits != cfg2->outdigits ||
|
cfg1->outdigits != cfg2->outdigits ||
|
||||||
cfg1->outmode != cfg2->outmode ||
|
cfg1->outmode != cfg2->outmode ||
|
||||||
|
cfg1->outmode2 != cfg2->outmode2 ||
|
||||||
qcmp(cfg1->epsilon, cfg2->epsilon) ||
|
qcmp(cfg1->epsilon, cfg2->epsilon) ||
|
||||||
cfg1->epsilonprec != cfg2->epsilonprec ||
|
cfg1->epsilonprec != cfg2->epsilonprec ||
|
||||||
cfg1->maxprint != cfg2->maxprint ||
|
cfg1->maxprint != cfg2->maxprint ||
|
||||||
@@ -1293,6 +1406,17 @@ config_cmp(CONFIG *cfg1, CONFIG *cfg2)
|
|||||||
(cfg1->base_name != NULL && cfg2->base_name != NULL &&
|
(cfg1->base_name != NULL && cfg2->base_name != NULL &&
|
||||||
strcmp(cfg1->base_name, cfg2->base_name) != 0) ||
|
strcmp(cfg1->base_name, cfg2->base_name) != 0) ||
|
||||||
|
|
||||||
|
cfg1->windows != cfg2->windows ||
|
||||||
|
|
||||||
|
cfg1->cygwin != cfg2->cygwin ||
|
||||||
|
|
||||||
|
cfg1->compile_custom != cfg2->compile_custom ||
|
||||||
|
|
||||||
|
(cfg1->allow_custom == NULL && cfg2->allow_custom != NULL) ||
|
||||||
|
(cfg1->allow_custom != NULL && cfg2->allow_custom == NULL) ||
|
||||||
|
(cfg1->allow_custom != NULL && cfg2->allow_custom != NULL &&
|
||||||
|
*(cfg1->allow_custom) != *(cfg2->allow_custom)) ||
|
||||||
|
|
||||||
(cfg1->version == NULL && cfg2->version != NULL) ||
|
(cfg1->version == NULL && cfg2->version != NULL) ||
|
||||||
(cfg1->version != NULL && cfg2->version == NULL) ||
|
(cfg1->version != NULL && cfg2->version == NULL) ||
|
||||||
(cfg1->version != NULL && cfg2->version != NULL &&
|
(cfg1->version != NULL && cfg2->version != NULL &&
|
||||||
|
71
config.h
71
config.h
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* config - configuration routines
|
* config - configuration routines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll and David I. Bell
|
* Copyright (C) 1999-2004 Landon Curt Noll and David I. Bell
|
||||||
*
|
*
|
||||||
* Primary author: Landon Curt Noll
|
* Primary author: Landon Curt Noll
|
||||||
*
|
*
|
||||||
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 29.17 $
|
||||||
* @(#) $Id: config.h,v 29.4 2000/07/17 15:35:49 chongo Exp $
|
* @(#) $Id: config.h,v 29.17 2004/02/25 23:56:13 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/11/01 22:20:17
|
* Under source code control: 1995/11/01 22:20:17
|
||||||
@@ -35,8 +35,15 @@
|
|||||||
#define __CONFIG_H__
|
#define __CONFIG_H__
|
||||||
|
|
||||||
|
|
||||||
#include "nametype.h"
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
#include "qmath.h"
|
# include "win32dll.h"
|
||||||
|
# include "nametype.h"
|
||||||
|
# include "qmath.h"
|
||||||
|
#else
|
||||||
|
# include <calc/win32dll.h>
|
||||||
|
# include <calc/nametype.h>
|
||||||
|
# include <calc/qmath.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -71,17 +78,22 @@
|
|||||||
#define CONFIG_MORE 25
|
#define CONFIG_MORE 25
|
||||||
#define CONFIG_BLKMAXPRINT 26
|
#define CONFIG_BLKMAXPRINT 26
|
||||||
#define CONFIG_BLKVERBOSE 27
|
#define CONFIG_BLKVERBOSE 27
|
||||||
#define CONFIG_BLKBASE 28
|
#define CONFIG_BLKBASE 28
|
||||||
#define CONFIG_BLKFMT 29
|
#define CONFIG_BLKFMT 29
|
||||||
#define CONFIG_RESOURCE_DEBUG 30
|
#define CONFIG_RESOURCE_DEBUG 30
|
||||||
#define CONFIG_LIB_DEBUG CONFIG_RESOURCE_DEBUG
|
#define CONFIG_LIB_DEBUG CONFIG_RESOURCE_DEBUG
|
||||||
#define CONFIG_CALC_DEBUG 31
|
#define CONFIG_CALC_DEBUG 31
|
||||||
#define CONFIG_USER_DEBUG 32
|
#define CONFIG_USER_DEBUG 32
|
||||||
#define CONFIG_VERBOSE_QUIT 33
|
#define CONFIG_VERBOSE_QUIT 33
|
||||||
#define CONFIG_CTRL_D 34
|
#define CONFIG_CTRL_D 34
|
||||||
#define CONFIG_PROGRAM 35
|
#define CONFIG_PROGRAM 35
|
||||||
#define CONFIG_BASENAME 36
|
#define CONFIG_BASENAME 36
|
||||||
#define CONFIG_VERSION 37
|
#define CONFIG_VERSION 37
|
||||||
|
#define CONFIG_WINDOWS 38
|
||||||
|
#define CONFIG_MODE2 39
|
||||||
|
#define CONFIG_CYGWIN 40
|
||||||
|
#define CONFIG_COMPILE_CUSTOM 41
|
||||||
|
#define CONFIG_ALLOW_CUSTOM 42
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -90,8 +102,6 @@
|
|||||||
#define DISPLAY_DEFAULT 20 /* default digits for float display */
|
#define DISPLAY_DEFAULT 20 /* default digits for float display */
|
||||||
#define EPSILON_DEFAULT "1e-20" /* allowed error for float calculations */
|
#define EPSILON_DEFAULT "1e-20" /* allowed error for float calculations */
|
||||||
#define EPSILONPREC_DEFAULT 67 /* 67 ==> 2^-67 <= EPSILON_DEFAULT < 2^-66 */
|
#define EPSILONPREC_DEFAULT 67 /* 67 ==> 2^-67 <= EPSILON_DEFAULT < 2^-66 */
|
||||||
#define NEW_EPSILON_DEFAULT "1e-10" /* newstd EPSILON_DEFAULT */
|
|
||||||
#define NEW_EPSILONPREC_DEFAULT 34 /* 34 ==> 2^-34 <= 1e-10 < 2^-33 */
|
|
||||||
#define MAXPRINT_DEFAULT 16 /* default number of elements printed */
|
#define MAXPRINT_DEFAULT 16 /* default number of elements printed */
|
||||||
#define MAXSCANCOUNT 20 /* default max scan errors before an abort */
|
#define MAXSCANCOUNT 20 /* default max scan errors before an abort */
|
||||||
|
|
||||||
@@ -110,6 +120,7 @@
|
|||||||
*/
|
*/
|
||||||
struct config {
|
struct config {
|
||||||
int outmode; /* current output mode */
|
int outmode; /* current output mode */
|
||||||
|
int outmode2; /* current secondary output mode */
|
||||||
LEN outdigits; /* current output digits for float or exp */
|
LEN outdigits; /* current output digits for float or exp */
|
||||||
NUMBER *epsilon; /* default error for real functions */
|
NUMBER *epsilon; /* default error for real functions */
|
||||||
long epsilonprec; /* epsilon binary precision (tied to epsilon) */
|
long epsilonprec; /* epsilon binary precision (tied to epsilon) */
|
||||||
@@ -146,6 +157,10 @@ struct config {
|
|||||||
int ctrl_d; /* see CTRL_D_xyz below */
|
int ctrl_d; /* see CTRL_D_xyz below */
|
||||||
char *program; /* our name */
|
char *program; /* our name */
|
||||||
char *base_name; /* basename of our name */
|
char *base_name; /* basename of our name */
|
||||||
|
BOOL windows; /* TRUE => running under MS windows */
|
||||||
|
BOOL cygwin; /* TRUE => compiled with cygwin */
|
||||||
|
BOOL compile_custom; /* TRUE => compiled with -DCUSTOM */
|
||||||
|
BOOL *allow_custom; /* ptr to if custom functions are allowed */
|
||||||
char *version; /* calc version string */
|
char *version; /* calc version string */
|
||||||
};
|
};
|
||||||
typedef struct config CONFIG;
|
typedef struct config CONFIG;
|
||||||
@@ -157,7 +172,8 @@ typedef struct config CONFIG;
|
|||||||
#define RSCDBG_STDIN_FUNC (0x00000001) /* interactive func define debug */
|
#define RSCDBG_STDIN_FUNC (0x00000001) /* interactive func define debug */
|
||||||
#define RSCDBG_FILE_FUNC (0x00000002) /* file read func define debug */
|
#define RSCDBG_FILE_FUNC (0x00000002) /* file read func define debug */
|
||||||
#define RSCDBG_FUNC_INFO (0x00000004) /* print extra info for show func */
|
#define RSCDBG_FUNC_INFO (0x00000004) /* print extra info for show func */
|
||||||
#define RSCDBG_MASK (0x00000007)
|
#define RSCDBG_PRINT_DBG (0x00000008) /* print debug messages */
|
||||||
|
#define RSCDBG_MASK (0x0000000f)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -169,7 +185,8 @@ typedef struct config CONFIG;
|
|||||||
#define CALCDBG_BLOCK (0x00000008) /* block debug */
|
#define CALCDBG_BLOCK (0x00000008) /* block debug */
|
||||||
#define CALCDBG_TTY (0x00000010) /* report TTY state changes */
|
#define CALCDBG_TTY (0x00000010) /* report TTY state changes */
|
||||||
#define CALCDBG_RUNSTATE (0x00000020) /* report run_state changes */
|
#define CALCDBG_RUNSTATE (0x00000020) /* report run_state changes */
|
||||||
#define CALCDBG_MASK (0x0000003f)
|
#define CALCDBG_RAND (0x00000040) /* report rand() activity */
|
||||||
|
#define CALCDBG_MASK (0x0000007f)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ctrl-d meanings
|
* ctrl-d meanings
|
||||||
@@ -182,23 +199,23 @@ typedef struct config CONFIG;
|
|||||||
/*
|
/*
|
||||||
* global configuration states and aliases
|
* global configuration states and aliases
|
||||||
*/
|
*/
|
||||||
extern CONFIG *conf; /* current configuration */
|
extern DLL CONFIG *conf; /* current configuration */
|
||||||
extern CONFIG oldstd; /* backward compatible standard configuration */
|
extern DLL CONFIG oldstd; /* old classic standard configuration */
|
||||||
extern CONFIG newstd; /* new non-backward compatible configuration */
|
extern DLL CONFIG newstd; /* default compatible configuration */
|
||||||
extern char *calc_debug; /* !=NULL => value of config("calc_debug") */
|
extern DLL char *calc_debug; /* !=NULL => value of config("calc_debug") */
|
||||||
extern char *resource_debug; /* !=NULL => config("resource_debug") value */
|
extern DLL char *resource_debug; /* !=NULL => config("resource_debug") value */
|
||||||
extern char *user_debug; /* !=NULL => value of config("user_debug") */
|
extern DLL char *user_debug; /* !=NULL => value of config("user_debug") */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* configuration externals
|
* configuration externals
|
||||||
*/
|
*/
|
||||||
extern CONFIG *config_copy(CONFIG *src);
|
extern DLL CONFIG *config_copy(CONFIG *src);
|
||||||
extern void config_free(CONFIG *cfg);
|
extern DLL void config_free(CONFIG *cfg);
|
||||||
extern void config_print(CONFIG *cfg);
|
extern DLL void config_print(CONFIG *cfg);
|
||||||
extern int configtype(char*);
|
extern DLL int configtype(char*);
|
||||||
extern void config_print(CONFIG*);
|
extern DLL void config_print(CONFIG*);
|
||||||
extern BOOL config_cmp(CONFIG*, CONFIG*);
|
extern DLL BOOL config_cmp(CONFIG*, CONFIG*);
|
||||||
|
|
||||||
|
|
||||||
#endif /* !__CONFIG_H__ */
|
#endif /* !__CONFIG_H__ */
|
||||||
|
12
const.c
12
const.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* const - constant number storage module
|
* const - constant number storage module
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell
|
* Copyright (C) 1999-2004 David I. Bell
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: const.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: const.c,v 29.4 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/const.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/const.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:14
|
* Under source code control: 1990/02/15 01:48:14
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
#define CONSTALLOCSIZE 400 /* number of constants to allocate */
|
#define CONSTALLOCSIZE 400 /* number of constants to allocate */
|
||||||
|
|
||||||
static long constcount; /* number of constants defined */
|
static unsigned long constcount;/* number of constants defined */
|
||||||
static long constavail; /* number of constants available */
|
static long constavail; /* number of constants available */
|
||||||
static NUMBER **consttable; /* table of constants */
|
static NUMBER **consttable; /* table of constants */
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ addqconstant(NUMBER *q)
|
|||||||
{
|
{
|
||||||
register NUMBER **tp; /* pointer to current number */
|
register NUMBER **tp; /* pointer to current number */
|
||||||
register NUMBER *t; /* number being tested */
|
register NUMBER *t; /* number being tested */
|
||||||
long index; /* index into constant table */
|
unsigned long index; /* index into constant table */
|
||||||
long numlen; /* numerator length */
|
long numlen; /* numerator length */
|
||||||
long denlen; /* denominator length */
|
long denlen; /* denominator length */
|
||||||
HALF numlow; /* bottom value of numerator */
|
HALF numlow; /* bottom value of numerator */
|
||||||
@@ -221,7 +221,7 @@ trimconstants(void)
|
|||||||
void
|
void
|
||||||
showconstants(void)
|
showconstants(void)
|
||||||
{
|
{
|
||||||
long index;
|
unsigned long index;
|
||||||
NUMBER **qp;
|
NUMBER **qp;
|
||||||
long count;
|
long count;
|
||||||
|
|
||||||
|
320
cscript/4dsphere.calc
Normal file
320
cscript/4dsphere.calc
Normal file
@@ -0,0 +1,320 @@
|
|||||||
|
#!/usr/local/src/cmd/calc/calc -q -s -f
|
||||||
|
/*
|
||||||
|
* 4dsphere - determine if 6 points lie on the surface of a sphere in R^4
|
||||||
|
*
|
||||||
|
* usage:
|
||||||
|
* 4dsphere x0 y0 z0 w0 x1 y1 z1 w1 ... x5 y5 z5 w5
|
||||||
|
*
|
||||||
|
* x0 y0 z0 w0 point 0 in R^4
|
||||||
|
* x1 y1 z1 w1 point 1 in R^4
|
||||||
|
* ... ...
|
||||||
|
* x5 y5 z5 w5 point 5 in R^4
|
||||||
|
*
|
||||||
|
* Copyright (C) 2001 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 1.3 $
|
||||||
|
* @(#) $Id: 4dsphere.calc,v 1.3 2001/06/06 09:06:29 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/4dsphere.calc,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2001/05/03 19:02:03
|
||||||
|
* File existed as early as: 2001
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* parse args
|
||||||
|
*/
|
||||||
|
argc = argv();
|
||||||
|
if (argc != 25) {
|
||||||
|
fprintf(files(2), "usage: %s x0 y0 z0 w0 x1 y1 z1 w1 ... x5 y5 z5 w5\n",
|
||||||
|
argv(0));
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
x0 = eval(argv(1));
|
||||||
|
y0 = eval(argv(2));
|
||||||
|
z0 = eval(argv(3));
|
||||||
|
w0 = eval(argv(4));
|
||||||
|
x1 = eval(argv(5));
|
||||||
|
y1 = eval(argv(6));
|
||||||
|
z1 = eval(argv(7));
|
||||||
|
w1 = eval(argv(8));
|
||||||
|
x2 = eval(argv(9));
|
||||||
|
y2 = eval(argv(10));
|
||||||
|
z2 = eval(argv(11));
|
||||||
|
w2 = eval(argv(12));
|
||||||
|
x3 = eval(argv(13));
|
||||||
|
y3 = eval(argv(14));
|
||||||
|
z3 = eval(argv(15));
|
||||||
|
w3 = eval(argv(16));
|
||||||
|
x4 = eval(argv(17));
|
||||||
|
y4 = eval(argv(18));
|
||||||
|
z4 = eval(argv(19));
|
||||||
|
w4 = eval(argv(20));
|
||||||
|
x5 = eval(argv(21));
|
||||||
|
y5 = eval(argv(22));
|
||||||
|
z5 = eval(argv(23));
|
||||||
|
w5 = eval(argv(24));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* verbose output setup
|
||||||
|
*/
|
||||||
|
print "(":x0:",":y0:",":z0:",":w0:") ":;
|
||||||
|
print "(":x1:",":y1:",":z1:",":w1:") ":;
|
||||||
|
print "(":x2:",":y2:",":z2:",":w2:") ":;
|
||||||
|
print "(":x3:",":y3:",":z3:",":w3:") ":;
|
||||||
|
print "(":x4:",":y4:",":z4:",":w4:") ":;
|
||||||
|
print "(":x5:",":y5:",":z5:",":w5:") ":;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Given the 5 points:
|
||||||
|
*
|
||||||
|
* (x0,y1,z1,w1)
|
||||||
|
* (x1,y1,z1,w1)
|
||||||
|
* (x2,y2,z2,w2)
|
||||||
|
* (x3,y3,z3,w3)
|
||||||
|
* (x4,y4,z4,w4)
|
||||||
|
* (x5,y5,z5,w5)
|
||||||
|
*
|
||||||
|
* we can determine if they lie in the surface of 4D sphere in R^4 if the
|
||||||
|
* following matrix is 0:
|
||||||
|
*
|
||||||
|
* | x0^2+y0^2+z0^2+w0^2 x0 y0 z0 w0 1 |
|
||||||
|
* | x1^2+y1^2+z1^2+w1^2 x1 y1 z1 w1 1 |
|
||||||
|
* | x2^2+y2^2+z2^2+w2^2 x2 y2 z2 w2 1 | = 0
|
||||||
|
* | x3^2+y3^2+z3^2+w3^2 x3 y3 z3 w3 1 |
|
||||||
|
* | x4^2+y4^2+z4^2+w4^2 x4 y4 z4 w4 1 |
|
||||||
|
* | x5^2+y5^2+z5^2+w5^2 x5 y5 z5 w5 1 |
|
||||||
|
*/
|
||||||
|
if ((w0*(-x1*(-y2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
+y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+y5*(z4^2+y4^2+x4^2+w4^2) + (y4-y5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z2^2+y2^2+x2^2+w2^2)*(y4*z5+y3*(z4-z5) -y5*z4- (y4-y5)*z3) -
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4)) +y1*(-x2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
+x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (x4-x5)*(z3^2+y3^2+x3^2+w3^2)) -z3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) + (z2^2+y2^2+x2^2+w2^2)*(x4*z5+x3*(z4-z5)
|
||||||
|
-x5*z4- (x4-x5)*z3) - (z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4))
|
||||||
|
-x2*(-y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4))
|
||||||
|
+y2*(-x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4)) -z1*(-x2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (y4-y5)*(z3^2+y3^2+x3^2+w3^2)) +x3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) +y2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+x5*(z4^2+y4^2+x4^2+w4^2) + (x4-x5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-y3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) -
|
||||||
|
(x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2) + (x4*y5+x3*(y4-y5) -x5*y4-
|
||||||
|
(x4-x5)*y3)*(z2^2+y2^2+x2^2+w2^2)) -z2*(-x3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) +y3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) + (x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+ (z1^2+y1^2+x1^2+w1^2)*(x2*(y4*z5+y3*(z4-z5) -y5*z4-
|
||||||
|
(y4-y5)*z3) -x3*(y4*z5-y5*z4) -y2*(x4*z5+x3*(z4-z5) -x5*z4-
|
||||||
|
(x4-x5)*z3) +y3*(x4*z5-x5*z4) - (x4*y5-x5*y4)*z3+
|
||||||
|
(x4*y5+x3*(y4-y5) -x5*y4- (x4-x5)*y3)*z2) +
|
||||||
|
(z2^2+y2^2+x2^2+w2^2)*(x3*(y4*z5-y5*z4) -y3*(x4*z5-x5*z4) +
|
||||||
|
(x4*y5-x5*y4)*z3)) -x0*(-w1*(-y2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
+y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+y5*(z4^2+y4^2+x4^2+w4^2) + (y4-y5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z2^2+y2^2+x2^2+w2^2)*(y4*z5+y3*(z4-z5) -y5*z4- (y4-y5)*z3) -
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4)) -y1*(w2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
-w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (w4-w5)*(z3^2+y3^2+x3^2+w3^2)) +z3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (z2^2+y2^2+x2^2+w2^2)*(-w4*z5-w3*(z4-z5)
|
||||||
|
+w5*z4+ (w4-w5)*z3) - (z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5))
|
||||||
|
-w2*(-y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4))
|
||||||
|
-y2*(w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5)) +z1*(w2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (y4-y5)*(z3^2+y3^2+x3^2+w3^2)) -w3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) -y2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+w5*(z4^2+y4^2+x4^2+w4^2) + (w4-w5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+y3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) -
|
||||||
|
(w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2) + (-w4*y5-w3*(y4-y5) +w5*y4+
|
||||||
|
(w4-w5)*y3)*(z2^2+y2^2+x2^2+w2^2)) +z2*(w3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) -y3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+ (z1^2+y1^2+x1^2+w1^2)*(w2*(y4*z5+y3*(z4-z5) -y5*z4-
|
||||||
|
(y4-y5)*z3) -w3*(y4*z5-y5*z4) +y2*(-w4*z5-w3*(z4-z5)
|
||||||
|
+w5*z4+ (w4-w5)*z3) -y3*(w5*z4-w4*z5) + (w5*y4-w4*y5)*z3-
|
||||||
|
(-w4*y5-w3*(y4-y5) +w5*y4+ (w4-w5)*y3)*z2) +
|
||||||
|
(z2^2+y2^2+x2^2+w2^2)*(w3*(y4*z5-y5*z4) +y3*(w5*z4-w4*z5) -
|
||||||
|
(w5*y4-w4*y5)*z3)) +y0*(-w1*(-x2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
+x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+x5*(z4^2+y4^2+x4^2+w4^2) + (x4-x5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-z3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z2^2+y2^2+x2^2+w2^2)*(x4*z5+x3*(z4-z5) -x5*z4- (x4-x5)*z3) -
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4)) -x1*(w2*(-z4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-z3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +
|
||||||
|
(z4^2+y4^2+x4^2+w4^2)*z5+ (z3^2+y3^2+x3^2+w3^2)*(z4-z5))
|
||||||
|
-w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (w4-w5)*(z3^2+y3^2+x3^2+w3^2)) +z3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (z2^2+y2^2+x2^2+w2^2)*(-w4*z5-w3*(z4-z5)
|
||||||
|
+w5*z4+ (w4-w5)*z3) - (z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5))
|
||||||
|
-w2*(-x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4))
|
||||||
|
-x2*(w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5)) +z1*(w2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (x4-x5)*(z3^2+y3^2+x3^2+w3^2)) -w3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) -x2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+w5*(z4^2+y4^2+x4^2+w4^2) + (w4-w5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+x3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) -
|
||||||
|
(w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2) + (-w4*x5-w3*(x4-x5) +w5*x4+
|
||||||
|
(w4-w5)*x3)*(z2^2+y2^2+x2^2+w2^2)) +z2*(w3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) -x3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2)) +
|
||||||
|
(z1^2+y1^2+x1^2+w1^2)*(w2*(x4*z5+x3*(z4-z5) -x5*z4- (x4-x5)*z3)
|
||||||
|
-w3*(x4*z5-x5*z4) +x2*(-w4*z5-w3*(z4-z5) +w5*z4+ (w4-w5)*z3)
|
||||||
|
-x3*(w5*z4-w4*z5) + (w5*x4-w4*x5)*z3- (-w4*x5-w3*(x4-x5) +w5*x4+
|
||||||
|
(w4-w5)*x3)*z2) + (z2^2+y2^2+x2^2+w2^2)*(w3*(x4*z5-x5*z4)
|
||||||
|
+x3*(w5*z4-w4*z5) - (w5*x4-w4*x5)*z3))
|
||||||
|
-w1*(-x2*(-y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4))
|
||||||
|
+y2*(-x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4)) -z2*(-x3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) +y3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) + (x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+ (z2^2+y2^2+x2^2+w2^2)*(x3*(y4*z5-y5*z4)
|
||||||
|
-y3*(x4*z5-x5*z4) + (x4*y5-x5*y4)*z3))
|
||||||
|
+x1*(-w2*(-y3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(y4*z5-y5*z4))
|
||||||
|
-y2*(w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5)) +z2*(w3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) -y3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+ (z2^2+y2^2+x2^2+w2^2)*(w3*(y4*z5-y5*z4)
|
||||||
|
+y3*(w5*z4-w4*z5) - (w5*y4-w4*y5)*z3))
|
||||||
|
-y1*(-w2*(-x3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+z3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+ (z3^2+y3^2+x3^2+w3^2)*(x4*z5-x5*z4))
|
||||||
|
-x2*(w3*((z4^2+y4^2+x4^2+w4^2)*z5-z4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-z3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(z3^2+y3^2+x3^2+w3^2)*(w5*z4-w4*z5)) +z2*(w3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) -x3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+ (z2^2+y2^2+x2^2+w2^2)*(w3*(x4*z5-x5*z4) +x3*(w5*z4-w4*z5)
|
||||||
|
- (w5*x4-w4*x5)*z3)) -z0*(-w1*(-x2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (y4-y5)*(z3^2+y3^2+x3^2+w3^2)) +x3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) +y2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+x5*(z4^2+y4^2+x4^2+w4^2) + (x4-x5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-y3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) -
|
||||||
|
(x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2) + (x4*y5+x3*(y4-y5) -x5*y4-
|
||||||
|
(x4-x5)*y3)*(z2^2+y2^2+x2^2+w2^2)) -x1*(w2*(-y4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-y3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (y4-y5)*(z3^2+y3^2+x3^2+w3^2)) -w3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) -y2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2)
|
||||||
|
+w5*(z4^2+y4^2+x4^2+w4^2) + (w4-w5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+y3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) -
|
||||||
|
(w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2) + (-w4*y5-w3*(y4-y5) +w5*y4+
|
||||||
|
(w4-w5)*y3)*(z2^2+y2^2+x2^2+w2^2)) -w2*(-x3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) +y3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) + (x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
-x2*(w3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-y3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2)) +y1*(w2*(-x4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-x3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (x4-x5)*(z3^2+y3^2+x3^2+w3^2)) -w3*(x5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-x4*(z5^2+y5^2+x5^2+w5^2)) -x2*(-w4*(z5^2+y5^2+x5^2+w5^2)
|
||||||
|
-w3*(-z5^2+z4^2-y5^2+y4^2-x5^2+x4^2-w5^2+w4^2) +w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
+ (w4-w5)*(z3^2+y3^2+x3^2+w3^2)) +x3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) - (w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2)
|
||||||
|
+ (-w4*x5-w3*(x4-x5) +w5*x4+ (w4-w5)*x3)*(z2^2+y2^2+x2^2+w2^2))
|
||||||
|
+y2*(w3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-x3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2)) + (w3*(x4*y5-x5*y4) +x3*(w5*y4-w4*y5)
|
||||||
|
- (w5*x4-w4*x5)*y3)*(z2^2+y2^2+x2^2+w2^2) + (w2*(x4*y5+x3*(y4-y5)
|
||||||
|
-x5*y4- (x4-x5)*y3) -w3*(x4*y5-x5*y4) +x2*(-w4*y5-w3*(y4-y5)
|
||||||
|
+w5*y4+ (w4-w5)*y3) -x3*(w5*y4-w4*y5) + (w5*x4-w4*x5)*y3-
|
||||||
|
(-w4*x5-w3*(x4-x5) +w5*x4+ (w4-w5)*x3)*y2)*(z1^2+y1^2+x1^2+w1^2))
|
||||||
|
+z1*(-w2*(-x3*(y5*(z4^2+y4^2+x4^2+w4^2) -y4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
+y3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(x4*y5-x5*y4)*(z3^2+y3^2+x3^2+w3^2)) -x2*(w3*(y5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-y4*(z5^2+y5^2+x5^2+w5^2)) -y3*(w5*(z4^2+y4^2+x4^2+w4^2)
|
||||||
|
-w4*(z5^2+y5^2+x5^2+w5^2)) + (w5*y4-w4*y5)*(z3^2+y3^2+x3^2+w3^2))
|
||||||
|
+y2*(w3*(x5*(z4^2+y4^2+x4^2+w4^2) -x4*(z5^2+y5^2+x5^2+w5^2))
|
||||||
|
-x3*(w5*(z4^2+y4^2+x4^2+w4^2) -w4*(z5^2+y5^2+x5^2+w5^2)) +
|
||||||
|
(w5*x4-w4*x5)*(z3^2+y3^2+x3^2+w3^2)) + (w3*(x4*y5-x5*y4)
|
||||||
|
+x3*(w5*y4-w4*y5) - (w5*x4-w4*x5)*y3)*(z2^2+y2^2+x2^2+w2^2)) +
|
||||||
|
(z0^2+y0^2+x0^2+w0^2)*(-w1*(x2*(y4*z5+y3*(z4-z5) -y5*z4- (y4-y5)*z3)
|
||||||
|
-x3*(y4*z5-y5*z4) -y2*(x4*z5+x3*(z4-z5) -x5*z4- (x4-x5)*z3)
|
||||||
|
+y3*(x4*z5-x5*z4) - (x4*y5-x5*y4)*z3+ (x4*y5+x3*(y4-y5) -x5*y4-
|
||||||
|
(x4-x5)*y3)*z2) +x1*(w2*(y4*z5+y3*(z4-z5) -y5*z4- (y4-y5)*z3)
|
||||||
|
-w3*(y4*z5-y5*z4) +y2*(-w4*z5-w3*(z4-z5) +w5*z4+ (w4-w5)*z3)
|
||||||
|
-y3*(w5*z4-w4*z5) + (w5*y4-w4*y5)*z3- (-w4*y5-w3*(y4-y5) +w5*y4+
|
||||||
|
(w4-w5)*y3)*z2) -w2*(x3*(y4*z5-y5*z4) -y3*(x4*z5-x5*z4) +
|
||||||
|
(x4*y5-x5*y4)*z3) +x2*(w3*(y4*z5-y5*z4) +y3*(w5*z4-w4*z5) -
|
||||||
|
(w5*y4-w4*y5)*z3) -y1*(w2*(x4*z5+x3*(z4-z5) -x5*z4- (x4-x5)*z3)
|
||||||
|
-w3*(x4*z5-x5*z4) +x2*(-w4*z5-w3*(z4-z5) +w5*z4+ (w4-w5)*z3)
|
||||||
|
-x3*(w5*z4-w4*z5) + (w5*x4-w4*x5)*z3- (-w4*x5-w3*(x4-x5) +w5*x4+
|
||||||
|
(w4-w5)*x3)*z2) -y2*(w3*(x4*z5-x5*z4) +x3*(w5*z4-w4*z5) -
|
||||||
|
(w5*x4-w4*x5)*z3) + (w3*(x4*y5-x5*y4) +x3*(w5*y4-w4*y5) -
|
||||||
|
(w5*x4-w4*x5)*y3)*z2+ (w2*(x4*y5+x3*(y4-y5) -x5*y4- (x4-x5)*y3)
|
||||||
|
-w3*(x4*y5-x5*y4) +x2*(-w4*y5-w3*(y4-y5) +w5*y4+ (w4-w5)*y3)
|
||||||
|
-x3*(w5*y4-w4*y5) + (w5*x4-w4*x5)*y3- (-w4*x5-w3*(x4-x5) +w5*x4+
|
||||||
|
(w4-w5)*x3)*y2)*z1) - (z1^2+y1^2+x1^2+w1^2)*(-w2*(x3*(y4*z5-y5*z4)
|
||||||
|
-y3*(x4*z5-x5*z4) + (x4*y5-x5*y4)*z3) +x2*(w3*(y4*z5-y5*z4)
|
||||||
|
+y3*(w5*z4-w4*z5) - (w5*y4-w4*y5)*z3) -y2*(w3*(x4*z5-x5*z4)
|
||||||
|
+x3*(w5*z4-w4*z5) - (w5*x4-w4*x5)*z3) + (w3*(x4*y5-x5*y4)
|
||||||
|
+x3*(w5*y4-w4*y5) - (w5*x4-w4*x5)*y3)*z2)) == 0) {
|
||||||
|
print "are in the surface of a 4D sphere";
|
||||||
|
} else {
|
||||||
|
print "are NOT on a 4D sphere surface";
|
||||||
|
}
|
270
cscript/Makefile
270
cscript/Makefile
@@ -17,8 +17,8 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.6 $
|
# @(#) $Revision: 29.23 $
|
||||||
# @(#) $Id: Makefile,v 29.6 2000/12/15 14:56:14 chongo Exp $
|
# @(#) $Id: Makefile,v 29.23 2003/01/14 01:58:18 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/Makefile,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/Makefile,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1999/11/29 11:10:26
|
# Under source code control: 1999/11/29 11:10:26
|
||||||
@@ -36,15 +36,121 @@
|
|||||||
SHELL= /bin/sh
|
SHELL= /bin/sh
|
||||||
MAKE_FILE = Makefile
|
MAKE_FILE = Makefile
|
||||||
|
|
||||||
|
####
|
||||||
# Normally, the upper level makefile will set these values. We provide
|
# Normally, the upper level makefile will set these values. We provide
|
||||||
# a default here just in case you want to build from this directory.
|
# a default here just in case you want to build from this directory.
|
||||||
|
####
|
||||||
|
|
||||||
|
# Where the system include (.h) files are kept
|
||||||
#
|
#
|
||||||
BINDIR= /usr/local/bin
|
# For DJGPP, select:
|
||||||
#BINDIR= /usr/bin
|
|
||||||
#BINDIR= /usr/contrib/bin
|
|
||||||
#
|
#
|
||||||
|
# INCDIR= /dev/env/DJDIR/include
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# INCDIR= /usr/include
|
||||||
|
#
|
||||||
|
|
||||||
|
#INCDIR= /usr/local/include
|
||||||
|
#INCDIR= /dev/env/DJDIR/include
|
||||||
|
INCDIR= /usr/include
|
||||||
|
|
||||||
|
# where to install calc realted things
|
||||||
|
#
|
||||||
|
# ${BINDIR} where to install calc binary files
|
||||||
|
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||||
|
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# For DJGPP, select:
|
||||||
|
#
|
||||||
|
# BINDIR= /dev/env/DJDIR/bin
|
||||||
|
# LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
# CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
#BINDIR= /usr/local/bin
|
||||||
|
#BINDIR= /dev/env/DJDIR/bin
|
||||||
|
BINDIR= /usr/bin
|
||||||
|
|
||||||
|
#LIBDIR= /usr/local/lib
|
||||||
|
#LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
LIBDIR= /usr/lib
|
||||||
|
|
||||||
|
#CALC_SHAREDIR= /usr/local/lib/calc
|
||||||
|
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
CALC_SHAREDIR= /usr/share/calc
|
||||||
|
|
||||||
|
# By default, these values are based CALC_SHAREDIR, INCDIR, BINDIR
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# ${HELPDIR} where the help directory is installed
|
||||||
|
# ${CALC_INCDIR} where the calc include files are installed
|
||||||
|
# ${CUSTOMCALDIR} where custom *.cal files are installed
|
||||||
|
# ${CUSTOMHELPDIR} where custom help files are installed
|
||||||
|
# ${CUSTOMINCPDIR} where custom .h files are installed
|
||||||
|
# ${SCRIPTDIR} where calc shell scripts are installed
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
# CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
# CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
# CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
# CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
|
# SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
#
|
||||||
|
HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
SCRIPTDIR= ${BINDIR}/cscript
|
SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
|
||||||
|
# T - top level directory under which calc will be installed
|
||||||
|
#
|
||||||
|
# The calc install is performed under $T, the calc build is
|
||||||
|
# performed under /. The purpose for $T is to allow someone
|
||||||
|
# to install calc somewhere other than into the system area.
|
||||||
|
#
|
||||||
|
# For example, if:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
# and if:
|
||||||
|
#
|
||||||
|
# T= /var/tmp/testing
|
||||||
|
#
|
||||||
|
# Then the installation locations will be:
|
||||||
|
#
|
||||||
|
# calc binary files: /var/tmp/testing/usr/bin
|
||||||
|
# calc link library: /var/tmp/testing/usr/lib
|
||||||
|
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||||
|
# ... etc ... /var/tmp/testing/...
|
||||||
|
#
|
||||||
|
# If $T is empty, calc is installed under /, which is the same
|
||||||
|
# top of tree for which it was built. If $T is non-empty, then
|
||||||
|
# calc is installed under $T, as if one had to chroot under
|
||||||
|
# $T for calc to operate.
|
||||||
|
#
|
||||||
|
# If in doubt, use T=
|
||||||
|
#
|
||||||
|
T=
|
||||||
|
|
||||||
# Makefile debug
|
# Makefile debug
|
||||||
#
|
#
|
||||||
# Q=@ do not echo internal makefile actions (quiet mode)
|
# Q=@ do not echo internal makefile actions (quiet mode)
|
||||||
@@ -59,6 +165,7 @@ CHMOD= chmod
|
|||||||
SED= sed
|
SED= sed
|
||||||
SORT= sort
|
SORT= sort
|
||||||
FMT= fmt
|
FMT= fmt
|
||||||
|
CMP= cmp
|
||||||
|
|
||||||
# The ${SCRIPT} list is the list of calc shell script files (without the .calc
|
# The ${SCRIPT} list is the list of calc shell script files (without the .calc
|
||||||
# extension) which will be installed.
|
# extension) which will be installed.
|
||||||
@@ -76,9 +183,11 @@ FMT= fmt
|
|||||||
#
|
#
|
||||||
# make detaillist
|
# make detaillist
|
||||||
#
|
#
|
||||||
SCRIPT= mersenne piforever plus simple square
|
SCRIPT= 4dsphere fproduct mersenne piforever plus powerterm \
|
||||||
|
simple square
|
||||||
|
|
||||||
SCRIPT_SRC= mersenne.calc piforever.calc plus.calc simple.calc square.calc
|
SCRIPT_SRC= 4dsphere.calc fproduct.calc mersenne.calc \
|
||||||
|
piforever.calc plus.calc powerterm.calc simple.calc square.calc
|
||||||
|
|
||||||
# These files are found (but not built) in the distribution
|
# These files are found (but not built) in the distribution
|
||||||
#
|
#
|
||||||
@@ -88,9 +197,17 @@ DISTLIST= ${SCRIPT_SRC} ${MAKE_FILE} README
|
|||||||
#
|
#
|
||||||
CALCLIBLIST=
|
CALCLIBLIST=
|
||||||
|
|
||||||
|
# complete list of targets
|
||||||
|
#
|
||||||
|
# NOTE: This list MUST be co-ordinated with the ${CSCRIPT_TARGETS} variable
|
||||||
|
# in the upper level ../Makefile
|
||||||
|
#
|
||||||
|
CSCRIPT_TARGETS= ${SCRIPT}
|
||||||
|
TARGETS= ${CSCRIPT_TARGETS}
|
||||||
|
|
||||||
# The reason for this Makefile
|
# The reason for this Makefile
|
||||||
#
|
#
|
||||||
all: ${SCRIPT} ${SCRIPT_SRC} .all
|
all: ${TARGETS} .all
|
||||||
|
|
||||||
# used by the upper level Makefile to determine if we have done all
|
# used by the upper level Makefile to determine if we have done all
|
||||||
#
|
#
|
||||||
@@ -112,9 +229,11 @@ all: ${SCRIPT} ${SCRIPT_SRC} .all
|
|||||||
##
|
##
|
||||||
|
|
||||||
distlist: ${DISTLIST}
|
distlist: ${DISTLIST}
|
||||||
${Q}for i in ${DISTLIST}; do \
|
${Q}for i in ${DISTLIST} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo cscript/$$i; \
|
echo cscript/$$i; \
|
||||||
done | ${SORT}
|
fi; \
|
||||||
|
done | LANG=C ${SORT}
|
||||||
|
|
||||||
distdir:
|
distdir:
|
||||||
${Q}echo cscript
|
${Q}echo cscript
|
||||||
@@ -125,24 +244,28 @@ calcliblist:
|
|||||||
#
|
#
|
||||||
detaillist:
|
detaillist:
|
||||||
${Q}-(echo "xxxxxxx"; \
|
${Q}-(echo "xxxxxxx"; \
|
||||||
for i in ${SCRIPT}; do \
|
for i in ${SCRIPT} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
if [ ! -f RCS/$$i.calc,v ]; then \
|
if [ ! -f RCS/$$i.calc,v ]; then \
|
||||||
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
||||||
else \
|
else \
|
||||||
echo $$i; \
|
echo $$i; \
|
||||||
fi; \
|
fi; \
|
||||||
done | ${SORT}) | ${FMT} -70 | \
|
fi; \
|
||||||
|
done | LANG=C ${SORT}) | ${FMT} -70 | \
|
||||||
${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \
|
${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \
|
||||||
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
||||||
${Q}echo
|
${Q}echo
|
||||||
${Q}-(echo "xxxxxxxxxxx"; \
|
${Q}-(echo "xxxxxxxxxxx"; \
|
||||||
for i in ${SCRIPT}; do \
|
for i in ${SCRIPT} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
if [ ! -f RCS/$$i.calc,v ]; then \
|
if [ ! -f RCS/$$i.calc,v ]; then \
|
||||||
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
||||||
else \
|
else \
|
||||||
echo $$i.calc; \
|
echo $$i.calc; \
|
||||||
fi; \
|
fi; \
|
||||||
done | ${SORT}) | ${FMT} -70 | \
|
fi; \
|
||||||
|
done | LANG=C ${SORT}) | ${FMT} -70 | \
|
||||||
${SED} -e '1s/xxxxxxxxxxx/SCRIPT_SRC=/' -e '2,$$s/^/ /' \
|
${SED} -e '1s/xxxxxxxxxxx/SCRIPT_SRC=/' -e '2,$$s/^/ /' \
|
||||||
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
||||||
|
|
||||||
@@ -170,11 +293,13 @@ depend:
|
|||||||
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
|
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
|
||||||
makedep.out
|
makedep.out
|
||||||
${Q}echo "" >> makedep.out
|
${Q}echo "" >> makedep.out
|
||||||
${Q}for i in ${SCRIPT}; do \
|
${Q}for i in ${SCRIPT} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo "$$i: $$i.calc"; \
|
echo "$$i: $$i.calc"; \
|
||||||
echo ' rm -f $$@'; \
|
echo ' @rm -f $$@'; \
|
||||||
echo ' $${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \
|
echo ' @$${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \
|
||||||
echo ' $${CHMOD} +x $$@'; \
|
echo ' @$${CHMOD} +x $$@'; \
|
||||||
|
fi; \
|
||||||
done >> makedep.out
|
done >> makedep.out
|
||||||
${Q}echo sample dependency list formed
|
${Q}echo sample dependency list formed
|
||||||
${Q}echo forming new cscript/Makefile
|
${Q}echo forming new cscript/Makefile
|
||||||
@@ -184,7 +309,7 @@ depend:
|
|||||||
${Q}echo "" >> Makefile
|
${Q}echo "" >> Makefile
|
||||||
${Q}${SED} -n '3,$$p' makedep.out >> Makefile
|
${Q}${SED} -n '3,$$p' makedep.out >> Makefile
|
||||||
-${Q}rm -f makedep.out
|
-${Q}rm -f makedep.out
|
||||||
-${Q}if cmp -s Makefile.bak Makefile; then \
|
-${Q}if ${CMP} -s Makefile.bak Makefile; then \
|
||||||
echo 'sample Makefile was already up to date'; \
|
echo 'sample Makefile was already up to date'; \
|
||||||
mv -f Makefile.bak Makefile; \
|
mv -f Makefile.bak Makefile; \
|
||||||
else \
|
else \
|
||||||
@@ -199,53 +324,102 @@ depend:
|
|||||||
fi; \
|
fi; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# rpm rules
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
echo_inst_files:
|
||||||
|
${Q}for i in ${SCRIPT} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
|
echo __file__ ${SCRIPTDIR}/$$i; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# Utility rules
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
-rm -f makedep.out
|
-rm -f makedep.out
|
||||||
|
|
||||||
clobber:
|
clobber:
|
||||||
-rm -f ${SCRIPT}
|
-rm -f ${TARGETS}
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
-${Q}if [ ! -d ${BINDIR} ]; then \
|
-${Q}if [ ! -d $T${BINDIR} ]; then \
|
||||||
echo mkdir ${BINDIR}; \
|
echo mkdir $T${BINDIR}; \
|
||||||
mkdir ${BINDIR}; \
|
mkdir $T${BINDIR}; \
|
||||||
|
if [ ! -d "$T${BINDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${BINDIR}"; \
|
||||||
|
mkdir -p "$T${BINDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${BINDIR}; \
|
||||||
|
${CHMOD} 0755 $T${BINDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
-${Q}if [ ! -d ${SCRIPTDIR} ]; then \
|
-${Q}if [ ! -d $T${SCRIPTDIR} ]; then \
|
||||||
echo mkdir ${SCRIPTDIR}; \
|
echo mkdir $T${SCRIPTDIR}; \
|
||||||
mkdir ${SCRIPTDIR}; \
|
mkdir $T${SCRIPTDIR}; \
|
||||||
|
if [ ! -d "$T${SCRIPTDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${SCRIPTDIR}"; \
|
||||||
|
mkdir -p "$T${SCRIPTDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${SCRIPTDIR}; \
|
||||||
|
${CHMOD} 0755 $T${SCRIPTDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
${Q}for i in ${SCRIPT}; do \
|
${Q}for i in ${SCRIPT} /dev/null; do \
|
||||||
echo rm -f ${SCRIPTDIR}/$$i; \
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
rm -f ${SCRIPTDIR}/$$i; \
|
continue; \
|
||||||
echo cp $$i ${SCRIPTDIR}; \
|
fi; \
|
||||||
cp $$i ${SCRIPTDIR}; \
|
if ${CMP} -s $$i $T${SCRIPTDIR}/$$i; then \
|
||||||
echo ${CHMOD} 0555 ${SCRIPTDIR}/$$i; \
|
true; \
|
||||||
${CHMOD} 0555 ${SCRIPTDIR}/$$i; \
|
else \
|
||||||
|
rm -f $T${SCRIPTDIR}/$$i.new; \
|
||||||
|
cp -f $$i $T${SCRIPTDIR}/$$i.new; \
|
||||||
|
${CHMOD} 0555 $T${SCRIPTDIR}/$$i.new; \
|
||||||
|
mv -f $T${SCRIPTDIR}/$$i.new $T${SCRIPTDIR}/$$i; \
|
||||||
|
echo "installed $T${SCRIPTDIR}/$$i"; \
|
||||||
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
4dsphere: 4dsphere.calc
|
||||||
|
@rm -f $@
|
||||||
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
|
@${CHMOD} +x $@
|
||||||
|
fproduct: fproduct.calc
|
||||||
|
@rm -f $@
|
||||||
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
|
@${CHMOD} +x $@
|
||||||
mersenne: mersenne.calc
|
mersenne: mersenne.calc
|
||||||
rm -f $@
|
@rm -f $@
|
||||||
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
${CHMOD} +x $@
|
@${CHMOD} +x $@
|
||||||
piforever: piforever.calc
|
piforever: piforever.calc
|
||||||
rm -f $@
|
@rm -f $@
|
||||||
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
${CHMOD} +x $@
|
@${CHMOD} +x $@
|
||||||
plus: plus.calc
|
plus: plus.calc
|
||||||
rm -f $@
|
@rm -f $@
|
||||||
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
${CHMOD} +x $@
|
@${CHMOD} +x $@
|
||||||
|
powerterm: powerterm.calc
|
||||||
|
@rm -f $@
|
||||||
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
|
@${CHMOD} +x $@
|
||||||
simple: simple.calc
|
simple: simple.calc
|
||||||
rm -f $@
|
@rm -f $@
|
||||||
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
${CHMOD} +x $@
|
@${CHMOD} +x $@
|
||||||
square: square.calc
|
square: square.calc
|
||||||
rm -f $@
|
@rm -f $@
|
||||||
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
${CHMOD} +x $@
|
@${CHMOD} +x $@
|
||||||
|
@@ -19,6 +19,23 @@ For more info, see:
|
|||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
|
4dsphere
|
||||||
|
|
||||||
|
Determine if 6 points lie on the surface of a 4-dimensional sphere in R^4.
|
||||||
|
|
||||||
|
4dsphere x0 y0 z0 w0 x1 y1 z1 w1 ... x5 y5 z5 w5
|
||||||
|
|
||||||
|
x0 y0 z0 w0 point 0 in R^4
|
||||||
|
x1 y1 z1 w1 point 1 in R^4
|
||||||
|
... ...
|
||||||
|
x5 y5 z5 w5 point 5 in R^4
|
||||||
|
|
||||||
|
|
||||||
|
fproduct filename term ...
|
||||||
|
|
||||||
|
Write the big Endian product of terms to a file. Use - for stdout.
|
||||||
|
|
||||||
|
|
||||||
mersenne exp
|
mersenne exp
|
||||||
|
|
||||||
Print the value of 2^exp-1.
|
Print the value of 2^exp-1.
|
||||||
@@ -34,6 +51,12 @@ plus arg ...
|
|||||||
Print the sum of 1 or more arguments.
|
Print the sum of 1 or more arguments.
|
||||||
|
|
||||||
|
|
||||||
|
powerterm [base_limit] value
|
||||||
|
|
||||||
|
Print the value as a sum (or difference) of powers of integers up
|
||||||
|
to and including powers <= base_limit. By default, base_limit is 10000.
|
||||||
|
|
||||||
|
|
||||||
simple
|
simple
|
||||||
|
|
||||||
A trivial example of a calc shell script.
|
A trivial example of a calc shell script.
|
||||||
@@ -54,8 +77,8 @@ simple
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.4 $
|
## @(#) $Revision: 29.10 $
|
||||||
## @(#) $Id: README,v 29.4 2000/06/07 14:02:59 chongo Exp $
|
## @(#) $Id: README,v 29.10 2001/06/10 19:34:40 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/README,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/README,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1999/12/17 10:23:40
|
## Under source code control: 1999/12/17 10:23:40
|
||||||
|
88
cscript/fproduct.calc
Normal file
88
cscript/fproduct.calc
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
#!/usr/local/src/cmd/calc/calc -q -s -f
|
||||||
|
/*
|
||||||
|
* fproduct - write the big Endian product of terms to a file
|
||||||
|
*
|
||||||
|
* usage:
|
||||||
|
* fproduct filename term [term ...]
|
||||||
|
*
|
||||||
|
* filename where to write the product, use - for stdout
|
||||||
|
* term ... terms to multiply
|
||||||
|
*
|
||||||
|
* Copyright (C) 2001 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.2 $
|
||||||
|
* @(#) $Id: fproduct.calc,v 29.2 2001/06/06 09:06:29 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/fproduct.calc,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2001/04/07 20:13:11
|
||||||
|
* File existed as early as: 2001
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* parse args
|
||||||
|
*/
|
||||||
|
argc = argv();
|
||||||
|
if (argc < 2) {
|
||||||
|
fprintf(files(2), "usage: %s term [term ...]\n", argv(0));
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
filename = argv(1);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* build the product
|
||||||
|
*/
|
||||||
|
product = 1;
|
||||||
|
for (i=2; i < argc; ++i) {
|
||||||
|
product *= eval(argv(i));
|
||||||
|
}
|
||||||
|
product = abs(product);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open the file for writing, "-" is stdout
|
||||||
|
*/
|
||||||
|
if (filename == "-") {
|
||||||
|
fd = files(1);
|
||||||
|
} else {
|
||||||
|
fd = fopen(filename, "w");
|
||||||
|
if (!isfile(fd)) quit "be2file: cannot open file for writing";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* write the octets to the file
|
||||||
|
*
|
||||||
|
* The most significant bits of the integer become the first file octets.
|
||||||
|
*/
|
||||||
|
if (product > 0) {
|
||||||
|
octlen = int((highbit(product)+8) / 8);
|
||||||
|
for (i=octlen-1; i >= 0; --i) {
|
||||||
|
fputc(fd, char(product >> (i*8)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cleanup
|
||||||
|
*/
|
||||||
|
if (filename != "-") {
|
||||||
|
fclose(fd);
|
||||||
|
}
|
185
cscript/powerterm.calc
Normal file
185
cscript/powerterm.calc
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
#!/usr/local/src/cmd/calc/calc -q -s -f
|
||||||
|
/*
|
||||||
|
* powerterm - print the argument as a sum of powers of integers
|
||||||
|
*
|
||||||
|
* 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 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the powerterm of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.6 $
|
||||||
|
* @(#) $Id: powerterm.calc,v 29.6 2001/06/06 09:06:29 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/powerterm.calc,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2001/04/24 23:49:11
|
||||||
|
* File existed as early as: 2001
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* parse args
|
||||||
|
*/
|
||||||
|
config("verbose_quit", 0),;
|
||||||
|
base_lim = 10000; /* default: highest base we will consider */
|
||||||
|
if (argv() < 2 || argv() > 3) {
|
||||||
|
fprintf(files(2), "usage: %s [base_limit] value\n", argv(0));
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
if (argv() == 3) {
|
||||||
|
x = eval(argv(2));
|
||||||
|
base_lim = eval(argv(1));
|
||||||
|
} else {
|
||||||
|
x = eval(argv(1));
|
||||||
|
}
|
||||||
|
if (! isint(x)) {
|
||||||
|
fprintf(files(2), "%s: value must be an integer\n");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
if (! isint(base_lim)) {
|
||||||
|
fprintf(files(2), "%s: base limit must be an integer\n");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
if (base_lim <= 1) {
|
||||||
|
fprintf(files(2), "%s: base limit is too small\n");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
++base_lim;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* setup loop variables
|
||||||
|
*/
|
||||||
|
term = 0; /* number of powerterm found */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* log constants
|
||||||
|
*/
|
||||||
|
if (base_lim <= 2^20+1) { /* 2^20 requires ~96 Megs of memory */
|
||||||
|
mat lni[base_lim]; /* log of integers */
|
||||||
|
for (i=2; i < base_lim; ++i) {
|
||||||
|
lni[i] = ln(i);
|
||||||
|
}
|
||||||
|
have_lni = 1; /* have lni[x] array */
|
||||||
|
} else {
|
||||||
|
mat lni[1]; /* not used */
|
||||||
|
have_lni = 0; /* base_lim too large for array */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* remove nestest powers
|
||||||
|
*/
|
||||||
|
while (abs(x) >= base_lim) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* look for the nearest power
|
||||||
|
*/
|
||||||
|
lnx = ln(abs(x)); /* log of the remaining co-factor */
|
||||||
|
closest = 0.5;
|
||||||
|
base = 1;
|
||||||
|
exponent = 0;
|
||||||
|
if (have_lni) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* use pre-calculated log array when looking for the nearest power
|
||||||
|
*/
|
||||||
|
for (i = 2; i < base_lim; ++i) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* determine exponent closeness to an integer
|
||||||
|
*/
|
||||||
|
ex = lnx / lni[i];
|
||||||
|
power = int(ex + 0.5);
|
||||||
|
diff = ex - power;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* look for a closer power
|
||||||
|
*/
|
||||||
|
if (abs(diff) < closest) {
|
||||||
|
closest = abs(diff);
|
||||||
|
base = i;
|
||||||
|
exponent = power;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* re-calculate logs when looking for the nearest power
|
||||||
|
*/
|
||||||
|
for (i = 2; i < base_lim; ++i) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* determine exponent closeness to an integer
|
||||||
|
*/
|
||||||
|
ex = lnx / ln(i);
|
||||||
|
power = int(ex + 0.5);
|
||||||
|
diff = ex - power;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* look for a closer power
|
||||||
|
*/
|
||||||
|
if (abs(diff) < closest) {
|
||||||
|
closest = abs(diff);
|
||||||
|
base = i;
|
||||||
|
exponent = power;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* output current term and then subtract it
|
||||||
|
*/
|
||||||
|
if (x != 0) {
|
||||||
|
if (x < 0) {
|
||||||
|
print "-",;
|
||||||
|
} else if (term > 0) {
|
||||||
|
print "+",;
|
||||||
|
}
|
||||||
|
if (exponent > 1) {
|
||||||
|
print base: "^": exponent,;
|
||||||
|
} else {
|
||||||
|
print base,;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* subtract (or add) this near power
|
||||||
|
*/
|
||||||
|
if (x < 0) {
|
||||||
|
x = x + base^exponent;
|
||||||
|
} else {
|
||||||
|
x = x - base^exponent;
|
||||||
|
}
|
||||||
|
++term;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* print the final term
|
||||||
|
*/
|
||||||
|
if (x < 0) {
|
||||||
|
print "-", -x;
|
||||||
|
} else if (x > 0) {
|
||||||
|
print "+", x;
|
||||||
|
} else {
|
||||||
|
print "";
|
||||||
|
}
|
||||||
|
exit;
|
@@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# sqaure - print the squares of input values
|
# sqaure - print the squares of input values
|
||||||
#
|
#
|
||||||
# Copyright (C) 2000 Landon Curt Noll
|
# Copyright (C) 2000 Ernest Bowen
|
||||||
#
|
#
|
||||||
# Calc is open software; you can redistribute it and/or modify it under
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.1 $
|
# @(#) $Revision: 29.3 $
|
||||||
# @(#) $Id: square.calc,v 29.1 2000/12/15 14:55:59 chongo Exp $
|
# @(#) $Id: square.calc,v 29.3 2000/12/17 14:31:58 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/square.calc,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/square.calc,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 2000/12/15 06:52:01
|
# Under source code control: 2000/12/15 06:52:01
|
||||||
@@ -27,8 +27,38 @@
|
|||||||
#
|
#
|
||||||
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
|
||||||
# usage:
|
# Usage:
|
||||||
# mersenne exp
|
#
|
||||||
|
# From the shell:
|
||||||
|
#
|
||||||
|
# ./square
|
||||||
|
# cat file | ./square
|
||||||
|
# echo "123" | ./square
|
||||||
|
#
|
||||||
|
# Within calc:
|
||||||
|
#
|
||||||
|
# > read square
|
||||||
|
#
|
||||||
|
# With input from a terminal, there is no prompt but each non-empty
|
||||||
|
# line of input is evaluated as a calc expression and if it can be
|
||||||
|
# calculated, the square of the value of that expression is displayed.
|
||||||
|
# Execution stops when an empty line is input.
|
||||||
|
#
|
||||||
|
# From the shell:
|
||||||
|
#
|
||||||
|
# ./square
|
||||||
|
#
|
||||||
|
# The following shows lines of input followed by output:
|
||||||
|
#
|
||||||
|
# 1234
|
||||||
|
# 1522756
|
||||||
|
# ln(2)
|
||||||
|
# ~.48045301391820142467
|
||||||
|
# config("mode","frac"), bernoulli(10)
|
||||||
|
# 25/4356
|
||||||
|
# config("mode", "hex"), 0xff
|
||||||
|
# 0xfe01
|
||||||
|
#
|
||||||
|
|
||||||
global s;
|
global s;
|
||||||
while ((s = prompt("")))
|
while ((s = prompt("")))
|
||||||
|
11
custom.c
11
custom.c
@@ -17,9 +17,9 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: custom.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: custom.c,v 29.4 2004/02/25 23:54:40 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/custom.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/../RCS/custom.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/03/03 04:53:08
|
* Under source code control: 1997/03/03 04:53:08
|
||||||
* File existed as early as: 1997
|
* File existed as early as: 1997
|
||||||
@@ -34,11 +34,10 @@
|
|||||||
#include "value.h"
|
#include "value.h"
|
||||||
#include "custom.h"
|
#include "custom.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#if defined(CUSTOM)
|
#if defined(CUSTOM)
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
|
|
||||||
#include "have_string.h"
|
#include "have_string.h"
|
||||||
@@ -52,7 +51,7 @@
|
|||||||
|
|
||||||
#endif /* CUSTOM */
|
#endif /* CUSTOM */
|
||||||
|
|
||||||
int allow_custom = FALSE; /* TRUE => custom builtins allowed */
|
BOOL allow_custom = FALSE; /* TRUE => custom builtins allowed */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
6
custom.h
6
custom.h
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: custom.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: custom.h,v 29.3 2004/02/25 23:54:40 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/custom.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/custom.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/03/03 04:53:08
|
* Under source code control: 1997/03/03 04:53:08
|
||||||
@@ -72,7 +72,7 @@ struct custom {
|
|||||||
* These are the required interfaces. The dummy.c stubs these interfaces too.
|
* These are the required interfaces. The dummy.c stubs these interfaces too.
|
||||||
*/
|
*/
|
||||||
extern VALUE custom(char*, int, VALUE**); /* master custom interface */
|
extern VALUE custom(char*, int, VALUE**); /* master custom interface */
|
||||||
extern int allow_custom; /* TRUE => custom builtins allowed */
|
extern BOOL allow_custom; /* TRUE => custom builtins allowed */
|
||||||
extern void showcustom(void); /* print custom functions */
|
extern void showcustom(void); /* print custom functions */
|
||||||
extern void customhelp(char *); /* direct custom help */
|
extern void customhelp(char *); /* direct custom help */
|
||||||
extern CONST struct custom cust[]; /* custom interface table */
|
extern CONST struct custom cust[]; /* custom interface table */
|
||||||
|
@@ -36,13 +36,15 @@ Step 1: Do some background work
|
|||||||
anything in Steps 2 and beyond!
|
anything in Steps 2 and beyond!
|
||||||
|
|
||||||
If you are not familiar with calc internals, we recommend that
|
If you are not familiar with calc internals, we recommend that
|
||||||
you look at some examples of custom functions. Check out
|
you look at some examples of custom functions. Look at the
|
||||||
the following source files:
|
the following source files:
|
||||||
|
|
||||||
custom.c
|
custom.c
|
||||||
|
custom.h
|
||||||
custom/custom.h
|
custom/custom.h
|
||||||
custom/custtbl.c
|
custom/custtbl.c
|
||||||
custom/c_*.[ch]
|
custom/c_*.[ch]
|
||||||
|
custom/*.cal
|
||||||
help/custom (or run: calc help custom)
|
help/custom (or run: calc help custom)
|
||||||
|
|
||||||
You would be well advised to look at a more recent calc source
|
You would be well advised to look at a more recent calc source
|
||||||
@@ -83,14 +85,15 @@ Step 3: Document your custom function
|
|||||||
|
|
||||||
Take a look at one of the example custom help files:
|
Take a look at one of the example custom help files:
|
||||||
|
|
||||||
devnull
|
custom/devnull
|
||||||
argv
|
custom/argv
|
||||||
help
|
custom/help
|
||||||
sysinfo
|
custom/sysinfo
|
||||||
|
|
||||||
You can save time by using one of the custom help files
|
You can save time by using one of the custom help files
|
||||||
as a template. Copy one of these files to your own help file:
|
as a template. Copy one of these files to your own help file:
|
||||||
|
|
||||||
|
cd custom
|
||||||
cp sysinfo curds
|
cp sysinfo curds
|
||||||
|
|
||||||
and edit it accordingly.
|
and edit it accordingly.
|
||||||
@@ -107,15 +110,16 @@ Step 4: Write your test code
|
|||||||
test code will be an import part of your submission. Your test
|
test code will be an import part of your submission. Your test
|
||||||
code will also service as additional for your custom function.
|
code will also service as additional for your custom function.
|
||||||
|
|
||||||
Coops ... we said we would stop preaching, sorry about that ...
|
Oops ... we said we would stop preaching, sorry about that ...
|
||||||
|
|
||||||
You can use one of the following as a template:
|
You can use one of the following as a template:
|
||||||
|
|
||||||
argv.cal
|
custom/argv.cal
|
||||||
halflen.cal
|
custom/halflen.cal
|
||||||
|
|
||||||
Copy one of these to your own file:
|
Copy one of these to your own file:
|
||||||
|
|
||||||
|
cd custom
|
||||||
cp halflen.cal curds.cal
|
cp halflen.cal curds.cal
|
||||||
|
|
||||||
and exit it accordingly. In particular you will want to:
|
and exit it accordingly. In particular you will want to:
|
||||||
@@ -152,6 +156,7 @@ Step 5: Write your custom function
|
|||||||
We recommend that you use one of the c_*.c files as a template.
|
We recommend that you use one of the c_*.c files as a template.
|
||||||
Copy an appropriate file to your file:
|
Copy an appropriate file to your file:
|
||||||
|
|
||||||
|
cd custom
|
||||||
cp c_argv.c u_curds.c
|
cp c_argv.c u_curds.c
|
||||||
|
|
||||||
Before you edit it, you should note that there are several important
|
Before you edit it, you should note that there are several important
|
||||||
@@ -179,9 +184,6 @@ Step 5: Write your custom function
|
|||||||
VALUE
|
VALUE
|
||||||
u_curds(char *name, int count, VALUE **vals)
|
u_curds(char *name, int count, VALUE **vals)
|
||||||
|
|
||||||
The /*ARGSUSED*/ may be needed if you do not make use
|
|
||||||
of all 3 function parameters.
|
|
||||||
|
|
||||||
The 3 args are passed in by the custom interface
|
The 3 args are passed in by the custom interface
|
||||||
and have the following meaning:
|
and have the following meaning:
|
||||||
|
|
||||||
@@ -222,6 +224,15 @@ Step 5: Write your custom function
|
|||||||
vals[1] points to b
|
vals[1] points to b
|
||||||
vals[2] points to c
|
vals[2] points to c
|
||||||
|
|
||||||
|
NOTE: If you do not use any of the 3 function parameters,
|
||||||
|
then you should declare that function parameter to be UNUSED.
|
||||||
|
For example, if the count and vals parameters were not used
|
||||||
|
in your custom function, then your declaraction should be:
|
||||||
|
|
||||||
|
/*ARGSUSED*/
|
||||||
|
VALUE
|
||||||
|
u_curds(char *name, int UNUSED count, VALUE UNUSED **vals)
|
||||||
|
|
||||||
c) The return value is the function must be a VALUE.
|
c) The return value is the function must be a VALUE.
|
||||||
|
|
||||||
The typical way to form a VALUE to return is by declaring
|
The typical way to form a VALUE to return is by declaring
|
||||||
@@ -239,6 +250,8 @@ Step 5: Write your custom function
|
|||||||
#include "../value.h"
|
#include "../value.h"
|
||||||
#include "custom.h"
|
#include "custom.h"
|
||||||
|
|
||||||
|
#include "../have_unused.h"
|
||||||
|
|
||||||
Typically these will be included just below any system
|
Typically these will be included just below any system
|
||||||
includes and just below the #if defined(CUSTOM) line.
|
includes and just below the #if defined(CUSTOM) line.
|
||||||
|
|
||||||
@@ -362,7 +375,7 @@ Step 6: Register the function in the custom interface table
|
|||||||
|
|
||||||
To allow the custom() builtin to transfer control to your function,
|
To allow the custom() builtin to transfer control to your function,
|
||||||
you need to add an entry into the CONST struct custom cust table
|
you need to add an entry into the CONST struct custom cust table
|
||||||
found in custtbl.c:
|
found in custom/custtbl.c:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* custom interface table
|
* custom interface table
|
||||||
@@ -482,10 +495,10 @@ Step 6: Register the function in the custom interface table
|
|||||||
extern VALUE u_curds(char*, int, VALUE**);
|
extern VALUE u_curds(char*, int, VALUE**);
|
||||||
|
|
||||||
|
|
||||||
Step 7: Add the required information to the Makefile
|
Step 7: Add the required information to the custom/Makefile
|
||||||
|
|
||||||
The calc test script, curds.cal, should be added to the
|
The calc test script, curds.cal, should be added to the
|
||||||
CUSTOM_CALC_FILES Makefile variable:
|
CUSTOM_CALC_FILES Makefile variable found in custom/Makefile:
|
||||||
|
|
||||||
CUSTOM_CALC_FILES= argv.cal halflen.cal curds.cal
|
CUSTOM_CALC_FILES= argv.cal halflen.cal curds.cal
|
||||||
|
|
||||||
@@ -619,7 +632,7 @@ Step 12: Contribute
|
|||||||
and consider submitting your custom function for possible
|
and consider submitting your custom function for possible
|
||||||
inclusion in later versions of calc.
|
inclusion in later versions of calc.
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2004 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -635,8 +648,8 @@ Step 12: Contribute
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.4 $
|
||||||
## @(#) $Id: HOW_TO_ADD,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
## @(#) $Id: HOW_TO_ADD,v 29.4 2004/07/29 08:38:05 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/HOW_TO_ADD,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/HOW_TO_ADD,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1997/03/10 03:03:21
|
## Under source code control: 1997/03/10 03:03:21
|
||||||
|
407
custom/Makefile
407
custom/Makefile
@@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# custom - makefile for calc custom routines
|
# custom - makefile for calc custom routines
|
||||||
#
|
#
|
||||||
# Copyright (C) 1999 Landon Curt Noll
|
# Copyright (C) 1999,2004 Landon Curt Noll
|
||||||
#
|
#
|
||||||
# Calc is open software; you can redistribute it and/or modify it under
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.3 $
|
# @(#) $Revision: 29.24 $
|
||||||
# @(#) $Id: Makefile,v 29.3 2000/12/17 12:28:15 chongo Exp $
|
# @(#) $Id: Makefile,v 29.24 2004/07/29 08:38:18 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/Makefile,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/Makefile,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1997/03/09 02:28:54
|
# Under source code control: 1997/03/09 02:28:54
|
||||||
@@ -40,13 +40,13 @@
|
|||||||
#
|
#
|
||||||
# Put your custom calc resource files here.
|
# Put your custom calc resource files here.
|
||||||
#
|
#
|
||||||
CUSTOM_CALC_FILES= argv.cal halflen.cal pzasusb8.cal
|
CUSTOM_CALC_FILES= argv.cal halflen.cal pzasusb8.cal pmodm127.cal
|
||||||
|
|
||||||
# The custom help files to install
|
# The custom help files to install
|
||||||
#
|
#
|
||||||
# Put your custom help files here.
|
# Put your custom help files here.
|
||||||
#
|
#
|
||||||
CUSTOM_HELP= argv devnull help sysinfo pzasusb8
|
CUSTOM_HELP= argv devnull help sysinfo pzasusb8 pmodm127
|
||||||
|
|
||||||
# Any .h files that are needed by programs that use libcustcalc.a
|
# Any .h files that are needed by programs that use libcustcalc.a
|
||||||
#
|
#
|
||||||
@@ -62,7 +62,7 @@ CUSTOM_H_SRC=
|
|||||||
#
|
#
|
||||||
# Put your custom .c files here.
|
# Put your custom .c files here.
|
||||||
#
|
#
|
||||||
CUSTOM_SRC= c_argv.c c_devnull.c c_help.c c_sysinfo.c c_pzasusb8.c
|
CUSTOM_SRC= c_argv.c c_devnull.c c_help.c c_sysinfo.c c_pzasusb8.c c_pmodm127.c
|
||||||
|
|
||||||
# Any .o files that are needed by program that use libcustcalc.a.
|
# Any .o files that are needed by program that use libcustcalc.a.
|
||||||
# Don't put ${REQUIRED_OBJ} files in this list.
|
# Don't put ${REQUIRED_OBJ} files in this list.
|
||||||
@@ -71,7 +71,7 @@ CUSTOM_SRC= c_argv.c c_devnull.c c_help.c c_sysinfo.c c_pzasusb8.c
|
|||||||
#
|
#
|
||||||
# Put your custom .o files here.
|
# Put your custom .o files here.
|
||||||
#
|
#
|
||||||
CUSTOM_OBJ= c_argv.o c_devnull.o c_help.o c_sysinfo.o c_pzasusb8.o
|
CUSTOM_OBJ= c_argv.o c_devnull.o c_help.o c_sysinfo.o c_pzasusb8.o c_pmodm127.o
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#-=-=-=-=-=-=- Defaults in case you want to build from this dir -=-=-=-=-=-=-#
|
#-=-=-=-=-=-=- Defaults in case you want to build from this dir -=-=-=-=-=-=-#
|
||||||
@@ -88,26 +88,120 @@ CUSTOM_OBJ= c_argv.o c_devnull.o c_help.o c_sysinfo.o c_pzasusb8.o
|
|||||||
#Q=
|
#Q=
|
||||||
Q=@
|
Q=@
|
||||||
|
|
||||||
|
####
|
||||||
# Normally, the upper level makefile will set these values. We provide
|
# Normally, the upper level makefile will set these values. We provide
|
||||||
# a default here just in case you want to build from this directory.
|
# a default here just in case you want to build from this directory.
|
||||||
|
####
|
||||||
|
|
||||||
|
# Where the system include (.h) files are kept
|
||||||
#
|
#
|
||||||
# where to install things
|
# For DJGPP, select:
|
||||||
#
|
#
|
||||||
# ${TOPDIR} is the directory under which the calc directory will be placed.
|
# INCDIR= /dev/env/DJDIR/include
|
||||||
# ${LIBDIR} is where the *.cal, *.h, *.a, bindings and help dir are installed.
|
|
||||||
# ${HELPDIR} is where the help directory is installed.
|
|
||||||
# ${CUSTOMLIBDIR} is where custom lib files are installed.
|
|
||||||
# ${CUSTOMHELPDIR} is where custom help files are installed.
|
|
||||||
#
|
#
|
||||||
TOPDIR= /usr/local/lib
|
# If in doubt, set:
|
||||||
#TOPDIR= /usr/lib
|
|
||||||
#TOPDIR= /usr/libdata
|
|
||||||
#TOPDIR= /usr/contrib/lib
|
|
||||||
#
|
#
|
||||||
LIBDIR= ${TOPDIR}/calc
|
# INCDIR= /usr/include
|
||||||
HELPDIR= ${LIBDIR}/help
|
#
|
||||||
CUSTOMLIBDIR= ${LIBDIR}/custom
|
|
||||||
CUSTOMHELPDIR= ${HELPDIR}/custhelp
|
#INCDIR= /usr/local/include
|
||||||
|
#INCDIR= /dev/env/DJDIR/include
|
||||||
|
INCDIR= /usr/include
|
||||||
|
|
||||||
|
# where to install calc realted things
|
||||||
|
#
|
||||||
|
# ${BINDIR} where to install calc binary files
|
||||||
|
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||||
|
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# For DJGPP, select:
|
||||||
|
#
|
||||||
|
# BINDIR= /dev/env/DJDIR/bin
|
||||||
|
# LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
# CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
#BINDIR= /usr/local/bin
|
||||||
|
#BINDIR= /dev/env/DJDIR/bin
|
||||||
|
BINDIR= /usr/bin
|
||||||
|
|
||||||
|
#LIBDIR= /usr/local/lib
|
||||||
|
#LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
LIBDIR= /usr/lib
|
||||||
|
|
||||||
|
#CALC_SHAREDIR= /usr/local/lib/calc
|
||||||
|
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
CALC_SHAREDIR= /usr/share/calc
|
||||||
|
|
||||||
|
# By default, these values are based CALC_SHAREDIR, INCDIR, BINDIR
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# ${HELPDIR} where the help directory is installed
|
||||||
|
# ${CALC_INCDIR} where the calc include files are installed
|
||||||
|
# ${CUSTOMCALDIR} where custom *.cal files are installed
|
||||||
|
# ${CUSTOMHELPDIR} where custom help files are installed
|
||||||
|
# ${CUSTOMINCPDIR} where custom .h files are installed
|
||||||
|
# ${SCRIPTDIR} where calc shell scripts are installed
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
# CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
# CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
# CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
# CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
|
# SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
#
|
||||||
|
HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
|
SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
|
||||||
|
# T - top level directory under which calc will be installed
|
||||||
|
#
|
||||||
|
# The calc install is performed under $T, the calc build is
|
||||||
|
# performed under /. The purpose for $T is to allow someone
|
||||||
|
# to install calc somewhere other than into the system area.
|
||||||
|
#
|
||||||
|
# For example, if:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
# and if:
|
||||||
|
#
|
||||||
|
# T= /var/tmp/testing
|
||||||
|
#
|
||||||
|
# Then the installation locations will be:
|
||||||
|
#
|
||||||
|
# calc binary files: /var/tmp/testing/usr/bin
|
||||||
|
# calc link library: /var/tmp/testing/usr/lib
|
||||||
|
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||||
|
# ... etc ... /var/tmp/testing/...
|
||||||
|
#
|
||||||
|
# If $T is empty, calc is installed under /, which is the same
|
||||||
|
# top of tree for which it was built. If $T is non-empty, then
|
||||||
|
# calc is installed under $T, as if one had to chroot under
|
||||||
|
# $T for calc to operate.
|
||||||
|
#
|
||||||
|
# If in doubt, use T=
|
||||||
|
#
|
||||||
|
T=
|
||||||
|
|
||||||
# Normally, the upper level makefile will set these values. We provide
|
# Normally, the upper level makefile will set these values. We provide
|
||||||
# a default here just in case you want to build from this directory.
|
# a default here just in case you want to build from this directory.
|
||||||
@@ -256,7 +350,7 @@ REQUIRED_SRC= custtbl.c
|
|||||||
#
|
#
|
||||||
REQUIRED_OBJ= custtbl.o
|
REQUIRED_OBJ= custtbl.o
|
||||||
|
|
||||||
# These .h files are installed under ${CUSTOMLIBDIR} by the install rule.
|
# These .h files are installed under ${CUSTOMCALDIR} by the install rule.
|
||||||
#
|
#
|
||||||
INSTALL_H_SRC= ${CUSTOM_H_SRC}
|
INSTALL_H_SRC= ${CUSTOM_H_SRC}
|
||||||
|
|
||||||
@@ -288,9 +382,13 @@ DISTLIST= ${CUSTCALC_SRC} ${CUSTOM_CALC_FILES} ${CUSTOM_HELP} \
|
|||||||
#
|
#
|
||||||
CALCLIBLIST= ${CUSTCALC_SRC} ${INSTALL_H_SRC} ${MAKE_FILE} HOW_TO_ADD
|
CALCLIBLIST= ${CUSTCALC_SRC} ${INSTALL_H_SRC} ${MAKE_FILE} HOW_TO_ADD
|
||||||
|
|
||||||
|
# This is the custom .a link library that is build
|
||||||
|
#
|
||||||
|
CALC_LIBCUSTOM= libcustcalc.a
|
||||||
|
|
||||||
# complete list of targets
|
# complete list of targets
|
||||||
#
|
#
|
||||||
TARGETS= libcustcalc.a ${CUSTCALC_OBJ}
|
TARGETS= ${CALC_LIBCUSTOM} ${CUSTCALC_OBJ}
|
||||||
|
|
||||||
# required vars
|
# required vars
|
||||||
#
|
#
|
||||||
@@ -303,6 +401,7 @@ SED= sed
|
|||||||
MAKEDEPEND= makedepend
|
MAKEDEPEND= makedepend
|
||||||
CHMOD= chmod
|
CHMOD= chmod
|
||||||
SORT= sort
|
SORT= sort
|
||||||
|
CMP= cmp
|
||||||
|
|
||||||
##
|
##
|
||||||
#
|
#
|
||||||
@@ -313,7 +412,7 @@ SORT= sort
|
|||||||
all: ${TARGETS} ${INSTALL_H_SRC} ${CUSTOM_CALC_FILES} \
|
all: ${TARGETS} ${INSTALL_H_SRC} ${CUSTOM_CALC_FILES} \
|
||||||
${CUSTOM_HELP} ${MAKE_FILE} .all
|
${CUSTOM_HELP} ${MAKE_FILE} .all
|
||||||
|
|
||||||
libcustcalc.a: ${CUSTCALC_OBJ} ${MAKE_FILE} ../Makefile
|
libcustcalc.a: ${CUSTCALC_OBJ} ${MAKE_FILE} ../${MAKE_FILE}
|
||||||
-rm -f libcustcalc.a
|
-rm -f libcustcalc.a
|
||||||
ar qc libcustcalc.a ${CUSTCALC_OBJ}
|
ar qc libcustcalc.a ${CUSTCALC_OBJ}
|
||||||
${RANLIB} libcustcalc.a
|
${RANLIB} libcustcalc.a
|
||||||
@@ -353,8 +452,10 @@ c_sysinfo.o: c_sysinfo.c ${MAKE_FILE}
|
|||||||
##
|
##
|
||||||
|
|
||||||
distlist: ${DISTLIST}
|
distlist: ${DISTLIST}
|
||||||
${Q}for i in ${DISTLIST}; do \
|
${Q}for i in ${DISTLIST} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo custom/$$i; \
|
echo custom/$$i; \
|
||||||
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
distdir:
|
distdir:
|
||||||
@@ -390,11 +491,13 @@ depend:
|
|||||||
-${Q}rm -rf skel
|
-${Q}rm -rf skel
|
||||||
${Q}mkdir skel
|
${Q}mkdir skel
|
||||||
${Q}mkdir skel/custom
|
${Q}mkdir skel/custom
|
||||||
-${Q}for i in ${C_SRC}; do \
|
-${Q}for i in ${C_SRC} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
${SED} -n '/^#[ ]*include[ ]*"/p' \
|
${SED} -n '/^#[ ]*include[ ]*"/p' \
|
||||||
"$$i" > "skel/custom/$$i"; \
|
"$$i" > "skel/custom/$$i"; \
|
||||||
|
fi; \
|
||||||
done
|
done
|
||||||
-${Q}for i in /dev/null ${H_SRC}; do \
|
-${Q}for i in ${H_SRC} /dev/null; do \
|
||||||
if [ "$$i" = "/dev/null" ]; then \
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
continue; \
|
continue; \
|
||||||
fi; \
|
fi; \
|
||||||
@@ -409,7 +512,10 @@ depend:
|
|||||||
${Q}for i in `cd ..; ${MAKE} h_list 2>&1 | \
|
${Q}for i in `cd ..; ${MAKE} h_list 2>&1 | \
|
||||||
${SED} -e '/Entering directory/d' \
|
${SED} -e '/Entering directory/d' \
|
||||||
-e '/Nothing to be done/d' \
|
-e '/Nothing to be done/d' \
|
||||||
-e '/Leaving directory/d'`; do \
|
-e '/Leaving directory/d'` /dev/null; do \
|
||||||
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
|
continue; \
|
||||||
|
fi; \
|
||||||
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
||||||
echo "#if !defined($$tag)" > "skel/$$i"; \
|
echo "#if !defined($$tag)" > "skel/$$i"; \
|
||||||
echo "#define $$tag" >> "skel/$$i"; \
|
echo "#define $$tag" >> "skel/$$i"; \
|
||||||
@@ -422,9 +528,11 @@ depend:
|
|||||||
${Q}echo forming custom dependency list
|
${Q}echo forming custom dependency list
|
||||||
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
|
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
|
||||||
skel/custom/makedep.out
|
skel/custom/makedep.out
|
||||||
${Q}cd skel/custom; ${MAKEDEPEND} -w 1 -m -f makedep.out ${C_SRC}
|
${Q}cd skel/custom; ${MAKEDEPEND} -w 1 -f makedep.out ${C_SRC}
|
||||||
-${Q}for i in ${C_SRC}; do \
|
-${Q}for i in ${C_SRC} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \
|
echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \
|
||||||
|
fi; \
|
||||||
done >> skel/custom/makedep.out
|
done >> skel/custom/makedep.out
|
||||||
${Q}echo custom dependency list formed
|
${Q}echo custom dependency list formed
|
||||||
${Q}echo forming new custom/Makefile
|
${Q}echo forming new custom/Makefile
|
||||||
@@ -432,9 +540,10 @@ depend:
|
|||||||
${Q}mv Makefile Makefile.bak
|
${Q}mv Makefile Makefile.bak
|
||||||
${Q}${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile
|
${Q}${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile
|
||||||
${Q}echo "" >> Makefile
|
${Q}echo "" >> Makefile
|
||||||
${Q}${SED} -n '3,$$p' skel/custom/makedep.out | ${SORT} -u >> Makefile
|
${Q}${SED} -n '3,$$p' skel/custom/makedep.out | \
|
||||||
|
LANG=C ${SORT} -u >> Makefile
|
||||||
-${Q}rm -rf skel
|
-${Q}rm -rf skel
|
||||||
-${Q}if cmp -s Makefile.bak Makefile; then \
|
-${Q}if ${CMP} -s Makefile.bak Makefile; then \
|
||||||
echo 'custom Makefile was already up to date'; \
|
echo 'custom Makefile was already up to date'; \
|
||||||
mv -f Makefile.bak Makefile; \
|
mv -f Makefile.bak Makefile; \
|
||||||
else \
|
else \
|
||||||
@@ -449,6 +558,34 @@ depend:
|
|||||||
fi; \
|
fi; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# rpm rules
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
echo_inst_files:
|
||||||
|
${Q}for i in ${INSTALL_H_SRC} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
|
echo __file__ ${CUSTOMINCDIR}/$$i; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
${Q}for i in ${CUSTOM_HELP} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
|
echo __file__ ${CUSTOMHELPDIR}/$$i; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
${Q}for i in ${CUSTOM_CALC_FILES} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
|
echo __file__ ${CUSTOMCALDIR}/$$i; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
${Q}for i in ${CALC_LIBCUSTOM} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
|
echo __file__ ${CUSTOMCALDIR}/$$i; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
##
|
##
|
||||||
#
|
#
|
||||||
# Utility rules
|
# Utility rules
|
||||||
@@ -460,73 +597,148 @@ clean:
|
|||||||
|
|
||||||
clobber:
|
clobber:
|
||||||
-rm -f ${TARGETS}
|
-rm -f ${TARGETS}
|
||||||
rm -f .all Makefile.tmp
|
rm -f .all Makefile.tmp Makefile.bak
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
-${Q}if [ ! -d ${TOPDIR} ]; then \
|
-${Q}if [ ! -d $T${INCDIR} ]; then \
|
||||||
echo mkdir ${TOPDIR}; \
|
echo mkdir $T${INCDIR}; \
|
||||||
mkdir ${TOPDIR}; \
|
mkdir $T${INCDIR}; \
|
||||||
|
if [ ! -d "$T${INCDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${INCDIR}"; \
|
||||||
|
mkdir -p "$T${INCDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${INCDIR}; \
|
||||||
|
${CHMOD} 0755 $T${INCDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
-${Q}if [ ! -d ${LIBDIR} ]; then \
|
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \
|
||||||
echo mkdir ${LIBDIR}; \
|
echo mkdir $T${CALC_SHAREDIR}; \
|
||||||
mkdir ${LIBDIR}; \
|
mkdir $T${CALC_SHAREDIR}; \
|
||||||
|
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${CALC_SHAREDIR}"; \
|
||||||
|
mkdir -p "$T${CALC_SHAREDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \
|
||||||
|
${CHMOD} 0755 $T${CALC_SHAREDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
-${Q}if [ ! -d ${HELPDIR} ]; then \
|
-${Q}if [ ! -d $T${CALC_INCDIR} ]; then \
|
||||||
echo mkdir ${HELPDIR}; \
|
echo mkdir $T${CALC_INCDIR}; \
|
||||||
mkdir ${HELPDIR}; \
|
mkdir $T${CALC_INCDIR}; \
|
||||||
|
if [ ! -d "$T${CALC_INCDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${CALC_INCDIR}"; \
|
||||||
|
mkdir -p "$T${CALC_INCDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${CALC_INCDIR}; \
|
||||||
|
${CHMOD} 0755 $T${CALC_INCDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
-${Q}if [ ! -d ${CUSTOMLIBDIR} ]; then \
|
-${Q}if [ ! -d $T${HELPDIR} ]; then \
|
||||||
echo mkdir ${CUSTOMLIBDIR}; \
|
echo mkdir $T${HELPDIR}; \
|
||||||
mkdir ${CUSTOMLIBDIR}; \
|
mkdir $T${HELPDIR}; \
|
||||||
|
if [ ! -d "$T${HELPDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${HELPDIR}"; \
|
||||||
|
mkdir -p "$T${HELPDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${HELPDIR}; \
|
||||||
|
${CHMOD} 0755 $T${HELPDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
-${Q}if [ ! -d ${CUSTOMHELPDIR} ]; then \
|
-${Q}if [ ! -d $T${CUSTOMCALDIR} ]; then \
|
||||||
echo mkdir ${CUSTOMHELPDIR}; \
|
echo mkdir $T${CUSTOMCALDIR}; \
|
||||||
mkdir ${CUSTOMHELPDIR}; \
|
mkdir $T${CUSTOMCALDIR}; \
|
||||||
|
if [ ! -d "$T${CUSTOMCALDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${CUSTOMCALDIR}"; \
|
||||||
|
mkdir -p "$T${CUSTOMCALDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${CUSTOMCALDIR}; \
|
||||||
|
${CHMOD} 0755 $T${CUSTOMCALDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
${Q}for i in ${INSTALL_H_SRC} /dev/null; do \
|
-${Q}if [ ! -d $T${CUSTOMHELPDIR} ]; then \
|
||||||
if [ X$$i = X/dev/null ]; then continue; fi; \
|
echo mkdir $T${CUSTOMHELPDIR}; \
|
||||||
echo rm -f ${CUSTOMLIBDIR}/$$i; \
|
mkdir $T${CUSTOMHELPDIR}; \
|
||||||
rm -f ${CUSTOMLIBDIR}/$$i; \
|
if [ ! -d "$T${CUSTOMHELPDIR}" ]; then \
|
||||||
echo cp $$i ${CUSTOMLIBDIR}; \
|
echo mkdir -p "$T${CUSTOMHELPDIR}"; \
|
||||||
cp $$i ${CUSTOMLIBDIR}; \
|
mkdir -p "$T${CUSTOMHELPDIR}"; \
|
||||||
echo ${CHMOD} 0444 ${CUSTOMLIBDIR}/$$i; \
|
fi; \
|
||||||
${CHMOD} 0444 ${CUSTOMLIBDIR}/$$i; \
|
echo ${CHMOD} 0755 $T${CUSTOMHELPDIR}; \
|
||||||
|
${CHMOD} 0755 $T${CUSTOMHELPDIR}; \
|
||||||
|
else \
|
||||||
|
true; \
|
||||||
|
fi
|
||||||
|
-${Q}if [ ! -d $T${CUSTOMINCDIR} ]; then \
|
||||||
|
echo mkdir $T${CUSTOMINCDIR}; \
|
||||||
|
mkdir $T${CUSTOMINCDIR}; \
|
||||||
|
if [ ! -d "$T${CUSTOMINCDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${CUSTOMINCDIR}"; \
|
||||||
|
mkdir -p "$T${CUSTOMINCDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${CUSTOMINCDIR}; \
|
||||||
|
${CHMOD} 0755 $T${CUSTOMINCDIR}; \
|
||||||
|
else \
|
||||||
|
true; \
|
||||||
|
fi
|
||||||
|
-${Q}for i in ${INSTALL_H_SRC} /dev/null; do \
|
||||||
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
|
continue; \
|
||||||
|
fi; \
|
||||||
|
if ${CMP} -s tmp $T${CUSTOMINCDIR}/$$i; then \
|
||||||
|
true; \
|
||||||
|
else \
|
||||||
|
rm -f $T${CUSTOMINCDIR}/$$i.new; \
|
||||||
|
cp -f $$i $T${CUSTOMINCDIR}/$$i.new; \
|
||||||
|
${CHMOD} 0444 $T${CUSTOMINCDIR}/$$i.new; \
|
||||||
|
mv -f $T${CUSTOMINCDIR}/$$i.new $T${CUSTOMINCDIR}/$$i; \
|
||||||
|
echo "installed $T${CUSTOMINCDIR}/$$i"; \
|
||||||
|
fi; \
|
||||||
done
|
done
|
||||||
${Q}for i in ${CUSTOM_CALC_FILES}; do \
|
-${Q}rm -f tmp
|
||||||
echo rm -f ${CUSTOMLIBDIR}/$$i; \
|
-${Q}for i in ${CUSTOM_CALC_FILES} /dev/null; do \
|
||||||
rm -f ${CUSTOMLIBDIR}/$$i; \
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
echo cp $$i ${CUSTOMLIBDIR}; \
|
continue; \
|
||||||
cp $$i ${CUSTOMLIBDIR}; \
|
fi; \
|
||||||
echo ${CHMOD} 0444 ${CUSTOMLIBDIR}/$$i; \
|
if ${CMP} -s $$i $T${CUSTOMCALDIR}/$$i; then \
|
||||||
${CHMOD} 0444 ${CUSTOMLIBDIR}/$$i; \
|
true; \
|
||||||
|
else \
|
||||||
|
rm -f $T${CUSTOMCALDIR}/$$i.new; \
|
||||||
|
cp -f $$i $T${CUSTOMCALDIR}/$$i.new; \
|
||||||
|
${CHMOD} 0444 $T${CUSTOMCALDIR}/$$i.new; \
|
||||||
|
mv -f $T${CUSTOMCALDIR}/$$i.new $T${CUSTOMCALDIR}/$$i; \
|
||||||
|
echo "installed $T${CUSTOMCALDIR}/$$i"; \
|
||||||
|
fi; \
|
||||||
done
|
done
|
||||||
${Q}for i in ${CUSTOM_HELP}; do \
|
-${Q}for i in ${CUSTOM_HELP} /dev/null; do \
|
||||||
echo rm -f ${CUSTOMHELPDIR}/$$i; \
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
rm -f ${CUSTOMHELPDIR}/$$i; \
|
continue; \
|
||||||
echo cp $$i ${CUSTOMHELPDIR}; \
|
fi; \
|
||||||
cp $$i ${CUSTOMHELPDIR}; \
|
if ${CMP} -s $$i $T${CUSTOMHELPDIR}/$$i; then \
|
||||||
echo ${CHMOD} 0444 ${CUSTOMHELPDIR}/$$i; \
|
true; \
|
||||||
${CHMOD} 0444 ${CUSTOMHELPDIR}/$$i; \
|
else \
|
||||||
|
rm -f $T${CUSTOMHELPDIR}/$$i.new; \
|
||||||
|
cp -f $$i $T${CUSTOMHELPDIR}/$$i.new; \
|
||||||
|
${CHMOD} 0444 $T${CUSTOMHELPDIR}/$$i.new; \
|
||||||
|
mv -f $T${CUSTOMHELPDIR}/$$i.new $T${CUSTOMHELPDIR}/$$i; \
|
||||||
|
echo "installed $T${CUSTOMHELPDIR}/$$i"; \
|
||||||
|
fi; \
|
||||||
done
|
done
|
||||||
-${Q}if [ ! -z ${ALLOW_CUSTOM} ]; then \
|
-${Q}if [ ! -z ${ALLOW_CUSTOM} ]; then \
|
||||||
echo "rm -f ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
if ${CMP} -s libcustcalc.a $T${CUSTOMCALDIR}/libcustcalc.a; then \
|
||||||
rm -f ${CUSTOMLIBDIR}/libcustcalc.a; \
|
true; \
|
||||||
echo "cp libcustcalc.a ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
else \
|
||||||
cp libcustcalc.a ${CUSTOMLIBDIR}/libcustcalc.a; \
|
rm -f $T${CUSTOMCALDIR}/libcustcalc.a.new; \
|
||||||
echo "${CHMOD} 0644 ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
cp -f libcustcalc.a $T${CUSTOMCALDIR}/libcustcalc.a.new; \
|
||||||
${CHMOD} 0644 ${CUSTOMLIBDIR}/libcustcalc.a; \
|
${CHMOD} 0644 $T${CUSTOMCALDIR}/libcustcalc.a.new; \
|
||||||
echo "${RANLIB} ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
mv -f $T${CUSTOMCALDIR}/libcustcalc.a.new \
|
||||||
${RANLIB} ${CUSTOMLIBDIR}/libcustcalc.a; \
|
$T${CUSTOMCALDIR}/libcustcalc.a; \
|
||||||
|
${RANLIB} $T${CUSTOMCALDIR}/libcustcalc.a; \
|
||||||
|
echo "installed $T${CUSTOMCALDIR}/libcustcalc.a"; \
|
||||||
|
fi; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -553,6 +765,7 @@ c_argv.o: ../have_memmv.h
|
|||||||
c_argv.o: ../have_newstr.h
|
c_argv.o: ../have_newstr.h
|
||||||
c_argv.o: ../have_stdlib.h
|
c_argv.o: ../have_stdlib.h
|
||||||
c_argv.o: ../have_string.h
|
c_argv.o: ../have_string.h
|
||||||
|
c_argv.o: ../have_unused.h
|
||||||
c_argv.o: ../longbits.h
|
c_argv.o: ../longbits.h
|
||||||
c_argv.o: ../md5.h
|
c_argv.o: ../md5.h
|
||||||
c_argv.o: ../nametype.h
|
c_argv.o: ../nametype.h
|
||||||
@@ -561,6 +774,7 @@ c_argv.o: ../shs.h
|
|||||||
c_argv.o: ../shs1.h
|
c_argv.o: ../shs1.h
|
||||||
c_argv.o: ../string.h
|
c_argv.o: ../string.h
|
||||||
c_argv.o: ../value.h
|
c_argv.o: ../value.h
|
||||||
|
c_argv.o: ../win32dll.h
|
||||||
c_argv.o: ../zmath.h
|
c_argv.o: ../zmath.h
|
||||||
c_argv.o: c_argv.c
|
c_argv.o: c_argv.c
|
||||||
c_devnull.o: ../alloc.h
|
c_devnull.o: ../alloc.h
|
||||||
@@ -578,6 +792,7 @@ c_devnull.o: ../have_memmv.h
|
|||||||
c_devnull.o: ../have_newstr.h
|
c_devnull.o: ../have_newstr.h
|
||||||
c_devnull.o: ../have_stdlib.h
|
c_devnull.o: ../have_stdlib.h
|
||||||
c_devnull.o: ../have_string.h
|
c_devnull.o: ../have_string.h
|
||||||
|
c_devnull.o: ../have_unused.h
|
||||||
c_devnull.o: ../longbits.h
|
c_devnull.o: ../longbits.h
|
||||||
c_devnull.o: ../md5.h
|
c_devnull.o: ../md5.h
|
||||||
c_devnull.o: ../nametype.h
|
c_devnull.o: ../nametype.h
|
||||||
@@ -586,6 +801,7 @@ c_devnull.o: ../shs.h
|
|||||||
c_devnull.o: ../shs1.h
|
c_devnull.o: ../shs1.h
|
||||||
c_devnull.o: ../string.h
|
c_devnull.o: ../string.h
|
||||||
c_devnull.o: ../value.h
|
c_devnull.o: ../value.h
|
||||||
|
c_devnull.o: ../win32dll.h
|
||||||
c_devnull.o: ../zmath.h
|
c_devnull.o: ../zmath.h
|
||||||
c_devnull.o: c_devnull.c
|
c_devnull.o: c_devnull.c
|
||||||
c_help.o: ../alloc.h
|
c_help.o: ../alloc.h
|
||||||
@@ -603,6 +819,7 @@ c_help.o: ../have_memmv.h
|
|||||||
c_help.o: ../have_newstr.h
|
c_help.o: ../have_newstr.h
|
||||||
c_help.o: ../have_stdlib.h
|
c_help.o: ../have_stdlib.h
|
||||||
c_help.o: ../have_string.h
|
c_help.o: ../have_string.h
|
||||||
|
c_help.o: ../have_unused.h
|
||||||
c_help.o: ../longbits.h
|
c_help.o: ../longbits.h
|
||||||
c_help.o: ../md5.h
|
c_help.o: ../md5.h
|
||||||
c_help.o: ../nametype.h
|
c_help.o: ../nametype.h
|
||||||
@@ -611,8 +828,36 @@ c_help.o: ../shs.h
|
|||||||
c_help.o: ../shs1.h
|
c_help.o: ../shs1.h
|
||||||
c_help.o: ../string.h
|
c_help.o: ../string.h
|
||||||
c_help.o: ../value.h
|
c_help.o: ../value.h
|
||||||
|
c_help.o: ../win32dll.h
|
||||||
c_help.o: ../zmath.h
|
c_help.o: ../zmath.h
|
||||||
c_help.o: c_help.c
|
c_help.o: c_help.c
|
||||||
|
c_pmodm127.o: ../alloc.h
|
||||||
|
c_pmodm127.o: ../block.h
|
||||||
|
c_pmodm127.o: ../byteswap.h
|
||||||
|
c_pmodm127.o: ../calcerr.h
|
||||||
|
c_pmodm127.o: ../cmath.h
|
||||||
|
c_pmodm127.o: ../config.h
|
||||||
|
c_pmodm127.o: ../custom.h
|
||||||
|
c_pmodm127.o: ../endian_calc.h
|
||||||
|
c_pmodm127.o: ../hash.h
|
||||||
|
c_pmodm127.o: ../have_const.h
|
||||||
|
c_pmodm127.o: ../have_malloc.h
|
||||||
|
c_pmodm127.o: ../have_memmv.h
|
||||||
|
c_pmodm127.o: ../have_newstr.h
|
||||||
|
c_pmodm127.o: ../have_stdlib.h
|
||||||
|
c_pmodm127.o: ../have_string.h
|
||||||
|
c_pmodm127.o: ../have_unused.h
|
||||||
|
c_pmodm127.o: ../longbits.h
|
||||||
|
c_pmodm127.o: ../md5.h
|
||||||
|
c_pmodm127.o: ../nametype.h
|
||||||
|
c_pmodm127.o: ../qmath.h
|
||||||
|
c_pmodm127.o: ../shs.h
|
||||||
|
c_pmodm127.o: ../shs1.h
|
||||||
|
c_pmodm127.o: ../string.h
|
||||||
|
c_pmodm127.o: ../value.h
|
||||||
|
c_pmodm127.o: ../win32dll.h
|
||||||
|
c_pmodm127.o: ../zmath.h
|
||||||
|
c_pmodm127.o: c_pmodm127.c
|
||||||
c_pzasusb8.o: ../alloc.h
|
c_pzasusb8.o: ../alloc.h
|
||||||
c_pzasusb8.o: ../block.h
|
c_pzasusb8.o: ../block.h
|
||||||
c_pzasusb8.o: ../byteswap.h
|
c_pzasusb8.o: ../byteswap.h
|
||||||
@@ -628,6 +873,7 @@ c_pzasusb8.o: ../have_memmv.h
|
|||||||
c_pzasusb8.o: ../have_newstr.h
|
c_pzasusb8.o: ../have_newstr.h
|
||||||
c_pzasusb8.o: ../have_stdlib.h
|
c_pzasusb8.o: ../have_stdlib.h
|
||||||
c_pzasusb8.o: ../have_string.h
|
c_pzasusb8.o: ../have_string.h
|
||||||
|
c_pzasusb8.o: ../have_unused.h
|
||||||
c_pzasusb8.o: ../longbits.h
|
c_pzasusb8.o: ../longbits.h
|
||||||
c_pzasusb8.o: ../md5.h
|
c_pzasusb8.o: ../md5.h
|
||||||
c_pzasusb8.o: ../nametype.h
|
c_pzasusb8.o: ../nametype.h
|
||||||
@@ -636,6 +882,7 @@ c_pzasusb8.o: ../shs.h
|
|||||||
c_pzasusb8.o: ../shs1.h
|
c_pzasusb8.o: ../shs1.h
|
||||||
c_pzasusb8.o: ../string.h
|
c_pzasusb8.o: ../string.h
|
||||||
c_pzasusb8.o: ../value.h
|
c_pzasusb8.o: ../value.h
|
||||||
|
c_pzasusb8.o: ../win32dll.h
|
||||||
c_pzasusb8.o: ../zmath.h
|
c_pzasusb8.o: ../zmath.h
|
||||||
c_pzasusb8.o: c_pzasusb8.c
|
c_pzasusb8.o: c_pzasusb8.c
|
||||||
c_sysinfo.o: ../alloc.h
|
c_sysinfo.o: ../alloc.h
|
||||||
@@ -656,9 +903,9 @@ c_sysinfo.o: ../have_memmv.h
|
|||||||
c_sysinfo.o: ../have_newstr.h
|
c_sysinfo.o: ../have_newstr.h
|
||||||
c_sysinfo.o: ../have_stdlib.h
|
c_sysinfo.o: ../have_stdlib.h
|
||||||
c_sysinfo.o: ../have_string.h
|
c_sysinfo.o: ../have_string.h
|
||||||
|
c_sysinfo.o: ../have_unused.h
|
||||||
c_sysinfo.o: ../hist.h
|
c_sysinfo.o: ../hist.h
|
||||||
c_sysinfo.o: ../longbits.h
|
c_sysinfo.o: ../longbits.h
|
||||||
c_sysinfo.o: ../longlong.h
|
|
||||||
c_sysinfo.o: ../md5.h
|
c_sysinfo.o: ../md5.h
|
||||||
c_sysinfo.o: ../nametype.h
|
c_sysinfo.o: ../nametype.h
|
||||||
c_sysinfo.o: ../prime.h
|
c_sysinfo.o: ../prime.h
|
||||||
@@ -667,6 +914,7 @@ c_sysinfo.o: ../shs.h
|
|||||||
c_sysinfo.o: ../shs1.h
|
c_sysinfo.o: ../shs1.h
|
||||||
c_sysinfo.o: ../string.h
|
c_sysinfo.o: ../string.h
|
||||||
c_sysinfo.o: ../value.h
|
c_sysinfo.o: ../value.h
|
||||||
|
c_sysinfo.o: ../win32dll.h
|
||||||
c_sysinfo.o: ../zmath.h
|
c_sysinfo.o: ../zmath.h
|
||||||
c_sysinfo.o: ../zrand.h
|
c_sysinfo.o: ../zrand.h
|
||||||
c_sysinfo.o: ../zrandom.h
|
c_sysinfo.o: ../zrandom.h
|
||||||
@@ -694,5 +942,6 @@ custtbl.o: ../shs.h
|
|||||||
custtbl.o: ../shs1.h
|
custtbl.o: ../shs1.h
|
||||||
custtbl.o: ../string.h
|
custtbl.o: ../string.h
|
||||||
custtbl.o: ../value.h
|
custtbl.o: ../value.h
|
||||||
|
custtbl.o: ../win32dll.h
|
||||||
custtbl.o: ../zmath.h
|
custtbl.o: ../zmath.h
|
||||||
custtbl.o: custtbl.c
|
custtbl.o: custtbl.c
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: argv.cal,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
* @(#) $Id: argv.cal,v 29.3 2004/03/31 05:03:02 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/argv.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/argv.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/03/10 00:27:17
|
* Under source code control: 1997/03/10 00:27:17
|
||||||
@@ -34,9 +34,14 @@
|
|||||||
* NOTE: You must use a calc that was compiled with ALLOW_CUSTOM= -DCUSTOM
|
* NOTE: You must use a calc that was compiled with ALLOW_CUSTOM= -DCUSTOM
|
||||||
* and run with a -C arg.
|
* and run with a -C arg.
|
||||||
*/
|
*/
|
||||||
|
if (config("compile_custom") == 0) {
|
||||||
|
quit "calc compiled without -DCUSTOM";
|
||||||
|
} else if (config("allow_custom") == 0) {
|
||||||
|
quit "calc was run without the -D command line option";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
define argv()
|
define argv_test()
|
||||||
{
|
{
|
||||||
local i; /* arg number */
|
local i; /* arg number */
|
||||||
local junk; /* throw away value */
|
local junk; /* throw away value */
|
||||||
@@ -54,7 +59,3 @@ define argv()
|
|||||||
}
|
}
|
||||||
return i-1;
|
return i-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config("resource_debug") >= 0) {
|
|
||||||
print "argv(var, ...) defined";
|
|
||||||
}
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* c_argv - a custom function display info about its args
|
* c_argv - a custom function display info about its args
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll
|
* Copyright (C) 1999-2004 Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: c_argv.c,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
* @(#) $Id: c_argv.c,v 29.4 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_argv.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_argv.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/03/09 20:27:37
|
* Under source code control: 1997/03/09 20:27:37
|
||||||
@@ -40,6 +40,8 @@
|
|||||||
#include "../config.h"
|
#include "../config.h"
|
||||||
#include "../calc.h"
|
#include "../calc.h"
|
||||||
|
|
||||||
|
#include "../have_unused.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* c_argv - a custom function display info about its args
|
* c_argv - a custom function display info about its args
|
||||||
*
|
*
|
||||||
@@ -51,7 +53,7 @@
|
|||||||
*/
|
*/
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
VALUE
|
VALUE
|
||||||
c_argv(char *name, int count, VALUE **vals)
|
c_argv(char UNUSED *name, int count, VALUE **vals)
|
||||||
{
|
{
|
||||||
VALUE result; /* what we will return */
|
VALUE result; /* what we will return */
|
||||||
ZVALUE zfilelen; /* length of a file as a ZVALUE */
|
ZVALUE zfilelen; /* length of a file as a ZVALUE */
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* c_devnull - a custom function that does nothing
|
* c_devnull - a custom function that does nothing
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll
|
* Copyright (C) 1999-2004 Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: c_devnull.c,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
* @(#) $Id: c_devnull.c,v 29.4 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_devnull.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_devnull.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/03/09 17:49:12
|
* Under source code control: 1997/03/09 17:49:12
|
||||||
@@ -36,6 +36,8 @@
|
|||||||
#include "../value.h"
|
#include "../value.h"
|
||||||
#include "../custom.h"
|
#include "../custom.h"
|
||||||
|
|
||||||
|
#include "../have_unused.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* c_devnull - a custom function that does nothing
|
* c_devnull - a custom function that does nothing
|
||||||
@@ -45,7 +47,7 @@
|
|||||||
*/
|
*/
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
VALUE
|
VALUE
|
||||||
c_devnull(char *name, int count, VALUE **vals)
|
c_devnull(char UNUSED *name, int UNUSED count, VALUE UNUSED **vals)
|
||||||
{
|
{
|
||||||
VALUE result; /* what we will return */
|
VALUE result; /* what we will return */
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* c_help - custom help function
|
* c_help - custom help function
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll
|
* Copyright (C) 1999-2004 Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: c_help.c,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
* @(#) $Id: c_help.c,v 29.4 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_help.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_help.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/03/09 05:25:41
|
* Under source code control: 1997/03/09 05:25:41
|
||||||
@@ -36,6 +36,8 @@
|
|||||||
#include "../value.h"
|
#include "../value.h"
|
||||||
#include "../custom.h"
|
#include "../custom.h"
|
||||||
|
|
||||||
|
#include "../have_unused.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* c_help - custom help function
|
* c_help - custom help function
|
||||||
@@ -56,7 +58,7 @@
|
|||||||
*/
|
*/
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
VALUE
|
VALUE
|
||||||
c_help(char *name, int count, VALUE **vals)
|
c_help(char UNUSED *name, int UNUSED count, VALUE **vals)
|
||||||
{
|
{
|
||||||
VALUE result; /* what we will return */
|
VALUE result; /* what we will return */
|
||||||
|
|
||||||
|
272
custom/c_pmodm127.c
Normal file
272
custom/c_pmodm127.c
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
/*
|
||||||
|
* c_pmodm127 - calculate q mod 2^(2^127-1)
|
||||||
|
*
|
||||||
|
* Copyright (C) 2004 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.3 $
|
||||||
|
* @(#) $Id: c_pmodm127.c,v 29.3 2004/07/29 09:48:31 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_pmodm127.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2004/07/28 22:12:25
|
||||||
|
* File existed as early as: 2004
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(CUSTOM)
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "../have_const.h"
|
||||||
|
#include "../value.h"
|
||||||
|
#include "../custom.h"
|
||||||
|
#include "../zmath.h"
|
||||||
|
|
||||||
|
#include "../have_unused.h"
|
||||||
|
|
||||||
|
/* 2^255 */
|
||||||
|
static HALF h255[] = {
|
||||||
|
#if BASEB == 32
|
||||||
|
(HALF)0x00000000, (HALF)0x00000000, (HALF)0x00000000, (HALF)0x00000000,
|
||||||
|
(HALF)0x00000000, (HALF)0x00000000, (HALF)0x00000000, (HALF)0x80000000
|
||||||
|
#else /* BASEB == 32 */
|
||||||
|
(HALF)0x0000, (HALF)0x0000, (HALF)0x0000, (HALF)0x0000,
|
||||||
|
(HALF)0x0000, (HALF)0x0000, (HALF)0x0000, (HALF)0x0000,
|
||||||
|
(HALF)0x0000, (HALF)0x0000, (HALF)0x0000, (HALF)0x0000,
|
||||||
|
(HALF)0x0000, (HALF)0x0000, (HALF)0x0000, (HALF)0x8000
|
||||||
|
#endif /* BASEB == 32 */
|
||||||
|
};
|
||||||
|
ZVALUE p255 = {
|
||||||
|
h255, 8, 0
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* static declarations */
|
||||||
|
static void zmod5_or_zmod(ZVALUE *zp);
|
||||||
|
static BOOL havelastmod = FALSE;
|
||||||
|
static ZVALUE lastmod[1];
|
||||||
|
static ZVALUE lastmodinv[1];
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* c_pmodm127 - calculate q mod 2^(2^127-1)
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* count = 1;
|
||||||
|
* vals[0] real number; (q - potential factor)
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* result real number; (q mod 2^(2^127-1))
|
||||||
|
*/
|
||||||
|
/*ARGSUSED*/
|
||||||
|
VALUE
|
||||||
|
c_pmodm127(char UNUSED *name, int UNUSED count, VALUE **vals)
|
||||||
|
{
|
||||||
|
VALUE result; /* what we will return */
|
||||||
|
ZVALUE q; /* test factor */
|
||||||
|
ZVALUE temp; /* temp calculation value */
|
||||||
|
int i; /* exponent value */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* arg check
|
||||||
|
*/
|
||||||
|
result.v_type = V_NULL;
|
||||||
|
if (vals[0]->v_type != V_NUM) {
|
||||||
|
math_error("Non-numeric argument for pmodm127");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
if (qisfrac(vals[0]->v_num)) {
|
||||||
|
math_error("Non-integer argument for pmodm127");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
if (qisneg(vals[0]->v_num) || qiszero(vals[0]->v_num)) {
|
||||||
|
math_error("argument for pmodm127 <= 0");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* look at the numerator
|
||||||
|
*/
|
||||||
|
q = vals[0]->v_num->num;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* setup lastmod with q
|
||||||
|
*/
|
||||||
|
if (havelastmod && zcmp(q, *lastmod)) {
|
||||||
|
zfree(*lastmod);
|
||||||
|
zfree(*lastmodinv);
|
||||||
|
havelastmod = FALSE;
|
||||||
|
}
|
||||||
|
if (!havelastmod) {
|
||||||
|
zcopy(q, lastmod);
|
||||||
|
zbitvalue(2 * q.len * BASEB, &temp);
|
||||||
|
zquo(temp, q, lastmodinv, 0);
|
||||||
|
zfree(temp);
|
||||||
|
havelastmod = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* start with 2^255
|
||||||
|
*/
|
||||||
|
result.v_num = qalloc();
|
||||||
|
zcopy(p255, &result.v_num->num);
|
||||||
|
result.v_type = V_NUM;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* compute 2^(2^127-1) mod q by modular exponentation
|
||||||
|
*
|
||||||
|
* We implement the following calc code in C:
|
||||||
|
*
|
||||||
|
* (* given q, our test factor, as the arg to this function *)
|
||||||
|
* result = 2^255;
|
||||||
|
* for (i=8; i < 127; ++i) {
|
||||||
|
* result %= q; (* mod *)
|
||||||
|
* result *= result; (* square *)
|
||||||
|
* result <<= 1; (* times 2 *)
|
||||||
|
* }
|
||||||
|
* result %= q; (* result is now 2^(2^127-1) % q *)
|
||||||
|
*/
|
||||||
|
for (i=8; i<127; ++i) {
|
||||||
|
#if 0
|
||||||
|
/* use of zmod is a bit slower than zmod5_or_zmod */
|
||||||
|
(void) zmod(result.v_num->num, *lastmod, &temp, 0);
|
||||||
|
zfree(result.v_num->num);
|
||||||
|
result.v_num->num = temp;
|
||||||
|
#else
|
||||||
|
zmod5_or_zmod(&result.v_num->num); /* mod */
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
/* use of zmul is slightly slower than zsquare */
|
||||||
|
zmul(result.v_num->num, result.v_num->num, &temp); /* square */
|
||||||
|
#else
|
||||||
|
zsquare(result.v_num->num, &temp); /* square */
|
||||||
|
#endif
|
||||||
|
/* XXX - we could manually shift to speed up a tiny bit */
|
||||||
|
zfree(result.v_num->num);
|
||||||
|
zshift(temp, 1, &result.v_num->num); /* times 2 */
|
||||||
|
zfree(temp);
|
||||||
|
}
|
||||||
|
zmod5_or_zmod(&result.v_num->num); /* result = 2^(2^127-1) % q */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cleanup and return result
|
||||||
|
*/
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* zmod5_or_zmod - fast integer modulo the modulus computation
|
||||||
|
*
|
||||||
|
* "borrowed" from ../zmod.c
|
||||||
|
*
|
||||||
|
* Given the address of a positive integer whose word count does not
|
||||||
|
* exceed twice that of the modulus stored at lastmod, to evaluate and store
|
||||||
|
* at that address the value of the integer modulo the modulus.
|
||||||
|
*
|
||||||
|
* Unlike the static routine in ../zmod.c, we will call the zmod and return
|
||||||
|
* the result of the zmod5_or_zmod conditions do not apply to the argument
|
||||||
|
* and saved mod.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
zmod5_or_zmod(ZVALUE *zp)
|
||||||
|
{
|
||||||
|
LEN len, modlen, j;
|
||||||
|
ZVALUE tmp1, tmp2;
|
||||||
|
ZVALUE z1, z2, z3;
|
||||||
|
HALF *a, *b;
|
||||||
|
FULL f;
|
||||||
|
HALF u;
|
||||||
|
|
||||||
|
int subcount = 0;
|
||||||
|
|
||||||
|
if (zrel(*zp, *lastmod) < 0)
|
||||||
|
return;
|
||||||
|
modlen = lastmod->len;
|
||||||
|
len = zp->len;
|
||||||
|
z1.v = zp->v + modlen - 1;
|
||||||
|
z1.len = len - modlen + 1;
|
||||||
|
z1.sign = z2.sign = z3.sign = 0;
|
||||||
|
if (z1.len > modlen + 1) {
|
||||||
|
/* in ../zmod.c we did a math_error("Bad call to zmod5!!!"); */
|
||||||
|
/* here we just call the slower zmod and return the result */
|
||||||
|
(void) zmod(*zp, *lastmod, &tmp1, 0);
|
||||||
|
/* replace zp with tmp1 mod result */
|
||||||
|
zfree(*zp);
|
||||||
|
*zp = tmp1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
z2.v = lastmodinv->v + modlen + 1 - z1.len;
|
||||||
|
z2.len = lastmodinv->len - modlen - 1 + z1.len;
|
||||||
|
zmul(z1, z2, &tmp1);
|
||||||
|
z3.v = tmp1.v + z1.len;
|
||||||
|
z3.len = tmp1.len - z1.len;
|
||||||
|
if (z3.len > 0) {
|
||||||
|
zmul(z3, *lastmod, &tmp2);
|
||||||
|
j = modlen;
|
||||||
|
a = zp->v;
|
||||||
|
b = tmp2.v;
|
||||||
|
u = 0;
|
||||||
|
len = modlen;
|
||||||
|
while (j-- > 0) {
|
||||||
|
f = (FULL) *a - (FULL) *b++ - (FULL) u;
|
||||||
|
*a++ = (HALF) f;
|
||||||
|
u = - (HALF) (f >> BASEB);
|
||||||
|
}
|
||||||
|
if (z1.len > 1) {
|
||||||
|
len++;
|
||||||
|
if (tmp2.len > modlen)
|
||||||
|
f = (FULL) *a - (FULL) *b - (FULL) u;
|
||||||
|
else
|
||||||
|
f = (FULL) *a - (FULL) u;
|
||||||
|
*a++ = (HALF) f;
|
||||||
|
}
|
||||||
|
while (len > 0 && *--a == 0)
|
||||||
|
len--;
|
||||||
|
zp->len = len;
|
||||||
|
zfree(tmp2);
|
||||||
|
}
|
||||||
|
zfree(tmp1);
|
||||||
|
while (len > 0 && zrel(*zp, *lastmod) >= 0) {
|
||||||
|
subcount++;
|
||||||
|
if (subcount > 2) {
|
||||||
|
math_error("Too many subtractions in zmod5_or_zmod");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
j = modlen;
|
||||||
|
a = zp->v;
|
||||||
|
b = lastmod->v;
|
||||||
|
u = 0;
|
||||||
|
while (j-- > 0) {
|
||||||
|
f = (FULL) *a - (FULL) *b++ - (FULL) u;
|
||||||
|
*a++ = (HALF) f;
|
||||||
|
u = - (HALF) (f >> BASEB);
|
||||||
|
}
|
||||||
|
if (len > modlen) {
|
||||||
|
f = (FULL) *a - (FULL) u;
|
||||||
|
*a++ = (HALF) f;
|
||||||
|
}
|
||||||
|
while (len > 0 && *--a == 0)
|
||||||
|
len--;
|
||||||
|
zp->len = len;
|
||||||
|
}
|
||||||
|
if (len == 0)
|
||||||
|
zp->len = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CUSTOM */
|
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* c_pzasusb8 - print numereator as a string of USB8s
|
* c_pzasusb8 - print numereator as a string of USB8s
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Ernest Bowen
|
* Copyright (C) 1999-2004 Ernest Bowen
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: c_pzasusb8.c,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
* @(#) $Id: c_pzasusb8.c,v 29.4 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_pzasusb8.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_pzasusb8.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1999/10/06 03:12:25
|
* Under source code control: 1999/10/06 03:12:25
|
||||||
@@ -37,6 +37,8 @@
|
|||||||
#include "../custom.h"
|
#include "../custom.h"
|
||||||
#include "../zmath.h"
|
#include "../zmath.h"
|
||||||
|
|
||||||
|
#include "../have_unused.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* c_pzasusb8 - print numereator as a string of USB8s
|
* c_pzasusb8 - print numereator as a string of USB8s
|
||||||
*
|
*
|
||||||
@@ -49,7 +51,7 @@
|
|||||||
*/
|
*/
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
VALUE
|
VALUE
|
||||||
c_pzasusb8(char *name, int count, VALUE **vals)
|
c_pzasusb8(char UNUSED *name, int UNUSED count, VALUE **vals)
|
||||||
{
|
{
|
||||||
VALUE result; /* what we will return */
|
VALUE result; /* what we will return */
|
||||||
ZVALUE z; /* numerator of the value */
|
ZVALUE z; /* numerator of the value */
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* c_sysinfo - names and values of selected #defines
|
* c_sysinfo - names and values of selected #defines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll
|
* Copyright (C) 1999,2004 Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 29.10 $
|
||||||
* @(#) $Id: c_sysinfo.c,v 29.4 2000/07/17 15:37:12 chongo Exp $
|
* @(#) $Id: c_sysinfo.c,v 29.10 2004/03/31 05:02:10 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_sysinfo.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_sysinfo.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/03/09 23:14:40
|
* Under source code control: 1997/03/09 23:14:40
|
||||||
@@ -42,7 +42,6 @@
|
|||||||
#include "../calc.h"
|
#include "../calc.h"
|
||||||
#include "../longbits.h"
|
#include "../longbits.h"
|
||||||
#define CHECK_L_FORMAT
|
#define CHECK_L_FORMAT
|
||||||
#include "../longlong.h"
|
|
||||||
#include "../block.h"
|
#include "../block.h"
|
||||||
#include "../calcerr.h"
|
#include "../calcerr.h"
|
||||||
#include "../conf.h"
|
#include "../conf.h"
|
||||||
@@ -53,6 +52,8 @@
|
|||||||
#include "../zrand.h"
|
#include "../zrand.h"
|
||||||
#include "../zrandom.h"
|
#include "../zrandom.h"
|
||||||
|
|
||||||
|
#include "../have_unused.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sys_info - names and values of selected #defines
|
* sys_info - names and values of selected #defines
|
||||||
@@ -64,7 +65,7 @@ struct infoname {
|
|||||||
FULL nmbr; /* if str==NULL ==> value fo #define as a FULL */
|
FULL nmbr; /* if str==NULL ==> value fo #define as a FULL */
|
||||||
};
|
};
|
||||||
static struct infoname sys_info[] = {
|
static struct infoname sys_info[] = {
|
||||||
{"A55", "slots in an additive 55 table", NULL, (FULL)A55},
|
{"S100", "slots in an subtractive 100 table", NULL, (FULL)S100},
|
||||||
{"BASE", "base for calculations", NULL, (FULL)BASE},
|
{"BASE", "base for calculations", NULL, (FULL)BASE},
|
||||||
{"BASE1", "one less than base", NULL, (FULL)BASE},
|
{"BASE1", "one less than base", NULL, (FULL)BASE},
|
||||||
{"BASEB", "bits in the calculation base", NULL, (FULL)BASEB},
|
{"BASEB", "bits in the calculation base", NULL, (FULL)BASEB},
|
||||||
@@ -102,7 +103,6 @@ static struct infoname sys_info[] = {
|
|||||||
{"INIT_K", "initial 2nd walking a55 table index", NULL, (FULL)INIT_K},
|
{"INIT_K", "initial 2nd walking a55 table index", NULL, (FULL)INIT_K},
|
||||||
{"INODE_BITS", "inode number size in bits", NULL, (FULL)INODE_BITS},
|
{"INODE_BITS", "inode number size in bits", NULL, (FULL)INODE_BITS},
|
||||||
{"LITTLE_ENDIAN", "Least Significant Byte first symbol", NULL, (FULL)LITTLE_ENDIAN},
|
{"LITTLE_ENDIAN", "Least Significant Byte first symbol", NULL, (FULL)LITTLE_ENDIAN},
|
||||||
{"LONGLONG_BITS", "length of a long long, or 0", NULL, (FULL)LONGLONG_BITS},
|
|
||||||
{"LONG_BITS", "bit length of a long", NULL, (FULL)LONG_BITS},
|
{"LONG_BITS", "bit length of a long", NULL, (FULL)LONG_BITS},
|
||||||
{"MAP_POPCNT", "number of odd primes in pr_map", NULL, (FULL)MAP_POPCNT},
|
{"MAP_POPCNT", "number of odd primes in pr_map", NULL, (FULL)MAP_POPCNT},
|
||||||
{"MAX_CALCRC", "maximum allowed length of $CALCRC", NULL, (FULL)MAX_CALCRC},
|
{"MAX_CALCRC", "maximum allowed length of $CALCRC", NULL, (FULL)MAX_CALCRC},
|
||||||
@@ -128,8 +128,6 @@ static struct infoname sys_info[] = {
|
|||||||
{"MAX_SM_PRIME", "larest 32 bit prime", NULL, (FULL)MAX_SM_PRIME},
|
{"MAX_SM_PRIME", "larest 32 bit prime", NULL, (FULL)MAX_SM_PRIME},
|
||||||
{"MAX_SM_VAL", "larest 32 bit value", NULL, (FULL)MAX_SM_VAL},
|
{"MAX_SM_VAL", "larest 32 bit value", NULL, (FULL)MAX_SM_VAL},
|
||||||
{"MUL_ALG2", "default size for alternative multiply", NULL, (FULL)MUL_ALG2},
|
{"MUL_ALG2", "default size for alternative multiply", NULL, (FULL)MUL_ALG2},
|
||||||
{"NEW_EPSILONPREC_DEFAULT", "2^-EPSILON_DEFAULT <= EPSILON_DEFAULT", NULL, (FULL)NEW_EPSILONPREC_DEFAULT},
|
|
||||||
{"NEW_EPSILON_DEFAULT", "newstd EPSILON_DEFAULT", NEW_EPSILON_DEFAULT, (FULL)0},
|
|
||||||
{"NXT_MAP_PRIME", "smallest odd prime not in pr_map", NULL, (FULL)NXT_MAP_PRIME},
|
{"NXT_MAP_PRIME", "smallest odd prime not in pr_map", NULL, (FULL)NXT_MAP_PRIME},
|
||||||
{"NXT_PFACT_VAL", "next prime for higher pfact values", NULL, (FULL)NXT_PFACT_VAL},
|
{"NXT_PFACT_VAL", "next prime for higher pfact values", NULL, (FULL)NXT_PFACT_VAL},
|
||||||
{"OFF_T_BITS", "file offset size in bits", NULL, (FULL)OFF_T_BITS},
|
{"OFF_T_BITS", "file offset size in bits", NULL, (FULL)OFF_T_BITS},
|
||||||
@@ -181,7 +179,7 @@ static void dump_mening_value(void); /* custom("sysinfo", 2) */
|
|||||||
*/
|
*/
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
VALUE
|
VALUE
|
||||||
c_sysinfo(char *name, int count, VALUE **vals)
|
c_sysinfo(char UNUSED *name, int count, VALUE **vals)
|
||||||
{
|
{
|
||||||
VALUE result; /* what we will return */
|
VALUE result; /* what we will return */
|
||||||
struct infoname *p; /* current infoname */
|
struct infoname *p; /* current infoname */
|
||||||
@@ -317,30 +315,16 @@ dump_name_value(void)
|
|||||||
/* dump the entire table */
|
/* dump the entire table */
|
||||||
for (p = sys_info; p->name != NULL; ++p) {
|
for (p = sys_info; p->name != NULL; ++p) {
|
||||||
if (p->str == NULL) {
|
if (p->str == NULL) {
|
||||||
#if LONG_BITS == FULL_BITS || FULL_BITS == 32 || !defined(HAVE_LONGLONG)
|
#if LONG_BITS == FULL_BITS || FULL_BITS == 32
|
||||||
printf("%s%-23s\t%-8lu\t(0x%lx)\n",
|
printf("%s%-23s\t%-8lu\t(0x%lx)\n",
|
||||||
(conf->tab_ok ? "\t" : ""), p->name,
|
(conf->tab_ok ? "\t" : ""), p->name,
|
||||||
(unsigned long)p->nmbr,
|
(unsigned long)p->nmbr,
|
||||||
(unsigned long)p->nmbr);
|
(unsigned long)p->nmbr);
|
||||||
#else
|
#else
|
||||||
/*
|
|
||||||
* Determine of %ld can print a 64 bit long long.
|
|
||||||
*
|
|
||||||
* Some systems that can make use of %ld to print a
|
|
||||||
* a 64 bit value do not support the %lld type.
|
|
||||||
* So we will only try %lld if %ld does not work.
|
|
||||||
*/
|
|
||||||
# if defined(L64_FORMAT)
|
|
||||||
printf("%s%-23s\t%-8lu\t(0x%lx)\n",
|
|
||||||
(conf->tab_ok ? "\t" : ""), p->name,
|
|
||||||
(unsigned long long)p->nmbr,
|
|
||||||
(unsigned long long)p->nmbr);
|
|
||||||
# else /* L64_FORMAT */
|
|
||||||
printf("%s%-23s\t%-8llu\t(0x%llx)\n",
|
printf("%s%-23s\t%-8llu\t(0x%llx)\n",
|
||||||
(conf->tab_ok ? "\t" : ""), p->name,
|
(conf->tab_ok ? "\t" : ""), p->name,
|
||||||
(unsigned long long)p->nmbr,
|
(unsigned long long)p->nmbr,
|
||||||
(unsigned long long)p->nmbr);
|
(unsigned long long)p->nmbr);
|
||||||
# endif /* L64_FORMAT */
|
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
printf("%s%-23s\t\"%s\"\n",
|
printf("%s%-23s\t\"%s\"\n",
|
||||||
@@ -362,25 +346,16 @@ dump_mening_value(void)
|
|||||||
/* dump the entire table */
|
/* dump the entire table */
|
||||||
for (p = sys_info; p->name != NULL; ++p) {
|
for (p = sys_info; p->name != NULL; ++p) {
|
||||||
if (p->str == NULL) {
|
if (p->str == NULL) {
|
||||||
#if LONG_BITS == FULL_BITS || FULL_BITS == 32 || !defined(HAVE_LONGLONG)
|
#if LONG_BITS == FULL_BITS || FULL_BITS == 32
|
||||||
printf("%s%-36.36s\t%-8lu\t(0x%lx)\n",
|
printf("%s%-36.36s\t%-8lu\t(0x%lx)\n",
|
||||||
(conf->tab_ok ? "\t" : ""), p->meaning,
|
(conf->tab_ok ? "\t" : ""), p->meaning,
|
||||||
(unsigned long)p->nmbr,
|
(unsigned long)p->nmbr,
|
||||||
(unsigned long)p->nmbr);
|
(unsigned long)p->nmbr);
|
||||||
#else
|
#else
|
||||||
# if defined(L64_FORMAT)
|
|
||||||
/* %ld prints all 64 bits, use %ld */
|
|
||||||
printf("%s%-36.36s\t%-8lu\t(0x%lx)\n",
|
|
||||||
(conf->tab_ok ? "\t" : ""), p->meaning,
|
|
||||||
(unsigned long long)p->nmbr,
|
|
||||||
(unsigned long long)p->nmbr);
|
|
||||||
# else /* L64_FORMAT */
|
|
||||||
/* %ld prints lower 32 bits only, use %lld */
|
|
||||||
printf("%s%-36.36s\t%-8llu\t(0x%llx)\n",
|
printf("%s%-36.36s\t%-8llu\t(0x%llx)\n",
|
||||||
(conf->tab_ok ? "\t" : ""), p->meaning,
|
(conf->tab_ok ? "\t" : ""), p->meaning,
|
||||||
(unsigned long long)p->nmbr,
|
(unsigned long long)p->nmbr,
|
||||||
(unsigned long long)p->nmbr);
|
(unsigned long long)p->nmbr);
|
||||||
# endif /* L64_FORMAT */
|
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
printf("%s%-36.36s\t\"%s\"\n",
|
printf("%s%-36.36s\t\"%s\"\n",
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: custtbl.c,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
* @(#) $Id: custtbl.c,v 29.3 2004/07/29 08:37:53 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/custtbl.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/custtbl.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/03/09 02:28:54
|
* Under source code control: 1997/03/09 02:28:54
|
||||||
@@ -56,6 +56,7 @@ extern VALUE c_devnull(char*, int, VALUE**);
|
|||||||
extern VALUE c_help(char*, int, VALUE**);
|
extern VALUE c_help(char*, int, VALUE**);
|
||||||
extern VALUE c_sysinfo(char*, int, VALUE**);
|
extern VALUE c_sysinfo(char*, int, VALUE**);
|
||||||
extern VALUE c_pzasusb8(char*, int, VALUE**);
|
extern VALUE c_pzasusb8(char*, int, VALUE**);
|
||||||
|
extern VALUE c_pmodm127(char*, int, VALUE**);
|
||||||
|
|
||||||
|
|
||||||
#endif /* CUSTOM */
|
#endif /* CUSTOM */
|
||||||
@@ -108,6 +109,9 @@ CONST struct custom cust[] = {
|
|||||||
{ "pzasusb8", "print ZCALUE as USB8",
|
{ "pzasusb8", "print ZCALUE as USB8",
|
||||||
0, 1, c_pzasusb8 },
|
0, 1, c_pzasusb8 },
|
||||||
|
|
||||||
|
{ "pmodm127", "calculate q mod 2^(2^127-1)",
|
||||||
|
1, 1, c_pmodm127 },
|
||||||
|
|
||||||
|
|
||||||
#endif /* CUSTOM */
|
#endif /* CUSTOM */
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* halflen - determine the length of numeric value in HALFs
|
* halflen - determine the length of numeric value in HALFs
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll
|
* Copyright (C) 1999,2004 Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: halflen.cal,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
* @(#) $Id: halflen.cal,v 29.3 2004/03/31 05:03:02 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/halflen.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/halflen.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/03/08 20:51:32
|
* Under source code control: 1997/03/08 20:51:32
|
||||||
@@ -34,11 +34,16 @@
|
|||||||
* NOTE: You must use a calc that was compiled with ALLOW_CUSTOM= -DCUSTOM
|
* NOTE: You must use a calc that was compiled with ALLOW_CUSTOM= -DCUSTOM
|
||||||
* and run with a -C arg.
|
* and run with a -C arg.
|
||||||
*/
|
*/
|
||||||
|
if (config("compile_custom") == 0) {
|
||||||
|
quit "calc compiled without -DCUSTOM";
|
||||||
|
} else if (config("allow_custom") == 0) {
|
||||||
|
quit "calc was run without the -D command line option";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
define halflen(num)
|
define halflen(num)
|
||||||
{
|
{
|
||||||
local baseb = custom("sysinfo","BASEB"); /* bit len of a HALF */
|
local baseb; /* bit len of a HALF */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* firewall
|
* firewall
|
||||||
@@ -47,6 +52,11 @@ define halflen(num)
|
|||||||
return newerror("halflen only works on numeric values");
|
return newerror("halflen only works on numeric values");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* determine baseb
|
||||||
|
*/
|
||||||
|
baseb = custom("sysinfo","BASEB");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* determine the HALF length of a numeric value
|
* determine the HALF length of a numeric value
|
||||||
*/
|
*/
|
||||||
@@ -63,7 +73,3 @@ define halflen(num)
|
|||||||
return newerror("halflen only works on numeric values");
|
return newerror("halflen only works on numeric values");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config("resource_debug") >= 0) {
|
|
||||||
print "halflen(num) defined";
|
|
||||||
}
|
|
||||||
|
78
custom/pmodm127
Normal file
78
custom/pmodm127
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
NAME
|
||||||
|
pmodm127 - calculate q mod 2^(2^127-1)
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
custom("pmodm127", q)
|
||||||
|
|
||||||
|
TYPES
|
||||||
|
q int > 0
|
||||||
|
|
||||||
|
return int
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
|
||||||
|
This custom function will return the value:
|
||||||
|
|
||||||
|
q mod 2^(2^127-1)
|
||||||
|
|
||||||
|
This custom function serves as a demonstration of how to write
|
||||||
|
a custom function. It performs the equivalent of:
|
||||||
|
|
||||||
|
pmod(2, 2^127-1, q)
|
||||||
|
|
||||||
|
The return value is integer in the half open range: [0, q).
|
||||||
|
|
||||||
|
SPECIAL NOTE:
|
||||||
|
|
||||||
|
Can you find a value, q, for which this custom function returns 1?
|
||||||
|
If you do, send the value of q to chongo using the EMail address
|
||||||
|
found at:
|
||||||
|
|
||||||
|
http://www.isthe.com/chongo/address.html
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
> custom("pmodm127", 65537)
|
||||||
|
32769
|
||||||
|
|
||||||
|
> custom("pmodm127", 2^31-1)
|
||||||
|
8
|
||||||
|
|
||||||
|
> custom("pmodm127", 7^51+2)
|
||||||
|
11228202966269457258557496419097462731193173
|
||||||
|
|
||||||
|
LIMITS
|
||||||
|
calc must be built with ALLOW_CUSTOM= -DCUSTOM
|
||||||
|
calc must be executed with a -C arg.
|
||||||
|
q must be an integer > 0
|
||||||
|
|
||||||
|
LIBRARY
|
||||||
|
none
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
custom
|
||||||
|
|
||||||
|
## Copyright (C) 2004 Landon Curt Noll
|
||||||
|
##
|
||||||
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
## as published by the Free Software Foundation.
|
||||||
|
##
|
||||||
|
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
## Public License for more details.
|
||||||
|
##
|
||||||
|
## A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
##
|
||||||
|
## @(#) $Revision: 29.2 $
|
||||||
|
## @(#) $Id: pmodm127,v 29.2 2004/07/29 09:28:58 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/pmodm127,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 2004/02/25 07:13:15
|
||||||
|
## File existed as early as: 2004
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
137
custom/pmodm127.cal
Normal file
137
custom/pmodm127.cal
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
* pmodm127 - test pmodm127's ability to calculate q mod 2^(2^127-1)
|
||||||
|
*
|
||||||
|
* Copyright (C) 2004 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.2 $
|
||||||
|
* @(#) $Id: pmodm127.cal,v 29.2 2004/07/29 08:35:36 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/pmodm127.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2004/02/25 14:25:32
|
||||||
|
* File existed as early as: 2004
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the custom sample calc files.
|
||||||
|
*
|
||||||
|
* NOTE: You must use a calc that was compiled with ALLOW_CUSTOM= -DCUSTOM
|
||||||
|
* and run with a -C arg.
|
||||||
|
*/
|
||||||
|
if (config("compile_custom") == 0) {
|
||||||
|
quit "calc compiled without -DCUSTOM";
|
||||||
|
} else if (config("allow_custom") == 0) {
|
||||||
|
quit "calc was run without the -D command line option";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
define pmodm127_test1(testcnt)
|
||||||
|
{
|
||||||
|
local q; /* test factor */
|
||||||
|
local m127; /* 2^127-1 */
|
||||||
|
local i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* firewall
|
||||||
|
*/
|
||||||
|
if (!isint(testcnt) || testcnt <= 0) {
|
||||||
|
return newerror("pmodm127_test1 must have an integer count>0");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* perform testcnt divisor tests for primes of form 2*k*(2^127-1)+1
|
||||||
|
*
|
||||||
|
* NOTE: Since this is just a test, we do not need to be optimal.
|
||||||
|
*/
|
||||||
|
m127 = 2^127 - 1;
|
||||||
|
q = 2*4949132165849*m127+1;
|
||||||
|
for (i=0; i < testcnt; ++i) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* determine next prime divisor
|
||||||
|
*/
|
||||||
|
q = nextcand(q, -1, 0, 1, 2*m127);
|
||||||
|
|
||||||
|
/* compare custom function with its pmod() equivalent */
|
||||||
|
if (config("resource_debug") & 8) {
|
||||||
|
print "testing", q;
|
||||||
|
}
|
||||||
|
if (pmod(2, m127, q) != custom("pmodm127", q)) {
|
||||||
|
print "ERROR: pmodm127 failed for ", str(q);
|
||||||
|
return newerror("pmodm127 failed for " + str(q));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* return success count */
|
||||||
|
if (config("resource_debug") & 8) {
|
||||||
|
print "passed", testcnt, "tests";
|
||||||
|
}
|
||||||
|
return testcnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
define pmodm127_test2(testcnt, seed)
|
||||||
|
{
|
||||||
|
local q; /* test factor */
|
||||||
|
local m127; /* 2^127-1 */
|
||||||
|
local i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* firewall
|
||||||
|
*/
|
||||||
|
if (!isint(testcnt) || testcnt <= 0) {
|
||||||
|
return newerror("pmodm127_test2 must have an integer count>0");
|
||||||
|
}
|
||||||
|
if (!isint(seed)) {
|
||||||
|
return newerror("pmodm127_test2 must an integer seed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* perform testcnt divisor tests random integers over [1e51, 1e52)
|
||||||
|
*
|
||||||
|
* NOTE: Since this is just a test, we do not need to be optimal.
|
||||||
|
*/
|
||||||
|
m127 = 2^127 - 1;
|
||||||
|
for (i=0; i < testcnt; ++i) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* determine next prime divisor
|
||||||
|
*/
|
||||||
|
q = rand(1e51, 1e52) | 0x1;
|
||||||
|
if (config("resource_debug") & 8) {
|
||||||
|
print "testing", q;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* compare custom function with its pmod() equivalent */
|
||||||
|
if (pmod(2, m127, q) != custom("pmodm127", q)) {
|
||||||
|
print "ERROR: pmodm127 failed for ", str(q);
|
||||||
|
print "ERROR: ", pmod(2,m127,q), " != ", custom("pmodm127", q);
|
||||||
|
return newerror("pmodm127 failed for " + str(q));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* return success count */
|
||||||
|
if (config("resource_debug") & 8) {
|
||||||
|
print "passed", testcnt, "tests";
|
||||||
|
}
|
||||||
|
return testcnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((config("resource_debug") & 3) && !(config("resource_debug") & 8)) {
|
||||||
|
print "DEBUG: use config('resource_debug',", config("resource_debug")|8:") to enable more debugging";
|
||||||
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* pzasusb8 - print numereator as a string of USB8s
|
* pzasusb8 - print numereator as a string of USB8s
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
* Copyright (C) 1999,2004 Ernest Bowen and Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Primary author: Ernest Bowen
|
* Primary author: Ernest Bowen
|
||||||
*
|
*
|
||||||
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.3 $
|
||||||
* @(#) $Id: pzasusb8.cal,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
* @(#) $Id: pzasusb8.cal,v 29.3 2004/03/31 05:03:02 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/pzasusb8.cal,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/pzasusb8.cal,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1999/10/06 03:11:12
|
* Under source code control: 1999/10/06 03:11:12
|
||||||
@@ -31,6 +31,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* firewall
|
||||||
|
*/
|
||||||
|
if (config("compile_custom") == 0) {
|
||||||
|
quit "calc compiled without -DCUSTOM";
|
||||||
|
} else if (config("allow_custom") == 0) {
|
||||||
|
quit "calc was run without the -D command line option";
|
||||||
|
}
|
||||||
|
|
||||||
print "p(n) prints array in which numerator of n is stored as a";
|
print "p(n) prints array in which numerator of n is stored as a";
|
||||||
print "sequence of 2-hex-digits representing unsigned characters.";
|
print "sequence of 2-hex-digits representing unsigned characters.";
|
||||||
print "h(n) printx n in hex notation. This should be the same as";
|
print "h(n) printx n in hex notation. This should be the same as";
|
||||||
@@ -52,6 +61,5 @@ print "CALC_BYTE_ORDER: ", custom("sysinfo", "CALC_BYTE_ORDER");
|
|||||||
print "BIG_ENDIAN: ", custom("sysinfo", "BIG_ENDIAN");
|
print "BIG_ENDIAN: ", custom("sysinfo", "BIG_ENDIAN");
|
||||||
print "LITTLE_ENDIAN: ", custom("sysinfo", "LITTLE_ENDIAN");
|
print "LITTLE_ENDIAN: ", custom("sysinfo", "LITTLE_ENDIAN");
|
||||||
print "LONG_BITS: ", custom("sysinfo", "LONG_BITS");
|
print "LONG_BITS: ", custom("sysinfo", "LONG_BITS");
|
||||||
print "LONGLONG_BITS: ", custom("sysinfo", "LONGLONG_BITS");
|
|
||||||
print "Calc sizes:";
|
print "Calc sizes:";
|
||||||
show sizes;
|
show sizes;
|
||||||
|
17
endian.c
17
endian.c
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: endian.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: endian.c,v 29.4 2003/01/14 01:50:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/endian.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/endian.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1993/11/15 04:32:58
|
* Under source code control: 1993/11/15 04:32:58
|
||||||
@@ -36,6 +36,11 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "have_stdlib.h"
|
||||||
|
#if defined(HAVE_STDLIB_H)
|
||||||
|
#include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "have_unistd.h"
|
#include "have_unistd.h"
|
||||||
#if defined(HAVE_UNISTD_H)
|
#if defined(HAVE_UNISTD_H)
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@@ -48,8 +53,10 @@ char byte[8] = { (char)0x12, (char)0x36, (char)0x48, (char)0x59,
|
|||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
|
#if !defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN)
|
||||||
/* pointers into the byte order array */
|
/* pointers into the byte order array */
|
||||||
int *intp = (int *)byte;
|
int *intp = (int *)byte;
|
||||||
|
#endif
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
short *shortp = (short *)byte;
|
short *shortp = (short *)byte;
|
||||||
long *longp = (long *)byte;
|
long *longp = (long *)byte;
|
||||||
@@ -69,6 +76,11 @@ main(void)
|
|||||||
printf("#define BIG_ENDIAN\t4321\n");
|
printf("#define BIG_ENDIAN\t4321\n");
|
||||||
printf("#define LITTLE_ENDIAN\t1234\n");
|
printf("#define LITTLE_ENDIAN\t1234\n");
|
||||||
|
|
||||||
|
#if defined(LITTLE_ENDIAN)
|
||||||
|
printf("#define CALC_BYTE_ORDER\tLITTLE_ENDIAN\n");
|
||||||
|
#elif defined(BIG_ENDIAN)
|
||||||
|
printf("#define CALC_BYTE_ORDER\tBIG_ENDIAN\n");
|
||||||
|
#else
|
||||||
/* Determine byte order */
|
/* Determine byte order */
|
||||||
if (intp[0] == 0x12364859) {
|
if (intp[0] == 0x12364859) {
|
||||||
/* Most Significant Byte first */
|
/* Most Significant Byte first */
|
||||||
@@ -81,6 +93,7 @@ main(void)
|
|||||||
"Unknown int Byte Order, set CALC_BYTE_ORDER in Makefile\n");
|
"Unknown int Byte Order, set CALC_BYTE_ORDER in Makefile\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/* exit(0); */
|
/* exit(0); */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
159
file.c
159
file.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* file - file I/O routines callable by users
|
* file - file I/O routines callable by users
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell and Landon Curt Noll
|
* Copyright (C) 1999-2004 David I. Bell and Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.3 $
|
* @(#) $Revision: 29.9 $
|
||||||
* @(#) $Id: file.c,v 29.3 2000/12/17 12:24:42 chongo Exp $
|
* @(#) $Id: file.c,v 29.9 2004/02/23 14:04:01 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1991/07/20 00:21:56
|
* Under source code control: 1991/07/20 00:21:56
|
||||||
@@ -35,7 +35,10 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include "have_unistd.h"
|
||||||
|
#if defined(HAVE_UNISTD_H)
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif /* HAVE_UNISTD_H */
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
#include "longbits.h"
|
#include "longbits.h"
|
||||||
@@ -45,6 +48,10 @@
|
|||||||
#include "file.h"
|
#include "file.h"
|
||||||
#include "calcerr.h"
|
#include "calcerr.h"
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
# include <io.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define READSIZE 1024 /* buffer size for reading */
|
#define READSIZE 1024 /* buffer size for reading */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -151,7 +158,7 @@ file_init(void)
|
|||||||
} else {
|
} else {
|
||||||
fp = (FILE *) fdopen(i, "w");
|
fp = (FILE *) fdopen(i, "w");
|
||||||
if (fp) {
|
if (fp) {
|
||||||
strcpy(files[idnum].mode, "w?");
|
strcpy(files[idnum].mode, "w");
|
||||||
files[idnum].reading = FALSE;
|
files[idnum].reading = FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -200,7 +207,7 @@ openid(char *name, char *mode)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (idnum >= MAXFILES)
|
if (idnum >= MAXFILES)
|
||||||
return -77;
|
return -E_FOPEN3;
|
||||||
|
|
||||||
fiop = &files[3];
|
fiop = &files[3];
|
||||||
for (i = 3; i < MAXFILES; fiop++,i++) {
|
for (i = 3; i < MAXFILES; fiop++,i++) {
|
||||||
@@ -236,11 +243,32 @@ openid(char *name, char *mode)
|
|||||||
fiop->reading = TRUE;
|
fiop->reading = TRUE;
|
||||||
fiop->writing = TRUE;
|
fiop->writing = TRUE;
|
||||||
fiop->action = 0;
|
fiop->action = 0;
|
||||||
if (mode[1] == '\0') {
|
|
||||||
if (*mode == 'r')
|
/*
|
||||||
|
* determine file open mode
|
||||||
|
*
|
||||||
|
* While a leading 'r' is for reading and a leading 'w' is
|
||||||
|
* for writing, the presense of a '+' in the string means
|
||||||
|
* both reading and writing. A leading 'a' means append
|
||||||
|
* which is writing.
|
||||||
|
*/
|
||||||
|
if (mode[0] == 'r') {
|
||||||
|
fiop->reading = TRUE;
|
||||||
|
if (strchr(mode, '+') == NULL) {
|
||||||
fiop->writing = FALSE;
|
fiop->writing = FALSE;
|
||||||
else
|
} else {
|
||||||
|
fiop->writing = TRUE;
|
||||||
|
}
|
||||||
|
} else if (mode[0] == 'w' || mode[0] == 'a') {
|
||||||
|
fiop->writing = TRUE;
|
||||||
|
if (strchr(mode, '+') == NULL) {
|
||||||
fiop->reading = FALSE;
|
fiop->reading = FALSE;
|
||||||
|
} else {
|
||||||
|
fiop->reading = TRUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fiop->reading = FALSE;
|
||||||
|
fiop->writing = FALSE;
|
||||||
}
|
}
|
||||||
strcpy(fiop->mode, mode);
|
strcpy(fiop->mode, mode);
|
||||||
return id;
|
return id;
|
||||||
@@ -339,11 +367,32 @@ reopenid(FILEID id, char *mode, char *name)
|
|||||||
fiop->reading = TRUE;
|
fiop->reading = TRUE;
|
||||||
fiop->writing = TRUE;
|
fiop->writing = TRUE;
|
||||||
fiop->action = 0;
|
fiop->action = 0;
|
||||||
if (mode[1] == '\0') {
|
|
||||||
if (*mode == 'r')
|
/*
|
||||||
|
* determine file open mode
|
||||||
|
*
|
||||||
|
* While a leading 'r' is for reading and a leading 'w' is
|
||||||
|
* for writing, the presense of a '+' in the string means
|
||||||
|
* both reading and writing. A leading 'a' means append
|
||||||
|
* which is writing.
|
||||||
|
*/
|
||||||
|
if (mode[0] == 'r') {
|
||||||
|
fiop->reading = TRUE;
|
||||||
|
if (strchr(mode, '+') == NULL) {
|
||||||
fiop->writing = FALSE;
|
fiop->writing = FALSE;
|
||||||
else
|
} else {
|
||||||
|
fiop->writing = TRUE;
|
||||||
|
}
|
||||||
|
} else if (mode[0] == 'w' || mode[0] == 'a') {
|
||||||
|
fiop->writing = TRUE;
|
||||||
|
if (strchr(mode, '+') == NULL) {
|
||||||
fiop->reading = FALSE;
|
fiop->reading = FALSE;
|
||||||
|
} else {
|
||||||
|
fiop->reading = TRUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fiop->reading = FALSE;
|
||||||
|
fiop->writing = FALSE;
|
||||||
}
|
}
|
||||||
strcpy(fiop->mode, mode);
|
strcpy(fiop->mode, mode);
|
||||||
return id;
|
return id;
|
||||||
@@ -351,13 +400,13 @@ reopenid(FILEID id, char *mode, char *name)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find the file I/O structure for the specified file id, and verify that
|
* Find the file I/O structure for the specified file id, and verifies that
|
||||||
* it is opened in the required manner ('r' for reading or 'w' for writing).
|
* it is opened in the required manner (0 for reading or 1 for writing).
|
||||||
* If mode is 0, then no open checks are made at all, and NULL is then
|
* If writable is -1, then no open checks are made at all and NULL is then
|
||||||
* returned if the id represents a closed file.
|
* returned if the id represents a closed file.
|
||||||
*/
|
*/
|
||||||
FILEIO *
|
FILEIO *
|
||||||
findid(FILEID id, int mode)
|
findid(FILEID id, int writable)
|
||||||
{
|
{
|
||||||
FILEIO *fiop; /* file structure */
|
FILEIO *fiop; /* file structure */
|
||||||
int i;
|
int i;
|
||||||
@@ -376,21 +425,11 @@ findid(FILEID id, int mode)
|
|||||||
if (i == idnum)
|
if (i == idnum)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
switch (mode) {
|
if (writable >= 0) {
|
||||||
case 'r':
|
if ((writable && !fiop->writing) ||
|
||||||
if (!fiop->reading)
|
(!writable && !fiop->reading)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
}
|
||||||
case 'w':
|
|
||||||
if (!fiop->writing)
|
|
||||||
return NULL;
|
|
||||||
break;
|
|
||||||
case 0:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* This should not happen */
|
|
||||||
math_error("Unknown findid mode");
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
}
|
||||||
return fiop;
|
return fiop;
|
||||||
}
|
}
|
||||||
@@ -402,7 +441,7 @@ findid(FILEID id, int mode)
|
|||||||
BOOL
|
BOOL
|
||||||
validid(FILEID id)
|
validid(FILEID id)
|
||||||
{
|
{
|
||||||
return (findid(id, 0) != NULL);
|
return (findid(id, -1) != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -498,7 +537,7 @@ errorid(FILEID id)
|
|||||||
{
|
{
|
||||||
FILEIO *fiop; /* file structure */
|
FILEIO *fiop; /* file structure */
|
||||||
|
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return EOF;
|
return EOF;
|
||||||
return (ferror(fiop->fp) != 0);
|
return (ferror(fiop->fp) != 0);
|
||||||
@@ -513,7 +552,7 @@ eofid(FILEID id)
|
|||||||
{
|
{
|
||||||
FILEIO *fiop; /* file structure */
|
FILEIO *fiop; /* file structure */
|
||||||
|
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return EOF;
|
return EOF;
|
||||||
return (feof(fiop->fp) != 0);
|
return (feof(fiop->fp) != 0);
|
||||||
@@ -528,7 +567,7 @@ flushid(FILEID id)
|
|||||||
{
|
{
|
||||||
FILEIO *fiop; /* file structure */
|
FILEIO *fiop; /* file structure */
|
||||||
|
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
if (!fiop->writing || fiop->action == 'r')
|
if (!fiop->writing || fiop->action == 'r')
|
||||||
@@ -537,6 +576,7 @@ flushid(FILEID id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(_WIN32)
|
||||||
int
|
int
|
||||||
flushall(void)
|
flushall(void)
|
||||||
{
|
{
|
||||||
@@ -552,6 +592,7 @@ flushall(void)
|
|||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
#endif /* Windoz free systems */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -589,7 +630,7 @@ readid(FILEID id, int flags, char **retptr)
|
|||||||
totlen = 0;
|
totlen = 0;
|
||||||
str = NULL;
|
str = NULL;
|
||||||
|
|
||||||
fiop = findid(id, 'r');
|
fiop = findid(id, FALSE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
nlstop = (flags & 1);
|
nlstop = (flags & 1);
|
||||||
@@ -670,7 +711,7 @@ getcharid(FILEID id)
|
|||||||
FILEIO *fiop;
|
FILEIO *fiop;
|
||||||
FILEPOS fpos;
|
FILEPOS fpos;
|
||||||
|
|
||||||
fiop = findid(id, 'r');
|
fiop = findid(id, FALSE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return -2;
|
return -2;
|
||||||
if (fiop->action == 'w') {
|
if (fiop->action == 'w') {
|
||||||
@@ -701,7 +742,7 @@ printid(FILEID id, int flags)
|
|||||||
/*
|
/*
|
||||||
* filewall - file is closed
|
* filewall - file is closed
|
||||||
*/
|
*/
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL) {
|
if (fiop == NULL) {
|
||||||
if (flags & PRINT_UNAMBIG)
|
if (flags & PRINT_UNAMBIG)
|
||||||
math_fmt("FILE %d closed", id);
|
math_fmt("FILE %d closed", id);
|
||||||
@@ -769,7 +810,7 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
|
|||||||
VALUE *vp;
|
VALUE *vp;
|
||||||
char *str;
|
char *str;
|
||||||
int ch;
|
int ch;
|
||||||
unsigned long len;
|
long len;
|
||||||
int oldmode, newmode;
|
int oldmode, newmode;
|
||||||
long olddigits, newdigits;
|
long olddigits, newdigits;
|
||||||
long width, precision;
|
long width, precision;
|
||||||
@@ -778,7 +819,7 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
|
|||||||
BOOL printstring;
|
BOOL printstring;
|
||||||
BOOL printchar;
|
BOOL printchar;
|
||||||
|
|
||||||
fiop = findid(id, 'w');
|
fiop = findid(id, TRUE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
if (fiop->action == 'r') {
|
if (fiop->action == 'r') {
|
||||||
@@ -1005,7 +1046,7 @@ idfputc(FILEID id, int ch)
|
|||||||
FILEPOS fpos;
|
FILEPOS fpos;
|
||||||
|
|
||||||
/* get the file info pointer */
|
/* get the file info pointer */
|
||||||
fiop = findid(id, 'w');
|
fiop = findid(id, TRUE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
if (fiop->action == 'r') {
|
if (fiop->action == 'r') {
|
||||||
@@ -1040,7 +1081,7 @@ idungetc(FILEID id, int ch)
|
|||||||
{
|
{
|
||||||
FILEIO *fiop;
|
FILEIO *fiop;
|
||||||
|
|
||||||
fiop = findid(id, 'r');
|
fiop = findid(id, FALSE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return -2;
|
return -2;
|
||||||
if (fiop->action != 'r')
|
if (fiop->action != 'r')
|
||||||
@@ -1063,7 +1104,7 @@ idfputs(FILEID id, char *str)
|
|||||||
FILEPOS fpos;
|
FILEPOS fpos;
|
||||||
|
|
||||||
/* get the file info pointer */
|
/* get the file info pointer */
|
||||||
fiop = findid(id, 'w');
|
fiop = findid(id, TRUE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@@ -1101,7 +1142,7 @@ idfputstr(FILEID id, char *str)
|
|||||||
FILEPOS fpos;
|
FILEPOS fpos;
|
||||||
|
|
||||||
/* get the file info pointer */
|
/* get the file info pointer */
|
||||||
fiop = findid(id, 'w');
|
fiop = findid(id, TRUE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@@ -1131,7 +1172,7 @@ int
|
|||||||
rewindid(FILEID id)
|
rewindid(FILEID id)
|
||||||
{
|
{
|
||||||
FILEIO *fiop;
|
FILEIO *fiop;
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
rewind(fiop->fp);
|
rewind(fiop->fp);
|
||||||
@@ -1179,7 +1220,7 @@ filepos2z(FILEPOS pos)
|
|||||||
ret.len = FILEPOS_BITS/BASEB;
|
ret.len = FILEPOS_BITS/BASEB;
|
||||||
ret.v = alloc(ret.len);
|
ret.v = alloc(ret.len);
|
||||||
zclearval(ret);
|
zclearval(ret);
|
||||||
SWAP_HALF_IN_FILEPOS(ret.v, &pos);
|
SWAP_HALF_IN_FILEPOS(ret.v, (HALF *)&pos);
|
||||||
ret.sign = 0;
|
ret.sign = 0;
|
||||||
ztrim(&ret);
|
ztrim(&ret);
|
||||||
|
|
||||||
@@ -1319,7 +1360,7 @@ getloc(FILEID id, ZVALUE *res)
|
|||||||
/*
|
/*
|
||||||
* convert id to stream
|
* convert id to stream
|
||||||
*/
|
*/
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL) {
|
if (fiop == NULL) {
|
||||||
/* file not open */
|
/* file not open */
|
||||||
return -1;
|
return -1;
|
||||||
@@ -1344,7 +1385,7 @@ ftellid(FILEID id, ZVALUE *res)
|
|||||||
FILEPOS fpos; /* current file position */
|
FILEPOS fpos; /* current file position */
|
||||||
|
|
||||||
/* get FILEIO */
|
/* get FILEIO */
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
@@ -1367,7 +1408,7 @@ fseekid(FILEID id, ZVALUE offset, int whence)
|
|||||||
int ret = 0; /* return code */
|
int ret = 0; /* return code */
|
||||||
|
|
||||||
/* setup */
|
/* setup */
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
@@ -1492,7 +1533,7 @@ setloc(FILEID id, ZVALUE zpos)
|
|||||||
/*
|
/*
|
||||||
* convert id to stream
|
* convert id to stream
|
||||||
*/
|
*/
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL) {
|
if (fiop == NULL) {
|
||||||
/* file not open */
|
/* file not open */
|
||||||
return -1;
|
return -1;
|
||||||
@@ -1660,7 +1701,7 @@ getsize(FILEID id, ZVALUE *res)
|
|||||||
/*
|
/*
|
||||||
* convert id to stream
|
* convert id to stream
|
||||||
*/
|
*/
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL) {
|
if (fiop == NULL) {
|
||||||
/* file not open */
|
/* file not open */
|
||||||
return 1;
|
return 1;
|
||||||
@@ -1696,7 +1737,7 @@ get_device(FILEID id, ZVALUE *dev)
|
|||||||
/*
|
/*
|
||||||
* convert id to stream
|
* convert id to stream
|
||||||
*/
|
*/
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL) {
|
if (fiop == NULL) {
|
||||||
/* file not open */
|
/* file not open */
|
||||||
return -1;
|
return -1;
|
||||||
@@ -1729,7 +1770,7 @@ get_inode(FILEID id, ZVALUE *inode)
|
|||||||
/*
|
/*
|
||||||
* convert id to stream
|
* convert id to stream
|
||||||
*/
|
*/
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL) {
|
if (fiop == NULL) {
|
||||||
/* file not open */
|
/* file not open */
|
||||||
return -1;
|
return -1;
|
||||||
@@ -1765,7 +1806,7 @@ zfilesize(FILEID id)
|
|||||||
ZVALUE ret; /* file size as a ZVALUE return value */
|
ZVALUE ret; /* file size as a ZVALUE return value */
|
||||||
|
|
||||||
/* file FILEIO */
|
/* file FILEIO */
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL) {
|
if (fiop == NULL) {
|
||||||
/* return neg value for non-file error */
|
/* return neg value for non-file error */
|
||||||
itoz(-1, &ret);
|
itoz(-1, &ret);
|
||||||
@@ -2135,7 +2176,7 @@ fscanfid(FILEID id, char *fmt, int count, VALUE **vals)
|
|||||||
FILE *fp;
|
FILE *fp;
|
||||||
FILEPOS fpos;
|
FILEPOS fpos;
|
||||||
|
|
||||||
fiop = findid(id, 'r');
|
fiop = findid(id, FALSE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
@@ -2399,7 +2440,7 @@ isattyid(FILEID id)
|
|||||||
{
|
{
|
||||||
FILEIO *fiop;
|
FILEIO *fiop;
|
||||||
|
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return -2;
|
return -2;
|
||||||
return isatty(fileno(fiop->fp));
|
return isatty(fileno(fiop->fp));
|
||||||
@@ -2436,7 +2477,7 @@ fsearch(FILEID id, char *str, ZVALUE start, ZVALUE end, ZVALUE *res)
|
|||||||
long k = 0;
|
long k = 0;
|
||||||
|
|
||||||
/* get FILEIO */
|
/* get FILEIO */
|
||||||
fiop = findid(id, 'r');
|
fiop = findid(id, FALSE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
@@ -2555,7 +2596,7 @@ frsearch(FILEID id, char *str, ZVALUE first, ZVALUE last, ZVALUE *res)
|
|||||||
char *s; /* str comparison pointer */
|
char *s; /* str comparison pointer */
|
||||||
|
|
||||||
/* get FILEIO */
|
/* get FILEIO */
|
||||||
fiop = findid(id, 'r');
|
fiop = findid(id, FALSE);
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
@@ -2632,7 +2673,7 @@ findfname(FILEID id)
|
|||||||
{
|
{
|
||||||
FILEIO *fiop;
|
FILEIO *fiop;
|
||||||
|
|
||||||
fiop = findid(id, 0);
|
fiop = findid(id, -1);
|
||||||
|
|
||||||
if (fiop == NULL)
|
if (fiop == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
14
file.h
14
file.h
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.5 $
|
||||||
* @(#) $Id: file.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: file.h,v 29.5 2001/06/08 21:00:58 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1996/05/24 05:55:58
|
* Under source code control: 1996/05/24 05:55:58
|
||||||
@@ -35,7 +35,11 @@
|
|||||||
#define __FILE_H__
|
#define __FILE_H__
|
||||||
|
|
||||||
|
|
||||||
#include "have_fpos.h"
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
|
# include "have_fpos.h"
|
||||||
|
#else
|
||||||
|
# include <calc/have_fpos.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -50,7 +54,7 @@ typedef struct {
|
|||||||
BOOL reading; /* TRUE if opened for reading */
|
BOOL reading; /* TRUE if opened for reading */
|
||||||
BOOL writing; /* TRUE if opened for writing */
|
BOOL writing; /* TRUE if opened for writing */
|
||||||
char action; /* most recent use for 'r', 'w' or 0 */
|
char action; /* most recent use for 'r', 'w' or 0 */
|
||||||
char mode[3]; /* open mode */
|
char mode[sizeof("rb+")];/* open mode */
|
||||||
} FILEIO;
|
} FILEIO;
|
||||||
|
|
||||||
|
|
||||||
@@ -85,7 +89,7 @@ typedef struct {
|
|||||||
/*
|
/*
|
||||||
* external functions
|
* external functions
|
||||||
*/
|
*/
|
||||||
extern FILEIO * findid(FILEID id, int mode);
|
extern FILEIO * findid(FILEID id, int writable);
|
||||||
extern int fgetposid(FILEID id, FILEPOS *ptr);
|
extern int fgetposid(FILEID id, FILEPOS *ptr);
|
||||||
extern int fsetposid(FILEID id, FILEPOS *ptr);
|
extern int fsetposid(FILEID id, FILEPOS *ptr);
|
||||||
extern int get_open_siz(FILE *fp, ZVALUE *res);
|
extern int get_open_siz(FILE *fp, ZVALUE *res);
|
||||||
|
31
fposval.c
31
fposval.c
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.3 $
|
* @(#) $Revision: 29.6 $
|
||||||
* @(#) $Id: fposval.c,v 29.3 2000/12/17 12:25:36 chongo Exp $
|
* @(#) $Id: fposval.c,v 29.6 2001/03/18 03:01:41 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/fposval.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/fposval.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1994/11/05 03:19:52
|
* Under source code control: 1994/11/05 03:19:52
|
||||||
@@ -85,13 +85,16 @@ main(int argc, char **argv)
|
|||||||
* print the file position information
|
* print the file position information
|
||||||
*/
|
*/
|
||||||
#if defined(HAVE_FPOS_POS)
|
#if defined(HAVE_FPOS_POS)
|
||||||
printf("#undef FILEPOS_BITS\n");
|
fileposlen = FPOS_POS_BITS;
|
||||||
printf("#define FILEPOS_BITS %d\n", FPOS_POS_BITS);
|
|
||||||
#else /* ! HAVE_FPOS_POS */
|
#else /* ! HAVE_FPOS_POS */
|
||||||
|
# if defined(FPOS_BITS)
|
||||||
|
fileposlen = FPOS_BITS;
|
||||||
|
# else
|
||||||
fileposlen = sizeof(FILEPOS)*8;
|
fileposlen = sizeof(FILEPOS)*8;
|
||||||
|
# endif
|
||||||
|
#endif /* ! HAVE_FPOS_POS */
|
||||||
printf("#undef FILEPOS_BITS\n");
|
printf("#undef FILEPOS_BITS\n");
|
||||||
printf("#define FILEPOS_BITS %d\n", fileposlen);
|
printf("#define FILEPOS_BITS %d\n", fileposlen);
|
||||||
#endif /* ! HAVE_FPOS_POS */
|
|
||||||
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
||||||
/*
|
/*
|
||||||
* Big Endian
|
* Big Endian
|
||||||
@@ -128,7 +131,11 @@ main(int argc, char **argv)
|
|||||||
/*
|
/*
|
||||||
* print the stat file size information
|
* print the stat file size information
|
||||||
*/
|
*/
|
||||||
|
#if defined(OFF_T_BITS)
|
||||||
|
stsizelen = OFF_T_BITS;
|
||||||
|
#else
|
||||||
stsizelen = sizeof(buf.st_size)*8;
|
stsizelen = sizeof(buf.st_size)*8;
|
||||||
|
#endif
|
||||||
printf("#undef OFF_T_BITS\n");
|
printf("#undef OFF_T_BITS\n");
|
||||||
printf("#define OFF_T_BITS %d\n", stsizelen);
|
printf("#define OFF_T_BITS %d\n", stsizelen);
|
||||||
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
||||||
@@ -162,7 +169,7 @@ main(int argc, char **argv)
|
|||||||
* systems, a off_t is not a scalar hince we must memcpy.
|
* systems, a off_t is not a scalar hince we must memcpy.
|
||||||
*/
|
*/
|
||||||
printf("#define SWAP_HALF_IN_OFF_T(dest, src)\t%s%d%s\n",
|
printf("#define SWAP_HALF_IN_OFF_T(dest, src)\t%s%d%s\n",
|
||||||
"memcpy((void *)(dest), (void *)(src), sizeof(",stsizelen,"))");
|
"memcpy((void *)(dest), (void *)(src), ", stsizelen/8, ")");
|
||||||
#endif /* HAVE_OFF_T_SCALAR */
|
#endif /* HAVE_OFF_T_SCALAR */
|
||||||
#endif /* CALC_BYTE_ORDER == BIG_ENDIAN */
|
#endif /* CALC_BYTE_ORDER == BIG_ENDIAN */
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
@@ -170,7 +177,11 @@ main(int argc, char **argv)
|
|||||||
/*
|
/*
|
||||||
* print the dev_t size
|
* print the dev_t size
|
||||||
*/
|
*/
|
||||||
|
#if defined(DEV_BITS)
|
||||||
|
devlen = DEV_BITS;
|
||||||
|
#else
|
||||||
devlen = sizeof(buf.st_dev)*8;
|
devlen = sizeof(buf.st_dev)*8;
|
||||||
|
#endif
|
||||||
printf("#undef DEV_BITS\n");
|
printf("#undef DEV_BITS\n");
|
||||||
printf("#define DEV_BITS %d\n", devlen);
|
printf("#define DEV_BITS %d\n", devlen);
|
||||||
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
||||||
@@ -199,14 +210,18 @@ main(int argc, char **argv)
|
|||||||
* systems, a DEV is not a scalar hince we must memcpy.
|
* systems, a DEV is not a scalar hince we must memcpy.
|
||||||
*/
|
*/
|
||||||
printf("#define SWAP_HALF_IN_DEV(dest, src)\t%s%d%s\n",
|
printf("#define SWAP_HALF_IN_DEV(dest, src)\t%s%d%s\n",
|
||||||
"memcpy((void *)(dest), (void *)(src), sizeof(",devlen,"))");
|
"memcpy((void *)(dest), (void *)(src), ", devlen/8, ")");
|
||||||
#endif /* CALC_BYTE_ORDER == BIG_ENDIAN */
|
#endif /* CALC_BYTE_ORDER == BIG_ENDIAN */
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* print the ino_t size
|
* print the ino_t size
|
||||||
*/
|
*/
|
||||||
|
#if defined(INODE_BITS)
|
||||||
|
inodelen = INODE_BITS;
|
||||||
|
#else
|
||||||
inodelen = sizeof(buf.st_ino)*8;
|
inodelen = sizeof(buf.st_ino)*8;
|
||||||
|
#endif
|
||||||
printf("#undef INODE_BITS\n");
|
printf("#undef INODE_BITS\n");
|
||||||
printf("#define INODE_BITS %d\n", inodelen);
|
printf("#define INODE_BITS %d\n", inodelen);
|
||||||
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
||||||
@@ -235,7 +250,7 @@ main(int argc, char **argv)
|
|||||||
* systems, a INODE is not a scalar hince we must memcpy.
|
* systems, a INODE is not a scalar hince we must memcpy.
|
||||||
*/
|
*/
|
||||||
printf("#define SWAP_HALF_IN_INODE(dest, src)\t%s%d%s\n",
|
printf("#define SWAP_HALF_IN_INODE(dest, src)\t%s%d%s\n",
|
||||||
"memcpy((void *)(dest), (void *)(src), sizeof(",inodelen,"))");
|
"memcpy((void *)(dest), (void *)(src), ", inodelen/8, ")");
|
||||||
#endif /* CALC_BYTE_ORDER == BIG_ENDIAN */
|
#endif /* CALC_BYTE_ORDER == BIG_ENDIAN */
|
||||||
/* exit(0); */
|
/* exit(0); */
|
||||||
return 0;
|
return 0;
|
||||||
|
186
func.c
186
func.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* func - built-in functions implemented here
|
* func - built-in functions implemented here
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 David I. Bell, Landon Curt Noll and Ernest Bowen
|
* Copyright (C) 1999-2004 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||||
*
|
*
|
||||||
* Primary author: David I. Bell
|
* Primary author: David I. Bell
|
||||||
*
|
*
|
||||||
@@ -19,8 +19,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.5 $
|
* @(#) $Revision: 29.15 $
|
||||||
* @(#) $Id: func.c,v 29.5 2000/12/04 19:32:33 chongo Exp $
|
* @(#) $Id: func.c,v 29.15 2004/07/26 05:55:37 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/func.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/func.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:15
|
* Under source code control: 1990/02/15 01:48:15
|
||||||
@@ -35,6 +35,11 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
# include <io.h>
|
||||||
|
# define _access access
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(FUNCLIST)
|
#if defined(FUNCLIST)
|
||||||
|
|
||||||
#define CONST /* disabled for FUNCLIST in case NATIVE_CC doesn't have it */
|
#define CONST /* disabled for FUNCLIST in case NATIVE_CC doesn't have it */
|
||||||
@@ -79,6 +84,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "have_const.h"
|
#include "have_const.h"
|
||||||
|
#include "have_unused.h"
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
#include "calcerr.h"
|
#include "calcerr.h"
|
||||||
#include "opcodes.h"
|
#include "opcodes.h"
|
||||||
@@ -102,7 +108,7 @@
|
|||||||
/*
|
/*
|
||||||
* forward declarations
|
* forward declarations
|
||||||
*/
|
*/
|
||||||
static NUMBER *base_value(long mode);
|
static NUMBER *base_value(long mode, int defval);
|
||||||
static int strscan(char *s, int count, VALUE **vals);
|
static int strscan(char *s, int count, VALUE **vals);
|
||||||
static int filescan(FILEID id, int count, VALUE **vals);
|
static int filescan(FILEID id, int count, VALUE **vals);
|
||||||
static VALUE f_eval(VALUE *vp);
|
static VALUE f_eval(VALUE *vp);
|
||||||
@@ -302,7 +308,7 @@ f_display(int count, VALUE **vals)
|
|||||||
|
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
static VALUE
|
static VALUE
|
||||||
f_null(int count, VALUE **vals)
|
f_null(int UNUSED count, VALUE UNUSED **vals)
|
||||||
{
|
{
|
||||||
VALUE res;
|
VALUE res;
|
||||||
|
|
||||||
@@ -1220,8 +1226,10 @@ f_primetest(int count, NUMBER **vals)
|
|||||||
{
|
{
|
||||||
/* parse args */
|
/* parse args */
|
||||||
switch (count) {
|
switch (count) {
|
||||||
case 1: return itoq((long) qprimetest(vals[0], &_qone_, &_qone_));
|
case 1: return itoq((long) qprimetest(vals[0],
|
||||||
case 2: return itoq((long) qprimetest(vals[0], vals[1], &_qone_));
|
qlink(&_qone_), qlink(&_qone_)));
|
||||||
|
case 2: return itoq((long) qprimetest(vals[0],
|
||||||
|
vals[1], qlink(&_qone_)));
|
||||||
default: return itoq((long) qprimetest(vals[0], vals[1], vals[2]));
|
default: return itoq((long) qprimetest(vals[0], vals[1], vals[2]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2008,7 +2016,7 @@ f_ln(int count, VALUE **vals)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
ctmp.real = vals[0]->v_num;
|
ctmp.real = vals[0]->v_num;
|
||||||
ctmp.imag = &_qzero_;
|
ctmp.imag = qlink(&_qzero_);
|
||||||
ctmp.links = 1;
|
ctmp.links = 1;
|
||||||
c = cln(&ctmp, err);
|
c = cln(&ctmp, err);
|
||||||
break;
|
break;
|
||||||
@@ -3346,7 +3354,7 @@ f_trunc(int count, NUMBER **vals)
|
|||||||
{
|
{
|
||||||
NUMBER *val;
|
NUMBER *val;
|
||||||
|
|
||||||
val = &_qzero_;
|
val = qlink(&_qzero_);
|
||||||
if (count == 2)
|
if (count == 2)
|
||||||
val = vals[1];
|
val = vals[1];
|
||||||
return qtrunc(*vals, val);
|
return qtrunc(*vals, val);
|
||||||
@@ -3428,7 +3436,7 @@ f_btrunc(int count, NUMBER **vals)
|
|||||||
{
|
{
|
||||||
NUMBER *val;
|
NUMBER *val;
|
||||||
|
|
||||||
val = &_qzero_;
|
val = qlink(&_qzero_);
|
||||||
if (count == 2)
|
if (count == 2)
|
||||||
val = vals[1];
|
val = vals[1];
|
||||||
return qbtrunc(*vals, val);
|
return qbtrunc(*vals, val);
|
||||||
@@ -3533,7 +3541,7 @@ f_ceil(VALUE *val)
|
|||||||
tmp.v_subtype = V_NOSUBTYPE;
|
tmp.v_subtype = V_NOSUBTYPE;
|
||||||
|
|
||||||
tmp.v_type = V_NUM;
|
tmp.v_type = V_NUM;
|
||||||
tmp.v_num = &_qone_;
|
tmp.v_num = qlink(&_qone_);
|
||||||
apprvalue(val, &tmp, &tmp, &res);
|
apprvalue(val, &tmp, &tmp, &res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@@ -3550,9 +3558,9 @@ f_floor(VALUE *val)
|
|||||||
tmp2.v_subtype = V_NOSUBTYPE;
|
tmp2.v_subtype = V_NOSUBTYPE;
|
||||||
|
|
||||||
tmp1.v_type = V_NUM;
|
tmp1.v_type = V_NUM;
|
||||||
tmp1.v_num = &_qone_;
|
tmp1.v_num = qlink(&_qone_);
|
||||||
tmp2.v_type = V_NUM;
|
tmp2.v_type = V_NUM;
|
||||||
tmp2.v_num = &_qzero_;
|
tmp2.v_num = qlink(&_qzero_);
|
||||||
apprvalue(val, &tmp1, &tmp2, &res);
|
apprvalue(val, &tmp1, &tmp2, &res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@@ -4722,7 +4730,7 @@ f_list(int count, VALUE **vals)
|
|||||||
|
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
static VALUE
|
static VALUE
|
||||||
f_assoc(int count, VALUE **vals)
|
f_assoc(int UNUSED count, VALUE UNUSED **vals)
|
||||||
{
|
{
|
||||||
VALUE result;
|
VALUE result;
|
||||||
|
|
||||||
@@ -4922,10 +4930,14 @@ f_listremove(VALUE *vp)
|
|||||||
static NUMBER *
|
static NUMBER *
|
||||||
f_runtime(void)
|
f_runtime(void)
|
||||||
{
|
{
|
||||||
|
#if defined(_WIN32)
|
||||||
|
return qlink(&_qzero_);
|
||||||
|
#else /* Windoz free systems */
|
||||||
struct tms buf;
|
struct tms buf;
|
||||||
|
|
||||||
times(&buf);
|
times(&buf);
|
||||||
return iitoq((long) buf.tms_utime, (long) CLK_TCK);
|
return iitoq((long) buf.tms_utime, (long) CLK_TCK);
|
||||||
|
#endif /* Windoz free systems */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -4976,24 +4988,31 @@ f_fopen(VALUE *v1, VALUE *v2)
|
|||||||
/* initialize VALUE */
|
/* initialize VALUE */
|
||||||
result.v_subtype = V_NOSUBTYPE;
|
result.v_subtype = V_NOSUBTYPE;
|
||||||
|
|
||||||
|
/* check for a valid mode [rwa][b+\0][b+\0] */
|
||||||
if (v1->v_type != V_STR || v2->v_type != V_STR)
|
if (v1->v_type != V_STR || v2->v_type != V_STR)
|
||||||
return error_value(E_FOPEN1);
|
return error_value(E_FOPEN1);
|
||||||
mode = v2->v_str->s_str;
|
mode = v2->v_str->s_str;
|
||||||
|
|
||||||
if ((*mode != 'r') && (*mode != 'w') && (*mode != 'a'))
|
if ((*mode != 'r') && (*mode != 'w') && (*mode != 'a'))
|
||||||
return error_value(E_FOPEN2);
|
return error_value(E_FOPEN2);
|
||||||
if (mode[1] != '\0') {
|
if (mode[1] != '\0') {
|
||||||
if (mode[1] != '+')
|
if (mode[1] != '+' && mode[1] != 'b')
|
||||||
return error_value(E_FOPEN2);
|
|
||||||
if (mode[2] != '\0')
|
|
||||||
return error_value(E_FOPEN2);
|
return error_value(E_FOPEN2);
|
||||||
|
if (mode[2] != '\0') {
|
||||||
|
if ((mode[2] != '+' && mode[2] != 'b') ||
|
||||||
|
mode[1] == mode[2])
|
||||||
|
return error_value(E_FOPEN2);
|
||||||
|
if (mode[3] != '\0')
|
||||||
|
return error_value(E_FOPEN2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* try to open */
|
||||||
errno = 0;
|
errno = 0;
|
||||||
id = openid(v1->v_str->s_str, v2->v_str->s_str);
|
id = openid(v1->v_str->s_str, v2->v_str->s_str);
|
||||||
if (id == FILEID_NONE)
|
if (id == FILEID_NONE)
|
||||||
return error_value(errno);
|
return error_value(errno);
|
||||||
if (id < 0)
|
if (id < 0)
|
||||||
return error_value(E_FOPEN3);
|
return error_value(-id);
|
||||||
result.v_type = V_FILE;
|
result.v_type = V_FILE;
|
||||||
result.v_file = id;
|
result.v_file = id;
|
||||||
return result;
|
return result;
|
||||||
@@ -5010,21 +5029,27 @@ f_freopen(int count, VALUE **vals)
|
|||||||
/* initialize VALUE */
|
/* initialize VALUE */
|
||||||
result.v_subtype = V_NOSUBTYPE;
|
result.v_subtype = V_NOSUBTYPE;
|
||||||
|
|
||||||
|
/* check for a valid mode [rwa][b+\0][b+\0] */
|
||||||
if (vals[0]->v_type != V_FILE)
|
if (vals[0]->v_type != V_FILE)
|
||||||
return error_value(E_FREOPEN1);
|
return error_value(E_FREOPEN1);
|
||||||
if (vals[1]->v_type != V_STR)
|
if (vals[1]->v_type != V_STR)
|
||||||
return error_value(E_FREOPEN2);
|
return error_value(E_FREOPEN2);
|
||||||
|
|
||||||
mode = vals[1]->v_str->s_str;
|
mode = vals[1]->v_str->s_str;
|
||||||
|
|
||||||
if ((*mode != 'r') && (*mode != 'w') && (*mode != 'a'))
|
if ((*mode != 'r') && (*mode != 'w') && (*mode != 'a'))
|
||||||
return error_value(E_FREOPEN2);
|
return error_value(E_FREOPEN2);
|
||||||
if (mode[1] != '\0') {
|
if (mode[1] != '\0') {
|
||||||
if (mode[1] != '+')
|
if (mode[1] != '+' && mode[1] != 'b')
|
||||||
return error_value(E_FREOPEN2);
|
|
||||||
if (mode[2] != '\0')
|
|
||||||
return error_value(E_FREOPEN2);
|
return error_value(E_FREOPEN2);
|
||||||
|
if (mode[2] != '\0') {
|
||||||
|
if ((mode[2] != '+' && mode[2] != 'b') ||
|
||||||
|
mode[1] == mode[2])
|
||||||
|
return error_value(E_FOPEN2);
|
||||||
|
if (mode[3] != '\0')
|
||||||
|
return error_value(E_FREOPEN2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* try to reopen */
|
||||||
errno = 0;
|
errno = 0;
|
||||||
if (count == 2) {
|
if (count == 2) {
|
||||||
id = reopenid(vals[0]->v_file, mode, NULL);
|
id = reopenid(vals[0]->v_file, mode, NULL);
|
||||||
@@ -6130,10 +6155,10 @@ f_fgetfield(VALUE *vp)
|
|||||||
result.v_subtype = V_NOSUBTYPE;
|
result.v_subtype = V_NOSUBTYPE;
|
||||||
|
|
||||||
if (vp->v_type != V_FILE)
|
if (vp->v_type != V_FILE)
|
||||||
return error_value(E_FGETWORD1);
|
return error_value(E_FGETFIELD1);
|
||||||
i = readid(vp->v_file, 14, &str);
|
i = readid(vp->v_file, 14, &str);
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
return error_value(E_FGETWORD2);
|
return error_value(E_FGETFIELD2);
|
||||||
result.v_type = V_NULL;
|
result.v_type = V_NULL;
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
result.v_type = V_STR;
|
result.v_type = V_STR;
|
||||||
@@ -6885,7 +6910,16 @@ f_system(VALUE *vp)
|
|||||||
if (conf->calc_debug & CALCDBG_SYSTEM) {
|
if (conf->calc_debug & CALCDBG_SYSTEM) {
|
||||||
printf("%s\n", vp->v_str->s_str);
|
printf("%s\n", vp->v_str->s_str);
|
||||||
}
|
}
|
||||||
result.v_num = itoq((long) system(vp->v_str->s_str));
|
#if defined(_WIN32)
|
||||||
|
/* if the execute length is 0 then just return 0 */
|
||||||
|
if (strlen(vp->v_str->s_str) == 0) {
|
||||||
|
result.v_num = itoq((long)0);
|
||||||
|
} else {
|
||||||
|
result.v_num = itoq((long)system(vp->v_str->s_str));
|
||||||
|
}
|
||||||
|
#else /* Windoz free systems */
|
||||||
|
result.v_num = itoq((long)system(vp->v_str->s_str));
|
||||||
|
#endif /* Windoz free systems */
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6898,6 +6932,7 @@ f_sleep(int count, VALUE **vals)
|
|||||||
NUMBER *q1, *q2;
|
NUMBER *q1, *q2;
|
||||||
|
|
||||||
res.v_type = V_NULL;
|
res.v_type = V_NULL;
|
||||||
|
#if !defined(_WIN32)
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
if (vals[0]->v_type != V_NUM || qisneg(vals[0]->v_num))
|
if (vals[0]->v_type != V_NUM || qisneg(vals[0]->v_num))
|
||||||
return error_value(E_SLEEP);
|
return error_value(E_SLEEP);
|
||||||
@@ -6928,6 +6963,7 @@ f_sleep(int count, VALUE **vals)
|
|||||||
res.v_type = V_NUM;
|
res.v_type = V_NUM;
|
||||||
res.v_num = itoq(time);
|
res.v_num = itoq(time);
|
||||||
}
|
}
|
||||||
|
#endif /* Windoz free systems */
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6943,15 +6979,15 @@ f_base(int count, NUMBER **vals)
|
|||||||
|
|
||||||
/* deal with just a query */
|
/* deal with just a query */
|
||||||
if (count != 1) {
|
if (count != 1) {
|
||||||
return base_value(conf->outmode);
|
return base_value(conf->outmode, conf->outmode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* deal with the specal modes first */
|
/* deal with the specal modes first */
|
||||||
if (qisfrac(vals[0])) {
|
if (qisfrac(vals[0])) {
|
||||||
return base_value(math_setmode(MODE_FRAC));
|
return base_value(math_setmode(MODE_FRAC), conf->outmode);
|
||||||
}
|
}
|
||||||
if (vals[0]->num.len > 64/BASEB) {
|
if (vals[0]->num.len > 64/BASEB) {
|
||||||
return base_value(math_setmode(MODE_EXP));
|
return base_value(math_setmode(MODE_EXP), conf->outmode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set the base, if possible */
|
/* set the base, if possible */
|
||||||
@@ -6979,7 +7015,61 @@ f_base(int count, NUMBER **vals)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* return the old base */
|
/* return the old base */
|
||||||
return base_value(oldbase);
|
return base_value(oldbase, conf->outmode);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* set the default secondary output base/mode
|
||||||
|
*/
|
||||||
|
static NUMBER *
|
||||||
|
f_base2(int count, NUMBER **vals)
|
||||||
|
{
|
||||||
|
long base; /* output base/mode */
|
||||||
|
long oldbase=0; /* output base/mode */
|
||||||
|
|
||||||
|
/* deal with just a query */
|
||||||
|
if (count != 1) {
|
||||||
|
return base_value(conf->outmode2, conf->outmode2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* deal with the specal modes first */
|
||||||
|
if (qisfrac(vals[0])) {
|
||||||
|
return base_value(math_setmode2(MODE_FRAC), conf->outmode2);
|
||||||
|
}
|
||||||
|
if (vals[0]->num.len > 64/BASEB) {
|
||||||
|
return base_value(math_setmode2(MODE_EXP), conf->outmode2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set the base, if possible */
|
||||||
|
base = qtoi(vals[0]);
|
||||||
|
switch (base) {
|
||||||
|
case 0:
|
||||||
|
oldbase = math_setmode2(MODE2_OFF);
|
||||||
|
break;
|
||||||
|
case -10:
|
||||||
|
oldbase = math_setmode2(MODE_INT);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
oldbase = math_setmode2(MODE_BINARY);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
oldbase = math_setmode2(MODE_OCTAL);
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
oldbase = math_setmode2(MODE_REAL);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
oldbase = math_setmode2(MODE_HEX);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
math_error("Unsupported base");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* return the old base */
|
||||||
|
return base_value(oldbase, conf->outmode2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -6987,14 +7077,14 @@ f_base(int count, NUMBER **vals)
|
|||||||
* return a numerical 'value' of the mode/base
|
* return a numerical 'value' of the mode/base
|
||||||
*/
|
*/
|
||||||
static NUMBER *
|
static NUMBER *
|
||||||
base_value(long mode)
|
base_value(long mode, int defval)
|
||||||
{
|
{
|
||||||
NUMBER *result;
|
NUMBER *result;
|
||||||
|
|
||||||
/* return the old base */
|
/* return the old base */
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case MODE_DEFAULT:
|
case MODE_DEFAULT:
|
||||||
switch (conf->outmode) {
|
switch (defval) {
|
||||||
case MODE_DEFAULT:
|
case MODE_DEFAULT:
|
||||||
result = itoq(10);
|
result = itoq(10);
|
||||||
break;
|
break;
|
||||||
@@ -7021,6 +7111,9 @@ base_value(long mode)
|
|||||||
case MODE_BINARY:
|
case MODE_BINARY:
|
||||||
result = itoq(2);
|
result = itoq(2);
|
||||||
break;
|
break;
|
||||||
|
case MODE2_OFF:
|
||||||
|
result = itoq(0);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
result = itoq(0);
|
result = itoq(0);
|
||||||
break;
|
break;
|
||||||
@@ -7049,6 +7142,9 @@ base_value(long mode)
|
|||||||
case MODE_BINARY:
|
case MODE_BINARY:
|
||||||
result = itoq(2);
|
result = itoq(2);
|
||||||
break;
|
break;
|
||||||
|
case MODE2_OFF:
|
||||||
|
result = itoq(0);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
result = itoq(0);
|
result = itoq(0);
|
||||||
break;
|
break;
|
||||||
@@ -7268,6 +7364,7 @@ f_free(int count, VALUE **vals)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
f_freeglobals(void)
|
f_freeglobals(void)
|
||||||
{
|
{
|
||||||
@@ -7281,6 +7378,7 @@ f_freeglobals(void)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
f_freeredc(void)
|
f_freeredc(void)
|
||||||
{
|
{
|
||||||
@@ -7688,6 +7786,20 @@ f_argv(int count, VALUE **vals)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
f_version(void)
|
||||||
|
{
|
||||||
|
VALUE result;
|
||||||
|
|
||||||
|
/* return the calc verstion string */
|
||||||
|
result.v_type = V_STR;
|
||||||
|
result.v_subtype = V_NOSUBTYPE;
|
||||||
|
result.v_str = makestring(strdup(version()));
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* !FUNCLIST */
|
#endif /* !FUNCLIST */
|
||||||
|
|
||||||
|
|
||||||
@@ -7774,6 +7886,8 @@ static CONST struct builtin builtins[] = {
|
|||||||
"arithmetic mean of values"},
|
"arithmetic mean of values"},
|
||||||
{"base", 0, 1, 0, OP_NOP, f_base, 0,
|
{"base", 0, 1, 0, OP_NOP, f_base, 0,
|
||||||
"set default output base"},
|
"set default output base"},
|
||||||
|
{"base2", 0, 1, 0, OP_NOP, f_base2, 0,
|
||||||
|
"set default secondary output base"},
|
||||||
{"bernoulli", 1, 1, 0, OP_NOP, 0, f_bern,
|
{"bernoulli", 1, 1, 0, OP_NOP, 0, f_bern,
|
||||||
"Bernoulli number for index a"},
|
"Bernoulli number for index a"},
|
||||||
{"bit", 2, 2, 0, OP_BIT, 0, 0,
|
{"bit", 2, 2, 0, OP_BIT, 0, 0,
|
||||||
@@ -7913,7 +8027,7 @@ static CONST struct builtin builtins[] = {
|
|||||||
{"free", 0, IN, FA, OP_NOP, 0, f_free,
|
{"free", 0, IN, FA, OP_NOP, 0, f_free,
|
||||||
"free listed or all global variables"},
|
"free listed or all global variables"},
|
||||||
{"freebernoulli", 0, 0, 0, OP_NOP, 0, f_freebern,
|
{"freebernoulli", 0, 0, 0, OP_NOP, 0, f_freebern,
|
||||||
"free stored Benoulli numbers"},
|
"free stored Bernoulli numbers"},
|
||||||
{"freeeuler", 0, 0, 0, OP_NOP, 0, f_freeeuler,
|
{"freeeuler", 0, 0, 0, OP_NOP, 0, f_freeeuler,
|
||||||
"free stored Euler numbers"},
|
"free stored Euler numbers"},
|
||||||
{"freeglobals", 0, 0, 0, OP_NOP, 0, f_freeglobals,
|
{"freeglobals", 0, 0, 0, OP_NOP, 0, f_freeglobals,
|
||||||
@@ -8231,7 +8345,7 @@ static CONST struct builtin builtins[] = {
|
|||||||
{"sizeof", 1, 1, 0, OP_NOP, 0, f_sizeof,
|
{"sizeof", 1, 1, 0, OP_NOP, 0, f_sizeof,
|
||||||
"number of octets used to hold the value"},
|
"number of octets used to hold the value"},
|
||||||
{"sleep", 0, 1, 0, OP_NOP, 0, f_sleep,
|
{"sleep", 0, 1, 0, OP_NOP, 0, f_sleep,
|
||||||
"suspend operatioo for a seconds"},
|
"suspend operation for a seconds"},
|
||||||
{"sort", 1, 1, 0, OP_NOP, 0, f_sort,
|
{"sort", 1, 1, 0, OP_NOP, 0, f_sort,
|
||||||
"sort a copy of a matrix or list"},
|
"sort a copy of a matrix or list"},
|
||||||
{"sqrt", 1, 3, 0, OP_NOP, 0, f_sqrt,
|
{"sqrt", 1, 3, 0, OP_NOP, 0, f_sqrt,
|
||||||
@@ -8290,6 +8404,8 @@ static CONST struct builtin builtins[] = {
|
|||||||
"truncate a to b number of decimal places"},
|
"truncate a to b number of decimal places"},
|
||||||
{"ungetc", 2, 2, 0, OP_NOP, 0, f_ungetc,
|
{"ungetc", 2, 2, 0, OP_NOP, 0, f_ungetc,
|
||||||
"unget char read from file"},
|
"unget char read from file"},
|
||||||
|
{"version", 0, 0, 0, OP_NOP, 0, f_version,
|
||||||
|
"calc version string"},
|
||||||
{"xor", 1, IN, 0, OP_NOP, 0, f_xor,
|
{"xor", 1, IN, 0, OP_NOP, 0, f_xor,
|
||||||
"logical xor"},
|
"logical xor"},
|
||||||
|
|
||||||
|
13
func.h
13
func.h
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: func.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: func.h,v 29.4 2001/06/08 21:00:58 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/func.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/func.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1990/02/15 01:48:33
|
* Under source code control: 1990/02/15 01:48:33
|
||||||
@@ -32,8 +32,13 @@
|
|||||||
#define __FUNC_H__
|
#define __FUNC_H__
|
||||||
|
|
||||||
|
|
||||||
#include "calc.h"
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
#include "label.h"
|
# include "calc.h"
|
||||||
|
# include "label.h"
|
||||||
|
#else
|
||||||
|
# include <calc/calc.h>
|
||||||
|
# include <calc/label.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
17
hash.c
17
hash.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* hash - one-way hash routines
|
* hash - one-way hash routines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 Landon Curt Noll
|
* Copyright (C) 1999-2002 Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Calc is open software; you can redistribute it and/or modify it under
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.3 $
|
* @(#) $Revision: 29.6 $
|
||||||
* @(#) $Id: hash.c,v 29.3 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: hash.c,v 29.6 2004/02/25 23:55:38 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/hash.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/hash.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/11/23 05:13:11
|
* Under source code control: 1995/11/23 05:13:11
|
||||||
@@ -911,6 +911,7 @@ hash_value(int type, void *v, HASH *state)
|
|||||||
(USB8 *)value->v_rand->buffer, SLEN*FULL_BITS/8);
|
(USB8 *)value->v_rand->buffer, SLEN*FULL_BITS/8);
|
||||||
state = hash_int(type, value->v_rand->j, state);
|
state = hash_int(type, value->v_rand->j, state);
|
||||||
state = hash_int(type, value->v_rand->k, state);
|
state = hash_int(type, value->v_rand->k, state);
|
||||||
|
state = hash_int(type, value->v_rand->need_to_skip, state);
|
||||||
(state->update)(state,
|
(state->update)(state,
|
||||||
(USB8 *)value->v_rand->slot, SCNT*FULL_BITS/8);
|
(USB8 *)value->v_rand->slot, SCNT*FULL_BITS/8);
|
||||||
(state->update)(state,
|
(state->update)(state,
|
||||||
@@ -940,6 +941,7 @@ hash_value(int type, void *v, HASH *state)
|
|||||||
|
|
||||||
/* hash the CONFIG state */
|
/* hash the CONFIG state */
|
||||||
state = hash_int(type, value->v_config->outmode, state);
|
state = hash_int(type, value->v_config->outmode, state);
|
||||||
|
state = hash_int(type, value->v_config->outmode2, state);
|
||||||
state = hash_long(type,(long)value->v_config->outdigits, state);
|
state = hash_long(type,(long)value->v_config->outdigits, state);
|
||||||
state = hash_number(type, value->v_config->epsilon, state);
|
state = hash_number(type, value->v_config->epsilon, state);
|
||||||
state = hash_long(type,
|
state = hash_long(type,
|
||||||
@@ -983,6 +985,15 @@ hash_value(int type, void *v, HASH *state)
|
|||||||
state = hash_int(type, value->v_config->ctrl_d, state);
|
state = hash_int(type, value->v_config->ctrl_d, state);
|
||||||
state = hash_str(type, value->v_config->program, state);
|
state = hash_str(type, value->v_config->program, state);
|
||||||
state = hash_str(type, value->v_config->base_name, state);
|
state = hash_str(type, value->v_config->base_name, state);
|
||||||
|
state = hash_bool(type, value->v_config->windows, state);
|
||||||
|
state = hash_bool(type, value->v_config->cygwin, state);
|
||||||
|
state = hash_bool(type, value->v_config->compile_custom, state);
|
||||||
|
if (value->v_config->allow_custom != NULL &&
|
||||||
|
*(value->v_config->allow_custom)) {
|
||||||
|
state = hash_bool(type, TRUE, state);
|
||||||
|
} else {
|
||||||
|
state = hash_bool(type, FALSE, state);
|
||||||
|
}
|
||||||
state = hash_str(type, value->v_config->version, state);
|
state = hash_str(type, value->v_config->version, state);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
19
hash.h
19
hash.h
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.2 $
|
* @(#) $Revision: 29.4 $
|
||||||
* @(#) $Id: hash.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: hash.h,v 29.4 2001/06/08 21:00:58 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/hash.h,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/hash.h,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1995/11/14 23:57:45
|
* Under source code control: 1995/11/14 23:57:45
|
||||||
@@ -33,10 +33,17 @@
|
|||||||
#define __HASH_H__
|
#define __HASH_H__
|
||||||
|
|
||||||
|
|
||||||
#include "shs.h"
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
||||||
#include "shs1.h"
|
# include "shs.h"
|
||||||
#include "md5.h"
|
# include "shs1.h"
|
||||||
#include "zmath.h"
|
# include "md5.h"
|
||||||
|
# include "zmath.h"
|
||||||
|
#else
|
||||||
|
# include <calc/shs.h>
|
||||||
|
# include <calc/shs1.h>
|
||||||
|
# include <calc/md5.h>
|
||||||
|
# include <calc/zmath.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* MAX_CHUNKSIZE is the largest chunksize of any hash */
|
/* MAX_CHUNKSIZE is the largest chunksize of any hash */
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.1 $
|
* @(#) $Revision: 29.2 $
|
||||||
* @(#) $Id: have_fpos_pos.c,v 29.1 2000/12/17 11:25:22 chongo Exp $
|
* @(#) $Id: have_fpos_pos.c,v 29.2 2001/03/18 03:00:11 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/have_fpos_pos.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/have_fpos_pos.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 2000/12/17 01:23
|
* Under source code control: 2000/12/17 01:23
|
||||||
@@ -51,8 +51,17 @@ main(void)
|
|||||||
printf("#define HAVE_FPOS_POS 1 /* yes */\n\n");
|
printf("#define HAVE_FPOS_POS 1 /* yes */\n\n");
|
||||||
|
|
||||||
/* determine __pos element size */
|
/* determine __pos element size */
|
||||||
printf("#undef FPOS_POS_BITS\n");
|
printf("#undef FPOS_POS_BITS\t/* no */\n");
|
||||||
|
# if defined(FPOS_POS_BITS)
|
||||||
|
printf("#define FPOS_POS_BITS %d\n\n", FPOS_POS_BITS);
|
||||||
|
# else
|
||||||
printf("#define FPOS_POS_BITS %d\n\n", sizeof(pos.__pos)*8);
|
printf("#define FPOS_POS_BITS %d\n\n", sizeof(pos.__pos)*8);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* we have no __pos element */
|
||||||
|
printf("#undef HAVE_FPOS_POS\t/* no */\n");
|
||||||
|
printf("#undef FPOS_POS_BITS\n");
|
||||||
#endif
|
#endif
|
||||||
/* exit(0); */
|
/* exit(0); */
|
||||||
return 0;
|
return 0;
|
||||||
|
89
have_unused.c
Normal file
89
have_unused.c
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* have_unused - Determine if we want or can support the unused attribute
|
||||||
|
*
|
||||||
|
* Copyright (C) 2004 Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* @(#) $Revision: 29.2 $
|
||||||
|
* @(#) $Id: have_unused.c,v 29.2 2004/02/23 08:35:42 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/have_unused.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 2004/02/22 22:36:10
|
||||||
|
* File existed as early as: 2004
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* usage:
|
||||||
|
* have_unused
|
||||||
|
*
|
||||||
|
* Not all compilers support the unused attribute, so this may not compile
|
||||||
|
* on your system.
|
||||||
|
*
|
||||||
|
* This prog outputs several defines:
|
||||||
|
*
|
||||||
|
* HAVE_UNUSED
|
||||||
|
* defined ==> ok to use unused
|
||||||
|
* undefined ==> do not use unused
|
||||||
|
*
|
||||||
|
* UNUSED
|
||||||
|
* unused ==> use unused
|
||||||
|
* (nothing) ==> unused not used
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#if !defined(HAVE_NO_UNUSED)
|
||||||
|
|
||||||
|
/* make sure that we can use the __attribute__((unused)) in #define's */
|
||||||
|
#undef UNUSED
|
||||||
|
#define UNUSED __attribute__((unused))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* unused_str - a function with an unused argument
|
||||||
|
*/
|
||||||
|
static char *
|
||||||
|
unused_str(char UNUSED *str)
|
||||||
|
{
|
||||||
|
return "__attribute__((unused))";
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !HAVE_NO_UNUSED */
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
main(void)
|
||||||
|
{
|
||||||
|
#if defined(HAVE_NO_UNUSED)
|
||||||
|
|
||||||
|
printf("#undef HAVE_UNUSED /* no */\n");
|
||||||
|
printf("#undef UNUSED\n");
|
||||||
|
printf("#define UNUSED /* no */\n");
|
||||||
|
|
||||||
|
#else /* HAVE_NO_UNUSED */
|
||||||
|
|
||||||
|
printf("#define HAVE_UNUSED /* yes */\n");
|
||||||
|
printf("#undef UNUSED\n");
|
||||||
|
printf("#define UNUSED %s /* yes */\n", unused_str(NULL));
|
||||||
|
|
||||||
|
#endif /* HAVE_NO_UNUSED */
|
||||||
|
|
||||||
|
/* exit(0); */
|
||||||
|
return 0;
|
||||||
|
}
|
23
help.c
23
help.c
@@ -17,8 +17,8 @@
|
|||||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* @(#) $Revision: 29.4 $
|
* @(#) $Revision: 29.8 $
|
||||||
* @(#) $Id: help.c,v 29.4 2000/06/07 14:02:13 chongo Exp $
|
* @(#) $Id: help.c,v 29.8 2001/04/08 08:29:28 chongo Exp $
|
||||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/help.c,v $
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/help.c,v $
|
||||||
*
|
*
|
||||||
* Under source code control: 1997/09/14 10:58:30
|
* Under source code control: 1997/09/14 10:58:30
|
||||||
@@ -42,6 +42,11 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
# define popen _popen
|
||||||
|
# define pclose _pclose
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* some help topics are symbols, so we alias them to nice filenames
|
* some help topics are symbols, so we alias them to nice filenames
|
||||||
@@ -57,6 +62,7 @@ static struct help_alias {
|
|||||||
{".", "oldvalue"},
|
{".", "oldvalue"},
|
||||||
{"%", "mod"},
|
{"%", "mod"},
|
||||||
{"//", "quo"},
|
{"//", "quo"},
|
||||||
|
{"copy", "blkcpy"},
|
||||||
{"copying", "COPYING"},
|
{"copying", "COPYING"},
|
||||||
{"copying-lgpl", "COPYING-LGPL"},
|
{"copying-lgpl", "COPYING-LGPL"},
|
||||||
{"copying_lgpl", "COPYING-LGPL"},
|
{"copying_lgpl", "COPYING-LGPL"},
|
||||||
@@ -65,6 +71,13 @@ static struct help_alias {
|
|||||||
{"COPYRIGHT", "copyright"},
|
{"COPYRIGHT", "copyright"},
|
||||||
{"Copyleft", "copyright"},
|
{"Copyleft", "copyright"},
|
||||||
{"COPYLEFT", "copyright"},
|
{"COPYLEFT", "copyright"},
|
||||||
|
{"read", "command"},
|
||||||
|
{"write", "command"},
|
||||||
|
{"quit", "command"},
|
||||||
|
{"exit", "command"},
|
||||||
|
{"abort", "command"},
|
||||||
|
{"cd", "command"},
|
||||||
|
{"show", "command"},
|
||||||
{"stdlib", "resource"},
|
{"stdlib", "resource"},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
@@ -105,7 +118,11 @@ page_file(FILE *stream)
|
|||||||
/*
|
/*
|
||||||
* form a write pipe to a pager
|
* form a write pipe to a pager
|
||||||
*/
|
*/
|
||||||
cmd = popen(pager, "w");
|
if (pager == NULL || pager[0] == '\0') {
|
||||||
|
cmd = stdout;
|
||||||
|
} else {
|
||||||
|
cmd = popen(pager, "w");
|
||||||
|
}
|
||||||
if (cmd == NULL) {
|
if (cmd == NULL) {
|
||||||
fprintf(stderr, "unable form pipe to pager: %s", pager);
|
fprintf(stderr, "unable form pipe to pager: %s", pager);
|
||||||
return;
|
return;
|
||||||
|
279
help/Makefile
279
help/Makefile
@@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# help - makefile for calc help files
|
# help - makefile for calc help files
|
||||||
#
|
#
|
||||||
# Copyright (C) 1999 Landon Curt Noll
|
# Copyright (C) 1999-2002 Landon Curt Noll
|
||||||
#
|
#
|
||||||
# Calc is open software; you can redistribute it and/or modify it under
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#
|
#
|
||||||
# @(#) $Revision: 29.5 $
|
# @(#) $Revision: 29.25 $
|
||||||
# @(#) $Id: Makefile,v 29.5 2000/12/14 10:33:06 chongo Exp $
|
# @(#) $Id: Makefile,v 29.25 2004/07/28 12:21:05 chongo Exp $
|
||||||
# @(#) $Source: /usr/local/src/cmd/calc/help/RCS/Makefile,v $
|
# @(#) $Source: /usr/local/src/cmd/calc/help/RCS/Makefile,v $
|
||||||
#
|
#
|
||||||
# Under source code control: 1991/07/23 06:47:57
|
# Under source code control: 1991/07/23 06:47:57
|
||||||
@@ -36,15 +36,120 @@
|
|||||||
SHELL= /bin/sh
|
SHELL= /bin/sh
|
||||||
MAKE_FILE = Makefile
|
MAKE_FILE = Makefile
|
||||||
|
|
||||||
|
####
|
||||||
# Normally, the upper level makefile will set these values. We provide
|
# Normally, the upper level makefile will set these values. We provide
|
||||||
# a default here just in case you want to build from this directory.
|
# a default here just in case you want to build from this directory.
|
||||||
#
|
####
|
||||||
TOPDIR= /usr/local/lib
|
|
||||||
#TOPDIR= /usr/lib
|
|
||||||
#TOPDIR= /usr/libdata
|
|
||||||
|
|
||||||
LIBDIR= ${TOPDIR}/calc
|
# Where the system include (.h) files are kept
|
||||||
HELPDIR= ${LIBDIR}/help
|
#
|
||||||
|
# For DJGPP, select:
|
||||||
|
#
|
||||||
|
# INCDIR= /dev/env/DJDIR/include
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# INCDIR= /usr/include
|
||||||
|
#
|
||||||
|
|
||||||
|
#INCDIR= /usr/local/include
|
||||||
|
#INCDIR= /dev/env/DJDIR/include
|
||||||
|
INCDIR= /usr/include
|
||||||
|
|
||||||
|
# where to install calc realted things
|
||||||
|
#
|
||||||
|
# ${BINDIR} where to install calc binary files
|
||||||
|
# ${LIBDIR} where calc link library (*.a) files are installed
|
||||||
|
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# For DJGPP, select:
|
||||||
|
#
|
||||||
|
# BINDIR= /dev/env/DJDIR/bin
|
||||||
|
# LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
# CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
#BINDIR= /usr/local/bin
|
||||||
|
#BINDIR= /dev/env/DJDIR/bin
|
||||||
|
BINDIR= /usr/bin
|
||||||
|
|
||||||
|
#LIBDIR= /usr/local/lib
|
||||||
|
#LIBDIR= /dev/env/DJDIR/lib
|
||||||
|
LIBDIR= /usr/lib
|
||||||
|
|
||||||
|
#CALC_SHAREDIR= /usr/local/lib/calc
|
||||||
|
#CALC_SHAREDIR= /dev/env/DJDIR/share/calc
|
||||||
|
CALC_SHAREDIR= /usr/share/calc
|
||||||
|
|
||||||
|
# By default, these values are based CALC_SHAREDIR, INCDIR, BINDIR
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
# ${HELPDIR} where the help directory is installed
|
||||||
|
# ${CALC_INCDIR} where the calc include files are installed
|
||||||
|
# ${CUSTOMCALDIR} where custom *.cal files are installed
|
||||||
|
# ${CUSTOMHELPDIR} where custom help files are installed
|
||||||
|
# ${CUSTOMINCPDIR} where custom .h files are installed
|
||||||
|
# ${SCRIPTDIR} where calc shell scripts are installed
|
||||||
|
#
|
||||||
|
# NOTE: The install rule prepends installation paths with $T, which
|
||||||
|
# by default is empty. If $T is non-empty, then installation
|
||||||
|
# locations will be relative to the $T directory.
|
||||||
|
#
|
||||||
|
# If in doubt, set:
|
||||||
|
#
|
||||||
|
# HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
# CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
# CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
# CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
# CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
|
# SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
#
|
||||||
|
HELPDIR= ${CALC_SHAREDIR}/help
|
||||||
|
CALC_INCDIR= ${INCDIR}/calc
|
||||||
|
CUSTOMCALDIR= ${CALC_SHAREDIR}/custom
|
||||||
|
CUSTOMHELPDIR= ${CALC_SHAREDIR}/custhelp
|
||||||
|
CUSTOMINCDIR= ${CALC_INCDIR}/custom
|
||||||
|
SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
|
||||||
|
# T - top level directory under which calc will be installed
|
||||||
|
#
|
||||||
|
# The calc install is performed under $T, the calc build is
|
||||||
|
# performed under /. The purpose for $T is to allow someone
|
||||||
|
# to install calc somewhere other than into the system area.
|
||||||
|
#
|
||||||
|
# For example, if:
|
||||||
|
#
|
||||||
|
# BINDIR= /usr/bin
|
||||||
|
# LIBDIR= /usr/lib
|
||||||
|
# CALC_SHAREDIR= /usr/share/calc
|
||||||
|
#
|
||||||
|
# and if:
|
||||||
|
#
|
||||||
|
# T= /var/tmp/testing
|
||||||
|
#
|
||||||
|
# Then the installation locations will be:
|
||||||
|
#
|
||||||
|
# calc binary files: /var/tmp/testing/usr/bin
|
||||||
|
# calc link library: /var/tmp/testing/usr/lib
|
||||||
|
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
|
||||||
|
# ... etc ... /var/tmp/testing/...
|
||||||
|
#
|
||||||
|
# If $T is empty, calc is installed under /, which is the same
|
||||||
|
# top of tree for which it was built. If $T is non-empty, then
|
||||||
|
# calc is installed under $T, as if one had to chroot under
|
||||||
|
# $T for calc to operate.
|
||||||
|
#
|
||||||
|
# If in doubt, use T=
|
||||||
|
#
|
||||||
|
T=
|
||||||
|
|
||||||
# Makefile debug
|
# Makefile debug
|
||||||
#
|
#
|
||||||
@@ -63,6 +168,20 @@ CHMOD= chmod
|
|||||||
SED= sed
|
SED= sed
|
||||||
SORT= sort
|
SORT= sort
|
||||||
FMT= fmt
|
FMT= fmt
|
||||||
|
CMP= cmp
|
||||||
|
|
||||||
|
# Some out of date operating systems require / want an executable to
|
||||||
|
# end with a certain file extension. Some compile systems such as
|
||||||
|
# Cygwin build calc as calc.exe. The EXT variable is used to denote
|
||||||
|
# the extension required by such.
|
||||||
|
#
|
||||||
|
# EXT= # normal Un*x / Linux / GNU/Linux systems
|
||||||
|
# EXT=.exe # windoz / Cygwin
|
||||||
|
#
|
||||||
|
# If in doubt, use EXT=
|
||||||
|
#
|
||||||
|
EXT=
|
||||||
|
#EXT=.exe
|
||||||
|
|
||||||
# Standard and Builtin help files
|
# Standard and Builtin help files
|
||||||
#
|
#
|
||||||
@@ -140,12 +259,12 @@ BLT_HELP_FILES= ${BLT_HELP_FILES_3} ${BLT_HELP_FILES_5} \
|
|||||||
# This list is prodiced by the detaillist rule when no WARNINGS are detected.
|
# This list is prodiced by the detaillist rule when no WARNINGS are detected.
|
||||||
#
|
#
|
||||||
DETAIL_HELP= abs access acos acosh acot acoth acsc acsch address agd append \
|
DETAIL_HELP= abs access acos acosh acot acoth acsc acsch address agd append \
|
||||||
appr arg argv arrow asec asech asin asinh assign atan atan2 atanh avg \
|
appr arg argv arrow asec asech asin asinh assign atan atan2 atanh \
|
||||||
base bernoulli bit blk blkcpy blkfree blocks bround btrunc calc_tty \
|
avg base base2 bernoulli bit blk blkcpy blkfree blocks bround btrunc \
|
||||||
calclevel catalan ceil cfappr cfsim char cmdbuf cmp comb conj cos \
|
calc_tty calclevel catalan ceil cfappr cfsim char cmdbuf cmp comb \
|
||||||
cosh cot coth count cp csc csch ctime delete den dereference det \
|
conj cos cosh cot coth count cp csc csch ctime delete den dereference \
|
||||||
digit digits dp epsilon errcount errmax errno error euler eval \
|
det digit digits display dp epsilon errcount errmax errno error euler \
|
||||||
exp fact factor fclose fcnt feof ferror fflush fgetc fgetfield \
|
eval exp fact factor fclose fcnt feof ferror fflush fgetc fgetfield \
|
||||||
fgetline fgets fgetstr fib files floor fopen forall fprintf fputc \
|
fgetline fgets fgetstr fib files floor fopen forall fprintf fputc \
|
||||||
fputs fputstr frac free freebernoulli freeeuler freeglobals freeredc \
|
fputs fputstr frac free freebernoulli freeeuler freeglobals freeredc \
|
||||||
freestatics frem freopen fscan fscanf fseek fsize ftell gcd gcdrem \
|
freestatics frem freopen fscan fscanf fseek fsize ftell gcd gcdrem \
|
||||||
@@ -164,7 +283,7 @@ DETAIL_HELP= abs access acos acosh acot acoth acsc acsch address agd append \
|
|||||||
runtime saveval scale scan scanf search sec sech seed segment select \
|
runtime saveval scale scan scanf search sec sech seed segment select \
|
||||||
sgn sha sha1 sin sinh size sizeof sleep sort sqrt srand srandom \
|
sgn sha sha1 sin sinh size sizeof sleep sort sqrt srand srandom \
|
||||||
ssq str strcat strerror strlen strpos strprintf strscan strscanf \
|
ssq str strcat strerror strlen strpos strprintf strscan strscanf \
|
||||||
substr sum swap system tail tan tanh test time trunc xor
|
substr sum swap system tail tan tanh test time trunc version xor
|
||||||
|
|
||||||
# This list is of files that are clones of DETAIL_HELP files. They are
|
# This list is of files that are clones of DETAIL_HELP files. They are
|
||||||
# built from DETAIL_HELP files.
|
# built from DETAIL_HELP files.
|
||||||
@@ -238,7 +357,8 @@ changes: ../CHANGES
|
|||||||
|
|
||||||
libcalc: ../LIBRARY
|
libcalc: ../LIBRARY
|
||||||
rm -f $@
|
rm -f $@
|
||||||
${SED} -e 's:$${LIBDIR}:${LIBDIR}:g' < ../LIBRARY > $@
|
${SED} -e 's:$${LIBDIR}:${LIBDIR}:g' \
|
||||||
|
-e 's:$${CALC_INCDIR}:${CALC_INCDIR}:g' < ../LIBRARY > $@
|
||||||
${CHMOD} 0444 $@
|
${CHMOD} 0444 $@
|
||||||
-@if [ -z "${Q}" ]; then \
|
-@if [ -z "${Q}" ]; then \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
@@ -389,11 +509,13 @@ full: ${FULL_HELP_FILES} ${MAKE_FILE}
|
|||||||
# Singular files are the same files as their plural form.
|
# Singular files are the same files as their plural form.
|
||||||
#
|
#
|
||||||
${SINGULAR_FILES}: ${PLURAL_FILES}
|
${SINGULAR_FILES}: ${PLURAL_FILES}
|
||||||
${Q}for i in ${SINGULAR_FILES}; do \
|
${Q}for i in ${SINGULAR_FILES} /dev/null; do \
|
||||||
echo "rm -f $${i}"; \
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
rm -f $${i}; \
|
echo "rm -f $${i}"; \
|
||||||
echo "cp $${i}s $${i}"; \
|
rm -f $${i}; \
|
||||||
cp $${i}s $${i}; \
|
echo "cp $${i}s $${i}"; \
|
||||||
|
cp $${i}s $${i}; \
|
||||||
|
fi; \
|
||||||
done
|
done
|
||||||
-@if [ -z "${Q}" ]; then \
|
-@if [ -z "${Q}" ]; then \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
@@ -425,12 +547,13 @@ builtin: builtin.top builtin.end ../func.c funclist.sed
|
|||||||
${Q}echo "forming builtin help file"
|
${Q}echo "forming builtin help file"
|
||||||
-${Q}rm -f funclist.c
|
-${Q}rm -f funclist.c
|
||||||
${Q}${SED} -n -f funclist.sed ../func.c > funclist.c
|
${Q}${SED} -n -f funclist.sed ../func.c > funclist.c
|
||||||
-${Q}rm -f funclist.o funclist
|
-${Q}rm -f funclist.o funclist${EXT}
|
||||||
${Q}${LCC} ${ICFLAGS} -DFUNCLIST -I/usr/include -I.. funclist.c -c
|
${Q}${LCC} ${ICFLAGS} -DFUNCLIST -I/usr/include \
|
||||||
${Q}${LCC} ${ILDFLAGS} funclist.o -o funclist
|
-I.. funclist.c -c 2>/dev/null
|
||||||
|
${Q}${LCC} ${ILDFLAGS} funclist.o -o funclist${EXT}
|
||||||
-${Q}rm -f builtin
|
-${Q}rm -f builtin
|
||||||
${Q}cat builtin.top > builtin
|
${Q}cat builtin.top > builtin
|
||||||
${Q}./funclist | \
|
${Q}./funclist${EXT} | \
|
||||||
${SED} -e 's/^/ /' -e 's/[ ][ ]*$$//' >> builtin
|
${SED} -e 's/^/ /' -e 's/[ ][ ]*$$//' >> builtin
|
||||||
${Q}cat builtin.end >> builtin
|
${Q}cat builtin.end >> builtin
|
||||||
${Q}echo "builtin help file formed"
|
${Q}echo "builtin help file formed"
|
||||||
@@ -453,9 +576,11 @@ builtin: builtin.top builtin.end ../func.c funclist.sed
|
|||||||
##
|
##
|
||||||
|
|
||||||
distlist: ${DISTLIST}
|
distlist: ${DISTLIST}
|
||||||
${Q}for i in ${DISTLIST}; do \
|
${Q}for i in ${DISTLIST} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
echo help/$$i; \
|
echo help/$$i; \
|
||||||
done | ${SORT}
|
fi; \
|
||||||
|
done | LANG=C ${SORT}
|
||||||
|
|
||||||
distdir:
|
distdir:
|
||||||
${Q}echo help
|
${Q}echo help
|
||||||
@@ -479,57 +604,95 @@ bsdi: all
|
|||||||
#
|
#
|
||||||
detaillist:
|
detaillist:
|
||||||
${Q}-(echo "xxxxx"; \
|
${Q}-(echo "xxxxx"; \
|
||||||
for i in ${DETAIL_HELP}; do \
|
for i in ${DETAIL_HELP} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
if [ ! -f RCS/$$i,v ]; then \
|
if [ ! -f RCS/$$i,v ]; then \
|
||||||
echo "WARNING: $$i not under RCS control" 1>&2; \
|
echo "WARNING: $$i not under RCS control" 1>&2; \
|
||||||
else \
|
else \
|
||||||
echo $$i; \
|
echo $$i; \
|
||||||
fi; \
|
fi; \
|
||||||
done | ${SORT}) | ${FMT} -70 | \
|
fi; \
|
||||||
|
done | LANG=C ${SORT}) | ${FMT} -70 | \
|
||||||
${SED} -e '1s/xxxxx/DETAIL_HELP=/' -e '2,$$s/^/ /' \
|
${SED} -e '1s/xxxxx/DETAIL_HELP=/' -e '2,$$s/^/ /' \
|
||||||
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# rpm rules
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
echo_inst_files:
|
||||||
|
${Q}for i in ${STD_HELP_FILES} full ${BLT_HELP_FILES} \
|
||||||
|
builtin ${DETAIL_HELP} ${SINGULAR_FILES} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
|
echo __file__ ${HELPDIR}/$$i; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
${Q}echo __file__ ${HELPDIR}/obj
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# Utility rules
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f obj mkbuiltin funclist.c funclist.o funclist
|
rm -f obj mkbuiltin funclist.c funclist.o funclist${EXT}
|
||||||
rm -f COPYING COPYING-LGPL
|
rm -f COPYING COPYING-LGPL
|
||||||
|
|
||||||
clobber:
|
clobber:
|
||||||
rm -f ${BLT_HELP_FILES} full .all calc
|
rm -f ${BLT_HELP_FILES} full .all calc
|
||||||
rm -f obj mkbuiltin funclist.c funclist.o funclist
|
rm -f obj mkbuiltin funclist.c funclist.o funclist${EXT}
|
||||||
rm -f COPYING COPYING-LGPL
|
rm -f COPYING COPYING-LGPL
|
||||||
rm -f ${SINGULAR_FILES} ${DETAIL_CLONE}
|
rm -f ${SINGULAR_FILES} ${DETAIL_CLONE}
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
-${Q}if [ ! -d ${TOPDIR} ]; then \
|
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \
|
||||||
echo mkdir ${TOPDIR}; \
|
echo mkdir $T${CALC_SHAREDIR}; \
|
||||||
mkdir ${TOPDIR}; \
|
mkdir $T${CALC_SHAREDIR}; \
|
||||||
|
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${CALC_SHAREDIR}"; \
|
||||||
|
mkdir -p "$T${CALC_SHAREDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \
|
||||||
|
${CHMOD} 0755 $T${CALC_SHAREDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
-${Q}if [ ! -d ${LIBDIR} ]; then \
|
-${Q}if [ ! -d $T${HELPDIR} ]; then \
|
||||||
echo mkdir ${LIBDIR}; \
|
echo mkdir $T${HELPDIR}; \
|
||||||
mkdir ${LIBDIR}; \
|
mkdir $T${HELPDIR}; \
|
||||||
|
if [ ! -d "$T${HELPDIR}" ]; then \
|
||||||
|
echo mkdir -p "$T${HELPDIR}"; \
|
||||||
|
mkdir -p "$T${HELPDIR}"; \
|
||||||
|
fi; \
|
||||||
|
echo ${CHMOD} 0755 $T${HELPDIR}; \
|
||||||
|
${CHMOD} 0755 $T${HELPDIR}; \
|
||||||
else \
|
else \
|
||||||
true; \
|
true; \
|
||||||
fi
|
fi
|
||||||
-${Q}if [ ! -d ${HELPDIR} ]; then \
|
-${Q}for i in ${STD_HELP_FILES} ${BLT_HELP_FILES} builtin \
|
||||||
echo mkdir ${HELPDIR}; \
|
full ${DETAIL_HELP} ${SINGULAR_FILES} /dev/null; do \
|
||||||
mkdir ${HELPDIR}; \
|
if [ "$$i" = "/dev/null" ]; then \
|
||||||
else \
|
continue; \
|
||||||
true; \
|
fi; \
|
||||||
fi
|
if ${CMP} -s $$i $T${HELPDIR}/$$i; then \
|
||||||
${Q}for i in ${STD_HELP_FILES} ${BLT_HELP_FILES} builtin \
|
true; \
|
||||||
full ${DETAIL_HELP} ${SINGULAR_FILES}; do \
|
else \
|
||||||
echo rm -f ${HELPDIR}/$$i; \
|
rm -f $T${HELPDIR}/$$i.new; \
|
||||||
rm -f ${HELPDIR}/$$i; \
|
cp -f $$i $T${HELPDIR}/$$i.new; \
|
||||||
echo cp $$i ${HELPDIR}; \
|
${CHMOD} 0444 $T${HELPDIR}/$$i.new; \
|
||||||
cp $$i ${HELPDIR}; \
|
mv -f $T${HELPDIR}/$$i.new $T${HELPDIR}/$$i; \
|
||||||
echo ${CHMOD} 0444 ${HELPDIR}/$$i; \
|
echo "installed $T${HELPDIR}/$$i"; \
|
||||||
${CHMOD} 0444 ${HELPDIR}/$$i; \
|
fi; \
|
||||||
done
|
done
|
||||||
rm -f ${HELPDIR}/obj
|
-${Q}if ${CMP} -s obj.file $T${HELPDIR}/obj; then \
|
||||||
cp obj.file ${HELPDIR}/obj
|
true; \
|
||||||
${CHMOD} 0444 ${HELPDIR}/obj
|
else \
|
||||||
${Q}echo remove files that are obsolete
|
rm -f $T${HELPDIR}/obj.new; \
|
||||||
-rm -f rmblk block stdlib
|
cp -f obj.file $T${HELPDIR}/obj.new; \
|
||||||
-rm -f ${HELPDIR}/rmblk ${HELPDIR}/block ${HELPDIR}/stdlib
|
${CHMOD} 0444 $T${HELPDIR}/obj.new; \
|
||||||
|
mv -f $T${HELPDIR}/obj.new $T${HELPDIR}/obj; \
|
||||||
|
echo "installed $T${HELPDIR}/obj"; \
|
||||||
|
fi
|
||||||
|
14
help/address
14
help/address
@@ -23,7 +23,7 @@ DESCRIPTION
|
|||||||
0 <= i < sizeof(B). &B[i] then returns the address at which this
|
0 <= i < sizeof(B). &B[i] then returns the address at which this
|
||||||
octet is located until the block is freed or relocated. Freeing
|
octet is located until the block is freed or relocated. Freeing
|
||||||
of an unnamed block B occurs when a new value is assigned to B or
|
of an unnamed block B occurs when a new value is assigned to B or
|
||||||
when B ceases to exist; a named block B is freed by blkfree(B().
|
when B ceases to exist; a named block B is freed by blkfree(B).
|
||||||
A block is relocated when an operation like copying to B requires
|
A block is relocated when an operation like copying to B requires
|
||||||
a change of sizeof(B).
|
a change of sizeof(B).
|
||||||
|
|
||||||
@@ -70,18 +70,18 @@ DESCRIPTION
|
|||||||
> p = &"abc"
|
> p = &"abc"
|
||||||
> A = "abc"
|
> A = "abc"
|
||||||
|
|
||||||
The address &*A of the value of A will be equal to p.
|
the address &*A of the value of A will be equal to p.
|
||||||
|
|
||||||
Except in cases like strcat(A, "") when *A identified with a literal
|
Except in cases like strcat(A, "") when *A identified with a literal
|
||||||
string as above, definitions of string values using strcat() or substr()
|
string as above, definitions of string values using strcat() or substr()
|
||||||
will copy the relevant strings to newly allocated addresses which will
|
will copy the relevant strings to newly allocated addresses which will
|
||||||
be useable only while the variables retain these defined values.
|
be useable only while the variables retain these defined values.
|
||||||
For example,
|
For example, after
|
||||||
|
|
||||||
> B = C = strcat("a", "bc");
|
> B = C = strcat("a", "bc");
|
||||||
|
|
||||||
&*B and &*C will be different. If p is defined by p = &*B, p should
|
&*B and &*C will be different. If p is defined by p = &*B, p should
|
||||||
not be used after a mew value is assigned to B, or B ceases to exist,
|
not be used after a new value is assigned to B, or B ceases to exist,
|
||||||
etc.
|
etc.
|
||||||
|
|
||||||
When compilation of a function encounters for the first time a particular
|
When compilation of a function encounters for the first time a particular
|
||||||
@@ -117,7 +117,7 @@ DESCRIPTION
|
|||||||
|
|
||||||
> A = B = C = f(2);
|
> A = B = C = f(2);
|
||||||
|
|
||||||
which, not only performs the addition n f() only once, but stores the
|
which, not only performs the addition in f() only once, but stores the
|
||||||
number values for A, B and C at the same address.
|
number values for A, B and C at the same address.
|
||||||
|
|
||||||
Whether a value V is a pointer and if so, its type, is indicated by the
|
Whether a value V is a pointer and if so, its type, is indicated by the
|
||||||
@@ -176,8 +176,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: address,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: address,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/address,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/address,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1997/09/06 20:03:34
|
## Under source code control: 1997/09/06 20:03:34
|
||||||
|
@@ -13,7 +13,7 @@ TYPES
|
|||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
p->X returns the same as (*p).X. Thus the current value of *p is
|
p->X returns the same as (*p).X. Thus the current value of *p is
|
||||||
to be an object of a type for which X identifies one element.
|
to be an object of a type for which X identifies one element.
|
||||||
p->X then returns the lvalue corresponding to that element of of the
|
p->X then returns the lvalue corresponding to that element of the
|
||||||
value of *p.
|
value of *p.
|
||||||
|
|
||||||
The expression *p.X will cause a runtime error since this is
|
The expression *p.X will cause a runtime error since this is
|
||||||
@@ -66,8 +66,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: arrow,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: arrow,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/arrow,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/arrow,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1997/09/06 20:03:34
|
## Under source code control: 1997/09/06 20:03:34
|
||||||
|
@@ -14,7 +14,7 @@ DESCRIPTION
|
|||||||
Returns the asin of x to a multiple of eps with error less in
|
Returns the asin of x to a multiple of eps with error less in
|
||||||
absolute value than .75 * eps.
|
absolute value than .75 * eps.
|
||||||
|
|
||||||
v = asin(x) is the number in [-p1/2, pi/2] for which sin(v) = x.
|
v = asin(x) is the number in [-pi/2, pi/2] for which sin(v) = x.
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
> print asin(.5, 1e-5), asin(.5, 1e-10), asin(.5, 1e-15), asin(.5, 1e-20)
|
> print asin(.5, 1e-5), asin(.5, 1e-10), asin(.5, 1e-15), asin(.5, 1e-20)
|
||||||
@@ -45,8 +45,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: asin,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: asin,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asin,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asin,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1994/03/19 01:40:24
|
## Under source code control: 1994/03/19 01:40:24
|
||||||
|
11
help/assoc
11
help/assoc
@@ -32,10 +32,9 @@ DESCRIPTION
|
|||||||
may have different numbers (between 1 and 4 inclusive) of indices,
|
may have different numbers (between 1 and 4 inclusive) of indices,
|
||||||
and these indices need not be integers in specified ranges.
|
and these indices need not be integers in specified ranges.
|
||||||
|
|
||||||
Assignments of a null value
|
Assignment of a null value to an element of an association does not
|
||||||
to an element of an association does not delete the element, but
|
delete the element, but a later reference to that element will return
|
||||||
a later reference to that element will return the null value as if
|
the null value as if the element is undefined.
|
||||||
the element is undefined.
|
|
||||||
|
|
||||||
The elements of an association are stored in a hash table for
|
The elements of an association are stored in a hash table for
|
||||||
quick access. The index values are hashed to select the correct
|
quick access. The index values are hashed to select the correct
|
||||||
@@ -99,8 +98,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: assoc,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: assoc,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/assoc,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/assoc,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1994/09/25 20:22:31
|
## Under source code control: 1994/09/25 20:22:31
|
||||||
|
@@ -14,7 +14,7 @@ DESCRIPTION
|
|||||||
Returns the atan of x to a multiple of eps with error less in
|
Returns the atan of x to a multiple of eps with error less in
|
||||||
absolute value than .75 * eps.
|
absolute value than .75 * eps.
|
||||||
|
|
||||||
v = atan(x) is the number in (-p1/2, pi/2) for which tan(v) = x.
|
v = atan(x) is the number in (-pi/2, pi/2) for which tan(v) = x.
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
> print atan(2, 1e-5), atan(2, 1e-10), atan(2, 1e-15), atan(2, 1e-20)
|
> print atan(2, 1e-5), atan(2, 1e-10), atan(2, 1e-15), atan(2, 1e-20)
|
||||||
@@ -45,8 +45,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: atan,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: atan,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atan,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atan,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1994/03/19 01:40:25
|
## Under source code control: 1994/03/19 01:40:25
|
||||||
|
@@ -57,7 +57,7 @@ DESCRIPTION
|
|||||||
base(1e20) base(2^64) base(2^8191-1)
|
base(1e20) base(2^64) base(2^8191-1)
|
||||||
|
|
||||||
However the base() function will only return one of the base values
|
However the base() function will only return one of the base values
|
||||||
lised in the table above.
|
listed in the table above.
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
> base()
|
> base()
|
||||||
@@ -79,7 +79,7 @@ LINK LIBRARY
|
|||||||
MODE_REAL, MODE_EXP, MODE_HEX, MODE_OCTAL, MODE_BINARY
|
MODE_REAL, MODE_EXP, MODE_HEX, MODE_OCTAL, MODE_BINARY
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
config
|
base2, config, str
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999 Landon Curt Noll
|
||||||
##
|
##
|
||||||
@@ -97,8 +97,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.5 $
|
||||||
## @(#) $Id: base,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: base,v 29.5 2002/12/29 09:17:54 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/base,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/base,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1994/09/30 00:09:39
|
## Under source code control: 1994/09/30 00:09:39
|
||||||
|
120
help/base2
Normal file
120
help/base2
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
NAME
|
||||||
|
base2 - set 2nd output base
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
base2([mode])
|
||||||
|
|
||||||
|
TYPES
|
||||||
|
mode real
|
||||||
|
|
||||||
|
return real
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
By default, calc will output values according to the default base
|
||||||
|
as controlled by the base() builtin function.
|
||||||
|
|
||||||
|
The base2() builtin function, if given a non-zero argument, enables
|
||||||
|
double base output mode. In double base output mode, calc values
|
||||||
|
are displayed twice, once according to base() and again according
|
||||||
|
to base2(). In double base output mode, the second time a value is
|
||||||
|
displayed, it is displayed within comments:
|
||||||
|
|
||||||
|
21701 /* 0x54c5 */
|
||||||
|
|
||||||
|
The arguments for base2() are identical to base() with the addition
|
||||||
|
of the 0 value:
|
||||||
|
|
||||||
|
base2 equivalent
|
||||||
|
config("mode2")'s
|
||||||
|
|
||||||
|
2 "binary" base 2 fractions
|
||||||
|
"bin"
|
||||||
|
|
||||||
|
8 "octal" base 8 fractions
|
||||||
|
"oct"
|
||||||
|
|
||||||
|
10 "real" base 10 floating point
|
||||||
|
"float"
|
||||||
|
"default"
|
||||||
|
|
||||||
|
-10 "integer" base 10 integers
|
||||||
|
"int"
|
||||||
|
|
||||||
|
16 "hexadecimal" base 16 fractions
|
||||||
|
"hex"
|
||||||
|
|
||||||
|
1/3 "fraction" base 10 fractions
|
||||||
|
"frac"
|
||||||
|
|
||||||
|
1e20 "scientific" base 10 scientific notation
|
||||||
|
"sci"
|
||||||
|
"exp"
|
||||||
|
|
||||||
|
0 "off" disable double base output
|
||||||
|
|
||||||
|
For convenience, any non-integer non-zero value is assumed to mean
|
||||||
|
base 10 fractions and any integer >= 2^64 is assumed to mean base 10
|
||||||
|
scientific notation.
|
||||||
|
|
||||||
|
These base2() calls have the same meaning as config("mode2", "fraction"):
|
||||||
|
|
||||||
|
base2(1/3) base2(0.1415) base2(16/37)
|
||||||
|
|
||||||
|
These base2() calls have the same meaning as config("mode2", "scientific"):
|
||||||
|
|
||||||
|
base2(1e20) base2(2^64) base2(2^8191-1)
|
||||||
|
|
||||||
|
However the base2() function will only return one of the base values
|
||||||
|
listed in the table above.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
> base2()
|
||||||
|
0
|
||||||
|
> base2(8)
|
||||||
|
0 /* 0 */
|
||||||
|
> print 10
|
||||||
|
10 /* 012 */
|
||||||
|
> base2(16),
|
||||||
|
> 131072
|
||||||
|
131072 /* 0x20000 */
|
||||||
|
> 2345
|
||||||
|
2345 /* 0x929 */
|
||||||
|
|
||||||
|
LIMITS
|
||||||
|
none
|
||||||
|
|
||||||
|
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,
|
||||||
|
MODE2_OFF
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
base, config, str
|
||||||
|
|
||||||
|
## Copyright (C) 2002 Landon Curt Noll
|
||||||
|
##
|
||||||
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
## as published by the Free Software Foundation.
|
||||||
|
##
|
||||||
|
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
## Public License for more details.
|
||||||
|
##
|
||||||
|
## A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
##
|
||||||
|
## @(#) $Revision: 1.3 $
|
||||||
|
## @(#) $Id: base2,v 1.3 2002/12/29 09:17:54 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/base2,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 2002/12/29 00:21:07
|
||||||
|
## File existed as early as: 2002
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
@@ -15,7 +15,7 @@ DESCRIPTION
|
|||||||
|
|
||||||
t/(exp(t) - 1) = Sum B_n * t^n/n!
|
t/(exp(t) - 1) = Sum B_n * t^n/n!
|
||||||
|
|
||||||
bernouuli(n) is zero both for n < 0 and for n odd and > 2.
|
bernoulli(n) is zero both for n < 0 and for n odd and > 2.
|
||||||
When bernoulli(n) is computed for positive even n, the values for
|
When bernoulli(n) is computed for positive even n, the values for
|
||||||
n and smaller positive even indices are stored in a table so that
|
n and smaller positive even indices are stored in a table so that
|
||||||
a later call to bernoulli(k) with 0 <= k < n will be executed quickly.
|
a later call to bernoulli(k) with 0 <= k < n will be executed quickly.
|
||||||
@@ -57,8 +57,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.4 $
|
## @(#) $Revision: 29.5 $
|
||||||
## @(#) $Id: bernoulli,v 29.4 2000/12/17 12:27:58 chongo Exp $
|
## @(#) $Id: bernoulli,v 29.5 2002/07/10 11:47:04 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bernoulli,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bernoulli,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 2000/07/13 01:33:00
|
## Under source code control: 2000/07/13 01:33:00
|
||||||
|
6
help/blk
6
help/blk
@@ -122,7 +122,7 @@ DESCRIPTION
|
|||||||
Named blocks are assigned index numbers 0, 1, 2, ..., in the order
|
Named blocks are assigned index numbers 0, 1, 2, ..., in the order
|
||||||
of their creation. The block with index id is returned by blocks(id).
|
of their creation. The block with index id is returned by blocks(id).
|
||||||
With no argument, blocks() returns the number of current unfreed
|
With no argument, blocks() returns the number of current unfreed
|
||||||
named blocks. A named block may be used
|
named blocks.
|
||||||
|
|
||||||
The memory allocated to a named block is freed by the blkfree()
|
The memory allocated to a named block is freed by the blkfree()
|
||||||
function with argument the named block, its name, or its id number.
|
function with argument the named block, its name, or its id number.
|
||||||
@@ -234,8 +234,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: blk,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: blk,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blk,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blk,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1997/04/05 13:07:13
|
## Under source code control: 1997/04/05 13:07:13
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
NAME
|
NAME
|
||||||
blocks - return a named file or number of unfreed named blocks
|
blocks - return a named block or number of unfreed named blocks
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
blocks([id])
|
blocks([id])
|
||||||
@@ -58,8 +58,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: blocks,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: blocks,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blocks,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blocks,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1997/04/05 13:07:13
|
## Under source code control: 1997/04/05 13:07:13
|
||||||
|
86
help/config
86
help/config
@@ -16,6 +16,7 @@ Configuration parameters
|
|||||||
"epsilon" sets error value for transcendentals.
|
"epsilon" sets error value for transcendentals.
|
||||||
"maxprint" sets maximum number of elements printed.
|
"maxprint" sets maximum number of elements printed.
|
||||||
"mode" sets printout mode.
|
"mode" sets printout mode.
|
||||||
|
"mode2" sets 2nd base printout mode.
|
||||||
"mul2" sets size for alternative multiply.
|
"mul2" sets size for alternative multiply.
|
||||||
"sq2" sets size for alternative squaring.
|
"sq2" sets size for alternative squaring.
|
||||||
"pow2" sets size for alternate powering.
|
"pow2" sets size for alternate powering.
|
||||||
@@ -47,6 +48,10 @@ Configuration parameters
|
|||||||
"ctrl_d" The interactive meaning of ^D (Control D)
|
"ctrl_d" The interactive meaning of ^D (Control D)
|
||||||
"program" Read-only calc program or shell script path
|
"program" Read-only calc program or shell script path
|
||||||
"basename" Read-only basename of the program value
|
"basename" Read-only basename of the program value
|
||||||
|
"windows" Read-only indicator of MS windows
|
||||||
|
"cygwin" TRUE=>calc compiled with cygwin, Read-only
|
||||||
|
"compile_custom" TRUE=>calc was compiled with custom functions
|
||||||
|
"allow_custom" TRUE=>custom functions are enabled
|
||||||
"version" Read-only calc version
|
"version" Read-only calc version
|
||||||
|
|
||||||
The "all" config value allows one to save/restore the configuration
|
The "all" config value allows one to save/restore the configuration
|
||||||
@@ -183,6 +188,7 @@ Detailed config descriptions
|
|||||||
=-=
|
=-=
|
||||||
|
|
||||||
config("mode", "mode_string")
|
config("mode", "mode_string")
|
||||||
|
config("mode2", "mode_string")
|
||||||
|
|
||||||
The "mode" parameter is a string specifying the mode for printing of
|
The "mode" parameter is a string specifying the mode for printing of
|
||||||
numbers by the unformatted print functions, and the default
|
numbers by the unformatted print functions, and the default
|
||||||
@@ -218,7 +224,17 @@ Detailed config descriptions
|
|||||||
Where multiple strings are given, the first string listed is what
|
Where multiple strings are given, the first string listed is what
|
||||||
config("mode") will return.
|
config("mode") will return.
|
||||||
|
|
||||||
The default "mode" is "real".
|
The "mode2" controls the double base output. When set to a value
|
||||||
|
other than "off", calc outputs files in both the "base" mode as
|
||||||
|
well as the "base2" mode. The "mode2" value may be any of the
|
||||||
|
"mode" values with the addition of:
|
||||||
|
|
||||||
|
"off" disable 2nd base output mode base2(0)
|
||||||
|
|
||||||
|
The base() builtin function sets and returns the "mode" value.
|
||||||
|
The base2() builtin function sets and returns the "mode2" value.
|
||||||
|
|
||||||
|
The default "mode" is "real". The default "mode2" is "off".
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
@@ -509,7 +525,9 @@ Detailed config descriptions
|
|||||||
|
|
||||||
5 Report on changes to the run state of calc.
|
5 Report on changes to the run state of calc.
|
||||||
|
|
||||||
Bits >= 6 are reserved for future use and should not be used at this time.
|
6 Report on rand() subtractive 100 shuffle generator issues.
|
||||||
|
|
||||||
|
Bits >= 7 are reserved for future use and should not be used at this time.
|
||||||
|
|
||||||
By default, "calc_debug" is 0. The initial value may be overridden
|
By default, "calc_debug" is 0. The initial value may be overridden
|
||||||
by the -D command line option.
|
by the -D command line option.
|
||||||
@@ -537,7 +555,10 @@ Detailed config descriptions
|
|||||||
is displayed.
|
is displayed.
|
||||||
|
|
||||||
2 Show func will display more information about a functions
|
2 Show func will display more information about a functions
|
||||||
arguments as well as more argument sdummary information.
|
arguments and argument summary information.
|
||||||
|
|
||||||
|
3 During execution, allow calc standard resource files
|
||||||
|
to output additional debugging information.
|
||||||
|
|
||||||
The value for config("resource_debug") in both oldstd and newstd is 3,
|
The value for config("resource_debug") in both oldstd and newstd is 3,
|
||||||
but if calc is invoked with the -d flag, its initial value is zero.
|
but if calc is invoked with the -d flag, its initial value is zero.
|
||||||
@@ -574,12 +595,14 @@ Detailed config descriptions
|
|||||||
|
|
||||||
The "verbose_quit" controls the print of the message:
|
The "verbose_quit" controls the print of the message:
|
||||||
|
|
||||||
Quit or abort executed
|
quit or abort executed
|
||||||
|
|
||||||
when a non-interactive quit or abort without an argument is encountered.
|
when a non-interactive quit or abort without an argument is encountered.
|
||||||
A quit of abort without an argument does not display a message when
|
A quit of abort without an argument does not display a message when
|
||||||
invoked at the interactive level.
|
invoked at the interactive level.
|
||||||
|
|
||||||
|
By deafult, "verbose_quit" is false.
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
config("ctrl_d", "ctrl_d_string")
|
config("ctrl_d", "ctrl_d_string")
|
||||||
@@ -674,6 +697,57 @@ Detailed config descriptions
|
|||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
|
config("windows") <== NOTE: This is a read-only config value
|
||||||
|
|
||||||
|
Returns TRUE if you are running on a MS windows system, false if you
|
||||||
|
are running on an operating system that does not hate you.
|
||||||
|
|
||||||
|
This config parameter is read-only and cannot be set.
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
config("cygwin") <== NOTE: This is a read-only config value
|
||||||
|
|
||||||
|
Returns TRUE if you calc was compiled with cygwin, false otherwise.
|
||||||
|
|
||||||
|
This config parameter is read-only and cannot be set.
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
config("compile_custom") <== NOTE: This is a read-only config value
|
||||||
|
|
||||||
|
Returns TRUE if you calc was compiled with -DCUSTOM. By default,
|
||||||
|
the calc Makefile uses ALLOW_CUSTOM= -DCUSTOM so by default
|
||||||
|
config("compile_custom") is TRUE. If, however, calc is compiled
|
||||||
|
without -DCUSTOM, then config("compile_custom") will be FALSE.
|
||||||
|
|
||||||
|
The config("compile_custom") value is only affected by compile
|
||||||
|
flags. The calc -D runtime command line option does not change
|
||||||
|
the config("compile_custom") value.
|
||||||
|
|
||||||
|
See also config("allow_custom").
|
||||||
|
|
||||||
|
This config parameter is read-only and cannot be set.
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
config("allow_custom") <== NOTE: This is a read-only config value
|
||||||
|
|
||||||
|
Returns TRUE if you custom functions are enabled. To allow the use
|
||||||
|
of custom functions, calc must be compiled with -DCUSTOM (which it
|
||||||
|
is by default) AND calc run be run with the -D runtime command line
|
||||||
|
option (which it is not by default).
|
||||||
|
|
||||||
|
If config("allow_custom") is TRUE, then custom functions are allowed.
|
||||||
|
If config("allow_custom") is FALSE, then custom functions are not
|
||||||
|
allowed.
|
||||||
|
|
||||||
|
See also config("compile_custom").
|
||||||
|
|
||||||
|
This config parameter is read-only and cannot be set.
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
config("version") <== NOTE: This is a read-only config value
|
config("version") <== NOTE: This is a read-only config value
|
||||||
|
|
||||||
The version string of the calc program can be obtained by:
|
The version string of the calc program can be obtained by:
|
||||||
@@ -698,8 +772,8 @@ Detailed config descriptions
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.10 $
|
||||||
## @(#) $Id: config,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: config,v 29.10 2004/07/27 23:45:52 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/config,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/config,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1991/07/21 04:37:17
|
## Under source code control: 1991/07/21 04:37:17
|
||||||
|
43
help/contrib
43
help/contrib
@@ -35,24 +35,41 @@ If your change is large, you should send entire files (either
|
|||||||
as a diff -c /dev/null your-file patch, or as a uuencoded and
|
as a diff -c /dev/null your-file patch, or as a uuencoded and
|
||||||
gziped (or compressed) tar file).
|
gziped (or compressed) tar file).
|
||||||
|
|
||||||
You should send submissions to:
|
To contribute code, scripts, resource files and/or to help please
|
||||||
|
join the low volume calc mailing list by sending EMail to:
|
||||||
|
|
||||||
calc-contrib at asthe dot com
|
calc-contrib at asthe dot com
|
||||||
|
|
||||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||||
|
|
||||||
|
Your subject must contain the words:
|
||||||
|
|
||||||
|
calc mailing list subscription
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
|
Feel free to follow the name line with additional EMail text as desired.
|
||||||
|
|
||||||
Thanks for considering submitting code to calc. Calc is a collective
|
Thanks for considering submitting code to calc. Calc is a collective
|
||||||
work by a number of people. It would not be what it is today without
|
work by a number of people. It would not be what it is today without
|
||||||
your efforts and submissions!
|
your efforts and submissions!
|
||||||
|
|
||||||
Calc bug reports, however, should be sent to:
|
=-=
|
||||||
|
|
||||||
|
Calc bug reports and calc bug fixes should be sent to:
|
||||||
|
|
||||||
calc-bugs at asthe dot com
|
calc-bugs at asthe dot com
|
||||||
|
|
||||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||||
|
|
||||||
|
Your subject must contain the words:
|
||||||
|
|
||||||
|
calc bug report
|
||||||
|
|
||||||
|
You may have additional words in your subject line.
|
||||||
|
|
||||||
See the BUGS file or try the help command:
|
See the BUGS file or try the help command:
|
||||||
|
|
||||||
help bugs
|
help bugs
|
||||||
@@ -61,26 +78,10 @@ for details on bug reporting.
|
|||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
One may join the calc testing group by sending a request to:
|
|
||||||
|
|
||||||
calc-tester-request at asthe dot com
|
|
||||||
|
|
||||||
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
|
||||||
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
|
||||||
|
|
||||||
Your message body (not the subject) should consist of:
|
|
||||||
|
|
||||||
subscribe calc-tester address
|
|
||||||
end
|
|
||||||
name your_full_name
|
|
||||||
|
|
||||||
where "address" is your EMail address and "your_full_name"
|
|
||||||
is your full name.
|
|
||||||
|
|
||||||
Landon Curt Noll
|
Landon Curt Noll
|
||||||
http://www.isthe.com/chongo/
|
http://www.isthe.com/chongo/
|
||||||
|
|
||||||
chongo <was here> /\../\
|
chongo (share and enjoy) /\../\
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999 Landon Curt Noll
|
||||||
##
|
##
|
||||||
@@ -98,8 +99,8 @@ chongo <was here> /\../\
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.4 $
|
||||||
## @(#) $Id: contrib,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: contrib,v 29.4 2001/06/01 11:37:14 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/contrib,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/contrib,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1997/03/09 16:33:22
|
## Under source code control: 1997/03/09 16:33:22
|
||||||
|
40
help/digits
40
help/digits
@@ -11,20 +11,38 @@ TYPES
|
|||||||
return integer
|
return integer
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Returns the least non-negative integer n for which abs(x) < b^n.
|
Returns number of digits in the standard base-b representation
|
||||||
|
when x is truncated to an integer and the sign is ignored.
|
||||||
|
|
||||||
digits(x, b) = 0 if and only if abs(x) < 1.
|
To be more precise: when abs(int(x)) > 0, this function returns
|
||||||
|
the value 1 + ilog(x, b). When abs(int(x)) == 0, then this
|
||||||
|
function returns the value 1.
|
||||||
|
|
||||||
For real x with absolute value >= 1, digits(x, b) is the number
|
If omitted, b is assumed to be 10. If given, b must be an
|
||||||
of digits in the standard base-b "decimal" representation of int(abs(x));
|
integer > 1.
|
||||||
this is also given by 1 + ilog(x, b).
|
|
||||||
|
One should remember these special cases:
|
||||||
|
|
||||||
|
digits(12.3456) == 2 computes with the integer part only
|
||||||
|
digits(-1234) == 4 computes with the absolute value only
|
||||||
|
digits(0) == 1 specical case
|
||||||
|
digits(-0.123) == 1 combination of all of the above
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
> print digits(0), digits(0.0123), digits(3.7), digits(-27), digits(-99.7)
|
> print digits(100), digits(23209), digits(2^72)
|
||||||
0 0 1 2 2
|
3 5 22
|
||||||
|
|
||||||
|
> print digits(0), digits(1), digits(-1)
|
||||||
|
1 1 1
|
||||||
|
|
||||||
|
> print digits(-1234), digits(12.3456), digits(107.207)
|
||||||
|
4 2 3
|
||||||
|
|
||||||
|
> print digits(17^463-1, 17), digits(10000, 100), digits(21701, 2)
|
||||||
|
3, 15 14
|
||||||
|
|
||||||
LIMITS
|
LIMITS
|
||||||
none
|
b > 1
|
||||||
|
|
||||||
LINK LIBRARY
|
LINK LIBRARY
|
||||||
long qdigits(NUMBER *q, ZVALUE base)
|
long qdigits(NUMBER *q, ZVALUE base)
|
||||||
@@ -32,7 +50,7 @@ LINK LIBRARY
|
|||||||
SEE ALSO
|
SEE ALSO
|
||||||
digit, places
|
digit, places
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2003 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -48,8 +66,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.3 $
|
## @(#) $Revision: 29.5 $
|
||||||
## @(#) $Id: digits,v 29.3 2000/12/14 10:32:24 chongo Exp $
|
## @(#) $Id: digits,v 29.5 2003/01/26 19:41:35 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/digits,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/digits,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1995/10/03 10:40:01
|
## Under source code control: 1995/10/03 10:40:01
|
||||||
|
81
help/display
Normal file
81
help/display
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
NAME
|
||||||
|
display - set and/or return decimal digits for displaying numbers
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
display([d])
|
||||||
|
|
||||||
|
TYPES
|
||||||
|
d integer >= 0
|
||||||
|
|
||||||
|
return integer
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
When given an argument, this function sets 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
|
||||||
|
formatted printing (printf, strprintf, fprintf) when precision is
|
||||||
|
not specified. The return value is the previous display digit value.
|
||||||
|
|
||||||
|
When given no arguments, this function returns the current
|
||||||
|
display digit value.
|
||||||
|
|
||||||
|
The builtin function:
|
||||||
|
|
||||||
|
display(d)
|
||||||
|
display()
|
||||||
|
|
||||||
|
is an alias for:
|
||||||
|
|
||||||
|
config("display", d)
|
||||||
|
config("display")
|
||||||
|
|
||||||
|
The display digit value does not change the stored value of a number.
|
||||||
|
It only changes how a stored value is displayed.
|
||||||
|
|
||||||
|
Where rounding is necessary to display up to d decimal places,
|
||||||
|
the type of rounding to be used is controlled by config("outround").
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
> print display(), 2/3
|
||||||
|
20 ~0.66666666666666666667
|
||||||
|
|
||||||
|
> print display(40), 2/3
|
||||||
|
20 ~0.6666666666666666666666666666666666666667
|
||||||
|
|
||||||
|
> print display(5), 2/3
|
||||||
|
40 ~0.66667
|
||||||
|
|
||||||
|
LIMITS
|
||||||
|
d >= 0
|
||||||
|
|
||||||
|
LINK LIBRARY
|
||||||
|
none
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
config
|
||||||
|
|
||||||
|
## Copyright (C) 2004 Landon Curt Noll
|
||||||
|
##
|
||||||
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
## as published by the Free Software Foundation.
|
||||||
|
##
|
||||||
|
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
## Public License for more details.
|
||||||
|
##
|
||||||
|
## A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
##
|
||||||
|
## @(#) $Revision: 29.1 $
|
||||||
|
## @(#) $Id: display,v 29.1 2004/07/26 06:54:41 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/display,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 2004/07/25 23:50:40
|
||||||
|
## File existed as early as: 2004
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
@@ -9,11 +9,11 @@ Environment variables
|
|||||||
If this variable does not exist, a compiled value
|
If this variable does not exist, a compiled value
|
||||||
is used. Typically compiled in value is:
|
is used. Typically compiled in value is:
|
||||||
|
|
||||||
.:./cal:~/cal:${LIBDIR}/calc:${LIBDIR}/custom
|
.:./cal:~/cal:${CALC_SHAREDIR}:${CUSTOMCALDIR}
|
||||||
|
|
||||||
where ${LIBDIR} is usually:
|
which is usually:
|
||||||
|
|
||||||
/usr/local/lib/calc
|
.:./cal:~/cal:/usr/share/calc:/usr/share/calc/custom
|
||||||
|
|
||||||
This value is used by the READ command. It is an error
|
This value is used by the READ command. It is an error
|
||||||
if no such readable file is found.
|
if no such readable file is found.
|
||||||
@@ -30,11 +30,11 @@ Environment variables
|
|||||||
If this variable does not exist, a compiled value
|
If this variable does not exist, a compiled value
|
||||||
is used. Typically compiled in value is:
|
is used. Typically compiled in value is:
|
||||||
|
|
||||||
${LIBDIR}/startup:~/.calcrc
|
${CALC_SHAREDIR}/startup:~/.calcrc:./.calcinit
|
||||||
|
|
||||||
where ${LIBDIR} is usually:
|
which is usually:
|
||||||
|
|
||||||
/usr/local/lib/calc
|
/usr/share/calc/startup:~/.calcrc:./.calcinit
|
||||||
|
|
||||||
Missing files along the $CALCRC path are silently ignored.
|
Missing files along the $CALCRC path are silently ignored.
|
||||||
|
|
||||||
@@ -104,8 +104,8 @@ Environment variables
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: environment,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: environment,v 29.3 2004/07/26 07:10:43 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/environment,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/environment,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1991/07/23 05:47:25
|
## Under source code control: 1991/07/23 05:47:25
|
||||||
|
40
help/fopen
40
help/fopen
@@ -15,9 +15,39 @@ DESCRIPTION
|
|||||||
opened for either reading, writing, or appending. The mode
|
opened for either reading, writing, or appending. The mode
|
||||||
is controlled by the mode flag as follows:
|
is controlled by the mode flag as follows:
|
||||||
|
|
||||||
"r" reading
|
allow allow file is positioned file(*)
|
||||||
"w" writing
|
mode reading writing truncated at mode
|
||||||
"a" appending
|
---- ------- ------- --------- --------- ----
|
||||||
|
r Y N N beginning text
|
||||||
|
rb Y N N beginning binary
|
||||||
|
r+ Y N N beginning text
|
||||||
|
r+b Y N N beginning binary
|
||||||
|
rb+ Y N N beginning binary
|
||||||
|
|
||||||
|
w N Y Y beginning text
|
||||||
|
wb N Y Y beginning binary
|
||||||
|
w+ Y Y Y beginning text
|
||||||
|
w+b Y Y Y beginning binary
|
||||||
|
wb+ Y Y Y beginning binary
|
||||||
|
|
||||||
|
a N Y Y end text
|
||||||
|
ab N Y Y end binary
|
||||||
|
a+ Y Y Y end text
|
||||||
|
a+b Y Y Y end binary
|
||||||
|
ab+ Y Y Y end binary
|
||||||
|
|
||||||
|
(*) NOTE on 'b' / binary/text mode:
|
||||||
|
|
||||||
|
The 'b' or fopen binary mode has no effect on POSIX / Linux
|
||||||
|
/ Un*x-like systems. On those systems a text file is the
|
||||||
|
same as a binary file (as it should be for any modern-day
|
||||||
|
operating system). Adding 'b' to an fopen has no effect
|
||||||
|
and is ignored.
|
||||||
|
|
||||||
|
Some non-POSIX systems sucn as MS Windoz treat text files
|
||||||
|
and binary files differently. In text mode MS Windoz consider
|
||||||
|
"\r\n" and end-of-line character. On an Apple MAC, the
|
||||||
|
text mode end-of-line character is "\r".
|
||||||
|
|
||||||
Names of files are subject to ~ expansion just like the C or
|
Names of files are subject to ~ expansion just like the C or
|
||||||
Korn shell. For example, the file name:
|
Korn shell. For example, the file name:
|
||||||
@@ -90,8 +120,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: fopen,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: fopen,v 29.3 2001/04/10 21:46:45 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fopen,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fopen,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1994/10/27 03:04:17
|
## Under source code control: 1994/10/27 03:04:17
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
NAME
|
NAME
|
||||||
freebernoulli - free stored Benoulli numbers
|
freebernoulli - free stored Bernoulli numbers
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
freebernoulli()
|
freebernoulli()
|
||||||
@@ -39,8 +39,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: freebernoulli,v 29.2 2000/07/17 15:36:26 chongo Exp $
|
## @(#) $Id: freebernoulli,v 29.3 2004/07/26 05:54:00 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/freebernoulli,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/freebernoulli,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 2000/07/13
|
## Under source code control: 2000/07/13
|
||||||
|
31
help/hash
31
help/hash
@@ -1,5 +1,5 @@
|
|||||||
NAME
|
NAME
|
||||||
hash - FNV-1 hash value
|
hash - return the calc hash value
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
hash(x_1 [, x_2, x_3, ...])
|
hash(x_1 [, x_2, x_3, ...])
|
||||||
@@ -12,27 +12,16 @@ TYPES
|
|||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Returns a hash value for one or more values of arbitrary types.
|
Returns a hash value for one or more values of arbitrary types.
|
||||||
|
|
||||||
The basis of this hash algorithm was taken from an idea sent
|
The calc hash value is based on the core Fowler/Noll/Vo hash
|
||||||
as reviewer comments to the IEEE POSIX P1003.2 committee by:
|
known as FNV-1. The return value, however, cannot be used
|
||||||
|
as an FNV hash value because calc's internal function also
|
||||||
|
takes into account more abstract concepts such as data types.
|
||||||
|
|
||||||
Phong Vo (http://www.research.att.com/info/kpv/)
|
See:
|
||||||
Glenn Fowler (http://www.research.att.com/~gsf/)
|
|
||||||
|
|
||||||
In a subsequent ballot round:
|
|
||||||
|
|
||||||
Landon Curt Noll (http://www.isthe.com/chongo/)
|
|
||||||
|
|
||||||
improved on their algorithm. Some people tried this hash
|
|
||||||
and found that it worked rather well. In an EMail message
|
|
||||||
to Landon, they named it ``Fowler/Noll/Vo'' or the FNV hash.
|
|
||||||
|
|
||||||
FNV hashes are architected to be fast while maintaining a low
|
|
||||||
collision rate. The FNV speed allows one to quickly hash lots
|
|
||||||
of data while maintaining a reasonable collision rate. See:
|
|
||||||
|
|
||||||
http://www.isthe.com/chongo/tech/comp/fnv/
|
http://www.isthe.com/chongo/tech/comp/fnv/
|
||||||
|
|
||||||
for more details as well as other forms of the FNV hash.
|
information about the Fowler/Noll/Vo (FNV) hash.
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
> a = isqrt(2e1000); s = "xyz";
|
> a = isqrt(2e1000); s = "xyz";
|
||||||
@@ -48,7 +37,7 @@ LINK LIBRARY
|
|||||||
SEE ALSO
|
SEE ALSO
|
||||||
sha, sha1, md5
|
sha, sha1, md5
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2003 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -64,8 +53,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: hash,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: hash,v 29.3 2003/03/01 01:16:02 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/hash,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/hash,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1996/03/12 23:10:01
|
## Under source code control: 1996/03/12 23:10:01
|
||||||
|
6
help/im
6
help/im
@@ -20,7 +20,7 @@ LIMITS
|
|||||||
none
|
none
|
||||||
|
|
||||||
LINK LIBRARY
|
LINK LIBRARY
|
||||||
COMPLEX *cimag(COMPLEX *x)
|
COMPLEX *c_imag(COMPLEX *x)
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
re
|
re
|
||||||
@@ -41,8 +41,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: im,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: im,v 29.3 2002/03/12 09:38:26 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/im,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/im,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1995/10/05 04:52:26
|
## Under source code control: 1995/10/05 04:52:26
|
||||||
|
11
help/places
11
help/places
@@ -16,6 +16,9 @@ DESCRIPTION
|
|||||||
|
|
||||||
places(x,b) = 0 if and only if x is an integer.
|
places(x,b) = 0 if and only if x is an integer.
|
||||||
|
|
||||||
|
If omitted, b is assumed to be 10. If given, b must be an
|
||||||
|
integer > 1.
|
||||||
|
|
||||||
places(x,b) = n > 0 if and only if the fractional part of abs(x)
|
places(x,b) = n > 0 if and only if the fractional part of abs(x)
|
||||||
has a finite base-b "decimal" representation with n digits of which
|
has a finite base-b "decimal" representation with n digits of which
|
||||||
the last digit is nonzero. This occurs if and only if every prime
|
the last digit is nonzero. This occurs if and only if every prime
|
||||||
@@ -29,7 +32,7 @@ EXAMPLE
|
|||||||
-1 3 1
|
-1 3 1
|
||||||
|
|
||||||
LIMITS
|
LIMITS
|
||||||
none
|
b > 1
|
||||||
|
|
||||||
LINK LIBRARY
|
LINK LIBRARY
|
||||||
long qplaces(NUMBER *q, ZVALUE base)
|
long qplaces(NUMBER *q, ZVALUE base)
|
||||||
@@ -37,7 +40,7 @@ LINK LIBRARY
|
|||||||
SEE ALSO
|
SEE ALSO
|
||||||
digit, digits
|
digit, digits
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2003 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -53,8 +56,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.4 $
|
## @(#) $Revision: 29.5 $
|
||||||
## @(#) $Id: places,v 29.4 2000/12/17 12:27:58 chongo Exp $
|
## @(#) $Id: places,v 29.5 2003/01/26 19:43:45 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/places,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/places,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1995/10/03 10:40:02
|
## Under source code control: 1995/10/03 10:40:02
|
||||||
|
82
help/rand
82
help/rand
@@ -1,5 +1,5 @@
|
|||||||
NAME
|
NAME
|
||||||
rand - additive 55 shuffle pseudo-random number generator
|
rand - subtractive 100 shuffle pseudo-random number generator
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
rand([[min, ] max])
|
rand([[min, ] max])
|
||||||
@@ -11,7 +11,7 @@ TYPES
|
|||||||
return integer
|
return integer
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Generate a pseudo-random number using an additive 55 shuffle generator.
|
Generate a pseudo-random number using an subtractive 100 shuffle generator.
|
||||||
We return a pseudo-random number over the half closed interval [min,max).
|
We return a pseudo-random number over the half closed interval [min,max).
|
||||||
By default, min is 0 and max is 2^64.
|
By default, min is 0 and max is 2^64.
|
||||||
|
|
||||||
@@ -38,36 +38,40 @@ DESCRIPTION
|
|||||||
|
|
||||||
when seeded with the same seed.
|
when seeded with the same seed.
|
||||||
|
|
||||||
The rand generator has two distinct parts, the additive 55 method
|
The rand generator has two distinct parts, the subtractive 100 method
|
||||||
and the shuffle method. The additive 55 method is described in:
|
and the shuffle method. The subtractive 100 method is described in:
|
||||||
|
|
||||||
"The Art of Computer Programming - Seminumerical Algorithms"
|
"The Art of Computer Programming - Seminumerical Algorithms",
|
||||||
by Knuth, Vol 2, 2nd edition (1981), Section 3.2.2, page 27,
|
Vol 2, 3rd edition (1998), Section 3.6, page 186, formula (2).
|
||||||
Algorithm A.
|
|
||||||
|
|
||||||
The period and other properties of the additive 55 method
|
The "use only the first 100 our of every 1009" is described in
|
||||||
|
Knuth's "The Art of Computer Programming - Seminumerical Algorithms",
|
||||||
|
Vol 2, 3rd edition (1998), Section 3.6, page 188".
|
||||||
|
|
||||||
|
The period and other properties of the subtractive 100 method
|
||||||
make it very useful to 'seed' other generators.
|
make it very useful to 'seed' other generators.
|
||||||
|
|
||||||
The shuffle method is feed values by the additive 55 method.
|
The shuffle method is feed values by the subtractive 100 method.
|
||||||
The shuffle method is described in:
|
The shuffle method is described in:
|
||||||
|
|
||||||
"The Art of Computer Programming - Seminumerical Algorithms"
|
"The Art of Computer Programming - Seminumerical Algorithms",
|
||||||
by Knuth, Vol 2, 2nd edition (1981), Section 3.2.2, page 32,
|
Vol 2, 3rd edition (1998), Section 3.2.2, page 34, Algorithm B.
|
||||||
Algorithm B.
|
|
||||||
|
|
||||||
The rand generator has a good period, and is fast. It is reasonable as
|
The rand generator has a good period, and is fast. It is reasonable as
|
||||||
generators go, though there are better ones available. The shuffle
|
generators go, though there are better ones available. The shuffle
|
||||||
method has a very good period, and is fast. It is fairly good as
|
method has a very good period, and is fast. It is fairly good as
|
||||||
generators go, particularly when it is feed reasonably random
|
generators go, particularly when it is feed reasonably random
|
||||||
numbers. Because of this, we use feed values from the additive 55
|
numbers. Because of this, we use feed values from the subtractive 100
|
||||||
method into the shuffle method.
|
method into the shuffle method.
|
||||||
|
|
||||||
The rand generator uses two internal tables:
|
The rand generator uses two internal tables:
|
||||||
|
|
||||||
additive table - 55 entries of 64 bits used by the additive 55 method
|
additive table - 100 entries of 64 bits used by the subtractive
|
||||||
|
100 method
|
||||||
|
|
||||||
shuffle table - 256 entries of 64 bits used by the shuffle method
|
shuffle table - 256 entries of 64 bits used by the shuffle method
|
||||||
feed by the additive 55 method from the additive table
|
feed by the subtractive 100 method from the
|
||||||
|
subtractive table
|
||||||
|
|
||||||
The goals of this generator are:
|
The goals of this generator are:
|
||||||
|
|
||||||
@@ -95,21 +99,21 @@ DESCRIPTION
|
|||||||
a standard against which other generators may be measured.
|
a standard against which other generators may be measured.
|
||||||
|
|
||||||
The Rand book of numbers was groups into groups of 20 digits. The
|
The Rand book of numbers was groups into groups of 20 digits. The
|
||||||
first 55 groups < 2^64 were used to initialize the default additive
|
first 100 groups < 2^64 were used to initialize the default additive
|
||||||
table. The size of 20 digits was used because 2^64 is 20 digits
|
table. The size of 20 digits was used because 2^64 is 20 digits
|
||||||
long. The restriction of < 2^64 was used to prevent modulus biasing.
|
long. The restriction of < 2^64 was used to prevent modulus biasing.
|
||||||
|
|
||||||
The shuffle table size is longer than the 100 entries recommended
|
The shuffle table size is longer than the 100 entries recommended
|
||||||
by Knuth. We use a power of 2 shuffle table length so that the
|
by Knuth. We use a power of 2 shuffle table length so that the
|
||||||
shuffle process can select a table entry from a new additive 55
|
shuffle process can select a table entry from a new subtractive 100
|
||||||
value by extracting its low order bits. The value 256 is convenient
|
value by extracting its low order bits. The value 256 is convenient
|
||||||
in that it is the size of a byte which allows for easy extraction.
|
in that it is the size of a byte which allows for easy extraction.
|
||||||
|
|
||||||
We use the upper byte of the additive 55 value to select the
|
We use the upper byte of the subtractive 100 value to select the
|
||||||
shuffle table entry because it allows all of 64 bits to play a part
|
shuffle table entry because it allows all of 64 bits to play a part
|
||||||
in the entry selection. If we were to select a lower 8 bits in the
|
in the entry selection. If we were to select a lower 8 bits in the
|
||||||
64 bit value, carries that propagate above our 8 bits would not
|
64 bit value, carries that propagate above our 8 bits would not
|
||||||
impact the additive 55 generator output.
|
impact the subtractive 100 generator output.
|
||||||
|
|
||||||
It is 'nice' when a seed of "n" produces a 'significantly different'
|
It is 'nice' when a seed of "n" produces a 'significantly different'
|
||||||
sequence than a seed of "n+1". Generators, by convention, assign
|
sequence than a seed of "n+1". Generators, by convention, assign
|
||||||
@@ -161,7 +165,7 @@ DESCRIPTION
|
|||||||
The values 'a' and 'c for randreseed64 are taken from the Rand book
|
The values 'a' and 'c for randreseed64 are taken from the Rand book
|
||||||
of numbers. Because m=2^64 is 20 decimal digits long, we will
|
of numbers. Because m=2^64 is 20 decimal digits long, we will
|
||||||
search the Rand book of numbers 20 at a time. We will skip any of
|
search the Rand book of numbers 20 at a time. We will skip any of
|
||||||
the 55 values that were used to initialize the additive 55
|
the 100 values that were used to initialize the subtractive 100
|
||||||
generators. The values obtained from the Rand book are:
|
generators. The values obtained from the Rand book are:
|
||||||
|
|
||||||
a = 6316878969928993981
|
a = 6316878969928993981
|
||||||
@@ -190,36 +194,40 @@ DESCRIPTION
|
|||||||
|
|
||||||
The truly paranoid might suggest that my claims in the MAGIC NUMBERS
|
The truly paranoid might suggest that my claims in the MAGIC NUMBERS
|
||||||
section are a lie intended to entrap people. Well they are not, but
|
section are a lie intended to entrap people. Well they are not, but
|
||||||
you need not take my (Landon Curt Noll) word for it.
|
if you that paranoid why would you use a non-cryprographically strong
|
||||||
|
pseudo-random number generator in the first place? You would be
|
||||||
|
better off using the random() builtin function.
|
||||||
|
|
||||||
The random numbers from the Rand book of random numbers can be
|
The two constants that were picked from the Rand Book of Random Numbers
|
||||||
|
The random numbers from the Rand Book of Random Numbers can be
|
||||||
verified by anyone who obtains the book. As these numbers were
|
verified by anyone who obtains the book. As these numbers were
|
||||||
created before I (Landon Curt Noll) was born (you can look up my
|
created before I (Landon Curt Noll) was born (you can look up
|
||||||
birth record if you want), I claim to have no possible influence on
|
my birth record if you want), I claim to have no possible influence
|
||||||
their generation.
|
on their generation.
|
||||||
|
|
||||||
There is a very slight chance that the electronic copy of the
|
There is a very slight chance that the electronic copy of the
|
||||||
Rand book that I was given access to differs from the printed text.
|
Rand Book of Random Numbers that I was given access to differs
|
||||||
I am willing to provide access to this electronic copy should
|
from the printed text. I am willing to provide access to this
|
||||||
anyone wants to compare it to the printed text.
|
electronic copy should anyone wants to compare it to the printed text.
|
||||||
|
|
||||||
When using the a55 generator, one may select your own 55 additive
|
When using the s100 generator, one may select your own 100 subtractive
|
||||||
values by calling:
|
values by calling:
|
||||||
|
|
||||||
srand(mat55)
|
srand(mat100)
|
||||||
|
|
||||||
and avoid using my magic numbers. Of course, you must pick good
|
and avoid using my magic numbers. The randreseed64 process is NOT
|
||||||
additive 55 values yourself!
|
applied to the matrix values. Of course, you must pick good subtractive
|
||||||
|
100 values yourself!
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
> print srand(0), rand(), rand(), rand()
|
> print srand(0), rand(), rand(), rand()
|
||||||
RAND state 14384206130809570460 10173010522823332484 5713611208311484212
|
RAND state 2298441576805697181 3498508396312845423 5031615567549397476
|
||||||
|
|
||||||
> print rand(123), rand(123), rand(123), rand(123), rand(123), rand(123)
|
> print rand(123), rand(123), rand(123), rand(123), rand(123), rand(123)
|
||||||
17 104 74 47 48 46
|
106 59 99 99 25 88
|
||||||
|
|
||||||
> print rand(2,12), rand(2^50,3^50), rand(0,2), rand(-400000, 120000)
|
> print rand(2,12), rand(2^50,3^50), rand(0,2), rand(-400000, 120000)
|
||||||
11 170570393286648531699560 1 -96605
|
2 658186291252503497642116 1 -324097
|
||||||
|
|
||||||
LIMITS
|
LIMITS
|
||||||
min < max
|
min < max
|
||||||
@@ -248,8 +256,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: rand,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: rand,v 29.3 2001/04/14 22:46:33 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/rand,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/rand,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1996/01/01 02:16:09
|
## Under source code control: 1996/01/01 02:16:09
|
||||||
|
6
help/re
6
help/re
@@ -20,7 +20,7 @@ LIMITS
|
|||||||
none
|
none
|
||||||
|
|
||||||
LINK LIBRARY
|
LINK LIBRARY
|
||||||
COMPLEX *cimag(COMPLEX *x)
|
COMPLEX *c_imag(COMPLEX *x)
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
im
|
im
|
||||||
@@ -41,8 +41,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: re,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: re,v 29.3 2002/03/12 09:38:26 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/re,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/re,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1995/10/05 04:52:27
|
## Under source code control: 1995/10/05 04:52:27
|
||||||
|
10
help/script
10
help/script
@@ -144,9 +144,9 @@ Calc shell scripts
|
|||||||
For systems that support interpreter files, essentially the
|
For systems that support interpreter files, essentially the
|
||||||
same thing may be done more efficiently by using calc as an
|
same thing may be done more efficiently by using calc as an
|
||||||
interpreter. Assuming the full path for calc is
|
interpreter. Assuming the full path for calc is
|
||||||
/usr/bin/calc, one could use the file addall3 with contents
|
/usr/local/bin/calc, one could use the file addall3 with contents
|
||||||
|
|
||||||
#!/usr/bin/calc -q -s -f
|
#!/usr/local/bin/calc -q -s -f
|
||||||
global i, n, s;
|
global i, n, s;
|
||||||
n = argv();
|
n = argv();
|
||||||
for (i = 1; i <= n; i++)
|
for (i = 1; i <= n; i++)
|
||||||
@@ -166,7 +166,7 @@ Calc shell scripts
|
|||||||
|
|
||||||
or what is essentially an interpreter equivalent sqrts2:
|
or what is essentially an interpreter equivalent sqrts2:
|
||||||
|
|
||||||
#!/usr/bin/calc -q -f
|
#!/usr/local/bin/calc -q -f
|
||||||
global s;
|
global s;
|
||||||
while (scanf('%s', s) == 1)
|
while (scanf('%s', s) == 1)
|
||||||
print sqrt(eval(s));
|
print sqrt(eval(s));
|
||||||
@@ -283,8 +283,8 @@ For more information use the following calc commands:
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.4 $
|
## @(#) $Revision: 29.5 $
|
||||||
## @(#) $Id: script,v 29.4 2000/07/17 15:36:26 chongo Exp $
|
## @(#) $Id: script,v 29.5 2001/04/08 07:56:32 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/script,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/script,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1999/11/30 05:29:48
|
## Under source code control: 1999/11/30 05:29:48
|
||||||
|
@@ -19,9 +19,9 @@ DESCRIPTION
|
|||||||
is almost certainly non-chaotic. This function is likely not
|
is almost certainly non-chaotic. This function is likely not
|
||||||
suitable for applications (such as cryptographic applications)
|
suitable for applications (such as cryptographic applications)
|
||||||
where the unpredictability of seeds is critical. For such critical
|
where the unpredictability of seeds is critical. For such critical
|
||||||
applications, lavarand should be used. See the URL:
|
applications, LavaRnd should be used. See the URL:
|
||||||
|
|
||||||
http://lavarand.sgi.com/index.html
|
http://www.LavaRnd.org/
|
||||||
|
|
||||||
for information about seeding a pseudo-random number generator
|
for information about seeding a pseudo-random number generator
|
||||||
(such as rand() or random()) with the cryptographic hash of the
|
(such as rand() or random()) with the cryptographic hash of the
|
||||||
@@ -67,8 +67,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: seed,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: seed,v 29.3 2001/05/13 13:26:26 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/seed,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/seed,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1999/10/03 10:04:29
|
## Under source code control: 1999/10/03 10:04:29
|
||||||
|
74
help/srand
74
help/srand
@@ -1,5 +1,5 @@
|
|||||||
NAME
|
NAME
|
||||||
srand - seed the additive 55 shuffle pseudo-random number generator
|
srand - seed the subtractive 100 shuffle pseudo-random number generator
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
srand([seed])
|
srand([seed])
|
||||||
@@ -10,43 +10,43 @@ TYPES
|
|||||||
return rand state
|
return rand state
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Seed the pseudo-random number using an additive 55 shuffle generator.
|
Seed the pseudo-random number using an subtractive 100 shuffle generator.
|
||||||
|
|
||||||
For integer seed != 0:
|
For integer seed != 0:
|
||||||
|
|
||||||
Any buffered rand generator bits are flushed. The additive table
|
Any buffered rand generator bits are flushed. The subtractive table
|
||||||
for the rand generator is loaded with the default additive table.
|
for the rand generator is loaded with the default subtractive table.
|
||||||
The low order 64 bits of seed is xor-ed against each table value.
|
The low order 64 bits of seed is xor-ed against each table value.
|
||||||
The additive table is shuffled according to seed/2^64.
|
The subtractive table is shuffled according to seed/2^64.
|
||||||
|
|
||||||
The following calc code produces the same effect on the internal
|
The following calc code produces the same effect on the internal
|
||||||
additive table:
|
subtractive table:
|
||||||
|
|
||||||
/* reload default additive table xor-ed with low 64 seed bits */
|
/* reload default subtractive table xor-ed with low 64 seed bits */
|
||||||
seed_xor = seed & ((1<<64)-1);
|
seed_xor = seed & ((1<<64)-1);
|
||||||
for (i=0; i < 55; ++i) {
|
for (i=0; i < 100; ++i) {
|
||||||
additive[i] = xor(default_additive[i], seed_xor);
|
subtractive[i] = xor(default_subtractive[i], seed_xor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* shuffle the additive table */
|
/* shuffle the subtractive table */
|
||||||
seed >>= 64;
|
seed >>= 64;
|
||||||
for (i=55; seed > 0 && i > 0; --i) {
|
for (i=100; seed > 0 && i > 0; --i) {
|
||||||
quomod(seed, i+1, seed, j);
|
quomod(seed, i+1, seed, j);
|
||||||
swap(additive[i], additive[j]);
|
swap(subtractive[i], subtractive[j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Seed must be >= 0. All seed values < 0 are reserved for future use.
|
Seed must be >= 0. All seed values < 0 are reserved for future use.
|
||||||
|
|
||||||
The additive table pointers are reset to additive[23] and additive[54].
|
The subtractive table pointers are reset to subtractive[36]
|
||||||
Last the shuffle table is loaded with successive values from the
|
and subtractive[99]. Last the shuffle table is loaded with
|
||||||
additive 55 generator.
|
successive values from the subtractive 100 generator.
|
||||||
|
|
||||||
There is no limit on the size of a seed. On the other hand,
|
There is no limit on the size of a seed. On the other hand,
|
||||||
extremely large seeds require large tables and long seed times.
|
extremely large seeds require large tables and long seed times.
|
||||||
Using a seed in the range of [2^64, 2^64 * 55!) should be
|
Using a seed in the range of [2^64, 2^64 * 100!) should be
|
||||||
sufficient for most purposes. An easy way to stay within this
|
sufficient for most purposes. An easy way to stay within this
|
||||||
range to to use seeds that are between 21 and 93 digits, or
|
range to to use seeds that are between 21 and 178 digits, or
|
||||||
64 to 308 bits long.
|
64 to 588 bits long.
|
||||||
|
|
||||||
To help make the generator produced by seed S, significantly
|
To help make the generator produced by seed S, significantly
|
||||||
different from S+1, seeds are scrambled prior to use. The
|
different from S+1, seeds are scrambled prior to use. The
|
||||||
@@ -68,9 +68,9 @@ DESCRIPTION
|
|||||||
After this call, the rand generator is restored to its initial
|
After this call, the rand generator is restored to its initial
|
||||||
state after calc started.
|
state after calc started.
|
||||||
|
|
||||||
The additive 55 pointers are reset to additive[23] and additive[54].
|
The subtractive 100 pointers are reset to subtractive[36]
|
||||||
Last the shuffle table is loaded with successive values from the
|
and subtractive[99]. Last the shuffle table is loaded with
|
||||||
additive 55 generator.
|
successive values from the subtractive 100 generator.
|
||||||
|
|
||||||
The call:
|
The call:
|
||||||
|
|
||||||
@@ -80,14 +80,14 @@ DESCRIPTION
|
|||||||
|
|
||||||
For matrix arg:
|
For matrix arg:
|
||||||
|
|
||||||
Any buffered random bits are flushed. The additive table with the
|
Any buffered random bits are flushed. The subtractive table with the
|
||||||
first 55 entries of the matrix mod 2^64.
|
first 100 entries of the matrix mod 2^64.
|
||||||
|
|
||||||
The additive 55 pointers are reset to additive[23] and additive[54].
|
The subtractive 100 pointers are reset to subtractive[36]
|
||||||
Last the shuffle table is loaded with successive values from the
|
and subtractive[99]. Last the shuffle table is loaded with
|
||||||
additive 55 generator.
|
successive values from the subtractive 100 generator.
|
||||||
|
|
||||||
This form allows one to load the internal additive 55 generator
|
This form allows one to load the internal subtractive 100 generator
|
||||||
with user supplied values.
|
with user supplied values.
|
||||||
|
|
||||||
The randreseed64 process is NOT applied to the matrix values.
|
The randreseed64 process is NOT applied to the matrix values.
|
||||||
@@ -114,7 +114,7 @@ DESCRIPTION
|
|||||||
|
|
||||||
For no arg given:
|
For no arg given:
|
||||||
|
|
||||||
Return current a55 generator state. This call does not alter
|
Return current s100 generator state. This call does not alter
|
||||||
the generator state.
|
the generator state.
|
||||||
|
|
||||||
This call allows one to take a snapshot of the current generator state.
|
This call allows one to take a snapshot of the current generator state.
|
||||||
@@ -126,25 +126,25 @@ EXAMPLE
|
|||||||
RAND state
|
RAND state
|
||||||
> state = srand();
|
> state = srand();
|
||||||
> print rand(123), rand(123), rand(123), rand(123), rand(123), rand(123);
|
> print rand(123), rand(123), rand(123), rand(123), rand(123), rand(123);
|
||||||
32 60 67 71 1 77
|
80 95 41 78 100 27
|
||||||
> print rand(123), rand(123), rand(123), rand(123), rand(123), rand(123);
|
> print rand(123), rand(123), rand(123), rand(123), rand(123), rand(123);
|
||||||
52 72 110 15 69 58
|
122 109 12 95 80 32
|
||||||
> state2 = srand(state);
|
> state2 = srand(state);
|
||||||
> print rand(123), rand(123), rand(123), rand(123), rand(123), rand(123);
|
> print rand(123), rand(123), rand(123), rand(123), rand(123), rand(123);
|
||||||
32 60 67 71 1 77
|
80 95 41 78 100 27
|
||||||
> print rand(123), rand(123), rand(123), rand(123), rand(123), rand(123);
|
> print rand(123), rand(123), rand(123), rand(123), rand(123), rand(123);
|
||||||
52 72 110 15 69 58
|
122 109 12 95 80 32
|
||||||
> state3 = srand();
|
> state3 = srand();
|
||||||
> print state3 == state2;
|
> print state3 == state2;
|
||||||
1
|
1
|
||||||
> print rand();
|
> print rand();
|
||||||
641407694185874626
|
10710588361472584495
|
||||||
|
|
||||||
LIMITS
|
LIMITS
|
||||||
for matrix arg, the matrix must have at least 55 integers
|
for matrix arg, the matrix must have at least 100 integers
|
||||||
|
|
||||||
LINK LIBRARY
|
LINK LIBRARY
|
||||||
RAND *zsrand(ZVALUE *pseed, MATRIX *pmat55)
|
RAND *zsrand(ZVALUE *pseed, MATRIX *pmat100)
|
||||||
RAND *zsetrand(RAND *state)
|
RAND *zsetrand(RAND *state)
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
@@ -166,8 +166,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: srand,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: srand,v 29.3 2001/04/14 22:46:33 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/srand,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/srand,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1996/01/01 04:19:07
|
## Under source code control: 1996/01/01 04:19:07
|
||||||
|
10
help/srandom
10
help/srandom
@@ -220,11 +220,11 @@ DESCRIPTION
|
|||||||
Blum moduli.
|
Blum moduli.
|
||||||
|
|
||||||
The pre-defined Blum moduli and quadratic residues were selected
|
The pre-defined Blum moduli and quadratic residues were selected
|
||||||
by lavarand, a hardware random number generator. See the URL:
|
by LavaRnd, a hardware random number generator. See the URL:
|
||||||
|
|
||||||
http://lavarand.sgi.com/index.html
|
http://www.LavaRnd.org/
|
||||||
|
|
||||||
for an explanation of how the lavarand random number generator works.
|
for an explanation of how the LavaRnd random number generator works.
|
||||||
For more information, see the comments at the top of the calc
|
For more information, see the comments at the top of the calc
|
||||||
source file, zrandom.c.
|
source file, zrandom.c.
|
||||||
|
|
||||||
@@ -354,8 +354,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: srandom,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: srandom,v 29.3 2001/05/13 13:26:26 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/srandom,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/srandom,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1997/02/17 01:18:22
|
## Under source code control: 1997/02/17 01:18:22
|
||||||
|
14
help/str
14
help/str
@@ -18,7 +18,7 @@ DESCRIPTION
|
|||||||
|
|
||||||
For real or complex x, str(x) returns the string representing x
|
For real or complex x, str(x) returns the string representing x
|
||||||
in the current printing mode; configuration parameters affecting
|
in the current printing mode; configuration parameters affecting
|
||||||
this are "mode", "display", "outround", "tilde", "leadzero",
|
this are "mode", "mode2", "display", "outround", "tilde", "leadzero",
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
> str("")
|
> str("")
|
||||||
@@ -28,6 +28,10 @@ EXAMPLE
|
|||||||
> print str(123), str("+"), str(4i), str("is the same as"), str(123+4i)
|
> print str(123), str("+"), str(4i), str("is the same as"), str(123+4i)
|
||||||
123 + 4i is the same as 3+4i
|
123 + 4i is the same as 3+4i
|
||||||
|
|
||||||
|
> base2(16),
|
||||||
|
> print str(23209)
|
||||||
|
23209 /* 0x5aa9 */
|
||||||
|
|
||||||
LIMITS
|
LIMITS
|
||||||
none
|
none
|
||||||
|
|
||||||
@@ -41,9 +45,9 @@ LINK LIBRARY
|
|||||||
char *math_getdivertedio();
|
char *math_getdivertedio();
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
XXX - fill in
|
base, base2, config
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
## Copyright (C) 1999-2002 Landon Curt Noll
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -59,8 +63,8 @@ SEE ALSO
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.3 $
|
||||||
## @(#) $Id: str,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: str,v 29.3 2002/12/29 09:19:56 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/str,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/str,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1995/10/05 04:52:27
|
## Under source code control: 1995/10/05 04:52:27
|
||||||
|
19
help/todo
19
help/todo
@@ -59,6 +59,15 @@ Very High priority items:
|
|||||||
* Fix any 'Known bugs' as noted in the BUGS file or as
|
* Fix any 'Known bugs' as noted in the BUGS file or as
|
||||||
displayed by 'calc help bugs'.
|
displayed by 'calc help bugs'.
|
||||||
|
|
||||||
|
* Internationalize calc by converting calc error messages and
|
||||||
|
text strings (e.g., calc startup banner, show output, etc.)
|
||||||
|
into calls to the GNU gettext internationalization facility.
|
||||||
|
If somebody translated these strings into another language,
|
||||||
|
setting $LANG would allow calc to produce error messages
|
||||||
|
and text strings in that language.
|
||||||
|
|
||||||
|
* Consider using GNU autoconf / configure to build the calc Makefile.
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
High priority items:
|
High priority items:
|
||||||
@@ -76,8 +85,6 @@ High priority items:
|
|||||||
* Perform a code coverage analysis of the 'make check' action
|
* Perform a code coverage analysis of the 'make check' action
|
||||||
and improve the coverage (within reason) of the regress.cal suite.
|
and improve the coverage (within reason) of the regress.cal suite.
|
||||||
|
|
||||||
* Create a Linux rpm (Red Hat Package Manager) package for calc.
|
|
||||||
|
|
||||||
* Address, if possible and reasonable, any Calc Mis-features
|
* Address, if possible and reasonable, any Calc Mis-features
|
||||||
as noted in the BUGS file or as displayed by 'calc help bugs'.
|
as noted in the BUGS file or as displayed by 'calc help bugs'.
|
||||||
|
|
||||||
@@ -115,9 +122,7 @@ Medium priority items:
|
|||||||
* Add a builtin function to access the 64 bit FNV hash which
|
* Add a builtin function to access the 64 bit FNV hash which
|
||||||
is currently being used internally in seed.c.
|
is currently being used internally in seed.c.
|
||||||
|
|
||||||
* Consider using configure to build the calc Makefile.
|
## Copyright (C) 1999-2003 Landon Curt Noll
|
||||||
|
|
||||||
## Copyright (C) 1999 Landon Curt Noll
|
|
||||||
##
|
##
|
||||||
## Calc is open software; you can redistribute it and/or modify it under
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
@@ -133,8 +138,8 @@ Medium priority items:
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.2 $
|
## @(#) $Revision: 29.5 $
|
||||||
## @(#) $Id: todo,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: todo,v 29.5 2003/02/25 20:26:17 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/todo,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/todo,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1999/10/20 07:42:55
|
## Under source code control: 1999/10/20 07:42:55
|
||||||
|
18
help/usage
18
help/usage
@@ -148,10 +148,14 @@ Calc command line
|
|||||||
when the mode disables opening of files for reading.
|
when the mode disables opening of files for reading.
|
||||||
|
|
||||||
|
|
||||||
-n Use the new configuration defaults instead of the old
|
-O Use the old classic defaults instead of the default
|
||||||
default classic defaults. This flag as the same effect
|
configuration. This flag as the same effect as executing
|
||||||
as executing config("all", "newcfg") at startup time.
|
config("all", "oldcfg") at startup time.
|
||||||
|
|
||||||
|
NOTE: Older versions of calc used -n to setup a modified
|
||||||
|
form of the default calc configuration. The -n flag
|
||||||
|
currently does nothing. Use of the -n flag is now
|
||||||
|
deprecated and may used for something else in the future.
|
||||||
|
|
||||||
-p Pipe processing is enabled by use of -p. For example:
|
-p Pipe processing is enabled by use of -p. For example:
|
||||||
|
|
||||||
@@ -249,8 +253,8 @@ Calc command line
|
|||||||
./myfile.cal
|
./myfile.cal
|
||||||
${LIBDIR}/myfile
|
${LIBDIR}/myfile
|
||||||
${LIBDIR}/myfile.cal
|
${LIBDIR}/myfile.cal
|
||||||
${CUSTOMLIBDIR}/myfile
|
${CUSTOMCALDIR}/myfile
|
||||||
${CUSTOMLIBDIR}/myfile.cal
|
${CUSTOMCALDIR}/myfile.cal
|
||||||
|
|
||||||
If the file is found, the search stops and the commands in
|
If the file is found, the search stops and the commands in
|
||||||
the file are executed. It is an error if no readable file
|
the file are executed. It is an error if no readable file
|
||||||
@@ -353,8 +357,8 @@ For more information use the following calc commands:
|
|||||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
##
|
##
|
||||||
## @(#) $Revision: 29.3 $
|
## @(#) $Revision: 29.6 $
|
||||||
## @(#) $Id: usage,v 29.3 2000/06/07 14:02:33 chongo Exp $
|
## @(#) $Id: usage,v 29.6 2003/06/10 21:39:34 chongo Exp $
|
||||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/usage,v $
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/usage,v $
|
||||||
##
|
##
|
||||||
## Under source code control: 1991/07/21 04:37:25
|
## Under source code control: 1991/07/21 04:37:25
|
||||||
|
59
help/version
Normal file
59
help/version
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
NAME
|
||||||
|
version - return the calc version string
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
version()
|
||||||
|
|
||||||
|
TYPES
|
||||||
|
return string
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Returns the calc version string.
|
||||||
|
|
||||||
|
Calc version strings can be of the form:
|
||||||
|
|
||||||
|
x.y.z.w
|
||||||
|
x.y.z
|
||||||
|
x.y
|
||||||
|
|
||||||
|
where x, y, z, w, v are integers (without leading 0's) and,
|
||||||
|
t is the the liternal character 't'.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
> version()
|
||||||
|
"2.11.5.4"
|
||||||
|
|
||||||
|
LIMITS
|
||||||
|
none
|
||||||
|
|
||||||
|
LINK LIBRARY
|
||||||
|
none
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
n/a
|
||||||
|
|
||||||
|
## Copyright (C) 2001 Landon Curt Noll
|
||||||
|
##
|
||||||
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
## as published by the Free Software Foundation.
|
||||||
|
##
|
||||||
|
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
## Public License for more details.
|
||||||
|
##
|
||||||
|
## A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
##
|
||||||
|
## @(#) $Revision: 29.3 $
|
||||||
|
## @(#) $Id: version,v 29.3 2001/06/09 23:32:45 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/version,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 2001/05/28 17:38:01
|
||||||
|
## File existed as early as: 2001
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user