mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Compare commits
26 Commits
2.11.0t9.4
...
2.11.2t1.0
Author | SHA1 | Date | |
---|---|---|---|
|
61dd47526f | ||
|
417ffb6ab5 | ||
|
121b8f72c6 | ||
|
9968a69f50 | ||
|
1ea579d929 | ||
|
0521ed202f | ||
|
6f5e8bf1b6 | ||
|
f3913609ea | ||
|
0514dc0de9 | ||
|
94e35d9b07 | ||
|
867002aa77 | ||
|
2c9b160dc5 | ||
|
fbd3a79eba | ||
|
025b5e58d6 | ||
|
160f4102ab | ||
|
306e031f03 | ||
|
6cfe9696ce | ||
|
97ed812cb9 | ||
|
6254c4a14c | ||
|
c7c0de97f2 | ||
|
96c34adee3 | ||
|
86c8e6dcf1 | ||
|
58d32c68f9 | ||
|
7d0b761de3 | ||
|
82ff31f246 | ||
|
7cb0a77c25 |
160
BUGS
160
BUGS
@@ -20,34 +20,31 @@ configuration, try backing them out and see if things get better.
|
|||||||
|
|
||||||
To be sure that your version of calc is up to date, check out:
|
To be sure that your version of calc is up to date, check out:
|
||||||
|
|
||||||
http://reality.sgi.com/chongo/tech/comp/calc/calc-download.html
|
http://www.isthe.com/chongo/tech/comp/calc/calc-download.html
|
||||||
|
|
||||||
The calc web site is located at:
|
The calc web site is located at:
|
||||||
|
|
||||||
http://reality.sgi.com/chongo/tech/comp/calc
|
http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
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 reports to:
|
||||||
|
|
||||||
calc-tester@postofc.corp.sgi.com
|
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' ]]
|
||||||
|
|
||||||
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)
|
it 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
|
||||||
|
|
||||||
* any compiler warnings or errors that you saw
|
* any compiler warnings or errors that you saw
|
||||||
|
|
||||||
* cd to the calc source directory, and type:
|
* cd to the calc source directory, and type:
|
||||||
|
|
||||||
make debug > debug.out 2>&1 (sh, ksh, bash users)
|
make debug > debug.out 2>&1 (sh, ksh, bash users)
|
||||||
@@ -62,65 +59,63 @@ Stack traces from core dumps are useful to send as well.
|
|||||||
Send any comments, compiler warning messages, suggestions and most
|
Send any comments, compiler warning messages, suggestions and most
|
||||||
importantly, fixes (in the form of a context diff patch) to:
|
importantly, fixes (in the form of a context diff patch) to:
|
||||||
|
|
||||||
calc-tester@postofc.corp.sgi.com
|
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.
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
Known bugs:
|
Known bugs:
|
||||||
|
|
||||||
* Calc does not support the #! exec method. For example of the
|
We are sure some more bugs exist. When you find them, please let
|
||||||
following is placed in an executable file (assume the path to
|
us know! See the above for details on how to report and were to
|
||||||
calc is correct) called /tmp/xyzzy:
|
EMail your bug reports and hopefully patches to fix them.
|
||||||
|
|
||||||
#!/usr/local/bin/calc
|
=-=
|
||||||
/*
|
|
||||||
* comment
|
|
||||||
*/
|
|
||||||
print 2+3;
|
|
||||||
|
|
||||||
Will result in '"tmp" is undefined' and '"xyzzy" is undefined'
|
Problems with known work-a-rounds:
|
||||||
error messages because calc considers $0 as an expression to
|
|
||||||
evaluate.
|
|
||||||
|
|
||||||
* The following file:
|
* 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
|
||||||
|
or to use gcc-2.96 or later.
|
||||||
|
|
||||||
/* this is bugdemo.cal */
|
* Solaris cc somtimes barfs while compiling zrand.c. In particular, calc
|
||||||
x = eval(prompt(">>> "));
|
barfs on on the SVAL macro. The work-a-round is to use the Solaric cc
|
||||||
print x;
|
Makefile set sets -DFORCE_STDC. I.e,:
|
||||||
|
|
||||||
when executed as:
|
CCWARN=
|
||||||
|
CCOPT= ${DEBUG} ${NO_SHARED}
|
||||||
|
CCMISC= -DFORCE_STDC
|
||||||
|
#
|
||||||
|
CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC}
|
||||||
|
ICFLAGS= ${CCWARN} ${CCMISC}
|
||||||
|
#
|
||||||
|
LCFLAGS=
|
||||||
|
LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||||
|
ILDFLAGS=
|
||||||
|
#
|
||||||
|
LCC= cc
|
||||||
|
CC= ${PURIFY} ${LCC}
|
||||||
|
|
||||||
calc read bugdemo.cal
|
* There is a bug in some versions of the Dec/Compaq cc for the Alpha
|
||||||
|
where the following:
|
||||||
|
|
||||||
will obtain a prompt from the terminal, print the value but leave
|
#include <stdio.h>
|
||||||
the terminal in a 'bad' state, as if stty -icanon -echo -echoe
|
#define SVAL(a,b) (unsigned long)(0x ## a ## b ## ULL)
|
||||||
had been executed.
|
main(){SVAL(b8a8aeb0,8168eadc);}
|
||||||
|
|
||||||
* Dec Alpha Linux compiling with gcc-2.95.1 (or gcc-2.95.2) and
|
fails because it puts a space inside the concatenated hex. Calc
|
||||||
-O2 fails the version 2.11.0t8.10 regression test with:
|
has code that is affected by this bug. This bug has been reported
|
||||||
|
to Compaq and may be fixed in the future. A work-a-round is to
|
||||||
make -s check
|
compile with cc -std0 or to use a later version of their compiler.
|
||||||
000: Beginning regression tests
|
|
||||||
001: Some of these tests may take a while ...
|
|
||||||
002: Within each section, output should be numbered sequentially
|
|
||||||
003: parsed global definitions
|
|
||||||
004: parsed vrfy()
|
|
||||||
005: parsed prob(str)
|
|
||||||
006: parsed getglobalvar()
|
|
||||||
007: parsed test_booleans()
|
|
||||||
008: parsed test_variables()
|
|
||||||
make: *** [check] Segmentation fault (core dumped)
|
|
||||||
|
|
||||||
Other programs have reported problems when compiling -O2 with
|
|
||||||
gcc-2.95.1 on the Alpha and Mips.
|
|
||||||
|
|
||||||
One work-a-round is to not compile with -O2 (perhaps just -O).
|
|
||||||
Another work-a-round is not use gcc-2.95.1.
|
|
||||||
|
|
||||||
* On a Digital UNIX V4.0F (Rev. 1229) on a 500 Mhz 21264, make check
|
* On a Digital UNIX V4.0F (Rev. 1229) on a 500 Mhz 21264, make check
|
||||||
dies a horrible death starting in test 600 and 622 gives 100s of
|
dies a horrible death starting in test 600 and 622 gives 100s of
|
||||||
messages for calc version 2.11.0t9.2 using the Dec's cc with -O2
|
messages for calc version 2.11.0t9.4 using the Dec's cc with -O2:
|
||||||
and without -std0:
|
|
||||||
|
|
||||||
600: Beginning test_bignums
|
600: Beginning test_bignums
|
||||||
601: muldivcheck 1
|
601: muldivcheck 1
|
||||||
@@ -135,6 +130,61 @@ Known bugs:
|
|||||||
|
|
||||||
it finally hangs at test 2000.
|
it finally hangs at test 2000.
|
||||||
|
|
||||||
We are sure some more bugs exist. When you find them, please let
|
The work-a-round is to compile calc without the optimizer. If this
|
||||||
us know! See the above for details on how to report and were to
|
happens to you, try compiling without -O and without -O2. I.e., in
|
||||||
EMail your bug reports and hopefully patches to fix them.
|
the Makefile, set:
|
||||||
|
|
||||||
|
DEBUG= -g
|
||||||
|
|
||||||
|
* There are problems compiling calc on the sparcv9 under 64 bit
|
||||||
|
Solaris. On that platform, gcc-2.96 is able to compile calc, but
|
||||||
|
calc dumps core very early on in startup. It is said that sparcv9
|
||||||
|
support in gcc-2.96 is very unofficial and thus there is no
|
||||||
|
work-a-round for gcc-2-96.
|
||||||
|
|
||||||
|
There is a work-a-round for this architecture us one is using the
|
||||||
|
Solaris CC on the sparcv9. It has been reported that setting the
|
||||||
|
following Makefile variables will produce a working version of
|
||||||
|
calc on the sparcv9 under 64 bit Solaris:
|
||||||
|
|
||||||
|
LCC="cc -xarch=v9"
|
||||||
|
CCWARN="-DFORCE_STDC -w"
|
||||||
|
DEBUG="-fast -xarch=v9"
|
||||||
|
|
||||||
|
* Under BSDI v4, the warnings of the form:
|
||||||
|
|
||||||
|
/usr/include/ctype.h:147: warning: `__runetype' defined but not used
|
||||||
|
/usr/include/ctype.h:161: warning: `__isctype' defined but not used
|
||||||
|
/usr/include/ctype.h:170: warning: `toupper' defined but not used
|
||||||
|
/usr/include/ctype.h:177: warning: `tolower' defined but not used
|
||||||
|
|
||||||
|
are seen. These warnings are the result of mis-features in BSDI
|
||||||
|
include files. They do not have an impact on the operation
|
||||||
|
or performance. The work-a-round is to ignore these warnings
|
||||||
|
under BSDI.
|
||||||
|
|
||||||
|
## Copyright (C) 1999 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: BUGS,v 29.5 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 1994/03/18 14:06:13
|
||||||
|
## File existed as early as: 1994
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
204
COPYING
Normal file
204
COPYING
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
calc - arbitrary precision calculator
|
||||||
|
|
||||||
|
|
||||||
|
This file is Copyrighted
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
This file is covered under the following Copyright:
|
||||||
|
|
||||||
|
Copyright (C) 1999 Landon Curt Noll
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
# @(#) $Revision: 29.2 $
|
||||||
|
# @(#) $Id: COPYING,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
Calc is covered by the GNU Lesser General Public License
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation version 2.1 of the License.
|
||||||
|
|
||||||
|
Calc is several binary link libraries, several modules, associated
|
||||||
|
interface definition files and scripts used to control its compilation
|
||||||
|
and installation.
|
||||||
|
|
||||||
|
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 the GNU Lesser General Public License is distributed with
|
||||||
|
calc under the filename:
|
||||||
|
|
||||||
|
COPYING-LGPL
|
||||||
|
|
||||||
|
You may display this file by the calc command: help copying
|
||||||
|
|
||||||
|
You may display the GNU Lesser General
|
||||||
|
Public License by the calc command: help copying-lgpl
|
||||||
|
|
||||||
|
You should have received a copy of the version 2.1 GNU Lesser General
|
||||||
|
Public License with calc; if not, write to:
|
||||||
|
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
59 Temple Place
|
||||||
|
Suite 330
|
||||||
|
Boston, MA 02111-1307
|
||||||
|
USA
|
||||||
|
|
||||||
|
The contact addresses for calc is as follows:
|
||||||
|
|
||||||
|
Web: http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||||
|
EMail: calc-contrib at asthe dot com
|
||||||
|
|
||||||
|
To join the calc-tester mailing list. Send a request to:
|
||||||
|
|
||||||
|
calc-tester-request at asthe dot com
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Calc bug reports, however should be sent to:
|
||||||
|
|
||||||
|
calc-bugs 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' ]]
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
Calc's relationship to the GNU Lesser General Public License
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
|
In section 0 of the GNU Lesser General Public License, one finds
|
||||||
|
the following definition:
|
||||||
|
|
||||||
|
The "Library", below, refers to any such software library or
|
||||||
|
work which has been distributed under these terms.
|
||||||
|
|
||||||
|
Calc is distributed under the terms of the GNU Lesser
|
||||||
|
General Public License.
|
||||||
|
|
||||||
|
In the same section 0, one also find the following:
|
||||||
|
|
||||||
|
For a library, complete source code means all the source code
|
||||||
|
for all modules it contains, plus any associated interface
|
||||||
|
definition files, plus the scripts used to control compilation
|
||||||
|
and installation of the library.
|
||||||
|
|
||||||
|
There are at least two calc binary link libraries found in calc:
|
||||||
|
|
||||||
|
libcalc.a libcustcalc.a
|
||||||
|
|
||||||
|
Clearly all files that go into the creation of those binary link
|
||||||
|
libraries are covered under the License.
|
||||||
|
|
||||||
|
The ``scripts used to control compilation and installation of the
|
||||||
|
of the library'' include:
|
||||||
|
|
||||||
|
* Makefiles
|
||||||
|
* source files created by the Makefiles
|
||||||
|
* source code used in the creation of intermediate source files
|
||||||
|
|
||||||
|
All of those files are covered under the License.
|
||||||
|
|
||||||
|
The ``associated interface definition files'' are those files that:
|
||||||
|
|
||||||
|
* show how the calc binary link libraries are used
|
||||||
|
* test the validity of the binary link libraries
|
||||||
|
* document routines found in the binary link libraries
|
||||||
|
* show how one can interactively use the binary link libraries
|
||||||
|
|
||||||
|
Calc provides an extensive set of files that perform the above
|
||||||
|
functions.
|
||||||
|
|
||||||
|
* files under the sample sub-directory
|
||||||
|
* files under the help sub-directory
|
||||||
|
* files under the lib sub-directory
|
||||||
|
* the main calc.c file
|
||||||
|
|
||||||
|
The ``complete source code'' includes ALL files shipped with calc,
|
||||||
|
except for the exception files explicitly listed in the ``Calc
|
||||||
|
copyrights and exception files'' section below.
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
Calc copyrights and exception files
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
With the exception of the files listed below, Calc is covered under
|
||||||
|
the following Copyrights:
|
||||||
|
|
||||||
|
Copyright (C) year David I. Bell
|
||||||
|
Copyright (C) year David I. Bell and Landon Curt Noll
|
||||||
|
Copyright (C) year David I. Bell and Ernest Bowen
|
||||||
|
Copyright (C) year David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||||
|
Copyright (C) year Landon Curt Noll
|
||||||
|
Copyright (C) year Ernest Bowen and Landon Curt Noll
|
||||||
|
Copyright (C) year Ernest Bowen
|
||||||
|
|
||||||
|
A few files are not covered under the GNU Lesser General Public
|
||||||
|
License. The source files not covered are:
|
||||||
|
|
||||||
|
shs1.c shs1.h shs.c shs.h
|
||||||
|
md5.c md5.h lib/qtime.cal COPYING
|
||||||
|
COPYING-LGPL
|
||||||
|
|
||||||
|
The file COPYING-LGPL, which contains a copy of the version 2.1
|
||||||
|
GNU Lesser General Public License, is itself Copyrighted by the
|
||||||
|
Free Software Foundation, Inc. Please note that the Free Software
|
||||||
|
Foundation, Inc. does NOT have a copyright over calc, only the
|
||||||
|
COPYING-LGPL that is supplied with calc.
|
||||||
|
|
||||||
|
This file, COPYING, is distributed under the Copyright found at the
|
||||||
|
top of this file. It is important to note that you may distribute
|
||||||
|
verbatim copies of this file but you may not modify this file.
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
General Copyleft and License info
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
For general information on Copylefts, see:
|
||||||
|
|
||||||
|
http://www.gnu.org/copyleft/
|
||||||
|
|
||||||
|
For information on GNU Lesser General Public Licenses, see:
|
||||||
|
|
||||||
|
http://www.gnu.org/copyleft/lesser.html
|
||||||
|
http://www.gnu.org/copyleft/lesser.txt
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
Why calc did not use the GNU General Public License
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
It has been suggested that one should consider using the GNU General
|
||||||
|
Public License instead of the GNU Lesser General Public License:
|
||||||
|
|
||||||
|
http://www.gnu.org/philosophy/why-not-lgpl.html
|
||||||
|
|
||||||
|
As you can read in the above URL, there are times where a library
|
||||||
|
cannot give free software any particular advantage. One of those
|
||||||
|
times is when there is significantly similar versions available
|
||||||
|
that are not covered under a Copyleft such as the GNU General Public
|
||||||
|
License.
|
||||||
|
|
||||||
|
The reason why calc was placed under the GNU Lesser General Public
|
||||||
|
License is because for many years (1984 thru 1999), calc was offered
|
||||||
|
without any form of Copyleft. At the time calc was placed under
|
||||||
|
the GNU Lesser General Public License, a number of systems and
|
||||||
|
distributions distributed calc without a Copyleft.
|
504
COPYING-LGPL
Normal file
504
COPYING-LGPL
Normal file
@@ -0,0 +1,504 @@
|
|||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
Version 2.1, February 1999
|
||||||
|
|
||||||
|
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||||
|
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
[This is the first released version of the Lesser GPL. It also counts
|
||||||
|
as the successor of the GNU Library Public License, version 2, hence
|
||||||
|
the version number 2.1.]
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
Licenses are intended to guarantee your freedom to share and change
|
||||||
|
free software--to make sure the software is free for all its users.
|
||||||
|
|
||||||
|
This license, the Lesser General Public License, applies to some
|
||||||
|
specially designated software packages--typically libraries--of the
|
||||||
|
Free Software Foundation and other authors who decide to use it. You
|
||||||
|
can use it too, but we suggest you first think carefully about whether
|
||||||
|
this license or the ordinary General Public License is the better
|
||||||
|
strategy to use in any particular case, based on the explanations below.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom of use,
|
||||||
|
not price. Our General Public Licenses are designed to make sure that
|
||||||
|
you have the freedom to distribute copies of free software (and charge
|
||||||
|
for this service if you wish); that you receive source code or can get
|
||||||
|
it if you want it; that you can change the software and use pieces of
|
||||||
|
it in new free programs; and that you are informed that you can do
|
||||||
|
these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
distributors to deny you these rights or to ask you to surrender these
|
||||||
|
rights. These restrictions translate to certain responsibilities for
|
||||||
|
you if you distribute copies of the library or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of the library, whether gratis
|
||||||
|
or for a fee, you must give the recipients all the rights that we gave
|
||||||
|
you. You must make sure that they, too, receive or can get the source
|
||||||
|
code. If you link other code with the library, you must provide
|
||||||
|
complete object files to the recipients, so that they can relink them
|
||||||
|
with the library after making changes to the library and recompiling
|
||||||
|
it. And you must show them these terms so they know their rights.
|
||||||
|
|
||||||
|
We protect your rights with a two-step method: (1) we copyright the
|
||||||
|
library, and (2) we offer you this license, which gives you legal
|
||||||
|
permission to copy, distribute and/or modify the library.
|
||||||
|
|
||||||
|
To protect each distributor, we want to make it very clear that
|
||||||
|
there is no warranty for the free library. Also, if the library is
|
||||||
|
modified by someone else and passed on, the recipients should know
|
||||||
|
that what they have is not the original version, so that the original
|
||||||
|
author's reputation will not be affected by problems that might be
|
||||||
|
introduced by others.
|
||||||
|
|
||||||
|
Finally, software patents pose a constant threat to the existence of
|
||||||
|
any free program. We wish to make sure that a company cannot
|
||||||
|
effectively restrict the users of a free program by obtaining a
|
||||||
|
restrictive license from a patent holder. Therefore, we insist that
|
||||||
|
any patent license obtained for a version of the library must be
|
||||||
|
consistent with the full freedom of use specified in this license.
|
||||||
|
|
||||||
|
Most GNU software, including some libraries, is covered by the
|
||||||
|
ordinary GNU General Public License. This license, the GNU Lesser
|
||||||
|
General Public License, applies to certain designated libraries, and
|
||||||
|
is quite different from the ordinary General Public License. We use
|
||||||
|
this license for certain libraries in order to permit linking those
|
||||||
|
libraries into non-free programs.
|
||||||
|
|
||||||
|
When a program is linked with a library, whether statically or using
|
||||||
|
a shared library, the combination of the two is legally speaking a
|
||||||
|
combined work, a derivative of the original library. The ordinary
|
||||||
|
General Public License therefore permits such linking only if the
|
||||||
|
entire combination fits its criteria of freedom. The Lesser General
|
||||||
|
Public License permits more lax criteria for linking other code with
|
||||||
|
the library.
|
||||||
|
|
||||||
|
We call this license the "Lesser" General Public License because it
|
||||||
|
does Less to protect the user's freedom than the ordinary General
|
||||||
|
Public License. It also provides other free software developers Less
|
||||||
|
of an advantage over competing non-free programs. These disadvantages
|
||||||
|
are the reason we use the ordinary General Public License for many
|
||||||
|
libraries. However, the Lesser license provides advantages in certain
|
||||||
|
special circumstances.
|
||||||
|
|
||||||
|
For example, on rare occasions, there may be a special need to
|
||||||
|
encourage the widest possible use of a certain library, so that it becomes
|
||||||
|
a de-facto standard. To achieve this, non-free programs must be
|
||||||
|
allowed to use the library. A more frequent case is that a free
|
||||||
|
library does the same job as widely used non-free libraries. In this
|
||||||
|
case, there is little to gain by limiting the free library to free
|
||||||
|
software only, so we use the Lesser General Public License.
|
||||||
|
|
||||||
|
In other cases, permission to use a particular library in non-free
|
||||||
|
programs enables a greater number of people to use a large body of
|
||||||
|
free software. For example, permission to use the GNU C Library in
|
||||||
|
non-free programs enables many more people to use the whole GNU
|
||||||
|
operating system, as well as its variant, the GNU/Linux operating
|
||||||
|
system.
|
||||||
|
|
||||||
|
Although the Lesser General Public License is Less protective of the
|
||||||
|
users' freedom, it does ensure that the user of a program that is
|
||||||
|
linked with the Library has the freedom and the wherewithal to run
|
||||||
|
that program using a modified version of the Library.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow. Pay close attention to the difference between a
|
||||||
|
"work based on the library" and a "work that uses the library". The
|
||||||
|
former contains code derived from the library, whereas the latter must
|
||||||
|
be combined with the library in order to run.
|
||||||
|
|
||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License Agreement applies to any software library or other
|
||||||
|
program which contains a notice placed by the copyright holder or
|
||||||
|
other authorized party saying it may be distributed under the terms of
|
||||||
|
this Lesser General Public License (also called "this License").
|
||||||
|
Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
A "library" means a collection of software functions and/or data
|
||||||
|
prepared so as to be conveniently linked with application programs
|
||||||
|
(which use some of those functions and data) to form executables.
|
||||||
|
|
||||||
|
The "Library", below, refers to any such software library or work
|
||||||
|
which has been distributed under these terms. A "work based on the
|
||||||
|
Library" means either the Library or any derivative work under
|
||||||
|
copyright law: that is to say, a work containing the Library or a
|
||||||
|
portion of it, either verbatim or with modifications and/or translated
|
||||||
|
straightforwardly into another language. (Hereinafter, translation is
|
||||||
|
included without limitation in the term "modification".)
|
||||||
|
|
||||||
|
"Source code" for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For a library, complete source code means
|
||||||
|
all the source code for all modules it contains, plus any associated
|
||||||
|
interface definition files, plus the scripts used to control compilation
|
||||||
|
and installation of the library.
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running a program using the Library is not restricted, and output from
|
||||||
|
such a program is covered only if its contents constitute a work based
|
||||||
|
on the Library (independent of the use of the Library in a tool for
|
||||||
|
writing it). Whether that is true depends on what the Library does
|
||||||
|
and what the program that uses the Library does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Library's
|
||||||
|
complete source code as you receive it, in any medium, provided that
|
||||||
|
you conspicuously and appropriately publish on each copy an
|
||||||
|
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||||
|
all the notices that refer to this License and to the absence of any
|
||||||
|
warranty; and distribute a copy of this License along with the
|
||||||
|
Library.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy,
|
||||||
|
and you may at your option offer warranty protection in exchange for a
|
||||||
|
fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Library or any portion
|
||||||
|
of it, thus forming a work based on the Library, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The modified work must itself be a software library.
|
||||||
|
|
||||||
|
b) You must cause the files modified to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
c) You must cause the whole of the work to be licensed at no
|
||||||
|
charge to all third parties under the terms of this License.
|
||||||
|
|
||||||
|
d) If a facility in the modified Library refers to a function or a
|
||||||
|
table of data to be supplied by an application program that uses
|
||||||
|
the facility, other than as an argument passed when the facility
|
||||||
|
is invoked, then you must make a good faith effort to ensure that,
|
||||||
|
in the event an application does not supply such function or
|
||||||
|
table, the facility still operates, and performs whatever part of
|
||||||
|
its purpose remains meaningful.
|
||||||
|
|
||||||
|
(For example, a function in a library to compute square roots has
|
||||||
|
a purpose that is entirely well-defined independent of the
|
||||||
|
application. Therefore, Subsection 2d requires that any
|
||||||
|
application-supplied function or table used by this function must
|
||||||
|
be optional: if the application does not supply it, the square
|
||||||
|
root function must still compute square roots.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Library,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Library, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote
|
||||||
|
it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Library.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Library
|
||||||
|
with the Library (or with a work based on the Library) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||||
|
License instead of this License to a given copy of the Library. To do
|
||||||
|
this, you must alter all the notices that refer to this License, so
|
||||||
|
that they refer to the ordinary GNU General Public License, version 2,
|
||||||
|
instead of to this License. (If a newer version than version 2 of the
|
||||||
|
ordinary GNU General Public License has appeared, then you can specify
|
||||||
|
that version instead if you wish.) Do not make any other change in
|
||||||
|
these notices.
|
||||||
|
|
||||||
|
Once this change is made in a given copy, it is irreversible for
|
||||||
|
that copy, so the ordinary GNU General Public License applies to all
|
||||||
|
subsequent copies and derivative works made from that copy.
|
||||||
|
|
||||||
|
This option is useful when you wish to copy part of the code of
|
||||||
|
the Library into a program that is not a library.
|
||||||
|
|
||||||
|
4. You may copy and distribute the Library (or a portion or
|
||||||
|
derivative of it, under Section 2) in object code or executable form
|
||||||
|
under the terms of Sections 1 and 2 above provided that you accompany
|
||||||
|
it with the complete corresponding machine-readable source code, which
|
||||||
|
must be distributed under the terms of Sections 1 and 2 above on a
|
||||||
|
medium customarily used for software interchange.
|
||||||
|
|
||||||
|
If distribution of object code is made by offering access to copy
|
||||||
|
from a designated place, then offering equivalent access to copy the
|
||||||
|
source code from the same place satisfies the requirement to
|
||||||
|
distribute the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
5. A program that contains no derivative of any portion of the
|
||||||
|
Library, but is designed to work with the Library by being compiled or
|
||||||
|
linked with it, is called a "work that uses the Library". Such a
|
||||||
|
work, in isolation, is not a derivative work of the Library, and
|
||||||
|
therefore falls outside the scope of this License.
|
||||||
|
|
||||||
|
However, linking a "work that uses the Library" with the Library
|
||||||
|
creates an executable that is a derivative of the Library (because it
|
||||||
|
contains portions of the Library), rather than a "work that uses the
|
||||||
|
library". The executable is therefore covered by this License.
|
||||||
|
Section 6 states terms for distribution of such executables.
|
||||||
|
|
||||||
|
When a "work that uses the Library" uses material from a header file
|
||||||
|
that is part of the Library, the object code for the work may be a
|
||||||
|
derivative work of the Library even though the source code is not.
|
||||||
|
Whether this is true is especially significant if the work can be
|
||||||
|
linked without the Library, or if the work is itself a library. The
|
||||||
|
threshold for this to be true is not precisely defined by law.
|
||||||
|
|
||||||
|
If such an object file uses only numerical parameters, data
|
||||||
|
structure layouts and accessors, and small macros and small inline
|
||||||
|
functions (ten lines or less in length), then the use of the object
|
||||||
|
file is unrestricted, regardless of whether it is legally a derivative
|
||||||
|
work. (Executables containing this object code plus portions of the
|
||||||
|
Library will still fall under Section 6.)
|
||||||
|
|
||||||
|
Otherwise, if the work is a derivative of the Library, you may
|
||||||
|
distribute the object code for the work under the terms of Section 6.
|
||||||
|
Any executables containing that work also fall under Section 6,
|
||||||
|
whether or not they are linked directly with the Library itself.
|
||||||
|
|
||||||
|
6. As an exception to the Sections above, you may also combine or
|
||||||
|
link a "work that uses the Library" with the Library to produce a
|
||||||
|
work containing portions of the Library, and distribute that work
|
||||||
|
under terms of your choice, provided that the terms permit
|
||||||
|
modification of the work for the customer's own use and reverse
|
||||||
|
engineering for debugging such modifications.
|
||||||
|
|
||||||
|
You must give prominent notice with each copy of the work that the
|
||||||
|
Library is used in it and that the Library and its use are covered by
|
||||||
|
this License. You must supply a copy of this License. If the work
|
||||||
|
during execution displays copyright notices, you must include the
|
||||||
|
copyright notice for the Library among them, as well as a reference
|
||||||
|
directing the user to the copy of this License. Also, you must do one
|
||||||
|
of these things:
|
||||||
|
|
||||||
|
a) Accompany the work with the complete corresponding
|
||||||
|
machine-readable source code for the Library including whatever
|
||||||
|
changes were used in the work (which must be distributed under
|
||||||
|
Sections 1 and 2 above); and, if the work is an executable linked
|
||||||
|
with the Library, with the complete machine-readable "work that
|
||||||
|
uses the Library", as object code and/or source code, so that the
|
||||||
|
user can modify the Library and then relink to produce a modified
|
||||||
|
executable containing the modified Library. (It is understood
|
||||||
|
that the user who changes the contents of definitions files in the
|
||||||
|
Library will not necessarily be able to recompile the application
|
||||||
|
to use the modified definitions.)
|
||||||
|
|
||||||
|
b) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (1) uses at run time a
|
||||||
|
copy of the library already present on the user's computer system,
|
||||||
|
rather than copying library functions into the executable, and (2)
|
||||||
|
will operate properly with a modified version of the library, if
|
||||||
|
the user installs one, as long as the modified version is
|
||||||
|
interface-compatible with the version that the work was made with.
|
||||||
|
|
||||||
|
c) Accompany the work with a written offer, valid for at
|
||||||
|
least three years, to give the same user the materials
|
||||||
|
specified in Subsection 6a, above, for a charge no more
|
||||||
|
than the cost of performing this distribution.
|
||||||
|
|
||||||
|
d) If distribution of the work is made by offering access to copy
|
||||||
|
from a designated place, offer equivalent access to copy the above
|
||||||
|
specified materials from the same place.
|
||||||
|
|
||||||
|
e) Verify that the user has already received a copy of these
|
||||||
|
materials or that you have already sent this user a copy.
|
||||||
|
|
||||||
|
For an executable, the required form of the "work that uses the
|
||||||
|
Library" must include any data and utility programs needed for
|
||||||
|
reproducing the executable from it. However, as a special exception,
|
||||||
|
the materials to be distributed need not include anything that is
|
||||||
|
normally distributed (in either source or binary form) with the major
|
||||||
|
components (compiler, kernel, and so on) of the operating system on
|
||||||
|
which the executable runs, unless that component itself accompanies
|
||||||
|
the executable.
|
||||||
|
|
||||||
|
It may happen that this requirement contradicts the license
|
||||||
|
restrictions of other proprietary libraries that do not normally
|
||||||
|
accompany the operating system. Such a contradiction means you cannot
|
||||||
|
use both them and the Library together in an executable that you
|
||||||
|
distribute.
|
||||||
|
|
||||||
|
7. You may place library facilities that are a work based on the
|
||||||
|
Library side-by-side in a single library together with other library
|
||||||
|
facilities not covered by this License, and distribute such a combined
|
||||||
|
library, provided that the separate distribution of the work based on
|
||||||
|
the Library and of the other library facilities is otherwise
|
||||||
|
permitted, and provided that you do these two things:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work
|
||||||
|
based on the Library, uncombined with any other library
|
||||||
|
facilities. This must be distributed under the terms of the
|
||||||
|
Sections above.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library of the fact
|
||||||
|
that part of it is a work based on the Library, and explaining
|
||||||
|
where to find the accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
8. You may not copy, modify, sublicense, link with, or distribute
|
||||||
|
the Library except as expressly provided under this License. Any
|
||||||
|
attempt otherwise to copy, modify, sublicense, link with, or
|
||||||
|
distribute the Library is void, and will automatically terminate your
|
||||||
|
rights under this License. However, parties who have received copies,
|
||||||
|
or rights, from you under this License will not have their licenses
|
||||||
|
terminated so long as such parties remain in full compliance.
|
||||||
|
|
||||||
|
9. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Library or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Library (or any work based on the
|
||||||
|
Library), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Library or works based on it.
|
||||||
|
|
||||||
|
10. Each time you redistribute the Library (or any work based on the
|
||||||
|
Library), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute, link with or modify the Library
|
||||||
|
subject to these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties with
|
||||||
|
this License.
|
||||||
|
|
||||||
|
11. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Library at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Library by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Library.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under any
|
||||||
|
particular circumstance, the balance of the section is intended to apply,
|
||||||
|
and the section as a whole is intended to apply in other circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
12. If the distribution and/or use of the Library is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Library under this License may add
|
||||||
|
an explicit geographical distribution limitation excluding those countries,
|
||||||
|
so that distribution is permitted only in or among countries not thus
|
||||||
|
excluded. In such case, this License incorporates the limitation as if
|
||||||
|
written in the body of this License.
|
||||||
|
|
||||||
|
13. The Free Software Foundation may publish revised and/or new
|
||||||
|
versions of the Lesser General Public License from time to time.
|
||||||
|
Such new versions will be similar in spirit to the present version,
|
||||||
|
but may differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Library
|
||||||
|
specifies a version number of this License which applies to it and
|
||||||
|
"any later version", you have the option of following the terms and
|
||||||
|
conditions either of that version or of any later version published by
|
||||||
|
the Free Software Foundation. If the Library does not specify a
|
||||||
|
license version number, you may choose any version ever published by
|
||||||
|
the Free Software Foundation.
|
||||||
|
|
||||||
|
14. If you wish to incorporate parts of the Library into other free
|
||||||
|
programs whose distribution conditions are incompatible with these,
|
||||||
|
write to the author to ask for permission. For software which is
|
||||||
|
copyrighted by the Free Software Foundation, write to the Free
|
||||||
|
Software Foundation; we sometimes make exceptions for this. Our
|
||||||
|
decision will be guided by the two goals of preserving the free status
|
||||||
|
of all derivatives of our free software and of promoting the sharing
|
||||||
|
and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||||
|
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||||
|
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||||
|
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||||
|
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||||
|
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||||
|
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||||
|
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||||
|
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||||
|
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||||
|
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||||
|
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||||
|
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||||
|
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||||
|
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Libraries
|
||||||
|
|
||||||
|
If you develop a new library, and you want it to be of the greatest
|
||||||
|
possible use to the public, we recommend making it free software that
|
||||||
|
everyone can redistribute and change. You can do so by permitting
|
||||||
|
redistribution under these terms (or, alternatively, under the terms of the
|
||||||
|
ordinary General Public License).
|
||||||
|
|
||||||
|
To apply these terms, attach the following notices to the library. It is
|
||||||
|
safest to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least the
|
||||||
|
"copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the library's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library 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.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||||
|
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1990
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
That's all there is to it!
|
||||||
|
|
||||||
|
|
@@ -19,11 +19,6 @@ Installing calc in 4 easy steps:
|
|||||||
As shipped the Makefile assumes 'more'. On your system
|
As shipped the Makefile assumes 'more'. On your system
|
||||||
you may find 'less' to be a better pager.
|
you may find 'less' to be a better pager.
|
||||||
|
|
||||||
The CALCBINDINGS is matter of personal taste. As shipped
|
|
||||||
the Makefile assumes a default quasi-emacs-like command
|
|
||||||
line editor. Changing CALCBINDINGS= altbind will cause ^D
|
|
||||||
to end calc in a fashion similar to that of the bc(1) command.
|
|
||||||
|
|
||||||
Set TOPDIR to be the place under which help files, calc,
|
Set TOPDIR to be the place under which help files, calc,
|
||||||
include files and calc libs are to be installed. As shipped
|
include files and calc libs are to be installed. As shipped
|
||||||
the Makefile assumes a TOPDIR of /usr/local/lib.
|
the Makefile assumes a TOPDIR of /usr/local/lib.
|
||||||
@@ -53,3 +48,29 @@ Installing calc in 4 easy steps:
|
|||||||
|
|
||||||
We suggest that you might want to read the README file and look at
|
We suggest that you might want to read the README file and look at
|
||||||
the calc help subsystem. See the README file for details.
|
the calc help subsystem. See the README file for details.
|
||||||
|
|
||||||
|
## Copyright (C) 1999 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: HOWTO.INSTALL,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/HOWTO.INSTALL,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 1999/09/27 20:48:44
|
||||||
|
## 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/
|
||||||
|
55
LIBRARY
55
LIBRARY
@@ -1,11 +1,11 @@
|
|||||||
USING THE ARBITRARY PRECISION ROUTINES IN A C PROGRAM
|
USING THE ARBITRARY PRECISION ROUTINES IN A C PROGRAM
|
||||||
|
|
||||||
Part of the calc release consists of an arbitrary precision math library.
|
Part of the calc release consists of an arbitrary precision math link library.
|
||||||
This library is used by the calc program to perform its own calculations.
|
This link library is used by the calc program to perform its own calculations.
|
||||||
If you wish, you can ignore the calc program entirely and call the arbitrary
|
If you wish, you can ignore the calc program entirely and call the arbitrary
|
||||||
precision math routines from your own C programs.
|
precision math routines from your own C programs.
|
||||||
|
|
||||||
The library is called libcalc.a, and provides routines to handle arbitrary
|
The link library is called libcalc.a, and provides routines to handle arbitrary
|
||||||
precision arithmetic with integers, rational numbers, or complex numbers.
|
precision arithmetic with integers, rational numbers, or complex numbers.
|
||||||
There are also many numeric functions such as factorial and gcd, along
|
There are also many numeric functions such as factorial and gcd, along
|
||||||
with some transcendental functions such as sin and exp.
|
with some transcendental functions such as sin and exp.
|
||||||
@@ -49,8 +49,7 @@ 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 the include files needed to build
|
||||||
libcalc.a along with the library itself (and the lint library
|
libcalc.a along with the link library itself are installed into ${LIBDIR}.
|
||||||
llib-lcalc.ln, if made) are installed into ${LIBDIR}.
|
|
||||||
|
|
||||||
External programs may want to compile with:
|
External programs may want to compile with:
|
||||||
|
|
||||||
@@ -77,9 +76,9 @@ level in your program, and use longjmp in the math_error routine to return
|
|||||||
to that level and so recover from the error. This is what the calc program
|
to that level and so recover from the error. This is what the calc program
|
||||||
does.
|
does.
|
||||||
|
|
||||||
For convenience, the library libcalc.a contains a math_error routine.
|
For convenience, the link library libcalc.a contains a math_error routine.
|
||||||
By default, this routine simply prints a message to stderr and then exits.
|
By default, this routine simply prints a message to stderr and then exits.
|
||||||
By simply linking in this library, any calc errors will result in a
|
By simply linking in this link library, any calc errors will result in a
|
||||||
error message on stderr followed by an exit.
|
error message on stderr followed by an exit.
|
||||||
|
|
||||||
External programs that wish to use this math_error may want to compile with:
|
External programs that wish to use this math_error may want to compile with:
|
||||||
@@ -117,7 +116,7 @@ For example:
|
|||||||
OUTPUT ROUTINES
|
OUTPUT ROUTINES
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
The output from the routines in the library normally goes to stdout. You
|
The output from the routines in the link library normally goes to stdout. You
|
||||||
can divert that output to either another FILE handle, or else to a string.
|
can divert that output to either another FILE handle, or else to a string.
|
||||||
Read the routines in zio.c to see what is available. Diversions can be
|
Read the routines in zio.c to see what is available. Diversions can be
|
||||||
nested.
|
nested.
|
||||||
@@ -328,13 +327,13 @@ Examples of these are qnum to return the numerator, qden to return the
|
|||||||
denominator, qint to return the integer part of, qfrac to return the
|
denominator, qint to return the integer part of, qfrac to return the
|
||||||
fractional part of, and qinv to invert a fraction.
|
fractional part of, and qinv to invert a fraction.
|
||||||
|
|
||||||
There are some transcendental functions in the library, such as sin and cos.
|
There are some transcendental functions in the link library, such as sin
|
||||||
These cannot be evaluated exactly as fractions. Therefore, they accept
|
and cos. These cannot be evaluated exactly as fractions. Therefore,
|
||||||
another argument which tells how accurate you want the result. This is an
|
they accept another argument which tells how accurate you want the result.
|
||||||
"epsilon" value, and the returned value will be within that quantity of
|
This is an "epsilon" value, and the returned value will be within that
|
||||||
the correct value. This is usually an absolute difference, but for some
|
quantity of the correct value. This is usually an absolute difference,
|
||||||
functions (such as exp), this is a relative difference. For example, to
|
but for some functions (such as exp), this is a relative difference.
|
||||||
calculate sin(0.5) to 100 decimal places, you could do:
|
For example, to calculate sin(0.5) to 100 decimal places, you could do:
|
||||||
|
|
||||||
NUMBER *q, *ans, *epsilon;
|
NUMBER *q, *ans, *epsilon;
|
||||||
|
|
||||||
@@ -455,3 +454,29 @@ call. This is not required, but is does bring things to a closure.
|
|||||||
|
|
||||||
The function libcalc_call_me_last() takes no args and returns void. You
|
The function libcalc_call_me_last() takes no args and returns void. You
|
||||||
need call libcalc_call_me_last() only once.
|
need call libcalc_call_me_last() only once.
|
||||||
|
|
||||||
|
## Copyright (C) 1999 David I. Bell and Landon Curt Noll
|
||||||
|
##
|
||||||
|
## Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
## 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: LIBRARY,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/LIBRARY,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 1993/07/30 19:44:49
|
||||||
|
## File existed as early as: 1993
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
49
README
49
README
@@ -4,7 +4,7 @@ See the HOWTO.INSTALL file for information on how to build and install calc.
|
|||||||
|
|
||||||
To be sure that your version of calc is up to date, check out:
|
To be sure that your version of calc is up to date, check out:
|
||||||
|
|
||||||
http://reality.sgi.com/chongo/tech/comp/calc/calc-download.html
|
http://www.isthe.com/chongo/tech/comp/calc/calc-download.html
|
||||||
|
|
||||||
We are interested in any/all feedback on recent versions of calc.
|
We are interested in any/all feedback on recent versions of calc.
|
||||||
In particular we would like to hear about:
|
In particular we would like to hear about:
|
||||||
@@ -52,9 +52,10 @@ C programmers should note some unexpected differences in the calc syntax:
|
|||||||
|
|
||||||
> help unexpected
|
> help unexpected
|
||||||
|
|
||||||
Calc is shipped with a library of calc scripts. For a list see:
|
Calc is shipped with a standard collection of calc resource files.
|
||||||
|
For a list of calc standard resource files see:
|
||||||
|
|
||||||
> help stdlib
|
> help resource
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
@@ -74,7 +75,10 @@ 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 a request to:
|
||||||
|
|
||||||
calc-tester-request@postofc.corp.sgi.com
|
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:
|
Your message body (not the subject) should consist of:
|
||||||
|
|
||||||
@@ -85,6 +89,41 @@ 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:
|
||||||
|
|
||||||
|
calc-bugs 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' ]]
|
||||||
|
|
||||||
|
but see the BUGS file first.
|
||||||
|
|
||||||
The calc web site is located at:
|
The calc web site is located at:
|
||||||
|
|
||||||
http://reality.sgi.com/chongo/tech/comp/calc
|
http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
|
||||||
|
## Copyright (C) 1999 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: README,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/RCS/README,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 1995/10/25 05:27:59
|
||||||
|
## File existed as early as: 1995
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
133
addop.c
133
addop.c
@@ -1,11 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 David I. Bell
|
* addop - add opcodes to a function being compiled
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Add opcodes to a function being compiled.
|
* Copyright (C) 1999 David I. Bell and Ernest Bowen
|
||||||
|
*
|
||||||
|
* Primary author: David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: addop.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:48:10
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
#include "opcodes.h"
|
#include "opcodes.h"
|
||||||
@@ -22,6 +46,7 @@
|
|||||||
|
|
||||||
static long maxopcodes; /* number of opcodes available */
|
static 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 long oldop; /* previous opcode */
|
static long oldop; /* previous opcode */
|
||||||
static long oldoldop; /* opcode before previous opcode */
|
static long oldoldop; /* opcode before previous opcode */
|
||||||
static long debugline; /* line number of latest debug opcode */
|
static long debugline; /* line number of latest debug opcode */
|
||||||
@@ -61,26 +86,49 @@ initfunctions(void)
|
|||||||
void
|
void
|
||||||
showfunctions(void)
|
showfunctions(void)
|
||||||
{
|
{
|
||||||
FUNC **fpp; /* pointer into function table */
|
|
||||||
FUNC *fp; /* current function */
|
FUNC *fp; /* current function */
|
||||||
long count;
|
long count;
|
||||||
|
long index;
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
if (funccount > 0) {
|
if (funccount > 0) {
|
||||||
for (fpp = &functions[funccount - 1]; fpp >= functions; fpp--) {
|
if (conf->resource_debug & RSCDBG_FUNC_INFO)
|
||||||
fp = *fpp;
|
math_str("Index\tName \tArgs\tOpcodes\n"
|
||||||
|
"-----\t------ \t---- \t------\n");
|
||||||
|
else
|
||||||
|
math_str("Name\tArguments\n"
|
||||||
|
"----\t---------\n");
|
||||||
|
for (index = 0; index < funccount; index++) {
|
||||||
|
fp = functions[index];
|
||||||
|
if (conf->resource_debug & RSCDBG_FUNC_INFO) {
|
||||||
|
|
||||||
|
math_fmt("%5ld\t%-12s\t", index,
|
||||||
|
namestr(&funcnames,index));
|
||||||
|
if (fp) {
|
||||||
|
count++;
|
||||||
|
math_fmt("%-5d\t%-5ld\n",
|
||||||
|
fp->f_paramcount, fp->f_opcodecount);
|
||||||
|
} else {
|
||||||
|
math_str("null\t0\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
continue;
|
continue;
|
||||||
if (count++ == 0) {
|
count++;
|
||||||
printf("Name Arguments\n---- ---------\n");
|
math_fmt("%-12s\t%-2d\n", namestr(&funcnames,
|
||||||
}
|
index), fp->f_paramcount);
|
||||||
printf("%-12s %-2d\n", fp->f_name, fp->f_paramcount);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (count > 0) {
|
}
|
||||||
printf("\nNumber: %ld\n", count);
|
if (conf->resource_debug & RSCDBG_FUNC_INFO) {
|
||||||
|
math_fmt("\nNumber non-null: %ld\n", count);
|
||||||
|
math_fmt("Number null: %ld\n", funccount - count);
|
||||||
|
math_fmt("Total number: %ld\n", funccount);
|
||||||
} else {
|
} else {
|
||||||
printf("No user functions defined\n");
|
if (count > 0)
|
||||||
|
math_fmt("\nNumber: %ld\n", count);
|
||||||
|
else
|
||||||
|
math_str("No user functions defined\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +162,9 @@ beginfunc(char *name, BOOL newflag)
|
|||||||
fp->f_localcount = 0;
|
fp->f_localcount = 0;
|
||||||
fp->f_opcodecount = 0;
|
fp->f_opcodecount = 0;
|
||||||
fp->f_savedvalue.v_type = V_NULL;
|
fp->f_savedvalue.v_type = V_NULL;
|
||||||
fp->f_name = namestr(&funcnames, newindex);
|
fp->f_savedvalue.v_subtype = V_NOSUBTYPE;
|
||||||
|
newname = namestr(&funcnames, newindex);
|
||||||
|
fp->f_name = newname;
|
||||||
curfunc = fp;
|
curfunc = fp;
|
||||||
initlocals();
|
initlocals();
|
||||||
initlabels();
|
initlabels();
|
||||||
@@ -141,10 +191,11 @@ endfunc(void)
|
|||||||
addop(OP_UNDEF);
|
addop(OP_UNDEF);
|
||||||
addop(OP_RETURN);
|
addop(OP_RETURN);
|
||||||
}
|
}
|
||||||
|
|
||||||
checklabels();
|
checklabels();
|
||||||
|
|
||||||
if (errorcount) {
|
if (errorcount) {
|
||||||
freefunc(curfunc);
|
printf("\"%s\": %ld error%s\n", newname, errorcount,
|
||||||
printf("\"%s\": %ld error%s\n", curfunc->f_name, errorcount,
|
|
||||||
((errorcount == 1) ? "" : "s"));
|
((errorcount == 1) ? "" : "s"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -164,9 +215,9 @@ endfunc(void)
|
|||||||
size += dumpop(&fp->f_opcodes[size]);
|
size += dumpop(&fp->f_opcodes[size]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((inputisterminal() && conf->lib_debug & LIBDBG_STDIN_FUNC) ||
|
if ((inputisterminal() && conf->resource_debug & RSCDBG_STDIN_FUNC) ||
|
||||||
(!inputisterminal() && conf->lib_debug & LIBDBG_FILE_FUNC)) {
|
(!inputisterminal() && conf->resource_debug & RSCDBG_FILE_FUNC)) {
|
||||||
printf("%s(", fp->f_name);
|
printf("%s(", newname);
|
||||||
for (index = 0; index < fp->f_paramcount; index++) {
|
for (index = 0; index < fp->f_paramcount; index++) {
|
||||||
if (index)
|
if (index)
|
||||||
putchar(',');
|
putchar(',');
|
||||||
@@ -182,7 +233,6 @@ endfunc(void)
|
|||||||
free(functions[newindex]);
|
free(functions[newindex]);
|
||||||
}
|
}
|
||||||
functions[newindex] = fp;
|
functions[newindex] = fp;
|
||||||
objuncache();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -230,7 +280,7 @@ rmuserfunc(char *name)
|
|||||||
|
|
||||||
index = findstr(&funcnames, name);
|
index = findstr(&funcnames, name);
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
printf("%s() has never been defined\n",
|
fprintf(stderr, "%s() has never been defined\n",
|
||||||
name);
|
name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -238,8 +288,8 @@ rmuserfunc(char *name)
|
|||||||
return;
|
return;
|
||||||
freenumbers(functions[index]);
|
freenumbers(functions[index]);
|
||||||
free(functions[index]);
|
free(functions[index]);
|
||||||
if ((inputisterminal() && conf->lib_debug & LIBDBG_STDIN_FUNC) ||
|
if ((inputisterminal() && conf->resource_debug & RSCDBG_STDIN_FUNC) ||
|
||||||
(!inputisterminal() && conf->lib_debug & LIBDBG_FILE_FUNC))
|
(!inputisterminal() && conf->resource_debug & RSCDBG_FILE_FUNC))
|
||||||
printf("%s() undefined\n", name);
|
printf("%s() undefined\n", name);
|
||||||
functions[index] = NULL;
|
functions[index] = NULL;
|
||||||
}
|
}
|
||||||
@@ -251,12 +301,25 @@ rmuserfunc(char *name)
|
|||||||
void
|
void
|
||||||
freefunc(FUNC *fp)
|
freefunc(FUNC *fp)
|
||||||
{
|
{
|
||||||
|
long index;
|
||||||
long i;
|
long i;
|
||||||
|
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return;
|
return;
|
||||||
|
if (fp == curfunc) {
|
||||||
|
index = newindex;
|
||||||
|
} else {
|
||||||
|
for (index = 0; index < funccount; index++) {
|
||||||
|
if (functions[index] == fp)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (index == funccount) {
|
||||||
|
math_error("Bad call to freefunc!!!");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
}
|
||||||
if (conf->traceflags & TRACE_FNCODES) {
|
if (conf->traceflags & TRACE_FNCODES) {
|
||||||
printf("Freeing function \"%s\"\n", fp->f_name);
|
printf("Freeing function \"%s\"\n",namestr(&funcnames,index));
|
||||||
dumpnames = FALSE;
|
dumpnames = FALSE;
|
||||||
for (i = 0; i < fp->f_opcodecount; ) {
|
for (i = 0; i < fp->f_opcodecount; ) {
|
||||||
printf("%ld: ", i);
|
printf("%ld: ", i);
|
||||||
@@ -272,12 +335,14 @@ freefunc(FUNC *fp)
|
|||||||
void
|
void
|
||||||
rmalluserfunc(void)
|
rmalluserfunc(void)
|
||||||
{
|
{
|
||||||
FUNC **fpp;
|
FUNC *fp;
|
||||||
|
long index;
|
||||||
|
|
||||||
for (fpp = functions; fpp < &functions[funccount]; fpp++) {
|
for (index = 0; index < funccount; index++) {
|
||||||
if (*fpp) {
|
fp = functions[index];
|
||||||
freefunc(*fpp);
|
if (fp) {
|
||||||
*fpp = NULL;
|
freefunc(fp);
|
||||||
|
functions[index] = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -461,7 +526,8 @@ addop(long op)
|
|||||||
fp->f_opcodecount -= diff;
|
fp->f_opcodecount -= diff;
|
||||||
oldop = OP_NOP;
|
oldop = OP_NOP;
|
||||||
oldoldop = OP_NOP;
|
oldoldop = OP_NOP;
|
||||||
fprintf(stderr, "%ld: unused value ignored\n",
|
fprintf(stderr,
|
||||||
|
"Line %ld: unused value ignored\n",
|
||||||
linenumber());
|
linenumber());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -534,8 +600,7 @@ addop(long op)
|
|||||||
qfree(q);
|
qfree(q);
|
||||||
fp->f_opcodes[count - 2] = OP_ZERO;
|
fp->f_opcodes[count - 2] = OP_ZERO;
|
||||||
fp->f_opcodecount--;
|
fp->f_opcodecount--;
|
||||||
}
|
} else if (qisone(q)) {
|
||||||
else if (qisone(q)) {
|
|
||||||
qfree(q);
|
qfree(q);
|
||||||
fp->f_opcodes[count - 2] = OP_ONE;
|
fp->f_opcodes[count - 2] = OP_ONE;
|
||||||
fp->f_opcodecount--;
|
fp->f_opcodecount--;
|
||||||
@@ -638,5 +703,3 @@ addoplabel(long op, LABEL *label)
|
|||||||
addop(op);
|
addop(op);
|
||||||
uselabel(label);
|
uselabel(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* END CODE */
|
|
||||||
|
36
align32.c
36
align32.c
@@ -1,26 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
* align32 - determine if 32 bit accesses must be aligned
|
* align32 - determine if 32 bit accesses must be aligned
|
||||||
*
|
*
|
||||||
* This file was written by:
|
* Copyright (C) 1999 Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Landon Curt Noll
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* http://reality.sgi.com/chongo
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* chongo <was here> /\../\
|
* 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.
|
||||||
*
|
*
|
||||||
* This code has been placed in the public domain. Please do not
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
* copyright this code.
|
* 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.
|
||||||
*
|
*
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
* @(#) $Revision: 29.2 $
|
||||||
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MER-
|
* @(#) $Id: align32.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
* CHANTABILITY AND FITNESS. IN NO EVENT SHALL LANDON CURT
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/align32.c,v $
|
||||||
* NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
*
|
||||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
* Under source code control: 1995/11/23 05:18:06
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
* File existed as early as: 1995
|
||||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
*
|
||||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include "longbits.h"
|
#include "longbits.h"
|
||||||
|
29
alloc.h
29
alloc.h
@@ -1,7 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 David I. Bell
|
* alloc - storage allocation and storage debug macros
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
*
|
||||||
* provided that this copyright notice remains intact.
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: alloc.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/alloc.h,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:48:29
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
70
assocfunc.c
70
assocfunc.c
@@ -1,8 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 David I. Bell
|
* assocfunc - association table routines
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: assocfunc.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/assocfunc.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1993/07/20 23:04:27
|
||||||
|
* File existed as early as: 1993
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* Association table routines.
|
* Association table routines.
|
||||||
* An association table is a type of value which can be "indexed" by
|
* An association table is a type of value which can be "indexed" by
|
||||||
* one or more arbitrary values. Each element in the table is thus an
|
* one or more arbitrary values. Each element in the table is thus an
|
||||||
@@ -11,6 +36,7 @@
|
|||||||
* quick access.
|
* quick access.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "value.h"
|
#include "value.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -47,8 +73,8 @@ associndex(ASSOC *ap, BOOL create, long dim, VALUE *indices)
|
|||||||
QCKHASH hash;
|
QCKHASH hash;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (dim <= 0) {
|
if (dim < 0) {
|
||||||
math_error("No dimensions for indexing association");
|
math_error("Negative dimension for indexing association");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,6 +106,7 @@ associndex(ASSOC *ap, BOOL create, long dim, VALUE *indices)
|
|||||||
*/
|
*/
|
||||||
if (!create) {
|
if (!create) {
|
||||||
val.v_type = V_NULL;
|
val.v_type = V_NULL;
|
||||||
|
val.v_subtype = V_NOSUBTYPE;
|
||||||
return &val;
|
return &val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,6 +243,27 @@ assocfindex(ASSOC *ap, long index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the list of indices for an association element with specified
|
||||||
|
* double-bracket index.
|
||||||
|
*/
|
||||||
|
LIST *
|
||||||
|
associndices(ASSOC *ap, long index)
|
||||||
|
{
|
||||||
|
ASSOCELEM *ep;
|
||||||
|
LIST *lp;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
ep = elemindex(ap, index);
|
||||||
|
if (ep == NULL)
|
||||||
|
return NULL;
|
||||||
|
lp = listalloc();
|
||||||
|
for (i = 0; i < ep->e_dim; i++)
|
||||||
|
insertlistlast(lp, &ep->e_indices[i]);
|
||||||
|
return lp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compare two associations to see if they are identical.
|
* Compare two associations to see if they are identical.
|
||||||
* Returns TRUE if they are different.
|
* Returns TRUE if they are different.
|
||||||
@@ -244,8 +292,7 @@ assoccmp(ASSOC *ap1, ASSOC *ap2)
|
|||||||
hash = ep1->e_hash;
|
hash = ep1->e_hash;
|
||||||
dim = ep1->e_dim;
|
dim = ep1->e_dim;
|
||||||
for (ep2 = ap2->a_table[hash % size2]; ;
|
for (ep2 = ap2->a_table[hash % size2]; ;
|
||||||
ep2 = ep2->e_next)
|
ep2 = ep2->e_next) {
|
||||||
{
|
|
||||||
if (ep2 == NULL)
|
if (ep2 == NULL)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
if (ep2->e_hash != hash)
|
if (ep2->e_hash != hash)
|
||||||
@@ -282,8 +329,7 @@ assoccopy(ASSOC *oldap)
|
|||||||
|
|
||||||
for (oldhi = 0; oldhi < oldap->a_size; oldhi++) {
|
for (oldhi = 0; oldhi < oldap->a_size; oldhi++) {
|
||||||
for (oldep = oldap->a_table[oldhi]; oldep;
|
for (oldep = oldap->a_table[oldhi]; oldep;
|
||||||
oldep = oldep->e_next)
|
oldep = oldep->e_next) {
|
||||||
{
|
|
||||||
ep = (ASSOCELEM *) malloc(ELEMSIZE(oldep->e_dim));
|
ep = (ASSOCELEM *) malloc(ELEMSIZE(oldep->e_dim));
|
||||||
if (ep == NULL) {
|
if (ep == NULL) {
|
||||||
math_error("Cannot allocate association element");
|
math_error("Cannot allocate association element");
|
||||||
@@ -292,6 +338,7 @@ assoccopy(ASSOC *oldap)
|
|||||||
ep->e_dim = oldep->e_dim;
|
ep->e_dim = oldep->e_dim;
|
||||||
ep->e_hash = oldep->e_hash;
|
ep->e_hash = oldep->e_hash;
|
||||||
ep->e_value.v_type = V_NULL;
|
ep->e_value.v_type = V_NULL;
|
||||||
|
ep->e_value.v_subtype = V_NOSUBTYPE;
|
||||||
for (i = 0; i < ep->e_dim; i++)
|
for (i = 0; i < ep->e_dim; i++)
|
||||||
copyvalue(&oldep->e_indices[i], &ep->e_indices[i]);
|
copyvalue(&oldep->e_indices[i], &ep->e_indices[i]);
|
||||||
copyvalue(&oldep->e_value, &ep->e_value);
|
copyvalue(&oldep->e_value, &ep->e_value);
|
||||||
@@ -447,8 +494,7 @@ assocprint(ASSOC *ap, long max_print)
|
|||||||
((ap->a_count == 1) ? "" : "s"));
|
((ap->a_count == 1) ? "" : "s"));
|
||||||
|
|
||||||
for (index = 0; ((index < max_print) && (index < ap->a_count));
|
for (index = 0; ((index < max_print) && (index < ap->a_count));
|
||||||
index++)
|
index++) {
|
||||||
{
|
|
||||||
ep = elemindex(ap, index);
|
ep = elemindex(ap, index);
|
||||||
if (ep == NULL)
|
if (ep == NULL)
|
||||||
continue;
|
continue;
|
||||||
@@ -489,5 +535,3 @@ compareindices(VALUE *v1, VALUE *v2, long dim)
|
|||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* END CODE */
|
|
||||||
|
34
blkcpy.c
34
blkcpy.c
@@ -1,12 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 Ernest Bowen and Landon Curt Noll
|
* blkcpy - general values and related routines used by the calculator
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Ernest Bowen and Landon Curt Noll
|
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen
|
||||||
* ernie@neumann.une.edu.au and http://reality.sgi.com/chongo
|
*
|
||||||
|
* Primary author: 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: blkcpy.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1997/04/18 20:41:26
|
||||||
|
* File existed as early as: 1997
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
@@ -330,6 +353,7 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
i = num;
|
i = num;
|
||||||
while (i-- > 0) {
|
while (i-- > 0) {
|
||||||
vp->v_type = V_NUM;
|
vp->v_type = V_NUM;
|
||||||
|
vp->v_subtype = V_NOSUBTYPE;
|
||||||
vp->v_num = itoq((long) *op++);
|
vp->v_num = itoq((long) *op++);
|
||||||
vp++;
|
vp++;
|
||||||
}
|
}
|
||||||
|
31
blkcpy.h
31
blkcpy.h
@@ -1,9 +1,32 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 David I. Bell
|
* blkcpy - general values and related routines used by the calculator
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Definitions of general values and related routines used by the calculator.
|
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen
|
||||||
|
*
|
||||||
|
* Primary author: 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: blkcpy.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.h,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1997/04/18 20:41:25
|
||||||
|
* File existed as early as: 1997
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
54
block.c
54
block.c
@@ -1,36 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* block - fixed, dynamic, fifo and circular memory blocks
|
* block - fixed, dynamic, fifo and circular memory blocks
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Copyright (c) 1997 by Landon Curt Noll. All Rights Reserved.
|
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
*
|
||||||
* supporting documentation
|
* Primary author: Landon Curt Noll
|
||||||
* source copies
|
|
||||||
* source works derived from this source
|
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
*
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
* as published by the Free Software Foundation.
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
*
|
||||||
* Comments, suggestions, bug fixes and questions about these routines
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* are welcome. Send EMail to the address given below.
|
* 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.
|
||||||
*
|
*
|
||||||
* Happy bit twiddling,
|
* 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.
|
||||||
*
|
*
|
||||||
* Landon Curt Noll
|
* @(#) $Revision: 29.2 $
|
||||||
* http://reality.sgi.com/chongo
|
* @(#) $Id: block.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.c,v $
|
||||||
*
|
*
|
||||||
* chongo <was here> /\../\
|
* Under source code control: 1997/02/27 00:29:40
|
||||||
|
* File existed as early as: 1997
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -479,7 +476,7 @@ blk_print(BLOCK *blk)
|
|||||||
BOOL havetail;
|
BOOL havetail;
|
||||||
USB8 *ptr;
|
USB8 *ptr;
|
||||||
|
|
||||||
/* XXX - use the config parameters for better print control */
|
/* XXX - should use the config parameters for better print control */
|
||||||
|
|
||||||
printf("chunksize = %d, maxsize = %d, datalen = %d\n\t",
|
printf("chunksize = %d, maxsize = %d, datalen = %d\n\t",
|
||||||
(int)blk->blkchunk, (int)blk->maxsize, (int)blk->datalen);
|
(int)blk->blkchunk, (int)blk->maxsize, (int)blk->datalen);
|
||||||
@@ -512,9 +509,9 @@ nblock_print(NBLOCK *nblk)
|
|||||||
printf("chunksize = %d, maxsize = %d, datalen = %d\n\t",
|
printf("chunksize = %d, maxsize = %d, datalen = %d\n\t",
|
||||||
(int)blk->blkchunk, (int)blk->maxsize, (int)blk->datalen);
|
(int)blk->blkchunk, (int)blk->maxsize, (int)blk->datalen);
|
||||||
printf("NULL");
|
printf("NULL");
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
blk_print(blk);
|
blk_print(blk);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -556,8 +553,7 @@ reallocnblock(int id, int len, int chunk)
|
|||||||
math_error("Allocation failed");
|
math_error("Allocation failed");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
}
|
} else if (newsize != oldsize) {
|
||||||
else if (newsize != oldsize) {
|
|
||||||
newdata = realloc(blk->data, newsize);
|
newdata = realloc(blk->data, newsize);
|
||||||
if (newdata == NULL) {
|
if (newdata == NULL) {
|
||||||
math_error("Reallocation failed");
|
math_error("Reallocation failed");
|
||||||
|
45
block.h
45
block.h
@@ -1,36 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* block - fixed, dynamic, fifo and circular memory blocks
|
* block - fixed, dynamic, fifo and circular memory blocks
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Copyright (c) 1997 by Landon Curt Noll. All Rights Reserved.
|
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Copyright (C) 1999 Landon Curt Noll and Ernest Bowen
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
*
|
||||||
* supporting documentation
|
* Primary author: Landon Curt Noll
|
||||||
* source copies
|
|
||||||
* source works derived from this source
|
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
*
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
* as published by the Free Software Foundation.
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
*
|
||||||
* Comments, suggestions, bug fixes and questions about these routines
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* are welcome. Send EMail to the address given below.
|
* 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.
|
||||||
*
|
*
|
||||||
* Happy bit twiddling,
|
* 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.
|
||||||
*
|
*
|
||||||
* Landon Curt Noll
|
* @(#) $Revision: 29.2 $
|
||||||
* http://reality.sgi.com/chongo
|
* @(#) $Id: block.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.h,v $
|
||||||
*
|
*
|
||||||
* chongo <was here> /\../\
|
* Under source code control: 1997/02/21 05:03:39
|
||||||
|
* File existed as early as: 1997
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
41
byteswap.c
41
byteswap.c
@@ -1,25 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 by Landon Curt Noll. All Rights Reserved.
|
* byteswap - byte swapping routines
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Copyright (C) 1999 Landon Curt Noll
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
*
|
||||||
* supporting documentation
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* source copies
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
* source works derived from this source
|
* as published by the Free Software Foundation.
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
*
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
* Public License for more details.
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
*
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* 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: byteswap.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/10/11 04:44:01
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "cmath.h"
|
#include "cmath.h"
|
||||||
#include "byteswap.h"
|
#include "byteswap.h"
|
||||||
|
|
||||||
|
40
byteswap.h
40
byteswap.h
@@ -1,23 +1,31 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 by Landon Curt Noll. All Rights Reserved.
|
* byteswap - byte swapping macros
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Copyright (C) 1999 Landon Curt Noll
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
*
|
||||||
* supporting documentation
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* source copies
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
* source works derived from this source
|
* as published by the Free Software Foundation.
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
*
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
* Public License for more details.
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
*
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* 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: byteswap.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/byteswap.h,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/10/11 04:44:01
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,14 +1,35 @@
|
|||||||
|
#!/bin/make
|
||||||
#
|
#
|
||||||
# lib - makefile for calc library scripts
|
# cal - makefile for calc standard resource files
|
||||||
#
|
#
|
||||||
# Copyright (c) 1997 David I. Bell and Landon Curt Noll
|
# Copyright (C) 1999 Landon Curt Noll
|
||||||
# Permission is granted to use, distribute, or modify this source,
|
|
||||||
# provided that this copyright notice remains intact.
|
|
||||||
#
|
#
|
||||||
# Arbitrary precision calculator.
|
# 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.
|
||||||
#
|
#
|
||||||
# calculator by David I. Bell
|
# Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
# makefile by Landon Curt Noll
|
# 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: Makefile,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1991/07/21 05:00:54
|
||||||
|
# File existed as early as: 1991
|
||||||
|
#
|
||||||
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
#
|
||||||
|
# calculator by David I. Bell with help/mods from others
|
||||||
|
# Makefile by Landon Curt Noll
|
||||||
|
|
||||||
# required vars
|
# required vars
|
||||||
#
|
#
|
||||||
@@ -33,23 +54,32 @@ LIBDIR= ${TOPDIR}/calc
|
|||||||
#Q=
|
#Q=
|
||||||
Q=@
|
Q=@
|
||||||
|
|
||||||
|
# standard tools
|
||||||
|
#
|
||||||
|
CHMOD= chmod
|
||||||
|
|
||||||
# The calc files to install
|
# The calc files to install
|
||||||
#
|
#
|
||||||
CALC_FILES= README bigprime.cal deg.cal ellip.cal lucas.cal lucas_chk.cal \
|
CALC_FILES= README bigprime.cal deg.cal ellip.cal lucas.cal lucas_chk.cal \
|
||||||
lucas_tbl.cal mersenne.cal mod.cal pell.cal pi.cal pix.cal \
|
lucas_tbl.cal mersenne.cal mod.cal pell.cal pi.cal pix.cal \
|
||||||
pollard.cal poly.cal psqrt.cal quat.cal regress.cal solve.cal \
|
pollard.cal poly.cal psqrt.cal quat.cal regress.cal solve.cal \
|
||||||
sumsq.cal surd.cal unitfrac.cal varargs.cal chrem.cal mfactor.cal \
|
sumsq.cal surd.cal unitfrac.cal varargs.cal chrem.cal mfactor.cal \
|
||||||
bindings altbind randmprime.cal test1700.cal randrun.cal \
|
bindings randmprime.cal test1700.cal randrun.cal \
|
||||||
randbitrun.cal bernoulli.cal test2300.cal test2600.cal \
|
randbitrun.cal bernoulli.cal test2300.cal test2600.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 xx_print.cal natnumset.cal qtime.cal test8400.cal \
|
||||||
|
test8500.cal
|
||||||
|
|
||||||
# These files are found (but not built) in the distribution
|
# These files are found (but not built) in the distribution
|
||||||
#
|
#
|
||||||
DISTLIST= ${CALC_FILES} ${MAKE_FILE}
|
DISTLIST= ${CALC_FILES} ${MAKE_FILE}
|
||||||
|
|
||||||
|
# These files are used to make (but not built) a calc .a link library
|
||||||
|
#
|
||||||
|
CALCLIBLIST=
|
||||||
|
|
||||||
all: ${CALC_FILES} ${MAKE_FILE} .all
|
all: ${CALC_FILES} ${MAKE_FILE} .all
|
||||||
|
|
||||||
# used by the upper level Makefile to determine of we have done all
|
# used by the upper level Makefile to determine of we have done all
|
||||||
@@ -64,7 +94,7 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
# We will form the names of source files as if they were in a
|
# We will form the names of source files as if they were in a
|
||||||
# sub-directory called calc/lib.
|
# sub-directory called calc/cal.
|
||||||
#
|
#
|
||||||
# NOTE: Due to bogus shells found on one common system we must have
|
# NOTE: Due to bogus shells found on one common system we must have
|
||||||
# an non-emoty else clause for every if condition. *sigh*
|
# an non-emoty else clause for every if condition. *sigh*
|
||||||
@@ -73,11 +103,18 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
|
|||||||
|
|
||||||
distlist: ${DISTLIST}
|
distlist: ${DISTLIST}
|
||||||
${Q}for i in ${DISTLIST}; do \
|
${Q}for i in ${DISTLIST}; do \
|
||||||
echo lib/$$i; \
|
echo cal/$$i; \
|
||||||
done
|
done
|
||||||
|
|
||||||
distdir:
|
distdir:
|
||||||
${Q}echo lib
|
${Q}echo cal
|
||||||
|
|
||||||
|
calcliblist:
|
||||||
|
${Q}for i in ${CALCLIBLIST} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
|
echo cal/$$i; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|
||||||
@@ -102,8 +139,8 @@ install: all
|
|||||||
rm -f ${LIBDIR}/$$i; \
|
rm -f ${LIBDIR}/$$i; \
|
||||||
echo cp $$i ${LIBDIR}; \
|
echo cp $$i ${LIBDIR}; \
|
||||||
cp $$i ${LIBDIR}; \
|
cp $$i ${LIBDIR}; \
|
||||||
echo chmod 0444 ${LIBDIR}/$$i; \
|
echo ${CHMOD} 0444 ${LIBDIR}/$$i; \
|
||||||
chmod 0444 ${LIBDIR}/$$i; \
|
${CHMOD} 0444 ${LIBDIR}/$$i; \
|
||||||
done
|
done
|
||||||
${Q}echo remove files that are obsolete
|
${Q}echo remove files that are obsolete
|
||||||
-rm -f nextprime.cal nextprim.cal
|
-rm -f nextprime.cal nextprim.cal
|
@@ -1,12 +1,15 @@
|
|||||||
To load a library, try:
|
Calc standard resource files
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
To load a reosurce file, try:
|
||||||
|
|
||||||
read filename
|
read filename
|
||||||
|
|
||||||
You to not need to add the .cal extension to the filename. Calc
|
You do not need to add the .cal extension to the filename. Calc
|
||||||
will search along the $CALCPATH (see ``help environment'').
|
will search along the $CALCPATH (see ``help environment'').
|
||||||
|
|
||||||
Normally a library will simply define some functions. By default,
|
Normally a resource file will simply define some functions. By default,
|
||||||
most libraries will print out a short message when thei are read.
|
most resource files will print out a short message when they are read.
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
> read lucas
|
> read lucas
|
||||||
@@ -15,8 +18,8 @@ For example:
|
|||||||
gen_v1(h,n) defined
|
gen_v1(h,n) defined
|
||||||
ldebug(funct,str) defined
|
ldebug(funct,str) defined
|
||||||
|
|
||||||
will cause calc to load and execute the 'lucas.cal' library.
|
will cause calc to load and execute the 'lucas.cal' resource file.
|
||||||
Executing the library will cause several functions to be defined.
|
Executing the resource file will cause several functions to be defined.
|
||||||
Executing the lucas function:
|
Executing the lucas function:
|
||||||
|
|
||||||
> lucas(149,60)
|
> lucas(149,60)
|
||||||
@@ -28,36 +31,40 @@ shows that 149*2^60-1 is prime whereas 146*2^61-1 is not.
|
|||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
Calc library files are provided because they serve as examples of how use
|
Calc resource file files are provided because they serve as examples of
|
||||||
the calc language, and/or because the authors thought them to be useful!
|
how use the calc language, and/or because the authors thought them to
|
||||||
|
be useful!
|
||||||
|
|
||||||
If you write something that you think is useful, please send it to:
|
If you write something that you think is useful, please send it to:
|
||||||
|
|
||||||
calc-tester@postofc.corp.sgi.com
|
calc-contrib at asthe dot com
|
||||||
|
|
||||||
By convention, a lib file only defines and/or initializes functions,
|
[[ NOTE: Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
[[ NOTE: The EMail address uses 'asthe' and the web site URL uses 'isthe' ]]
|
||||||
|
|
||||||
|
By convention, a resource file only defines and/or initializes functions,
|
||||||
objects and variables. (The regress.cal and testxxx.cal regression test
|
objects and variables. (The regress.cal and testxxx.cal regression test
|
||||||
suite is an exception.) Also by convention, an additional usage message
|
suite is an exception.) Also by convention, an additional usage message
|
||||||
regarding important object and functions is printed.
|
regarding important object and functions is printed.
|
||||||
|
|
||||||
If a lib file needs to load another lib file, it should use the -once
|
If a resource file needs to load another resource file, it should use
|
||||||
version of read:
|
the -once version of read:
|
||||||
|
|
||||||
/* pull in needed library files */
|
/* pull in needed resource files */
|
||||||
read -once "surd"
|
read -once "surd"
|
||||||
read -once "lucas"
|
read -once "lucas"
|
||||||
|
|
||||||
This will cause the needed library files to be read once. If these
|
This will cause the needed resource files to be read once. If these
|
||||||
files have already been read, the read -once will act as a noop.
|
files have already been read, the read -once will act as a noop.
|
||||||
|
|
||||||
The "lib_debug" parameter is intended for controlling the possible
|
The "resource_debug" parameter is intended for controlling the possible
|
||||||
display of special information relating to functions, objects, and
|
display of special information relating to functions, objects, and
|
||||||
other structures created by instructions in calc scripts.
|
other structures created by instructions in calc resoure files.
|
||||||
Zero value of config("lib_debug") means that no such information
|
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("lib_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
|
||||||
@@ -67,9 +74,9 @@ 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.
|
||||||
|
|
||||||
The value for config("lib_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("lib_debug")
|
Thus, if calc is started without the -d flag, until config("resource_debug")
|
||||||
is changed, a message will be output when a function is defined
|
is changed, a message will be output when a function is defined
|
||||||
either interactively or during the reading of a file.
|
either interactively or during the reading of a file.
|
||||||
|
|
||||||
@@ -81,10 +88,10 @@ standard information, one might want to print:
|
|||||||
* functions with optional args where the param() interface is used
|
* functions with optional args where the param() interface is used
|
||||||
|
|
||||||
For these cases we suggest that you place at the bottom of your code
|
For these cases we suggest that you place at the bottom of your code
|
||||||
something that prints extra information if config("lib_debug") has
|
something that prints extra information if config("resource_debug") has
|
||||||
either of the bottom 2 bits set:
|
either of the bottom 2 bits set:
|
||||||
|
|
||||||
if (config("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "obj xyz defined";
|
print "obj xyz defined";
|
||||||
print "funcA([val1 [, val2]]) defined";
|
print "funcA([val1 [, val2]]) defined";
|
||||||
print "funcB(size, mass, ...) defined";
|
print "funcB(size, mass, ...) defined";
|
||||||
@@ -92,7 +99,7 @@ either of the bottom 2 bits set:
|
|||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
The following is a brief description of some of the calc library files
|
The following is a brief description of some of the calc resource files
|
||||||
that are shipped with calc. See above for example of how to read in
|
that are shipped with calc. See above for example of how to read in
|
||||||
and execute these files.
|
and execute these files.
|
||||||
|
|
||||||
@@ -273,10 +280,18 @@ pell.cal
|
|||||||
pi.cal
|
pi.cal
|
||||||
|
|
||||||
qpi(epsilon)
|
qpi(epsilon)
|
||||||
|
piforever()
|
||||||
|
|
||||||
Calculate pi within the specified epsilon using the quartic convergence
|
The qpi() calculate pi within the specified epsilon using the quartic
|
||||||
iteration.
|
convergence iteration.
|
||||||
|
|
||||||
|
The piforever() prints digits of pi, nicely formatted, for as long
|
||||||
|
as your free memory space and system up time allows.
|
||||||
|
|
||||||
|
The piforever() funcion (written by Klaus Alexander Seistrup
|
||||||
|
<klaus@seistrup.dk>) was inspired by an algorithm conceived by
|
||||||
|
Lambert Meertens. See also the ABC Programmer's Handbook, by Geurts,
|
||||||
|
Meertens & Pemberton, published by Prentice-Hall (UK) Ltd., 1990.
|
||||||
|
|
||||||
pix.cal
|
pix.cal
|
||||||
|
|
||||||
@@ -297,7 +312,7 @@ pollard.cal
|
|||||||
poly.cal
|
poly.cal
|
||||||
|
|
||||||
Calculate with polynomials of one variable. There are many functions.
|
Calculate with polynomials of one variable. There are many functions.
|
||||||
Read the documentation in the library file.
|
Read the documentation in the resource file.
|
||||||
|
|
||||||
|
|
||||||
prompt.cal
|
prompt.cal
|
||||||
@@ -350,7 +365,7 @@ randbitrun.cal
|
|||||||
randbitrun([run_cnt])
|
randbitrun([run_cnt])
|
||||||
|
|
||||||
Using randbit(1) to generate a sequence of random bits, determine if
|
Using randbit(1) to generate a sequence of random bits, determine if
|
||||||
the number and kength of identical bits runs match what is expected.
|
the number and length of identical bits runs match what is expected.
|
||||||
By default, run_cnt is to test the next 65536 random values.
|
By default, run_cnt is to test the next 65536 random values.
|
||||||
|
|
||||||
This tests the a55 generator.
|
This tests the a55 generator.
|
||||||
@@ -405,8 +420,8 @@ randrun.cal
|
|||||||
|
|
||||||
regress.cal
|
regress.cal
|
||||||
|
|
||||||
Test the correct execution of the calculator by reading this library file.
|
Test the correct execution of the calculator by reading this resource file.
|
||||||
Errors are reported with '****' mssages, or worse. :-)
|
Errors are reported with '****' messages, or worse. :-)
|
||||||
|
|
||||||
|
|
||||||
seedrandom.cal
|
seedrandom.cal
|
||||||
@@ -474,7 +489,7 @@ test1700.cal
|
|||||||
|
|
||||||
value
|
value
|
||||||
|
|
||||||
This script is used by regress.cal to test the read and use keywords.
|
This resoure files is used by regress.cal to test the read and use keywords.
|
||||||
|
|
||||||
|
|
||||||
test2600.cal
|
test2600.cal
|
||||||
@@ -499,7 +514,7 @@ test2600.cal
|
|||||||
checkresult(x, y, z, a)
|
checkresult(x, y, z, a)
|
||||||
test2600(verbose, tnum)
|
test2600(verbose, tnum)
|
||||||
|
|
||||||
This script is used by regress.cal to test some of builtin functions
|
This resoure files is used by regress.cal to test some of builtin functions
|
||||||
in terms of accuracy and roundoff.
|
in terms of accuracy and roundoff.
|
||||||
|
|
||||||
|
|
||||||
@@ -522,8 +537,8 @@ test2700.cal
|
|||||||
iscomsq(x)
|
iscomsq(x)
|
||||||
test2700(verbose, tnum)
|
test2700(verbose, tnum)
|
||||||
|
|
||||||
This script is used by regress.cal to test sqrt() for real and complex
|
This resoure files is used by regress.cal to test sqrt() for real and
|
||||||
values.
|
complex values.
|
||||||
|
|
||||||
|
|
||||||
test3100.cal
|
test3100.cal
|
||||||
@@ -537,7 +552,7 @@ test3100.cal
|
|||||||
res_inv(a)
|
res_inv(a)
|
||||||
res(x)
|
res(x)
|
||||||
|
|
||||||
This script is used by regress.cal to test determinants of a matrix
|
This resource file is used by regress.cal to test determinants of a matrix
|
||||||
|
|
||||||
|
|
||||||
test3300.cal
|
test3300.cal
|
||||||
@@ -548,8 +563,8 @@ test3300.cal
|
|||||||
testr(str, n, N, verbose)
|
testr(str, n, N, verbose)
|
||||||
test3300(verbose, tnum)
|
test3300(verbose, tnum)
|
||||||
|
|
||||||
This script is used by regress.cal to provide for more determinant tests.
|
This resource file is used by regress.cal to provide for more determinant
|
||||||
|
tests.
|
||||||
|
|
||||||
test3400.cal
|
test3400.cal
|
||||||
|
|
||||||
@@ -563,7 +578,7 @@ test3400.cal
|
|||||||
test6(str, n, eps, verbose)
|
test6(str, n, eps, verbose)
|
||||||
test3400(verbose, tnum)
|
test3400(verbose, tnum)
|
||||||
|
|
||||||
This script is used by regress.cal to test trig functions.
|
This resource file is used by regress.cal to test trig functions.
|
||||||
containing objects.
|
containing objects.
|
||||||
|
|
||||||
test3500.cal
|
test3500.cal
|
||||||
@@ -577,7 +592,7 @@ test3500.cal
|
|||||||
testh(str, n, N, verbose)
|
testh(str, n, N, verbose)
|
||||||
test3500(verbose, n, N)
|
test3500(verbose, n, N)
|
||||||
|
|
||||||
This script is used by regress.cal to test the functions frem,
|
This resource file is used by regress.cal to test the functions frem,
|
||||||
fcnt, gcdrem.
|
fcnt, gcdrem.
|
||||||
|
|
||||||
test4000.cal
|
test4000.cal
|
||||||
@@ -609,7 +624,7 @@ test4000.cal
|
|||||||
testprev1(x, y, count, skip, residue, modulus) defined
|
testprev1(x, y, count, skip, residue, modulus) defined
|
||||||
test4000(verbose, tnum) defined
|
test4000(verbose, tnum) defined
|
||||||
|
|
||||||
This script is used by regress.cal to test ptest, nextcand and
|
This resource file is used by regress.cal to test ptest, nextcand and
|
||||||
prevcand buildins.
|
prevcand buildins.
|
||||||
|
|
||||||
test4100.cal
|
test4100.cal
|
||||||
@@ -629,7 +644,7 @@ test4100.cal
|
|||||||
inittimes(str, N, n, verbose) defined
|
inittimes(str, N, n, verbose) defined
|
||||||
test4100(verbose, tnum) defined
|
test4100(verbose, tnum) defined
|
||||||
|
|
||||||
This script is used by regress.cal to test REDC operations.
|
This resource file is used by regress.cal to test REDC operations.
|
||||||
|
|
||||||
test4600.cal
|
test4600.cal
|
||||||
|
|
||||||
@@ -640,7 +655,7 @@ test4600.cal
|
|||||||
findlineold(f,s) defined
|
findlineold(f,s) defined
|
||||||
test4600(verbose, tnum) defined
|
test4600(verbose, tnum) defined
|
||||||
|
|
||||||
This script is used by regress.cal to test searching in files.
|
This resource file is used by regress.cal to test searching in files.
|
||||||
|
|
||||||
test5100.cal
|
test5100.cal
|
||||||
|
|
||||||
@@ -648,7 +663,7 @@ test5100.cal
|
|||||||
global b5100
|
global b5100
|
||||||
test5100(x) defined
|
test5100(x) defined
|
||||||
|
|
||||||
This script is used by regress.cal to test the new code generator
|
This resource file is used by regress.cal to test the new code generator
|
||||||
declaration scope and order.
|
declaration scope and order.
|
||||||
|
|
||||||
test5200.cal
|
test5200.cal
|
||||||
@@ -659,7 +674,8 @@ test5200.cal
|
|||||||
g5200(x) defined
|
g5200(x) defined
|
||||||
h5200(x) defined
|
h5200(x) defined
|
||||||
|
|
||||||
This script is used by regress.cal to test the fix of a global/static bug.
|
This resource file is used by regress.cal to test the fix of a
|
||||||
|
global/static bug.
|
||||||
|
|
||||||
unitfrac.cal
|
unitfrac.cal
|
||||||
|
|
||||||
@@ -689,8 +705,30 @@ xx_print.cal
|
|||||||
|
|
||||||
Demo for the xx_print object routines.
|
Demo for the xx_print object routines.
|
||||||
|
|
||||||
=-=
|
## Copyright (C) 1999 David I. Bell and Landon Curt Noll
|
||||||
|
##
|
||||||
# Copyright (c) 1999 David I. Bell and Landon Curt Noll
|
## Primary author: Landon Curt Noll
|
||||||
# Permission is granted to use, distribute, or modify this source,
|
##
|
||||||
# provided that this copyright notice remains intact.
|
## 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: README,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 1990/02/15 01:50:32
|
||||||
|
## File existed as early as: before 1990
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
50
cal/beer.cal
Normal file
50
cal/beer.cal
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* beer - 99 bottles of beer
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 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: beer.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/beer.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1996/11/13 13:21:05
|
||||||
|
* File existed as early as: 1996
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* See: http://www.ionet.net/~timtroyr/funhouse/beer.html#calc
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
for (i=99; i > 0;) {
|
||||||
|
/* current wall state */
|
||||||
|
some_bottles = (i != 1) ? "bottles" : "bottle";
|
||||||
|
print i, some_bottles, "of beer on the wall,",;
|
||||||
|
print i, some_bottles, "of beer!";
|
||||||
|
|
||||||
|
/* glug, glug */
|
||||||
|
--i;
|
||||||
|
print "Take one down and pass it around,",;
|
||||||
|
|
||||||
|
/* new wall state */
|
||||||
|
less = (i > 0) ? i : "no";
|
||||||
|
bottles = (i!=1) ? "bottles" : "bottle";
|
||||||
|
print less, bottles, "of beer on the wall!\n";
|
||||||
|
}
|
@@ -1,8 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 David I. Bell
|
* bernoulli - clculate the Nth Bernoulli number B(n)
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: bernoulli.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bernoulli.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1991/09/30 11:18:41
|
||||||
|
* File existed as early as: 1991
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* Calculate the Nth Bernoulli number B(n).
|
* Calculate the Nth Bernoulli number B(n).
|
||||||
* This uses the following symbolic formula to calculate B(n):
|
* This uses the following symbolic formula to calculate B(n):
|
||||||
*
|
*
|
||||||
@@ -21,10 +46,11 @@
|
|||||||
* Since all previous B(n)'s are needed to calculate a particular B(n), all
|
* Since all previous B(n)'s are needed to calculate a particular B(n), all
|
||||||
* values obtained are saved in an array for ease in repeated calculations.
|
* values obtained are saved in an array for ease in repeated calculations.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static Bnmax;
|
static Bnmax;
|
||||||
static mat Bn[1001];
|
static mat Bn[1001];
|
||||||
|
|
||||||
|
|
||||||
define B(n)
|
define B(n)
|
||||||
{
|
{
|
||||||
local nn, np1, i, sum, mulval, divval, combval;
|
local nn, np1, i, sum, mulval, divval, combval;
|
49
cal/bigprime.cal
Normal file
49
cal/bigprime.cal
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* bigprime - a prime test, base a, on p*2^x+1 for even x>m
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: bigprime.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bigprime.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1991/05/22 21:56:32
|
||||||
|
* File existed as early as: 1991
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
define bigprime(a, m, p)
|
||||||
|
{
|
||||||
|
local n1, n;
|
||||||
|
|
||||||
|
n1 = 2^m * p;
|
||||||
|
for (;;) {
|
||||||
|
m++;
|
||||||
|
n1 += n1;
|
||||||
|
n = n1 + 1;
|
||||||
|
if (isodd(m))
|
||||||
|
continue;
|
||||||
|
print m;
|
||||||
|
if (pmod(a, n1 / 2, n) != n1)
|
||||||
|
continue;
|
||||||
|
if (pmod(a, n1 / p, n) == 1)
|
||||||
|
continue;
|
||||||
|
print " " : n;
|
||||||
|
}
|
||||||
|
}
|
75
cal/bindings
Normal file
75
cal/bindings
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
# bindings - default key bindings for calc line editing functions
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 David I. Bell
|
||||||
|
#
|
||||||
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
# 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: bindings,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/bindings,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1993/05/02 20:09:19
|
||||||
|
# File existed as early as: 1993
|
||||||
|
#
|
||||||
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
|
||||||
|
# NOTE: This facility is ignored if calc was compiled with GNU-readline.
|
||||||
|
# In that case, the standard readline mechanisms (see readline(3))
|
||||||
|
# are used in place of those found below.
|
||||||
|
|
||||||
|
|
||||||
|
map base-map
|
||||||
|
default insert-char
|
||||||
|
^@ set-mark
|
||||||
|
^A start-of-line
|
||||||
|
^B backward-char
|
||||||
|
^D delete-char
|
||||||
|
^E end-of-line
|
||||||
|
^F forward-char
|
||||||
|
^H backward-kill-char
|
||||||
|
^J new-line
|
||||||
|
^K kill-line
|
||||||
|
^L refresh-line
|
||||||
|
^M new-line
|
||||||
|
^N forward-history
|
||||||
|
^O save-line
|
||||||
|
^P backward-history
|
||||||
|
^R reverse-search
|
||||||
|
^T swap-chars
|
||||||
|
^U flush-input
|
||||||
|
^V quote-char
|
||||||
|
^W kill-region
|
||||||
|
^Y yank
|
||||||
|
^? backward-kill-char
|
||||||
|
^[ ignore-char esc-map
|
||||||
|
|
||||||
|
map esc-map
|
||||||
|
default ignore-char base-map
|
||||||
|
G start-of-line
|
||||||
|
H backward-history
|
||||||
|
P forward-history
|
||||||
|
K backward-char
|
||||||
|
M forward-char
|
||||||
|
O end-of-line
|
||||||
|
S delete-char
|
||||||
|
g goto-line
|
||||||
|
s backward-word
|
||||||
|
t forward-word
|
||||||
|
d forward-kill-word
|
||||||
|
u uppercase-word
|
||||||
|
l lowercase-word
|
||||||
|
h list-history
|
||||||
|
^[ flush-input
|
||||||
|
[ arrow-key
|
@@ -1,6 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
* chrem - Chinese remainder theorem/problem solver
|
* chrem - chinese remainder theorem/problem solver
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: chrem.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/chrem.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1992/09/26 01:00:47
|
||||||
|
* File existed as early as: 1992
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* When possible, chrem finds solutions for x of a set of congruences
|
* When possible, chrem finds solutions for x of a set of congruences
|
||||||
* of the form:
|
* of the form:
|
||||||
*
|
*
|
||||||
@@ -84,11 +113,9 @@
|
|||||||
* chrem(list(0,1,1,1,1,1),list(7,2,3,4,5,6)) ---> (301,420)
|
* chrem(list(0,1,1,1,1,1),list(7,2,3,4,5,6)) ---> (301,420)
|
||||||
*
|
*
|
||||||
* i.e., any value that is 301 mod 420.
|
* i.e., any value that is 301 mod 420.
|
||||||
*
|
|
||||||
* Written by: Ernest W Bowen <ernie@neumann.une.edu.au>
|
|
||||||
* Interface by: Landon Curt Noll http://reality.sgi.com/chongo
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static defaultmlist = list(2,3,5,7,11,13,17,19); /* The first eight primes */
|
static defaultmlist = list(2,3,5,7,11,13,17,19); /* The first eight primes */
|
||||||
|
|
||||||
define chrem()
|
define chrem()
|
||||||
@@ -174,7 +201,7 @@ define chrem()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "chrem(r1,m1 [,r2,m2 ...]) defined";
|
print "chrem(r1,m1 [,r2,m2 ...]) defined";
|
||||||
print "chrem(rlist [,mlist]) defined";
|
print "chrem(rlist [,mlist]) defined";
|
||||||
}
|
}
|
@@ -1,11 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 David I. Bell
|
* deg - calculate in degrees, minutes, and seconds
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Calculate in degrees, minutes, and seconds.
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: deg.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/deg.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:33
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
obj dms {deg, min, sec};
|
obj dms {deg, min, sec};
|
||||||
|
|
||||||
define dms(deg, min, sec)
|
define dms(deg, min, sec)
|
||||||
@@ -111,6 +133,6 @@ define fixdms(a)
|
|||||||
a.deg %= 360;
|
a.deg %= 360;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "obj dms {deg, min, sec} defined";
|
print "obj dms {deg, min, sec} defined";
|
||||||
}
|
}
|
@@ -1,8 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 David I. Bell
|
* ellip - attempt to factor numbers using elliptic functions
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: ellip.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:33
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* Attempt to factor numbers using elliptic functions.
|
* Attempt to factor numbers using elliptic functions.
|
||||||
* y^2 = x^3 + a*x + b (mod N).
|
* y^2 = x^3 + a*x + b (mod N).
|
||||||
*
|
*
|
||||||
@@ -59,6 +84,7 @@
|
|||||||
* variable N.
|
* variable N.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
obj point {x, y};
|
obj point {x, y};
|
||||||
global N; /* number to factor */
|
global N; /* number to factor */
|
||||||
global a; /* first coefficient */
|
global a; /* first coefficient */
|
36
cal/hello.cal
Normal file
36
cal/hello.cal
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* hello - print Hello World! forever
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 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: hello.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/hello.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1996/11/13 13:25:43
|
||||||
|
* File existed as early as: 1996
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* See: http://www.latech.edu/~acm/helloworld/calc.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
while(1) print "Hello World!";
|
@@ -1,32 +1,34 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 1995 Landon Curt Noll
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
|
||||||
* supporting documentation
|
|
||||||
* source copies
|
|
||||||
* source works derived from this source
|
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
|
||||||
* Landon Curt Noll
|
|
||||||
* http://reality.sgi.com/chongo
|
|
||||||
*
|
|
||||||
* chongo <was here> /\../\
|
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
* lucas - perform a Lucas primality test on h*2^n-1
|
* lucas - perform a Lucas primality test on h*2^n-1
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 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: lucas.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/05/03 16:49:51
|
||||||
|
* File existed as early as: 1990
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* HISTORICAL NOTE:
|
* HISTORICAL NOTE:
|
||||||
*
|
*
|
||||||
* On 6 August 1989 at 00:53 PDT, the 'Amdahl 6', a team consisting of
|
* On 6 August 1989 at 00:53 PDT, the 'Amdahl 6', a team consisting of
|
||||||
@@ -124,6 +126,7 @@
|
|||||||
* point is beyond the scope of this program.
|
* point is beyond the scope of this program.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global pprod256; /* product of "primes up to 256" / "primes up to 46" */
|
global pprod256; /* product of "primes up to 256" / "primes up to 46" */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1027,7 +1030,7 @@ gen_v1(h, n)
|
|||||||
define
|
define
|
||||||
ldebug(funct, str)
|
ldebug(funct, str)
|
||||||
{
|
{
|
||||||
if (config("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "DEBUG:", funct:":", str;
|
print "DEBUG:", funct:":", str;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
@@ -1,29 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 Landon Curt Noll
|
* lucas_chk - test all primes of the form h*2^n-1, 1<=h<200 and n <= high_n
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Copyright (C) 1999 Landon Curt Noll
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
*
|
||||||
* supporting documentation
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* source copies
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
* source works derived from this source
|
* as published by the Free Software Foundation.
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
*
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
* Public License for more details.
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
*
|
||||||
* Landon Curt Noll
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
* http://reality.sgi.com/chongo
|
* 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.
|
||||||
*
|
*
|
||||||
* chongo <was here> /\../\
|
* @(#) $Revision: 29.2 $
|
||||||
|
* @(#) $Id: lucas_chk.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_chk.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1991/01/11 05:41:43
|
||||||
|
* File existed as early as: 1991
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* primes of the form h*2^n-1 for 1<=h<200 and 1<=n<1000
|
* primes of the form h*2^n-1 for 1<=h<200 and 1<=n<1000
|
||||||
*
|
*
|
||||||
@@ -45,6 +49,7 @@
|
|||||||
* 199*2^221-1 is NOT prime
|
* 199*2^221-1 is NOT prime
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static prime_cnt = 1145; /* number of primes in the list */
|
static prime_cnt = 1145; /* number of primes in the list */
|
||||||
|
|
||||||
/* h = prime parameters */
|
/* h = prime parameters */
|
||||||
@@ -331,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("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
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;
|
165
cal/lucas_tbl.cal
Normal file
165
cal/lucas_tbl.cal
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
/*
|
||||||
|
* lucas_tbl - lucasian criteria for primality tables
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 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: lucas_tbl.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/lucas_tbl.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1991/01/26 02:43:43
|
||||||
|
* File existed as early as: 1991
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Lucasian criteria for primality
|
||||||
|
*
|
||||||
|
* The following table is taken from:
|
||||||
|
*
|
||||||
|
* "Lucasian Criteria for the Primality of N=h*2^n-1", by Hans Riesel,
|
||||||
|
* Mathematics of Computation, Vol 23 #108, p 872.
|
||||||
|
*
|
||||||
|
* The index of the *_val[] arrays correspond to the v(1) values found
|
||||||
|
* in the table. That is, for v(1) == x:
|
||||||
|
*
|
||||||
|
* D == d_val[x]
|
||||||
|
* a == a_val[x]
|
||||||
|
* b == b_val[x]
|
||||||
|
* r == r_val[x] (r == abs(a^2 - b^2*D))
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Note that when *_val[i] is not a number, the related v(1) value
|
||||||
|
* is not found in Table 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
trymax = 100;
|
||||||
|
mat d_val[trymax+1];
|
||||||
|
mat a_val[trymax+1];
|
||||||
|
mat b_val[trymax+1];
|
||||||
|
mat r_val[trymax+1];
|
||||||
|
/* v1= 0 INVALID */
|
||||||
|
/* v1= 1 INVALID */
|
||||||
|
/* v1= 2 INVALID */
|
||||||
|
d_val[ 3]= 5; a_val[ 3]= 1; b_val[ 3]=1; r_val[ 3]=4;
|
||||||
|
d_val[ 4]= 3; a_val[ 4]= 1; b_val[ 4]=1; r_val[ 4]=2;
|
||||||
|
d_val[ 5]= 21; a_val[ 5]= 3; b_val[ 5]=1; r_val[ 5]=12;
|
||||||
|
d_val[ 6]= 2; a_val[ 6]= 1; b_val[ 6]=1; r_val[ 6]=1;
|
||||||
|
/* v1= 7 INVALID */
|
||||||
|
d_val[ 8]= 15; a_val[ 8]= 3; b_val[ 8]=1; r_val[ 8]=6;
|
||||||
|
d_val[ 9]= 77; a_val[ 9]= 7; b_val[ 9]=1; r_val[ 9]=28;
|
||||||
|
d_val[10]= 6; a_val[10]= 2; b_val[10]=1; r_val[10]=2;
|
||||||
|
d_val[11]= 13; a_val[11]= 3; b_val[11]=1; r_val[11]=4;
|
||||||
|
d_val[12]= 35; a_val[12]= 5; b_val[12]=1; r_val[12]=10;
|
||||||
|
d_val[13]= 165; a_val[13]=11; b_val[13]=1; r_val[13]=44;
|
||||||
|
/* v1=14 INVALID */
|
||||||
|
d_val[15]= 221; a_val[15]=13; b_val[15]=1; r_val[15]=52;
|
||||||
|
d_val[16]= 7; a_val[16]= 3; b_val[16]=1; r_val[16]=2;
|
||||||
|
d_val[17]= 285; a_val[17]=15; b_val[17]=1; r_val[17]=60;
|
||||||
|
/* v1=18 INVALID */
|
||||||
|
d_val[19]= 357; a_val[19]=17; b_val[19]=1; r_val[19]=68;
|
||||||
|
d_val[20]= 11; a_val[20]= 3; b_val[20]=1; r_val[20]=2;
|
||||||
|
d_val[21]= 437; a_val[21]=19; b_val[21]=1; r_val[21]=76;
|
||||||
|
d_val[22]= 30; a_val[22]= 5; b_val[22]=1; r_val[22]=5;
|
||||||
|
/* v1=23 INVALID */
|
||||||
|
d_val[24]= 143; a_val[24]=11; b_val[24]=1; r_val[24]=22;
|
||||||
|
d_val[25]= 69; a_val[25]= 9; b_val[25]=1; r_val[25]=12;
|
||||||
|
d_val[26]= 42; a_val[26]= 6; b_val[26]=1; r_val[26]=6;
|
||||||
|
d_val[27]= 29; a_val[27]= 5; b_val[27]=1; r_val[27]=4;
|
||||||
|
d_val[28]= 195; a_val[28]=13; b_val[28]=1; r_val[28]=26;
|
||||||
|
d_val[29]= 93; a_val[29]= 9; b_val[29]=1; r_val[29]=12;
|
||||||
|
d_val[30]= 14; a_val[30]= 4; b_val[30]=1; r_val[30]=2;
|
||||||
|
d_val[31]= 957; a_val[31]=29; b_val[31]=1; r_val[31]=116;
|
||||||
|
d_val[32]= 255; a_val[32]=15; b_val[32]=1; r_val[32]=30;
|
||||||
|
d_val[33]=1085; a_val[33]=31; b_val[33]=1; r_val[33]=124;
|
||||||
|
/* v1=34 INVALID */
|
||||||
|
d_val[35]=1221; a_val[35]=33; b_val[35]=1; r_val[35]=132;
|
||||||
|
d_val[36]= 323; a_val[36]=17; b_val[36]=1; r_val[36]=34;
|
||||||
|
d_val[37]=1365; a_val[37]=35; b_val[37]=1; r_val[37]=140;
|
||||||
|
d_val[38]= 10; a_val[38]= 3; b_val[38]=1; r_val[38]=1;
|
||||||
|
d_val[39]=1517; a_val[39]=37; b_val[39]=1; r_val[39]=148;
|
||||||
|
d_val[40]= 399; a_val[40]=19; b_val[40]=1; r_val[40]=38;
|
||||||
|
d_val[41]=1677; a_val[41]=39; b_val[41]=1; r_val[41]=156;
|
||||||
|
d_val[42]= 110; a_val[42]=10; b_val[42]=1; r_val[42]=10;
|
||||||
|
d_val[43]= 205; a_val[43]=15; b_val[43]=1; r_val[43]=20;
|
||||||
|
d_val[44]= 483; a_val[44]=21; b_val[44]=1; r_val[44]=42;
|
||||||
|
d_val[45]=2021; a_val[45]=43; b_val[45]=1; r_val[45]=172;
|
||||||
|
d_val[46]= 33; a_val[46]= 6; b_val[46]=1; r_val[46]=3;
|
||||||
|
/* v1=47 INVALID */
|
||||||
|
d_val[48]= 23; a_val[48]= 5; b_val[48]=1; r_val[48]=2;
|
||||||
|
d_val[49]=2397; a_val[49]=47; b_val[49]=1; r_val[49]=188;
|
||||||
|
d_val[50]= 39; a_val[50]= 6; b_val[50]=1; r_val[50]=3;
|
||||||
|
d_val[51]= 53; a_val[51]= 7; b_val[51]=1; r_val[51]=4;
|
||||||
|
/* v1=52 INVALID */
|
||||||
|
d_val[53]=2805; a_val[53]=51; b_val[53]=1; r_val[53]=204;
|
||||||
|
d_val[54]= 182; a_val[54]=13; b_val[54]=1; r_val[54]=13;
|
||||||
|
d_val[55]=3021; a_val[55]=53; b_val[55]=1; r_val[55]=212;
|
||||||
|
d_val[56]= 87; a_val[56]= 9; b_val[56]=1; r_val[56]=6;
|
||||||
|
d_val[57]=3245; a_val[57]=55; b_val[57]=1; r_val[57]=220;
|
||||||
|
d_val[58]= 210; a_val[58]=14; b_val[58]=1; r_val[58]=14;
|
||||||
|
d_val[59]=3477; a_val[59]=57; b_val[59]=1; r_val[59]=228;
|
||||||
|
d_val[60]= 899; a_val[60]=29; b_val[60]=1; r_val[60]=58;
|
||||||
|
d_val[61]= 413; a_val[61]=21; b_val[61]=1; r_val[61]=28;
|
||||||
|
/* v1=62 INVALID */
|
||||||
|
d_val[63]=3965; a_val[63]=61; b_val[63]=1; r_val[63]=244;
|
||||||
|
d_val[64]=1023; a_val[64]=31; b_val[64]=1; r_val[64]=62;
|
||||||
|
d_val[65]= 469; a_val[65]=21; b_val[65]=1; r_val[65]=28;
|
||||||
|
d_val[66]= 17; a_val[66]= 4; b_val[66]=1; r_val[66]=1;
|
||||||
|
d_val[67]=4485; a_val[67]=65; b_val[67]=1; r_val[67]=260;
|
||||||
|
d_val[68]=1155; a_val[68]=33; b_val[68]=1; r_val[68]=66;
|
||||||
|
d_val[69]=4757; a_val[69]=67; b_val[69]=1; r_val[69]=268;
|
||||||
|
d_val[70]= 34; a_val[70]= 6; b_val[70]=1; r_val[70]=2;
|
||||||
|
d_val[71]=5037; a_val[71]=69; b_val[71]=1; r_val[71]=276;
|
||||||
|
d_val[72]=1295; a_val[72]=35; b_val[72]=1; r_val[72]=70;
|
||||||
|
d_val[73]= 213; a_val[73]=15; b_val[73]=1; r_val[73]=12;
|
||||||
|
d_val[74]= 38; a_val[74]= 6; b_val[74]=1; r_val[74]=2;
|
||||||
|
d_val[75]=5621; a_val[75]=73; b_val[75]=1; r_val[75]=292;
|
||||||
|
d_val[76]=1443; a_val[76]=37; b_val[76]=1; r_val[76]=74;
|
||||||
|
d_val[77]= 237; a_val[77]=15; b_val[77]=1; r_val[77]=12;
|
||||||
|
d_val[78]= 95; a_val[78]=10; b_val[78]=1; r_val[78]=5;
|
||||||
|
/* v1=79 INVALID */
|
||||||
|
d_val[80]=1599; a_val[80]=39; b_val[80]=1; r_val[80]=78;
|
||||||
|
d_val[81]=6557; a_val[81]=79; b_val[81]=1; r_val[81]=316;
|
||||||
|
d_val[82]= 105; a_val[82]=10; b_val[82]=1; r_val[82]=5;
|
||||||
|
d_val[83]= 85; a_val[83]= 9; b_val[83]=1; r_val[83]=4;
|
||||||
|
d_val[84]=1763; a_val[84]=41; b_val[84]=1; r_val[84]=82;
|
||||||
|
d_val[85]=7221; a_val[85]=83; b_val[85]=1; r_val[85]=332;
|
||||||
|
d_val[86]= 462; a_val[86]=21; b_val[86]=1; r_val[86]=21;
|
||||||
|
d_val[87]=7565; a_val[87]=85; b_val[87]=1; r_val[87]=340;
|
||||||
|
d_val[88]= 215; a_val[88]=15; b_val[88]=1; r_val[88]=10;
|
||||||
|
d_val[89]=7917; a_val[89]=87; b_val[89]=1; r_val[89]=348;
|
||||||
|
d_val[90]= 506; a_val[90]=22; b_val[90]=1; r_val[90]=22;
|
||||||
|
d_val[91]=8277; a_val[91]=89; b_val[91]=1; r_val[91]=356;
|
||||||
|
d_val[92]= 235; a_val[92]=15; b_val[92]=1; r_val[92]=10;
|
||||||
|
d_val[93]=8645; a_val[93]=91; b_val[93]=1; r_val[93]=364;
|
||||||
|
d_val[94]= 138; a_val[94]=12; b_val[94]=1; r_val[94]=6;
|
||||||
|
d_val[95]=9021; a_val[95]=93; b_val[95]=1; r_val[95]=372;
|
||||||
|
d_val[96]= 47; a_val[96]= 7; b_val[96]=1; r_val[96]=2;
|
||||||
|
d_val[97]=1045; a_val[97]=33; b_val[97]=1; r_val[97]=44;
|
||||||
|
/* v1=98 INVALID */
|
||||||
|
d_val[99]=9797; a_val[99]=97; b_val[99]=1; r_val[99]=388;
|
||||||
|
d_val[100]= 51; a_val[100]= 7; b_val[100]=1; r_val[100]=2;
|
||||||
|
|
||||||
|
if (config("resource_debug") & 3) {
|
||||||
|
print "d_val[100] defined";
|
||||||
|
print "a_val[100] defined";
|
||||||
|
print "b_val[100] defined";
|
||||||
|
print "r_val[100] defined";
|
||||||
|
}
|
61
cal/mersenne.cal
Normal file
61
cal/mersenne.cal
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* mersenne - perform a primality test of 2^p-1, for prime p>1
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell and Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Primary author: David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: mersenne.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mersenne.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1991/05/22 21:56:36
|
||||||
|
* File existed as early as: 1991
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: See lucas.cal for a more general routine.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
define mersenne(p)
|
||||||
|
{
|
||||||
|
local u, i, p_mask;
|
||||||
|
|
||||||
|
/* firewall */
|
||||||
|
if (! isint(p))
|
||||||
|
quit "p is not an integer";
|
||||||
|
|
||||||
|
/* two is a special case */
|
||||||
|
if (p == 2)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* if p is not prime, then 2^p-1 is not prime */
|
||||||
|
if (! ptest(p,1))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* lltest: u(i+1) = u(i)^2 - 2 mod 2^p-1 */
|
||||||
|
u = 4;
|
||||||
|
for (i = 2; i < p; ++i) {
|
||||||
|
u = hnrmod(u^2 - 2, 1, p, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 2^p-1 is prime iff u(p) = 0 mod 2^p-1 */
|
||||||
|
return (u == 0);
|
||||||
|
}
|
@@ -1,31 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 Landon Curt Noll
|
* mfactor - return the lowest factor of 2^n-1, for n > 0
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Copyright (C) 1999 Landon Curt Noll
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
*
|
||||||
* supporting documentation
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* source copies
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
* source works derived from this source
|
* as published by the Free Software Foundation.
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
*
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
* Public License for more details.
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
*
|
||||||
* Landon Curt Noll
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
* http://reality.sgi.com/chongo
|
* 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.
|
||||||
*
|
*
|
||||||
* chongo <was here> /\../\
|
* @(#) $Revision: 29.2 $
|
||||||
|
* @(#) $Id: mfactor.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mfactor.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1996/07/06 06:09:40
|
||||||
|
* File existed as early as: 1996
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* hset method
|
* hset method
|
||||||
*
|
*
|
||||||
@@ -312,6 +314,6 @@ define mfactor(n, start_k, rept_loop, p_elim)
|
|||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "mfactor(n [, start_k=1 [, rept_loop=10000 [, p_elim=17]]])"
|
print "mfactor(n [, start_k=1 [, rept_loop=10000 [, p_elim=17]]])"
|
||||||
}
|
}
|
@@ -1,12 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 David I. Bell
|
* mod - routines to handle numbers modulo a specified number
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Routines to handle numbers modulo a specified number.
|
* Copyright (C) 1999 David I. Bell
|
||||||
* a (mod N)
|
*
|
||||||
|
* 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: mod.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mod.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:34
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
obj mod {a}; /* definition of the object */
|
obj mod {a}; /* definition of the object */
|
||||||
|
|
||||||
global mod_value = 100; /* modulus value (value of N) */
|
global mod_value = 100; /* modulus value (value of N) */
|
||||||
@@ -159,9 +180,9 @@ define mod_inv(a)
|
|||||||
|
|
||||||
define mod_div(a, b)
|
define mod_div(a, b)
|
||||||
{
|
{
|
||||||
local c, x, y;
|
local c;
|
||||||
|
local obj mod x;
|
||||||
obj mod x, y;
|
local obj mod y;
|
||||||
if (isnum(a))
|
if (isnum(a))
|
||||||
a = lmod(a);
|
a = lmod(a);
|
||||||
if (isnum(b))
|
if (isnum(b))
|
||||||
@@ -189,7 +210,7 @@ define mod_pow(a, b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (config("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "obj mod {a} defined";
|
print "obj mod {a} defined";
|
||||||
print "mod_value defined";
|
print "mod_value defined";
|
||||||
print "set mod_value as needed";
|
print "set mod_value as needed";
|
@@ -1,10 +1,32 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 Ernest Bowen
|
* natnumset - functions for sets of natural numbers not exceeding a fixed bound
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Ernest Bowen <ernie@neumann.une.edu.au>
|
* Copyright (C) 1999 Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: natnumset.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/natnumset.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1997/09/07 23:53:51
|
||||||
|
* File existed as early as: 1997
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Functions for sets of natural numbers not exceeding a fixed bound B.
|
* Functions for sets of natural numbers not exceeding a fixed bound B.
|
||||||
*
|
*
|
94
cal/pell.cal
Normal file
94
cal/pell.cal
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* pell - solve Pell's equation
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: pell.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pell.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:34
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Solve Pell's equation; Returns the solution X to: X^2 - D * Y^2 = 1.
|
||||||
|
* Type the solution to pells equation for a particular D.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
define pell(D)
|
||||||
|
{
|
||||||
|
local X, Y;
|
||||||
|
|
||||||
|
X = pellx(D);
|
||||||
|
if (isnull(X)) {
|
||||||
|
print "D=":D:" is square";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Y = isqrt((X^2 - 1) / D);
|
||||||
|
print X : "^2 - " : D : "*" : Y : "^2 = " : X^2 - D*Y^2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function to solve Pell's equation
|
||||||
|
* Returns the solution X to:
|
||||||
|
* X^2 - D * Y^2 = 1
|
||||||
|
*/
|
||||||
|
define pellx(D)
|
||||||
|
{
|
||||||
|
local R, Rp, U, Up, V, Vp, A, T, Q1, Q2, n;
|
||||||
|
local mat ans[2,2];
|
||||||
|
local mat tmp[2,2];
|
||||||
|
|
||||||
|
R = isqrt(D);
|
||||||
|
Vp = D - R^2;
|
||||||
|
if (Vp == 0)
|
||||||
|
return;
|
||||||
|
Rp = R + R;
|
||||||
|
U = Rp;
|
||||||
|
Up = U;
|
||||||
|
V = 1;
|
||||||
|
A = 0;
|
||||||
|
n = 0;
|
||||||
|
ans[0,0] = 1;
|
||||||
|
ans[1,1] = 1;
|
||||||
|
tmp[0,1] = 1;
|
||||||
|
tmp[1,0] = 1;
|
||||||
|
do {
|
||||||
|
T = V;
|
||||||
|
V = A * (Up - U) + Vp;
|
||||||
|
Vp = T;
|
||||||
|
A = U // V;
|
||||||
|
Up = U;
|
||||||
|
U = Rp - U % V;
|
||||||
|
tmp[0,0] = A;
|
||||||
|
ans *= tmp;
|
||||||
|
n++;
|
||||||
|
} while (A != Rp);
|
||||||
|
Q2 = ans[[1]];
|
||||||
|
Q1 = isqrt(Q2^2 * D + 1);
|
||||||
|
if (isodd(n)) {
|
||||||
|
T = Q1^2 + D * Q2^2;
|
||||||
|
Q2 = Q1 * Q2 * 2;
|
||||||
|
Q1 = T;
|
||||||
|
}
|
||||||
|
return Q1;
|
||||||
|
}
|
147
cal/pi.cal
Normal file
147
cal/pi.cal
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
/*
|
||||||
|
* pi - various routines to calculate pi
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: pi.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pi.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1991/05/22 21:56:37
|
||||||
|
* File existed as early as: 1991
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate pi within the specified epsilon using the quartic convergence
|
||||||
|
* iteration.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
define qpi(epsilon)
|
||||||
|
{
|
||||||
|
local niter, yn, ym, tm, an, am, t, tn, sqrt2, epsilon2, count, digits;
|
||||||
|
local bits, bits2;
|
||||||
|
|
||||||
|
if (isnull(epsilon))
|
||||||
|
epsilon = epsilon();
|
||||||
|
digits = digits(1/epsilon);
|
||||||
|
if (digits <= 8) { niter = 1; epsilon = 1e-8; }
|
||||||
|
else if (digits <= 40) { niter = 2; epsilon = 1e-40; }
|
||||||
|
else if (digits <= 170) { niter = 3; epsilon = 1e-170; }
|
||||||
|
else if (digits <= 693) { niter = 4; epsilon = 1e-693; }
|
||||||
|
else {
|
||||||
|
niter = 4;
|
||||||
|
t = 693;
|
||||||
|
while (t < digits) {
|
||||||
|
++niter;
|
||||||
|
t *= 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
epsilon2 = epsilon/(digits/10 + 1);
|
||||||
|
digits = digits(1/epsilon2);
|
||||||
|
sqrt2 = sqrt(2, epsilon2);
|
||||||
|
bits = abs(ilog2(epsilon)) + 1;
|
||||||
|
bits2 = abs(ilog2(epsilon2)) + 1;
|
||||||
|
yn = sqrt2 - 1;
|
||||||
|
an = 6 - 4 * sqrt2;
|
||||||
|
tn = 2;
|
||||||
|
for (count = 0; count < niter; count++) {
|
||||||
|
ym = yn;
|
||||||
|
am = an;
|
||||||
|
tn *= 4;
|
||||||
|
t = sqrt(sqrt(1-ym^4, epsilon2), epsilon2);
|
||||||
|
yn = (1-t)/(1+t);
|
||||||
|
an = (1+yn)^4*am-tn*yn*(1+yn+yn^2);
|
||||||
|
yn = bround(yn, bits2);
|
||||||
|
an = bround(an, bits2);
|
||||||
|
}
|
||||||
|
return (bround(1/an, bits));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print digits of PI forever, neatly formatted, using calc.
|
||||||
|
*
|
||||||
|
* Written by Klaus Alexander Seistrup <klaus@seistrup.dk>
|
||||||
|
* on a dull Friday evening in November 1999.
|
||||||
|
*
|
||||||
|
* Inspired by an algorithm conceived by Lambert Meertens.
|
||||||
|
*
|
||||||
|
* See also the ABC Programmer's Handbook, by Geurts, Meertens & Pemberton,
|
||||||
|
* published by Prentice-Hall (UK) Ltd., 1990.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
define piforever()
|
||||||
|
{
|
||||||
|
local k = 2;
|
||||||
|
local a = 4;
|
||||||
|
local b = 1;
|
||||||
|
local a1 = 12;
|
||||||
|
local b1 = 4;
|
||||||
|
local a2, b2, p, q, d, d1;
|
||||||
|
local stdout = files(1);
|
||||||
|
local first = 1, row = -1, col = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
/*
|
||||||
|
* Next approximation
|
||||||
|
*/
|
||||||
|
p = k * k;
|
||||||
|
q = k + k++;
|
||||||
|
|
||||||
|
a2 = a;
|
||||||
|
b2 = b;
|
||||||
|
|
||||||
|
a = a1;
|
||||||
|
a1 = p * a2 + q * a1;
|
||||||
|
b = b1;
|
||||||
|
b1 = p * b2 + q * b1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print common digits
|
||||||
|
*/
|
||||||
|
d = a // b;
|
||||||
|
d1 = a1 // b1;
|
||||||
|
|
||||||
|
while (d == d1) {
|
||||||
|
if (first) {
|
||||||
|
printf("%d.", d);
|
||||||
|
first = 0;
|
||||||
|
} else {
|
||||||
|
if (!(col % 50)) {
|
||||||
|
printf("\n");
|
||||||
|
col = 0;
|
||||||
|
if (!(++row % 20)) {
|
||||||
|
printf("\n");
|
||||||
|
row = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%d", d);
|
||||||
|
if (!(++col % 10))
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
a = 10 * (a % b);
|
||||||
|
a1 = 10 * (a1 % b1);
|
||||||
|
d = a // b;
|
||||||
|
d1 = a1 // b1;
|
||||||
|
}
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
}
|
71
cal/pix.cal
Normal file
71
cal/pix.cal
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* pix - iterative method of finding the number of primes less than x
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 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: pix.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pix.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1996/07/09 03:14:14
|
||||||
|
* File existed as early as: 1996
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Here is an iterative method of finding the number of primes less than
|
||||||
|
* or equal to a given number. This method is from "Computer Recreations"
|
||||||
|
* June 1996 issue of Scientific American.
|
||||||
|
*
|
||||||
|
* NOTE: For reasonable values of x, the builtin function pix(x) is
|
||||||
|
* much faster. This code is provided because the method
|
||||||
|
* is interesting.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
define pi_of_x(x)
|
||||||
|
{
|
||||||
|
local An; /* A(n) */
|
||||||
|
local An1; /* A(n-1) */
|
||||||
|
local An2; /* A(n-2) */
|
||||||
|
local An3; /* A(n-3) */
|
||||||
|
local primes; /* number of primes found */
|
||||||
|
local n; /* loop counter */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* setup
|
||||||
|
*/
|
||||||
|
An1 = 2;
|
||||||
|
An2 = 0;
|
||||||
|
An3 = 3;
|
||||||
|
primes = 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* main A(n+1)=A(n-1)+A(n-2) sequence loop
|
||||||
|
*/
|
||||||
|
for (n = 3; n < x; ++n) {
|
||||||
|
An = An2 + An3;
|
||||||
|
An3 = An2;
|
||||||
|
An2 = An1;
|
||||||
|
An1 = An;
|
||||||
|
if (An % n == 0)
|
||||||
|
++primes;
|
||||||
|
}
|
||||||
|
return primes;
|
||||||
|
}
|
52
cal/pollard.cal
Normal file
52
cal/pollard.cal
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* pollard - factor using Pollard's p-1 method
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: pollard.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/pollard.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1991/05/22 21:56:37
|
||||||
|
* File existed as early as: 1991
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
define pfactor(N, B, ai, af)
|
||||||
|
{
|
||||||
|
local a, k, i, d;
|
||||||
|
|
||||||
|
if (isnull(B))
|
||||||
|
B = 1000;
|
||||||
|
if (isnull(ai))
|
||||||
|
ai = 2;
|
||||||
|
if (isnull(af))
|
||||||
|
af = ai + 20;
|
||||||
|
k = lcmfact(B);
|
||||||
|
d = lfactor(N, B);
|
||||||
|
if (d > 1)
|
||||||
|
return d;
|
||||||
|
for (a = ai; a <= af; a++) {
|
||||||
|
i = pmod(a, k, N);
|
||||||
|
d = gcd(i - 1, N);
|
||||||
|
if ((d > 1) && (d != N))
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
@@ -1,3 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* poly - calculate with polynomials of one variable
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: poly.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/poly.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:35
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A collection of functions designed for calculations involving
|
* A collection of functions designed for calculations involving
|
||||||
* polynomials in one variable (by Ernest W. Bowen).
|
* polynomials in one variable (by Ernest W. Bowen).
|
||||||
@@ -170,6 +199,7 @@
|
|||||||
* should return the zero m x m matrix.
|
* should return the zero m x m matrix.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
obj poly {p};
|
obj poly {p};
|
||||||
|
|
||||||
define pol() {
|
define pol() {
|
||||||
@@ -471,8 +501,9 @@ define plist(s) {
|
|||||||
define deg(a) = size(a.p) - 1;
|
define deg(a) = size(a.p) - 1;
|
||||||
|
|
||||||
define polydiv(a,b) {
|
define polydiv(a,b) {
|
||||||
local q, r, d, u, i, m, n, sa, sb, sq;
|
local d, u, i, m, n, sa, sb, sq;
|
||||||
obj poly q, r;
|
local obj poly q;
|
||||||
|
local obj poly r;
|
||||||
sa=findlist(a); sb = findlist(b); sq = list();
|
sa=findlist(a); sb = findlist(b); sq = list();
|
||||||
m=size(sa)-1; n=size(sb)-1;
|
m=size(sa)-1; n=size(sb)-1;
|
||||||
if (n<0) quit "Zero divisor";
|
if (n<0) quit "Zero divisor";
|
||||||
@@ -687,6 +718,6 @@ a=pol(1,4,4,2,3,1);
|
|||||||
b=pol(5,16,8,1);
|
b=pol(5,16,8,1);
|
||||||
c=pol(1+2i,3+4i,5+6i);
|
c=pol(1+2i,3+4i,5+6i);
|
||||||
|
|
||||||
if (config("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "obj poly {p} defined";
|
print "obj poly {p} defined";
|
||||||
}
|
}
|
@@ -1,10 +1,32 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 Ernest Bowen
|
* prompt - eemonstration of some uses of prompt() and eval()
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Ernest Bowen <ernie@neumann.une.edu.au>
|
* Copyright (C) 1999 Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: prompt.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/prompt.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/12/18 04:43:25
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Demonstration of some uses of prompt() and eval().
|
* Demonstration of some uses of prompt() and eval().
|
||||||
*
|
*
|
||||||
@@ -61,6 +83,7 @@
|
|||||||
* entering "end", "exit" or "quit".
|
* entering "end", "exit" or "quit".
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
define adder() {
|
define adder() {
|
||||||
global sum = 0;
|
global sum = 0;
|
||||||
local s, t;
|
local s, t;
|
74
cal/psqrt.cal
Normal file
74
cal/psqrt.cal
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* psqrt - calculate square roots modulo a prime
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: psqrt.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/psqrt.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:35
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns null if number is not prime or if there is no square root.
|
||||||
|
* The smaller square root is always returned.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
define psqrt(u, p)
|
||||||
|
{
|
||||||
|
local p1, q, n, y, r, v, w, t, k;
|
||||||
|
|
||||||
|
p1 = p - 1;
|
||||||
|
r = lowbit(p1);
|
||||||
|
q = p >> r;
|
||||||
|
t = 1 << (r - 1);
|
||||||
|
for (n = 2; ; n++) {
|
||||||
|
if (ptest(n, 1) == 0)
|
||||||
|
continue;
|
||||||
|
y = pmod(n, q, p);
|
||||||
|
k = pmod(y, t, p);
|
||||||
|
if (k == 1)
|
||||||
|
continue;
|
||||||
|
if (k != p1)
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
t = pmod(u, (q - 1) / 2, p);
|
||||||
|
v = (t * u) % p;
|
||||||
|
w = (t^2 * u) % p;
|
||||||
|
while (w != 1) {
|
||||||
|
k = 0;
|
||||||
|
t = w;
|
||||||
|
do {
|
||||||
|
k++;
|
||||||
|
t = t^2 % p;
|
||||||
|
} while (t != 1);
|
||||||
|
if (k == r)
|
||||||
|
return;
|
||||||
|
t = pmod(y, 1 << (r - k - 1), p);
|
||||||
|
y = t^2 % p;
|
||||||
|
v = (v * t) % p;
|
||||||
|
w = (w * y) % p;
|
||||||
|
r = k;
|
||||||
|
}
|
||||||
|
return min(v, p - v);
|
||||||
|
}
|
68
cal/qtime.cal
Normal file
68
cal/qtime.cal
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* qtime - Display time as English sentence
|
||||||
|
*
|
||||||
|
* usage:
|
||||||
|
* qtime(utc_hr_offset)
|
||||||
|
*
|
||||||
|
* 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:
|
||||||
|
* http://www.magnetic-ink.dk/download/qtime.html
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* qtime - Display time as English sentence
|
||||||
|
*/
|
||||||
|
define qtime(utc_hr_offset)
|
||||||
|
{
|
||||||
|
static mat hr[12] = {
|
||||||
|
"twelve", "one", "two", "three", "four", "five",
|
||||||
|
"six", "seven", "eight", "nine", "ten", "eleven"
|
||||||
|
};
|
||||||
|
static mat mn[7] = {
|
||||||
|
"", "five ", "ten ", "a quarter ", "twenty ", "twenty-five ", "half "
|
||||||
|
};
|
||||||
|
static mat ny[5] = {
|
||||||
|
"nearly ", "almost ", "", "just after ", "after "
|
||||||
|
};
|
||||||
|
static mat up[3] = {
|
||||||
|
"to ", "", "past "
|
||||||
|
};
|
||||||
|
local adj_mins = (((time() + utc_hr_offset*3600) % 86400) + 30)//60+27;
|
||||||
|
local hours = (adj_mins // 60) % 12;
|
||||||
|
local minutes = adj_mins % 60;
|
||||||
|
local almost = minutes % 5;
|
||||||
|
local divisions = (minutes // 5) - 5;
|
||||||
|
local to_past_idx = divisions > 0 ? 1 : 0;
|
||||||
|
|
||||||
|
if (divisions < 0) {
|
||||||
|
divisions = -divisions;
|
||||||
|
to_past_idx = -1;
|
||||||
|
}
|
||||||
|
++to_past_idx;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print the English sentence
|
||||||
|
*
|
||||||
|
* We avoid forward and back quotes just to show that the char()
|
||||||
|
* builtin function can be used in conjunction with a printf.
|
||||||
|
*/
|
||||||
|
printf("It%cs %s%s%s%s",
|
||||||
|
char(0x27), ny[almost], mn[divisions],
|
||||||
|
up[to_past_idx], hr[hours]);
|
||||||
|
if (divisions == 0)
|
||||||
|
printf(" o%cclock", char(0x27));
|
||||||
|
print ".";
|
||||||
|
}
|
@@ -1,8 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 David I. Bell
|
* quat - alculate using quaternions of the form: a + bi + cj + dk
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: quat.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/quat.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:35
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* Routines to handle quaternions of the form:
|
* Routines to handle quaternions of the form:
|
||||||
* a + bi + cj + dk
|
* a + bi + cj + dk
|
||||||
*
|
*
|
||||||
@@ -11,6 +36,7 @@
|
|||||||
* Where s is a scalar and v is a vector of size 3.
|
* Where s is a scalar and v is a vector of size 3.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
obj quat {s, v}; /* definition of the quaternion object */
|
obj quat {s, v}; /* definition of the quaternion object */
|
||||||
|
|
||||||
|
|
||||||
@@ -195,6 +221,6 @@ define quat_shift(a, b)
|
|||||||
return x.s;
|
return x.s;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "obj quat {s, v} defined";
|
print "obj quat {s, v} defined";
|
||||||
}
|
}
|
@@ -1,30 +1,38 @@
|
|||||||
/*
|
/*
|
||||||
* randbitrun - check rand bit run lengths of the a55 generator
|
* randbitrun - check rand bit run lengths of the a55 generator
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 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: randbitrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randbitrun.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/02/13 03:43:11
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* We will use randbit(1) to generate a stream if single bits.
|
* We will use randbit(1) to generate a stream if single bits.
|
||||||
* The odds that we will have n bits the same in a row is 1/2^n.
|
* The odds that we will have n bits the same in a row is 1/2^n.
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
* Copyright 1995 by Landon Curt Noll. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice, and the
|
|
||||||
* disclaimer below appear in all of the following:
|
|
||||||
*
|
|
||||||
* * supporting documentation
|
|
||||||
* * source copies
|
|
||||||
* * source works derived from this source
|
|
||||||
* * binaries derived from this source or from derived source
|
|
||||||
*
|
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
define randbitrun(run_cnt)
|
define randbitrun(run_cnt)
|
||||||
{
|
{
|
@@ -1,32 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
* randmprime - generate a random prime of the form h*2^n-1
|
* randmprime - generate a random prime of the form h*2^n-1
|
||||||
*
|
*
|
||||||
* Copyright (c) 1997 by Landon Curt Noll. All Rights Reserved.
|
* Copyright (C) 1999 Landon Curt Noll
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
* provided that the above copyright, this permission notice and text
|
* as published by the Free Software Foundation.
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
*
|
||||||
* supporting documentation
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* source copies
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
* source works derived from this source
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
* binaries derived from this source or from derived source
|
* Public License for more details.
|
||||||
*
|
*
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
*
|
||||||
* Landon Curt Noll
|
* @(#) $Revision: 29.2 $
|
||||||
* http://reality.sgi.com/chongo
|
* @(#) $Id: randmprime.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randmprime.cal,v $
|
||||||
*
|
*
|
||||||
* chongo <was here> /\../\
|
* Under source code control: 1994/03/14 23:11:21
|
||||||
|
* File existed as early as: 1994
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* obtain our required libs */
|
/* obtain our required libs */
|
||||||
read -once "lucas.cal"
|
read -once "lucas.cal"
|
||||||
|
|
@@ -1,30 +1,38 @@
|
|||||||
/*
|
/*
|
||||||
* randombitrun - check rand bit run lengths of random()
|
* randombitrun - check rand bit run lengths of random()
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 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: randombitrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randombitrun.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/02/13 03:43:11
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* We will use randombit(1) to generate a stream if single bits.
|
* We will use randombit(1) to generate a stream if single bits.
|
||||||
* The odds that we will have n bits the same in a row is 1/2^n.
|
* The odds that we will have n bits the same in a row is 1/2^n.
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
* Copyright 1997 by Landon Curt Noll. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice, and the
|
|
||||||
* disclaimer below appear in all of the following:
|
|
||||||
*
|
|
||||||
* * supporting documentation
|
|
||||||
* * source copies
|
|
||||||
* * source works derived from this source
|
|
||||||
* * binaries derived from this source or from derived source
|
|
||||||
*
|
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
define randombitrun(run_cnt)
|
define randombitrun(run_cnt)
|
||||||
{
|
{
|
@@ -1,6 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
* randomrun - perform a run test on random()
|
* randomrun - perform a run test on random()
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 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: randomrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randomrun.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1997/02/19 03:35:59
|
||||||
|
* File existed as early as: 1997
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* If X(j) < X(j+1) < ... X(j+k) >= X(j+k+1), then we have a run of 'k'.
|
* If X(j) < X(j+1) < ... X(j+k) >= X(j+k+1), then we have a run of 'k'.
|
||||||
* We ignore the run breaker, X(j+k+1), and start with X(j+k+2) when
|
* We ignore the run breaker, X(j+k+1), and start with X(j+k+2) when
|
||||||
* considering a new run in order to make our runs chi independent.
|
* considering a new run in order to make our runs chi independent.
|
||||||
@@ -13,27 +41,7 @@
|
|||||||
* We use the suggestion in problem #14 to allow an application of the
|
* We use the suggestion in problem #14 to allow an application of the
|
||||||
* chi-square test and to make estimating the run length probs easy.
|
* chi-square test and to make estimating the run length probs easy.
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
* Copyright 1997 by Landon Curt Noll. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice, and the
|
|
||||||
* disclaimer below appear in all of the following:
|
|
||||||
*
|
|
||||||
* * supporting documentation
|
|
||||||
* * source copies
|
|
||||||
* * source works derived from this source
|
|
||||||
* * binaries derived from this source or from derived source
|
|
||||||
*
|
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
define randomrun(run_cnt)
|
define randomrun(run_cnt)
|
||||||
{
|
{
|
@@ -1,6 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* randrun - perform a run test on rand()
|
* randrun - perform a run test on rand()
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: randrun.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randrun.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/02/12 20:00:06
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* If X(j) < X(j+1) < ... X(j+k) >= X(j+k+1), then we have a run of 'k'.
|
* If X(j) < X(j+1) < ... X(j+k) >= X(j+k+1), then we have a run of 'k'.
|
||||||
* We ignore the run breaker, X(j+k+1), and start with X(j+k+2) when
|
* We ignore the run breaker, X(j+k+1), and start with X(j+k+2) when
|
||||||
* considering a new run in order to make our runs chi independent.
|
* considering a new run in order to make our runs chi independent.
|
||||||
@@ -13,27 +40,7 @@
|
|||||||
* We use the suggestion in problem #14 to allow an application of the
|
* We use the suggestion in problem #14 to allow an application of the
|
||||||
* chi-square test and to make estimating the run length probs easy.
|
* chi-square test and to make estimating the run length probs easy.
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
* Copyright 1995 by Landon Curt Noll. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice, and the
|
|
||||||
* disclaimer below appear in all of the following:
|
|
||||||
*
|
|
||||||
* * supporting documentation
|
|
||||||
* * source copies
|
|
||||||
* * source works derived from this source
|
|
||||||
* * binaries derived from this source or from derived source
|
|
||||||
*
|
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
define randrun(run_cnt)
|
define randrun(run_cnt)
|
||||||
{
|
{
|
||||||
@@ -122,6 +129,6 @@ define randrun(run_cnt)
|
|||||||
printf("max length=%d\n", max_run);
|
printf("max length=%d\n", max_run);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "randrun([run_length]) defined";
|
print "randrun([run_length]) defined";
|
||||||
}
|
}
|
@@ -1,17 +1,43 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 David I. Bell
|
* regress - calc regression and correctness test suite
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Test the correct execution of the calculator by reading this library file.
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: regress.cal,v 29.3 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:36
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test the correct execution of the calculator by reading this resource file.
|
||||||
* Errors are reported with '****' messages, or worse. :-)
|
* Errors are reported with '****' messages, or worse. :-)
|
||||||
*
|
*
|
||||||
* NOTE: Unlike most calc lib files, this one performs its work when
|
* NOTE: Unlike most calc resource files, this one performs its work when
|
||||||
* it is read. Normally one would just define functions and
|
* it is read. Normally one would just define functions and
|
||||||
* values for later use. In the case of the regression test,
|
* values for later use. In the case of the regression test,
|
||||||
* we do not want to do this.
|
* we do not want to do this.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
print '000: Beginning regression tests';
|
print '000: Beginning regression tests';
|
||||||
print '001: Some of these tests may take a while ...';
|
print '001: Some of these tests may take a while ...';
|
||||||
print '002: Within each section, output should be numbered sequentially';
|
print '002: Within each section, output should be numbered sequentially';
|
||||||
@@ -27,7 +53,7 @@ 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", "oldstd"); /* set config to startup default */
|
||||||
config("lib_debug", 0),; /* disable lib 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 */
|
||||||
startcfg = config("all"); /* save state for later use */
|
startcfg = config("all"); /* save state for later use */
|
||||||
@@ -385,10 +411,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") == 1,
|
vrfy(config("tilde") == "true",
|
||||||
'518: config("tilde") == 1');
|
'518: config("tilde") == "true"');
|
||||||
vrfy(config("tab") == 1,
|
vrfy(config("tab") == "true",
|
||||||
'519: config("tab") == 1');
|
'519: config("tab") == "true"');
|
||||||
vrfy(config("quomod") == 0,
|
vrfy(config("quomod") == 0,
|
||||||
'520: config("quomod") == 0');
|
'520: config("quomod") == 0');
|
||||||
vrfy(config("quo") == 2,
|
vrfy(config("quo") == 2,
|
||||||
@@ -407,10 +433,10 @@ define test_config()
|
|||||||
'527: config("outround") == 2');
|
'527: config("outround") == 2');
|
||||||
vrfy(config("round") == 24,
|
vrfy(config("round") == 24,
|
||||||
'528: config("round") == 24');
|
'528: config("round") == 24');
|
||||||
vrfy(config("leadzero") == 0,
|
vrfy(config("leadzero") == "false",
|
||||||
'529: config("leadzero") == 0');
|
'529: config("leadzero") == "false"');
|
||||||
vrfy(config("fullzero") == 0,
|
vrfy(config("fullzero") == "false",
|
||||||
'530: config("fullzero") == 0');
|
'530: config("fullzero") == "false"');
|
||||||
vrfy(config("maxscan") == 20,
|
vrfy(config("maxscan") == 20,
|
||||||
'531: config("maxscan") == 20');
|
'531: config("maxscan") == 20');
|
||||||
vrfy(config("prompt") == "> ",
|
vrfy(config("prompt") == "> ",
|
||||||
@@ -426,10 +452,10 @@ define test_config()
|
|||||||
vrfy(config("quo", 0) == 2, '536: config("quo", 0) == 2');
|
vrfy(config("quo", 0) == 2, '536: config("quo", 0) == 2');
|
||||||
vrfy(config("outround", 24) == 2,
|
vrfy(config("outround", 24) == 2,
|
||||||
'537: config("outround", 24) == 2');
|
'537: config("outround", 24) == 2');
|
||||||
vrfy(config("leadzero", "y") == 0,
|
vrfy(config("leadzero","y") == "false",
|
||||||
'538: config("leadzero", "y") == 0');
|
'538: config("leadzero","y") == "false"');
|
||||||
vrfy(config("fullzero", 1) == 0,
|
vrfy(config("fullzero", 1) == "false",
|
||||||
'539: config("fullzero", 1) == 0');
|
'539: config("fullzero", 1) == "false"');
|
||||||
vrfy(config("prompt", "; ") == "> ",
|
vrfy(config("prompt", "; ") == "> ",
|
||||||
'540: config("prompt", "; ") == "> "');
|
'540: config("prompt", "; ") == "> "');
|
||||||
vrfy(config("more", ";; ") == ">> ",
|
vrfy(config("more", ";; ") == ">> ",
|
||||||
@@ -441,14 +467,14 @@ define test_config()
|
|||||||
'543: config("all",callcfg) == newcfg');
|
'543: config("all",callcfg) == newcfg');
|
||||||
vrfy(config("display",2) == 20,
|
vrfy(config("display",2) == 20,
|
||||||
'544: config("display",2) == 20');
|
'544: config("display",2) == 20');
|
||||||
vrfy(config("fullzero",1) == 0,
|
vrfy(config("fullzero",1) == "false",
|
||||||
'545: config("fullzero",1) == 0');
|
'545: config("fullzero",1) == "false"');
|
||||||
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"');
|
'546: 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');
|
'547: config("display",20) == 2');
|
||||||
vrfy(config("fullzero",0) == 1,
|
vrfy(config("fullzero",0) == "true",
|
||||||
'548: config("fullzero",0) == 1');
|
'548: config("fullzero",0) == "true"');
|
||||||
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"');
|
||||||
|
|
||||||
@@ -458,7 +484,15 @@ define test_config()
|
|||||||
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');
|
||||||
|
|
||||||
print '553: Ending test_config';
|
/* check read-only config values */
|
||||||
|
vrfy(strlen(config("program")) > 0,
|
||||||
|
'553: strlen(config("program")) > 0');
|
||||||
|
vrfy(strlen(config("basename")) > 0,
|
||||||
|
'554: strlen(config("basename")) > 0');
|
||||||
|
vrfy(strlen(config("version")) > 0,
|
||||||
|
'555: strlen(config("version")) > 0');
|
||||||
|
|
||||||
|
print '556: Ending test_config';
|
||||||
}
|
}
|
||||||
print '010: parsed test_config()';
|
print '010: parsed test_config()';
|
||||||
|
|
||||||
@@ -1582,12 +1616,12 @@ define test_mode()
|
|||||||
|
|
||||||
tmp = config("mode", "int");
|
tmp = config("mode", "int");
|
||||||
print '1604: tmp = config("mode", "int")';
|
print '1604: tmp = config("mode", "int")';
|
||||||
vrfy(tmp == "frac", '1605: tmp == "frac"');
|
vrfy(tmp == "fraction", '1605: tmp == "fraction"');
|
||||||
vrfy(base() == -10, '1606: base() == -10');
|
vrfy(base() == -10, '1606: base() == -10');
|
||||||
|
|
||||||
tmp = config("mode", "real");
|
tmp = config("mode", "real");
|
||||||
print '1607: tmp = config("mode", "real")';
|
print '1607: tmp = config("mode", "real")';
|
||||||
vrfy(tmp == "int", '1608: tmp == "int"');
|
vrfy(tmp == "integer", '1608: tmp == "integer"');
|
||||||
vrfy(base() == 10, '1609: base() == 10');
|
vrfy(base() == 10, '1609: base() == 10');
|
||||||
|
|
||||||
tmp = config("mode", "exp");
|
tmp = config("mode", "exp");
|
||||||
@@ -1597,7 +1631,7 @@ define test_mode()
|
|||||||
|
|
||||||
tmp = config("mode", "hex");
|
tmp = config("mode", "hex");
|
||||||
print '1613: tmp = config("mode", "hex")';
|
print '1613: tmp = config("mode", "hex")';
|
||||||
vrfy(tmp == "exp", '1614: tmp == "exp"');
|
vrfy(tmp == "scientific", '1614: tmp == "scientific"');
|
||||||
vrfy(base() == 16, '1615: base() == 16');
|
vrfy(base() == 16, '1615: base() == 16');
|
||||||
|
|
||||||
tmp = config("mode", "oct");
|
tmp = config("mode", "oct");
|
||||||
@@ -1616,11 +1650,13 @@ define test_mode()
|
|||||||
|
|
||||||
tmp = base(1/3);
|
tmp = base(1/3);
|
||||||
print '1624: tmp = base(1/3)';
|
print '1624: tmp = base(1/3)';
|
||||||
vrfy(config("mode") == "frac", '1625: config("mode") == "frac"');
|
vrfy(config("mode") == "fraction",
|
||||||
|
'1625: config("mode") == "fraction"');
|
||||||
|
|
||||||
tmp = base(-10);
|
tmp = base(-10);
|
||||||
print '1626: tmp = base(-10)';
|
print '1626: tmp = base(-10)';
|
||||||
vrfy(config("mode") == "int", '1627: config("mode") == "int"');
|
vrfy(config("mode") == "integer",
|
||||||
|
'1627: config("mode") == "integer"');
|
||||||
|
|
||||||
tmp = base(10);
|
tmp = base(10);
|
||||||
print '1628: tmp = base(10)';
|
print '1628: tmp = base(10)';
|
||||||
@@ -1628,7 +1664,8 @@ define test_mode()
|
|||||||
|
|
||||||
tmp = base(1e20);
|
tmp = base(1e20);
|
||||||
print '1630: tmp = base(1e20)';
|
print '1630: tmp = base(1e20)';
|
||||||
vrfy(config("mode") == "exp", '1631: config("mode") == "exp"');
|
vrfy(config("mode") == "scientific",
|
||||||
|
'1631: config("mode") == "scientific"');
|
||||||
|
|
||||||
tmp = base(16);
|
tmp = base(16);
|
||||||
print '1632: tmp = base(16)';
|
print '1632: tmp = base(16)';
|
||||||
@@ -1679,7 +1716,7 @@ print '026: parsed test_mode()';
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The 1700's contain tests for reading scripts. These tests are
|
* The 1700's contain tests for reading resource files. These tests are
|
||||||
* done inline near the bottom.
|
* done inline near the bottom.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -1694,6 +1731,7 @@ define test_obj()
|
|||||||
{
|
{
|
||||||
static obj surd a;
|
static obj surd a;
|
||||||
static obj surd b;
|
static obj surd b;
|
||||||
|
local PP;
|
||||||
|
|
||||||
print '1800: Beginning object test';
|
print '1800: Beginning object test';
|
||||||
|
|
||||||
@@ -1731,7 +1769,10 @@ define test_obj()
|
|||||||
vrfy(a <= a, '1828: a < a');
|
vrfy(a <= a, '1828: a < a');
|
||||||
vrfy(isobj(a) == 1, '1829: isobj(a) == 1');
|
vrfy(isobj(a) == 1, '1829: isobj(a) == 1');
|
||||||
|
|
||||||
print '1830: Ending object test';
|
obj pt {x,y}, PP = obj pair {A,B} = {obj pt, obj pt};
|
||||||
|
print '1830: obj pt {x,y}, PP = obj pair {A,B} = {obj pt, obj pt}';
|
||||||
|
|
||||||
|
print '1831: Ending object test';
|
||||||
}
|
}
|
||||||
print '028: parsed test_obj()';
|
print '028: parsed test_obj()';
|
||||||
|
|
||||||
@@ -1939,9 +1980,9 @@ print '029: parsed test_prime()';
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Test the Lucas primality test library
|
* Test the Lucas primality test resource file
|
||||||
*/
|
*/
|
||||||
read -once "lucas_chk"; /* obtain our needed Lucas library */
|
read -once "lucas_chk"; /* obtain our needed Lucas resource file */
|
||||||
print '030: read lucas_chk';
|
print '030: read lucas_chk';
|
||||||
/**/
|
/**/
|
||||||
define test_lucas()
|
define test_lucas()
|
||||||
@@ -2701,11 +2742,11 @@ define test_matobj()
|
|||||||
B[0,0] = res(2);
|
B[0,0] = res(2);
|
||||||
print '3106: B[0,0] = res(2)';
|
print '3106: B[0,0] = res(2)';
|
||||||
B[0,1] = res(3);
|
B[0,1] = res(3);
|
||||||
print '3107: B[0,1] = res(2)';
|
print '3107: B[0,1] = res(3)';
|
||||||
B[1,0] = res(5);
|
B[1,0] = res(5);
|
||||||
print '3108: B[1,0] = res(2)';
|
print '3108: B[1,0] = res(5)';
|
||||||
B[1,1] = res(7);
|
B[1,1] = res(7);
|
||||||
print '3109: B[1,1] = res(2)';
|
print '3109: B[1,1] = res(7)';
|
||||||
print '3110: md = 0';
|
print '3110: md = 0';
|
||||||
md = 0;
|
md = 0;
|
||||||
vrfy(det(B) == res(-1), '3111: det(B) == res(-1)');
|
vrfy(det(B) == res(-1), '3111: det(B) == res(-1)');
|
||||||
@@ -2867,7 +2908,7 @@ print '053: parsed test_frem()';
|
|||||||
*/
|
*/
|
||||||
define test_error()
|
define test_error()
|
||||||
{
|
{
|
||||||
local strx, e99, list1, e999;
|
local strx, e99, list1, e9999;
|
||||||
local a, b, c, n, x; /* used by newerror() */
|
local a, b, c, n, x; /* used by newerror() */
|
||||||
|
|
||||||
print '3600: Beginning test_error';
|
print '3600: Beginning test_error';
|
||||||
@@ -3040,11 +3081,11 @@ define test_error()
|
|||||||
'3710: newerror() == newerror("???")');
|
'3710: newerror() == newerror("???")');
|
||||||
vrfy(newerror("") == newerror(),
|
vrfy(newerror("") == newerror(),
|
||||||
'3711: newerror("") == newerror()');
|
'3711: newerror("") == newerror()');
|
||||||
e999 = error(999);
|
e9999 = error(9999);
|
||||||
print '3712: e999 = error(999)';
|
print '3712: e9999 = error(9999)';
|
||||||
vrfy(errno() == 999, '3713: errno() == 999');
|
vrfy(errno() == 9999, '3713: errno() == 9999');
|
||||||
vrfy(error() == e999, '3714: error() == e999');
|
vrfy(error() == e9999, '3714: error() == e9999');
|
||||||
vrfy(strerror() == "Error 999", '3715: strerror() == "Error 999"');
|
/* test 3715 removed due to non-portable strerror() output */
|
||||||
x = newerror("Alpha");
|
x = newerror("Alpha");
|
||||||
print '3716: x = newerror("Alpha")';
|
print '3716: x = newerror("Alpha")';
|
||||||
n = iserror(x);
|
n = iserror(x);
|
||||||
@@ -3052,19 +3093,22 @@ define test_error()
|
|||||||
vrfy(errno() == n, '3718: errno() == n');
|
vrfy(errno() == n, '3718: errno() == n');
|
||||||
vrfy(error() == x, '3719: error() == x');
|
vrfy(error() == x, '3719: error() == x');
|
||||||
vrfy(strerror() == "Alpha", '3720: strerror() == "Alpha"');
|
vrfy(strerror() == "Alpha", '3720: strerror() == "Alpha"');
|
||||||
vrfy(errno(999) == n, '3721: errno() == n');
|
vrfy(errno(9999) == n, '3721: errno() == n');
|
||||||
vrfy(errno() == 999, '3722: errno() == 999');
|
vrfy(errno() == 9999, '3722: errno() == 9999');
|
||||||
vrfy(error() == e999, '3723: error() == e999');
|
vrfy(error() == e9999, '3723: error() == e9999');
|
||||||
vrfy(strerror() == "Error 999", '3724: strerror() == "Error 999"');
|
/* test 3724 removed due to non-portable strerror() output */
|
||||||
a = 1/0;
|
a = 1/0;
|
||||||
print '3725: a = 1/0';
|
print '3725: a = 1/0';
|
||||||
vrfy(strerror() == "Division by zero",
|
vrfy(strerror() == "Division by zero",
|
||||||
'3726: strerror() == "Division by zero"');
|
'3726: strerror() == "Division by zero"');
|
||||||
|
n = 8191;
|
||||||
|
print '3727: n = 8191';
|
||||||
|
/* test 3728 removed due to non-portable strerror() output */
|
||||||
|
|
||||||
/* errmax and errcount should be bumped up the 148 errors above */
|
/* errmax and errcount should be bumped up the 148 errors above */
|
||||||
vrfy(errcount() == ecnt, '3727: errcount() == ecnt');
|
vrfy(errcount() == ecnt, '3729: errcount() == ecnt');
|
||||||
|
|
||||||
print '3728: Ending test_error';
|
print '3730: Ending test_error';
|
||||||
}
|
}
|
||||||
print '054: parsed test_error()';
|
print '054: parsed test_error()';
|
||||||
|
|
||||||
@@ -4687,8 +4731,8 @@ define test_commaeq()
|
|||||||
/*
|
/*
|
||||||
* matrix assignment
|
* matrix assignment
|
||||||
*/
|
*/
|
||||||
mat A[3] = {1,2,3}, B[2] = {1,2};
|
mat A[3] = {1,2,3}, mat B[2] = {1,2};
|
||||||
print '5625: mat A[3] = {1,2,3}, B[2] = {1,2}';
|
print '5625: mat A[3] = {1,2,3}, mat B[2] = {1,2}';
|
||||||
vrfy(A[0] == 1, '5626: A[0] == 1');
|
vrfy(A[0] == 1, '5626: A[0] == 1');
|
||||||
vrfy(B[1] == 2, '5627: B[1] == 2');
|
vrfy(B[1] == 2, '5627: B[1] == 2');
|
||||||
|
|
||||||
@@ -4916,8 +4960,8 @@ define test_assign(base, work)
|
|||||||
print base+3: ': X5800 = base+3';
|
print base+3: ': X5800 = base+3';
|
||||||
Y5800 = base+4;
|
Y5800 = base+4;
|
||||||
print base+4: ': Y5800 = base+4';
|
print base+4: ': Y5800 = base+4';
|
||||||
obj xy5800 A={1,2}, B={3,4};
|
obj xy5800 A={1,2}, obj xy5800 B={3,4};
|
||||||
print base+5: ': obj xy5800 A={1,2}, B={3,4}';
|
print base+5: ': obj xy5800 A={1,2}, obj xy5000 B={3,4}';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* test assignment
|
* test assignment
|
||||||
@@ -4960,7 +5004,7 @@ define test_is()
|
|||||||
{
|
{
|
||||||
local loc; /* unassigned local variable */
|
local loc; /* unassigned local variable */
|
||||||
local a; /* assoc */
|
local a; /* assoc */
|
||||||
local ofd; /* open file descriptor */
|
local ofd; /* open file desriptor */
|
||||||
local cfd; /* closed file descriptor */
|
local cfd; /* closed file descriptor */
|
||||||
local blk; /* unnamed block */
|
local blk; /* unnamed block */
|
||||||
local nblk; /* named block */
|
local nblk; /* named block */
|
||||||
@@ -7381,7 +7425,10 @@ X5800 = obj xy5800 = {1,2};
|
|||||||
print '5864: X5800 = obj xy5800 = {1,2}';
|
print '5864: X5800 = obj xy5800 = {1,2}';
|
||||||
vrfy(X5800 == (obj xy5800 = {1,2}),
|
vrfy(X5800 == (obj xy5800 = {1,2}),
|
||||||
'5865: X5800 == (obj xy5800 = {1,2})');
|
'5865: X5800 == (obj xy5800 = {1,2})');
|
||||||
print '5866: End of 5800 sequence';
|
define f5800(a5800 = mat[2] = {3,4}) = 5 * a5800;
|
||||||
|
print '5866: define f5800(a5800 = mat[2] = {3,4}) = 5 * a5800;'
|
||||||
|
vrfy(f5800() == (mat[] = {15,20}),'5867: f5800() == (mat[] = {15,20})');
|
||||||
|
print '5868: End of 5800 sequence';
|
||||||
|
|
||||||
print;
|
print;
|
||||||
return test_is();
|
return test_is();
|
||||||
@@ -7483,10 +7530,19 @@ print '8406: Ending test_quit';
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* read various calc libs
|
* test_divmod - psuedo-random tests on the // and % with various rounding modes
|
||||||
|
*/
|
||||||
|
print;
|
||||||
|
print '8500: Starting test_divmod'
|
||||||
|
read -once "test8500";
|
||||||
|
/* 85xx: Ending test_divmod is printed by test8500.cal */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* read various calc resource files
|
||||||
*
|
*
|
||||||
* We read most of the calc libs shipped with the distribution.
|
* We read most of the standard calc resource files. There are a few
|
||||||
* There are a few lib files that are not read:
|
* resource files that are not read:
|
||||||
*
|
*
|
||||||
* beer.cal - prints a bunch of things when loaded
|
* beer.cal - prints a bunch of things when loaded
|
||||||
* hello.cal - designed to go into an infinite loop
|
* hello.cal - designed to go into an infinite loop
|
||||||
@@ -7502,7 +7558,7 @@ print '8406: Ending test_quit';
|
|||||||
* all of real actions of regress.cal.
|
* all of real actions of regress.cal.
|
||||||
*/
|
*/
|
||||||
print;
|
print;
|
||||||
print '9800: Starting read of selected calc libs';
|
print '9800: Starting read of selected calc resource files';
|
||||||
read -once bernoulli;
|
read -once bernoulli;
|
||||||
print '9801: read -once bernoulli';
|
print '9801: read -once bernoulli';
|
||||||
read -once bigprime;
|
read -once bigprime;
|
||||||
@@ -7559,7 +7615,7 @@ read -once varargs;
|
|||||||
print '9827: read -once varargs';
|
print '9827: read -once varargs';
|
||||||
read -once qtime;
|
read -once qtime;
|
||||||
print '9828: read -once qtime';
|
print '9828: read -once qtime';
|
||||||
print '9829: Ending read of selected calc libs';
|
print '9829: Ending read of selected calc resource files';
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
@@ -1,35 +1,35 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 1996 Landon Curt Noll
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
|
||||||
* supporting documentation
|
|
||||||
* source copies
|
|
||||||
* source works derived from this source
|
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
|
||||||
* Landon Curt Noll
|
|
||||||
* http://reality.sgi.com/chongo
|
|
||||||
*
|
|
||||||
* chongo <was here> /\../\
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* seedrandom - seed the cryptographically strong Blum generator
|
* seedrandom - seed the cryptographically strong Blum generator
|
||||||
*
|
*
|
||||||
|
* Copyright (C) 1999 Landon Curt Noll
|
||||||
*
|
*
|
||||||
* The period of a Blum generators with modulus 'n=p*q' (where p and
|
* 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: seedrandom.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/seedrandom.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1996/01/01 08:21:00
|
||||||
|
* File existed as early as: 1996
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The period of Blum generators with modulus 'n=p*q' (where p and
|
||||||
* q are primes 3 mod 4) is:
|
* q are primes 3 mod 4) is:
|
||||||
*
|
*
|
||||||
* lambda(n) = lcm(factors of p-1 & q-1)
|
* lambda(n) = lcm(factors of p-1 & q-1)
|
||||||
@@ -53,6 +53,8 @@
|
|||||||
* NOTE: The [10^20, 10^314) range comes from the fact that the 13th internal
|
* NOTE: The [10^20, 10^314) range comes from the fact that the 13th internal
|
||||||
* modulus is ~10^315. We want the lower bound seed to be reasonably big.
|
* modulus is ~10^315. We want the lower bound seed to be reasonably big.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
define seedrandom(seed1, seed2, size, trials)
|
define seedrandom(seed1, seed2, size, trials)
|
||||||
{
|
{
|
||||||
local p; /* first Blum prime */
|
local p; /* first Blum prime */
|
||||||
@@ -113,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("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "/* 1st Blum prime */ p=", p;
|
print "/* 1st Blum prime */ p=", p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,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("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "/* 2nd Blum prime */ q=", q;
|
print "/* 2nd Blum prime */ q=", q;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,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("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
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;
|
||||||
}
|
}
|
||||||
@@ -154,6 +156,6 @@ define seedrandom(seed1, seed2, size, trials)
|
|||||||
return old_state;
|
return old_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "seedrandom(seed1, seed2, size [, trials]) defined";
|
print "seedrandom(seed1, seed2, size [, trials]) defined";
|
||||||
}
|
}
|
69
cal/solve.cal
Normal file
69
cal/solve.cal
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* solve - solve f(x) = 0 to within the desired error value for x
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: solve.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/solve.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:37
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Solve the equation f(x) = 0 to within the desired error value for x.
|
||||||
|
* The function 'f' must be defined outside of this routine, and the low
|
||||||
|
* and high values are guesses which must produce values with opposite signs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
define solve(low, high, epsilon)
|
||||||
|
{
|
||||||
|
local flow, fhigh, fmid, mid, places;
|
||||||
|
|
||||||
|
if (isnull(epsilon))
|
||||||
|
epsilon = epsilon();
|
||||||
|
if (epsilon <= 0)
|
||||||
|
quit "Non-positive epsilon value";
|
||||||
|
places = highbit(1 + int(1/epsilon)) + 1;
|
||||||
|
flow = f(low);
|
||||||
|
if (abs(flow) < epsilon)
|
||||||
|
return low;
|
||||||
|
fhigh = f(high);
|
||||||
|
if (abs(flow) < epsilon)
|
||||||
|
return high;
|
||||||
|
if (sgn(flow) == sgn(fhigh))
|
||||||
|
quit "Non-opposite signs";
|
||||||
|
while (1) {
|
||||||
|
mid = bround(high - fhigh * (high - low) / (fhigh - flow), places);
|
||||||
|
if ((mid == low) || (mid == high))
|
||||||
|
places++;
|
||||||
|
fmid = f(mid);
|
||||||
|
if (abs(fmid) < epsilon)
|
||||||
|
return mid;
|
||||||
|
if (sgn(fmid) == sgn(flow)) {
|
||||||
|
low = mid;
|
||||||
|
flow = fmid;
|
||||||
|
} else {
|
||||||
|
high = mid;
|
||||||
|
fhigh = fmid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
65
cal/sumsq.cal
Normal file
65
cal/sumsq.cal
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* sumsq - find unique two positive integers whose squares sum to a given prime
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: sumsq.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/sumsq.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:37
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Determine the unique two positive integers whose squares sum to the
|
||||||
|
* specified prime. This is always possible for all primes of the form
|
||||||
|
* 4N+1, and always impossible for primes of the form 4N-1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
define ss(p)
|
||||||
|
{
|
||||||
|
local a, b, i, p4;
|
||||||
|
|
||||||
|
if (p == 2) {
|
||||||
|
print "1^2 + 1^2 = 2";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((p % 4) != 1) {
|
||||||
|
print p, "is not of the form 4N+1";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!ptest(p, min(p-2, 10))) {
|
||||||
|
print p, "is not a prime";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
p4 = (p - 1) / 4;
|
||||||
|
i = 2;
|
||||||
|
do {
|
||||||
|
a = pmod(i++, p4, p);
|
||||||
|
} while ((a^2 % p) == 1);
|
||||||
|
b = p;
|
||||||
|
while (b^2 > p) {
|
||||||
|
i = b % a;
|
||||||
|
b = a;
|
||||||
|
a = i;
|
||||||
|
}
|
||||||
|
print a : "^2 +" , b : "^2 =" , a^2 + b^2;
|
||||||
|
}
|
@@ -1,11 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 David I. Bell
|
* surd - calculate using quadratic surds of the form: a + b * sqrt(D).
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Calculate using quadratic surds of the form: a + b * sqrt(D).
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: surd.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/surd.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:38
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
obj surd {a, b}; /* definition of the surd object */
|
obj surd {a, b}; /* definition of the surd object */
|
||||||
|
|
||||||
global surd_type = -1; /* type of surd (value of D) */
|
global surd_type = -1; /* type of surd (value of D) */
|
||||||
@@ -261,7 +283,7 @@ define surd_rel(a, b)
|
|||||||
return sgn(x^2 - y^2 * surd_type) * sgn(x);
|
return sgn(x^2 - y^2 * surd_type) * sgn(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config("lib_debug") & 3) {
|
if (config("resource_debug") & 3) {
|
||||||
print "obj surd {a, b} defined";
|
print "obj surd {a, b} defined";
|
||||||
print "surd_type defined";
|
print "surd_type defined";
|
||||||
print "set surd_type as needed";
|
print "set surd_type as needed";
|
32
cal/test1700.cal
Normal file
32
cal/test1700.cal
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* test1700 - 1700 series of the regress.cal test suite
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 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: test1700.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test1700.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1994/03/14 23:12:51
|
||||||
|
* File existed as early as: 1994
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
++value;
|
@@ -1,14 +1,31 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 Landon Curt Noll
|
* test2300 - 2300 series of the regress.cal test suite
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Landon Curt Noll
|
* Copyright (C) 1999 Landon Curt Noll
|
||||||
* http://reality.sgi.com/chongo
|
|
||||||
*
|
*
|
||||||
* chongo <was here> /\../\
|
* 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.
|
||||||
*
|
*
|
||||||
* This library is used by the 2300 series of the regress.cal test suite.
|
* 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: test2300.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2300.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/07/09 06:12:13
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@@ -1,13 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ernest Bowen and Landon Curt Noll
|
* test2600 - 2600 series of the regress.cal test suite
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Ernest Bowen and Landon Curt Noll
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
* ernie@neumann.une.edu.au and http://reality.sgi.com/chongo
|
|
||||||
*
|
*
|
||||||
* This library is used by the 2600 series of the regress.cal test suite.
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test2600.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2600.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/10/13 00:13:14
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stringent tests of some of calc's builtin functions.
|
* Stringent tests of some of calc's builtin functions.
|
||||||
* Most of the tests are concerned with the accuracy of the value
|
* Most of the tests are concerned with the accuracy of the value
|
||||||
@@ -49,6 +70,7 @@
|
|||||||
* All functions return the number of errors that they detected.
|
* All functions return the number of errors that they detected.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
global defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
global err;
|
||||||
|
|
@@ -1,25 +1,46 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ernest Bowen and Landon Curt Noll
|
* test2700 - 2700 series of the regress.cal test suite
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Ernest Bowen and Landon Curt Noll
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
* ernie@neumann.une.edu.au and http://reality.sgi.com/chongo
|
|
||||||
*
|
*
|
||||||
* This library is used by the 2700 series of the regress.cal test suite.
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test2700.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2700.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/11/01 22:52:25
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following script gives a severe test of sqrt(x,y,z) for
|
* The following resource file gives a severe test of sqrt(x,y,z) for
|
||||||
* all 128 values of z, randomly produced real and complex x, and randomly
|
* all 128 values of z, randomly produced real and complex x, and randomly
|
||||||
* produced nonzero values for y. After loading it, testcsqrt(n) will
|
* produced nonzero values for y. After loading it, testcsqrt(n) will
|
||||||
* test n combinations of x and y; testcsqrt(str,n,2) will print 1 2 3 ...
|
* test n combinations of x and y; testcsqrt(str,n,2) will print 1 2 3 ...
|
||||||
* indicating work in process; testcsqrt(str,n,3) will give information about
|
* indicating work in process; testcsqrt(str,n,3) will give information about
|
||||||
* errors detected and will print values of x and y used. The
|
* errors detected and will print values of x and y used.
|
||||||
* number generators are essentially as in the script I sent yesterday.
|
|
||||||
* I've also defined a function iscomsq(x) which does for complex as well
|
* I've also defined a function iscomsq(x) which does for complex as well
|
||||||
* as real x what issq(x) currently does for real x.
|
* as real x what issq(x) currently does for real x.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1;
|
global defaultverbose = 1;
|
||||||
global err;
|
global err;
|
||||||
|
|
40
cal/test3100.cal
Normal file
40
cal/test3100.cal
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* test3100 - 3100 series of the regress.cal test suite
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test3100.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3100.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/11/28 11:56:57
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
obj res {r};
|
||||||
|
global md;
|
||||||
|
define res_test(a) = !ismult(a.r, md);
|
||||||
|
define res_sub(a,b) {local obj res v = {(a.r - b.r) % md}; return v;};
|
||||||
|
define res_mul(a,b) {local obj res v = {(a.r * b.r) % md}; return v;};
|
||||||
|
define res_neg(a) {local obj res v = {(-a.r) % md}; return v;};
|
||||||
|
define res_inv(a) {local obj res v = {minv(a.r, md)}; return v;};
|
||||||
|
define res(x) {local obj res v = {x % md}; return v;};
|
@@ -1,14 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 Ernest Bowen and Landon Curt Noll
|
* test3300 - 3300 series of the regress.cal test suite
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Ernest Bowen and Landon Curt Noll
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
* ernie@neumann.une.edu.au and http://reality.sgi.com/chongo
|
|
||||||
*
|
*
|
||||||
* This library is used by the 3300 series of the regress.cal test suite.
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test3300.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3300.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/12/02 04:27:41
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
global defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
global err;
|
||||||
|
|
@@ -1,13 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ernest Bowen and Landon Curt Noll
|
* test3400 - 3400 series of the regress.cal test suite
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Ernest Bowen and Landon Curt Noll
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
* ernie@neumann.une.edu.au and http://reality.sgi.com/chongo
|
|
||||||
*
|
*
|
||||||
* This library is used by the 3400 series of the regress.cal test suite.
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test3400.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3400.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/12/02 05:20:11
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* tests of performance of some trigonometric functions
|
* tests of performance of some trigonometric functions
|
||||||
*
|
*
|
||||||
@@ -32,6 +53,7 @@
|
|||||||
* that the two sides might differ by eps. [[test changed to test eps error]]
|
* that the two sides might differ by eps. [[test changed to test eps error]]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
global defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
global err;
|
||||||
|
|
@@ -1,13 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ernest Bowen and Landon Curt Noll
|
* test3500 - 3500 series of the regress.cal test suite
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Ernest Bowen and Landon Curt Noll
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
* ernie@neumann.une.edu.au and http://reality.sgi.com/chongo
|
|
||||||
*
|
*
|
||||||
* This library is used by the 3500 series of the regress.cal test suite.
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test3500.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3500.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1995/12/18 22:50:46
|
||||||
|
* File existed as early as: 1995
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stringent tests of the functions frem, fcnt, gcdrem.
|
* Stringent tests of the functions frem, fcnt, gcdrem.
|
||||||
*
|
*
|
||||||
@@ -31,6 +52,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
global defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
global err;
|
||||||
|
|
@@ -1,13 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ernest Bowen and Landon Curt Noll
|
* test4000 - 4000 series of the regress.cal test suite
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Ernest Bowen and Landon Curt Noll
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
* ernie@neumann.une.edu.au and http://reality.sgi.com/chongo
|
|
||||||
*
|
*
|
||||||
* This library is used by the 4000 series of the regress.cal test suite.
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test4000.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4000.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1996/03/13 02:38:45
|
||||||
|
* File existed as early as: 1996
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Functions for testing and timing ptest, nextcand, prevcand.
|
* Functions for testing and timing ptest, nextcand, prevcand.
|
||||||
*
|
*
|
||||||
@@ -53,6 +74,7 @@
|
|||||||
* modulus to 1.
|
* modulus to 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
global defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
global err;
|
||||||
|
|
@@ -1,13 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ernest Bowen and Landon Curt Noll
|
* test4100 - 4100 series of the regress.cal test suite
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Ernest Bowen and Landon Curt Noll
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
* ernie@neumann.une.edu.au and http://reality.sgi.com/chongo
|
|
||||||
*
|
*
|
||||||
* This library is used by the 4100 series of the regress.cal test suite.
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test4100.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4100.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1996/03/13 03:53:22
|
||||||
|
* File existed as early as: 1996
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some severe tests and timing functions for REDC functions and pmod.
|
* Some severe tests and timing functions for REDC functions and pmod.
|
||||||
*
|
*
|
||||||
@@ -48,6 +69,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
global defaultverbose = 1; /* default verbose value */
|
global defaultverbose = 1; /* default verbose value */
|
||||||
global err;
|
global err;
|
||||||
|
|
@@ -1,12 +1,32 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ernest Bowen and Landon Curt Noll
|
* test4600 - 4600 series of the regress.cal test suite
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* By: Ernest Bowen and Landon Curt Noll
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
* ernie@neumann.une.edu.au and http://reality.sgi.com/chongo
|
|
||||||
*
|
*
|
||||||
* This library is used by the 4600 series of the regress.cal test suite.
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test4600.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4600.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1996/07/02 20:04:40
|
||||||
|
* File existed as early as: 1996
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
71
cal/test5100.cal
Normal file
71
cal/test5100.cal
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* test5100 - 5100 series of the regress.cal test suite
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test5100.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5100.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1996/12/02 23:57:10
|
||||||
|
* File existed as early as: 1996
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
global defaultverbose = 1; /* default verbose value */
|
||||||
|
global err;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We test the new code generator declaration scope and order.
|
||||||
|
*
|
||||||
|
* In this function two static variables a5100 and b5100 are created,
|
||||||
|
* with zero value, when the definition is read.
|
||||||
|
*
|
||||||
|
* The variable a5100 is initialized with the value x if and when this
|
||||||
|
* function is first called with a positive even x. The varable b5100
|
||||||
|
* is similarly initialized if and when this function is first called positive
|
||||||
|
* odd x.
|
||||||
|
*
|
||||||
|
* Each time this function is called with positive integer x, a5100 or
|
||||||
|
* b5100 is incremented.
|
||||||
|
*
|
||||||
|
* Finally the values of the static variables are assigned to the global
|
||||||
|
* variables a5100 and b5100.
|
||||||
|
*
|
||||||
|
* Immediately after the last of several calls to this function
|
||||||
|
* a5100 = 0 if none of the x's have been positive even, otherwise
|
||||||
|
* a5100 = the first positive even x + the number of positive even x's,
|
||||||
|
* and b5100 = 0 if none of the x's have been positive odd, otherwise
|
||||||
|
* b5100 = the first positive odd x + the number of positive odd x's.
|
||||||
|
*/
|
||||||
|
define test5100(x)
|
||||||
|
{
|
||||||
|
if (isint(x) && x > 0) {
|
||||||
|
if (iseven(x)) {
|
||||||
|
static a5100 = x;
|
||||||
|
a5100++;
|
||||||
|
} else {
|
||||||
|
static b5100 = x;
|
||||||
|
b5100++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
global a5100 = a5100, b5100 = b5100;
|
||||||
|
}
|
53
cal/test5200.cal
Normal file
53
cal/test5200.cal
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* test5200 - 5200 series of the regress.cal test suite
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test5200.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5200.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1997/02/07 02:48:10
|
||||||
|
* File existed as early as: 1997
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
global defaultverbose = 1; /* default verbose value */
|
||||||
|
global err;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* test the fix of a global/static bug
|
||||||
|
*
|
||||||
|
* Given the following:
|
||||||
|
*
|
||||||
|
* global a = 10;
|
||||||
|
* static a = 20;
|
||||||
|
* define f(x) = a + x;
|
||||||
|
* define g(x) {global a = 30; return a + x;}
|
||||||
|
* define h(x) = a + x;
|
||||||
|
*
|
||||||
|
* Older versions of
|
||||||
|
*/
|
||||||
|
global a5200 = 10;
|
||||||
|
static a5200 = 20;
|
||||||
|
define f5200(x) = a5200 + x;
|
||||||
|
define g5200(x) {global a5200 = 30; return a5200 + x;}
|
||||||
|
define h5200(x) = a5200 + x;
|
48
cal/test8400.cal
Normal file
48
cal/test8400.cal
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* test8400 - 8400 series of the regress.cal test suite
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 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: test8400.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8400.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1999/10/31 01:00:03
|
||||||
|
* 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/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
print "8401: in test8400.cal";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* test8400 - dummy function to allow a check of quit-based memory leaks
|
||||||
|
*/
|
||||||
|
define test8400()
|
||||||
|
{
|
||||||
|
local x8401 = 19937; /* watch for lost memory */
|
||||||
|
static s8401 = 44497; /* watch for lost memory */
|
||||||
|
|
||||||
|
return x8401+s8401;
|
||||||
|
}
|
||||||
|
print "8402: parsed test8400()";
|
||||||
|
vrfy(test8400() == 64434, '8403: test8400() == 64434');
|
||||||
|
|
||||||
|
quit;
|
||||||
|
prob('quit did not end test8400.cal');
|
264
cal/test8500.cal
Normal file
264
cal/test8500.cal
Normal file
@@ -0,0 +1,264 @@
|
|||||||
|
/*
|
||||||
|
* test8500 - 8500 series of the regress.cal test suite
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 Ernest Bowen and Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Primary author: Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: test8500.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test8500.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1999/11/12 20:59:59
|
||||||
|
* File existed as early as: 1999
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tests of // and % operators
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
global err_8500; /* divmod_8500 error count */
|
||||||
|
global L_8500; /* list of problem values */
|
||||||
|
global ver_8500; /* test verbosity - see setting comment near bottom */
|
||||||
|
global old_seed_8500; /* old srand() seed */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* save the config state so that we can change it and restore later
|
||||||
|
*/
|
||||||
|
global cfg_8500 = config("all");
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* onetest_8500 - perform one division / remainder test
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 = test was successful
|
||||||
|
* >0 = test error indicator
|
||||||
|
*/
|
||||||
|
define onetest_8500(a,b,rnd) {
|
||||||
|
local q, r, s, S;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* set a random rounding mode
|
||||||
|
*/
|
||||||
|
config("quo", rnd), config("mod", rnd);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* perform the division and mod
|
||||||
|
*/
|
||||||
|
q = a // b;
|
||||||
|
r = a % b;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* verify the fundamental math
|
||||||
|
*/
|
||||||
|
if (a != q * b + r)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* determine if the rounding worked
|
||||||
|
*/
|
||||||
|
if (b) {
|
||||||
|
if (rnd & 16)
|
||||||
|
s = sgn(abs(r) - abs(b)/2);
|
||||||
|
else
|
||||||
|
s = sgn(abs(r) - abs(b));
|
||||||
|
|
||||||
|
if (s < 0 || r == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (s > 0)
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
if (((rnd & 16) && s == 0) || !(rnd & 16)) {
|
||||||
|
|
||||||
|
S = sgn(r) * sgn(b); /* This is sgn(a/b) - a//b */
|
||||||
|
switch (rnd & 15) {
|
||||||
|
case 0: return (S < 0) ? 3 : 0;
|
||||||
|
case 1: return (S > 0) ? 4 : 0;
|
||||||
|
case 2: return (S != sgn(a)*sgn(b)) ? 5 : 0;
|
||||||
|
case 3: return (S != -sgn(a)*sgn(b)) ? 6 : 0;
|
||||||
|
break;
|
||||||
|
case 4: return (S != sgn(b)) ? 7 : 0;
|
||||||
|
case 5: return (S != -sgn(b)) ? 8 : 0;
|
||||||
|
case 6: return (S != sgn(a)) ? 9 : 0;
|
||||||
|
case 7: return (S != -sgn(a)) ? 10 : 0;
|
||||||
|
case 8: return (isodd(q)) ? 11 : 0;
|
||||||
|
case 9: return (iseven(q)) ? 12 : 0;
|
||||||
|
case 10: return (iseven(q) != (a/b > 0)) ? 13:0;
|
||||||
|
case 11: return (isodd(q) != (a/b > 0)) ? 14:0;
|
||||||
|
case 12: return (iseven(q) != (b > 0)) ? 15 : 0;
|
||||||
|
case 13: return (isodd(q) != (b > 0)) ? 16 : 0;
|
||||||
|
case 14: return (iseven(q) != (a > 0)) ? 17 : 0;
|
||||||
|
case 15: return (isodd(q) != (a > 0)) ? 18 : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* all is well
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* divmod_8500 - perform a bunch of pseudo-random // and % test
|
||||||
|
*
|
||||||
|
* divmod_8500(N, M1, M2) will perform N tests with randomly chosen integers
|
||||||
|
* a, b with abs(a) < M1, abs(b) < M2, which with 50% probability are
|
||||||
|
* converted to a = (2 * a + 1) * b, b = 2 * b (to give case where
|
||||||
|
* a / b is an integer + 1/2).
|
||||||
|
*
|
||||||
|
* N defaults to 10, M1 to 2^128, M2 to 2^64
|
||||||
|
*
|
||||||
|
* The testnum, if > 0, is used while printing a failure or success.
|
||||||
|
*
|
||||||
|
* The rounding parameter is randomly chosen.
|
||||||
|
*
|
||||||
|
* After a run of divmod_8500 the a, b, rnd values which gave failure are
|
||||||
|
* stored in the list L_8500. L_8500[0], L_8500[1], L_8500[2] are a, b, rnd for the first
|
||||||
|
* test, etc.
|
||||||
|
*/
|
||||||
|
define divmod_8500(N = 10, M1 = 2^128, M2 = 2^64, testnum = 0)
|
||||||
|
{
|
||||||
|
local a, b, i, v, rnd;
|
||||||
|
local errmsg; /* error message to display */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* firewall
|
||||||
|
*/
|
||||||
|
if (!isint(M1) || M1 < 2)
|
||||||
|
quit "Bad second arg for dtest";
|
||||||
|
|
||||||
|
if (!isint(M2) || M2 < 2)
|
||||||
|
quit "Bad third arg for dtest";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* test setup
|
||||||
|
*/
|
||||||
|
err_8500 = 0;
|
||||||
|
L_8500 = list();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* perform the random results
|
||||||
|
*/
|
||||||
|
for (i = 0; i < N; i++) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* randomly select two values in the range controlled by M1,M2
|
||||||
|
*/
|
||||||
|
a = rand(-M1+1, M1);
|
||||||
|
b = rand(-M2+1, M2);
|
||||||
|
if (rand(2)) {
|
||||||
|
a = (2 * a + 1) * b;
|
||||||
|
b *= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* seelect one of the 32 rounding modes at random
|
||||||
|
*/
|
||||||
|
rnd = rand(32);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ver_8500 pre-test reporting
|
||||||
|
*/
|
||||||
|
if (ver_8500 > 1)
|
||||||
|
printf("Test %d: a = %d, b = %d, rnd = %d\n",
|
||||||
|
i, a, b, rnd);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* perform the actual test
|
||||||
|
*/
|
||||||
|
v = onetest_8500(a, b, rnd);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* individual test analysis
|
||||||
|
*/
|
||||||
|
if (v != 0) {
|
||||||
|
err_8500++;
|
||||||
|
if (ver_8500 != 0) {
|
||||||
|
if (testnum > 0) {
|
||||||
|
errmsg = strprintf(
|
||||||
|
"Failure %d on test %d", v, i);
|
||||||
|
prob(errmsg);
|
||||||
|
} else {
|
||||||
|
printf("Failure %d on test %d", v, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
append(L_8500, a, b, rnd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* report in the results
|
||||||
|
*/
|
||||||
|
if (err_8500) {
|
||||||
|
if (testnum > 0) {
|
||||||
|
errmsg = strprintf(
|
||||||
|
"%d: divmod_8500(%d,,,%d): %d failures",
|
||||||
|
testnum, N, testnum, err_8500);
|
||||||
|
prob(errmsg);
|
||||||
|
} else {
|
||||||
|
printf("%s failure%s", err_8500,
|
||||||
|
(err_8500 > 1) ? "s" : "");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (testnum > 0) {
|
||||||
|
errmsg = strprintf("%d: divmod_8500(%d,,,%d)",
|
||||||
|
testnum, N, testnum);
|
||||||
|
vrfy(err_8500 == 0, errmsg);
|
||||||
|
} else {
|
||||||
|
print "No failure";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ver_8500 != 0 displays failures; ver_8500 > 1 displays all numbers tested
|
||||||
|
*/
|
||||||
|
ver_8500 = 0;
|
||||||
|
print '8501: ver_8500 = 0';
|
||||||
|
old_seed_8500 = srand(31^61);
|
||||||
|
print '8502: old_seed_8500 = srand(31^61)';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* do the tests
|
||||||
|
*/
|
||||||
|
divmod_8500(250, 2^128, 2^1, 8503);
|
||||||
|
divmod_8500(250, 2^128, 2^64, 8504);
|
||||||
|
divmod_8500(250, 2^256, 2^64, 8505);
|
||||||
|
divmod_8500(250, 2^1024, 2^64, 8506);
|
||||||
|
divmod_8500(250, 2^1024, 2^128, 8507);
|
||||||
|
divmod_8500(250, 2^16384, 2^1024, 8508);
|
||||||
|
divmod_8500(1000, 2^128, 2^64, 8509);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* restore state
|
||||||
|
*/
|
||||||
|
config("all", cfg_8500),;
|
||||||
|
print '8510: config("all", cfg_8500),';
|
||||||
|
srand(old_seed_8500),;
|
||||||
|
print '8511: srand(old_seed_8500),';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* finished with 8500 tests
|
||||||
|
*/
|
||||||
|
print '8512: Ending test_divmod';
|
55
cal/unitfrac.cal
Normal file
55
cal/unitfrac.cal
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* unixfrac - represent a fraction as a sum of distince unit fractions
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: unitfrac.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/unitfrac.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:50:38
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Represent a fraction as sum of distinct unit fractions.
|
||||||
|
* The output is the unit fractions themselves, and in square brackets,
|
||||||
|
* the number of digits in the numerator and denominator of the value left
|
||||||
|
* to be found. Numbers larger than 3.5 become very difficult to calculate.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
define unitfrac(x)
|
||||||
|
{
|
||||||
|
local d, di, n;
|
||||||
|
|
||||||
|
if (x <= 0)
|
||||||
|
quit "Non-positive argument";
|
||||||
|
d = 2;
|
||||||
|
do {
|
||||||
|
n = int(1 / x) + 1;
|
||||||
|
if (n > d)
|
||||||
|
d = n;
|
||||||
|
di = 1/d;
|
||||||
|
print ' [': digits(num(x)): '/': digits(den(x)): ']',, di;
|
||||||
|
x -= di;
|
||||||
|
d++;
|
||||||
|
} while ((num(x) > 1) || (x == di) || (x == 1));
|
||||||
|
print ' [1/1]',, x;
|
||||||
|
}
|
54
cal/varargs.cal
Normal file
54
cal/varargs.cal
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* varargs - example of a varargs-like use
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: varargs.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/varargs.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1991/05/22 21:56:34
|
||||||
|
* File existed as early as: 1991
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Example program to use 'varargs'.
|
||||||
|
*
|
||||||
|
* Program to sum the cubes of all the specified numbers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
define sc()
|
||||||
|
{
|
||||||
|
local s, i;
|
||||||
|
|
||||||
|
s = 0;
|
||||||
|
for (i = 1; i <= param(0); i++) {
|
||||||
|
if (!isnum(param(i))) {
|
||||||
|
print "parameter",i,"is not a number";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
s += param(i)^3;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config("resource_debug") & 3) {
|
||||||
|
print "sc(a, b, ...) defined";
|
||||||
|
}
|
@@ -1,12 +1,30 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 1997 Ernest Bowen
|
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
|
||||||
* By: Ernest Bowen <ernie@neumann.une.edu.au>
|
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
* xx_print - demo print object routines
|
* xx_print - demo print object routines
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 Ernest Bowen
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: xx_print.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/xx_print.cal,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1997/04/17 00:08:50
|
||||||
|
* File existed as early as: 1997
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
326
calc.c
326
calc.c
@@ -1,11 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 David I. Bell
|
* calc - arbitrary precision calculator
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Arbitrary precision calculator.
|
* Copyright (C) 1999 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||||
|
*
|
||||||
|
* Primary author: David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: calc.c,v 29.4 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:48:11
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
@@ -36,13 +60,17 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "have_strdup.h"
|
||||||
|
#if !defined(HAVE_STRDUP)
|
||||||
|
# define strdup(x) calc_strdup((CONST char *)(x))
|
||||||
|
#endif /* HAVE_STRDUP */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* static definitions and functions
|
* static definitions and functions
|
||||||
*/
|
*/
|
||||||
static char *usage = "usage: %s [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]\n"
|
|
||||||
"\t[-D calc_debug[:lib_debug:[user_debug]]]\n"
|
|
||||||
"\t[-n] [-p] [-q] [-u] [-v] [[--] calc_cmd ...]\n";
|
|
||||||
static void intint(int arg); /* interrupt routine */
|
static void intint(int arg); /* interrupt routine */
|
||||||
|
static int script_args(int argc,char ***argv,char **shellfile,char **program);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -53,6 +81,7 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
int want_defhelp = 0; /* 1=> we only want the default help */
|
int want_defhelp = 0; /* 1=> we only want the default help */
|
||||||
int cmdlen; /* length of the command string */
|
int cmdlen; /* length of the command string */
|
||||||
|
char *shellfile = NULL; /* != NULL ==> name of calc shell script */
|
||||||
extern char *optarg; /* option argument */
|
extern char *optarg; /* option argument */
|
||||||
extern int optind; /* option index */
|
extern int optind; /* option index */
|
||||||
int c; /* option */
|
int c; /* option */
|
||||||
@@ -63,7 +92,15 @@ main(int argc, char **argv)
|
|||||||
* parse args
|
* parse args
|
||||||
*/
|
*/
|
||||||
program = argv[0];
|
program = argv[0];
|
||||||
while ((c = getopt(argc, argv, "Cehim:npquvcdD:")) != -1) {
|
/* catch the case of a leading -S option */
|
||||||
|
if (argc > 2 && strncmp(argv[1], "-S", 2) == 0) {
|
||||||
|
/* convert the calc shell options into command line options */
|
||||||
|
argc = script_args(argc, &argv, &shellfile, &program);
|
||||||
|
/* -S implies -s */
|
||||||
|
s_flag = TRUE;
|
||||||
|
}
|
||||||
|
/* process command line options */
|
||||||
|
while ((c = getopt(argc, argv, "Cehim:npquvcdD:s")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'C':
|
case 'C':
|
||||||
#if defined(CUSTOM)
|
#if defined(CUSTOM)
|
||||||
@@ -133,55 +170,83 @@ main(int argc, char **argv)
|
|||||||
* parse the -D optarg
|
* parse the -D optarg
|
||||||
*
|
*
|
||||||
* Could be calc_debug
|
* Could be calc_debug
|
||||||
* or calc_debug:lib_debug
|
* or calc_debug:resource_debug
|
||||||
* or calc_debug:lib_debug:user_debug
|
* or calc_debug:resource_debug:user_debug
|
||||||
*/
|
*/
|
||||||
calc_debug = optarg;
|
calc_debug = optarg;
|
||||||
p = strchr(optarg, ':');
|
p = strchr(optarg, ':');
|
||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
lib_debug = p+1;
|
resource_debug = p+1;
|
||||||
p = strchr(lib_debug, ':');
|
p = strchr(resource_debug, ':');
|
||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
user_debug = p+1;
|
user_debug = p+1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 's':
|
||||||
|
s_flag = TRUE;
|
||||||
|
break;
|
||||||
|
case 'S':
|
||||||
|
/*FALLTHRU*/
|
||||||
default:
|
default:
|
||||||
/*
|
/*
|
||||||
* we are too early in processing to call
|
* we are too early in processing to call
|
||||||
* libcalc_call_me_last() - nothing to cleanup
|
* libcalc_call_me_last() - nothing to cleanup
|
||||||
*/
|
*/
|
||||||
fprintf(stderr, usage, program);
|
fprintf(stderr,
|
||||||
|
"usage: %s [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]\n"
|
||||||
|
"\t[-D calc_debug[:resource_debug[:user_debug]]]\n"
|
||||||
|
"\t[-n] [-p] [-q] [-s] [-u] [-v] "
|
||||||
|
"[[--] calc_cmd ...]\n",
|
||||||
|
program);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
havecommands = (optind < argc);
|
|
||||||
|
/*
|
||||||
|
* If -S was given via a calc shell script, imply -p and -d
|
||||||
|
* unless -i was also given.
|
||||||
|
*/
|
||||||
|
if (shellfile != NULL && !i_flag) {
|
||||||
|
p_flag = TRUE;
|
||||||
|
d_flag = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* look at the length of any trailing command args
|
* look at the length of any trailing command args
|
||||||
*
|
*
|
||||||
* We make room for the trailing '\0\n' as well as an extra guard byte.
|
* We make room for the trailing '\0\n' as well as an extra guard byte.
|
||||||
|
*
|
||||||
|
* However, if -S is in effect, we will pretend that we have no
|
||||||
|
* command args and allow the argv() builtin access to the strings.
|
||||||
*/
|
*/
|
||||||
|
cmdbuf[0] = '\0';
|
||||||
|
if (s_flag) {
|
||||||
|
havecommands = FALSE;
|
||||||
|
argc_value = argc - optind;
|
||||||
|
argv_value = argv + optind;
|
||||||
|
} else {
|
||||||
|
havecommands = (optind < argc);
|
||||||
for (cmdlen=0, i=optind; i < argc; ++i) {
|
for (cmdlen=0, i=optind; i < argc; ++i) {
|
||||||
/* argument + space separator */
|
/* argument + space separator */
|
||||||
cmdlen += strlen(argv[i]) + 1;
|
cmdlen += strlen(argv[i]) + 1;
|
||||||
}
|
}
|
||||||
if (i > MAXCMD) {
|
if (cmdlen > MAXCMD) {
|
||||||
/*
|
/*
|
||||||
* we are too early in processing to call
|
* we are too early in processing to call
|
||||||
* libcalc_call_me_last() - nothing to cleanup
|
* libcalc_call_me_last() - nothing to cleanup
|
||||||
*/
|
*/
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: command in arg list is too long\n", program);
|
"%s: command in arg list is too long\n",
|
||||||
|
program);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We will form a command the remaining args separated by spaces.
|
* Form a command the remaining args separated by spaces.
|
||||||
*/
|
*/
|
||||||
cmdbuf[0] = '\0';
|
|
||||||
if (optind < argc) {
|
if (optind < argc) {
|
||||||
strcpy(cmdbuf, argv[optind]);
|
strcpy(cmdbuf, argv[optind]);
|
||||||
cmdlen = strlen(argv[optind]);
|
cmdlen = strlen(argv[optind]);
|
||||||
@@ -193,6 +258,9 @@ main(int argc, char **argv)
|
|||||||
cmdbuf[cmdlen++] = '\n';
|
cmdbuf[cmdlen++] = '\n';
|
||||||
cmdbuf[cmdlen] = '\0';
|
cmdbuf[cmdlen] = '\0';
|
||||||
}
|
}
|
||||||
|
argc_value = 0;
|
||||||
|
argv_value = argv+argc;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* unbuffered mode
|
* unbuffered mode
|
||||||
@@ -208,7 +276,7 @@ main(int argc, char **argv)
|
|||||||
libcalc_call_me_first();
|
libcalc_call_me_first();
|
||||||
stdin_tty = isatty(0); /* assume stdin is on fd 0 */
|
stdin_tty = isatty(0); /* assume stdin is on fd 0 */
|
||||||
if (conf->calc_debug & CALCDBG_TTY)
|
if (conf->calc_debug & CALCDBG_TTY)
|
||||||
printf("DEBUG: stdin_tty is %d\n", stdin_tty);
|
printf("main: stdin_tty is %d\n", stdin_tty);
|
||||||
if (want_defhelp) {
|
if (want_defhelp) {
|
||||||
givehelp(DEFAULTCALCHELP);
|
givehelp(DEFAULTCALCHELP);
|
||||||
libcalc_call_me_last();
|
libcalc_call_me_last();
|
||||||
@@ -221,6 +289,8 @@ main(int argc, char **argv)
|
|||||||
if (!havecommands && stdin_tty) {
|
if (!havecommands && stdin_tty) {
|
||||||
if (!d_flag) {
|
if (!d_flag) {
|
||||||
printf("%s (version %s)\n", CALC_TITLE, version());
|
printf("%s (version %s)\n", CALC_TITLE, version());
|
||||||
|
printf("Calc is open software. For license details "
|
||||||
|
"type: help copyright\n");
|
||||||
printf("[%s]\n\n",
|
printf("[%s]\n\n",
|
||||||
"Type \"exit\" to exit, or \"help\" for help.");
|
"Type \"exit\" to exit, or \"help\" for help.");
|
||||||
}
|
}
|
||||||
@@ -264,14 +334,14 @@ main(int argc, char **argv)
|
|||||||
if (run_state == RUN_BEGIN) {
|
if (run_state == RUN_BEGIN) {
|
||||||
if (!q_flag && allow_read) {
|
if (!q_flag && allow_read) {
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_RCFILES));
|
run_state_name(RUN_RCFILES));
|
||||||
run_state = RUN_RCFILES;
|
run_state = RUN_RCFILES;
|
||||||
runrcfiles();
|
runrcfiles();
|
||||||
}
|
}
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_PRE_CMD_ARGS));
|
run_state_name(RUN_PRE_CMD_ARGS));
|
||||||
run_state = RUN_PRE_CMD_ARGS;
|
run_state = RUN_PRE_CMD_ARGS;
|
||||||
@@ -285,7 +355,7 @@ main(int argc, char **argv)
|
|||||||
closeinput();
|
closeinput();
|
||||||
runrcfiles();
|
runrcfiles();
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_PRE_CMD_ARGS));
|
run_state_name(RUN_PRE_CMD_ARGS));
|
||||||
run_state = RUN_PRE_CMD_ARGS;
|
run_state = RUN_PRE_CMD_ARGS;
|
||||||
@@ -295,13 +365,13 @@ main(int argc, char **argv)
|
|||||||
} else {
|
} else {
|
||||||
if ((havecommands && !i_flag) || !stdin_tty) {
|
if ((havecommands && !i_flag) || !stdin_tty) {
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_EXIT_WITH_ERROR));
|
run_state_name(RUN_EXIT_WITH_ERROR));
|
||||||
run_state = RUN_EXIT_WITH_ERROR;
|
run_state = RUN_EXIT_WITH_ERROR;
|
||||||
} else {
|
} else {
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_PRE_CMD_ARGS));
|
run_state_name(RUN_PRE_CMD_ARGS));
|
||||||
run_state = RUN_PRE_CMD_ARGS;
|
run_state = RUN_PRE_CMD_ARGS;
|
||||||
@@ -312,16 +382,24 @@ main(int argc, char **argv)
|
|||||||
if (run_state == RUN_PRE_CMD_ARGS) {
|
if (run_state == RUN_PRE_CMD_ARGS) {
|
||||||
if (havecommands) {
|
if (havecommands) {
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_CMD_ARGS));
|
run_state_name(RUN_CMD_ARGS));
|
||||||
run_state = RUN_CMD_ARGS;
|
run_state = RUN_CMD_ARGS;
|
||||||
(void) openstring(cmdbuf, (long) strlen(cmdbuf));
|
(void) openstring(cmdbuf, (long) strlen(cmdbuf));
|
||||||
getcommands(FALSE);
|
getcommands(FALSE);
|
||||||
closeinput();
|
closeinput();
|
||||||
|
} else if (shellfile != NULL) {
|
||||||
|
/* XXX - shellfile stuff needs it own run_state name */
|
||||||
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
|
printf("main: run_state from %s to %s\n",
|
||||||
|
run_state_name(run_state),
|
||||||
|
run_state_name(RUN_CMD_ARGS));
|
||||||
|
run_state = RUN_CMD_ARGS;
|
||||||
|
getshellfile(shellfile);
|
||||||
}
|
}
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_PRE_TOP_LEVEL));
|
run_state_name(RUN_PRE_TOP_LEVEL));
|
||||||
run_state = RUN_PRE_TOP_LEVEL;
|
run_state = RUN_PRE_TOP_LEVEL;
|
||||||
@@ -333,7 +411,7 @@ main(int argc, char **argv)
|
|||||||
getcommands(FALSE);
|
getcommands(FALSE);
|
||||||
if (inputlevel() == 0)
|
if (inputlevel() == 0)
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_PRE_TOP_LEVEL));
|
run_state_name(RUN_PRE_TOP_LEVEL));
|
||||||
run_state = RUN_PRE_TOP_LEVEL;
|
run_state = RUN_PRE_TOP_LEVEL;
|
||||||
@@ -342,13 +420,13 @@ main(int argc, char **argv)
|
|||||||
closeinput();
|
closeinput();
|
||||||
if (!stdin_tty || !i_flag || p_flag) {
|
if (!stdin_tty || !i_flag || p_flag) {
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_EXIT_WITH_ERROR));
|
run_state_name(RUN_EXIT_WITH_ERROR));
|
||||||
run_state = RUN_EXIT_WITH_ERROR;
|
run_state = RUN_EXIT_WITH_ERROR;
|
||||||
} else {
|
} else {
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_PRE_TOP_LEVEL));
|
run_state_name(RUN_PRE_TOP_LEVEL));
|
||||||
run_state = RUN_PRE_TOP_LEVEL;
|
run_state = RUN_PRE_TOP_LEVEL;
|
||||||
@@ -357,9 +435,10 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (run_state == RUN_PRE_TOP_LEVEL) {
|
if (run_state == RUN_PRE_TOP_LEVEL) {
|
||||||
if (stdin_tty && ((havecommands && !i_flag) || p_flag)) {
|
if (stdin_tty &&
|
||||||
|
(((havecommands || shellfile) && !i_flag) || p_flag)) {
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_EXIT));
|
run_state_name(RUN_EXIT));
|
||||||
run_state = RUN_EXIT;
|
run_state = RUN_EXIT;
|
||||||
@@ -371,7 +450,7 @@ main(int argc, char **argv)
|
|||||||
openterminal();
|
openterminal();
|
||||||
}
|
}
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_TOP_LEVEL));
|
run_state_name(RUN_TOP_LEVEL));
|
||||||
run_state = RUN_TOP_LEVEL;
|
run_state = RUN_TOP_LEVEL;
|
||||||
@@ -390,7 +469,7 @@ main(int argc, char **argv)
|
|||||||
getcommands(TRUE);
|
getcommands(TRUE);
|
||||||
} else {
|
} else {
|
||||||
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
if (conf->calc_debug & CALCDBG_RUNSTATE)
|
||||||
printf("DEBUG: run_state from %s to %s\n",
|
printf("main: run_state from %s to %s\n",
|
||||||
run_state_name(run_state),
|
run_state_name(run_state),
|
||||||
run_state_name(RUN_EXIT_WITH_ERROR));
|
run_state_name(RUN_EXIT_WITH_ERROR));
|
||||||
run_state = RUN_EXIT_WITH_ERROR;
|
run_state = RUN_EXIT_WITH_ERROR;
|
||||||
@@ -460,3 +539,184 @@ math_error(char *fmt, ...)
|
|||||||
exit(3);
|
exit(3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* script_args - concert shell script options into command line form
|
||||||
|
*
|
||||||
|
* When a calc shell script is executed, the args are presented to calc
|
||||||
|
* in a different form. Consider the a calc shell script called /tmp/calcit:
|
||||||
|
*
|
||||||
|
* #!/usr/local/bin/calc -S -q -p
|
||||||
|
* a=eval(prompt("Enter a: "));
|
||||||
|
* b=eval(prompt("Enter b: "));
|
||||||
|
* print a+b;
|
||||||
|
*
|
||||||
|
* When it is executed as:
|
||||||
|
*
|
||||||
|
* /tmp/calcit -D 31
|
||||||
|
*
|
||||||
|
* then calc will receive the following as args to main():
|
||||||
|
*
|
||||||
|
* argc: 5
|
||||||
|
* argv[0]: "/usr/local/bin/calc"
|
||||||
|
* argv[1]: "-S -q -p -e"
|
||||||
|
* argv[2]: "/tmp/calcit"
|
||||||
|
* argv[3]: "-D"
|
||||||
|
* argv[4]: "31"
|
||||||
|
* argv[5]: NULL
|
||||||
|
*
|
||||||
|
* NOTE: The user MUST put -S as the first characters on the calc shell
|
||||||
|
* script #! line, right after the calc binary path.
|
||||||
|
*
|
||||||
|
* NOTE: The arg supplied on the #! calc shell script line are returned
|
||||||
|
* as a single string. All tabs are converted into spaces.
|
||||||
|
*
|
||||||
|
* We must remember the calc script filename, break apart the #! args
|
||||||
|
* and remove the -S argument. In the above case we would return:
|
||||||
|
*
|
||||||
|
* argc: 6
|
||||||
|
* argv[0]: "/usr/local/bin/calc"
|
||||||
|
* argv[1]: "-q"
|
||||||
|
* argv[2]: "-p"
|
||||||
|
* argv[3]: "-e"
|
||||||
|
* argv[4]: "-D"
|
||||||
|
* argv[5]: "31"
|
||||||
|
* argv[6]: NULL
|
||||||
|
*
|
||||||
|
* shellfile: "/tmp/calcit"
|
||||||
|
* s_flag: TRUE
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
script_args(int argc, char ***argv_p, char **shellfile_p, char **program_p)
|
||||||
|
{
|
||||||
|
char **argv; /* new argv to return */
|
||||||
|
char *shellfile; /* shell file pathname to return */
|
||||||
|
int delta; /* the change needed in argc */
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
char *p;
|
||||||
|
char *q;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* must have at least 3 args and the 2nd must start with -S
|
||||||
|
*/
|
||||||
|
argv = *argv_p;
|
||||||
|
if (argc < 3 || strncmp(argv[1], "-S", 2) != 0) {
|
||||||
|
/*
|
||||||
|
* we are too early in processing to call
|
||||||
|
* libcalc_call_me_last() - nothing to cleanup
|
||||||
|
*/
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: FATAL: bad args passed to script_args\n", program);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
shellfile = argv[2];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* count the additional args beyond the -S
|
||||||
|
*/
|
||||||
|
if (argv[1][2] == ' ') {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* process args beyond -S on the #!/usr/local/bin line
|
||||||
|
*/
|
||||||
|
p = argv[1]+3 + strspn(argv[1]+3," ");
|
||||||
|
q = p;
|
||||||
|
if (q == '\0') {
|
||||||
|
|
||||||
|
/* only trailing spaces after -S, ignore them */
|
||||||
|
for (i = 3; i <= argc; ++i) {
|
||||||
|
argv[i-2] = argv[i];
|
||||||
|
}
|
||||||
|
argc -= 2;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* count the space separated strings that follow -S */
|
||||||
|
for (delta = -1; p != NULL && *p;
|
||||||
|
p = strchr(p+1,' '), ++delta) {
|
||||||
|
/* skip multiple spaces in a row */
|
||||||
|
p += strspn(p, " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* allocate the new set of argv pointers */
|
||||||
|
argv = (char **)malloc(sizeof(char *) * argc+delta);
|
||||||
|
if (argv == NULL) {
|
||||||
|
/*
|
||||||
|
* we are too early in processing to call
|
||||||
|
* libcalc_call_me_last() - nothing to cleanup
|
||||||
|
*/
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: failed to malloc %d pointers\n",
|
||||||
|
shellfile, argc+delta);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* we have the same 0th arg */
|
||||||
|
argv[0] = (*argv_p)[0];
|
||||||
|
|
||||||
|
/* args may be read-only, so duplicate 1st arg */
|
||||||
|
p = strdup(q);
|
||||||
|
if (p == NULL) {
|
||||||
|
/*
|
||||||
|
* we are too early in processing to call
|
||||||
|
* libcalc_call_me_last() - nothing to cleanup
|
||||||
|
*/
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: failed to duplicate 1st arg\n",
|
||||||
|
shellfile);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* tokenize the 1st arg */
|
||||||
|
for (p=strtok(q," "), i=1; p != NULL;
|
||||||
|
p=strtok(NULL," "), ++i) {
|
||||||
|
argv[i] = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* save the 3rd and later args */
|
||||||
|
for (j=3; (*argv_p)[j] != NULL; ++j, ++i) {
|
||||||
|
argv[i] = (*argv_p)[j];
|
||||||
|
}
|
||||||
|
argv[i] = NULL;
|
||||||
|
|
||||||
|
/* set argc */
|
||||||
|
argc = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* catch the case of #!/usr/local/bin -Stuff_not_extra_args
|
||||||
|
*/
|
||||||
|
} else if (argv[1][2] != '\0') {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* we are too early in processing to call
|
||||||
|
* libcalc_call_me_last() - nothing to cleanup
|
||||||
|
*/
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: malformed #! line, -S must be "
|
||||||
|
"followed by space or newline\n",
|
||||||
|
shellfile);
|
||||||
|
exit(1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Only -S was given in the #!/usr/local/bin line, so we just
|
||||||
|
* toss the 2nd and 3rd args
|
||||||
|
*/
|
||||||
|
} else {
|
||||||
|
for (i = 3; i <= argc; ++i) {
|
||||||
|
argv[i-2] = argv[i];
|
||||||
|
}
|
||||||
|
argc -= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* return and set the argc, argv, shellfile_p and s_flag values
|
||||||
|
*/
|
||||||
|
*argv_p = argv;
|
||||||
|
*shellfile_p = shellfile;
|
||||||
|
*program_p = shellfile;
|
||||||
|
s_flag = TRUE;
|
||||||
|
return argc;
|
||||||
|
}
|
||||||
|
48
calc.h
48
calc.h
@@ -1,9 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 David I. Bell
|
* calc - definitions for calculator program
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Definitions for calculator program.
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: calc.h,v 29.3 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:48:31
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -14,16 +35,19 @@
|
|||||||
|
|
||||||
#include "value.h"
|
#include "value.h"
|
||||||
|
|
||||||
|
#include "have_const.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Configuration definitions
|
* Configuration definitions
|
||||||
*/
|
*/
|
||||||
#define CALCPATH "CALCPATH" /* environment variable for files */
|
#define CALCPATH "CALCPATH" /* environment variable for files */
|
||||||
#define CALCRC "CALCRC" /* environment variable for startup */
|
#define CALCRC "CALCRC" /* environment variable for startup */
|
||||||
#define CALCBINDINGS "CALCBINDINGS" /* environment variable for hist bindings */
|
#define CALCBINDINGS "CALCBINDINGS" /* env variable for hist bindings */
|
||||||
#define HOME "HOME" /* environment variable for home dir */
|
#define HOME "HOME" /* environment variable for home dir */
|
||||||
#define PAGER "PAGER" /* environment variable for help */
|
#define PAGER "PAGER" /* environment variable for help */
|
||||||
#define SHELL "SHELL" /* environment variable for shell */
|
#define SHELL "SHELL" /* environment variable for shell */
|
||||||
|
#define DEFAULTCALCBINDINGS "bindings" /* default calc bindings file */
|
||||||
#define DEFAULTCALCHELP "help" /* help file that -h prints */
|
#define DEFAULTCALCHELP "help" /* help file that -h prints */
|
||||||
#define DEFAULTSHELL "sh" /* default shell to use */
|
#define DEFAULTSHELL "sh" /* default shell to use */
|
||||||
#define CALCEXT ".cal" /* extension for files read in */
|
#define CALCEXT ".cal" /* extension for files read in */
|
||||||
@@ -139,7 +163,11 @@ extern void getcommands(BOOL toplevel);
|
|||||||
extern void givehelp(char *type);
|
extern void givehelp(char *type);
|
||||||
extern void libcalc_call_me_first(void);
|
extern void libcalc_call_me_first(void);
|
||||||
extern void libcalc_call_me_last(void);
|
extern void libcalc_call_me_last(void);
|
||||||
|
extern BOOL calc_tty(int fd);
|
||||||
|
extern BOOL orig_tty(int fd);
|
||||||
extern void showerrors(void);
|
extern void showerrors(void);
|
||||||
|
extern char *calc_strdup(CONST char *);
|
||||||
|
extern void getshellfile(char *shellfile);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialization
|
* Initialization
|
||||||
@@ -160,16 +188,21 @@ extern jmp_buf jmpbuf; /* for errors */
|
|||||||
extern int p_flag; /* TRUE => pipe mode */
|
extern int p_flag; /* TRUE => pipe mode */
|
||||||
extern int q_flag; /* TRUE => don't execute rc files */
|
extern int q_flag; /* TRUE => don't execute rc files */
|
||||||
extern int u_flag; /* TRUE => unbuffer stdin and stdout */
|
extern int u_flag; /* TRUE => unbuffer stdin and stdout */
|
||||||
extern int d_flag; /* TRUE => disable heading, lib_debug == 0 */
|
extern int d_flag; /* TRUE => disable heading, resource_debug */
|
||||||
extern int c_flag; /* TRUE => continue after error if permitted */
|
extern int c_flag; /* TRUE => continue after error if permitted */
|
||||||
extern int i_flag; /* TRUE => try to go interactive after error */
|
extern int i_flag; /* TRUE => try to go interactive after error */
|
||||||
|
extern int s_flag; /* TRUE => keep args as strings for argv() */
|
||||||
extern int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
extern int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
||||||
extern BOOL abort_now; /* TRUE => try to go interactive */
|
extern BOOL abort_now; /* TRUE => try to go interactive */
|
||||||
|
|
||||||
|
extern int argc_value; /* count of argv[] strings for argv() builtin */
|
||||||
|
extern char **argv_value; /* argv[] strings for argv() builtin */
|
||||||
|
|
||||||
extern char *pager; /* $PAGER or default */
|
extern char *pager; /* $PAGER or default */
|
||||||
extern int stdin_tty; /* TRUE if stdin is a tty */
|
extern int stdin_tty; /* TRUE if stdin is a tty */
|
||||||
extern int havecommands; /* TRUE if have cmd args) */
|
extern int havecommands; /* TRUE if have cmd args) */
|
||||||
extern char *program; /* our name */
|
extern char *program; /* our name */
|
||||||
|
extern char *base_name; /* basename of our name */
|
||||||
extern char cmdbuf[]; /* command line expression */
|
extern char cmdbuf[]; /* command line expression */
|
||||||
|
|
||||||
extern int abortlevel; /* current level of aborts */
|
extern int abortlevel; /* current level of aborts */
|
||||||
@@ -217,7 +250,8 @@ 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 char *calc_minor_patch;
|
||||||
extern char *version(void); /* return version string */
|
extern char *Copyright;
|
||||||
|
extern char *version(void);
|
||||||
|
|
||||||
|
|
||||||
#endif /* !__CALC_H__ */
|
#endif /* !__CALC_H__ */
|
||||||
|
615
calc.man
615
calc.man
@@ -1,13 +1,34 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 1993 David I. Bell and Landon Curt Noll
|
.\" Copyright (C) 1999 Landon Curt Noll
|
||||||
.\" Original man page dated 15nov93
|
.\"
|
||||||
.\" Copyright (c) 1999 David I. Bell and Landon Curt Noll
|
.\" Calc is open software; you can redistribute it and/or modify it under
|
||||||
.\" Permission is granted to use, distribute, or modify this source,
|
.\" the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
.\" provided that this copyright notice remains intact.
|
.\" 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: calc.man,v 29.5 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
|
||||||
|
.\"
|
||||||
|
.\" Under source code control: 1991/07/23 05:48:26
|
||||||
|
.\" File existed as early as: 1991
|
||||||
|
.\"
|
||||||
|
.\" chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
.\" Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
.\"
|
.\"
|
||||||
.\" calculator by David I. Bell
|
.\" calculator by David I. Bell
|
||||||
.\" man page by Landon Noll
|
.\" man page by Landon Noll
|
||||||
.TH calc 1 "^..^" "15Oct1999"
|
.\"
|
||||||
|
.TH calc 1 "^..^" "1999-11-30"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
calc \- arbitrary precision calculator
|
calc \- arbitrary precision calculator
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -15,7 +36,7 @@ calc \- arbitrary precision calculator
|
|||||||
.RB [ \-c ]
|
.RB [ \-c ]
|
||||||
.RB [ \-C ]
|
.RB [ \-C ]
|
||||||
.RB [ \-d ]
|
.RB [ \-d ]
|
||||||
.RB [ -D\ \&calc_debug[:lib_debug:[user_debug]] ]
|
.RB [ -D\ \&calc_debug[:resource_debug[:user_debug]] ]
|
||||||
.br
|
.br
|
||||||
.in +5n
|
.in +5n
|
||||||
.RB [ \-e ]
|
.RB [ \-e ]
|
||||||
@@ -25,15 +46,18 @@ calc \- arbitrary precision calculator
|
|||||||
.RB [ \-n ]
|
.RB [ \-n ]
|
||||||
.RB [ \-p ]
|
.RB [ \-p ]
|
||||||
.RB [ \-q ]
|
.RB [ \-q ]
|
||||||
|
.RB [ \-s ]
|
||||||
.RB [ \-u ]
|
.RB [ \-u ]
|
||||||
.RB [ \-v ]
|
.RB [ \-v ]
|
||||||
.br
|
.br
|
||||||
.RB [ calc_cmd\ \&.\|.\|. ]
|
.RB [ calc_cmd\ \&.\|.\|. ]
|
||||||
.in -5n
|
.in -5n
|
||||||
|
.sp
|
||||||
|
\fI#!${BINDIR}/calc\fP\ \fB\-S\fP\ [other_flags\ \&...]
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
CALC COMMAND LINE
|
CALC OPTIONS
|
||||||
.PP
|
.PP
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
@@ -65,30 +89,31 @@ cause
|
|||||||
to try to process each line being read
|
to try to process each line being read
|
||||||
despite the errors that it encounters.
|
despite the errors that it encounters.
|
||||||
.sp 1
|
.sp 1
|
||||||
By default, calc startup scripts ($CALCRC) are silently
|
By default, calc startup resource files are silently
|
||||||
ignored if not found.
|
ignored if not found.
|
||||||
This flag will report missing
|
This flag will report missing
|
||||||
startup scripts unless
|
startup resource files unless
|
||||||
.B \-d
|
.B \-d
|
||||||
is also given.
|
is also given.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-C
|
.B \-C
|
||||||
Permit the execution of custom builtin functions. Without
|
Permit the execution of custom builtin functions.
|
||||||
|
Without
|
||||||
this flag, calling the custom() builtin function will
|
this flag, calling the custom() builtin function will
|
||||||
simply generate an error.
|
simply generate an error.
|
||||||
.sp 1
|
.sp 1
|
||||||
Use if this flag may cause
|
Use of this flag may cause
|
||||||
.B calc
|
.B calc
|
||||||
to execute functions that
|
to execute functions
|
||||||
are non-standard and that are not portable. Custom builtin
|
that are non-standard and that are not portable. Custom builtin
|
||||||
functions are disabled by default for this reason.
|
functions are disabled by default for this reason.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-d
|
.B \-d
|
||||||
Disable the printing of the opening title. The printing
|
Disable the printing of the opening title. The printing
|
||||||
of library debug and informational messages is also disabled
|
of resource file debug and informational messages is also disabled
|
||||||
as if \fBconfig("lib_debug", 0)\fP had been executed.
|
as if \fBconfig("resource_debug", 0)\fP had been executed.
|
||||||
.sp 1
|
.sp 1
|
||||||
For example:
|
For example:
|
||||||
.sp 1
|
.sp 1
|
||||||
@@ -122,14 +147,14 @@ It's nearly ten past six.
|
|||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
This flag disables the reporting of missing calc
|
This flag disables the reporting of missing calc
|
||||||
startup scripts ($CALCRC).
|
startup resource files.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.BR -D " calc_debug[:lib_debug:[user_debug]]"
|
.BR -D " calc_debug[:resource_debug[:user_debug]]"
|
||||||
Force the initial value of config("calc_debug"),
|
Force the initial value of config("calc_debug"),
|
||||||
config("lib_debug") and config("user_debug").
|
config("resource_debug") and config("user_debug").
|
||||||
.sp 1
|
.sp 1
|
||||||
The : separated strings are interpreted as signed 32 bit values.
|
The : separated strings are interpreted as signed 32 bit integers.
|
||||||
After an optional leading sign a leading zero indicates octal
|
After an optional leading sign a leading zero indicates octal
|
||||||
conversion, and a leading ``0x'' or ``0X'' hexadecimal
|
conversion, and a leading ``0x'' or ``0X'' hexadecimal
|
||||||
conversion. Otherwise, decimal conversion is assumed.
|
conversion. Otherwise, decimal conversion is assumed.
|
||||||
@@ -137,9 +162,9 @@ conversion. Otherwise, decimal conversion is assumed.
|
|||||||
By default,
|
By default,
|
||||||
.I calc_debug
|
.I calc_debug
|
||||||
is 0,
|
is 0,
|
||||||
.I lib_debug
|
.I resource_debug
|
||||||
is 3 and
|
is 3 and
|
||||||
.I lib_debug
|
.I user_debug
|
||||||
is 0.
|
is 0.
|
||||||
.sp 1
|
.sp 1
|
||||||
For more information use the following
|
For more information use the following
|
||||||
@@ -172,14 +197,14 @@ See
|
|||||||
.TP
|
.TP
|
||||||
.B \-i
|
.B \-i
|
||||||
Become interactive if possible.
|
Become interactive if possible.
|
||||||
Be default, if
|
If
|
||||||
.I calc_cmd
|
.I calc_cmd
|
||||||
args are given,
|
args are given,
|
||||||
.B calc
|
.B calc
|
||||||
will execute them and exit.
|
by default, calc will execute them and exit.
|
||||||
This flag args are given,
|
This flag causes
|
||||||
.B calc
|
.B calc
|
||||||
will execute them and exit.
|
to drop into interactive mode after the commands are executed.
|
||||||
This flag will cause
|
This flag will cause
|
||||||
.B calc
|
.B calc
|
||||||
to drop into interactive mode after the
|
to drop into interactive mode after the
|
||||||
@@ -269,7 +294,7 @@ unknown mode.
|
|||||||
will attempt to read or write them if directed.
|
will attempt to read or write them if directed.
|
||||||
.sp 1
|
.sp 1
|
||||||
If the mode disables opening of files for reading, then
|
If the mode disables opening of files for reading, then
|
||||||
the startup library scripts are disabled as of
|
the startup resource files are disabled as if
|
||||||
.B \-q
|
.B \-q
|
||||||
was given.
|
was given.
|
||||||
The reading of key bindings is also disabled
|
The reading of key bindings is also disabled
|
||||||
@@ -305,7 +330,15 @@ flag overrides
|
|||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-q
|
.B \-q
|
||||||
Disable the use of the $CALCRC startup scripts.
|
Disable the reading of the startup scripts.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-s
|
||||||
|
By default, all
|
||||||
|
.I calc_cmd
|
||||||
|
args are evaluated and executed.
|
||||||
|
This flag will disable their evaluation and instead make
|
||||||
|
them available as strings for the argv() builtin function.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-u
|
.B \-u
|
||||||
@@ -317,49 +350,185 @@ Print the
|
|||||||
.B calc
|
.B calc
|
||||||
version number and exit.
|
version number and exit.
|
||||||
.PP
|
.PP
|
||||||
Without
|
|
||||||
.IR calc_cmd ,
|
\&
|
||||||
|
.br
|
||||||
|
CALC COMMAND LINE
|
||||||
|
.PP
|
||||||
|
With no
|
||||||
|
.I calc_cmd
|
||||||
|
arguments,
|
||||||
.B calc
|
.B calc
|
||||||
operates interactively.
|
operates interactively.
|
||||||
If one or more
|
If one or more
|
||||||
.I calc_cmd
|
arguments are given on the command line and
|
||||||
are given on the command line,
|
.B \-s
|
||||||
|
is NOT given, then
|
||||||
.B calc
|
.B calc
|
||||||
will execute them and exit.
|
will read and execute them and either attempt
|
||||||
If
|
to go interactive according as the
|
||||||
.B \-i
|
.B \-i
|
||||||
|
flag was present or absent.
|
||||||
|
.sp
|
||||||
|
If
|
||||||
|
.B \-s
|
||||||
is given,
|
is given,
|
||||||
.B calc
|
.B calc
|
||||||
will attempt to become interactive
|
will not evaluate any
|
||||||
even of one or more
|
|
||||||
.I calc_cmd
|
.I calc_cmd
|
||||||
are given on the command line.
|
arguments but instead make them available
|
||||||
|
as strings to the argv() builtin function.
|
||||||
|
|
||||||
|
Sufficiently simple commands with no no characters like
|
||||||
|
parentheses, brackets, semicolons, '*', which have special
|
||||||
|
interpretations in UNIX shells may be entered, possibly with
|
||||||
|
spaces, until the terminating newline.
|
||||||
|
For example:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
calc 23 + 47
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
should respond with display of 70, but
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
calc 23 * 47
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
may fail.
|
||||||
|
Such cases can usually be made to work as expected by
|
||||||
|
enclosing the command between single marks as in:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
calc '23 * 47'
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
and
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
calc 'print sqrt(2), exp(1)'
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp
|
||||||
|
If '!' is to be used to indicate the factorial function, for
|
||||||
|
shells like
|
||||||
|
.BI csh (1)
|
||||||
|
for which '!' followed by a non-space character
|
||||||
|
is used for history substitution, it may be necessary to
|
||||||
|
include a space or use a backslash to escape the special
|
||||||
|
meaning of '!'.
|
||||||
|
For example, the command:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
print 27!^2
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
may have to be replaced by:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
print 27! ^2 or print 27\!^2
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
|
||||||
|
\&
|
||||||
|
.br
|
||||||
|
CALC STARTUP FILES
|
||||||
.PP
|
.PP
|
||||||
Normally on startup,
|
Normally on startup,
|
||||||
|
if the environment variable
|
||||||
|
.B $CALCRC
|
||||||
|
is undefined and
|
||||||
.B calc
|
.B calc
|
||||||
attempts to execute a collection of
|
is invoked without the
|
||||||
library scripts.
|
|
||||||
The environment variable $CALCRC (if non-existent
|
|
||||||
then a compiled in value) contains a : separated list of startup
|
|
||||||
library scripts.
|
|
||||||
No error conditions are produced if these startup
|
|
||||||
library scripts are not found.
|
|
||||||
.PP
|
|
||||||
If the mode disables opening of files for reading, then the startup
|
|
||||||
library scripts are disabled as of
|
|
||||||
.B \-q
|
.B \-q
|
||||||
was given and $CALCRC as well
|
flag, or if
|
||||||
as the default compiled in value are ignored.
|
.B $CALCRC
|
||||||
|
is defined and calc is invoked with
|
||||||
|
.BR \-e ,
|
||||||
|
.B calc
|
||||||
|
looks for a file "startup" in the calc resource directory
|
||||||
|
.B .calcrc
|
||||||
|
in the user's home directory, and
|
||||||
|
.B .calcinit in the current directory.
|
||||||
|
If one or more of these are found, they are read in succession as
|
||||||
|
.B calc
|
||||||
|
scripts and their commands executed.
|
||||||
|
When defined,
|
||||||
|
.B $CALCRC
|
||||||
|
is to contain a ':' separated list of names of files,
|
||||||
|
and if calc is then invoked without either the
|
||||||
|
.B \-q
|
||||||
|
or
|
||||||
|
.B \-e
|
||||||
|
flags, these files are read in succession and their commands executed.
|
||||||
|
No error condition is produced if a listed file is not found.
|
||||||
|
.sp
|
||||||
|
If the mode specified by
|
||||||
|
.B \-m
|
||||||
|
disables opening of files for reading, then the reading of startup
|
||||||
|
files is also disabled as if
|
||||||
|
.B \-q
|
||||||
|
was given.
|
||||||
|
|
||||||
|
\&
|
||||||
|
.br
|
||||||
|
CALC FILE SEARCH PATH
|
||||||
.PP
|
.PP
|
||||||
Filenames are subject to ``~'' expansion (see below).
|
If the environment variable
|
||||||
The
|
.B $CALCPATH
|
||||||
environment variable $CALCPATH (if non-existent then a compiled in
|
is undefined, or if it
|
||||||
value) contains a : separated list of search directories.
|
is defined and
|
||||||
If a
|
.B calc
|
||||||
file does not begin with /, ~ or ./, then it is searched for under
|
is invoked with the
|
||||||
each directory listed in the $CALCPATH.
|
.B \-e
|
||||||
It is an error if no such
|
flag, when a file name not beginning with
|
||||||
readable file is found.
|
.BR / ,
|
||||||
|
.B ~
|
||||||
|
or
|
||||||
|
.BR ./ ,
|
||||||
|
is specified as in:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
calc read myfile
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
.B calc
|
||||||
|
searches in succession:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
./myfile
|
||||||
|
./myfile.cal
|
||||||
|
${LIBDIR}/myfile
|
||||||
|
${LIBDIR}/myfile.cal
|
||||||
|
${CUSTOMLIBDIR}/myfile
|
||||||
|
${CUSTOMLIBDIR}/myfile.cal
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
If the file is found, the
|
||||||
|
search stops and the commands in the file are executed.
|
||||||
|
It is an error if no readable file with the specified name is found.
|
||||||
|
An alternative search path can be specified by defining
|
||||||
|
.B $CALCPATH
|
||||||
|
in the same way as PATH is defined, as a ':' separated
|
||||||
|
list of directories, and then invoking
|
||||||
|
.B calc
|
||||||
|
without the
|
||||||
|
.B \-e
|
||||||
|
flag.
|
||||||
.PP
|
.PP
|
||||||
.B Calc
|
.B Calc
|
||||||
treats all open files, other than stdin, stdout and
|
treats all open files, other than stdin, stdout and
|
||||||
@@ -392,6 +561,138 @@ help config
|
|||||||
.in -5n
|
.in -5n
|
||||||
.sp 1
|
.sp 1
|
||||||
.PP
|
.PP
|
||||||
|
|
||||||
|
\&
|
||||||
|
.br
|
||||||
|
SHELL SCRIPT MODE
|
||||||
|
.PP
|
||||||
|
If first line of an executable file begins
|
||||||
|
.B #!
|
||||||
|
followed by the absolute pathname of the
|
||||||
|
.B calc
|
||||||
|
program and the flag
|
||||||
|
.B \-S
|
||||||
|
as in:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
\fI#!${BINDIR}/calc\fP\ \fB\-S\fP\ [other_flags\ \&...]
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
the rest of the file will be processed in
|
||||||
|
.BR "shell script mode" .
|
||||||
|
Note that
|
||||||
|
.B \-S
|
||||||
|
(UPPER CASE
|
||||||
|
.BR \-S )
|
||||||
|
must be the first \-flag on the ``#!'' line.
|
||||||
|
Any other optional
|
||||||
|
.B "other_flags"
|
||||||
|
must come after
|
||||||
|
the
|
||||||
|
.BR \-S .
|
||||||
|
.sp 1
|
||||||
|
In
|
||||||
|
.B "shell script mode"
|
||||||
|
the contents of the file are read and
|
||||||
|
executed as if they were in a file being processed by a read
|
||||||
|
command, except that a "command" beginning with '#' followed by
|
||||||
|
whitespace and ending at the next newline is treated as a comment.
|
||||||
|
Any optional
|
||||||
|
.B "other_flags"
|
||||||
|
will be parsed first followed by
|
||||||
|
the later lines within the script itself.
|
||||||
|
.sp 1
|
||||||
|
In
|
||||||
|
.BR "shell script mode" ,
|
||||||
|
.B \-s
|
||||||
|
(lower case
|
||||||
|
.BR \-s )
|
||||||
|
is always assumed.
|
||||||
|
In addition,
|
||||||
|
.B \-d
|
||||||
|
and
|
||||||
|
.B \-p
|
||||||
|
are automatically set if
|
||||||
|
.B \-i
|
||||||
|
is not given.
|
||||||
|
.sp 1
|
||||||
|
For example, if
|
||||||
|
the file
|
||||||
|
.BR /tmp/mersenne :
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
\fI#!${BINDIR}/calc\fP\ \fB\-S\fP\ \&\fB\-q\fP
|
||||||
|
#
|
||||||
|
# mersenne - an example of a calc \fBshell script file\fP
|
||||||
|
|
||||||
|
/* parse args */
|
||||||
|
if (argv() != 1) {
|
||||||
|
fprintf(files(2), "usage: %s exp\\n", config("program"));
|
||||||
|
abort "must give one exponent arg";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* print the mersenne number */
|
||||||
|
print "2^": argv(0) : "-1 =", 2^eval(argv(0))-1;
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
is made an executable file by:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
chmod +x /tmp/mersenne
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
then the command line:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
/tmp/mersenne 127
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
will print:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
2^127-1 = 170141183460469231731687303715884105727
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
Note that because
|
||||||
|
.B \-s
|
||||||
|
is assumed in
|
||||||
|
.B "shell script mode"
|
||||||
|
and non-dashed args are made available as
|
||||||
|
strings via the
|
||||||
|
.BR argv ()
|
||||||
|
builtin function.
|
||||||
|
Therefore:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
2^eval(argv(0))-1
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
will print the decimal value of 2^n-1
|
||||||
|
but
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
2^argv(0)-1
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
will not.
|
||||||
|
.PP
|
||||||
|
|
||||||
|
\&
|
||||||
|
.br
|
||||||
DATA TYPES
|
DATA TYPES
|
||||||
.PP
|
.PP
|
||||||
Fundamental builtin data types include integers, real numbers,
|
Fundamental builtin data types include integers, real numbers,
|
||||||
@@ -417,6 +718,9 @@ help obj
|
|||||||
show objfuncs
|
show objfuncs
|
||||||
.in -1.0i
|
.in -1.0i
|
||||||
.PP
|
.PP
|
||||||
|
|
||||||
|
\&
|
||||||
|
.br
|
||||||
VARIABLES
|
VARIABLES
|
||||||
.PP
|
.PP
|
||||||
Variables in \fIcalc\fP are typeless.
|
Variables in \fIcalc\fP are typeless.
|
||||||
@@ -442,6 +746,9 @@ help list
|
|||||||
show globals
|
show globals
|
||||||
.in -1.0i
|
.in -1.0i
|
||||||
.PP
|
.PP
|
||||||
|
|
||||||
|
\&
|
||||||
|
.br
|
||||||
INPUT/OUTPUT
|
INPUT/OUTPUT
|
||||||
.PP
|
.PP
|
||||||
A leading ``0x'' implies a hexadecimal value,
|
A leading ``0x'' implies a hexadecimal value,
|
||||||
@@ -474,6 +781,9 @@ command:
|
|||||||
help file
|
help file
|
||||||
.in -1.0i
|
.in -1.0i
|
||||||
.PP
|
.PP
|
||||||
|
|
||||||
|
\&
|
||||||
|
.br
|
||||||
CALC LANGUAGE
|
CALC LANGUAGE
|
||||||
.PP
|
.PP
|
||||||
The \fIcalc\fP language is a C-like language.
|
The \fIcalc\fP language is a C-like language.
|
||||||
@@ -484,7 +794,7 @@ These commands are very similar to their counterparts in C.
|
|||||||
The language also include a number of commands particular
|
The language also include a number of commands particular
|
||||||
to \fIcalc\fP itself.
|
to \fIcalc\fP itself.
|
||||||
These include commands such as function definition, help,
|
These include commands such as function definition, help,
|
||||||
reading in library scripts, dump files to a file, error notification,
|
reading in resource files, dump files to a file, error notification,
|
||||||
configuration control and status.
|
configuration control and status.
|
||||||
.PP
|
.PP
|
||||||
For more information use the following
|
For more information use the following
|
||||||
@@ -507,29 +817,54 @@ help config
|
|||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
.PD 0
|
.PD 0
|
||||||
.TP 20
|
.TP 5
|
||||||
|
${BINDIR}/calc
|
||||||
|
calc binary
|
||||||
|
.sp 1
|
||||||
|
.TP 5
|
||||||
|
${SCRIPTDIR}/*
|
||||||
|
calc shell scripts
|
||||||
|
.sp 1
|
||||||
|
.TP 5
|
||||||
${LIBDIR}/*.cal
|
${LIBDIR}/*.cal
|
||||||
library scripts shipped with
|
calc standard resource files
|
||||||
.B calc
|
.sp 1
|
||||||
.br
|
.TP 5
|
||||||
.sp
|
|
||||||
.TP 20
|
|
||||||
${LIBDIR}/help/*
|
${LIBDIR}/help/*
|
||||||
help files
|
help files
|
||||||
.br
|
.sp 1
|
||||||
.sp
|
.TP 5
|
||||||
.TP 20
|
|
||||||
${LIBDIR}/bindings
|
${LIBDIR}/bindings
|
||||||
command line editor bindings
|
non-GNU-readline command line editor bindings
|
||||||
.sp
|
.sp 1
|
||||||
|
.TP 5
|
||||||
|
${INCDIRCALC}/*.h
|
||||||
|
include files for C interface use
|
||||||
|
.sp 1
|
||||||
|
.TP 5
|
||||||
|
${LIBDIR}/libcalc.a
|
||||||
|
calc binary link library
|
||||||
|
.sp 1
|
||||||
|
.TP 5
|
||||||
|
${LIBDIR}/libcustcalc.a
|
||||||
|
custom binary link library
|
||||||
|
.sp 1
|
||||||
|
.TP 5
|
||||||
|
${CUSTOMLIBDIR}/*.cal
|
||||||
|
custom resource files
|
||||||
|
.sp 1
|
||||||
|
.TP 5
|
||||||
|
${CUSTOMHELPDIR}/*
|
||||||
|
custom help files
|
||||||
|
.sp 1
|
||||||
.SH ENVIRONMENT
|
.SH ENVIRONMENT
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
.PD 0
|
.PD 0
|
||||||
.TP 5
|
.TP 5
|
||||||
CALCPATH
|
CALCPATH
|
||||||
A :-separated list of directories used to search for
|
A :-separated list of directories used to search for calc
|
||||||
scripts filenames that do not begin with /, ./ or ~.
|
resource filenames that do not begin with /, ./ or ~.
|
||||||
.br
|
.br
|
||||||
.sp
|
.sp
|
||||||
Default value: ${CALCPATH}
|
Default value: ${CALCPATH}
|
||||||
@@ -555,9 +890,10 @@ line, or \fI\-m\fP disallows opening files for reading),
|
|||||||
reads
|
reads
|
||||||
key bindings from the filename specified
|
key bindings from the filename specified
|
||||||
by this environment variable.
|
by this environment variable.
|
||||||
.br
|
The key binding file is searched for along the $CALCPATH list
|
||||||
|
of directories.
|
||||||
.sp
|
.sp
|
||||||
Default value: ${CALCBINDINGS}
|
Default value: binding
|
||||||
.sp
|
.sp
|
||||||
This variable is not used if calc was compiled with GNU-readline support.
|
This variable is not used if calc was compiled with GNU-readline support.
|
||||||
In that case, the standard readline mechanisms (see readline(3)) are used.
|
In that case, the standard readline mechanisms (see readline(3)) are used.
|
||||||
@@ -565,12 +901,17 @@ In that case, the standard readline mechanisms (see readline(3)) are used.
|
|||||||
.SH CREDIT
|
.SH CREDIT
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
The majority of
|
The main chunk of
|
||||||
.B calc
|
.B calc
|
||||||
was written by David I. Bell.
|
was written by David I. Bell.
|
||||||
.sp
|
.sp
|
||||||
.B Calc
|
The
|
||||||
archives and calc-tester mailing list maintained by Landon Curt Noll.
|
.B calc
|
||||||
|
primary mirror, calc mailing list and calc bug report
|
||||||
|
processing is performed by Landon Curt Noll.
|
||||||
|
.sp
|
||||||
|
Landon Curt Noll maintains the master reference source, performs
|
||||||
|
release control functions as well as other calc maintenance functions.
|
||||||
.sp
|
.sp
|
||||||
Thanks for suggestions and encouragement from Peter Miller,
|
Thanks for suggestions and encouragement from Peter Miller,
|
||||||
Neil Justusson, and Landon Noll.
|
Neil Justusson, and Landon Noll.
|
||||||
@@ -585,40 +926,125 @@ Ernest also supplied the original text for many of the help files.
|
|||||||
.sp
|
.sp
|
||||||
Portions of this program are derived from an earlier set of
|
Portions of this program are derived from an earlier set of
|
||||||
public domain arbitrarily precision routines which was posted
|
public domain arbitrarily precision routines which was posted
|
||||||
to the net around 1984. By now, there is almost no recognizable
|
to the net around 1984.
|
||||||
|
By now, there is almost no recognizable
|
||||||
code left from that original source.
|
code left from that original source.
|
||||||
.sp
|
.sp
|
||||||
Most of this source and binary has one of the following copyrights:
|
.SH "COPYING / CALC GNU LESSER GENERAL PUBLIC LICENSE"
|
||||||
|
\&
|
||||||
|
.sp
|
||||||
|
Calc is open software, and is
|
||||||
|
covered under version 2.1 of the GNU Lesser General Public License.
|
||||||
|
You are
|
||||||
|
welcome to change it and/or distribute copies of it under certain
|
||||||
|
conditions.
|
||||||
|
The calc commands:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
Copyright (c) 19xx David I. Bell
|
.nf
|
||||||
.br
|
help copyright
|
||||||
Copyright (c) 19xx David I. Bell and Landon Curt Noll
|
help copying
|
||||||
.br
|
help copying-lgpl
|
||||||
Copyright (c) 19xx Landon Curt Noll
|
.fi
|
||||||
.br
|
|
||||||
Copyright (c) 19xx Ernest Bowen and Landon Curt Noll
|
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
Permission is granted to use, distribute, or modify this source,
|
should display the contents of the COPYING and COPYING-LGPL files.
|
||||||
provided that this copyright notice remains intact.
|
Those files contain information about the calc's GNU Lesser General
|
||||||
|
Public License, and in particular the conditions under which you
|
||||||
|
are allowed to change it and/or distribute copies of it.
|
||||||
|
.sp
|
||||||
|
You should have received a copy of the version 2.1 of the GNU Lesser General
|
||||||
|
Public License.
|
||||||
|
If you do not have these files, write to:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
59 Temple Place
|
||||||
|
Suite 330
|
||||||
|
Boston, MA 02111-1307
|
||||||
|
USA
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
Calc is copyrighted in several different ways.
|
||||||
|
These ways include:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
Copyright (C) year David I. Bell
|
||||||
|
Copyright (C) year David I. Bell and Landon Curt Noll
|
||||||
|
Copyright (C) year David I. Bell and Ernest Bowen
|
||||||
|
Copyright (C) year David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||||
|
Copyright (C) year Landon Curt Noll
|
||||||
|
Copyright (C) year Ernest Bowen and Landon Curt Noll
|
||||||
|
Copyright (C) year Ernest Bowen
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
This man page is:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
Copyright (C) 1999 Landon Curt Noll
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
and is covered under version 2.1 GNU Lesser General
|
||||||
|
Public License.
|
||||||
|
.sp
|
||||||
|
.SH "BUG REPORTS / BUG FIXES / ENHANCEMENTS"
|
||||||
|
\&
|
||||||
|
.br
|
||||||
.sp
|
.sp
|
||||||
Send comments, suggestions, bug fixes, enhancements
|
Send comments, suggestions, bug fixes, enhancements
|
||||||
and interesting
|
and interesting
|
||||||
.B calc
|
.B calc
|
||||||
scripts that you would like you see included
|
resource files,
|
||||||
|
.B calc
|
||||||
|
shell scripts that you would like you see included
|
||||||
in future distributions to:
|
in future distributions to:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
calc-tester@postofc.corp.sgi.com
|
.nf
|
||||||
|
calc-contrib at asthe dot com
|
||||||
|
.fi
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
|
Bug reports are sent to:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
calc-bugs 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
|
||||||
|
See the
|
||||||
|
.I BUGS
|
||||||
|
source file or use the
|
||||||
|
.I calc
|
||||||
|
command:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
help bugs
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
for more information about bug reporting.
|
||||||
|
.sp
|
||||||
|
.SH "CALC WEB SITE / MAILING LIST"
|
||||||
|
\&
|
||||||
|
.br
|
||||||
Landon Noll maintains the the
|
Landon Noll maintains the the
|
||||||
.B calc
|
.B calc
|
||||||
web site is located at:
|
web site is located at:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
http://reality.sgi.com/chongo/tech/comp/calc
|
http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
One may join the
|
One may join the
|
||||||
@@ -626,7 +1052,12 @@ One may join the
|
|||||||
testing group by sending a request to:
|
testing group by sending a request to:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
calc-tester-request@postofc.corp.sgi.com
|
.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
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
Your message body (not the subject) should consist of:
|
Your message body (not the subject) should consist of:
|
||||||
|
123
calc_errno.c
123
calc_errno.c
@@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
* errno - Determine how to declare errno, sys_errlist and sys_nerr
|
|
||||||
*
|
|
||||||
* On most machines: errno sys_errlist and sys_nerr are declared
|
|
||||||
* by either <stdio.h> and/or <errno.h>. But some systems declare
|
|
||||||
* them somewhere else or do not declare them at all!
|
|
||||||
*
|
|
||||||
* If the system were doing a proper job in headers, this should declare them:
|
|
||||||
*
|
|
||||||
* #include <stdio.h>
|
|
||||||
* #include <errno.h>
|
|
||||||
*
|
|
||||||
* But one some systems one must explicitly declare them as:
|
|
||||||
*
|
|
||||||
* extern int errno;
|
|
||||||
* extern const char *const sys_errlist[];
|
|
||||||
* extern int sys_nerr;
|
|
||||||
*
|
|
||||||
* and on some old systems they must be explicitly and incorrectly declared as:
|
|
||||||
*
|
|
||||||
* extern int errno;
|
|
||||||
* extern char *sys_errlist[];
|
|
||||||
* extern int sys_nerr;
|
|
||||||
*
|
|
||||||
* The purpose of this utility is try and find the right way to declare
|
|
||||||
* them and to output the middle of a header file called calc_errno.h.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (c) 1999 by Landon Curt Noll. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
|
||||||
* supporting documentation
|
|
||||||
* source copies
|
|
||||||
* source works derived from this source
|
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
|
||||||
* chongo was here /\../\
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#if defined(TRY_ERRNO_NO_DECL)
|
|
||||||
# include <errno.h>
|
|
||||||
#endif /* TRY_ERRNO_NO_DECL */
|
|
||||||
|
|
||||||
int
|
|
||||||
main(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
#if defined(TRY_ERRNO_NO_DECL)
|
|
||||||
printf("/*\n");
|
|
||||||
printf(" * The following comments were produced by calc_errno\n");
|
|
||||||
printf(" * in an effort to see if these values were correctly\n");
|
|
||||||
printf(" * declared when calc_errno.c was compiled.\n");
|
|
||||||
printf(" */\n\n");
|
|
||||||
printf("/* Initially errno is %d */\n", errno);
|
|
||||||
printf("/* There are %d entries in sys_errlist[] */\n", sys_nerr);
|
|
||||||
printf("/* The 2nd sys_errlist entry is \"%s\" */\n\n", sys_errlist[1]);
|
|
||||||
printf("/*\n");
|
|
||||||
printf(" * Based on the above, calc_errno now knows\n");
|
|
||||||
printf(" * how to declare errno and friends.\n");
|
|
||||||
printf(" */\n\n");
|
|
||||||
printf("#include <stdio.h>\n");
|
|
||||||
printf("#include <errno.h>\n");
|
|
||||||
#elif defined(TRY_ERRNO_OLD_DECL)
|
|
||||||
extern int errno; /* last system error */
|
|
||||||
extern char *sys_errlist[]; /* system error messages */
|
|
||||||
extern int sys_nerr; /* number of system errors*/
|
|
||||||
|
|
||||||
printf("/*\n");
|
|
||||||
printf(" * The following comments were produced by calc_errno\n");
|
|
||||||
printf(" * in an effort to see if these values were correctly\n");
|
|
||||||
printf(" * declared when calc_errno.c was compiled.\n");
|
|
||||||
printf(" */\n\n");
|
|
||||||
printf("/* Initially errno is %d */\n", errno);
|
|
||||||
printf("/* There are %d entries in sys_errlist[] */\n", sys_nerr);
|
|
||||||
printf("/* The 2nd sys_errlist entry is \"%s\" */\n\n", sys_errlist[1]);
|
|
||||||
printf("/*\n");
|
|
||||||
printf(" * Based on the above, calc_errno now knows\n");
|
|
||||||
printf(" * how to declare errno and friends.\n");
|
|
||||||
printf(" */\n\n");
|
|
||||||
printf("extern int errno;\t\t/* last system error */\n");
|
|
||||||
printf("extern char *sys_errlist[];\t"
|
|
||||||
"/* system error messages */\n");
|
|
||||||
printf("extern int sys_nerr;\t\t/* number of system errors*/\n");
|
|
||||||
#else /* assume defined(TRY_ERRNO_STD_DECL) */
|
|
||||||
extern int errno; /* last system error */
|
|
||||||
extern const char *const sys_errlist[]; /* system error messages */
|
|
||||||
extern int sys_nerr; /* number of system errors*/
|
|
||||||
|
|
||||||
printf("/*\n");
|
|
||||||
printf(" * The following comments were produced by calc_errno\n");
|
|
||||||
printf(" * in an effort to see if these values were correctly\n");
|
|
||||||
printf(" * declared when calc_errno.c was compiled.\n");
|
|
||||||
printf(" */\n\n");
|
|
||||||
printf("/* Initially errno is %d */\n", errno);
|
|
||||||
printf("/* There are %d entries in sys_errlist[] */\n", sys_nerr);
|
|
||||||
printf("/* The 2nd sys_errlist entry is \"%s\" */\n\n", sys_errlist[1]);
|
|
||||||
printf("/*\n");
|
|
||||||
printf(" * Based on the above, calc_errno now knows\n");
|
|
||||||
printf(" * how to declare errno and friends.\n");
|
|
||||||
printf(" */\n\n");
|
|
||||||
printf("extern int errno;\t\t\t/* last system error */\n");
|
|
||||||
printf("extern const char *const sys_errlist[];\t"
|
|
||||||
"/* system error messages */\n");
|
|
||||||
printf("extern int sys_nerr;\t\t\t/* number of system errors*/\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* exit(0); */
|
|
||||||
return 0;
|
|
||||||
}
|
|
39
calcerr.tbl
39
calcerr.tbl
@@ -1,3 +1,31 @@
|
|||||||
|
#
|
||||||
|
# calcerr - error codes and messages
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 Ernest Bowen
|
||||||
|
#
|
||||||
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
# 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: calcerr.tbl,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1996/05/23 17:38:44
|
||||||
|
# File existed as early as: 1996
|
||||||
|
#
|
||||||
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
|
||||||
# This file is used to build calcerr.h include file.
|
# This file is used to build calcerr.h include file.
|
||||||
#
|
#
|
||||||
# Lines should be of the form:
|
# Lines should be of the form:
|
||||||
@@ -336,3 +364,14 @@ E_STRCPY Bad argument type for strcpy
|
|||||||
E_STRNCPY Bad argument type for strncpy
|
E_STRNCPY Bad argument type for strncpy
|
||||||
E_BACKSLASH Bad argument type for unary backslash
|
E_BACKSLASH Bad argument type for unary backslash
|
||||||
E_SETMINUS Bad argument type for setminus
|
E_SETMINUS Bad argument type for setminus
|
||||||
|
E_INDICES1 Bad first argument type for indices
|
||||||
|
E_INDICES2 Bad second argument for indices
|
||||||
|
E_EXP3 Too-large re(argument) for exp
|
||||||
|
E_SINH3 Too-large re(argument) for sinh
|
||||||
|
E_COSH3 Too-large re(argument) for cosh
|
||||||
|
E_SIN3 Too-large im(argument) for sin
|
||||||
|
E_COS3 Too-large im(argument) for cos
|
||||||
|
E_GD3 Infinite or too-large result for gd
|
||||||
|
E_AGD3 Infinite or too-large result for agd
|
||||||
|
E_POWER4 Too-large value for power
|
||||||
|
E_ROOT4 Too-large value for root
|
||||||
|
@@ -1,3 +1,33 @@
|
|||||||
|
#!/usr/bin/sed
|
||||||
|
#
|
||||||
|
# calcerr_c - help produce calcerr.c from calcerr.tbl
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 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: calcerr_c.awk,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_c.awk,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1996/05/24 03:15:35
|
||||||
|
# File existed as early as: 1996
|
||||||
|
#
|
||||||
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
#
|
||||||
BEGIN {
|
BEGIN {
|
||||||
printf("#include <stdio.h>\n");
|
printf("#include <stdio.h>\n");
|
||||||
printf("#include \"calcerr.h\"\n\n");
|
printf("#include \"calcerr.h\"\n\n");
|
||||||
|
@@ -1,3 +1,33 @@
|
|||||||
|
#!/usr/bin/sed
|
||||||
|
#
|
||||||
|
# calcerr_c - help produce calcerr.c from calcerr.tbl
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 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: calcerr_c.sed,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_c.sed,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1996/05/24 03:15:35
|
||||||
|
# File existed as early as: 1996
|
||||||
|
#
|
||||||
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
#
|
||||||
s/#.*//
|
s/#.*//
|
||||||
s/[ ][ ]*$//
|
s/[ ][ ]*$//
|
||||||
/^$/d
|
/^$/d
|
||||||
|
@@ -1,3 +1,33 @@
|
|||||||
|
#!/usr/bin/awk
|
||||||
|
#
|
||||||
|
# calcerr_h - help produce calcerr.h from calcerr.tbl
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 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: calcerr_h.awk,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_h.awk,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1996/05/23 17:38:44
|
||||||
|
# File existed as early as: 1996
|
||||||
|
#
|
||||||
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
#
|
||||||
BEGIN {
|
BEGIN {
|
||||||
ebase = 10000;
|
ebase = 10000;
|
||||||
printf("#define E__BASE %d\t/* calc errors start above here */\n\n", ebase);
|
printf("#define E__BASE %d\t/* calc errors start above here */\n\n", ebase);
|
||||||
|
@@ -1,3 +1,33 @@
|
|||||||
|
#!/usr/bin/sed
|
||||||
|
#
|
||||||
|
# calcerr_h - help produce calcerr.h from calcerr.tbl
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 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: calcerr_h.sed,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr_h.sed,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1996/05/23 17:38:44
|
||||||
|
# File existed as early as: 1996
|
||||||
|
#
|
||||||
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
#
|
||||||
s/#.*//
|
s/#.*//
|
||||||
s/[ ][ ]*$//
|
s/[ ][ ]*$//
|
||||||
/^$/d
|
/^$/d
|
||||||
|
30
check.awk
30
check.awk
@@ -1,3 +1,33 @@
|
|||||||
|
#!/usr/bin/awk
|
||||||
|
#
|
||||||
|
# check - check the regression output for problems
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 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: check.awk,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1996/05/25 22:07:58
|
||||||
|
# File existed as early as: 1996
|
||||||
|
#
|
||||||
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
#
|
||||||
# This awk script will print 3 lines before and after any non-blank line that
|
# This awk script will print 3 lines before and after any non-blank line that
|
||||||
# does not begin with a number. This allows the 'make debug' rule to remove
|
# does not begin with a number. This allows the 'make debug' rule to remove
|
||||||
# all non-interest lines the the 'make check' regression output while providing
|
# all non-interest lines the the 'make check' regression output while providing
|
||||||
|
29
cmath.h
29
cmath.h
@@ -1,9 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 David I. Bell
|
* cmath - data structures for extended precision complex arithmetic
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Data structure declarations for extended precision complex arithmetic.
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: cmath.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/cmath.h,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1993/07/30 19:42:45
|
||||||
|
* File existed as early as: 1993
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
350
codegen.c
350
codegen.c
@@ -1,11 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 David I. Bell
|
* codegen - module to generate opcodes from the input tokens
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Module to generate opcodes from the input tokens.
|
* Copyright (C) 1999 David I. Bell and Ernest Bowen
|
||||||
|
*
|
||||||
|
* Primary author: David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: codegen.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:48:13
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "have_unistd.h"
|
#include "have_unistd.h"
|
||||||
#if defined(HAVE_UNISTD_H)
|
#if defined(HAVE_UNISTD_H)
|
||||||
@@ -132,7 +156,8 @@ getcommands(BOOL toplevel)
|
|||||||
/* previously read and -once was given */
|
/* previously read and -once was given */
|
||||||
break;
|
break;
|
||||||
case -2:
|
case -2:
|
||||||
scanerror(T_NULL, "Maximum input depth reached");
|
scanerror(T_NULL,
|
||||||
|
"Maximum input depth reached");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
scanerror(T_NULL, "Cannot open \"%s\"\n", name);
|
scanerror(T_NULL, "Cannot open \"%s\"\n", name);
|
||||||
@@ -149,7 +174,8 @@ getcommands(BOOL toplevel)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (writeglobals(name))
|
if (writeglobals(name))
|
||||||
scanerror(T_NULL, "Error writing \"%s\"\n", name);
|
scanerror(T_NULL,
|
||||||
|
"Error writing \"%s\"\n", name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_CD:
|
case T_CD:
|
||||||
@@ -157,6 +183,8 @@ getcommands(BOOL toplevel)
|
|||||||
break;
|
break;
|
||||||
case T_NEWLINE:
|
case T_NEWLINE:
|
||||||
case T_SEMICOLON:
|
case T_SEMICOLON:
|
||||||
|
case T_POUNDBANG:
|
||||||
|
case T_POUNDCOMMENT:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -318,7 +346,9 @@ getfunction(void)
|
|||||||
index = addparam(name);
|
index = addparam(name);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
scanerror(T_NULL, "Parameter \"%s\" is already defined", name);
|
scanerror(T_NULL,
|
||||||
|
"Parameter \"%s\" is already defined",
|
||||||
|
name);
|
||||||
}
|
}
|
||||||
type = gettoken();
|
type = gettoken();
|
||||||
if (type == T_ASSIGN) {
|
if (type == T_ASSIGN) {
|
||||||
@@ -348,7 +378,8 @@ getfunction(void)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
scanerror(T_NULL,
|
scanerror(T_NULL,
|
||||||
"Left brace or equals sign expected for function");
|
"Left brace or equals sign "
|
||||||
|
"expected for function");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
endfunc();
|
endfunc();
|
||||||
@@ -393,7 +424,8 @@ getbody(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *defaul
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
rescantoken();
|
rescantoken();
|
||||||
getstatement(contlabel, breaklabel, nextcaselabel, defaultlabel);
|
getstatement(contlabel, breaklabel,
|
||||||
|
nextcaselabel, defaultlabel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -442,7 +474,8 @@ getdeclarations(int symtype)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
scanerror(T_SEMICOLON, "Bad syntax in declaration statement");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Bad syntax in declaration statement");
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -521,11 +554,9 @@ getonevariable(int symtype)
|
|||||||
* | BREAK ';'
|
* | BREAK ';'
|
||||||
* | RETURN assignment ';'
|
* | RETURN assignment ';'
|
||||||
* | GOTO label ';'
|
* | GOTO label ';'
|
||||||
* | MAT name '[' value [ ':' value ] [',' value [ ':' value ] ] ']' ';'
|
|
||||||
* | OBJ type '{' arg [ ',' arg ] ... '}' ] ';'
|
|
||||||
* | OBJ type name [ ',' name ] ';'
|
|
||||||
* | PRINT assignment [, assignment ] ... ';'
|
* | PRINT assignment [, assignment ] ... ';'
|
||||||
* | QUIT [ string ] ';'
|
* | QUIT [ string ] ';'
|
||||||
|
* | ABORT [ string ] ';'
|
||||||
* | SHOW item ';'
|
* | SHOW item ';'
|
||||||
* | body
|
* | body
|
||||||
* | assignment ';'
|
* | assignment ';'
|
||||||
@@ -576,7 +607,8 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
|
|
||||||
case T_CONTINUE:
|
case T_CONTINUE:
|
||||||
if (contlabel == NULL_LABEL) {
|
if (contlabel == NULL_LABEL) {
|
||||||
scanerror(T_SEMICOLON, "CONTINUE not within FOR, WHILE, or DO");
|
scanerror(T_SEMICOLON,
|
||||||
|
"CONTINUE not within FOR, WHILE, or DO");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addoplabel(OP_JUMP, contlabel);
|
addoplabel(OP_JUMP, contlabel);
|
||||||
@@ -584,7 +616,8 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
|
|
||||||
case T_BREAK:
|
case T_BREAK:
|
||||||
if (breaklabel == NULL_LABEL) {
|
if (breaklabel == NULL_LABEL) {
|
||||||
scanerror(T_SEMICOLON, "BREAK not within FOR, WHILE, or DO");
|
scanerror(T_SEMICOLON,
|
||||||
|
"BREAK not within FOR, WHILE, or DO");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addoplabel(OP_JUMP, breaklabel);
|
addoplabel(OP_JUMP, breaklabel);
|
||||||
@@ -626,21 +659,26 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
switch(gettoken()) {
|
switch(gettoken()) {
|
||||||
case T_CONTINUE:
|
case T_CONTINUE:
|
||||||
if (contlabel == NULL_LABEL) {
|
if (contlabel == NULL_LABEL) {
|
||||||
scanerror(T_SEMICOLON, "CONTINUE not within FOR, WHILE, or DO");
|
scanerror(T_SEMICOLON,
|
||||||
|
"CONTINUE not within FOR, "
|
||||||
|
"WHILE, or DO");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addoplabel(OP_JUMPNZ, contlabel);
|
addoplabel(OP_JUMPNZ, contlabel);
|
||||||
break;
|
break;
|
||||||
case T_BREAK:
|
case T_BREAK:
|
||||||
if (breaklabel == NULL_LABEL) {
|
if (breaklabel == NULL_LABEL) {
|
||||||
scanerror(T_SEMICOLON, "BREAK not within FOR, WHILE, or DO");
|
scanerror(T_SEMICOLON,
|
||||||
|
"BREAK not within FOR, "
|
||||||
|
"WHILE, or DO");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addoplabel(OP_JUMPNZ, breaklabel);
|
addoplabel(OP_JUMPNZ, breaklabel);
|
||||||
break;
|
break;
|
||||||
case T_GOTO:
|
case T_GOTO:
|
||||||
if (gettoken() != T_SYMBOL) {
|
if (gettoken() != T_SYMBOL) {
|
||||||
scanerror(T_SEMICOLON, "Missing label in goto");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Missing label in goto");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addop(OP_JUMPNZ);
|
addop(OP_JUMPNZ);
|
||||||
@@ -649,7 +687,8 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
default:
|
default:
|
||||||
addoplabel(OP_JUMPZ, &label1);
|
addoplabel(OP_JUMPZ, &label1);
|
||||||
rescantoken();
|
rescantoken();
|
||||||
getstatement(contlabel, breaklabel, NULL_LABEL, NULL_LABEL);
|
getstatement(contlabel, breaklabel,
|
||||||
|
NULL_LABEL, NULL_LABEL);
|
||||||
if (gettoken() != T_ELSE) {
|
if (gettoken() != T_ELSE) {
|
||||||
setlabel(&label1);
|
setlabel(&label1);
|
||||||
rescantoken();
|
rescantoken();
|
||||||
@@ -657,7 +696,8 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
}
|
}
|
||||||
addoplabel(OP_JUMP, &label2);
|
addoplabel(OP_JUMP, &label2);
|
||||||
setlabel(&label1);
|
setlabel(&label1);
|
||||||
getstatement(contlabel, breaklabel, NULL_LABEL, NULL_LABEL);
|
getstatement(contlabel, breaklabel,
|
||||||
|
NULL_LABEL, NULL_LABEL);
|
||||||
setlabel(&label2);
|
setlabel(&label2);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -707,18 +747,19 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (gettoken() != T_RIGHTPAREN) { /* have 'c' part */
|
if (gettoken() != T_RIGHTPAREN) { /* have 'c' part */
|
||||||
if (label1.l_offset <= 0)
|
if (label1.l_offset < 0)
|
||||||
addoplabel(OP_JUMP, &label3);
|
addoplabel(OP_JUMP, &label3);
|
||||||
setlabel(&label2);
|
setlabel(&label2);
|
||||||
contlabel = &label2;
|
contlabel = &label2;
|
||||||
rescantoken();
|
rescantoken();
|
||||||
(void) getexprlist();
|
(void) getexprlist();
|
||||||
addop(OP_POP);
|
addop(OP_POP);
|
||||||
if (label1.l_offset > 0)
|
if (label1.l_offset >= 0)
|
||||||
addoplabel(OP_JUMP, &label1);
|
addoplabel(OP_JUMP, &label1);
|
||||||
if (gettoken() != T_RIGHTPAREN) {
|
if (gettoken() != T_RIGHTPAREN) {
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
scanerror(T_SEMICOLON, "Right parenthesis expected");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Right parenthesis expected");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -734,15 +775,21 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
case T_WHILE:
|
case T_WHILE:
|
||||||
oldmode = tokenmode(TM_DEFAULT);
|
oldmode = tokenmode(TM_DEFAULT);
|
||||||
contlabel = &label1;
|
contlabel = &label1;
|
||||||
breaklabel = &label2;
|
|
||||||
clearlabel(contlabel);
|
clearlabel(contlabel);
|
||||||
clearlabel(breaklabel);
|
|
||||||
setlabel(contlabel);
|
setlabel(contlabel);
|
||||||
getcondition();
|
getcondition();
|
||||||
|
if (gettoken() != T_SEMICOLON) {
|
||||||
|
breaklabel = &label2;
|
||||||
|
clearlabel(breaklabel);
|
||||||
addoplabel(OP_JUMPZ, breaklabel);
|
addoplabel(OP_JUMPZ, breaklabel);
|
||||||
getstatement(contlabel, breaklabel, NULL_LABEL, NULL_LABEL);
|
rescantoken();
|
||||||
|
getstatement(contlabel, breaklabel,
|
||||||
|
NULL_LABEL, NULL_LABEL);
|
||||||
addoplabel(OP_JUMP, contlabel);
|
addoplabel(OP_JUMP, contlabel);
|
||||||
setlabel(breaklabel);
|
setlabel(breaklabel);
|
||||||
|
} else {
|
||||||
|
addoplabel(OP_JUMPNZ, contlabel);
|
||||||
|
}
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -757,7 +804,8 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
getstatement(contlabel, breaklabel, NULL_LABEL, NULL_LABEL);
|
getstatement(contlabel, breaklabel, NULL_LABEL, NULL_LABEL);
|
||||||
if (gettoken() != T_WHILE) {
|
if (gettoken() != T_WHILE) {
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
scanerror(T_SEMICOLON, "WHILE keyword expected for DO statement");
|
scanerror(T_SEMICOLON,
|
||||||
|
"WHILE keyword expected for DO statement");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setlabel(contlabel);
|
setlabel(contlabel);
|
||||||
@@ -778,12 +826,14 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
getcondition();
|
getcondition();
|
||||||
if (gettoken() != T_LEFTBRACE) {
|
if (gettoken() != T_LEFTBRACE) {
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
scanerror(T_SEMICOLON, "Missing left brace for switch statement");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Missing left brace for switch statement");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addoplabel(OP_JUMP, nextcaselabel);
|
addoplabel(OP_JUMP, nextcaselabel);
|
||||||
rescantoken();
|
rescantoken();
|
||||||
getstatement(contlabel, breaklabel, nextcaselabel, defaultlabel);
|
getstatement(contlabel, breaklabel,
|
||||||
|
nextcaselabel, defaultlabel);
|
||||||
addoplabel(OP_JUMP, breaklabel);
|
addoplabel(OP_JUMP, breaklabel);
|
||||||
setlabel(nextcaselabel);
|
setlabel(nextcaselabel);
|
||||||
if (defaultlabel->l_offset > 0)
|
if (defaultlabel->l_offset > 0)
|
||||||
@@ -796,7 +846,8 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
|
|
||||||
case T_CASE:
|
case T_CASE:
|
||||||
if (nextcaselabel == NULL_LABEL) {
|
if (nextcaselabel == NULL_LABEL) {
|
||||||
scanerror(T_SEMICOLON, "CASE not within SWITCH statement");
|
scanerror(T_SEMICOLON,
|
||||||
|
"CASE not within SWITCH statement");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
clearlabel(&label1);
|
clearlabel(&label1);
|
||||||
@@ -805,25 +856,30 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
clearlabel(nextcaselabel);
|
clearlabel(nextcaselabel);
|
||||||
(void) getexprlist();
|
(void) getexprlist();
|
||||||
if (gettoken() != T_COLON) {
|
if (gettoken() != T_COLON) {
|
||||||
scanerror(T_SEMICOLON, "Colon expected after CASE expression");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Colon expected after CASE expression");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addoplabel(OP_CASEJUMP, nextcaselabel);
|
addoplabel(OP_CASEJUMP, nextcaselabel);
|
||||||
setlabel(&label1);
|
setlabel(&label1);
|
||||||
getstatement(contlabel, breaklabel, nextcaselabel, defaultlabel);
|
getstatement(contlabel, breaklabel,
|
||||||
|
nextcaselabel, defaultlabel);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case T_DEFAULT:
|
case T_DEFAULT:
|
||||||
if (gettoken() != T_COLON) {
|
if (gettoken() != T_COLON) {
|
||||||
scanerror(T_SEMICOLON, "Colon expected after DEFAULT keyword");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Colon expected after DEFAULT keyword");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (defaultlabel == NULL_LABEL) {
|
if (defaultlabel == NULL_LABEL) {
|
||||||
scanerror(T_SEMICOLON, "DEFAULT not within SWITCH statement");
|
scanerror(T_SEMICOLON,
|
||||||
|
"DEFAULT not within SWITCH statement");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (defaultlabel->l_offset > 0) {
|
if (defaultlabel->l_offset > 0) {
|
||||||
scanerror(T_SEMICOLON, "Multiple DEFAULT clauses in SWITCH");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Multiple DEFAULT clauses in SWITCH");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
clearlabel(&label1);
|
clearlabel(&label1);
|
||||||
@@ -831,7 +887,8 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
|||||||
setlabel(defaultlabel);
|
setlabel(defaultlabel);
|
||||||
addop(OP_POP);
|
addop(OP_POP);
|
||||||
setlabel(&label1);
|
setlabel(&label1);
|
||||||
getstatement(contlabel, breaklabel, nextcaselabel, defaultlabel);
|
getstatement(contlabel, breaklabel,
|
||||||
|
nextcaselabel, defaultlabel);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case T_ELSE:
|
case T_ELSE:
|
||||||
@@ -986,14 +1043,18 @@ getobjdeclaration(int symtype)
|
|||||||
switch (gettoken()) {
|
switch (gettoken()) {
|
||||||
case T_SYMBOL:
|
case T_SYMBOL:
|
||||||
if (count == MAXINDICES) {
|
if (count == MAXINDICES) {
|
||||||
scanerror(T_SEMICOLON, "Too many elements in OBJ statement");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Too many elements in OBJ "
|
||||||
|
"statement");
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
index = addelement(tokensymbol());
|
index = addelement(tokensymbol());
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
if (indices[i] == index) {
|
if (indices[i] == index) {
|
||||||
scanerror(T_SEMICOLON, "Duplicate element name \"%s\"", tokensymbol());
|
scanerror(T_SEMICOLON,
|
||||||
|
"Duplicate element name "
|
||||||
|
"\"%s\"", tokensymbol());
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1003,7 +1064,8 @@ getobjdeclaration(int symtype)
|
|||||||
continue;
|
continue;
|
||||||
rescantoken();
|
rescantoken();
|
||||||
if (gettoken() != T_RIGHTBRACE) {
|
if (gettoken() != T_RIGHTBRACE) {
|
||||||
scanerror(T_SEMICOLON, "Bad object type definition");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Bad object type definition");
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1020,7 +1082,8 @@ getobjdeclaration(int symtype)
|
|||||||
case T_NEWLINE:
|
case T_NEWLINE:
|
||||||
continue;
|
continue;
|
||||||
default:
|
default:
|
||||||
scanerror(T_SEMICOLON, "Bad object type definition");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Bad object type definition");
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1053,18 +1116,14 @@ getoneobj(long index, int symtype)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Routine to collect a set of variables for the specified object type
|
* Routine to assign a specified object-type value to each of a set of
|
||||||
* and initialize them as being that type of object.
|
* variables in a "global", "local" or "static" declaration, or, if
|
||||||
* Here
|
* symtype is SYM_UNDEFINED, to create one object value of the specified
|
||||||
* objlist = name initlist [ ',' name initlist ] ... ';'.
|
* type.
|
||||||
* If symtype is SYM_UNDEFINED, then this is an OBJ statement where the
|
|
||||||
* values can be any variable expression, and no symbols are to be defined.
|
|
||||||
* Otherwise this is part of a declaration, and the variables must be raw
|
|
||||||
* symbol names which are defined with the specified symbol type.
|
|
||||||
*
|
*
|
||||||
* given:
|
* given:
|
||||||
* name object name
|
* name object name
|
||||||
* symtype type of symbol to collect for
|
* symtype declaration type
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
getobjvars(char *name, int symtype)
|
getobjvars(char *name, int symtype)
|
||||||
@@ -1073,11 +1132,14 @@ getobjvars(char *name, int symtype)
|
|||||||
|
|
||||||
index = checkobject(name);
|
index = checkobject(name);
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
scanerror(T_SEMICOLON, "Object %s has not been defined yet", name);
|
scanerror(T_SEMICOLON,
|
||||||
|
"Object %s has not been defined yet", name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (;;) {
|
for (;;) {
|
||||||
getoneobj(index, symtype);
|
getoneobj(index, symtype);
|
||||||
|
if (symtype == SYM_UNDEFINED)
|
||||||
|
return;
|
||||||
if (gettoken() != T_COMMA) {
|
if (gettoken() != T_COMMA) {
|
||||||
rescantoken();
|
rescantoken();
|
||||||
return;
|
return;
|
||||||
@@ -1133,6 +1195,21 @@ getonematrix(int symtype)
|
|||||||
}
|
}
|
||||||
rescantoken();
|
rescantoken();
|
||||||
|
|
||||||
|
if (gettoken() == T_LEFTPAREN) {
|
||||||
|
if (isrvalue(getexprlist())) {
|
||||||
|
scanerror(T_SEMICOLON, "Lvalue expected");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (gettoken() != T_RIGHTPAREN) {
|
||||||
|
scanerror(T_SEMICOLON, "Missing right parenthesis");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
getonematrix(symtype);
|
||||||
|
addop(OP_ASSIGN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
rescantoken();
|
||||||
|
|
||||||
if (gettoken() != T_LEFTBRACKET) {
|
if (gettoken() != T_LEFTBRACKET) {
|
||||||
rescantoken();
|
rescantoken();
|
||||||
scanerror(T_SEMICOLON, "Left-bracket expected");
|
scanerror(T_SEMICOLON, "Left-bracket expected");
|
||||||
@@ -1148,6 +1225,7 @@ getonematrix(int symtype)
|
|||||||
* will patch the correct value back into the opcode.
|
* will patch the correct value back into the opcode.
|
||||||
*/
|
*/
|
||||||
if (gettoken() == T_RIGHTBRACKET) {
|
if (gettoken() == T_RIGHTBRACKET) {
|
||||||
|
if (gettoken() == T_ASSIGN) {
|
||||||
clearopt();
|
clearopt();
|
||||||
patchpc = curfunc->f_opcodecount + 1;
|
patchpc = curfunc->f_opcodecount + 1;
|
||||||
addopone(OP_NUMBER, (long) -1);
|
addopone(OP_NUMBER, (long) -1);
|
||||||
@@ -1157,16 +1235,24 @@ getonematrix(int symtype)
|
|||||||
addop(OP_ZERO);
|
addop(OP_ZERO);
|
||||||
addop(OP_INITFILL);
|
addop(OP_INITFILL);
|
||||||
count = 0;
|
count = 0;
|
||||||
if (gettoken() == T_ASSIGN)
|
|
||||||
count = getinitlist();
|
count = getinitlist();
|
||||||
else
|
|
||||||
rescantoken();
|
|
||||||
index = addqconstant(itoq(count));
|
index = addqconstant(itoq(count));
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
math_error("Cannot allocate constant");
|
math_error("Cannot allocate constant");
|
||||||
curfunc->f_opcodes[patchpc] = index;
|
curfunc->f_opcodes[patchpc] = index;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
rescantoken();
|
||||||
|
addopone(OP_MATCREATE, 0);
|
||||||
|
if (gettoken() == T_LEFTBRACKET) {
|
||||||
|
creatematrix();
|
||||||
|
} else {
|
||||||
|
rescantoken();
|
||||||
|
addop(OP_ZERO);
|
||||||
|
}
|
||||||
|
addop(OP_INITFILL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This isn't implicit, so we expect expressions for the bounds.
|
* This isn't implicit, so we expect expressions for the bounds.
|
||||||
@@ -1184,26 +1270,10 @@ creatematrix(void)
|
|||||||
{
|
{
|
||||||
long dim;
|
long dim;
|
||||||
|
|
||||||
dim = 1;
|
dim = 0;
|
||||||
|
|
||||||
while (TRUE) {
|
for (;;) {
|
||||||
(void) getopassignment();
|
if (gettoken() == T_RIGHTBRACKET) {
|
||||||
switch (gettoken()) {
|
|
||||||
case T_RIGHTBRACKET:
|
|
||||||
case T_COMMA:
|
|
||||||
rescantoken();
|
|
||||||
addop(OP_ONE);
|
|
||||||
addop(OP_SUB);
|
|
||||||
addop(OP_ZERO);
|
|
||||||
break;
|
|
||||||
case T_COLON:
|
|
||||||
(void) getopassignment();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
rescantoken();
|
|
||||||
}
|
|
||||||
switch (gettoken()) {
|
|
||||||
case T_RIGHTBRACKET:
|
|
||||||
addopone(OP_MATCREATE, dim);
|
addopone(OP_MATCREATE, dim);
|
||||||
if (gettoken() == T_LEFTBRACKET) {
|
if (gettoken() == T_LEFTBRACKET) {
|
||||||
creatematrix();
|
creatematrix();
|
||||||
@@ -1213,13 +1283,35 @@ creatematrix(void)
|
|||||||
}
|
}
|
||||||
addop(OP_INITFILL);
|
addop(OP_INITFILL);
|
||||||
return;
|
return;
|
||||||
case T_COMMA:
|
}
|
||||||
if (++dim <= MAXDIM)
|
rescantoken();
|
||||||
break;
|
if (++dim > MAXDIM) {
|
||||||
scanerror(T_SEMICOLON, "Only %ld dimensions allowed", MAXDIM);
|
scanerror(T_SEMICOLON,
|
||||||
|
"Only %ld dimensions allowed", MAXDIM);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
(void) getopassignment();
|
||||||
|
switch (gettoken()) {
|
||||||
|
case T_RIGHTBRACKET:
|
||||||
|
rescantoken();
|
||||||
|
case T_COMMA:
|
||||||
|
addop(OP_ONE);
|
||||||
|
addop(OP_SUB);
|
||||||
|
addop(OP_ZERO);
|
||||||
|
break;
|
||||||
|
case T_COLON:
|
||||||
|
(void) getopassignment();
|
||||||
|
switch(gettoken()) {
|
||||||
|
case T_RIGHTBRACKET:
|
||||||
|
rescantoken();
|
||||||
|
case T_COMMA:
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/*FALLTHRU*/
|
||||||
default:
|
default:
|
||||||
scanerror(T_SEMICOLON, "Illegal matrix definition");
|
rescantoken();
|
||||||
|
scanerror(T_SEMICOLON,
|
||||||
|
"Illegal matrix definition");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1274,7 +1366,8 @@ getinitlist(void)
|
|||||||
return index;
|
return index;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
scanerror(T_SEMICOLON, "Bad initialization list");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Bad initialization list");
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -1290,12 +1383,14 @@ static void
|
|||||||
getcondition(void)
|
getcondition(void)
|
||||||
{
|
{
|
||||||
if (gettoken() != T_LEFTPAREN) {
|
if (gettoken() != T_LEFTPAREN) {
|
||||||
scanerror(T_SEMICOLON, "Missing left parenthesis for condition");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Missing left parenthesis for condition");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
(void) getexprlist();
|
(void) getexprlist();
|
||||||
if (gettoken() != T_RIGHTPAREN) {
|
if (gettoken() != T_RIGHTPAREN) {
|
||||||
scanerror(T_SEMICOLON, "Missing right parenthesis for condition");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Missing right parenthesis for condition");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1504,7 +1599,8 @@ getaltcond(void)
|
|||||||
addoplabel(OP_JUMPZ, &altlab);
|
addoplabel(OP_JUMPZ, &altlab);
|
||||||
type = getaltcond();
|
type = getaltcond();
|
||||||
if (gettoken() != T_COLON) {
|
if (gettoken() != T_COLON) {
|
||||||
scanerror(T_SEMICOLON, "Missing colon for conditional expression");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Missing colon for conditional expression");
|
||||||
return EXPR_RVALUE;
|
return EXPR_RVALUE;
|
||||||
}
|
}
|
||||||
addoplabel(OP_JUMP, &donelab);
|
addoplabel(OP_JUMP, &donelab);
|
||||||
@@ -1915,17 +2011,13 @@ getterm(void)
|
|||||||
oldmode = tokenmode(TM_DEFAULT);
|
oldmode = tokenmode(TM_DEFAULT);
|
||||||
type = getexprlist();
|
type = getexprlist();
|
||||||
if (gettoken() != T_RIGHTPAREN)
|
if (gettoken() != T_RIGHTPAREN)
|
||||||
scanerror(T_SEMICOLON, "Missing right parenthesis");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Missing right parenthesis");
|
||||||
(void) tokenmode(oldmode);
|
(void) tokenmode(oldmode);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_MAT:
|
case T_MAT:
|
||||||
getonematrix(SYM_UNDEFINED);
|
getonematrix(SYM_UNDEFINED);
|
||||||
while (gettoken() == T_COMMA) {
|
|
||||||
addop(OP_POP);
|
|
||||||
getonematrix(SYM_UNDEFINED);
|
|
||||||
}
|
|
||||||
rescantoken();
|
|
||||||
type = EXPR_ASSIGN;
|
type = EXPR_ASSIGN;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1949,7 +2041,8 @@ getterm(void)
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
if (iskeyword(type)) {
|
if (iskeyword(type)) {
|
||||||
scanerror(T_NULL, "Expression contains reserved keyword");
|
scanerror(T_NULL,
|
||||||
|
"Expression contains reserved keyword");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
rescantoken();
|
rescantoken();
|
||||||
@@ -1968,7 +2061,9 @@ getterm(void)
|
|||||||
type = 0;
|
type = 0;
|
||||||
break;
|
break;
|
||||||
case T_LEFTPAREN:
|
case T_LEFTPAREN:
|
||||||
scanerror(T_NULL, "Function calls not allowed as expressions");
|
scanerror(T_NULL,
|
||||||
|
"Function calls not allowed "
|
||||||
|
"as expressions");
|
||||||
default:
|
default:
|
||||||
rescantoken();
|
rescantoken();
|
||||||
return type;
|
return type;
|
||||||
@@ -2030,7 +2125,9 @@ getidexpr(BOOL okmat, BOOL autodef)
|
|||||||
type = 0;
|
type = 0;
|
||||||
break;
|
break;
|
||||||
case T_LEFTPAREN:
|
case T_LEFTPAREN:
|
||||||
scanerror(T_NULL, "Function calls not allowed as expressions");
|
scanerror(T_NULL,
|
||||||
|
"Function calls not allowed "
|
||||||
|
"as expressions");
|
||||||
default:
|
default:
|
||||||
rescantoken();
|
rescantoken();
|
||||||
return type;
|
return type;
|
||||||
@@ -2128,11 +2225,31 @@ getshowstatement(void)
|
|||||||
case T_SYMBOL:
|
case T_SYMBOL:
|
||||||
strncpy(name, tokensymbol(), 4);
|
strncpy(name, tokensymbol(), 4);
|
||||||
name[4] = '\0';
|
name[4] = '\0';
|
||||||
arg = stringindex("buil\000real\000func\000objf\000conf\000objt\000file\000size\000erro\000cust\000bloc\000cons\000glob\000stat\000numb\000redc\000stri\000lite\000opco\000", name);
|
/* Yuck! */
|
||||||
|
arg = stringindex("buil\000"
|
||||||
|
"real\000"
|
||||||
|
"func\000"
|
||||||
|
"objf\000"
|
||||||
|
"conf\000"
|
||||||
|
"objt\000"
|
||||||
|
"file\000"
|
||||||
|
"size\000"
|
||||||
|
"erro\000"
|
||||||
|
"cust\000"
|
||||||
|
"bloc\000"
|
||||||
|
"cons\000"
|
||||||
|
"glob\000"
|
||||||
|
"stat\000"
|
||||||
|
"numb\000"
|
||||||
|
"redc\000"
|
||||||
|
"stri\000"
|
||||||
|
"lite\000"
|
||||||
|
"opco\000", name);
|
||||||
if (arg == 19) {
|
if (arg == 19) {
|
||||||
if (gettoken() != T_SYMBOL) {
|
if (gettoken() != T_SYMBOL) {
|
||||||
rescantoken();
|
rescantoken();
|
||||||
scanerror(T_SEMICOLON, "Function name expected");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Function name expected");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
index = adduserfunc(tokensymbol());
|
index = adduserfunc(tokensymbol());
|
||||||
@@ -2149,9 +2266,11 @@ getshowstatement(void)
|
|||||||
printf("four letters of one of:\n");
|
printf("four letters of one of:\n");
|
||||||
printf("\tblocks, builtin, config, constants, ");
|
printf("\tblocks, builtin, config, constants, ");
|
||||||
printf("custom, errors, files, functions,\n");
|
printf("custom, errors, files, functions,\n");
|
||||||
printf("\tglobaltypes, objfunctions, objtypes, opcodes, sizes, ");
|
printf("\tglobaltypes, objfunctions, objtypes, "
|
||||||
|
"opcodes, sizes, ");
|
||||||
printf("realglobals,\n");
|
printf("realglobals,\n");
|
||||||
printf("\tstatics, numbers, redcdata, strings, literals\n");
|
printf("\tstatics, numbers, redcdata, "
|
||||||
|
"strings, literals\n");
|
||||||
rescantoken();
|
rescantoken();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -2194,8 +2313,14 @@ getmatargs(void)
|
|||||||
* finds that the element will be referenced for writing, then
|
* finds that the element will be referenced for writing, then
|
||||||
* it will call writeindexop to change the flag in the opcode.
|
* it will call writeindexop to change the flag in the opcode.
|
||||||
*/
|
*/
|
||||||
dim = 1;
|
dim = 0;
|
||||||
|
if (gettoken() == T_RIGHTBRACKET) {
|
||||||
|
addoptwo(OP_INDEXADDR, (long) dim, (long) FALSE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
rescantoken();
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
++dim;
|
||||||
(void) getopassignment();
|
(void) getopassignment();
|
||||||
switch (gettoken()) {
|
switch (gettoken()) {
|
||||||
case T_RIGHTBRACKET:
|
case T_RIGHTBRACKET:
|
||||||
@@ -2203,11 +2328,12 @@ getmatargs(void)
|
|||||||
(long) FALSE);
|
(long) FALSE);
|
||||||
return;
|
return;
|
||||||
case T_COMMA:
|
case T_COMMA:
|
||||||
dim++;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
rescantoken();
|
rescantoken();
|
||||||
scanerror(T_NULL, "Missing right bracket in array reference");
|
scanerror(T_NULL,
|
||||||
|
"Missing right bracket in "
|
||||||
|
"array reference");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2291,7 +2417,8 @@ definesymbol(char *name, int symtype)
|
|||||||
return;
|
return;
|
||||||
/*FALLTHRU*/
|
/*FALLTHRU*/
|
||||||
case SYM_PARAM:
|
case SYM_PARAM:
|
||||||
scanerror(T_COMMA, "Variable \"%s\" is already defined", name);
|
scanerror(T_COMMA,
|
||||||
|
"Variable \"%s\" is already defined", name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2401,7 +2528,9 @@ getcallargs(char *name)
|
|||||||
case T_COMMA:
|
case T_COMMA:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
scanerror(T_SEMICOLON, "Missing right parenthesis in function call");
|
scanerror(T_SEMICOLON,
|
||||||
|
"Missing right parenthesis "
|
||||||
|
"in function call");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2445,4 +2574,25 @@ do_changedir(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* END CODE */
|
/*
|
||||||
|
* getshellfile - process the contents of a shellfile
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
getshellfile(char *shellfile)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* treat the calc shell script as if we were reading it
|
||||||
|
*/
|
||||||
|
if (!allow_read) {
|
||||||
|
scanerror(T_NULL,
|
||||||
|
"reading of calc shell script \"%s\" "
|
||||||
|
"dislloaed by -m mode\n", shellfile);
|
||||||
|
} else if (opensearchfile(shellfile, NULL, NULL, FALSE) == 0) {
|
||||||
|
getcommands(FALSE);
|
||||||
|
closeinput();
|
||||||
|
} else {
|
||||||
|
scanerror(T_NULL,
|
||||||
|
"Cannot open calc shell script \"%s\"\n", shellfile);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
109
comfunc.c
109
comfunc.c
@@ -1,11 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1993 David I. Bell
|
* comfunc - extended precision complex arithmetic non-primitive routines
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Extended precision complex arithmetic non-primitive routines
|
* Copyright (C) 1999 David I. Bell and Ernest Bowen
|
||||||
|
*
|
||||||
|
* Primary author: David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: comfunc.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/comfunc.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:48:13
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "cmath.h"
|
#include "cmath.h"
|
||||||
|
|
||||||
@@ -138,38 +162,6 @@ csqrt(COMPLEX *c, NUMBER *epsilon, long R)
|
|||||||
|
|
||||||
up1 = up2 = 0;
|
up1 = up2 = 0;
|
||||||
sign = (R & 64) != 0;
|
sign = (R & 64) != 0;
|
||||||
#if 0
|
|
||||||
if (qiszero(epsilon)) {
|
|
||||||
aes = qsquare(c->real);
|
|
||||||
bes = qsquare(c->imag);
|
|
||||||
v = qqadd(aes, bes);
|
|
||||||
qfree(aes);
|
|
||||||
qfree(bes);
|
|
||||||
u = qsqrt(v, epsilon, 0);
|
|
||||||
qfree(v);
|
|
||||||
if (qiszero(u)) {
|
|
||||||
qfree(u);
|
|
||||||
return clink(&_czero_);
|
|
||||||
}
|
|
||||||
aes = qqadd(u, c->real);
|
|
||||||
qfree(u);
|
|
||||||
bes = qscale(aes, -1);
|
|
||||||
qfree(aes);
|
|
||||||
u = qsqrt(bes, epsilon, R);
|
|
||||||
qfree(bes);
|
|
||||||
if (qiszero(u)) {
|
|
||||||
qfree(u);
|
|
||||||
return clink(&_czero_);
|
|
||||||
}
|
|
||||||
aes = qscale(c->imag, -1);
|
|
||||||
v = qqdiv(aes, u);
|
|
||||||
qfree(aes);
|
|
||||||
r = comalloc();
|
|
||||||
r->real = u;
|
|
||||||
r->imag = v;
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
imsign = c->imag->num.sign;
|
imsign = c->imag->num.sign;
|
||||||
es = qsquare(epsilon);
|
es = qsquare(epsilon);
|
||||||
aes = qqdiv(c->real, es);
|
aes = qqdiv(c->real, es);
|
||||||
@@ -255,8 +247,7 @@ csqrt(COMPLEX *c, NUMBER *epsilon, long R)
|
|||||||
up2 = -1;
|
up2 = -1;
|
||||||
zfree(tmp1);
|
zfree(tmp1);
|
||||||
zfree(aa);
|
zfree(aa);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
s1 = zsqrt(tmp3, &cc, 0);
|
s1 = zsqrt(tmp3, &cc, 0);
|
||||||
zfree(tmp3);
|
zfree(tmp3);
|
||||||
zadd(cc, a, &tmp1);
|
zadd(cc, a, &tmp1);
|
||||||
@@ -333,9 +324,9 @@ csqrt(COMPLEX *c, NUMBER *epsilon, long R)
|
|||||||
zfree(mul2);
|
zfree(mul2);
|
||||||
mul2 = tmp2;
|
mul2 = tmp2;
|
||||||
}
|
}
|
||||||
if (ziszero(mul1))
|
if (ziszero(mul1)) {
|
||||||
u = qlink(&_qzero_);
|
u = qlink(&_qzero_);
|
||||||
else {
|
} else {
|
||||||
mul1.sign = sign ^ epsilon->num.sign;
|
mul1.sign = sign ^ epsilon->num.sign;
|
||||||
u = qalloc();
|
u = qalloc();
|
||||||
zreduce(mul1, epsilon->den, &tmp2, &u->den);
|
zreduce(mul1, epsilon->den, &tmp2, &u->den);
|
||||||
@@ -343,9 +334,9 @@ csqrt(COMPLEX *c, NUMBER *epsilon, long R)
|
|||||||
zfree(tmp2);
|
zfree(tmp2);
|
||||||
}
|
}
|
||||||
zfree(mul1);
|
zfree(mul1);
|
||||||
if (ziszero(mul2))
|
if (ziszero(mul2)) {
|
||||||
v = qlink(&_qzero_);
|
v = qlink(&_qzero_);
|
||||||
else {
|
} else {
|
||||||
mul2.sign = imsign ^ sign ^ epsilon->num.sign;
|
mul2.sign = imsign ^ sign ^ epsilon->num.sign;
|
||||||
v = qalloc();
|
v = qalloc();
|
||||||
zreduce(mul2, epsilon->den, &tmp2, &v->den);
|
zreduce(mul2, epsilon->den, &tmp2, &v->den);
|
||||||
@@ -387,9 +378,12 @@ croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
|||||||
if (qistwo(q))
|
if (qistwo(q))
|
||||||
return csqrt(c, epsilon, 24L);
|
return csqrt(c, epsilon, 24L);
|
||||||
if (cisreal(c) && !qisneg(c->real)) {
|
if (cisreal(c) && !qisneg(c->real)) {
|
||||||
|
tmp1 = qroot(c->real, q, epsilon);
|
||||||
|
if (tmp1 == NULL)
|
||||||
|
return NULL;
|
||||||
r = comalloc();
|
r = comalloc();
|
||||||
qfree(r->real);
|
qfree(r->real);
|
||||||
r->real = qroot(c->real, q, epsilon);
|
r->real = tmp1;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@@ -408,12 +402,14 @@ croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
|||||||
root = qroot(a2pb2, tmp1, epsilon2);
|
root = qroot(a2pb2, tmp1, epsilon2);
|
||||||
qfree(a2pb2);
|
qfree(a2pb2);
|
||||||
qfree(tmp1);
|
qfree(tmp1);
|
||||||
|
qfree(epsilon2);
|
||||||
|
if (root == NULL)
|
||||||
|
return NULL;
|
||||||
m = qilog2(root);
|
m = qilog2(root);
|
||||||
if (m < n) {
|
if (m < n) {
|
||||||
qfree(root);
|
qfree(root);
|
||||||
return clink(&_czero_);
|
return clink(&_czero_);
|
||||||
}
|
}
|
||||||
qfree(epsilon2);
|
|
||||||
epsilon2 = qbitvalue(n - m - 4);
|
epsilon2 = qbitvalue(n - m - 4);
|
||||||
tmp1 = qatan2(c->imag, c->real, epsilon2);
|
tmp1 = qatan2(c->imag, c->real, epsilon2);
|
||||||
qfree(epsilon2);
|
qfree(epsilon2);
|
||||||
@@ -443,6 +439,9 @@ cexp(COMPLEX *c, NUMBER *epsilon)
|
|||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
if (cisreal(c)) {
|
if (cisreal(c)) {
|
||||||
|
tmp1 = qexp(c->real, epsilon);
|
||||||
|
if (tmp1 == NULL)
|
||||||
|
return NULL;
|
||||||
r = comalloc();
|
r = comalloc();
|
||||||
qfree(r->real);
|
qfree(r->real);
|
||||||
r->real = qexp(c->real, epsilon);
|
r->real = qexp(c->real, epsilon);
|
||||||
@@ -452,6 +451,8 @@ cexp(COMPLEX *c, NUMBER *epsilon)
|
|||||||
epsilon1 = qbitvalue(n - 2);
|
epsilon1 = qbitvalue(n - 2);
|
||||||
tmp1 = qexp(c->real, epsilon1);
|
tmp1 = qexp(c->real, epsilon1);
|
||||||
qfree(epsilon1);
|
qfree(epsilon1);
|
||||||
|
if (tmp1 == NULL)
|
||||||
|
return NULL;
|
||||||
if (qiszero(tmp1)) {
|
if (qiszero(tmp1)) {
|
||||||
qfree(tmp1);
|
qfree(tmp1);
|
||||||
return clink(&_czero_);
|
return clink(&_czero_);
|
||||||
@@ -547,6 +548,8 @@ ccos(COMPLEX *c, NUMBER *epsilon)
|
|||||||
ctmp2 = cexp(ctmp1, epsilon1);
|
ctmp2 = cexp(ctmp1, epsilon1);
|
||||||
comfree(ctmp1);
|
comfree(ctmp1);
|
||||||
qfree(epsilon1);
|
qfree(epsilon1);
|
||||||
|
if (ctmp2 == NULL)
|
||||||
|
return NULL;
|
||||||
if (ciszero(ctmp2)) {
|
if (ciszero(ctmp2)) {
|
||||||
comfree(ctmp2);
|
comfree(ctmp2);
|
||||||
return clink(&_czero_);
|
return clink(&_czero_);
|
||||||
@@ -597,6 +600,8 @@ csin(COMPLEX *c, NUMBER *epsilon)
|
|||||||
ctmp2 = cexp(ctmp1, epsilon1);
|
ctmp2 = cexp(ctmp1, epsilon1);
|
||||||
comfree(ctmp1);
|
comfree(ctmp1);
|
||||||
qfree(epsilon1);
|
qfree(epsilon1);
|
||||||
|
if (ctmp2 == NULL)
|
||||||
|
return NULL;
|
||||||
if (ciszero(ctmp2)) {
|
if (ciszero(ctmp2)) {
|
||||||
comfree(ctmp2);
|
comfree(ctmp2);
|
||||||
return clink(&_czero_);
|
return clink(&_czero_);
|
||||||
@@ -627,9 +632,13 @@ ccosh(COMPLEX *c, NUMBER *epsilon)
|
|||||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||||
|
|
||||||
tmp1 = cexp(c, epsilon);
|
tmp1 = cexp(c, epsilon);
|
||||||
|
if (tmp1 == NULL)
|
||||||
|
return NULL;
|
||||||
tmp2 = cneg(c);
|
tmp2 = cneg(c);
|
||||||
tmp3 = cexp(tmp2, epsilon);
|
tmp3 = cexp(tmp2, epsilon);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
|
if (tmp3 == NULL)
|
||||||
|
return NULL;
|
||||||
tmp2 = cadd(tmp1, tmp3);
|
tmp2 = cadd(tmp1, tmp3);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
@@ -645,9 +654,13 @@ csinh(COMPLEX *c, NUMBER *epsilon)
|
|||||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||||
|
|
||||||
tmp1 = cexp(c, epsilon);
|
tmp1 = cexp(c, epsilon);
|
||||||
|
if (tmp1 == NULL)
|
||||||
|
return NULL;
|
||||||
tmp2 = cneg(c);
|
tmp2 = cneg(c);
|
||||||
tmp3 = cexp(tmp2, epsilon);
|
tmp3 = cexp(tmp2, epsilon);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
|
if (tmp3 == NULL)
|
||||||
|
return NULL;
|
||||||
tmp2 = csub(tmp1, tmp3);
|
tmp2 = csub(tmp1, tmp3);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
comfree(tmp3);
|
comfree(tmp3);
|
||||||
@@ -937,6 +950,8 @@ cgd(COMPLEX *c, NUMBER *epsilon)
|
|||||||
tmp1 = neg ? cneg(c) : clink(c);
|
tmp1 = neg ? cneg(c) : clink(c);
|
||||||
tmp2 = cexp(tmp1, epsilon);
|
tmp2 = cexp(tmp1, epsilon);
|
||||||
comfree(tmp1);
|
comfree(tmp1);
|
||||||
|
if (tmp2 == NULL)
|
||||||
|
return NULL;
|
||||||
tmp1 = cmul(&_conei_, tmp2);
|
tmp1 = cmul(&_conei_, tmp2);
|
||||||
tmp3 = cadd(&_conei_, tmp2);
|
tmp3 = cadd(&_conei_, tmp2);
|
||||||
comfree(tmp2);
|
comfree(tmp2);
|
||||||
@@ -996,11 +1011,11 @@ cpolar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon)
|
|||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
if (qiszero(q1))
|
if (qiszero(q1))
|
||||||
return qlink(&_czero_);
|
return clink(&_czero_);
|
||||||
m = qilog2(q1) + 1;
|
m = qilog2(q1) + 1;
|
||||||
n = qilog2(epsilon);
|
n = qilog2(epsilon);
|
||||||
if (m < n)
|
if (m < n)
|
||||||
return qlink(&_czero_);
|
return clink(&_czero_);
|
||||||
r = comalloc();
|
r = comalloc();
|
||||||
if (qiszero(q2)) {
|
if (qiszero(q2)) {
|
||||||
qfree(r->real);
|
qfree(r->real);
|
||||||
@@ -1147,5 +1162,3 @@ cprintfr(COMPLEX *c)
|
|||||||
zprintval(i->den, 0L, 0L);
|
zprintval(i->den, 0L, 0L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* END CODE */
|
|
||||||
|
32
commath.c
32
commath.c
@@ -1,11 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1993 David I. Bell
|
* commath - extended precision complex arithmetic primitive routines
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Extended precision complex arithmetic primitive routines
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: commath.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/commath.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:48:10
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "cmath.h"
|
#include "cmath.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -605,5 +627,3 @@ comfree(COMPLEX *c)
|
|||||||
qfree(c->imag);
|
qfree(c->imag);
|
||||||
free(c);
|
free(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* END CODE */
|
|
||||||
|
473
config.c
473
config.c
@@ -1,11 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 David I. Bell
|
* config - configuration routines
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Configuration routines.
|
* Copyright (C) 1999 David I. Bell and Landon Curt Noll
|
||||||
|
*
|
||||||
|
* Primary author: David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: config.c,v 29.3 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1991/07/20 00:21:56
|
||||||
|
* File existed as early as: 1991
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
#include "token.h"
|
#include "token.h"
|
||||||
@@ -15,6 +39,11 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
|
||||||
|
#include "have_strdup.h"
|
||||||
|
#if !defined(HAVE_STRDUP)
|
||||||
|
# define strdup(x) calc_strdup((CONST char *)(x))
|
||||||
|
#endif /* HAVE_STRDUP */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Table of configuration types that can be set or read.
|
* Table of configuration types that can be set or read.
|
||||||
@@ -52,10 +81,16 @@ NAMETYPE configs[] = {
|
|||||||
{"blkverbose", CONFIG_BLKVERBOSE},
|
{"blkverbose", CONFIG_BLKVERBOSE},
|
||||||
{"blkbase", CONFIG_BLKBASE},
|
{"blkbase", CONFIG_BLKBASE},
|
||||||
{"blkfmt", CONFIG_BLKFMT},
|
{"blkfmt", CONFIG_BLKFMT},
|
||||||
{"lib_debug", CONFIG_LIB_DEBUG},
|
{"resource_debug", CONFIG_RESOURCE_DEBUG},
|
||||||
|
{"lib_debug", CONFIG_RESOURCE_DEBUG},
|
||||||
{"calc_debug", CONFIG_CALC_DEBUG},
|
{"calc_debug", CONFIG_CALC_DEBUG},
|
||||||
{"user_debug", CONFIG_USER_DEBUG},
|
{"user_debug", CONFIG_USER_DEBUG},
|
||||||
{"verbose_quit",CONFIG_VERBOSE_QUIT},
|
{"verbose_quit",CONFIG_VERBOSE_QUIT},
|
||||||
|
{"ctrl_d", CONFIG_CTRL_D},
|
||||||
|
{"ctrl-d", CONFIG_CTRL_D}, /* alias for ctrl_d */
|
||||||
|
{"program", CONFIG_PROGRAM},
|
||||||
|
{"basename", CONFIG_BASENAME},
|
||||||
|
{"version", CONFIG_VERSION},
|
||||||
{NULL, 0}
|
{NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -95,9 +130,13 @@ CONFIG oldstd = { /* backward compatible standard configuration */
|
|||||||
BLK_BASE_HEX, /* block octet print base */
|
BLK_BASE_HEX, /* block octet print base */
|
||||||
BLK_FMT_HD_STYLE, /* block output format */
|
BLK_FMT_HD_STYLE, /* block output format */
|
||||||
0, /* internal calc debug level */
|
0, /* internal calc debug level */
|
||||||
3, /* calc library 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 */
|
TRUE, /* print Quit or abort executed messages */
|
||||||
|
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
||||||
|
NULL, /* our name */
|
||||||
|
NULL, /* basename of our name */
|
||||||
|
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 */
|
||||||
@@ -131,9 +170,13 @@ CONFIG newstd = { /* new non-backward compatible configuration */
|
|||||||
BLK_BASE_HEX, /* block octet print base */
|
BLK_BASE_HEX, /* block octet print base */
|
||||||
BLK_FMT_HD_STYLE, /* block output format */
|
BLK_FMT_HD_STYLE, /* block output format */
|
||||||
0, /* internal calc debug level */
|
0, /* internal calc debug level */
|
||||||
3, /* calc library 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 */
|
TRUE, /* print Quit or abort executed messages */
|
||||||
|
CTRL_D_VIRGIN_EOF, /* ^D only exits on virgin lines */
|
||||||
|
NULL, /* our name */
|
||||||
|
NULL, /* basename of our name */
|
||||||
|
NULL /* version */
|
||||||
};
|
};
|
||||||
CONFIG *conf = NULL; /* loaded in at startup - current configuration */
|
CONFIG *conf = NULL; /* loaded in at startup - current configuration */
|
||||||
|
|
||||||
@@ -142,11 +185,15 @@ CONFIG *conf = NULL; /* loaded in at startup - current configuration */
|
|||||||
* Possible output modes.
|
* Possible output modes.
|
||||||
*/
|
*/
|
||||||
static NAMETYPE modes[] = {
|
static NAMETYPE modes[] = {
|
||||||
|
{"fraction", MODE_FRAC},
|
||||||
{"frac", MODE_FRAC},
|
{"frac", MODE_FRAC},
|
||||||
{"decimal", MODE_FRAC},
|
{"integer", MODE_INT},
|
||||||
{"dec", MODE_FRAC},
|
|
||||||
{"int", MODE_INT},
|
{"int", MODE_INT},
|
||||||
{"real", MODE_REAL},
|
{"real", MODE_REAL},
|
||||||
|
{"float", MODE_REAL},
|
||||||
|
{"default", MODE_INITIAL}, /* MODE_REAL */
|
||||||
|
{"scientific", MODE_EXP},
|
||||||
|
{"sci", MODE_EXP},
|
||||||
{"exp", MODE_EXP},
|
{"exp", MODE_EXP},
|
||||||
{"hexadecimal", MODE_HEX},
|
{"hexadecimal", MODE_HEX},
|
||||||
{"hex", MODE_HEX},
|
{"hex", MODE_HEX},
|
||||||
@@ -158,34 +205,13 @@ static NAMETYPE modes[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Possible binary config state values
|
|
||||||
*/
|
|
||||||
static NAMETYPE truth[] = {
|
|
||||||
{"y", TRUE},
|
|
||||||
{"n", FALSE},
|
|
||||||
{"yes", TRUE},
|
|
||||||
{"no", FALSE},
|
|
||||||
{"set", TRUE},
|
|
||||||
{"unset", FALSE},
|
|
||||||
{"on", TRUE},
|
|
||||||
{"off", FALSE},
|
|
||||||
{"true", TRUE},
|
|
||||||
{"false", FALSE},
|
|
||||||
{"t", TRUE},
|
|
||||||
{"f", FALSE},
|
|
||||||
{"1", TRUE},
|
|
||||||
{"0", FALSE},
|
|
||||||
{NULL, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Possible block base output modes
|
* Possible block base output modes
|
||||||
*/
|
*/
|
||||||
static NAMETYPE blk_base[] = {
|
static NAMETYPE blk_base[] = {
|
||||||
{"hexadecimal", BLK_BASE_HEX},
|
{"hexadecimal", BLK_BASE_HEX},
|
||||||
{"hex", BLK_BASE_HEX},
|
{"hex", BLK_BASE_HEX},
|
||||||
|
{"default", BLK_BASE_HEX},
|
||||||
{"octal", BLK_BASE_OCT},
|
{"octal", BLK_BASE_OCT},
|
||||||
{"oct", BLK_BASE_OCT},
|
{"oct", BLK_BASE_OCT},
|
||||||
{"character", BLK_BASE_CHAR},
|
{"character", BLK_BASE_CHAR},
|
||||||
@@ -202,17 +228,60 @@ static NAMETYPE blk_base[] = {
|
|||||||
* Possible block output formats
|
* Possible block output formats
|
||||||
*/
|
*/
|
||||||
static NAMETYPE blk_fmt[] = {
|
static NAMETYPE blk_fmt[] = {
|
||||||
{"line", BLK_FMT_LINE},
|
|
||||||
{"lines", BLK_FMT_LINE},
|
{"lines", BLK_FMT_LINE},
|
||||||
{"str", BLK_FMT_STRING},
|
{"line", BLK_FMT_LINE},
|
||||||
{"string", BLK_FMT_STRING},
|
|
||||||
{"strings", BLK_FMT_STRING},
|
{"strings", BLK_FMT_STRING},
|
||||||
{"od", BLK_FMT_OD_STYLE},
|
{"string", BLK_FMT_STRING},
|
||||||
{"odstyle", BLK_FMT_OD_STYLE},
|
{"str", BLK_FMT_STRING},
|
||||||
{"od_style", BLK_FMT_OD_STYLE},
|
{"od_style", BLK_FMT_OD_STYLE},
|
||||||
{"hd", BLK_FMT_HD_STYLE},
|
{"odstyle", BLK_FMT_OD_STYLE},
|
||||||
{"hdstyle", BLK_FMT_HD_STYLE},
|
{"od", BLK_FMT_OD_STYLE},
|
||||||
{"hd_style", BLK_FMT_HD_STYLE},
|
{"hd_style", BLK_FMT_HD_STYLE},
|
||||||
|
{"hdstyle", BLK_FMT_HD_STYLE},
|
||||||
|
{"hd", BLK_FMT_HD_STYLE},
|
||||||
|
{"default", BLK_FMT_HD_STYLE},
|
||||||
|
{NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Possible ctrl_d styles
|
||||||
|
*/
|
||||||
|
static NAMETYPE ctrl_d[] = {
|
||||||
|
{"virgin_eof", CTRL_D_VIRGIN_EOF},
|
||||||
|
{"virgineof", CTRL_D_VIRGIN_EOF},
|
||||||
|
{"virgin", CTRL_D_VIRGIN_EOF},
|
||||||
|
{"default", CTRL_D_VIRGIN_EOF},
|
||||||
|
{"never_eof", CTRL_D_NEVER_EOF},
|
||||||
|
{"nevereof", CTRL_D_NEVER_EOF},
|
||||||
|
{"never", CTRL_D_NEVER_EOF},
|
||||||
|
{"empty_eof", CTRL_D_EMPTY_EOF},
|
||||||
|
{"emptyeof", CTRL_D_EMPTY_EOF},
|
||||||
|
{"empty", CTRL_D_EMPTY_EOF},
|
||||||
|
{NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Possible binary config state values
|
||||||
|
*/
|
||||||
|
#define TRUE_STRING "true"
|
||||||
|
#define FALSE_STRING "false"
|
||||||
|
static NAMETYPE truth[] = {
|
||||||
|
{TRUE_STRING, TRUE},
|
||||||
|
{"t", TRUE},
|
||||||
|
{"on", TRUE},
|
||||||
|
{"yes", TRUE},
|
||||||
|
{"y", TRUE},
|
||||||
|
{"set", TRUE},
|
||||||
|
{"1", TRUE},
|
||||||
|
{FALSE_STRING, FALSE},
|
||||||
|
{"f", FALSE},
|
||||||
|
{"off", FALSE},
|
||||||
|
{"no", FALSE},
|
||||||
|
{"n", FALSE},
|
||||||
|
{"unset", FALSE},
|
||||||
|
{"0", FALSE},
|
||||||
{NULL, 0}
|
{NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -220,11 +289,8 @@ static NAMETYPE blk_fmt[] = {
|
|||||||
/*
|
/*
|
||||||
* declate static functions
|
* declate static functions
|
||||||
*/
|
*/
|
||||||
static int modetype(char *name);
|
static long lookup_long(NAMETYPE *set, char *name);
|
||||||
static int blkbase(char *name);
|
static char *lookup_name(NAMETYPE *set, long val);
|
||||||
static int blkfmt(char *name);
|
|
||||||
static int truthtype(char *name);
|
|
||||||
static char *modename(int type);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -249,18 +315,21 @@ configtype(char *name)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Given the name of a mode, convert it to the internal format.
|
* lookup_long - given a name and a NAMETYPE, return the int
|
||||||
* Returns -1 if the string is unknown.
|
|
||||||
*
|
*
|
||||||
* given:
|
* given:
|
||||||
|
* set the NAMESET array of name/int pairs
|
||||||
* name mode name
|
* name mode name
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* numeric value of the name or -1 if not found
|
||||||
*/
|
*/
|
||||||
static int
|
static long
|
||||||
modetype(char *name)
|
lookup_long(NAMETYPE *set, char *name)
|
||||||
{
|
{
|
||||||
NAMETYPE *cp; /* current config pointer */
|
NAMETYPE *cp; /* current config pointer */
|
||||||
|
|
||||||
for (cp = modes; cp->name; cp++) {
|
for (cp = set; cp->name; cp++) {
|
||||||
if (strcmp(cp->name, name) == 0)
|
if (strcmp(cp->name, name) == 0)
|
||||||
return cp->type;
|
return cp->type;
|
||||||
}
|
}
|
||||||
@@ -269,78 +338,22 @@ modetype(char *name)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Given the name of a block output base, convert it to the internal format.
|
* lookup_name - given numeric value and a NAMETYPE, return the name
|
||||||
* Returns -1 if the string is unknown.
|
|
||||||
*
|
*
|
||||||
* given:
|
* given:
|
||||||
* name mode name
|
* set the NAMESET array of name/int pairs
|
||||||
*/
|
* val numeric value to lookup
|
||||||
static int
|
|
||||||
blkbase(char *name)
|
|
||||||
{
|
|
||||||
NAMETYPE *cp; /* current config pointer */
|
|
||||||
|
|
||||||
for (cp = blk_base; cp->name; cp++) {
|
|
||||||
if (strcmp(cp->name, name) == 0)
|
|
||||||
return cp->type;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Given the name of a block output format, convert it to the internal format.
|
|
||||||
* Returns -1 if the string is unknown.
|
|
||||||
*
|
*
|
||||||
* given:
|
* returns:
|
||||||
* name mode name
|
* name of the value found of NULL
|
||||||
*/
|
|
||||||
static int
|
|
||||||
blkfmt(char *name)
|
|
||||||
{
|
|
||||||
NAMETYPE *cp; /* current config pointer */
|
|
||||||
|
|
||||||
for (cp = blk_fmt; cp->name; cp++) {
|
|
||||||
if (strcmp(cp->name, name) == 0)
|
|
||||||
return cp->type;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Given the name of a truth value, convert it to a BOOL or -1.
|
|
||||||
* Returns -1 if the string is unknown.
|
|
||||||
*
|
|
||||||
* given:
|
|
||||||
* name mode name
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
truthtype(char *name)
|
|
||||||
{
|
|
||||||
NAMETYPE *cp; /* current config pointer */
|
|
||||||
|
|
||||||
for (cp = truth; cp->name; cp++) {
|
|
||||||
if (strcmp(cp->name, name) == 0)
|
|
||||||
return cp->type;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Given the mode type, convert it to a string representing that mode.
|
|
||||||
* Where there are multiple strings representing the same mode, the first
|
|
||||||
* one in the table is used. Returns NULL if the node type is unknown.
|
|
||||||
* The returned string cannot be modified.
|
|
||||||
*/
|
*/
|
||||||
static char *
|
static char *
|
||||||
modename(int type)
|
lookup_name(NAMETYPE *set, long val)
|
||||||
{
|
{
|
||||||
NAMETYPE *cp; /* current config pointer */
|
NAMETYPE *cp; /* current config pointer */
|
||||||
|
|
||||||
for (cp = modes; cp->name; cp++) {
|
for (cp = set; cp->name; cp++) {
|
||||||
if (type == cp->type)
|
if (val == cp->type)
|
||||||
return cp->name;
|
return cp->name;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -417,7 +430,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
math_error("Non-string for mode");
|
math_error("Non-string for mode");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
temp = modetype(vp->v_str->s_str);
|
temp = lookup_long(modes, vp->v_str->s_str);
|
||||||
if (temp < 0) {
|
if (temp < 0) {
|
||||||
math_error("Unknown mode \"%s\"", vp->v_str);
|
math_error("Unknown mode \"%s\"", vp->v_str);
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
@@ -526,7 +539,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
q = vp->v_num;
|
q = vp->v_num;
|
||||||
conf->tilde_ok = !qiszero(q);
|
conf->tilde_ok = !qiszero(q);
|
||||||
} else if (vp->v_type == V_STR) {
|
} else if (vp->v_type == V_STR) {
|
||||||
temp = truthtype(vp->v_str->s_str);
|
temp = lookup_long(truth, vp->v_str->s_str);
|
||||||
if (temp < 0) {
|
if (temp < 0) {
|
||||||
math_error("Illegal truth value for tilde");
|
math_error("Illegal truth value for tilde");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
@@ -540,7 +553,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
q = vp->v_num;
|
q = vp->v_num;
|
||||||
conf->tab_ok = !qiszero(q);
|
conf->tab_ok = !qiszero(q);
|
||||||
} else if (vp->v_type == V_STR) {
|
} else if (vp->v_type == V_STR) {
|
||||||
temp = truthtype(vp->v_str->s_str);
|
temp = lookup_long(truth, vp->v_str->s_str);
|
||||||
if (temp < 0) {
|
if (temp < 0) {
|
||||||
math_error("Illegal truth value for tab");
|
math_error("Illegal truth value for tab");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
@@ -680,7 +693,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
q = vp->v_num;
|
q = vp->v_num;
|
||||||
conf->leadzero = !qiszero(q);
|
conf->leadzero = !qiszero(q);
|
||||||
} else if (vp->v_type == V_STR) {
|
} else if (vp->v_type == V_STR) {
|
||||||
temp = truthtype(vp->v_str->s_str);
|
temp = lookup_long(truth, vp->v_str->s_str);
|
||||||
if (temp < 0) { {
|
if (temp < 0) { {
|
||||||
math_error("Illegal truth value for leadzero");
|
math_error("Illegal truth value for leadzero");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
@@ -695,7 +708,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
q = vp->v_num;
|
q = vp->v_num;
|
||||||
conf->fullzero = !qiszero(q);
|
conf->fullzero = !qiszero(q);
|
||||||
} else if (vp->v_type == V_STR) {
|
} else if (vp->v_type == V_STR) {
|
||||||
temp = truthtype(vp->v_str->s_str);
|
temp = lookup_long(truth, vp->v_str->s_str);
|
||||||
if (temp < 0) { {
|
if (temp < 0) { {
|
||||||
math_error("Illegal truth value for fullzero");
|
math_error("Illegal truth value for fullzero");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
@@ -772,7 +785,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
q = vp->v_num;
|
q = vp->v_num;
|
||||||
conf->blkverbose = !qiszero(q);
|
conf->blkverbose = !qiszero(q);
|
||||||
} else if (vp->v_type == V_STR) {
|
} else if (vp->v_type == V_STR) {
|
||||||
temp = truthtype(vp->v_str->s_str);
|
temp = lookup_long(truth, vp->v_str->s_str);
|
||||||
if (temp < 0) {
|
if (temp < 0) {
|
||||||
math_error("Illegal truth value for blkverbose");
|
math_error("Illegal truth value for blkverbose");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
@@ -786,7 +799,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
math_error("Non-string for blkbase");
|
math_error("Non-string for blkbase");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
temp = blkbase(vp->v_str->s_str);
|
temp = lookup_long(blk_base, vp->v_str->s_str);
|
||||||
if (temp < 0) {
|
if (temp < 0) {
|
||||||
math_error("Unknown mode \"%s\" for blkbase",
|
math_error("Unknown mode \"%s\" for blkbase",
|
||||||
vp->v_str->s_str);
|
vp->v_str->s_str);
|
||||||
@@ -800,7 +813,7 @@ setconfig(int type, VALUE *vp)
|
|||||||
math_error("Non-string for blkfmt");
|
math_error("Non-string for blkfmt");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
temp = blkfmt(vp->v_str->s_str);
|
temp = lookup_long(blk_fmt, vp->v_str->s_str);
|
||||||
if (temp < 0) {
|
if (temp < 0) {
|
||||||
math_error("Unknown mode \"%s\" for blkfmt",
|
math_error("Unknown mode \"%s\" for blkfmt",
|
||||||
vp->v_str->s_str);
|
vp->v_str->s_str);
|
||||||
@@ -823,18 +836,18 @@ setconfig(int type, VALUE *vp)
|
|||||||
conf->calc_debug = temp;
|
conf->calc_debug = temp;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_LIB_DEBUG:
|
case CONFIG_RESOURCE_DEBUG:
|
||||||
if (vp->v_type != V_NUM) {
|
if (vp->v_type != V_NUM) {
|
||||||
math_error("Non numeric for lib_debug");
|
math_error("Non numeric for resource_debug");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
q = vp->v_num;
|
q = vp->v_num;
|
||||||
temp = qtoi(q);
|
temp = qtoi(q);
|
||||||
if (qisfrac(q) || !zistiny(q->num)) {
|
if (qisfrac(q) || !zistiny(q->num)) {
|
||||||
math_error("Illegal lib_debug parameter value");
|
math_error("Illegal resource_debug parameter value");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
conf->lib_debug = temp;
|
conf->resource_debug = temp;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_USER_DEBUG:
|
case CONFIG_USER_DEBUG:
|
||||||
@@ -856,9 +869,9 @@ setconfig(int type, VALUE *vp)
|
|||||||
q = vp->v_num;
|
q = vp->v_num;
|
||||||
conf->verbose_quit = !qiszero(q);
|
conf->verbose_quit = !qiszero(q);
|
||||||
} else if (vp->v_type == V_STR) {
|
} else if (vp->v_type == V_STR) {
|
||||||
temp = truthtype(vp->v_str->s_str);
|
temp = lookup_long(truth, vp->v_str->s_str);
|
||||||
if (temp < 0) {
|
if (temp < 0) {
|
||||||
math_error("Illegal truth value"
|
math_error("Illegal truth value "
|
||||||
"for verbose_quit");
|
"for verbose_quit");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
@@ -866,6 +879,32 @@ setconfig(int type, VALUE *vp)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CONFIG_CTRL_D:
|
||||||
|
if (vp->v_type != V_STR) {
|
||||||
|
math_error("Non-string for ctrl_d");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
temp = lookup_long(ctrl_d, vp->v_str->s_str);
|
||||||
|
if (temp < 0) {
|
||||||
|
math_error("Unknown mode \"%s\" for ctrl_d",
|
||||||
|
vp->v_str->s_str);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
conf->ctrl_d = temp;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_PROGRAM:
|
||||||
|
math_error("The program config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_BASENAME:
|
||||||
|
math_error("The program config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
|
case CONFIG_VERSION:
|
||||||
|
math_error("The program config parameter is read-only");
|
||||||
|
/*NOTREACHED*/
|
||||||
|
|
||||||
default:
|
default:
|
||||||
math_error("Setting illegal config parameter");
|
math_error("Setting illegal config parameter");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
@@ -914,18 +953,23 @@ config_copy(CONFIG *src)
|
|||||||
* clone the pointer values
|
* clone the pointer values
|
||||||
*/
|
*/
|
||||||
dest->epsilon = qlink(src->epsilon);
|
dest->epsilon = qlink(src->epsilon);
|
||||||
dest->prompt1 = (char *)malloc(strlen(src->prompt1)+1);
|
dest->prompt1 = strdup(src->prompt1);
|
||||||
if (dest->prompt1 == NULL) {
|
dest->prompt2 = strdup(src->prompt2);
|
||||||
math_error("cannot dup prompt1 for new CONFIG value");
|
if (src->program == NULL) {
|
||||||
/*NOTREACHED*/
|
dest->program = strdup(program);
|
||||||
|
} else {
|
||||||
|
dest->program = strdup(src->program);
|
||||||
}
|
}
|
||||||
strcpy(dest->prompt1, src->prompt1);
|
if (src->base_name == NULL) {
|
||||||
dest->prompt2 = (char *)malloc(strlen(src->prompt2)+1);
|
dest->base_name = strdup(base_name);
|
||||||
if (dest->prompt2 == NULL) {
|
} else {
|
||||||
math_error("cannot dup prompt2 for new CONFIG value");
|
dest->base_name = strdup(src->base_name);
|
||||||
/*NOTREACHED*/
|
}
|
||||||
|
if (src->version == NULL) {
|
||||||
|
dest->version = strdup(version());
|
||||||
|
} else {
|
||||||
|
dest->version = strdup(src->version);
|
||||||
}
|
}
|
||||||
strcpy(dest->prompt2, src->prompt2);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* return the new value
|
* return the new value
|
||||||
@@ -962,6 +1006,15 @@ config_free(CONFIG *cfg)
|
|||||||
if (cfg->prompt2 != NULL) {
|
if (cfg->prompt2 != NULL) {
|
||||||
free(cfg->prompt2);
|
free(cfg->prompt2);
|
||||||
}
|
}
|
||||||
|
if (cfg->program != NULL) {
|
||||||
|
free(cfg->program);
|
||||||
|
}
|
||||||
|
if (cfg->base_name != NULL) {
|
||||||
|
free(cfg->base_name);
|
||||||
|
}
|
||||||
|
if (cfg->version != NULL) {
|
||||||
|
free(cfg->version);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* free the CONFIG value itself
|
* free the CONFIG value itself
|
||||||
@@ -986,6 +1039,7 @@ void
|
|||||||
config_value(CONFIG *cfg, int type, VALUE *vp)
|
config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||||
{
|
{
|
||||||
long i=0;
|
long i=0;
|
||||||
|
char *p;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* firewall
|
* firewall
|
||||||
@@ -1000,6 +1054,7 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
* convert element to value
|
* convert element to value
|
||||||
*/
|
*/
|
||||||
vp->v_type = V_NUM;
|
vp->v_type = V_NUM;
|
||||||
|
vp->v_subtype = V_NOSUBTYPE;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case CONFIG_ALL:
|
case CONFIG_ALL:
|
||||||
vp->v_type = V_CONFIG;
|
vp->v_type = V_CONFIG;
|
||||||
@@ -1016,7 +1071,12 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
|
|
||||||
case CONFIG_MODE:
|
case CONFIG_MODE:
|
||||||
vp->v_type = V_STR;
|
vp->v_type = V_STR;
|
||||||
vp->v_str = makenewstring(modename(cfg->outmode));
|
p = lookup_name(modes, cfg->outmode);
|
||||||
|
if (p == NULL) {
|
||||||
|
math_error("invalid output mode: %d", cfg->outmode);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
vp->v_str = makenewstring(p);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case CONFIG_EPSILON:
|
case CONFIG_EPSILON:
|
||||||
@@ -1044,12 +1104,22 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_TILDE:
|
case CONFIG_TILDE:
|
||||||
i = cfg->tilde_ok;
|
vp->v_type = V_STR;
|
||||||
break;
|
if (cfg->tilde_ok) {
|
||||||
|
vp->v_str = makenewstring(TRUE_STRING);
|
||||||
|
} else {
|
||||||
|
vp->v_str = makenewstring(FALSE_STRING);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
case CONFIG_TAB:
|
case CONFIG_TAB:
|
||||||
i = cfg->tab_ok;
|
vp->v_type = V_STR;
|
||||||
break;
|
if (cfg->tab_ok) {
|
||||||
|
vp->v_str = makenewstring(TRUE_STRING);
|
||||||
|
} else {
|
||||||
|
vp->v_str = makenewstring(FALSE_STRING);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
case CONFIG_QUOMOD:
|
case CONFIG_QUOMOD:
|
||||||
i = cfg->quomod;
|
i = cfg->quomod;
|
||||||
@@ -1088,12 +1158,22 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_LEADZERO:
|
case CONFIG_LEADZERO:
|
||||||
i = cfg->leadzero;
|
vp->v_type = V_STR;
|
||||||
break;
|
if (cfg->leadzero) {
|
||||||
|
vp->v_str = makenewstring(TRUE_STRING);
|
||||||
|
} else {
|
||||||
|
vp->v_str = makenewstring(FALSE_STRING);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
case CONFIG_FULLZERO:
|
case CONFIG_FULLZERO:
|
||||||
i = cfg->fullzero;
|
vp->v_type = V_STR;
|
||||||
break;
|
if (cfg->fullzero) {
|
||||||
|
vp->v_str = makenewstring(TRUE_STRING);
|
||||||
|
} else {
|
||||||
|
vp->v_str = makenewstring(FALSE_STRING);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
case CONFIG_MAXSCAN:
|
case CONFIG_MAXSCAN:
|
||||||
i = cfg->maxscancount;
|
i = cfg->maxscancount;
|
||||||
@@ -1114,23 +1194,40 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_BLKVERBOSE:
|
case CONFIG_BLKVERBOSE:
|
||||||
i = cfg->blkverbose;
|
vp->v_type = V_STR;
|
||||||
break;
|
if (cfg->blkverbose) {
|
||||||
|
vp->v_str = makenewstring(TRUE_STRING);
|
||||||
|
} else {
|
||||||
|
vp->v_str = makenewstring(FALSE_STRING);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
case CONFIG_BLKBASE:
|
case CONFIG_BLKBASE:
|
||||||
i = cfg->blkbase;
|
vp->v_type = V_STR;
|
||||||
break;
|
p = lookup_name(blk_base, cfg->blkbase);
|
||||||
|
if (p == NULL) {
|
||||||
|
math_error("invalid block base: %d", cfg->blkbase);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
vp->v_str = makenewstring(p);
|
||||||
|
return;
|
||||||
|
|
||||||
case CONFIG_BLKFMT:
|
case CONFIG_BLKFMT:
|
||||||
i = cfg->blkfmt;
|
vp->v_type = V_STR;
|
||||||
break;
|
p = lookup_name(blk_fmt, cfg->blkfmt);
|
||||||
|
if (p == NULL) {
|
||||||
|
math_error("invalid block format: %d", cfg->blkfmt);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
vp->v_str = makenewstring(p);
|
||||||
|
return;
|
||||||
|
|
||||||
case CONFIG_CALC_DEBUG:
|
case CONFIG_CALC_DEBUG:
|
||||||
i = cfg->calc_debug;
|
i = cfg->calc_debug;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_LIB_DEBUG:
|
case CONFIG_RESOURCE_DEBUG:
|
||||||
i = cfg->lib_debug;
|
i = cfg->resource_debug;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_USER_DEBUG:
|
case CONFIG_USER_DEBUG:
|
||||||
@@ -1138,8 +1235,50 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONFIG_VERBOSE_QUIT:
|
case CONFIG_VERBOSE_QUIT:
|
||||||
i = cfg->verbose_quit;
|
vp->v_type = V_STR;
|
||||||
break;
|
if (cfg->verbose_quit) {
|
||||||
|
vp->v_str = makenewstring(TRUE_STRING);
|
||||||
|
} else {
|
||||||
|
vp->v_str = makenewstring(FALSE_STRING);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
case CONFIG_CTRL_D:
|
||||||
|
vp->v_type = V_STR;
|
||||||
|
p = lookup_name(ctrl_d, cfg->ctrl_d);
|
||||||
|
if (p == NULL) {
|
||||||
|
math_error("invalid Control-D: %d", cfg->ctrl_d);
|
||||||
|
/*NOTREACHED*/
|
||||||
|
}
|
||||||
|
vp->v_str = makenewstring(p);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case CONFIG_PROGRAM:
|
||||||
|
vp->v_type = V_STR;
|
||||||
|
if (cfg->base_name == NULL) {
|
||||||
|
vp->v_str = makestring(strdup(program));
|
||||||
|
} else {
|
||||||
|
vp->v_str = makenewstring(cfg->program);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
case CONFIG_BASENAME:
|
||||||
|
vp->v_type = V_STR;
|
||||||
|
if (cfg->base_name == NULL) {
|
||||||
|
vp->v_str = makestring(strdup(base_name));
|
||||||
|
} else {
|
||||||
|
vp->v_str = makenewstring(cfg->base_name);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
case CONFIG_VERSION:
|
||||||
|
vp->v_type = V_STR;
|
||||||
|
if (cfg->version == NULL) {
|
||||||
|
vp->v_str = makestring(strdup(version()));
|
||||||
|
} else {
|
||||||
|
vp->v_str = makenewstring(cfg->version);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
math_error("Getting illegal CONFIG element");
|
math_error("Getting illegal CONFIG element");
|
||||||
@@ -1215,7 +1354,23 @@ config_cmp(CONFIG *cfg1, CONFIG *cfg2)
|
|||||||
cfg1->blkbase != cfg2->blkbase ||
|
cfg1->blkbase != cfg2->blkbase ||
|
||||||
cfg1->blkfmt != cfg2->blkfmt ||
|
cfg1->blkfmt != cfg2->blkfmt ||
|
||||||
cfg1->calc_debug != cfg2->calc_debug ||
|
cfg1->calc_debug != cfg2->calc_debug ||
|
||||||
cfg1->lib_debug != cfg2->lib_debug ||
|
cfg1->resource_debug != cfg2->resource_debug ||
|
||||||
cfg1->user_debug != cfg2->user_debug ||
|
cfg1->user_debug != cfg2->user_debug ||
|
||||||
cfg1->verbose_quit != cfg2->verbose_quit;
|
cfg1->verbose_quit != cfg2->verbose_quit ||
|
||||||
|
cfg1->ctrl_d != cfg2->ctrl_d ||
|
||||||
|
|
||||||
|
(cfg1->program == NULL && cfg2->program != NULL) ||
|
||||||
|
(cfg1->program != NULL && cfg2->program == NULL) ||
|
||||||
|
(cfg1->program != NULL && cfg2->program != NULL &&
|
||||||
|
strcmp(cfg1->program, cfg2->program) != 0) ||
|
||||||
|
|
||||||
|
(cfg1->base_name == NULL && cfg2->base_name != NULL) ||
|
||||||
|
(cfg1->base_name != NULL && cfg2->base_name == NULL) ||
|
||||||
|
(cfg1->base_name != NULL && cfg2->base_name != NULL &&
|
||||||
|
strcmp(cfg1->base_name, cfg2->base_name) != 0) ||
|
||||||
|
|
||||||
|
(cfg1->version == NULL && cfg2->version != NULL) ||
|
||||||
|
(cfg1->version != NULL && cfg2->version == NULL) ||
|
||||||
|
(cfg1->version != NULL && cfg2->version != NULL &&
|
||||||
|
strcmp(cfg1->version, cfg2->version) != 0);
|
||||||
}
|
}
|
||||||
|
82
config.h
82
config.h
@@ -1,37 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 by Landon Curt Noll. All Rights Reserved.
|
* config - configuration routines
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Copyright (C) 1999 Landon Curt Noll and David I. Bell
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
*
|
||||||
* supporting documentation
|
* Primary author: Landon Curt Noll
|
||||||
* source copies
|
|
||||||
* source works derived from this source
|
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
*
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
* as published by the Free Software Foundation.
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
*
|
||||||
* Prior to calc 2.9.3t9, these routines existed as a calc library called
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* cryrand.cal. They have been rewritten in C for performance as well
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
* as to make them available directly from libcalc.a.
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
|
* Public License for more details.
|
||||||
*
|
*
|
||||||
* Comments, suggestions, bug fixes and questions about these routines
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
* are welcome. Send EMail to the address given below.
|
* 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.
|
||||||
*
|
*
|
||||||
* Happy bit twiddling,
|
* @(#) $Revision: 29.3 $
|
||||||
|
* @(#) $Id: config.h,v 29.3 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.h,v $
|
||||||
*
|
*
|
||||||
* Landon Curt Noll
|
* Under source code control: 1995/11/01 22:20:17
|
||||||
* http://reality.sgi.com/chongo
|
* File existed as early as: 1995
|
||||||
*
|
*
|
||||||
* chongo <was here> /\../\
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -77,10 +73,15 @@
|
|||||||
#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_LIB_DEBUG 30
|
#define CONFIG_RESOURCE_DEBUG 30
|
||||||
|
#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_PROGRAM 35
|
||||||
|
#define CONFIG_BASENAME 36
|
||||||
|
#define CONFIG_VERSION 37
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -102,7 +103,10 @@
|
|||||||
*
|
*
|
||||||
* quickhash.c - config_hash()
|
* quickhash.c - config_hash()
|
||||||
* hash.c - hash_value()
|
* hash.c - hash_value()
|
||||||
* config.c - setconfig(), config_value(), config_cmp()
|
* config.c - configs[], oldstd, newstd, setconfig(),
|
||||||
|
* config_value(), config_cmp(),
|
||||||
|
* and perhaps config_copy(), config_free()
|
||||||
|
* config.h - CONFIG_XYZ_SYMBOL (see above)
|
||||||
*/
|
*/
|
||||||
struct config {
|
struct config {
|
||||||
int outmode; /* current output mode */
|
int outmode; /* current output mode */
|
||||||
@@ -136,19 +140,24 @@ struct config {
|
|||||||
int blkbase; /* block output base */
|
int blkbase; /* block output base */
|
||||||
int blkfmt; /* block output style */
|
int blkfmt; /* block output style */
|
||||||
long calc_debug; /* internal debug, see CALC_DEBUG_XXX below */
|
long calc_debug; /* internal debug, see CALC_DEBUG_XXX below */
|
||||||
long lib_debug; /* library debug, see LIB_DEBUG_XXX below */
|
long resource_debug; /* resource debug, see RSCDBG_XXX below */
|
||||||
long user_debug; /* user defined debug value: 0 default */
|
long user_debug; /* user defined debug value: 0 default */
|
||||||
BOOL verbose_quit; /* TRUE => print Quit or abort executed msg */
|
BOOL verbose_quit; /* TRUE => print Quit or abort executed msg */
|
||||||
|
int ctrl_d; /* see CTRL_D_xyz below */
|
||||||
|
char *program; /* our name */
|
||||||
|
char *base_name; /* basename of our name */
|
||||||
|
char *version; /* calc version string */
|
||||||
};
|
};
|
||||||
typedef struct config CONFIG;
|
typedef struct config CONFIG;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* lib_debug bit masks
|
* resource_debug bit masks
|
||||||
*/
|
*/
|
||||||
#define LIBDBG_STDIN_FUNC (0x00000001) /* interactive func define debug */
|
#define RSCDBG_STDIN_FUNC (0x00000001) /* interactive func define debug */
|
||||||
#define LIBDBG_FILE_FUNC (0x00000002) /* file read func define debug */
|
#define RSCDBG_FILE_FUNC (0x00000002) /* file read func define debug */
|
||||||
#define LIBDBG_MASK (0x00000003)
|
#define RSCDBG_FUNC_INFO (0x00000004) /* print extra info for show func */
|
||||||
|
#define RSCDBG_MASK (0x00000007)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -162,6 +171,13 @@ typedef struct config CONFIG;
|
|||||||
#define CALCDBG_RUNSTATE (0x00000020) /* report run_state changes */
|
#define CALCDBG_RUNSTATE (0x00000020) /* report run_state changes */
|
||||||
#define CALCDBG_MASK (0x0000003f)
|
#define CALCDBG_MASK (0x0000003f)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ctrl-d meanings
|
||||||
|
*/
|
||||||
|
#define CTRL_D_VIRGIN_EOF (0) /* ^D only exits on virgin command lines */
|
||||||
|
#define CTRL_D_NEVER_EOF (1) /* ^D never exits, emacs binding meaning only */
|
||||||
|
#define CTRL_D_EMPTY_EOF (2) /* ^D always exits at start of line */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* global configuration states and aliases
|
* global configuration states and aliases
|
||||||
@@ -170,7 +186,7 @@ extern CONFIG *conf; /* current configuration */
|
|||||||
extern CONFIG oldstd; /* backward compatible standard configuration */
|
extern CONFIG oldstd; /* backward compatible standard configuration */
|
||||||
extern CONFIG newstd; /* new non-backward compatible configuration */
|
extern CONFIG newstd; /* new non-backward compatible configuration */
|
||||||
extern char *calc_debug; /* !=NULL => value of config("calc_debug") */
|
extern char *calc_debug; /* !=NULL => value of config("calc_debug") */
|
||||||
extern char *lib_debug; /* !=NULL => value of config("lib_debug") */
|
extern char *resource_debug; /* !=NULL => config("resource_debug") value */
|
||||||
extern char *user_debug; /* !=NULL => value of config("user_debug") */
|
extern char *user_debug; /* !=NULL => value of config("user_debug") */
|
||||||
|
|
||||||
|
|
||||||
|
30
const.c
30
const.c
@@ -1,11 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 David I. Bell
|
* const - constant number storage module
|
||||||
* Permission is granted to use, distribute, or modify this source,
|
|
||||||
* provided that this copyright notice remains intact.
|
|
||||||
*
|
*
|
||||||
* Constant number storage module.
|
* Copyright (C) 1999 David I. Bell
|
||||||
|
*
|
||||||
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
|
* 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: const.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/const.c,v $
|
||||||
|
*
|
||||||
|
* Under source code control: 1990/02/15 01:48:14
|
||||||
|
* File existed as early as: before 1990
|
||||||
|
*
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
#include "qmath.h"
|
#include "qmath.h"
|
||||||
|
247
cscript/Makefile
Normal file
247
cscript/Makefile
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
#
|
||||||
|
# cscript - makefile for calc shell script files
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 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: Makefile,v 29.5 2000/06/07 14:02:59 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/Makefile,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1999/11/29 11:10:26
|
||||||
|
# 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/
|
||||||
|
#
|
||||||
|
# calculator by David I. Bell with help/mods from others
|
||||||
|
# Makefile by Landon Curt Noll
|
||||||
|
|
||||||
|
|
||||||
|
# required vars
|
||||||
|
#
|
||||||
|
SHELL= /bin/sh
|
||||||
|
MAKE_FILE = Makefile
|
||||||
|
|
||||||
|
# Normally, the upper level makefile will set these values. We provide
|
||||||
|
# a default here just in case you want to build from this directory.
|
||||||
|
#
|
||||||
|
BINDIR= /usr/local/bin
|
||||||
|
#BINDIR= /usr/bin
|
||||||
|
#BINDIR= /usr/contrib/bin
|
||||||
|
#
|
||||||
|
SCRIPTDIR= ${BINDIR}/cscript
|
||||||
|
|
||||||
|
# Makefile debug
|
||||||
|
#
|
||||||
|
# Q=@ do not echo internal makefile actions (quiet mode)
|
||||||
|
# Q= echo internal makefile actions (debug / verbose mode)
|
||||||
|
#
|
||||||
|
#Q=
|
||||||
|
Q=@
|
||||||
|
|
||||||
|
# standard tools
|
||||||
|
#
|
||||||
|
CHMOD= chmod
|
||||||
|
SED= sed
|
||||||
|
SORT= sort
|
||||||
|
FMT= fmt
|
||||||
|
|
||||||
|
# The ${SCRIPT} list is the list of calc shell script files (without the .calc
|
||||||
|
# extension) which will be installed.
|
||||||
|
#
|
||||||
|
# The ${SCRIPT_SRC} is built from ${SCRIPT} and has the .calc extensions.
|
||||||
|
#
|
||||||
|
# This list is prodiced by the detaillist rule when no WARNINGS are detected.
|
||||||
|
# To add a script:
|
||||||
|
#
|
||||||
|
# 1) Name the file with a .calc filename extension
|
||||||
|
# 2) Place that file under RCS control
|
||||||
|
# 3) Add the name, without the .calc extension to the ${SCRIPT} below
|
||||||
|
# 4) Write out this Makefile
|
||||||
|
# 5) Replace the ${SCRIPT} and ${SCRIPT_SRC} lines with the output of:
|
||||||
|
#
|
||||||
|
# make detaillist
|
||||||
|
#
|
||||||
|
SCRIPT= mersenne piforever plus simple
|
||||||
|
|
||||||
|
SCRIPT_SRC= mersenne.calc piforever.calc plus.calc simple.calc
|
||||||
|
|
||||||
|
# These files are found (but not built) in the distribution
|
||||||
|
#
|
||||||
|
DISTLIST= ${SCRIPT_SRC} ${MAKE_FILE} README
|
||||||
|
|
||||||
|
# These files are used to make (but not built) a calc .a library
|
||||||
|
#
|
||||||
|
CALCLIBLIST=
|
||||||
|
|
||||||
|
# The reason for this Makefile
|
||||||
|
#
|
||||||
|
all: ${SCRIPT} ${SCRIPT_SRC} .all
|
||||||
|
|
||||||
|
# used by the upper level Makefile to determine of we have done all
|
||||||
|
#
|
||||||
|
# NOTE: Due to bogus shells found on one common system we must have
|
||||||
|
# an non-emoty else clause for every if condition. *sigh*
|
||||||
|
#
|
||||||
|
.all:
|
||||||
|
rm -f .all
|
||||||
|
touch .all
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# File list generation. You can ignore this section.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# We will form the names of source files as if they were in a
|
||||||
|
# sub-directory called calc/cscript.
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
distlist: ${DISTLIST}
|
||||||
|
${Q}for i in ${DISTLIST}; do \
|
||||||
|
echo cscript/$$i; \
|
||||||
|
done | ${SORT}
|
||||||
|
|
||||||
|
distdir:
|
||||||
|
${Q}echo cscript
|
||||||
|
|
||||||
|
calcliblist:
|
||||||
|
|
||||||
|
# These next rule help me form the ${DETAIL_HELP} makefile variables above.
|
||||||
|
#
|
||||||
|
detaillist:
|
||||||
|
${Q}-(echo "xxxxxxx"; \
|
||||||
|
for i in ${SCRIPT}; do \
|
||||||
|
if [ ! -f RCS/$$i.calc,v ]; then \
|
||||||
|
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
||||||
|
else \
|
||||||
|
echo $$i; \
|
||||||
|
fi; \
|
||||||
|
done | ${SORT}) | ${FMT} -70 | \
|
||||||
|
${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \
|
||||||
|
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
||||||
|
${Q}echo
|
||||||
|
${Q}-(echo "xxxxxxxxxxx"; \
|
||||||
|
for i in ${SCRIPT}; do \
|
||||||
|
if [ ! -f RCS/$$i.calc,v ]; then \
|
||||||
|
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
|
||||||
|
else \
|
||||||
|
echo $$i.calc; \
|
||||||
|
fi; \
|
||||||
|
done | ${SORT}) | ${FMT} -70 | \
|
||||||
|
${SED} -e '1s/xxxxxxxxxxx/SCRIPT_SRC=/' -e '2,$$s/^/ /' \
|
||||||
|
-e 's/$$/ \\/' -e '$$s/ \\$$//'
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# Home grown make dependency rules. Your system make not support
|
||||||
|
# or have the needed tools. You can ignore this section.
|
||||||
|
#
|
||||||
|
# We will form a skelaton tree of *.c files containing only #include "foo.h"
|
||||||
|
# lines and .h files containing the same lines surrounded by multiple include
|
||||||
|
# prevention lines. This allows us to build a static depend list that will
|
||||||
|
# satisfy all possible cpp symbol definition combinations.
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
depend:
|
||||||
|
${Q}if [ -f Makefile.bak ]; then \
|
||||||
|
echo "Makefile.bak exists, remove or move it out of the way"; \
|
||||||
|
exit 1; \
|
||||||
|
else \
|
||||||
|
true; \
|
||||||
|
fi
|
||||||
|
-${Q}rm -f makedep.out
|
||||||
|
${Q}echo forming cscript dependency list
|
||||||
|
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
|
||||||
|
makedep.out
|
||||||
|
${Q}echo "" >> makedep.out
|
||||||
|
${Q}for i in ${SCRIPT}; do \
|
||||||
|
echo "$$i: $$i.calc"; \
|
||||||
|
echo ' rm -f $$@'; \
|
||||||
|
echo ' $${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \
|
||||||
|
echo ' $${CHMOD} +x $$@'; \
|
||||||
|
done >> makedep.out
|
||||||
|
${Q}echo sample dependency list formed
|
||||||
|
${Q}echo forming new cscript/Makefile
|
||||||
|
-${Q}rm -f Makefile.bak
|
||||||
|
${Q}mv Makefile Makefile.bak
|
||||||
|
${Q}${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile
|
||||||
|
${Q}echo "" >> Makefile
|
||||||
|
${Q}${SED} -n '3,$$p' makedep.out >> Makefile
|
||||||
|
-${Q}rm -f makedep.out
|
||||||
|
-${Q}if cmp -s Makefile.bak Makefile; then \
|
||||||
|
echo 'sample Makefile was already up to date'; \
|
||||||
|
mv -f Makefile.bak Makefile; \
|
||||||
|
else \
|
||||||
|
rm -f Makefile.tmp; \
|
||||||
|
mv Makefile Makefile.tmp; \
|
||||||
|
if [ -d RCS ]; then \
|
||||||
|
co -l Makefile; \
|
||||||
|
fi; \
|
||||||
|
mv Makefile.tmp Makefile; \
|
||||||
|
if [ -d RCS ]; then \
|
||||||
|
echo new sample Makefile formed, you need to check it in; \
|
||||||
|
fi; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
clean:
|
||||||
|
-rm -f makedep.out
|
||||||
|
|
||||||
|
clobber:
|
||||||
|
-rm -f ${SCRIPT}
|
||||||
|
|
||||||
|
install: all
|
||||||
|
-${Q}if [ ! -d ${BINDIR} ]; then \
|
||||||
|
echo mkdir ${BINDIR}; \
|
||||||
|
mkdir ${BINDIR}; \
|
||||||
|
else \
|
||||||
|
true; \
|
||||||
|
fi
|
||||||
|
-${Q}if [ ! -d ${SCRIPTDIR} ]; then \
|
||||||
|
echo mkdir ${SCRIPTDIR}; \
|
||||||
|
mkdir ${SCRIPTDIR}; \
|
||||||
|
else \
|
||||||
|
true; \
|
||||||
|
fi
|
||||||
|
${Q}for i in ${SCRIPT}; do \
|
||||||
|
echo rm -f ${SCRIPTDIR}/$$i; \
|
||||||
|
rm -f ${SCRIPTDIR}/$$i; \
|
||||||
|
echo cp $$i ${SCRIPTDIR}; \
|
||||||
|
cp $$i ${SCRIPTDIR}; \
|
||||||
|
echo ${CHMOD} 0555 ${SCRIPTDIR}/$$i; \
|
||||||
|
${CHMOD} 0555 ${SCRIPTDIR}/$$i; \
|
||||||
|
done
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
mersenne: mersenne.calc
|
||||||
|
rm -f $@
|
||||||
|
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
|
${CHMOD} +x $@
|
||||||
|
piforever: piforever.calc
|
||||||
|
rm -f $@
|
||||||
|
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
|
${CHMOD} +x $@
|
||||||
|
plus: plus.calc
|
||||||
|
rm -f $@
|
||||||
|
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
|
${CHMOD} +x $@
|
||||||
|
simple: simple.calc
|
||||||
|
rm -f $@
|
||||||
|
${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
|
||||||
|
${CHMOD} +x $@
|
65
cscript/README
Normal file
65
cscript/README
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
calc shell script examples
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
These calc shell scripts are provided because they serve as examples of
|
||||||
|
how use the calc language, and/or because the authors thought them to
|
||||||
|
be useful!
|
||||||
|
|
||||||
|
If you write something that you think is useful, please send it to:
|
||||||
|
|
||||||
|
calc-contrib 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' ]]
|
||||||
|
|
||||||
|
For more info, see:
|
||||||
|
|
||||||
|
help script
|
||||||
|
help cscript
|
||||||
|
|
||||||
|
=-=
|
||||||
|
|
||||||
|
mersenne exp
|
||||||
|
|
||||||
|
Print the value of 2^exp-1.
|
||||||
|
|
||||||
|
|
||||||
|
piforever
|
||||||
|
|
||||||
|
Print the value of pi forever, or as long as you cpu / memory allows.
|
||||||
|
|
||||||
|
|
||||||
|
plus arg ...
|
||||||
|
|
||||||
|
Print the sum of 1 or more arguments.
|
||||||
|
|
||||||
|
|
||||||
|
simple
|
||||||
|
|
||||||
|
A trivial example of a calc shell script.
|
||||||
|
|
||||||
|
## Copyright (C) 1999 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: README,v 29.4 2000/06/07 14:02:59 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/README,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 1999/12/17 10:23:40
|
||||||
|
## 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/
|
47
cscript/mersenne.calc
Normal file
47
cscript/mersenne.calc
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/local/src/cmd/calc/calc -S
|
||||||
|
#
|
||||||
|
# mersenne - print the value of a mersenne number
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 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: mersenne.calc,v 29.2 2000/06/07 14:02:59 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/mersenne.calc,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1999/11/30 00:09:01;
|
||||||
|
# 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:
|
||||||
|
# mersenne exp
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* parse args
|
||||||
|
*/
|
||||||
|
if (argv() != 1) {
|
||||||
|
/* we include the name of this script in the error message */
|
||||||
|
fprintf(files(2), "usage: %s exp\n", config("program"));
|
||||||
|
abort "wrong number of args";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* print the decimal value of 2^n-1
|
||||||
|
*/
|
||||||
|
print "2^": argv(0) : "-1 =", 2^eval(argv(0))-1;
|
37
cscript/piforever.calc
Normal file
37
cscript/piforever.calc
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/local/src/cmd/calc/calc -S
|
||||||
|
#
|
||||||
|
# piforever - print digits of pi forever (or as long as your mem/cpu allow)
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 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: piforever.calc,v 29.2 2000/06/07 14:02:59 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/piforever.calc,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1999/11/30 00:11:36
|
||||||
|
# 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:
|
||||||
|
# piforever
|
||||||
|
|
||||||
|
|
||||||
|
read -once pi.cal
|
||||||
|
print "pi ~= ":;
|
||||||
|
piforever();
|
53
cscript/plus.calc
Normal file
53
cscript/plus.calc
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#!/usr/local/src/cmd/calc/calc -S
|
||||||
|
#
|
||||||
|
# plus - add two or more arguments together
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 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: plus.calc,v 29.2 2000/06/07 14:02:59 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/plus.calc,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1999/11/29 10:22:37
|
||||||
|
# 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:
|
||||||
|
# plus val ...
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* parse args
|
||||||
|
*/
|
||||||
|
if (argv() < 1) {
|
||||||
|
/* we include the name of this script in the error message */
|
||||||
|
fprintf(files(2), "usage: %s value ...\n", config("program"));
|
||||||
|
abort "not enough args";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* print the sum of the 2 args
|
||||||
|
*
|
||||||
|
* Since args are strings, we must eval them before using them numerically.
|
||||||
|
*/
|
||||||
|
sum = 0;
|
||||||
|
for (i=0; i < argv(); ++i) {
|
||||||
|
sum += eval(argv(i));
|
||||||
|
}
|
||||||
|
print sum;
|
35
cscript/simple.calc
Normal file
35
cscript/simple.calc
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/local/src/cmd/calc/calc -S
|
||||||
|
#
|
||||||
|
# simple - an example of a simple calc shell script
|
||||||
|
#
|
||||||
|
# Copyright (C) 1999 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: simple.calc,v 29.2 2000/06/07 14:02:59 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/simple.calc,v $
|
||||||
|
#
|
||||||
|
# Under source code control: 1999/11/29 10:22:37
|
||||||
|
# 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/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is an example of a simple calc shell script.
|
||||||
|
*/
|
||||||
|
print "The simple calc shell script works!"
|
43
custom.c
43
custom.c
@@ -1,35 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 by Landon Curt Noll. All Rights Reserved.
|
* custom - interface for custom software and hardware interfaces
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Copyright (C) 1999 Landon Curt Noll
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
*
|
||||||
* supporting documentation
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* source copies
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
* source works derived from this source
|
* as published by the Free Software Foundation.
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
*
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
* Public License for more details.
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
*
|
||||||
* Comments, suggestions, bug fixes and questions about these routines
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
* are welcome. Send EMail to the address given below.
|
* 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.
|
||||||
*
|
*
|
||||||
* Happy bit twiddling,
|
* @(#) $Revision: 29.2 $
|
||||||
|
* @(#) $Id: custom.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/custom.c,v $
|
||||||
*
|
*
|
||||||
* Landon Curt Noll
|
* Under source code control: 1997/03/03 04:53:08
|
||||||
* http://reality.sgi.com/chongo
|
* File existed as early as: 1997
|
||||||
*
|
*
|
||||||
* chongo <was here> /\../\
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* these include files are needed regardless of CUSTOM */
|
/* these include files are needed regardless of CUSTOM */
|
||||||
#include "have_const.h"
|
#include "have_const.h"
|
||||||
#include "value.h"
|
#include "value.h"
|
||||||
|
46
custom.h
46
custom.h
@@ -1,37 +1,31 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997 by Landon Curt Noll. All Rights Reserved.
|
* custom - interface for custom software and hardware interfaces
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and
|
* Copyright (C) 1999 Landon Curt Noll
|
||||||
* its documentation for any purpose and without fee is hereby granted,
|
|
||||||
* provided that the above copyright, this permission notice and text
|
|
||||||
* this comment, and the disclaimer below appear in all of the following:
|
|
||||||
*
|
*
|
||||||
* supporting documentation
|
* Calc is open software; you can redistribute it and/or modify it under
|
||||||
* source copies
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
* source works derived from this source
|
* as published by the Free Software Foundation.
|
||||||
* binaries derived from this source or from derived source
|
|
||||||
*
|
*
|
||||||
* LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
* EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
* Public License for more details.
|
||||||
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
*
|
||||||
* Prior to calc 2.9.3t9, these routines existed as a calc library called
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
* cryrand.cal. They have been rewritten in C for performance as well
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
* as to make them available directly from libcalc.a.
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* Comments, suggestions, bug fixes and questions about these routines
|
* @(#) $Revision: 29.2 $
|
||||||
* are welcome. Send EMail to the address given below.
|
* @(#) $Id: custom.h,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||||
|
* @(#) $Source: /usr/local/src/cmd/calc/RCS/custom.h,v $
|
||||||
*
|
*
|
||||||
* Happy bit twiddling,
|
* Under source code control: 1997/03/03 04:53:08
|
||||||
|
* File existed as early as: 1997
|
||||||
*
|
*
|
||||||
* Landon Curt Noll
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
* http://reality.sgi.com/chongo
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
*
|
|
||||||
* chongo <was here> /\../\
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -1,31 +1,11 @@
|
|||||||
#
|
Custom calc resource files
|
||||||
# Copyright (c) 1999 Landon Curt Noll
|
--------------------------
|
||||||
#
|
|
||||||
# Permission to use, copy, modify, and distribute this software and
|
|
||||||
# its documentation for any purpose and without fee is hereby granted,
|
|
||||||
# provided that the above copyright, this permission notice and text
|
|
||||||
# this comment, and the disclaimer below appear in all of the following:
|
|
||||||
#
|
|
||||||
# supporting documentation
|
|
||||||
# source copies
|
|
||||||
# source works derived from this source
|
|
||||||
# binaries derived from this source or from derived source
|
|
||||||
#
|
|
||||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
||||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
|
||||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
||||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
|
||||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
# PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
#
|
|
||||||
# chongo was here /\../\ http://reality.sgi.com/chongo
|
|
||||||
|
|
||||||
The following custom calc library files are provided because they serve
|
The following custom calc resource files are provided because they serve
|
||||||
as examples of how use the custom interface. The custom interface
|
as examples of how use the custom interface. The custom interface
|
||||||
allows for machine dependent and/or non-portable code to be added as
|
allows for machine dependent and/or non-portable code to be added as
|
||||||
builtins to the calc program. A few example custom functions and
|
builtins to the calc program. A few example custom functions and
|
||||||
library files are shipped with calc to provide you with examples.
|
resource files are shipped with calc to provide you with examples.
|
||||||
|
|
||||||
By default, the custom builtin returns an error. Calc have been
|
By default, the custom builtin returns an error. Calc have been
|
||||||
built with:
|
built with:
|
||||||
@@ -39,8 +19,8 @@ must be invoked with a -C argument:
|
|||||||
|
|
||||||
when it is run.
|
when it is run.
|
||||||
|
|
||||||
See the ../lib/README or "help stdlib" for information about
|
See the ../cal/README or "help resource" for information about
|
||||||
calc library standards and guidelines.
|
calc resource standards and guidelines.
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
@@ -60,3 +40,29 @@ pzasusb8.cal
|
|||||||
|
|
||||||
Run custom("pzasusb8") on a standard set of data, print Endian
|
Run custom("pzasusb8") on a standard set of data, print Endian
|
||||||
related information and print value size information.
|
related information and print value size information.
|
||||||
|
|
||||||
|
## Copyright (C) 1999 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: CUSTOM_CAL,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/CUSTOM_CAL,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 1997/03/08 20:51:32
|
||||||
|
## File existed as early as: 1997
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
Guidelines for adding custom functions
|
Guidelines for adding custom functions
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
Step 0: Determine if is should it be done?
|
Step 0: Determine if is should it be done?
|
||||||
|
|
||||||
@@ -17,9 +18,9 @@ Step 0: Determine if is should it be done?
|
|||||||
|
|
||||||
So before you go to step 1, ask yourself:
|
So before you go to step 1, ask yourself:
|
||||||
|
|
||||||
+ Can I implement this as a calc library script?
|
+ Can I implement this as a calc resource file or calc shell script?
|
||||||
|
|
||||||
If Yes, write the script and be done with it.
|
If Yes, write the shell script or resource file and be done with it.
|
||||||
If No, continue to the next question ...
|
If No, continue to the next question ...
|
||||||
|
|
||||||
+ Does it require the use of non-portable features,
|
+ Does it require the use of non-portable features,
|
||||||
@@ -617,3 +618,29 @@ 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
|
||||||
|
##
|
||||||
|
## 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: HOW_TO_ADD,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
||||||
|
## @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/HOW_TO_ADD,v $
|
||||||
|
##
|
||||||
|
## Under source code control: 1997/03/10 03:03:21
|
||||||
|
## File existed as early as: 1997
|
||||||
|
##
|
||||||
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
|
106
custom/Makefile
106
custom/Makefile
@@ -1,43 +1,44 @@
|
|||||||
|
#!/bin/make
|
||||||
#
|
#
|
||||||
# custom - makefile for calc custom routines
|
# custom - makefile for calc custom routines
|
||||||
#
|
#
|
||||||
# Copyright (c) 1997 Landon Curt Noll
|
# Copyright (C) 1999 Landon Curt Noll
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and distribute this software and
|
# Calc is open software; you can redistribute it and/or modify it under
|
||||||
# its documentation for any purpose and without fee is hereby granted,
|
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||||
# provided that the above copyright, this permission notice and text
|
# as published by the Free Software Foundation.
|
||||||
# this comment, and the disclaimer below appear in all of the following:
|
|
||||||
#
|
#
|
||||||
# supporting documentation
|
# Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||||
# source copies
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
# source works derived from this source
|
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||||
# binaries derived from this source or from derived source
|
# Public License for more details.
|
||||||
#
|
#
|
||||||
# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
# A copy of version 2.1 of the GNU Lesser General Public License is
|
||||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
# distributed with calc under the filename COPYING-LGPL. You should have
|
||||||
# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||||
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
# PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
#
|
#
|
||||||
# Comments, suggestions, bug fixes and questions about these routines
|
# @(#) $Revision: 29.2 $
|
||||||
# are welcome. Send EMail to the address given below.
|
# @(#) $Id: Makefile,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
||||||
|
# @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/Makefile,v $
|
||||||
#
|
#
|
||||||
# Happy bit twiddling,
|
# Under source code control: 1997/03/09 02:28:54
|
||||||
|
# File existed as early as: 1997
|
||||||
#
|
#
|
||||||
# Landon Curt Noll
|
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||||
# http://reality.sgi.com/chongo
|
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||||
#
|
#
|
||||||
# chongo <was here> /\../\
|
# calculator by David I. Bell with help/mods from others
|
||||||
|
# Makefile by Landon Curt Noll
|
||||||
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#-=-=-=-=-=-=-=-=- You may want to change some values below -=-=-=-=-=-=-=-=-#
|
#-=-=-=-=-=-=-=-=- You may want to change some values below -=-=-=-=-=-=-=-=-#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# The custom calc library files to install
|
# The custom calc resource files to install
|
||||||
#
|
#
|
||||||
# Put your custom calc library 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
|
||||||
|
|
||||||
@@ -158,7 +159,7 @@ NO_SHARED=
|
|||||||
# 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.
|
||||||
#
|
#
|
||||||
# Some systems require one to use ranlib to add a symbol table to
|
# Some systems require one to use ranlib to add a symbol table to
|
||||||
# a *.a library. Set RANLIB to the utility that performs this action.
|
# a *.a link library. Set RANLIB to the utility that performs this action.
|
||||||
# Set RANLIB to : if your system does not need such a utility.
|
# Set RANLIB to : if your system does not need such a utility.
|
||||||
#
|
#
|
||||||
#RANLIB=ranlib
|
#RANLIB=ranlib
|
||||||
@@ -217,7 +218,6 @@ ALLOW_CUSTOM= -DCUSTOM
|
|||||||
# CFLAGS are all flags given to ${CC} [[often includes CCOPT, CCWARN, CCMISC]]
|
# CFLAGS are all flags given to ${CC} [[often includes CCOPT, CCWARN, CCMISC]]
|
||||||
# ICFLAGS are given to ${CC} for intermediate progs
|
# ICFLAGS are given to ${CC} for intermediate progs
|
||||||
#
|
#
|
||||||
# LCFLAGS are CC-style flags for ${LINT}
|
|
||||||
# LDFLAGS are flags given to ${CC} for linking .o files
|
# LDFLAGS are flags given to ${CC} for linking .o files
|
||||||
# ILDFLAGS are flags given to ${CC} for linking .o files for intermediate progs
|
# ILDFLAGS are flags given to ${CC} for linking .o files for intermediate progs
|
||||||
#
|
#
|
||||||
@@ -234,7 +234,6 @@ CCMISC=
|
|||||||
CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC} ${ALLOW_CUSTOM}
|
CFLAGS= ${CCWARN} ${CCOPT} ${CCMISC} ${ALLOW_CUSTOM}
|
||||||
ICFLAGS= ${CCWARN} ${CCMISC}
|
ICFLAGS= ${CCWARN} ${CCMISC}
|
||||||
#
|
#
|
||||||
LCFLAGS=
|
|
||||||
LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||||
ILDFLAGS=
|
ILDFLAGS=
|
||||||
#
|
#
|
||||||
@@ -285,15 +284,24 @@ H_SRC= ${CUSTOM_H_SRC}
|
|||||||
DISTLIST= ${CUSTCALC_SRC} ${CUSTOM_CALC_FILES} ${CUSTOM_HELP} \
|
DISTLIST= ${CUSTCALC_SRC} ${CUSTOM_CALC_FILES} ${CUSTOM_HELP} \
|
||||||
${INSTALL_H_SRC} CUSTOM_CAL HOW_TO_ADD ${MAKE_FILE}
|
${INSTALL_H_SRC} CUSTOM_CAL HOW_TO_ADD ${MAKE_FILE}
|
||||||
|
|
||||||
|
# These files are used to make (but not built) a calc .a link library
|
||||||
|
#
|
||||||
|
CALCLIBLIST= ${CUSTCALC_SRC} ${INSTALL_H_SRC} ${MAKE_FILE} HOW_TO_ADD
|
||||||
|
|
||||||
# complete list of targets
|
# complete list of targets
|
||||||
#
|
#
|
||||||
TARGETS= libcustcalc.a ${CUSTCALC_OBJ}
|
TARGETS= libcustcalc.a ${CUSTCALC_OBJ}
|
||||||
|
|
||||||
# required vars
|
# required vars
|
||||||
#
|
#
|
||||||
SHELL = /bin/sh
|
SHELL= /bin/sh
|
||||||
|
MAKE_FILE= Makefile
|
||||||
|
|
||||||
|
# standard tools
|
||||||
|
#
|
||||||
SED= sed
|
SED= sed
|
||||||
MAKEDEPEND= makedepend
|
MAKEDEPEND= makedepend
|
||||||
|
CHMOD= chmod
|
||||||
SORT= sort
|
SORT= sort
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -310,6 +318,15 @@ libcustcalc.a: ${CUSTCALC_OBJ} ${MAKE_FILE} ../Makefile
|
|||||||
ar qc libcustcalc.a ${CUSTCALC_OBJ}
|
ar qc libcustcalc.a ${CUSTCALC_OBJ}
|
||||||
${RANLIB} libcustcalc.a
|
${RANLIB} libcustcalc.a
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# Special .o files
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
c_sysinfo.o: c_sysinfo.c ${MAKE_FILE}
|
||||||
|
${CC} ${CFLAGS} c_sysinfo.c -c
|
||||||
|
|
||||||
##
|
##
|
||||||
#
|
#
|
||||||
# used by the upper level Makefile
|
# used by the upper level Makefile
|
||||||
@@ -343,6 +360,13 @@ distlist: ${DISTLIST}
|
|||||||
distdir:
|
distdir:
|
||||||
${Q}echo custom
|
${Q}echo custom
|
||||||
|
|
||||||
|
calcliblist: ${CALCLIBLIST}
|
||||||
|
${Q}for i in ${CALCLIBLIST} /dev/null; do \
|
||||||
|
if [ X"$$i" != X"/dev/null" ]; then \
|
||||||
|
echo custom/$$i; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
##
|
##
|
||||||
#
|
#
|
||||||
# Home grown make dependency rules. Your system make not support
|
# Home grown make dependency rules. Your system make not support
|
||||||
@@ -375,7 +399,7 @@ depend:
|
|||||||
continue; \
|
continue; \
|
||||||
fi; \
|
fi; \
|
||||||
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
||||||
echo "#ifndef $$tag" > "skel/custom/$$i"; \
|
echo "#if !defined($$tag)" > "skel/custom/$$i"; \
|
||||||
echo "#define $$tag" >> "skel/custom/$$i"; \
|
echo "#define $$tag" >> "skel/custom/$$i"; \
|
||||||
${SED} -n '/^#[ ]*include[ ]*"/p' "$$i" \
|
${SED} -n '/^#[ ]*include[ ]*"/p' "$$i" \
|
||||||
>> "skel/custom/$$i"; \
|
>> "skel/custom/$$i"; \
|
||||||
@@ -384,7 +408,7 @@ depend:
|
|||||||
${Q}(cd ..; ${MAKE} hsrc)
|
${Q}(cd ..; ${MAKE} hsrc)
|
||||||
${Q}for i in `cd ..; ${MAKE} h_list`; do \
|
${Q}for i in `cd ..; ${MAKE} h_list`; do \
|
||||||
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
|
||||||
echo "#ifndef $$tag" > "skel/$$i"; \
|
echo "#if !defined($$tag)" > "skel/$$i"; \
|
||||||
echo "#define $$tag" >> "skel/$$i"; \
|
echo "#define $$tag" >> "skel/$$i"; \
|
||||||
${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
|
${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
|
||||||
>> "skel/$$i"; \
|
>> "skel/$$i"; \
|
||||||
@@ -397,10 +421,8 @@ depend:
|
|||||||
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 -m -f makedep.out ${C_SRC}
|
||||||
-${Q}for i in ${C_SRC}; do \
|
-${Q}for i in ${C_SRC}; do \
|
||||||
echo "$$i" | \
|
echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \
|
||||||
${SED} 's/^\(.*\)\.c/\1.o: \1.c/' \
|
done >> skel/custom/makedep.out
|
||||||
>> skel/custom/makedep.out; \
|
|
||||||
done
|
|
||||||
${Q}echo custom dependency list formed
|
${Q}echo custom dependency list formed
|
||||||
${Q}echo forming new custom/Makefile
|
${Q}echo forming new custom/Makefile
|
||||||
-${Q}rm -f Makefile.bak
|
-${Q}rm -f Makefile.bak
|
||||||
@@ -474,32 +496,32 @@ install: all
|
|||||||
rm -f ${CUSTOMLIBDIR}/$$i; \
|
rm -f ${CUSTOMLIBDIR}/$$i; \
|
||||||
echo cp $$i ${CUSTOMLIBDIR}; \
|
echo cp $$i ${CUSTOMLIBDIR}; \
|
||||||
cp $$i ${CUSTOMLIBDIR}; \
|
cp $$i ${CUSTOMLIBDIR}; \
|
||||||
echo chmod 0444 ${CUSTOMLIBDIR}/$$i; \
|
echo ${CHMOD} 0444 ${CUSTOMLIBDIR}/$$i; \
|
||||||
chmod 0444 ${CUSTOMLIBDIR}/$$i; \
|
${CHMOD} 0444 ${CUSTOMLIBDIR}/$$i; \
|
||||||
done
|
done
|
||||||
${Q}for i in ${CUSTOM_CALC_FILES}; do \
|
${Q}for i in ${CUSTOM_CALC_FILES}; do \
|
||||||
echo rm -f ${CUSTOMLIBDIR}/$$i; \
|
echo rm -f ${CUSTOMLIBDIR}/$$i; \
|
||||||
rm -f ${CUSTOMLIBDIR}/$$i; \
|
rm -f ${CUSTOMLIBDIR}/$$i; \
|
||||||
echo cp $$i ${CUSTOMLIBDIR}; \
|
echo cp $$i ${CUSTOMLIBDIR}; \
|
||||||
cp $$i ${CUSTOMLIBDIR}; \
|
cp $$i ${CUSTOMLIBDIR}; \
|
||||||
echo chmod 0444 ${CUSTOMLIBDIR}/$$i; \
|
echo ${CHMOD} 0444 ${CUSTOMLIBDIR}/$$i; \
|
||||||
chmod 0444 ${CUSTOMLIBDIR}/$$i; \
|
${CHMOD} 0444 ${CUSTOMLIBDIR}/$$i; \
|
||||||
done
|
done
|
||||||
${Q}for i in ${CUSTOM_HELP}; do \
|
${Q}for i in ${CUSTOM_HELP}; do \
|
||||||
echo rm -f ${CUSTOMHELPDIR}/$$i; \
|
echo rm -f ${CUSTOMHELPDIR}/$$i; \
|
||||||
rm -f ${CUSTOMHELPDIR}/$$i; \
|
rm -f ${CUSTOMHELPDIR}/$$i; \
|
||||||
echo cp $$i ${CUSTOMHELPDIR}; \
|
echo cp $$i ${CUSTOMHELPDIR}; \
|
||||||
cp $$i ${CUSTOMHELPDIR}; \
|
cp $$i ${CUSTOMHELPDIR}; \
|
||||||
echo chmod 0444 ${CUSTOMHELPDIR}/$$i; \
|
echo ${CHMOD} 0444 ${CUSTOMHELPDIR}/$$i; \
|
||||||
chmod 0444 ${CUSTOMHELPDIR}/$$i; \
|
${CHMOD} 0444 ${CUSTOMHELPDIR}/$$i; \
|
||||||
done
|
done
|
||||||
-${Q}if [ ! -z ${ALLOW_CUSTOM} ]; then \
|
-${Q}if [ ! -z ${ALLOW_CUSTOM} ]; then \
|
||||||
echo "rm -f ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
echo "rm -f ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
||||||
rm -f ${CUSTOMLIBDIR}/libcustcalc.a; \
|
rm -f ${CUSTOMLIBDIR}/libcustcalc.a; \
|
||||||
echo "cp libcustcalc.a ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
echo "cp libcustcalc.a ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
||||||
cp libcustcalc.a ${CUSTOMLIBDIR}/libcustcalc.a; \
|
cp libcustcalc.a ${CUSTOMLIBDIR}/libcustcalc.a; \
|
||||||
echo "chmod 0644 ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
echo "${CHMOD} 0644 ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
||||||
chmod 0644 ${CUSTOMLIBDIR}/libcustcalc.a; \
|
${CHMOD} 0644 ${CUSTOMLIBDIR}/libcustcalc.a; \
|
||||||
echo "${RANLIB} ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
echo "${RANLIB} ${CUSTOMLIBDIR}/libcustcalc.a"; \
|
||||||
${RANLIB} ${CUSTOMLIBDIR}/libcustcalc.a; \
|
${RANLIB} ${CUSTOMLIBDIR}/libcustcalc.a; \
|
||||||
fi
|
fi
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user