mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
58d94b08d8 | ||
|
7165fa17c7 |
147
BUGS
147
BUGS
@@ -68,33 +68,14 @@ of a context diff patch).
|
||||
|
||||
Known bugs:
|
||||
|
||||
The stoponerror() facility does not seem to work, or perhaps
|
||||
the stoponerror help file is incorrect. The stoponerror help file
|
||||
lacks examples because of this problem.
|
||||
|
||||
We are sure some more bugs exist. When you find them, please let
|
||||
us know! See the above for details on how to report and were to
|
||||
EMail your bug reports and hopefully patches to fix them.
|
||||
|
||||
* The following command:
|
||||
|
||||
calc 'read ellip; efactor(13*17*19)'
|
||||
|
||||
will generate the following error:
|
||||
|
||||
efactor(iN,ia,B,force) defined
|
||||
point_print(p) defined
|
||||
point_mul(p1,p2) defined
|
||||
point_square(p) defined
|
||||
point_pow(p,pow) defined
|
||||
A = 1
|
||||
2 (1,1)
|
||||
"point_square": line 165: Not initializing matrix, object or list
|
||||
Error in commands
|
||||
|
||||
This is not an error in the ellip standard calc resource files.
|
||||
It is a bug inside calc. Versions going back as far as version
|
||||
2.11.4t2 in the year 2000 (and perhaps even further) alll have
|
||||
this bug.
|
||||
|
||||
Anyone want to track down and fix this bug?
|
||||
|
||||
=-=
|
||||
|
||||
mis-features in calc:
|
||||
@@ -129,55 +110,6 @@ mis-features in calc:
|
||||
|
||||
Problems with old systems that have known work-a-rounds:
|
||||
|
||||
* The gcc as shipped with Redhat 7 perhaps other Linux distributions
|
||||
has a bug causes calc to dump core on startup when calc is:
|
||||
|
||||
compiled optimized (-O, -O1, -O2 or -O3)
|
||||
|
||||
AND
|
||||
|
||||
compiled with debugging (-g or -g3)
|
||||
|
||||
AND
|
||||
|
||||
when calc is compiled with readline (see USE_READLINE,
|
||||
READLINE_LIB and READLINE_INCLUDE in the Makefile)
|
||||
|
||||
This is known as the Redhat 7 readlne problem.
|
||||
|
||||
On Redhat, the gcc -v which has this problem is:
|
||||
|
||||
gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-85)
|
||||
|
||||
there may be other gcc versions that also suffer this fate.
|
||||
|
||||
The readlines associated with problem are:
|
||||
|
||||
readline-4.1-5
|
||||
readline2.2.1-2.2.1-2
|
||||
readline-devel-4.1-5
|
||||
|
||||
One work-a-round is to compile calc WITHOUT readline. In the
|
||||
Makefile be sure that:
|
||||
|
||||
USE_READLINE=
|
||||
READLINE_LIB=
|
||||
READLINE_INCLUDE=
|
||||
|
||||
i.e., these Makefile vars are empty.
|
||||
|
||||
If you must use readline, then an alternate work-a-round is to
|
||||
change the DEBUG Makefile variable to either:
|
||||
|
||||
compile for speed: -O3 (or -O2 if you do not have -O3)
|
||||
compile to debug: -g3 (or -g if you do not have -g3)
|
||||
|
||||
but not both.
|
||||
|
||||
See RH bug #57889 for details:
|
||||
|
||||
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=57889
|
||||
|
||||
* There is a bug in gcc-2.95 that causes calc, when compiled with -O2,
|
||||
to fail the regression test. The work-a-round is to compile with -O
|
||||
or to use gcc-2.96 or later.
|
||||
@@ -227,59 +159,6 @@ Problems with old systems that have known work-a-rounds:
|
||||
if (n < 0) n = 0;
|
||||
z.sign = 0;
|
||||
|
||||
* Solaris cc somtimes barfs while compiling zrand.c. In particular, calc
|
||||
barfs on on the SVAL macro. The work-a-round is to use the Solaric cc
|
||||
Makefile set sets -DFORCE_STDC. I.e,:
|
||||
|
||||
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}
|
||||
|
||||
* There is a bug in some versions of the Dec/Compaq cc for the Alpha
|
||||
where the following:
|
||||
|
||||
#include <stdio.h>
|
||||
#define SVAL(a,b) (unsigned long)(0x ## a ## b ## ULL)
|
||||
main(){SVAL(b8a8aeb0,8168eadc);}
|
||||
|
||||
fails because it puts a space inside the concatenated hex. Calc
|
||||
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
|
||||
compile with cc -std0 or to use a later version of their compiler.
|
||||
|
||||
* 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
|
||||
messages for calc version 2.11.0t9.4 using the Dec's cc with -O2:
|
||||
|
||||
600: Beginning test_bignums
|
||||
601: muldivcheck 1
|
||||
**** abc != acb: 602: muldivcheck 2
|
||||
**** acb != bac: 602: muldivcheck 2
|
||||
...
|
||||
**** t4 != a4: 622: algcheck 1
|
||||
**** t5 != a5: 622: algcheck 1
|
||||
**** t6 != a6: 622: algcheck 1
|
||||
**** t4 != a4: 622: algcheck 1
|
||||
...
|
||||
|
||||
it finally hangs at test 2000.
|
||||
|
||||
The work-a-round is to compile calc without the optimizer. If this
|
||||
happens to you, try compiling without -O and without -O2. I.e., in
|
||||
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
|
||||
@@ -295,19 +174,7 @@ Problems with old systems that have known work-a-rounds:
|
||||
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
|
||||
## Copyright (C) 1999-2006 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
|
||||
@@ -323,8 +190,8 @@ Problems with old systems that have known work-a-rounds:
|
||||
## 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.21 $
|
||||
## @(#) $Id: BUGS,v 29.21 2004/10/23 01:13:51 chongo Exp $
|
||||
## @(#) $Revision: 29.24 $
|
||||
## @(#) $Id: BUGS,v 29.24 2006/05/21 07:54:13 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
|
||||
##
|
||||
## Under source code control: 1994/03/18 14:06:13
|
||||
|
185
CHANGES
185
CHANGES
@@ -1,11 +1,159 @@
|
||||
The following are the changes from calc version 2.11.10.1 to date:
|
||||
The following are the changes from calc version 2.12.0 to date:
|
||||
|
||||
Fixed ellip.cal to deal with a calc syntax change that happened
|
||||
many ages ago but was never applied to this file until now.
|
||||
This bug was fixed by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||
|
||||
Fixed a problem where comments using # followed by a !, newline or
|
||||
another # works. This bug was fixed by Ernest Bowen <ebowen at une
|
||||
dot edu dot au>.
|
||||
|
||||
The show builtins display for functions with long descriptions
|
||||
is now broken into multi-line descriptions.
|
||||
|
||||
The str functions, such as strcpy(s1, s2), will now copy as many
|
||||
characters as possible from s2 to s1, treating '\0' like any other
|
||||
character until the end of s2 is reached. If s2 is shorter than s1,
|
||||
a '\0' is inserted.
|
||||
|
||||
The strcmp(s1, s2) builtin, for strings s1, s2: strcmp(s1, s2) == 0 now
|
||||
means the same as s1 == s2.
|
||||
|
||||
The str(s) builtin has been changed so that it will return only the
|
||||
string formed by the characters of 's' up to the first '\0'.
|
||||
|
||||
The substr(s, start, num) builtin has been changed so that '\0' characters
|
||||
are treated like any other.
|
||||
|
||||
Fixed a bug where strcpy("", "a") used to cause a segmentation fault.
|
||||
This bug was fixed by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||
|
||||
Make minor change to natnumset.cal in how the tail variable is initialized.
|
||||
|
||||
Fixed bugs in the strcmp, strncmp, strcpy, and strncpy help files.
|
||||
This bug was fixed by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||
|
||||
Added cal/screen.cal which Defines ANSI control sequences providing
|
||||
(i.e., cursor movement, changing foreground or background color,
|
||||
etc.) for VT100 terminals and terminal window emulators (i.e., xterm,
|
||||
Apple OS/X Terminal, etc.) that support them. For example:
|
||||
|
||||
read screen
|
||||
print green:"This is green. ":red:"This is red.":black
|
||||
|
||||
Fixed a bug where too many open files returned E_FOPEN3. Now
|
||||
a new error symbol F_MANYOPEN is used for too many open files.
|
||||
|
||||
Added the builtin function fpathopen() to open a file while
|
||||
searching along a path:
|
||||
|
||||
; fd2 = fpathopen("tmp/date", "r", ".:~:~sc:/tmp:/var/tmp:/var")
|
||||
; print fd2
|
||||
"/var/tmp/date"
|
||||
|
||||
By default, fpathopen() searches along CALCPATH.
|
||||
|
||||
Added the calcpath() builtin function to return the current value
|
||||
of CALCPATH.
|
||||
|
||||
Fixed prompt characters in the EXAMPLE section of help files.
|
||||
|
||||
Fixed problems related to the protect function and its documentation.
|
||||
This bug was reported by David Gilham <davidgilham at gmail dot com>.
|
||||
This bug was fixed by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||
|
||||
Raised the limit of exponent in exponential notation. It was set to
|
||||
arbitrary 1000000 (making 1e1000001 in invalid exponential notation
|
||||
value). The exponent for exponential notation is now int(MAXLONG/10).
|
||||
On 32 bit machines, this means a limit of 214748364. On 64 bit
|
||||
machines, this means 922337203685477580. Of course, you may not
|
||||
have enough memory to hold such huge values, but if you did you can
|
||||
now express such values in exponential notation.
|
||||
|
||||
Added log() builtin for base 10 logarithm.
|
||||
|
||||
Fixed problems where internal use of libc strcpy() might have caused
|
||||
a buffer overflow. Calc now only uses libc strcpy() when the source
|
||||
string is a constant.
|
||||
|
||||
The calc STRING and STRINGHEAD now use the standard size_t (an unsigned
|
||||
type) length. Calc mostly uses size_t in dealing with string lengths
|
||||
and object sizes when possible.
|
||||
|
||||
Added ${CCWERR} make variable to allow one to force compiler warnings
|
||||
to be treated as errors. The ${CC} make variable now uses ${CCWERR}
|
||||
however the ${LCC} (used by the Makefile test code for building hsrc
|
||||
files) does not use ${CCWERR}. By default, ${CCWERR} is empty.
|
||||
In development Makefiles, we set CCWERR= -Werror to force us to
|
||||
address compiler warnings before the next release.
|
||||
|
||||
The calc make variable, CALCPAGER, now defaults to CALCPAGER= less
|
||||
because the less utility is now very common. Set CALCPAGER= more
|
||||
if you do not have less.
|
||||
|
||||
Calc source had two styles of switch indentation. Converted the
|
||||
style where case statements were indented with respect to the switch
|
||||
statement into the style where the case statements are at the same
|
||||
level. When comparing with older source, one may use the -b argument
|
||||
of the diff command to ignore changes in amount of white space:
|
||||
|
||||
diff -b -r -u calc-2.11.11 calc-2.12.0
|
||||
|
||||
The read, write, and help commands use the value of global string
|
||||
variable if the symbol name starts with a $. For example:
|
||||
|
||||
global x = "lucas.cal";
|
||||
read $x; /* same as read lucas.cal or read "lucas.cal" */
|
||||
|
||||
Added dotest.cal resource. Based on a design by Ernest Bowen
|
||||
<ebowen at une dot edu dot au>, the dotest evaluates individual
|
||||
lines from a file. The dotest() function takes 1 to 3 arguments:
|
||||
|
||||
dotest(dotest_file [,dotest_code [,dotest_maxcond]])
|
||||
|
||||
dotest_file
|
||||
|
||||
Search along CALCPATH for dotest_file, which contains lines that
|
||||
should evaluate to 1. Comment lines and empty lines are ignored.
|
||||
Comment lines should use ## instead of the multi like /* ... */
|
||||
because lines are evaluated one line at a time.
|
||||
|
||||
dotest_code
|
||||
|
||||
Assign the code number that is to be printed at the start of
|
||||
each non-error line and after **** in each error line.
|
||||
The default code number is 999.
|
||||
|
||||
dotest_maxcond
|
||||
|
||||
The maximum number of error conditions that may be detected.
|
||||
An error condition is not a sign of a problem, in some cases
|
||||
a line deliberately forces an error condition. A value of -1,
|
||||
the default, implies a maximum of 2147483647.
|
||||
|
||||
Global variables and functions must be declared ahead of time because
|
||||
the dotest scope of evaluation is a line at a time. For example:
|
||||
|
||||
read dotest.cal
|
||||
read set8700.cal
|
||||
dotest("set8700.line");
|
||||
|
||||
Updated the todo / wish list items. The top priority now is to
|
||||
convert calc to GNU autoconf / configure to build the calc.
|
||||
|
||||
help todo
|
||||
|
||||
Added missing help file for the stoponerror() builtin.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.11.10.1 to 2.11.11:
|
||||
|
||||
Fixed a bug reported by the sourceforge user: cedars where:
|
||||
|
||||
ln(exp(6)) == 3 /* WRONG!!! */
|
||||
|
||||
incorrectly returned 1. This bug was fixed by Ernest Bowen
|
||||
<ernie at turing dot une dot edu dot au>. The regression test
|
||||
<ebowen at une dot edu dot au>. The regression test
|
||||
was expanded to cover this issue.
|
||||
|
||||
Added minor improvements to hash regression testing of pi().
|
||||
@@ -24,6 +172,33 @@ The following are the changes from calc version 2.11.10.1 to date:
|
||||
to the BUGS file. See "help bugs" or the BUGS source file for details.
|
||||
Anyone want to track down and fix this bug?
|
||||
|
||||
Fixed typo in the "help mat" example and improved the mat_print example.
|
||||
|
||||
Renamed most COMPLEX C function names to start with c_ to avoid
|
||||
conflicts with new C standard functions. Note that the calc
|
||||
builtin function names remain the same. The C function names
|
||||
inside the C source that calc is written in changed. This means
|
||||
that code that linked to libcalc.a will need to change in order
|
||||
to call calc's functions instead of the C standard functions.
|
||||
See cmath.h, comfunc.c, and commath.c for details. See also
|
||||
http://www.opengroup.org/onlinepubs/009695399/basedefs/complex.h.html
|
||||
for names of the new C standard functions.
|
||||
|
||||
Changed the calc man page to note that using -- in the command will
|
||||
separate calc options from arguments as in:
|
||||
|
||||
calc -p -- -1 - -7
|
||||
|
||||
Noted how Apple OS X can make use of readline in the Makefile.
|
||||
In particular:
|
||||
|
||||
# For Apple OS X: install fink from http://fink.sourceforge.net
|
||||
# and then do a 'fink install readline' and then use:
|
||||
#
|
||||
READLINE_LIB= -L/sw/lib -lreadline -lhistory -lncurses
|
||||
|
||||
Added linear.cal as a calc standard resource file.
|
||||
|
||||
|
||||
The following are the changes from calc version 2.11.10 to 2.11.10:
|
||||
|
||||
@@ -2152,6 +2327,8 @@ The following are the changes from calc version 2.10.3t5.38 to 2.11.3t5.46:
|
||||
into a single section.
|
||||
|
||||
|
||||
|
||||
|
||||
The following are the changes from calc version 2.10.3t5.34 to 2.10.3t5.37:
|
||||
|
||||
Per request from David I Bell, the README line:
|
||||
@@ -5785,8 +5962,8 @@ Following is a list of visible changes to calc from version 1.24.7 to 1.26.1:
|
||||
## 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.70 $
|
||||
## @(#) $Id: CHANGES,v 29.70 2004/10/23 01:16:23 chongo Exp $
|
||||
## @(#) $Revision: 29.76 $
|
||||
## @(#) $Id: CHANGES,v 29.76 2006/05/21 07:55:17 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $
|
||||
##
|
||||
## Under source code control: 1993/06/02 18:12:57
|
||||
|
6
COPYING
6
COPYING
@@ -12,8 +12,8 @@ This file is Copyrighted
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
# @(#) $Revision: 29.7 $
|
||||
# @(#) $Id: COPYING,v 29.7 2003/02/26 16:54:59 chongo Exp $
|
||||
# @(#) $Revision: 29.8 $
|
||||
# @(#) $Id: COPYING,v 29.8 2006/05/01 19:16:57 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $
|
||||
|
||||
=-=
|
||||
@@ -170,7 +170,7 @@ Calc copyrights and exception files
|
||||
|
||||
shs1.c shs1.h shs.c shs.h
|
||||
md5.c md5.h COPYING COPYING-LGPL
|
||||
cal/qtime.cal
|
||||
cal/qtime.cal cal/screen.cal
|
||||
|
||||
The file COPYING-LGPL, which contains a copy of the version 2.1
|
||||
GNU Lesser General Public License, is itself Copyrighted by the
|
||||
|
50
Makefile
50
Makefile
@@ -10,14 +10,13 @@
|
||||
# or less. It compiles with gcc -O3 -g3 as well. You can change all
|
||||
# this by modifying the Makefile variables below.
|
||||
#
|
||||
# NOTE: You might want use the READLINE facility and the less pager if
|
||||
# your system supports them. To do this, set:
|
||||
# NOTE: You might want use the READLINE facility if your system
|
||||
# has the GNU readline headers and libaraies:
|
||||
#
|
||||
# USE_READLINE= -DUSE_READLINE
|
||||
# READLINE_LIB= -lreadline -lhistory -lncurses
|
||||
# CALCPAGER= less
|
||||
#
|
||||
# Copyright (C) 1999-2004 Landon Curt Noll
|
||||
# Copyright (C) 1999-2006 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
|
||||
@@ -33,8 +32,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
MAKEFILE_REV= $$Revision: 29.73 $$
|
||||
# @(#) $Id: Makefile.ship,v 29.73 2004/07/28 12:52:37 chongo Exp $
|
||||
MAKEFILE_REV= $$Revision: 29.75 $$
|
||||
# @(#) $Id: Makefile.ship,v 29.75 2006/05/19 13:54:05 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/Makefile.ship,v $
|
||||
#
|
||||
# Under source code control: 1990/02/15 01:48:41
|
||||
@@ -794,6 +793,11 @@ READLINE_LIB=
|
||||
#READLINE_LIB= -L/usr/gnu/lib -lreadline -lhistory -lncurses
|
||||
#READLINE_LIB= -L/usr/local/lib -lreadline -lhistory -lncurses
|
||||
#
|
||||
# For Apple OS X: install fink from http://fink.sourceforge.net
|
||||
# and then do a 'fink install readline' and then use:
|
||||
#
|
||||
#READLINE_LIB= -L/sw/lib -lreadline -lhistory -lncurses
|
||||
#
|
||||
READLINE_INCLUDE=
|
||||
#READLINE_INCLUDE= -I/usr/gnu/include
|
||||
#READLINE_INCLUDE= -I/usr/local/include
|
||||
@@ -802,10 +806,10 @@ READLINE_INCLUDE=
|
||||
#
|
||||
# Select CALCPAGER= less.exe -ci for DJGPP.
|
||||
#
|
||||
CALCPAGER= more
|
||||
#CALCPAGER= more
|
||||
#CALCPAGER= pg
|
||||
#CALCPAGER= cat
|
||||
#CALCPAGER= less
|
||||
CALCPAGER= less
|
||||
#CALCPAGER= less.exe -ci
|
||||
|
||||
# Debug/Optimize options for ${CC} and ${LCC}
|
||||
@@ -978,6 +982,9 @@ EXT=
|
||||
#
|
||||
# CCOPT are flags given to ${CC} for optimization
|
||||
# CCWARN are flags given to ${CC} for warning message control
|
||||
# CCWERR are flags given to ${CC} to make warnings fatal errors
|
||||
# NOTE: CCWERR is only set in development Makefiles and must
|
||||
# only be used with ${CC}, not ${LCC}.
|
||||
# CCMISC are misc flags given to ${CC}
|
||||
#
|
||||
# CFLAGS are all flags given to ${CC} [[often includes CCOPT, CCWARN, CCMISC]]
|
||||
@@ -996,6 +1003,7 @@ EXT=
|
||||
# Tested on Red Hat 6.0 Linux but should run on almost any Linux release.
|
||||
#
|
||||
CCWARN= -Wall -W -Wno-comment
|
||||
CCWERR=
|
||||
CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
CCMISC=
|
||||
#
|
||||
@@ -1006,13 +1014,14 @@ LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
|
||||
ILDFLAGS=
|
||||
#
|
||||
LCC= gcc
|
||||
CC= ${PURIFY} ${LCC}
|
||||
CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
# gcc set (some call it gcc2, some call it gcc)
|
||||
# gcc set
|
||||
#
|
||||
#CCWARN= -Wall -W -Wno-comment
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC=
|
||||
#
|
||||
@@ -1023,8 +1032,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= gcc
|
||||
#LCC= gcc2
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1034,6 +1042,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# If -O2 -g is not supported try: DEBUG= -O -g
|
||||
#
|
||||
#CCWARN=
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC=
|
||||
#
|
||||
@@ -1044,7 +1053,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1062,6 +1071,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# woff 1209: cancel 'controlling expression is constant' warnings
|
||||
#
|
||||
#CCWARN= -fullwarn -woff 1209
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -rdata_shared
|
||||
#
|
||||
@@ -1072,7 +1082,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc -n32 -xansi
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1085,6 +1095,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# If 'make check' fails use: DEBUG= -g
|
||||
#
|
||||
#CCWARN=
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= +e
|
||||
#
|
||||
@@ -1095,7 +1106,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1105,6 +1116,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# If -O2 -g is not supported try: DEBUG= -O -g
|
||||
#
|
||||
#CCWARN=
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -qlanglvl=ansi
|
||||
#
|
||||
@@ -1115,7 +1127,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1128,6 +1140,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# to avoid the use of -Xc (which as a lose performance wise).
|
||||
#
|
||||
#CCWARN=
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC= -DFORCE_STDC
|
||||
#
|
||||
@@ -1138,7 +1151,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
#
|
||||
###
|
||||
#
|
||||
@@ -1147,6 +1160,7 @@ CC= ${PURIFY} ${LCC}
|
||||
# For better performance, set the following: DEBUG= -std0 -fast -O4 -static
|
||||
#
|
||||
#CCWARN=
|
||||
#CCWERR=
|
||||
#CCOPT= ${DEBUG} ${NO_SHARED}
|
||||
#CCMISC=
|
||||
#
|
||||
@@ -1157,7 +1171,7 @@ CC= ${PURIFY} ${LCC}
|
||||
#ILDFLAGS=
|
||||
#
|
||||
#LCC= cc
|
||||
#CC= ${PURIFY} ${LCC}
|
||||
#CC= ${PURIFY} ${LCC} ${CCWERR}
|
||||
|
||||
##############################################################################
|
||||
#-=-=-=-=-=-=-=-=- Be careful if you change something below -=-=-=-=-=-=-=-=-#
|
||||
|
226
addop.c
226
addop.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* addop - add opcodes to a function being compiled
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell and Ernest Bowen
|
||||
* Copyright (C) 1999-2006 David I. Bell and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* 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: addop.c,v 29.5 2004/02/23 14:04:01 chongo Exp $
|
||||
* @(#) $Revision: 29.8 $
|
||||
* @(#) $Id: addop.c,v 29.8 2006/05/20 08:43:55 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:10
|
||||
@@ -184,7 +184,7 @@ void
|
||||
endfunc(void)
|
||||
{
|
||||
register FUNC *fp; /* function just finished */
|
||||
unsigned long size; /* size of just created function */
|
||||
size_t size; /* size of just created function */
|
||||
unsigned long index;
|
||||
|
||||
if (oldop != OP_RETURN) {
|
||||
@@ -211,7 +211,7 @@ endfunc(void)
|
||||
if (newname[0] != '*' && (conf->traceflags & TRACE_FNCODES)) {
|
||||
dumpnames = TRUE;
|
||||
for (size = 0; size < fp->f_opcodecount; ) {
|
||||
printf("%ld: ", (long)size);
|
||||
printf("%u: ", size);
|
||||
size += dumpop(&fp->f_opcodes[size]);
|
||||
}
|
||||
}
|
||||
@@ -451,124 +451,124 @@ addop(long op)
|
||||
* slightly optimize the code depending on the various combinations.
|
||||
*/
|
||||
switch (op) {
|
||||
case OP_GETVALUE:
|
||||
switch (oldop) {
|
||||
case OP_NUMBER:
|
||||
case OP_ZERO:
|
||||
case OP_ONE:
|
||||
case OP_IMAGINARY:
|
||||
case OP_GETEPSILON:
|
||||
case OP_SETEPSILON:
|
||||
case OP_STRING:
|
||||
case OP_UNDEF:
|
||||
case OP_GETCONFIG:
|
||||
case OP_SETCONFIG:
|
||||
return;
|
||||
case OP_DUPLICATE:
|
||||
diff = 1;
|
||||
oldop = OP_DUPVALUE;
|
||||
break;
|
||||
case OP_FIADDR:
|
||||
diff = 1;
|
||||
oldop = OP_FIVALUE;
|
||||
break;
|
||||
case OP_GLOBALADDR:
|
||||
diff = 1 + PTR_SIZE;
|
||||
oldop = OP_GLOBALVALUE;
|
||||
break;
|
||||
case OP_LOCALADDR:
|
||||
oldop = OP_LOCALVALUE;
|
||||
break;
|
||||
case OP_PARAMADDR:
|
||||
oldop = OP_PARAMVALUE;
|
||||
break;
|
||||
case OP_ELEMADDR:
|
||||
oldop = OP_ELEMVALUE;
|
||||
break;
|
||||
default:
|
||||
cut = FALSE;
|
||||
case OP_GETVALUE:
|
||||
switch (oldop) {
|
||||
case OP_NUMBER:
|
||||
case OP_ZERO:
|
||||
case OP_ONE:
|
||||
case OP_IMAGINARY:
|
||||
case OP_GETEPSILON:
|
||||
case OP_SETEPSILON:
|
||||
case OP_STRING:
|
||||
case OP_UNDEF:
|
||||
case OP_GETCONFIG:
|
||||
case OP_SETCONFIG:
|
||||
return;
|
||||
case OP_DUPLICATE:
|
||||
diff = 1;
|
||||
oldop = OP_DUPVALUE;
|
||||
break;
|
||||
case OP_FIADDR:
|
||||
diff = 1;
|
||||
oldop = OP_FIVALUE;
|
||||
break;
|
||||
case OP_GLOBALADDR:
|
||||
diff = 1 + PTR_SIZE;
|
||||
oldop = OP_GLOBALVALUE;
|
||||
break;
|
||||
case OP_LOCALADDR:
|
||||
oldop = OP_LOCALVALUE;
|
||||
break;
|
||||
case OP_PARAMADDR:
|
||||
oldop = OP_PARAMVALUE;
|
||||
break;
|
||||
case OP_ELEMADDR:
|
||||
oldop = OP_ELEMVALUE;
|
||||
break;
|
||||
default:
|
||||
cut = FALSE;
|
||||
|
||||
}
|
||||
if (cut) {
|
||||
fp->f_opcodes[count - diff] = oldop;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (cut) {
|
||||
fp->f_opcodes[count - diff] = oldop;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case OP_POP:
|
||||
switch (oldop) {
|
||||
case OP_ASSIGN:
|
||||
fp->f_opcodes[count-1] = OP_ASSIGNPOP;
|
||||
oldop = OP_ASSIGNPOP;
|
||||
return;
|
||||
case OP_NUMBER:
|
||||
case OP_IMAGINARY:
|
||||
q = constvalue(fp->f_opcodes[count-1]);
|
||||
qfree(q);
|
||||
break;
|
||||
case OP_POP:
|
||||
switch (oldop) {
|
||||
case OP_ASSIGN:
|
||||
fp->f_opcodes[count-1] = OP_ASSIGNPOP;
|
||||
oldop = OP_ASSIGNPOP;
|
||||
return;
|
||||
case OP_NUMBER:
|
||||
case OP_IMAGINARY:
|
||||
q = constvalue(fp->f_opcodes[count-1]);
|
||||
qfree(q);
|
||||
break;
|
||||
case OP_STRING:
|
||||
sfree(findstring((long)fp->f_opcodes[count-1]));
|
||||
break;
|
||||
case OP_LOCALADDR:
|
||||
case OP_PARAMADDR:
|
||||
break;
|
||||
case OP_GLOBALADDR:
|
||||
diff = 1 + PTR_SIZE;
|
||||
break;
|
||||
case OP_UNDEF:
|
||||
fp->f_opcodecount -= 1;
|
||||
oldop = OP_NOP;
|
||||
oldoldop = OP_NOP;
|
||||
return;
|
||||
default:
|
||||
cut = FALSE;
|
||||
}
|
||||
if (cut) {
|
||||
fp->f_opcodecount -= diff;
|
||||
oldop = OP_NOP;
|
||||
oldoldop = OP_NOP;
|
||||
fprintf(stderr,
|
||||
"Line %ld: unused value ignored\n",
|
||||
linenumber());
|
||||
return;
|
||||
}
|
||||
case OP_STRING:
|
||||
sfree(findstring((long)fp->f_opcodes[count-1]));
|
||||
break;
|
||||
case OP_NEGATE:
|
||||
if (oldop == OP_NUMBER) {
|
||||
q = constvalue(fp->f_opcodes[count-1]);
|
||||
fp->f_opcodes[count-1] = addqconstant(qneg(q));
|
||||
qfree(q);
|
||||
return;
|
||||
}
|
||||
case OP_LOCALADDR:
|
||||
case OP_PARAMADDR:
|
||||
break;
|
||||
case OP_GLOBALADDR:
|
||||
diff = 1 + PTR_SIZE;
|
||||
break;
|
||||
case OP_UNDEF:
|
||||
fp->f_opcodecount -= 1;
|
||||
oldop = OP_NOP;
|
||||
oldoldop = OP_NOP;
|
||||
return;
|
||||
default:
|
||||
cut = FALSE;
|
||||
}
|
||||
if (cut) {
|
||||
fp->f_opcodecount -= diff;
|
||||
oldop = OP_NOP;
|
||||
oldoldop = OP_NOP;
|
||||
fprintf(stderr,
|
||||
"Line %ld: unused value ignored\n",
|
||||
linenumber());
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case OP_NEGATE:
|
||||
if (oldop == OP_NUMBER) {
|
||||
q = constvalue(fp->f_opcodes[count-1]);
|
||||
fp->f_opcodes[count-1] = addqconstant(qneg(q));
|
||||
qfree(q);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (oldop == OP_NUMBER) {
|
||||
if (oldoldop == OP_NUMBER) {
|
||||
q1 = constvalue(fp->f_opcodes[count - 3]);
|
||||
q2 = constvalue(fp->f_opcodes[count - 1]);
|
||||
switch (op) {
|
||||
case OP_DIV:
|
||||
if (qiszero(q2)) {
|
||||
cut = FALSE;
|
||||
break;
|
||||
}
|
||||
q = qqdiv(q1,q2);
|
||||
break;
|
||||
case OP_MUL:
|
||||
q = qmul(q1,q2);
|
||||
break;
|
||||
case OP_ADD:
|
||||
q = qqadd(q1,q2);
|
||||
break;
|
||||
case OP_SUB:
|
||||
q = qsub(q1,q2);
|
||||
break;
|
||||
case OP_POWER:
|
||||
if (qisfrac(q2) || qisneg(q2))
|
||||
cut = FALSE;
|
||||
else
|
||||
q = qpowi(q1,q2);
|
||||
break;
|
||||
default:
|
||||
case OP_DIV:
|
||||
if (qiszero(q2)) {
|
||||
cut = FALSE;
|
||||
break;
|
||||
}
|
||||
q = qqdiv(q1,q2);
|
||||
break;
|
||||
case OP_MUL:
|
||||
q = qmul(q1,q2);
|
||||
break;
|
||||
case OP_ADD:
|
||||
q = qqadd(q1,q2);
|
||||
break;
|
||||
case OP_SUB:
|
||||
q = qsub(q1,q2);
|
||||
break;
|
||||
case OP_POWER:
|
||||
if (qisfrac(q2) || qisneg(q2))
|
||||
cut = FALSE;
|
||||
else
|
||||
q = qpowi(q1,q2);
|
||||
break;
|
||||
default:
|
||||
cut = FALSE;
|
||||
}
|
||||
if (cut) {
|
||||
qfree(q1);
|
||||
|
144
blkcpy.c
144
blkcpy.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* blkcpy - general values and related routines used by the calculator
|
||||
*
|
||||
* Copyright (C) 1999-2004 Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2006 Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: Landon Curt Noll
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* 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: blkcpy.c,v 29.5 2004/02/23 14:04:01 chongo Exp $
|
||||
* @(#) $Revision: 29.9 $
|
||||
* @(#) $Id: blkcpy.c,v 29.9 2006/05/20 08:43:55 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $
|
||||
*
|
||||
* Under source code control: 1997/04/18 20:41:26
|
||||
@@ -73,51 +73,51 @@ copystod(VALUE *svp, long ssi, long num, VALUE *dvp, long dsi)
|
||||
* determine/check source type
|
||||
*/
|
||||
switch(svp->v_type) {
|
||||
case V_NBLOCK:
|
||||
if (svp->v_nblock->subtype & V_NOCOPYFROM)
|
||||
return E_COPY15;
|
||||
sblk = svp->v_nblock->blk;
|
||||
if (sblk->data == NULL)
|
||||
return E_COPY8;
|
||||
break;
|
||||
case V_BLOCK:
|
||||
sblk = svp->v_block;
|
||||
break;
|
||||
case V_STR:
|
||||
case V_OCTET:
|
||||
case V_NUM:
|
||||
case V_FILE:
|
||||
case V_MAT:
|
||||
case V_LIST:
|
||||
break;
|
||||
default:
|
||||
return E_COPY9;
|
||||
case V_NBLOCK:
|
||||
if (svp->v_nblock->subtype & V_NOCOPYFROM)
|
||||
return E_COPY15;
|
||||
sblk = svp->v_nblock->blk;
|
||||
if (sblk->data == NULL)
|
||||
return E_COPY8;
|
||||
break;
|
||||
case V_BLOCK:
|
||||
sblk = svp->v_block;
|
||||
break;
|
||||
case V_STR:
|
||||
case V_OCTET:
|
||||
case V_NUM:
|
||||
case V_FILE:
|
||||
case V_MAT:
|
||||
case V_LIST:
|
||||
break;
|
||||
default:
|
||||
return E_COPY9;
|
||||
}
|
||||
|
||||
/*
|
||||
* determine/check destination type
|
||||
*/
|
||||
switch(dvp->v_type) {
|
||||
case V_NBLOCK:
|
||||
if (dvp->v_nblock->subtype & V_NOCOPYTO)
|
||||
return E_COPY16;
|
||||
noreloc |=((dvp->v_nblock->subtype & V_NOREALLOC) != 0);
|
||||
dblk = dvp->v_nblock->blk;
|
||||
if (dblk->data == NULL)
|
||||
return E_COPY10;
|
||||
break;
|
||||
case V_BLOCK:
|
||||
noreloc = ((dvp->v_subtype & V_NOREALLOC) != 0);
|
||||
dblk = dvp->v_block;
|
||||
break;
|
||||
case V_STR:
|
||||
case V_NUM:
|
||||
case V_FILE:
|
||||
case V_MAT:
|
||||
case V_LIST:
|
||||
break;
|
||||
default:
|
||||
return E_COPY11;
|
||||
case V_NBLOCK:
|
||||
if (dvp->v_nblock->subtype & V_NOCOPYTO)
|
||||
return E_COPY16;
|
||||
noreloc |=((dvp->v_nblock->subtype & V_NOREALLOC) != 0);
|
||||
dblk = dvp->v_nblock->blk;
|
||||
if (dblk->data == NULL)
|
||||
return E_COPY10;
|
||||
break;
|
||||
case V_BLOCK:
|
||||
noreloc = ((dvp->v_subtype & V_NOREALLOC) != 0);
|
||||
dblk = dvp->v_block;
|
||||
break;
|
||||
case V_STR:
|
||||
case V_NUM:
|
||||
case V_FILE:
|
||||
case V_MAT:
|
||||
case V_LIST:
|
||||
break;
|
||||
default:
|
||||
return E_COPY11;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -280,7 +280,7 @@ copymat2mat(MATRIX *smat, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
VALUE *vp;
|
||||
VALUE *vq;
|
||||
VALUE *vtemp;
|
||||
short subtype;
|
||||
unsigned short subtype;
|
||||
|
||||
if (ssi > smat->m_size)
|
||||
return E_COPY2;
|
||||
@@ -311,7 +311,7 @@ copymat2mat(MATRIX *smat, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
subtype = vq->v_subtype;
|
||||
freevalue(vq);
|
||||
*vq = *vp;
|
||||
vq->v_subtype = subtype;
|
||||
vq->v_subtype |= subtype;
|
||||
}
|
||||
free(vtemp);
|
||||
return 0;
|
||||
@@ -329,7 +329,7 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
VALUE *vq;
|
||||
VALUE *vtemp;
|
||||
long i;
|
||||
short subtype;
|
||||
unsigned short subtype;
|
||||
|
||||
if (ssi > blk->datalen)
|
||||
return E_COPY2;
|
||||
@@ -363,7 +363,7 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
subtype = vq->v_subtype;
|
||||
freevalue(vq);
|
||||
*vq = *vp;
|
||||
vq->v_subtype = subtype;
|
||||
vq->v_subtype |= subtype;
|
||||
}
|
||||
free(vtemp);
|
||||
return 0;
|
||||
@@ -429,6 +429,7 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
|
||||
LISTELEM *ep;
|
||||
VALUE *vtemp;
|
||||
long i;
|
||||
unsigned short subtype;
|
||||
|
||||
if (ssi > smat->m_size)
|
||||
return E_COPY2;
|
||||
@@ -456,8 +457,10 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
|
||||
ep = listelement(lp, (long) dsi);
|
||||
i = num;
|
||||
while (i-- > 0) {
|
||||
subtype = ep->e_value.v_subtype;
|
||||
freevalue(&ep->e_value);
|
||||
ep->e_value = *vq++;
|
||||
ep->e_value.v_subtype |= subtype;
|
||||
ep = ep->e_next;
|
||||
}
|
||||
free(vtemp);
|
||||
@@ -476,7 +479,7 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
LISTELEM *ep;
|
||||
VALUE *vtemp;
|
||||
long i;
|
||||
short subtype;
|
||||
unsigned short subtype;
|
||||
|
||||
if (ssi > lp->l_count)
|
||||
return E_COPY2;
|
||||
@@ -508,7 +511,7 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
|
||||
subtype = vq->v_subtype;
|
||||
freevalue(vq);
|
||||
*vq = *vp;
|
||||
vq->v_subtype = subtype;
|
||||
vq->v_subtype |= subtype;
|
||||
}
|
||||
free(vtemp);
|
||||
return 0;
|
||||
@@ -526,6 +529,7 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
|
||||
LISTELEM *dep;
|
||||
VALUE *vtemp;
|
||||
VALUE *vp;
|
||||
unsigned short subtype;
|
||||
|
||||
if (ssi > slp->l_count)
|
||||
return E_COPY2;
|
||||
@@ -555,8 +559,10 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
|
||||
vp = vtemp;
|
||||
i = num;
|
||||
while (i-- > 0) {
|
||||
subtype = dep->e_value.v_subtype;
|
||||
freevalue(&dep->e_value);
|
||||
dep->e_value = *vp++;
|
||||
dep->e_value.v_subtype |= subtype;
|
||||
dep = dep->e_next;
|
||||
}
|
||||
free(vtemp);
|
||||
@@ -806,13 +812,13 @@ copystr2str(STRING *sstr, long ssi, long num, STRING *dstr, long dsi)
|
||||
{
|
||||
char *c, *c1;
|
||||
|
||||
if (num < 0 || ssi + num > sstr->s_len)
|
||||
if (num < 0 || (size_t)(ssi + num) > sstr->s_len)
|
||||
num = sstr->s_len - ssi;
|
||||
if (num <= 0)
|
||||
return 0; /* Nothing to be copied */
|
||||
if (dsi < 0) /* default destination index */
|
||||
dsi = 0;
|
||||
if (dsi + num > dstr->s_len)
|
||||
if ((size_t)(dsi + num) > dstr->s_len)
|
||||
num = dstr->s_len - dsi;
|
||||
c1 = sstr->s_str + ssi;
|
||||
c = dstr->s_str + dsi;
|
||||
@@ -838,7 +844,7 @@ copyblk2str(BLOCK *sblk, long ssi, long num, STRING *dstr, long dsi)
|
||||
return 0; /* Nothing to be copied */
|
||||
if (dsi < 0) /* default destination index */
|
||||
dsi = 0;
|
||||
if (dsi + num > dstr->s_len)
|
||||
if ((size_t)(dsi + num) > dstr->s_len)
|
||||
num = dstr->s_len - dsi;
|
||||
c1 = sblk->data + ssi;
|
||||
c = (USB8 *)dstr->s_str + dsi;
|
||||
@@ -852,18 +858,18 @@ copyblk2str(BLOCK *sblk, long ssi, long num, STRING *dstr, long dsi)
|
||||
int
|
||||
copyostr2str(char *sstr, long ssi, long num, STRING *dstr, long dsi)
|
||||
{
|
||||
long len;
|
||||
size_t len;
|
||||
char *c, *c1;
|
||||
|
||||
len = (long)strlen(sstr);
|
||||
len = strlen(sstr);
|
||||
|
||||
if (num < 0 || ssi + num > len)
|
||||
if (num < 0 || (size_t)(ssi + num) > len)
|
||||
num = len - ssi;
|
||||
if (num <= 0) /* Nothing to be copied */
|
||||
return 0;
|
||||
if (dsi < 0)
|
||||
dsi = 0; /* Default destination index */
|
||||
if (dsi + num > dstr->s_len)
|
||||
if ((size_t)(dsi + num) > dstr->s_len)
|
||||
num = dstr->s_len - dsi;
|
||||
c1 = sstr + ssi;
|
||||
c = dstr->s_str + dsi;
|
||||
@@ -879,16 +885,16 @@ copyostr2str(char *sstr, long ssi, long num, STRING *dstr, long dsi)
|
||||
int
|
||||
copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
||||
{
|
||||
int len;
|
||||
int newlen;
|
||||
int newsize;
|
||||
size_t len;
|
||||
size_t newlen;
|
||||
size_t newsize;
|
||||
USB8 *newdata;
|
||||
|
||||
len = strlen(str) + 1;
|
||||
|
||||
if (ssi > len)
|
||||
if (ssi > 0 && (size_t)ssi > len)
|
||||
return E_COPY2;
|
||||
if (num < 0 || ssi + num > len)
|
||||
if (num < 0 || (size_t)(ssi + num) > len)
|
||||
num = len - ssi;
|
||||
if (num <= 0) /* Nothing to be copied */
|
||||
return 0;
|
||||
@@ -897,7 +903,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
||||
newlen = dsi + num;
|
||||
if (newlen <= 0)
|
||||
return E_COPY7;
|
||||
if (newlen >= dblk->maxsize) {
|
||||
if (newlen >= (size_t)dblk->maxsize) {
|
||||
if (noreloc)
|
||||
return E_COPY17;
|
||||
newsize = (1 + newlen/dblk->blkchunk) * dblk->blkchunk;
|
||||
@@ -910,7 +916,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
|
||||
dblk->maxsize = newsize;
|
||||
}
|
||||
memmove(dblk->data + dsi, str + ssi, num);
|
||||
if (newlen > dblk->datalen)
|
||||
if (newlen > (size_t)dblk->datalen)
|
||||
dblk->datalen = newlen;
|
||||
return 0;
|
||||
}
|
||||
@@ -978,8 +984,8 @@ memmove(void *s1, const void *s2, CALC_SIZE_T n)
|
||||
int
|
||||
copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
|
||||
{
|
||||
long newlen;
|
||||
long newsize;
|
||||
size_t newlen;
|
||||
size_t newsize;
|
||||
USB8 *newdata;
|
||||
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
||||
ZVALUE *swnum; /* byte swapped numerator */
|
||||
@@ -995,10 +1001,10 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
|
||||
return E_COPY5;
|
||||
if (dsi < 0)
|
||||
dsi = dblk->datalen;
|
||||
newlen = dsi + (long)(num*sizeof(HALF));
|
||||
newlen = dsi + (num*sizeof(HALF));
|
||||
if (newlen <= 0)
|
||||
return E_COPY7;
|
||||
if (newlen >= dblk->maxsize) {
|
||||
if (newlen >= (size_t)dblk->maxsize) {
|
||||
if (noreloc)
|
||||
return E_COPY17;
|
||||
newsize = (1 + newlen/dblk->blkchunk) * dblk->blkchunk;
|
||||
@@ -1017,7 +1023,7 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
|
||||
memmove(dblk->data+dsi, (char *)(swnum->v+ssi), num*sizeof(HALF));
|
||||
zfree(*swnum);
|
||||
#endif
|
||||
if (newlen > dblk->datalen)
|
||||
if (newlen > (size_t)dblk->datalen)
|
||||
dblk->datalen = newlen;
|
||||
return 0;
|
||||
}
|
||||
@@ -1029,7 +1035,7 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
|
||||
int
|
||||
copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi, NUMBER **res)
|
||||
{
|
||||
long newlen;
|
||||
size_t newlen;
|
||||
NUMBER *ret; /* cloned and modified numerator */
|
||||
#if CALC_BYTE_ORDER == BIG_ENDIAN
|
||||
HALF *swapped; /* byte swapped input data */
|
||||
@@ -1048,7 +1054,7 @@ copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi, NUMBER **re
|
||||
return E_COPY5;
|
||||
if (dsi < 0)
|
||||
dsi = dnum->num.len;
|
||||
newlen = dsi + (long)((num+sizeof(HALF)-1)/sizeof(HALF));
|
||||
newlen = dsi + ((num+sizeof(HALF)-1)/sizeof(HALF));
|
||||
if (newlen <= 0)
|
||||
return E_COPY7;
|
||||
|
||||
|
6
block.c
6
block.c
@@ -19,8 +19,8 @@
|
||||
* 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: block.c,v 29.2 2000/06/07 14:02:13 chongo Exp $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: block.c,v 29.3 2006/05/01 19:16:57 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.c,v $
|
||||
*
|
||||
* Under source code control: 1997/02/27 00:29:40
|
||||
@@ -57,7 +57,7 @@ static void blkchk(BLOCK*);
|
||||
*
|
||||
* given:
|
||||
* len - initial memory length of the block
|
||||
* type - BLK_TYPE_XXX
|
||||
* type - BLK_TYPE_XYZ
|
||||
* chunk - allocation chunk size
|
||||
*
|
||||
* returns:
|
||||
|
@@ -18,8 +18,8 @@
|
||||
# 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.15 $
|
||||
# @(#) $Id: Makefile,v 29.15 2003/01/05 08:10:56 chongo Exp $
|
||||
# @(#) $Revision: 29.18 $
|
||||
# @(#) $Id: Makefile,v 29.18 2006/05/20 19:32:40 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
|
||||
#
|
||||
# Under source code control: 1991/07/21 05:00:54
|
||||
@@ -170,13 +170,14 @@ 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 \
|
||||
pollard.cal poly.cal psqrt.cal quat.cal regress.cal solve.cal \
|
||||
sumsq.cal surd.cal unitfrac.cal varargs.cal chrem.cal mfactor.cal \
|
||||
bindings randmprime.cal test1700.cal randrun.cal \
|
||||
bindings randmprime.cal test1700.cal randrun.cal linear.cal \
|
||||
randbitrun.cal bernoulli.cal test2300.cal test2600.cal \
|
||||
test2700.cal test3100.cal test3300.cal test3400.cal prompt.cal \
|
||||
test3500.cal seedrandom.cal test4000.cal test4100.cal test4600.cal \
|
||||
beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
|
||||
randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.cal \
|
||||
test8400.cal test8500.cal test8600.cal chi.cal intfile.cal
|
||||
test8400.cal test8500.cal test8600.cal chi.cal intfile.cal screen.cal \
|
||||
dotest.cal set8700.cal set8700.line
|
||||
|
||||
# These files are found (but not built) in the distribution
|
||||
#
|
||||
|
120
cal/README
120
cal/README
@@ -12,7 +12,7 @@ Normally a resource file will simply define some functions. By default,
|
||||
most resource files will print out a short message when they are read.
|
||||
For example:
|
||||
|
||||
> read lucas
|
||||
; read lucas
|
||||
lucas(h,n) defined
|
||||
gen_u0(h,n,v1) defined
|
||||
gen_v1(h,n) defined
|
||||
@@ -22,9 +22,9 @@ will cause calc to load and execute the 'lucas.cal' resource file.
|
||||
Executing the resource file will cause several functions to be defined.
|
||||
Executing the lucas function:
|
||||
|
||||
> lucas(149,60)
|
||||
; lucas(149,60)
|
||||
1
|
||||
> lucas(146,61)
|
||||
; lucas(146,61)
|
||||
0
|
||||
|
||||
shows that 149*2^60-1 is prime whereas 146*2^61-1 is not.
|
||||
@@ -180,6 +180,38 @@ deg.cal
|
||||
Calculate in degrees, minutes, and seconds.
|
||||
|
||||
|
||||
dotest.cal
|
||||
|
||||
dotest(dotest_file [,dotest_code [,dotest_maxcond]])
|
||||
|
||||
dotest_file
|
||||
|
||||
Search along CALCPATH for dotest_file, which contains lines that
|
||||
should evaluate to 1. Comment lines and empty lines are ignored.
|
||||
Comment lines should use ## instead of the multi like /* ... */
|
||||
because lines are evaluated one line at a time.
|
||||
|
||||
dotest_code
|
||||
|
||||
Assign the code number that is to be printed at the start of
|
||||
each non-error line and after **** in each error line.
|
||||
The default code number is 999.
|
||||
|
||||
dotest_maxcond
|
||||
|
||||
The maximum number of error conditions that may be detected.
|
||||
An error condition is not a sign of a problem, in some cases
|
||||
a line deliberately forces an error condition. A value of -1,
|
||||
the default, implies a maximum of 2147483647.
|
||||
|
||||
Global variables and functions must be declared ahead of time because
|
||||
the dotest scope of evaluation is a line at a time. For example:
|
||||
|
||||
read dotest.cal
|
||||
read set8700.cal
|
||||
dotest("set8700.line");
|
||||
|
||||
|
||||
ellip.cal
|
||||
|
||||
efactor(iN, ia, B, force)
|
||||
@@ -222,6 +254,14 @@ intfile.cal
|
||||
of the integer become the last octets of the file.
|
||||
|
||||
|
||||
linear.cal
|
||||
|
||||
linear(x0, y0, x1, y1, x)
|
||||
|
||||
Returns the value y such that (x,y) in on the line (x0,y0), (x1,y1).
|
||||
Requires x0 != y0.
|
||||
|
||||
|
||||
lucas.cal
|
||||
|
||||
lucas(h, n)
|
||||
@@ -497,6 +537,58 @@ regress.cal
|
||||
Errors are reported with '****' messages, or worse. :-)
|
||||
|
||||
|
||||
screen.cal
|
||||
|
||||
up
|
||||
CUU /* same as up */
|
||||
down = CUD
|
||||
CUD /* same as down */
|
||||
forward
|
||||
CUF /* same as forward */
|
||||
back = CUB
|
||||
CUB /* same as back */
|
||||
save
|
||||
SCP /* same as save */
|
||||
restore
|
||||
RCP /* same as restore */
|
||||
cls
|
||||
home
|
||||
eraseline
|
||||
off
|
||||
bold
|
||||
faint
|
||||
italic
|
||||
blink
|
||||
rapidblink
|
||||
reverse
|
||||
concealed
|
||||
/* Lowercase indicates foreground, uppercase background */
|
||||
black
|
||||
red
|
||||
green
|
||||
yellow
|
||||
blue
|
||||
magenta
|
||||
cyan
|
||||
white
|
||||
Black
|
||||
Red
|
||||
Green
|
||||
Yellow
|
||||
Blue
|
||||
Magenta
|
||||
Cyan
|
||||
White
|
||||
|
||||
Define ANSI control sequences providing (i.e., cursor movement, changing
|
||||
foreground or background color, etc.) for VT100 terminals and terminal
|
||||
window emulators (i.e., xterm, Apple OS/X Terminal, etc.) that support them.
|
||||
|
||||
For example:
|
||||
|
||||
read screen
|
||||
print green:"This is green. ":red:"This is red.":black
|
||||
|
||||
seedrandom.cal
|
||||
|
||||
seedrandom(seed1, seed2, bitsize [,trials])
|
||||
@@ -515,6 +607,24 @@ seedrandom.cal
|
||||
Blum primes for the modulus.
|
||||
|
||||
|
||||
set8700.cal
|
||||
|
||||
set8700_getA1() defined
|
||||
set8700_getA2() defined
|
||||
set8700_getvar() defined
|
||||
set8700_f(set8700_x) defined
|
||||
set8700_g(set8700_x) defined
|
||||
|
||||
Declare globals and define functions needed by dotest() (see
|
||||
dotest.cal) to evaluate set8700.line a line at a time.
|
||||
|
||||
|
||||
set8700.line
|
||||
|
||||
A line-by-line evaluation file for dotest() (see dotest.cal).
|
||||
The set8700.cal file (and dotest.cal) should be read first.
|
||||
|
||||
|
||||
solve.cal
|
||||
|
||||
solve(low, high, epsilon)
|
||||
@@ -825,8 +935,8 @@ xx_print.cal
|
||||
## 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.9 $
|
||||
## @(#) $Id: README,v 29.9 2003/01/05 08:10:56 chongo Exp $
|
||||
## @(#) $Revision: 29.12 $
|
||||
## @(#) $Id: README,v 29.12 2006/05/21 04:41:09 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
|
||||
##
|
||||
## Under source code control: 1990/02/15 01:50:32
|
||||
|
193
cal/dotest.cal
Normal file
193
cal/dotest.cal
Normal file
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* dotest - test truth statements found in line tests of dotest_testline file
|
||||
*
|
||||
* This file was created by Ernest Bowen <ebowen at une dot edu dot au>
|
||||
* and modified by Landon Curt Noll.
|
||||
*
|
||||
* This dotest_code has been placed in the public domain. Please do not
|
||||
* copyright this dotest_code.
|
||||
*
|
||||
* ERNEST BOWEN AND LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||||
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MER-
|
||||
* CHANTABILITY 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.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: dotest.cal,v 29.2 2006/05/21 00:55:27 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/dotest.cal,v $
|
||||
*
|
||||
* This file is not covered under version 2.1 of the GNU LGPL.
|
||||
*
|
||||
* Under source dotest_code control: 2006/03/08 05:54:09
|
||||
* File existed as early as: 2006
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* dotest - perform tests from dotest_testline file
|
||||
*
|
||||
* given:
|
||||
* dotest_file filename containing single test lines
|
||||
* dotest_code regress.cal test number to use (def: 0)
|
||||
* dotest_maxcond max error conditions allowed (def: <0 ==> 2^31-1)
|
||||
*
|
||||
* returns:
|
||||
* number of line test failures
|
||||
*
|
||||
* NOTE: All variables used by the dotest() function start with "dotest_".
|
||||
* The dotest_file and dotest_read should not use any variable
|
||||
* that starts with "dotest_".
|
||||
*/
|
||||
define dotest(dotest_file, dotest_code = 0, dotest_maxcond = -1)
|
||||
{
|
||||
local dotest_f_file; /* open file containing test lines */
|
||||
local dotest_testline; /* test line */
|
||||
local dotest_testeval; /* eval value from dotest_testline test line */
|
||||
local dotest_tmperrcnt; /* temp error count after line test */
|
||||
local dotest_errcnt; /* total number of errors */
|
||||
local dotest_failcnt; /* number of line tests failed */
|
||||
local dotest_testnum; /* number of test lines evaluated */
|
||||
local dotest_linenum; /* test line number */
|
||||
local dotest_old_errmax; /* value of errmax() prior to calling */
|
||||
local dotest_old_errcount; /* value of errcount() prior to calling */
|
||||
|
||||
/*
|
||||
* preserve calling stats
|
||||
*/
|
||||
dotest_old_errmax = errmax();
|
||||
dotest_old_errcount = errcount(0);
|
||||
|
||||
/*
|
||||
* initialize test accounting
|
||||
*/
|
||||
dotest_errcnt = errcount();
|
||||
dotest_failcnt = 0;
|
||||
dotest_testnum = 0;
|
||||
dotest_linenum = 0;
|
||||
|
||||
/*
|
||||
* setup error accounting for dotest
|
||||
*/
|
||||
if (dotest_maxcond >= 0 && dotest_maxcond < 2147483647) {
|
||||
errmax(dotest_maxcond + dotest_old_errcount + 1),;
|
||||
} else {
|
||||
errmax(2147483647),;
|
||||
}
|
||||
|
||||
/*
|
||||
* open the test line file
|
||||
*/
|
||||
printf("%d-: opening line file: %d", dotest_code, dotest_file);
|
||||
dotest_f_file = fpathopen(dotest_file, "r");
|
||||
if (!isfile(dotest_f_file)) {
|
||||
printf("**** Unable to file or open file \"%s\"\n",
|
||||
dotest_file);
|
||||
quit;
|
||||
}
|
||||
printf('%d: testing "%s"\n', dotest_code, dotest_file);
|
||||
|
||||
/*
|
||||
* perform dotest_testline test on each line of the file
|
||||
*/
|
||||
for (;;) {
|
||||
|
||||
/* get the next test line */
|
||||
dotest_testline = fgets(dotest_f_file);
|
||||
++dotest_linenum;
|
||||
if (iserror(dotest_testline)) {
|
||||
quit "**** Error while reading file";
|
||||
} else if (isnull(dotest_testline)) {
|
||||
/* EOF - end of test file */
|
||||
break;
|
||||
}
|
||||
|
||||
/* skip empty lines */
|
||||
if (dotest_testline == "\n") {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* evaluate the test line */
|
||||
dotest_testeval = eval(dotest_testline);
|
||||
|
||||
/* ignore white space or comment lines */
|
||||
if (isnull(dotest_testeval)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* look for test line parse errors */
|
||||
if (iserror(dotest_testeval)) {
|
||||
printf("**** evaluation error: ");
|
||||
++dotest_failcnt;
|
||||
|
||||
/* look for test line dotest_failcnt */
|
||||
} else if (dotest_testeval != 1) {
|
||||
printf("**** did not return 1: ");
|
||||
++dotest_failcnt;
|
||||
}
|
||||
|
||||
/* show the test line we just performed */
|
||||
printf("%d-%d: %s", dotest_code, dotest_linenum, dotest_testline);
|
||||
|
||||
/* error accounting */
|
||||
dotest_tmperrcnt = errcount() - dotest_errcnt;
|
||||
if (dotest_tmperrcnt > 0) {
|
||||
|
||||
/* report any other errors */
|
||||
if (dotest_tmperrcnt > 1) {
|
||||
printf("%d-%d: NOTE: %d error conditions(s): %s\n",
|
||||
dotest_code, dotest_linenum, dotest_tmperrcnt);
|
||||
}
|
||||
|
||||
/* report the calc error string */
|
||||
printf("%d-%d: NOTE: last error string: %s\n",
|
||||
dotest_code, dotest_linenum, strerror());
|
||||
|
||||
/* new error count level */
|
||||
dotest_errcnt = errcount();
|
||||
if (dotest_maxcond >= 0 &&
|
||||
dotest_old_errcount-dotest_errcnt > dotest_maxcond) {
|
||||
printf("%d-%d: total error conditions: %d > %d\n",
|
||||
dotest_code, dotest_linenum,
|
||||
dotest_maxcond, dotest_old_errcount-dotest_errcnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* test the close of the line file
|
||||
*/
|
||||
printf("%d-: detected %d error condition(s), many of which may be OK\n",
|
||||
dotest_code, dotest_old_errcount-dotest_errcnt);
|
||||
printf("%d-: closing line file: %d\n", dotest_code, dotest_file);
|
||||
fclose(dotest_f_file);
|
||||
|
||||
/*
|
||||
* test line file accounting
|
||||
*/
|
||||
if (dotest_failcnt > 0) {
|
||||
printf("**** %d-: %d test failure(s) in %d line(s)\n",
|
||||
dotest_code, dotest_failcnt, dotest_linenum);
|
||||
} else {
|
||||
printf("%d-: no failure(s) in %d line(s)\n",
|
||||
dotest_code, dotest_linenum);
|
||||
}
|
||||
|
||||
/*
|
||||
* preppare to return to the caller environment
|
||||
*
|
||||
* We increase the caller's error count by the number
|
||||
* of line tests that failed, not the number of internal
|
||||
* errors that were noted.
|
||||
*/
|
||||
errmax(dotest_old_errmax),;
|
||||
errcount(dotest_old_errcount + dotest_failcnt),;
|
||||
|
||||
/*
|
||||
* All Done!!! -- Jessica Noll, Age 2
|
||||
*/
|
||||
return dotest_failcnt;
|
||||
}
|
@@ -17,8 +17,8 @@
|
||||
* 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 $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: ellip.cal,v 29.3 2006/03/07 22:16:25 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:33
|
||||
@@ -141,7 +141,7 @@ define point_mul(p1, p2)
|
||||
if (p2 == 1)
|
||||
return p1;
|
||||
if (p1 == p2)
|
||||
return point_square(&p1);
|
||||
return point_square(`p1);
|
||||
obj point r;
|
||||
m = (minv(p2.x - p1.x, N) * (p2.y - p1.y)) % N;
|
||||
if (m == 0) {
|
||||
@@ -185,9 +185,9 @@ define point_pow(p, pow)
|
||||
r = p;
|
||||
t = p;
|
||||
for (bit = 2; ((bit <= pow) && (f == 0)); bit <<= 1) {
|
||||
t = point_square(&t);
|
||||
t = point_square(`t);
|
||||
if (bit & pow)
|
||||
r = point_mul(&t, &r);
|
||||
r = point_mul(`t, `r);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
26
cal/linear.cal
Normal file
26
cal/linear.cal
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* linear - perform a simple two point 2D linear interpolation
|
||||
*
|
||||
* given:
|
||||
* x0, y0 first known point on the line
|
||||
* x1, y1 second knonw point on the line
|
||||
* x a given point to interpolate on
|
||||
*
|
||||
* returns:
|
||||
* y such that (x,y) is on the line defined by (x0,y0) and (x1,y1)
|
||||
*
|
||||
* NOTE: The line cannot be vertical. So x0 != y0.
|
||||
*/
|
||||
define linear(x0, y0, x1, y1, x)
|
||||
{
|
||||
/* firewall */
|
||||
if (!isnum(x0) || ! isnum(y0) || !isnum(x1) || ! isnum(y1) || !isnum(x)) {
|
||||
quit "non-numeric argument passed to linear";
|
||||
}
|
||||
if (x0 == x1) {
|
||||
quit "linear given a line with an infinite slope";
|
||||
}
|
||||
|
||||
/* return y = y0 + (delta_Y/delta_X) * (x - x0) */
|
||||
return y0 + (((y1-y0)/(x1-x0)) * (x - x0));
|
||||
}
|
@@ -17,8 +17,8 @@
|
||||
* 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 $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: natnumset.cal,v 29.3 2006/05/01 19:19:46 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/natnumset.cal,v $
|
||||
*
|
||||
* Under source code control: 1997/09/07 23:53:51
|
||||
@@ -471,7 +471,7 @@ define set_plus(a) = set_sum(a);
|
||||
define interval(a, b)
|
||||
{
|
||||
local i, j, s;
|
||||
static tail = str("\0\1\3\7\17\37\77\177\377");
|
||||
static tail = "\0\1\3\7\17\37\77\177\377";
|
||||
|
||||
if (!isint(a) || !isint(b))
|
||||
quit "Non-integer argument for interval";
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* regress - calc regression and correctness test suite
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 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
|
||||
@@ -17,8 +17,8 @@
|
||||
* 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.20 $
|
||||
* @(#) $Id: regress.cal,v 29.20 2004/10/22 23:51:26 chongo Exp $
|
||||
* @(#) $Revision: 29.25 $
|
||||
* @(#) $Id: regress.cal,v 29.25 2006/05/21 00:58:31 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:36
|
||||
@@ -1310,9 +1310,14 @@ define test_functions()
|
||||
* verify sleep
|
||||
*/
|
||||
vrfy(sleep(1/5) == null(), '1153: sleep(1/5) == null()');
|
||||
vrfy(sleep(1) == null(), '1154: sleep(1) == null()');
|
||||
vrfy(sleep(1/100) == null(), '1154: sleep(1/100) == null()');
|
||||
|
||||
print '1155: Ending test_functions';
|
||||
/*
|
||||
* verify calcpath
|
||||
*/
|
||||
vrfy(isstr(calcpath()), '1155: isstr(calcpath())');
|
||||
|
||||
print '1156: Ending test_functions';
|
||||
}
|
||||
print '017: parsed test_functions()';
|
||||
|
||||
@@ -2595,6 +2600,22 @@ define test_2600()
|
||||
strcat(str(tnum++), ': ln(exp(6)^15) == 90'));
|
||||
vrfy(ln(exp(5)^18) == 90,
|
||||
strcat(str(tnum++), ': ln(exp(5)^18) == 90'));
|
||||
vrfy(log(1e6) == 6,
|
||||
strcat(str(tnum++), ': log(1e6)) == 6'));
|
||||
vrfy(log(1) == 0,
|
||||
strcat(str(tnum++), ': log(1)) == 0'));
|
||||
vrfy(log(100) == 2,
|
||||
strcat(str(tnum++), ': log(100)) == 2'));
|
||||
vrfy(log(1e66) == 66,
|
||||
strcat(str(tnum++), ': log(1e66)) == 66'));
|
||||
vrfy(log(1e127) == 127,
|
||||
strcat(str(tnum++), ': log(1e127)) == 127'));
|
||||
vrfy(round(log(17^47),10) == 57.8310993048,
|
||||
strcat(str(tnum++),
|
||||
': round(log(17^47),10) == 57.8310993048'));
|
||||
vrfy(round(log(127),10) == 2.103803721,
|
||||
strcat(str(tnum++),
|
||||
': round(log(127),10) == 2.103803721'));
|
||||
epsilon(i),;
|
||||
print tnum++: ': epsilon(i),;';
|
||||
|
||||
@@ -3383,7 +3404,7 @@ print '070: parsed test_redc()';
|
||||
*/
|
||||
define test_fileops()
|
||||
{
|
||||
local a, b, c, f, m, n, x, y, z;
|
||||
local a, b, c, f, m, n, p, r, x, y, z;
|
||||
local L = "Landon";
|
||||
local C = "Curt";
|
||||
local N = "Noll";
|
||||
@@ -3485,13 +3506,21 @@ define test_fileops()
|
||||
vrfy(y == "Noll", '4258: y == "Noll"');
|
||||
vrfy(isnull(fclose(f)), '4259: isnull(fclose(f))');
|
||||
|
||||
/*
|
||||
* fpathopen tests
|
||||
*/
|
||||
vrfy(!iserror(p=fpathopen("junk4200","r",".")),
|
||||
'4260: !iserror(p=fparhopen("junk4200","r","."))');
|
||||
vrfy(!iserror(r=fpathopen("regress.cal","r")),
|
||||
'4261: !iserror(r=fparhopen("regress.cal","r","."))');
|
||||
|
||||
/*
|
||||
* cleanup
|
||||
*/
|
||||
x = rm("junk4200");
|
||||
print '4260: x = rm("junk4200")';
|
||||
print '4262: x = rm("junk4200")';
|
||||
|
||||
print '4261: Ending test_fileops';
|
||||
print '4263: Ending test_fileops';
|
||||
}
|
||||
print '071: parsed test_fileops()';
|
||||
|
||||
@@ -5115,7 +5144,7 @@ define test_assign(base, work)
|
||||
Y5800 = base+4;
|
||||
print base+4: ': Y5800 = base+4';
|
||||
obj xy5800 A={1,2}, obj xy5800 B={3,4};
|
||||
print base+5: ': obj xy5800 A={1,2}, obj xy5000 B={3,4}';
|
||||
print base+5: ': obj xy5800 A={1,2}, obj xy5800 B={3,4}';
|
||||
|
||||
/*
|
||||
* test assignment
|
||||
@@ -5238,7 +5267,7 @@ define test_is()
|
||||
prime = 3217;
|
||||
print '5922: prime = 3217';
|
||||
square = prime^2;
|
||||
print '5923: square = prine^2';
|
||||
print '5923: square = prime^2';
|
||||
string = "a string";
|
||||
print '5924: string = "a string"';
|
||||
com = 3+4i;
|
||||
@@ -6237,7 +6266,7 @@ define test_blk()
|
||||
/* A second named block */
|
||||
|
||||
B1 = blk("+++6700", 15, 10) = {1,2,3,4,5};
|
||||
print '6746: B1 = blk("+++6700", , 10);';
|
||||
print '6746: B1 = blk("+++6700", 15 , 10) = {1,2,3,4,5};';
|
||||
vrfy(size(B1) == 15, '6747: size(B1) == 15');
|
||||
vrfy(sizeof(B1) == 20, '6748: sizeof(B1) == 20');
|
||||
vrfy(test(B1) == 1, '6749: test(B1) == 1');
|
||||
@@ -7339,7 +7368,7 @@ define test_somenew()
|
||||
vrfy(size(char(0)) == 1, '8203: size(char(0)) == 1');
|
||||
vrfy(strlen(char(0)) == 0, '8204: strlen(char(0)) == 0');
|
||||
vrfy(char(0) != "", '8205: char(0) != ""');
|
||||
vrfy(strcmp(char(0),"") == 0, '8206: strcmp(char(0),"") == 0');
|
||||
vrfy(str(char(0)) == "", '8206: str(char(0)) == ""');
|
||||
|
||||
vrfy(str("abc") == "abc", '8207: str("abc") == "abc"');
|
||||
|
||||
@@ -7696,20 +7725,34 @@ print '8406: Ending test_quit';
|
||||
* test_divmod - psuedo-random tests on the // and % with various rounding modes
|
||||
*/
|
||||
print;
|
||||
print '8500: Starting test_divmod'
|
||||
print '8500: Starting test of divmod'
|
||||
read -once "test8500";
|
||||
/* 85xx: Ending test_divmod is printed by test8500.cal */
|
||||
/* 85xx: Ending test of divmod is printed by test8500.cal */
|
||||
|
||||
|
||||
/*
|
||||
* test_maxargs - test up to 1024 args being passed to a builtin function
|
||||
*/
|
||||
print;
|
||||
print '8600: Starting test_1024args'
|
||||
print '8600: Starting test of up to 1024 args'
|
||||
read -once "test8600";
|
||||
/* 86xx: Ending test_1024args is printed by test8600.cal */
|
||||
/* 86xx: Ending test of up to 1024 args is printed by test8600.cal */
|
||||
|
||||
|
||||
/*
|
||||
* dotest scripts
|
||||
*
|
||||
* We use the dotest driver to evaluate test-97xx data files.
|
||||
*/
|
||||
print '8700: Starting dotest runs'
|
||||
print '8701: read -once "dotest"';
|
||||
read -once "dotest";
|
||||
print '8702: read -once "set8700"';
|
||||
read -once "set8700";
|
||||
vrfy(dotest("set8700.line", 8703) == 0,
|
||||
'8703: dotest("set8700.line", 8703) == 0');
|
||||
/* 87xx: Ending dotest runs is printed by set8700.test */
|
||||
|
||||
/*
|
||||
* read various calc resource files
|
||||
*
|
||||
|
61
cal/screen.cal
Normal file
61
cal/screen.cal
Normal file
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* screen - ANSI control sequences
|
||||
*
|
||||
* This file was created by Ernest Bowen <ebowen at une dot edu dot au>.
|
||||
*
|
||||
* This code has been placed in the public domain. Please do not
|
||||
* copyright this code.
|
||||
*
|
||||
* ERNEST BOWEN DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||||
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MER-
|
||||
* CHANTABILITY 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.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: screen.cal,v 29.2 2006/05/01 19:21:18 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/screen.cal,v $
|
||||
*
|
||||
* This file is not covered under version 2.1 of the GNU LGPL.
|
||||
*
|
||||
* Under source code control: 2006/03/08 05:54:09
|
||||
* File existed as early as: 2006
|
||||
*/
|
||||
|
||||
up = CUU ="\e[A";
|
||||
down = CUD = "\e[B}";
|
||||
forward = CUF = "\e[C";
|
||||
back = CUB = "\e[D";
|
||||
save = SCP = "\e[s";
|
||||
restore = RCP = "\e[u";
|
||||
cls = "\e[2J";
|
||||
home = "\e[F";
|
||||
eraseline = "\e[K";
|
||||
off = "\e[0m";
|
||||
bold = "\e[1m";
|
||||
faint = "\e[2m";
|
||||
italic = "\e[3m";
|
||||
blink = "\e[5m";
|
||||
rapidblink = "\e[6m";
|
||||
reverse = "\e[7m";
|
||||
concealed = "\e[8m";
|
||||
/* Lowercase indicates foreground, uppercase background" */
|
||||
black = "\e[30m";
|
||||
red = "\e[31m";
|
||||
green = "\e[32m";
|
||||
yellow = "\e[33m";
|
||||
blue = "\e[34m";
|
||||
magenta = "\e[35m";
|
||||
cyan = "\e[36m";
|
||||
white = "\e[37m";
|
||||
Black = "\e[40m";
|
||||
Red = "\e[41m";
|
||||
Green = "\e[42m";
|
||||
Yellow = "\e[43m";
|
||||
Blue = "\e[44m";
|
||||
Magenta = "\e[45m";
|
||||
Cyan = "\e[46m";
|
||||
White = "\e[47m";
|
72
cal/set8700.cal
Normal file
72
cal/set8700.cal
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* set8700 - environment for dotest line tests for the 8700 set of regress.cal
|
||||
*
|
||||
* Copyright (C) 2006 Ernest Bowen and Landon Curt Noll
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
* Public License for more details.
|
||||
*
|
||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.1 $
|
||||
* @(#) $Id: set8700.cal,v 29.1 2006/05/20 19:35:33 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.cal,v $
|
||||
*
|
||||
* Under source code control: 2006/05/20 14:10:11
|
||||
* File existed as early as: 2006
|
||||
*
|
||||
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* setup global variables for dotest() to use with set8700.set
|
||||
*/
|
||||
|
||||
global set8700_A;
|
||||
global set8700_B;
|
||||
global set8700_M;
|
||||
global set8700_M1;
|
||||
global set8700_M2;
|
||||
global set8700_L;
|
||||
global set8700_L1;
|
||||
global set8700_L2;
|
||||
global set8700_O;
|
||||
global set8700_P;
|
||||
global set8700_P1;
|
||||
global set8700_P2;
|
||||
global set8700_Q;
|
||||
global set8700_R;
|
||||
global set8700_S;
|
||||
global set8700_X;
|
||||
global set8700_Y;
|
||||
global set8700_x;
|
||||
global set8700_y;
|
||||
|
||||
define set8700_getA1() = set8700_A;
|
||||
|
||||
define set8700_getA2() { return set8700_A; }
|
||||
|
||||
define set8700_getvar() {local a = 42; protect(a,256); return a;}
|
||||
|
||||
define set8700_f(set8700_x) = set8700_x^2;
|
||||
|
||||
define set8700_g(set8700_x)
|
||||
{
|
||||
if (isodd(set8700_x)) protect(set8700_x, 256);
|
||||
return set8700_x;
|
||||
}
|
||||
|
||||
obj set8700_point {
|
||||
set8700_x, set8700_y, set8700_z
|
||||
}
|
405
cal/set8700.line
Normal file
405
cal/set8700.line
Normal file
@@ -0,0 +1,405 @@
|
||||
##
|
||||
## set8700 - dotest line tests for the 8700 set of regress.cal
|
||||
##
|
||||
## Copyright (C) 2006 Ernest Bowen and Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
## as published by the Free Software Foundation.
|
||||
##
|
||||
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
## Public License for more details.
|
||||
##
|
||||
## A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
## distributed with calc under the filename COPYING-LGPL. You should have
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.1 $
|
||||
## @(#) $Id: set8700.line,v 29.1 2006/05/20 19:35:33 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.line,v $
|
||||
##
|
||||
## Under source code control: 2006/05/20 14:10:11
|
||||
## File existed as early as: 2006
|
||||
##
|
||||
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
||||
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||
|
||||
|
||||
strcpy("", "") == ""
|
||||
strcpy("", "xyz") == ""
|
||||
strcpy("a", "xyz") == "x"
|
||||
strcpy("ab", "xyz") == "xy"
|
||||
strcpy("abc", "xyz") == "xyz"
|
||||
strcpy("abcd", "xyz") == "xyz\0" ## Result will print as "xyz"
|
||||
strcpy("abcde", "xyz") == "xyz\0e"
|
||||
strcpy("abcdef", "xyz") == "xyz\0ef"
|
||||
strcpy("abcdef", "x\0z") == "x\0z\0ef" ## Note z is copied
|
||||
strcpy("abc", "") == "\0bc"
|
||||
|
||||
strncpy("abcdef", "xyz", 0) == "abcdef" ## No characters copied
|
||||
strncpy("abcdef", "xyz", 1) == "xbcdef" ## One character copied, no '\0'
|
||||
strncpy("abcdef", "xyz", 2) == "xycdef"
|
||||
strncpy("abcdef", "xyz", 3) == "xyzdef"
|
||||
strncpy("abcdef", "xyz", 4) == "xyz\0ef"
|
||||
strncpy("abcdef", "xyz", 5) == "xyz\0\0f" ## Two nulls as in C
|
||||
strncpy("abcdef", "xyz", 6) == "xyz\0\0\0"
|
||||
strncpy("abcdef", "xyz", 7) == "xyz\0\0\0" ## Size of first string unchanged
|
||||
strncpy("a\0cdef", "\0yz", 4) == "\0yz\0ef"
|
||||
strncpy("ab", "xyz", 3) == "xy"
|
||||
|
||||
strcmp("", "") == 0
|
||||
strcmp("", "a") == -1
|
||||
strcmp("\n", "\n") == 0
|
||||
strcmp("\0", "") == 1 ## '\0' treated like other characters
|
||||
strcmp("ab", "") == 1
|
||||
strcmp("ab", "a") == 1
|
||||
strcmp("ab", "ab") == 0
|
||||
strcmp("ab", "abc") == -1
|
||||
strcmp("abc", "abb") == 1
|
||||
strcmp("abc", "abc") == 0
|
||||
strcmp("abc", "abd") == -1
|
||||
strcmp("abc\0", "abc") == 1
|
||||
|
||||
strncmp("abc", "xyz", 0) == 0
|
||||
strncmp("abc", "xyz", 1) == -1
|
||||
strncmp("abc", "", 1) == 1
|
||||
strncmp("abc", "a", 1) == 0
|
||||
strncmp("", "", 2) == 0
|
||||
strncmp("a", "a", 2) == 0
|
||||
strncmp("a", "b", 2) == -1
|
||||
strncmp("ab", "ab", 2) == 0
|
||||
strncmp("ab", "ac", 2) == -1
|
||||
strncmp("\0ac", "\0b", 2) == -1
|
||||
strncmp("ab", "abc", 2) == 0
|
||||
strncmp("abc", "abd", 2) == 0
|
||||
strncmp("a", "a\0", 2) == -1
|
||||
strncmp("a", "a", 3) == 0
|
||||
strncmp("abc", "abd", 3) == -1
|
||||
strncmp("\0\0\n", "\0\0\t", 3) == 1
|
||||
|
||||
str("abc") == "abc"
|
||||
str("ab\0") == "ab"
|
||||
str("a\0c") == "a"
|
||||
str("\0bc") == ""
|
||||
|
||||
size("") == 0
|
||||
size("a") == 1
|
||||
size("\0") == 1
|
||||
size("a\0") == 2
|
||||
size("a\0b") == 3
|
||||
|
||||
strlen("\0") == 0
|
||||
strlen("a\0") == 1
|
||||
strlen("a\0b") == 1
|
||||
|
||||
0 * "abc" == ""
|
||||
1 * "abc" == "abc"
|
||||
2 * "abc" == "abcabc"
|
||||
3 * "abc" == "abcabcabc"
|
||||
1 * "" == ""
|
||||
-1 * "abc" == "cba"
|
||||
-2 * "abc" == "cbacba"
|
||||
"abc" + "xyz" == "abcxyz"
|
||||
"abc" - "xyz" == "abczyx"
|
||||
|
||||
|
||||
substr("abcd",0,0) == ""
|
||||
substr("abcd",0,1) == "a"
|
||||
substr("abcd",0,2) == "ab"
|
||||
substr("abcd",1,0) == ""
|
||||
substr("abcd",1,1) == "a"
|
||||
substr("abcd",1,2) == "ab"
|
||||
substr("abcd",2,0) == ""
|
||||
substr("abcd",2,1) == "b"
|
||||
substr("abcd",2,2) == "bc";
|
||||
substr("abcd",2,3) == "bcd";
|
||||
substr("abcd",2,4) == "bcd";
|
||||
substr("abcd",2,5) == "bcd"; ## substr stops at end of string
|
||||
substr("abcd",4,0) == ""
|
||||
substr("abcd",4,1) == "d"
|
||||
substr("abcd",4,2) == "d"
|
||||
substr("abcd",4,3) == "d"
|
||||
substr("abcd",5,0) == ""
|
||||
substr("abcd",5,1) == ""
|
||||
substr("a\0c\0",2,2) == "\0c" ## '\0' treated like other characters
|
||||
substr("a\0c\0",2,3) == "\0c\0"
|
||||
|
||||
#"" == 0 ## # operator counts number of bits
|
||||
#"\0" == 0
|
||||
# "a" == 3
|
||||
# "ab" == 6 ## white space ignored
|
||||
# "abc" == 10
|
||||
# 27 == 4
|
||||
# 0b1010111011 == 7
|
||||
|
||||
7 # 9 == 2 ## 7 # 9 = abs(7 - 9)
|
||||
3/4 # 2/3 == 1/12
|
||||
|
||||
a = 5, a #= 2, a == 3
|
||||
a #= 4, a == 1
|
||||
|
||||
## Binary # operator not defined for strings
|
||||
|
||||
global set8700_A; protect(set8700_A) == 0
|
||||
## Testing with one lvalue
|
||||
isnull(protect(set8700_A,65))
|
||||
protect(set8700_A) == 65
|
||||
isnull(protect(set8700_A, -1))
|
||||
protect(set8700_A) == 64
|
||||
protect(set8700_A,-2), protect(set8700_A) == 64
|
||||
protect(set8700_A,5), protect(set8700_A) == 69
|
||||
protect(set8700_A,-4), protect(set8700_A) == 65
|
||||
protect(set8700_A,0), protect(set8700_A) == 0
|
||||
protect(set8700_A,1234), protect(set8700_A) == 1234
|
||||
protect(set8700_A,-1234), protect(set8700_A) == 0
|
||||
protect(set8700_A,65535), protect(set8700_A) == 65535
|
||||
protect(set8700_A,-65535), protect(set8700_A) == 0
|
||||
|
||||
## Simple assignments
|
||||
set8700_A = 42, protect(set8700_A,1024), set8700_B = set8700_A, protect(set8700_B) == 1024
|
||||
set8700_A = 6 * 7, protect(set8700_A) == 1024
|
||||
set8700_A == set8700_B
|
||||
|
||||
## Testing matrix protectioon
|
||||
set8700_A = mat [3] = {1, 2, list(3,4)}; 1
|
||||
protect(set8700_A, 65, 1), protect(set8700_A) == 1089
|
||||
protect(set8700_A[0]) == 65
|
||||
protect(set8700_A[2]) == 65
|
||||
protect(set8700_A[2][1]) == 0
|
||||
protect(set8700_A, 65, 2), protect(set8700_A[2][1]) == 65
|
||||
protect(set8700_A,-1024), protect(set8700_A) == 65
|
||||
protect(set8700_A, -1, 1), protect(set8700_A) == 64
|
||||
protect(set8700_A[1]) == 64
|
||||
protect(set8700_A[2]) == 64
|
||||
protect(set8700_A[2][0]) == 65
|
||||
protect(set8700_A,0), protect(set8700_A) == 0
|
||||
protect(set8700_A[1]) == 64
|
||||
protect(set8700_A, 0, 2), protect(set8700_A) == 0
|
||||
protect(set8700_A[1]) == 0
|
||||
protect(set8700_A[2][1]) == 0
|
||||
protect(set8700_A,1024, 2), protect(set8700_A) == 1024
|
||||
protect(set8700_A[2]) == 1024
|
||||
protect(set8700_A[2][0], 512), protect(set8700_A[2][0]) == 1536
|
||||
|
||||
## Testing simple assignment of matrix
|
||||
set8700_B = set8700_A, protect(set8700_B) == 1024 ## protect(set8700_A) copied
|
||||
protect(set8700_B[2]) == 1024 ## protect(set8700_A[2]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## copying matrix to list
|
||||
set8700_B = list(5,6,7), protect(set8700_B) == 1024
|
||||
protect(set8700_B[0]) == 0
|
||||
protect(set8700_B[2]) == 0
|
||||
protect(set8700_A,0), protect(set8700_A) == 0
|
||||
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||
set8700_B[2] == list(3,4)
|
||||
protect(set8700_B) == 1024 ## protect(set8700_A) not copied
|
||||
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## copying matrix to matrix
|
||||
set8700_B = mat[3], protect(set8700_B) == 1024
|
||||
protect(set8700_B[2]) == 0
|
||||
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||
set8700_B[2] == list(3,4)
|
||||
protect(set8700_B) == 1024 ## protect(set8700_A) not copied
|
||||
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## Testing list protection
|
||||
set8700_A = list(1, 2, list(3,4)), 1
|
||||
protect(set8700_A,1024, 2), protect(set8700_A) == 1024
|
||||
protect(set8700_A[2]) == 1024
|
||||
protect(set8700_A[2][0], 512), protect(set8700_A[2][0]) == 1536
|
||||
|
||||
## Simple assignment of list
|
||||
set8700_B = set8700_A, protect(set8700_B) == 1024 ## protect(set8700_A) copied
|
||||
protect(set8700_B[2]) == 1024 ## protect(set8700_A[2]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## Copying list to list
|
||||
set8700_B = list(5,6,7), protect(set8700_B) == 1024
|
||||
protect(set8700_B[2]) == 0
|
||||
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||
set8700_B[2] == list(3,4)
|
||||
protect(set8700_B) == 1024 ## protect(set8700_A) not copied
|
||||
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## Copying list to matrix
|
||||
set8700_B = mat[3], protect(set8700_B) == 1024
|
||||
protect(set8700_B[2]) == 0
|
||||
copy(set8700_A,set8700_B), set8700_B[0] == 1 && set8700_B[1] == 2
|
||||
set8700_B[2] == list(3,4)
|
||||
protect(set8700_B) == 1024
|
||||
protect(set8700_B[0]) == 1024 ## protect(set8700_A[0]) copied
|
||||
protect(set8700_B[2][0]) == 1536 ## protect(set8700_A[2][0]) copied
|
||||
|
||||
## Protecting one element of a list
|
||||
set8700_A = list(1,4,3,2), protect(set8700_A[1]) == 0
|
||||
protect(set8700_A[1], 1024), protect(set8700_A[1]) == 1024
|
||||
|
||||
## Testing sort
|
||||
set8700_A = sort(set8700_A), set8700_A == list(1,2,3,4)
|
||||
protect(set8700_A[1]) == 0
|
||||
protect(set8700_A[3]) == 1024 ## status of 4
|
||||
|
||||
## Testings reverse
|
||||
set8700_A = reverse(set8700_A), set8700_A == list(4,3,2,1)
|
||||
protect(set8700_A[0]) == 1024 ## status of 4
|
||||
|
||||
## Testing swap
|
||||
swap(set8700_A[0], set8700_A[1]), set8700_A == list(3,4,2,1)
|
||||
protect(set8700_A[0]) == 0 ## status moved
|
||||
protect(set8700_A[1]) == 1024 ## 4 retains protection
|
||||
|
||||
## Testing list with protected list argument
|
||||
protect(set8700_A, 0), protect(set8700_A) == 0
|
||||
protect(set8700_A, 512), protect(set8700_A) == 512
|
||||
protect(set8700_A[1]) == 1024
|
||||
set8700_L = list(1,set8700_A,3), protect(set8700_L) == 0
|
||||
protect(set8700_L[0]) == 0
|
||||
protect(set8700_L[1]) == 512 ## protect(set8700_A) copied
|
||||
protect(set8700_L[1][1]) == 1024 ## protect(set8700_A[1]) copied
|
||||
|
||||
## Testing list with "intialization"
|
||||
set8700_L = list(1,2,3), protect(set8700_L) == 0
|
||||
protect(set8700_L[0]) | protect(set8700_L[1]) | protect(set8700_L[2]) == 0 ## All zero
|
||||
set8700_L = {1,set8700_A}, set8700_L[1] == set8700_A
|
||||
protect(set8700_L[1]) == 512 ## protect(set8700_A) copied
|
||||
protect(set8700_L[1][1]) == 1024 ## protect(set8700_A[1]) copied
|
||||
set8700_L[1] = 2, protect(set8700_L[1]) == 512 ## Not changed
|
||||
|
||||
## Testing matrix with "initialization"
|
||||
set8700_M = mat[3] = {1,set8700_A}, protect(set8700_M) == 0
|
||||
protect(set8700_M[0]) == 0
|
||||
protect(set8700_M[1]) == 512 ## protect(set8700_A) copied
|
||||
protect(set8700_M[2]) == 0
|
||||
protect(set8700_M[1][1]) == 1024 ## protect(set8700_A[1]) copied
|
||||
|
||||
## Testing push, pop, append, remove
|
||||
set8700_A = list(1,2), protect(set8700_A,0,1), protect(set8700_A[0]) == 0
|
||||
protect(set8700_A[0], 256), protect(set8700_A[0]) == 256
|
||||
protect(set8700_A[1]) == 0
|
||||
append(set8700_A, pop(set8700_A)), protect(set8700_A[0]) == 0
|
||||
protect(set8700_A[1]) == 256
|
||||
push(set8700_A, remove(set8700_A)), protect(set8700_A[0]) == 256
|
||||
protect(set8700_A[1]) == 0
|
||||
|
||||
## Testing operation-assignments
|
||||
set8700_A = 5, protect(set8700_A,1024), protect(set8700_A) == 1024
|
||||
protect(set8700_A, 1024), set8700_A = 7, protect(set8700_A) == 1024
|
||||
protect(set8700_A,1024), set8700_A += 2, protect(set8700_A) == 1024
|
||||
protect(set8700_A,1024), set8700_A *= 2, protect(set8700_A) == 1024
|
||||
protect(set8700_A,1024), set8700_A |= 2, protect(set8700_A) == 1024
|
||||
protect(set8700_A,1024), set8700_A &= 2, protect(set8700_A) == 1024
|
||||
protect(set8700_A,1024), set8700_A ^= 2, protect(set8700_A) == 1024
|
||||
|
||||
protect(set8700_B,0), set8700_B = set8700_getA1(), protect(set8700_B) == 1024
|
||||
protect(set8700_B,0), set8700_B = set8700_getA2(), protect(set8700_B) == 1024
|
||||
set8700_B = set8700_getvar(), protect(set8700_B) == 1024 + 256
|
||||
|
||||
global set8700_x, set8700_y; set8700_x = 7, protect(set8700_x) == 0
|
||||
protect(7,2) == error(10234)
|
||||
protect(set8700_x,2.5) == error(10235)
|
||||
protect(set8700_x,"abc") == error(10235)
|
||||
protect(set8700_x, 1e6) == error(10235)
|
||||
protect(set8700_x,1), (set8700_x = 2) == error(10366)
|
||||
(set8700_x = 3 + 4) == error(10366)
|
||||
|
||||
protect(set8700_x,2), protect(set8700_x) == 3
|
||||
protect(set8700_x,-1), protect(set8700_x) == 2
|
||||
(set8700_x = 2) == error(10368)
|
||||
(set8700_x = 3 + 4) == 7
|
||||
protect(set8700_x,2), ++set8700_x == error(10379)
|
||||
set8700_x == 7
|
||||
--set8700_x == error(10382)
|
||||
set8700_x == 7
|
||||
set8700_x++ == error(10385)
|
||||
set8700_x == 7
|
||||
set8700_x-- == error(10388)
|
||||
|
||||
global set8700_A, set8700_B; 1
|
||||
protect(set8700_A,0), protect(set8700_A,16), 1
|
||||
set8700_A = "abcdef", protect(set8700_A) == 16 ## No copy to set8700_A
|
||||
protect(set8700_B,0), set8700_B = "xyz", protect(set8700_B) == 0
|
||||
copy(set8700_B, set8700_A) == error(10226)
|
||||
set8700_A == "abcdef" ## set8700_A not changed
|
||||
protect(set8700_A,0), copy(set8700_B,set8700_A), set8700_A == "xyzdef"
|
||||
protect(set8700_B,128), protect(set8700_B) == 128 ## No copy from set8700_B
|
||||
copy(set8700_B,set8700_A,,,3) == error(10225)
|
||||
set8700_A == "xyzdef"
|
||||
protect(set8700_B,0), copy(set8700_B,set8700_A,,,3), set8700_A == "xyzxyz"
|
||||
|
||||
set8700_A = "abcdef", protect(set8700_A, 16), swap(set8700_A[0], set8700_A[5]) == error(10371)
|
||||
set8700_A == "abcdef"
|
||||
protect(set8700_A,0), isnull(swap(set8700_A[0], set8700_A[5]))
|
||||
set8700_A == "fbcdea"
|
||||
protect(set8700_A,2), ++set8700_A[0] == error(10377)
|
||||
--set8700_A[1] == error(10380)
|
||||
set8700_A[2]++ == error(10383)
|
||||
set8700_A[3]-- == error(10386)
|
||||
set8700_A == "fbcdea"
|
||||
protect(set8700_A,0), ++set8700_A[0] == 'g'
|
||||
--set8700_A[1] == 'a'
|
||||
set8700_A[2]++ == ord('c')
|
||||
set8700_A[3]-- == ord('d')
|
||||
set8700_A == "gadcea"
|
||||
|
||||
protect(set8700_x,0), protect(set8700_y,0), protect(set8700_x,256), protect(set8700_y,512),1
|
||||
quomod(11,4,set8700_x,set8700_y), set8700_x == 2 && set8700_y == 3
|
||||
protect(set8700_x) == 256
|
||||
protect(set8700_y) == 512
|
||||
|
||||
set8700_A = mat[3]; protect(set8700_A[0], 1024); protect(set8700_A[0]) == 1024
|
||||
set8700_x = 7, protect(set8700_x,0), protect(set8700_x, 512), 1
|
||||
set8700_A = {set8700_x,,set8700_x}, protect(set8700_A[0]) == 1536
|
||||
protect(set8700_A[1]) == 0
|
||||
protect(set8700_A[2]) == 512
|
||||
protect(set8700_A,16), protect(set8700_A) == 16 ## No copy to
|
||||
set8700_A == (mat[3] = {7,0,7})
|
||||
set8700_A = {1,2,3}, errno() == 10390;
|
||||
set8700_A == (mat[3] = {7,0,7})
|
||||
|
||||
protect(set8700_A,0), set8700_A = {1,2,3}, set8700_A == (mat[3] = {1,2,3})
|
||||
protect(set8700_A[1],1), protect(set8700_A[1]) == 1
|
||||
set8700_A = {4,5,6}, errno() == 10394
|
||||
set8700_A == (mat[3] = {4,2,6})
|
||||
modify(7, "set8700_f") == error(10405)
|
||||
set8700_A = list(2,3,5), modify(set8700_A, 7) == error(10406)
|
||||
protect(set8700_A,2), modify(set8700_A, "set8700_f") == error(10407)
|
||||
protect(set8700_A,0), modify(set8700_A, "h") == error(10408)
|
||||
set8700_B = 42, protect(set8700_B,0), modify(set8700_B, "set8700_f") == error(10409)
|
||||
set8700_A == list(2,3,5) ## set8700_A not affected by failures
|
||||
protect(set8700_A,0,1), modify(set8700_A, "set8700_f") == null()
|
||||
set8700_A == list(4,9,25)
|
||||
modify(set8700_A,"set8700_g") == null()
|
||||
protect(set8700_A[0]) == 0
|
||||
protect(set8700_A[1]) == 256 && protect(set8700_A[2]) == 256
|
||||
|
||||
set8700_A = 0, protect(set8700_A,0), set8700_A = pop(2), set8700_A == error(10181)
|
||||
set8700_A = pop(list(1,2,3)), set8700_A == error(10181)
|
||||
set8700_B = set8700_A = pop(2), set8700_B == error(10181)
|
||||
set8700_A = 32, protect(set8700_A,8), (set8700_A = pop(2)) == error(10370)
|
||||
set8700_A == 32
|
||||
set8700_B = set8700_A = pop(2), set8700_B == error(10370)
|
||||
## Testing copying of protected elements and initialization
|
||||
set8700_M1 = mat[3], protect(set8700_M1,0), protect(set8700_M1[1],1), protect(set8700_M1[1]) == 1
|
||||
set8700_M2 = mat[3], protect(set8700_M2,0), protect(set8700_M2[2],4), protect(set8700_M2[2]) == 4
|
||||
set8700_L = list(set8700_M1, set8700_M2), protect(set8700_L[0][1]) == 1 && protect(set8700_L[1][2]) == 4
|
||||
set8700_L = {{1,2,3},{'a','b','c'}}, set8700_L[0] == (mat[3] = {1,0,3})
|
||||
set8700_L[1] == (mat[3] = {'a','b',0})
|
||||
set8700_M = mat[2], protect(set8700_M,0), set8700_M = {1,2,3,4}, set8700_M == (mat[2] = {1,2})
|
||||
set8700_x = 5, set8700_M = {set8700_x++, set8700_x++, set8700_x++, set8700_x++, set8700_x++}, set8700_M == (mat[2] = {5,6})
|
||||
set8700_x == 10 ## All initialization terms evaluated
|
||||
set8700_S = " ", set8700_S = {'a','b','c','d'}, set8700_S == "abc"
|
||||
|
||||
set8700_P = obj set8700_point = {1,2,3,4}, set8700_P.set8700_x == 1 && set8700_P.set8700_y == 2 && set8700_P.set8700_z == 3
|
||||
protect(set8700_P,16), set8700_Q = set8700_P, set8700_Q = {5,6,7}, set8700_Q == set8700_P
|
||||
set8700_P == (obj set8700_point = {1,2,3})
|
||||
set8700_L = list(mat[1] = {set8700_P}), protect(set8700_L[0][0]) == 16
|
||||
set8700_L = {{{4,5,6}}}, set8700_L[0][0] == set8700_P
|
||||
protect(set8700_L,0,2), set8700_L = {{{4,5,6}}}, set8700_L[0][0] == (obj set8700_point = {4,5,6})
|
19
calc.c
19
calc.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* calc - arbitrary precision calculator
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||
* Copyright (C) 1999-2006 David I. Bell, Landon Curt Noll and Ernest Bowen
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* 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.11 $
|
||||
* @(#) $Id: calc.c,v 29.11 2004/02/23 14:04:01 chongo Exp $
|
||||
* @(#) $Revision: 29.13 $
|
||||
* @(#) $Id: calc.c,v 29.13 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:11
|
||||
@@ -111,7 +111,7 @@ main(int argc, char **argv)
|
||||
BOOL done = FALSE;
|
||||
BOOL havearg;
|
||||
BOOL haveendstr;
|
||||
int len;
|
||||
size_t len;
|
||||
|
||||
/*
|
||||
* parse args
|
||||
@@ -393,7 +393,7 @@ main(int argc, char **argv)
|
||||
}
|
||||
/* XXX What if *cp = '\''? */
|
||||
*bp++ = '\'';
|
||||
strcpy(bp, cp);
|
||||
strncpy(bp, cp, len+1);
|
||||
bp += len;
|
||||
*bp++ = '\'';
|
||||
cp += len;
|
||||
@@ -452,16 +452,19 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
while (index < maxindex) {
|
||||
size_t cplen;
|
||||
|
||||
if (cmdlen > 0)
|
||||
cmdbuf[cmdlen++] = ' ';
|
||||
newcmdlen = cmdlen + strlen(cp);
|
||||
cplen = strlen(cp);
|
||||
newcmdlen = cmdlen + cplen;
|
||||
if (newcmdlen > MAXCMD) {
|
||||
fprintf(stderr,
|
||||
"%s: commands too long\n",
|
||||
program);
|
||||
exit(1);
|
||||
}
|
||||
strcpy(cmdbuf + cmdlen, cp);
|
||||
strncpy(cmdbuf + cmdlen, cp, cplen+1);
|
||||
cmdlen = newcmdlen;
|
||||
index++;
|
||||
if (index < maxindex)
|
||||
@@ -579,7 +582,7 @@ main(int argc, char **argv)
|
||||
if (run_state == RUN_PRE_CMD_ARGS) {
|
||||
if (havecommands) {
|
||||
set_run_state(RUN_CMD_ARGS);
|
||||
(void) openstring(cmdbuf, (long) strlen(cmdbuf));
|
||||
(void) openstring(cmdbuf, strlen(cmdbuf));
|
||||
getcommands(FALSE);
|
||||
closeinput();
|
||||
}
|
||||
|
15
calc.h
15
calc.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* calc - definitions for calculator program
|
||||
*
|
||||
* Copyright (C) 1999 David I. Bell
|
||||
* Copyright (C) 1999-2006 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
|
||||
@@ -17,8 +17,8 @@
|
||||
* 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.11 $
|
||||
* @(#) $Id: calc.h,v 29.11 2003/08/26 04:36:10 chongo Exp $
|
||||
* @(#) $Revision: 29.18 $
|
||||
* @(#) $Id: calc.h,v 29.18 2006/05/21 07:28:54 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:31
|
||||
@@ -98,12 +98,13 @@
|
||||
#define FILEID_STDIN ((FILEID) 0)
|
||||
#define FILEID_STDOUT ((FILEID) 1)
|
||||
#define FILEID_STDERR ((FILEID) 2)
|
||||
#define FILEID_NONE ((FILEID) -1)
|
||||
#define FILEID_NONE ((FILEID) -1) /* must be < 0 */
|
||||
|
||||
/*
|
||||
* File I/O routines.
|
||||
*/
|
||||
extern DLL FILEID openid(char *name, char *mode);
|
||||
extern DLL FILEID openpathid(char *name, char *mode, char *pathlist);
|
||||
extern DLL FILEID indexid(long index);
|
||||
extern DLL BOOL validid(FILEID id);
|
||||
extern DLL BOOL errorid(FILEID id);
|
||||
@@ -148,7 +149,7 @@ extern DLL void trimconstants(void);
|
||||
/*
|
||||
* Input routines.
|
||||
*/
|
||||
extern DLL int openstring(char *str, long num);
|
||||
extern DLL int openstring(char *str, size_t num);
|
||||
extern DLL int openterminal(void);
|
||||
extern DLL int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
|
||||
extern DLL char *nextline(void);
|
||||
@@ -205,7 +206,7 @@ extern DLL int d_flag; /* TRUE => disable heading, resource_debug */
|
||||
extern DLL int c_flag; /* TRUE => continue after error if permitted */
|
||||
extern DLL int i_flag; /* TRUE => try to go interactive after error */
|
||||
extern DLL int s_flag; /* TRUE => keep args as strings for argv() */
|
||||
extern DLL int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
||||
extern DLL long stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
||||
extern DLL BOOL abort_now; /* TRUE => try to go interactive */
|
||||
|
||||
extern DLL int argc_value; /* count of argv[] strings for argv() builtin */
|
||||
@@ -231,7 +232,7 @@ extern DLL char *shell; /* $SHELL or default */
|
||||
extern DLL char *program; /* our name (argv[0]) */
|
||||
|
||||
extern DLL int no_env; /* TRUE (-e) => ignore env vars on startup */
|
||||
extern DLL int errmax; /* if >= 0, error when errcount exceeds errmax */
|
||||
extern DLL long errmax; /* if >= 0, error when errcount exceeds errmax */
|
||||
extern DLL int use_old_std; /* TRUE (-O) => use classic configuration */
|
||||
|
||||
extern DLL int allow_read; /* FALSE => dont open any files for reading */
|
||||
|
63
calc.man
63
calc.man
@@ -15,8 +15,8 @@
|
||||
.\" 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.17 $
|
||||
.\" @(#) $Id: calc.man,v 29.17 2004/10/23 00:58:33 chongo Exp $
|
||||
.\" @(#) $Revision: 29.18 $
|
||||
.\" @(#) $Id: calc.man,v 29.18 2005/10/18 11:10:18 chongo Exp $
|
||||
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
|
||||
.\"
|
||||
.\" Under source code control: 1991/07/23 05:48:26
|
||||
@@ -51,7 +51,7 @@ calc \- arbitrary precision calculator
|
||||
.RB [ \-s ]
|
||||
.RB [ \-u ]
|
||||
.RB [ \-v ]
|
||||
.RB [ calc_cmd\ \&.\|.\|. ]
|
||||
.RB [ [\-\-]\ calc_cmd\ \&.\|.\|. ]
|
||||
.in -5n
|
||||
.sp
|
||||
\fI#!${BINDIR}/calc\fP\ [other_flags\ \&...] \fB\-f\fP
|
||||
@@ -435,6 +435,21 @@ Disable buffering of stdin and stdout.
|
||||
Print the
|
||||
.B calc
|
||||
version number and exit.
|
||||
|
||||
.TP
|
||||
.B \-\-
|
||||
The double dash indicates to calc that no more option follow.
|
||||
Thus calc will ignore a later argument on the command line
|
||||
even if it starts with a dash.
|
||||
This is useful when entering negative values on the command line as in:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
calc \-p \-\- \-1 - -7
|
||||
.sp 1
|
||||
.fi
|
||||
.in -5n
|
||||
|
||||
.PP
|
||||
|
||||
\&
|
||||
@@ -477,32 +492,50 @@ calc 23 + 47
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
should respond with display of 70, but
|
||||
will print 70.
|
||||
However, command lines will have problems:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
calc 23 * 47
|
||||
.sp 1
|
||||
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:
|
||||
The first example above fails because the shell interprets the '*'
|
||||
as a file glob.
|
||||
The second example fails because '\-23' is viewed as a calc option
|
||||
(which it is not) and do calc objects to that it thinks of as an unknown option.
|
||||
These cases can usually be made to work as expected by
|
||||
enclosing the command between quotes:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
calc "23 * 47"
|
||||
.fi
|
||||
.in -5n
|
||||
calc '23 * 47'
|
||||
.sp 1
|
||||
and
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
calc "print sqrt(2), exp(1)"
|
||||
.fi
|
||||
.in -5n
|
||||
.sp
|
||||
.sp 1
|
||||
or in parentheses and quotes to avoid leading \-'s as in:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
calc '(-23 + 47)'
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
One may also use a double dash to denote that calc options have ended as in:
|
||||
.sp 1
|
||||
.in +5n
|
||||
.nf
|
||||
calc -- -23 + 47
|
||||
.sp 1
|
||||
calc -q -- -23 + 47
|
||||
.fi
|
||||
.in -5n
|
||||
.sp 1
|
||||
If '!' is to be used to indicate the factorial function, for
|
||||
shells like
|
||||
.BI csh (1)
|
||||
|
19
calc.spec.in
19
calc.spec.in
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# calc.spec.in - template specfile for calc
|
||||
#
|
||||
# Copyright (C) 2003-2004 Petteri Kettunen and Landon Curt Noll
|
||||
# Copyright (C) 2003-2005 Petteri Kettunen and Landon Curt Noll
|
||||
#
|
||||
# Calc is open software; you can redistribute it and/or modify it under
|
||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -18,8 +18,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.13 $
|
||||
# @(#) $Id: calc.spec.in,v 29.13 2004/02/23 14:04:01 chongo Exp $
|
||||
# @(#) $Revision: 29.15 $
|
||||
# @(#) $Id: calc.spec.in,v 29.15 2006/05/21 06:26:00 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.spec.in,v $
|
||||
#
|
||||
# Under source code control: 2003/02/16 20:21:39
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
# BUGS
|
||||
# - Uninstalling calc and calc-devel leaves empty dirs /usr/include/calc
|
||||
# and /usr/share/calc and its subdird. In case e.g. %{_includedir}/calc
|
||||
# and /usr/share/calc and its subdirs. In case e.g. %{_includedir}/calc
|
||||
# is defined in `%files devel' section, then rpmbuild complains that
|
||||
# header files are defined twice - rpmbuild bug or bug in specfile conf???
|
||||
|
||||
@@ -48,11 +48,11 @@ BuildRoot: %{_tmppath}/%{name}-root
|
||||
|
||||
%description
|
||||
Calc is arbitrary precision C-like arithmetic system that is a
|
||||
calculator, an algorithm prototyper and mathematical research
|
||||
calculator, an algorithm prototype and mathematical research
|
||||
tool. Calc comes with a rich set of builtin mathematical and
|
||||
programmatic functions.
|
||||
|
||||
For the latest calc release, see the project home page:
|
||||
For the latest calc release, see the calc project home page:
|
||||
|
||||
http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||
|
||||
@@ -92,6 +92,7 @@ rm -rf %{buildroot}
|
||||
%{_datadir}/%{name}/bindings
|
||||
%{_datadir}/%{name}/README
|
||||
%{_datadir}/%{name}/*.cal
|
||||
%{_datadir}/%{name}/*.line
|
||||
|
||||
%files devel
|
||||
%defattr(-, root, root)
|
||||
@@ -100,6 +101,12 @@ rm -rf %{buildroot}
|
||||
%attr(644, root, root) %{_libdir}/*.a
|
||||
|
||||
%changelog
|
||||
* Sun May 20 2006 Landon Curt Noll http://www.isthe.com/chongo
|
||||
- Release of calc-2.12.0
|
||||
- Added *.line set files to the list of packaged files
|
||||
* Sun Dec 11 2005 Landon Curt Noll http://www.isthe.com/chongo
|
||||
- Release of calc-2.11.11
|
||||
- Fixed description in spec file
|
||||
* Wed Feb 26 2003 Landon Curt Noll http://www.isthe.com/chongo
|
||||
- Release of calc-2.11.7-2
|
||||
- Fixed attributes on include and lib calc-devel files
|
||||
|
64
calcerr.tbl
64
calcerr.tbl
@@ -17,8 +17,8 @@
|
||||
# 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: calcerr.tbl,v 29.4 2001/04/10 22:06:46 chongo Exp $
|
||||
# @(#) $Revision: 29.8 $
|
||||
# @(#) $Id: calcerr.tbl,v 29.8 2006/05/19 15:12:57 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
|
||||
#
|
||||
# Under source code control: 1996/05/23 17:38:44
|
||||
@@ -164,7 +164,7 @@ E_RSEARCH3 Bad third argument for rsearch
|
||||
E_RSEARCH4 Bad fourth argument for rsearch
|
||||
E_RSEARCH5 Cannot find fsize or fpos for rsearch
|
||||
E_RSEARCH6 File not readable for rsearch
|
||||
E_FOPEN3 Too many open files
|
||||
E_MANYOPEN Too many open files
|
||||
E_REWIND2 Attempt to rewind a file that is not open
|
||||
E_STRERROR1 Bad argument type for strerror
|
||||
E_STRERROR2 Index out of range for strerror
|
||||
@@ -260,14 +260,14 @@ E_COPY13 No-copy-from source variable
|
||||
E_COPY14 No-copy-to destination variable
|
||||
E_COPY15 No-copy-from source named block
|
||||
E_COPY16 No-copy-to destination named block
|
||||
E_COPY17 No-relocation destination for copy
|
||||
E_COPY17 No-relocate destination for copy
|
||||
E_COPYF1 File not open for copy
|
||||
E_COPYF2 fseek or fsize failure for copy
|
||||
E_COPYF3 fwrite error for copy
|
||||
E_COPYF4 fread error for copy
|
||||
E_PROTECT1 Non-variable first argument for protect
|
||||
E_PROTECT2 Non-integer second argument for protect
|
||||
E_PROTECT3 Out-of-range second argument for protect
|
||||
E_PROTECT2 Bad second argument for protect
|
||||
E_PROTECT3 Bad third argument for protect
|
||||
E_MATFILL3 No-copy-to destination for matfill
|
||||
E_MATFILL4 No-assign-from source for matfill
|
||||
E_MATTRACE1 Non-matrix argument for mattrace
|
||||
@@ -393,3 +393,55 @@ E_BERN Bad argument for bern
|
||||
E_EULER Bad argument for euler
|
||||
E_SLEEP Bad argument for sleep
|
||||
E_TTY calc_tty failure
|
||||
E_ASSIGN1 No-copy-to destination for octet assign
|
||||
E_ASSIGN2 No-copy-from source for octet assign
|
||||
E_ASSIGN3 No-change destination for octet assign
|
||||
E_ASSIGN4 Non-variable destination for assign
|
||||
E_ASSIGN5 No-assign-to destination for assign
|
||||
E_ASSIGN6 No-assign-from source for assign
|
||||
E_ASSIGN7 No-change destination for assign
|
||||
E_ASSIGN8 No-type-change destination for assign
|
||||
E_ASSIGN9 No-error-value destination for assign
|
||||
E_SWAP1 No-copy argument for octet swap
|
||||
E_SWAP2 No-assign-to-or-from argument for swap
|
||||
E_SWAP3 Non-variable argument for swap
|
||||
E_QUOMOD1 Non-variable argument 4 or 4 for quomod
|
||||
E_QUOMOD2 Non-real-number argument 1 or 2 for quomod
|
||||
E_QUOMOD3 No-assign-to argument 3 or 4 for quomod
|
||||
E_PREINC1 No-copy-to or no-change argument for octet preinc
|
||||
E_PREINC2 Non-variable argument for preinc
|
||||
E_PREINC3 No-assign-to or no-change argument for preinc
|
||||
E_PREDEC1 No-copy-to or no-change argument for octet predec
|
||||
E_PREDEC2 Non-variable argument for predec
|
||||
E_PREDEC3 No-assign-to or no-change argument for predec
|
||||
E_POSTINC1 No-copy-to or no-change argument for octet postinc
|
||||
E_POSTINC2 Non-variable argument for postinc
|
||||
E_POSTINC3 No-assign-to or no-change argument for postinc
|
||||
E_POSTDEC1 No-copy-to or no-change argument for octet postdec
|
||||
E_POSTDEC2 Non-variable argument for postdec
|
||||
E_POSTDEC3 No-assign-to or no-change argument for postdec
|
||||
E_INIT1 Error-type structure for initialization
|
||||
E_INIT2 No-copy-to structure for initialization
|
||||
E_INIT3 Too many initializer values
|
||||
E_INIT4 Attempt to initialize freed named block
|
||||
E_INIT5 Bad structure type for initialization
|
||||
E_INIT6 No-assign-to element for initialization
|
||||
E_INIT7 No-change element for initialization
|
||||
E_INIT8 No-type-change element for initialization
|
||||
E_INIT9 No-error-value element for initialization
|
||||
E_INIT10 No-assign-or-copy-from source for initialization
|
||||
E_LIST1 No-relocate for list insert
|
||||
E_LIST2 No-relocate for list delete
|
||||
E_LIST3 No-relocate for list push
|
||||
E_LIST4 No-relocate for list append
|
||||
E_LIST5 No-relocate for list pop
|
||||
E_LIST6 No-relocate for list remove
|
||||
E_MODIFY1 Non-variable first argument for modify
|
||||
E_MODIFY2 Non-string second argument for modify
|
||||
E_MODIFY3 No-change first argument for modify
|
||||
E_MODIFY4 Undefined function for modify
|
||||
E_MODIFY5 Unacceptable type first argument for modify
|
||||
E_FPATHOPEN1 Non-string arguments for fpathopen
|
||||
E_FPATHOPEN2 Unrecognized mode for fpathopen
|
||||
E_LOG1 Bad epsilon argument for log
|
||||
E_LOG2 Non-numeric first argument for log
|
||||
|
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# check - check the regression output for problems
|
||||
#
|
||||
# Copyright (C) 1999 Landon Curt Noll
|
||||
# Copyright (C) 1999-2006 Landon Curt Noll
|
||||
#
|
||||
# Calc is open software; you can redistribute it and/or modify it under
|
||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -18,8 +18,8 @@
|
||||
# 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 $
|
||||
# @(#) $Revision: 29.3 $
|
||||
# @(#) $Id: check.awk,v 29.3 2006/05/20 19:43:39 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $
|
||||
#
|
||||
# Under source code control: 1996/05/25 22:07:58
|
||||
@@ -64,7 +64,7 @@ NF == 0 {
|
||||
end_seen = 1;
|
||||
}
|
||||
|
||||
$1 ~ /^[0-9]+:/ {
|
||||
$1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ {
|
||||
if (error > 0) {
|
||||
if (havebuf2) {
|
||||
print buf2;
|
||||
|
93
cmath.h
93
cmath.h
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.6 $
|
||||
* @(#) $Id: cmath.h,v 29.6 2002/03/12 09:38:26 chongo Exp $
|
||||
* @(#) $Revision: 29.7 $
|
||||
* @(#) $Id: cmath.h,v 29.7 2005/10/18 10:43:49 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/cmath.h,v $
|
||||
*
|
||||
* Under source code control: 1993/07/30 19:42:45
|
||||
@@ -63,63 +63,64 @@ extern void cprintfr(COMPLEX *c);
|
||||
* Basic numeric routines.
|
||||
*/
|
||||
|
||||
extern COMPLEX *cadd(COMPLEX *c1, COMPLEX *c2);
|
||||
extern COMPLEX *csub(COMPLEX *c1, COMPLEX *c2);
|
||||
extern COMPLEX *cmul(COMPLEX *c1, COMPLEX *c2);
|
||||
extern COMPLEX *cdiv(COMPLEX *c1, COMPLEX *c2);
|
||||
extern COMPLEX *caddq(COMPLEX *c, NUMBER *q);
|
||||
extern COMPLEX *csubq(COMPLEX *c, NUMBER *q);
|
||||
extern COMPLEX *cmulq(COMPLEX *c, NUMBER *q);
|
||||
extern COMPLEX *cdivq(COMPLEX *c, NUMBER *q);
|
||||
extern COMPLEX *cscale(COMPLEX *c, long i);
|
||||
extern COMPLEX *cshift(COMPLEX *c, long i);
|
||||
extern COMPLEX *csquare(COMPLEX *c);
|
||||
extern COMPLEX *cconj(COMPLEX *c);
|
||||
extern COMPLEX *c_add(COMPLEX *c1, COMPLEX *c2);
|
||||
extern COMPLEX *c_sub(COMPLEX *c1, COMPLEX *c2);
|
||||
extern COMPLEX *c_mul(COMPLEX *c1, COMPLEX *c2);
|
||||
extern COMPLEX *c_div(COMPLEX *c1, COMPLEX *c2);
|
||||
extern COMPLEX *c_addq(COMPLEX *c, NUMBER *q);
|
||||
extern COMPLEX *c_subq(COMPLEX *c, NUMBER *q);
|
||||
extern COMPLEX *c_mulq(COMPLEX *c, NUMBER *q);
|
||||
extern COMPLEX *c_divq(COMPLEX *c, NUMBER *q);
|
||||
extern COMPLEX *c_scale(COMPLEX *c, long i);
|
||||
extern COMPLEX *c_shift(COMPLEX *c, long i);
|
||||
extern COMPLEX *c_square(COMPLEX *c);
|
||||
extern COMPLEX *c_conj(COMPLEX *c);
|
||||
extern COMPLEX *c_real(COMPLEX *c);
|
||||
extern COMPLEX *c_imag(COMPLEX *c);
|
||||
extern COMPLEX *cneg(COMPLEX *c);
|
||||
extern COMPLEX *cinv(COMPLEX *c);
|
||||
extern COMPLEX *cint(COMPLEX *c);
|
||||
extern COMPLEX *cfrac(COMPLEX *c);
|
||||
extern BOOL ccmp(COMPLEX *c1, COMPLEX *c2);
|
||||
extern COMPLEX *c_neg(COMPLEX *c);
|
||||
extern COMPLEX *c_inv(COMPLEX *c);
|
||||
extern COMPLEX *c_int(COMPLEX *c);
|
||||
extern COMPLEX *c_frac(COMPLEX *c);
|
||||
extern BOOL c_cmp(COMPLEX *c1, COMPLEX *c2);
|
||||
|
||||
|
||||
/*
|
||||
* More complicated functions.
|
||||
*/
|
||||
extern COMPLEX *cpowi(COMPLEX *c, NUMBER *q);
|
||||
extern NUMBER *cilog(COMPLEX *c, ZVALUE base);
|
||||
extern COMPLEX *c_powi(COMPLEX *c, NUMBER *q);
|
||||
extern NUMBER *c_ilog(COMPLEX *c, ZVALUE base);
|
||||
|
||||
|
||||
/*
|
||||
* Transcendental routines. These all take an epsilon argument to
|
||||
* specify how accurately these are to be calculated.
|
||||
*/
|
||||
extern COMPLEX *cpower(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon);
|
||||
extern COMPLEX *csqrt(COMPLEX *c, NUMBER *epsilon, long R);
|
||||
extern COMPLEX *croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon);
|
||||
extern COMPLEX *cexp(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *cln(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *ccos(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *csin(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *ccosh(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *csinh(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *cpolar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon);
|
||||
extern COMPLEX *crel(COMPLEX *c1, COMPLEX *c2);
|
||||
extern COMPLEX *casin(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *cacos(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *catan(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *cacot(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *casec(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *cacsc(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *casinh(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *cacosh(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *catanh(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *cacoth(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *casech(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *cacsch(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *cgd(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *cagd(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_power(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon);
|
||||
extern COMPLEX *c_sqrt(COMPLEX *c, NUMBER *epsilon, long R);
|
||||
extern COMPLEX *c_root(COMPLEX *c, NUMBER *q, NUMBER *epsilon);
|
||||
extern COMPLEX *c_exp(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_ln(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_log(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_cos(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_sin(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_cosh(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_sinh(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_polar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon);
|
||||
extern COMPLEX *c_rel(COMPLEX *c1, COMPLEX *c2);
|
||||
extern COMPLEX *c_asin(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_acos(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_atan(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_acot(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_asec(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_acsc(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_asinh(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_acosh(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_atanh(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_acoth(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_asech(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_acsch(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_gd(COMPLEX *c, NUMBER *epsilon);
|
||||
extern COMPLEX *c_agd(COMPLEX *c, NUMBER *epsilon);
|
||||
|
||||
|
||||
|
||||
|
356
comfunc.c
356
comfunc.c
@@ -19,8 +19,8 @@
|
||||
* 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: comfunc.c,v 29.3 2000/07/17 15:35:49 chongo Exp $
|
||||
* @(#) $Revision: 29.6 $
|
||||
* @(#) $Id: comfunc.c,v 29.6 2006/05/20 08:43:55 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/comfunc.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:13
|
||||
@@ -33,6 +33,16 @@
|
||||
#include "config.h"
|
||||
#include "cmath.h"
|
||||
|
||||
/*
|
||||
* cache the natural logarithm of 10
|
||||
*/
|
||||
static COMPLEX *cln_10 = NULL;
|
||||
static NUMBER *cln_10_epsilon = NULL;
|
||||
static NUMBER _q10_ = { { _tenval_, 1, 0 }, { _oneval_, 1, 0 }, 1, NULL };
|
||||
static NUMBER _q0_ = { { _zeroval_, 1, 0 }, { _oneval_, 1, 0 }, 1, NULL };
|
||||
COMPLEX _cten_ = { &_q10_, &_q0_, 1 };
|
||||
|
||||
|
||||
/*
|
||||
* Compute the result of raising a complex number to an integer power.
|
||||
*
|
||||
@@ -41,7 +51,7 @@
|
||||
* q power to raise it to
|
||||
*/
|
||||
COMPLEX *
|
||||
cpowi(COMPLEX *c, NUMBER *q)
|
||||
c_powi(COMPLEX *c, NUMBER *q)
|
||||
{
|
||||
COMPLEX *tmp, *res; /* temporary values */
|
||||
long power; /* power to raise to */
|
||||
@@ -69,29 +79,29 @@ cpowi(COMPLEX *c, NUMBER *q)
|
||||
*/
|
||||
if (power <= 4) {
|
||||
switch ((int) (power * sign)) {
|
||||
case 0:
|
||||
return clink(&_cone_);
|
||||
case 1:
|
||||
return clink(c);
|
||||
case -1:
|
||||
return cinv(c);
|
||||
case 2:
|
||||
return csquare(c);
|
||||
case -2:
|
||||
tmp = csquare(c);
|
||||
res = cinv(tmp);
|
||||
comfree(tmp);
|
||||
return res;
|
||||
case 3:
|
||||
tmp = csquare(c);
|
||||
res = cmul(c, tmp);
|
||||
comfree(tmp);
|
||||
return res;
|
||||
case 4:
|
||||
tmp = csquare(c);
|
||||
res = csquare(tmp);
|
||||
comfree(tmp);
|
||||
return res;
|
||||
case 0:
|
||||
return clink(&_cone_);
|
||||
case 1:
|
||||
return clink(c);
|
||||
case -1:
|
||||
return c_inv(c);
|
||||
case 2:
|
||||
return c_square(c);
|
||||
case -2:
|
||||
tmp = c_square(c);
|
||||
res = c_inv(tmp);
|
||||
comfree(tmp);
|
||||
return res;
|
||||
case 3:
|
||||
tmp = c_square(c);
|
||||
res = c_mul(c, tmp);
|
||||
comfree(tmp);
|
||||
return res;
|
||||
case 4:
|
||||
tmp = c_square(c);
|
||||
res = c_square(tmp);
|
||||
comfree(tmp);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
/*
|
||||
@@ -102,26 +112,26 @@ cpowi(COMPLEX *c, NUMBER *q)
|
||||
while ((bit & power) == 0)
|
||||
bit >>= 1L;
|
||||
bit >>= 1L;
|
||||
res = csquare(c);
|
||||
res = c_square(c);
|
||||
if (bit & power) {
|
||||
tmp = cmul(res, c);
|
||||
tmp = c_mul(res, c);
|
||||
comfree(res);
|
||||
res = tmp;
|
||||
}
|
||||
bit >>= 1L;
|
||||
while (bit) {
|
||||
tmp = csquare(res);
|
||||
tmp = c_square(res);
|
||||
comfree(res);
|
||||
res = tmp;
|
||||
if (bit & power) {
|
||||
tmp = cmul(res, c);
|
||||
tmp = c_mul(res, c);
|
||||
comfree(res);
|
||||
res = tmp;
|
||||
}
|
||||
bit >>= 1L;
|
||||
}
|
||||
if (sign < 0) {
|
||||
tmp = cinv(res);
|
||||
tmp = c_inv(res);
|
||||
comfree(res);
|
||||
res = tmp;
|
||||
}
|
||||
@@ -134,7 +144,7 @@ cpowi(COMPLEX *c, NUMBER *q)
|
||||
* Type of rounding of each component specified by R as for qsqrt().
|
||||
*/
|
||||
COMPLEX *
|
||||
csqrt(COMPLEX *c, NUMBER *epsilon, long R)
|
||||
c_sqrt(COMPLEX *c, NUMBER *epsilon, long R)
|
||||
{
|
||||
COMPLEX *r;
|
||||
NUMBER *es, *aes, *bes, *u, *v, qtemp;
|
||||
@@ -363,7 +373,7 @@ csqrt(COMPLEX *c, NUMBER *epsilon, long R)
|
||||
* Each component of the result is within the specified error.
|
||||
*/
|
||||
COMPLEX *
|
||||
croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
||||
c_root(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *r;
|
||||
NUMBER *a2pb2, *root, *tmp1, *tmp2, *epsilon2;
|
||||
@@ -376,7 +386,7 @@ croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
||||
if (cisone(c) || qisone(q))
|
||||
return clink(c);
|
||||
if (qistwo(q))
|
||||
return csqrt(c, epsilon, 24L);
|
||||
return c_sqrt(c, epsilon, 24L);
|
||||
if (cisreal(c) && !qisneg(c->real)) {
|
||||
tmp1 = qroot(c->real, q, epsilon);
|
||||
if (tmp1 == NULL)
|
||||
@@ -388,8 +398,8 @@ croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
||||
}
|
||||
/*
|
||||
* Calculate the root using the formula:
|
||||
* croot(a + bi, n) =
|
||||
* cpolar(qroot(a^2 + b^2, 2 * n), qatan2(b, a) / n).
|
||||
* c_root(a + bi, n) =
|
||||
* c_polar(qroot(a^2 + b^2, 2 * n), qatan2(b, a) / n).
|
||||
*/
|
||||
n = qilog2(epsilon);
|
||||
epsilon2 = qbitvalue(n - 4);
|
||||
@@ -415,7 +425,7 @@ croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
||||
qfree(epsilon2);
|
||||
tmp2 = qqdiv(tmp1, q);
|
||||
qfree(tmp1);
|
||||
r = cpolar(root, tmp2, epsilon);
|
||||
r = c_polar(root, tmp2, epsilon);
|
||||
qfree(root);
|
||||
qfree(tmp2);
|
||||
return r;
|
||||
@@ -428,7 +438,7 @@ croot(COMPLEX *c, NUMBER *q, NUMBER *epsilon)
|
||||
* exp(a + bi) = exp(a) * (cos(b) + i * sin(b)).
|
||||
*/
|
||||
COMPLEX *
|
||||
cexp(COMPLEX *c, NUMBER *epsilon)
|
||||
c_exp(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *r;
|
||||
NUMBER *sin, *cos, *tmp1, *tmp2, *epsilon1;
|
||||
@@ -485,13 +495,13 @@ cexp(COMPLEX *c, NUMBER *epsilon)
|
||||
* ln(a + bi) = ln(a^2 + b^2) / 2 + i * atan2(b, a).
|
||||
*/
|
||||
COMPLEX *
|
||||
cln(COMPLEX *c, NUMBER *epsilon)
|
||||
c_ln(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *r;
|
||||
NUMBER *a2b2, *tmp1, *tmp2, *epsilon1;
|
||||
|
||||
if (ciszero(c)) {
|
||||
math_error("Logarithm of zero");
|
||||
math_error("logarithm of zero");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
if (cisone(c))
|
||||
@@ -519,6 +529,60 @@ cln(COMPLEX *c, NUMBER *epsilon)
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate base 10 logarithm by:
|
||||
*
|
||||
* log(c) = ln(c) / ln(10)
|
||||
*/
|
||||
COMPLEX *
|
||||
c_log(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
int need_new_cln_10 = TRUE; /* FALSE => use cached cln_10 value */
|
||||
COMPLEX *ln_c; /* ln(x) */
|
||||
COMPLEX *ret; /* base 10 logarithm of x */
|
||||
|
||||
/*
|
||||
* compute ln(c) first
|
||||
*/
|
||||
ln_c = c_ln(c, epsilon);
|
||||
/* log(1) == 0 */
|
||||
if (ciszero(ln_c)) {
|
||||
return ln_c;
|
||||
}
|
||||
|
||||
/*
|
||||
* save epsilon for ln(10) if needed
|
||||
*/
|
||||
if (cln_10_epsilon == NULL) {
|
||||
/* first time call */
|
||||
cln_10_epsilon = qcopy(epsilon);
|
||||
} else if (qcmp(cln_10_epsilon, epsilon) == FALSE) {
|
||||
/* replaced cacheed value with epsilon arg */
|
||||
qfree(cln_10_epsilon);
|
||||
cln_10_epsilon = qcopy(epsilon);
|
||||
} else if (cln_10 != NULL) {
|
||||
/* the previously computed ln(2) is OK to use */
|
||||
need_new_cln_10 = FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* compute ln(10) if needed
|
||||
*/
|
||||
if (need_new_cln_10 == TRUE) {
|
||||
if (cln_10 != NULL) {
|
||||
comfree(cln_10);
|
||||
}
|
||||
cln_10 = c_ln(&_cten_, cln_10_epsilon);
|
||||
}
|
||||
|
||||
/*
|
||||
* return ln(c) / ln(10)
|
||||
*/
|
||||
ret = c_div(ln_c, cln_10);
|
||||
comfree(ln_c);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Calculate the complex cosine within the specified accuracy.
|
||||
@@ -526,7 +590,7 @@ cln(COMPLEX *c, NUMBER *epsilon)
|
||||
* cos(x) = (exp(1i * x) + exp(-1i * x))/2;
|
||||
*/
|
||||
COMPLEX *
|
||||
ccos(COMPLEX *c, NUMBER *epsilon)
|
||||
c_cos(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *r, *ctmp1, *ctmp2, *ctmp3;
|
||||
NUMBER *epsilon1;
|
||||
@@ -545,7 +609,7 @@ ccos(COMPLEX *c, NUMBER *epsilon)
|
||||
ctmp1->real = neg ? qneg(c->imag) : qlink(c->imag);
|
||||
ctmp1->imag = neg ? qlink(c->real) : qneg(c->real);
|
||||
epsilon1 = qbitvalue(n - 2);
|
||||
ctmp2 = cexp(ctmp1, epsilon1);
|
||||
ctmp2 = c_exp(ctmp1, epsilon1);
|
||||
comfree(ctmp1);
|
||||
qfree(epsilon1);
|
||||
if (ctmp2 == NULL)
|
||||
@@ -554,11 +618,11 @@ ccos(COMPLEX *c, NUMBER *epsilon)
|
||||
comfree(ctmp2);
|
||||
return clink(&_czero_);
|
||||
}
|
||||
ctmp1 = cinv(ctmp2);
|
||||
ctmp3 = cadd(ctmp2, ctmp1);
|
||||
ctmp1 = c_inv(ctmp2);
|
||||
ctmp3 = c_add(ctmp2, ctmp1);
|
||||
comfree(ctmp1);
|
||||
comfree(ctmp2);
|
||||
ctmp1 = cscale(ctmp3, -1);
|
||||
ctmp1 = c_scale(ctmp3, -1);
|
||||
comfree(ctmp3);
|
||||
r = comalloc();
|
||||
qfree(r->real);
|
||||
@@ -576,7 +640,7 @@ ccos(COMPLEX *c, NUMBER *epsilon)
|
||||
* sin(x) = (exp(1i * x) - exp(-i1*x))/(2i).
|
||||
*/
|
||||
COMPLEX *
|
||||
csin(COMPLEX *c, NUMBER *epsilon)
|
||||
c_sin(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *r, *ctmp1, *ctmp2, *ctmp3;
|
||||
NUMBER *qtmp, *epsilon1;
|
||||
@@ -597,7 +661,7 @@ csin(COMPLEX *c, NUMBER *epsilon)
|
||||
ctmp1->real = neg ? qneg(c->imag) : qlink(c->imag);
|
||||
ctmp1->imag = neg ? qlink(c->real) : qneg(c->real);
|
||||
epsilon1 = qbitvalue(n - 2);
|
||||
ctmp2 = cexp(ctmp1, epsilon1);
|
||||
ctmp2 = c_exp(ctmp1, epsilon1);
|
||||
comfree(ctmp1);
|
||||
qfree(epsilon1);
|
||||
if (ctmp2 == NULL)
|
||||
@@ -606,11 +670,11 @@ csin(COMPLEX *c, NUMBER *epsilon)
|
||||
comfree(ctmp2);
|
||||
return clink(&_czero_);
|
||||
}
|
||||
ctmp1 = cinv(ctmp2);
|
||||
ctmp3 = csub(ctmp2, ctmp1);
|
||||
ctmp1 = c_inv(ctmp2);
|
||||
ctmp3 = c_sub(ctmp2, ctmp1);
|
||||
comfree(ctmp1);
|
||||
comfree(ctmp2);
|
||||
ctmp1 = cscale(ctmp3, -1);
|
||||
ctmp1 = c_scale(ctmp3, -1);
|
||||
comfree(ctmp3);
|
||||
r = comalloc();
|
||||
qtmp = neg ? qlink(ctmp1->imag) : qneg(ctmp1->imag);
|
||||
@@ -627,105 +691,105 @@ csin(COMPLEX *c, NUMBER *epsilon)
|
||||
|
||||
|
||||
COMPLEX *
|
||||
ccosh(COMPLEX *c, NUMBER *epsilon)
|
||||
c_cosh(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||
|
||||
tmp1 = cexp(c, epsilon);
|
||||
tmp1 = c_exp(c, epsilon);
|
||||
if (tmp1 == NULL)
|
||||
return NULL;
|
||||
tmp2 = cneg(c);
|
||||
tmp3 = cexp(tmp2, epsilon);
|
||||
tmp2 = c_neg(c);
|
||||
tmp3 = c_exp(tmp2, epsilon);
|
||||
comfree(tmp2);
|
||||
if (tmp3 == NULL)
|
||||
return NULL;
|
||||
tmp2 = cadd(tmp1, tmp3);
|
||||
tmp2 = c_add(tmp1, tmp3);
|
||||
comfree(tmp1);
|
||||
comfree(tmp3);
|
||||
tmp1 = cscale(tmp2, -1);
|
||||
tmp1 = c_scale(tmp2, -1);
|
||||
comfree(tmp2);
|
||||
return tmp1;
|
||||
}
|
||||
|
||||
|
||||
COMPLEX *
|
||||
csinh(COMPLEX *c, NUMBER *epsilon)
|
||||
c_sinh(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||
|
||||
tmp1 = cexp(c, epsilon);
|
||||
tmp1 = c_exp(c, epsilon);
|
||||
if (tmp1 == NULL)
|
||||
return NULL;
|
||||
tmp2 = cneg(c);
|
||||
tmp3 = cexp(tmp2, epsilon);
|
||||
tmp2 = c_neg(c);
|
||||
tmp3 = c_exp(tmp2, epsilon);
|
||||
comfree(tmp2);
|
||||
if (tmp3 == NULL)
|
||||
return NULL;
|
||||
tmp2 = csub(tmp1, tmp3);
|
||||
tmp2 = c_sub(tmp1, tmp3);
|
||||
comfree(tmp1);
|
||||
comfree(tmp3);
|
||||
tmp1 = cscale(tmp2, -1);
|
||||
tmp1 = c_scale(tmp2, -1);
|
||||
comfree(tmp2);
|
||||
return tmp1;
|
||||
}
|
||||
|
||||
|
||||
COMPLEX *
|
||||
casin(COMPLEX *c, NUMBER *epsilon)
|
||||
c_asin(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2;
|
||||
|
||||
tmp1 = cmul(&_conei_, c);
|
||||
tmp2 = casinh(tmp1, epsilon);
|
||||
tmp1 = c_mul(&_conei_, c);
|
||||
tmp2 = c_asinh(tmp1, epsilon);
|
||||
comfree(tmp1);
|
||||
tmp1 = cdiv(tmp2, &_conei_);
|
||||
tmp1 = c_div(tmp2, &_conei_);
|
||||
comfree(tmp2);
|
||||
return tmp1;
|
||||
}
|
||||
|
||||
|
||||
COMPLEX *
|
||||
cacos(COMPLEX *c, NUMBER *epsilon)
|
||||
c_acos(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2;
|
||||
|
||||
tmp1 = csquare(c);
|
||||
tmp2 = csub(&_cone_, tmp1);
|
||||
tmp1 = c_square(c);
|
||||
tmp2 = c_sub(&_cone_, tmp1);
|
||||
comfree(tmp1);
|
||||
tmp1 = csqrt(tmp2, epsilon, 24);
|
||||
tmp1 = c_sqrt(tmp2, epsilon, 24);
|
||||
comfree(tmp2);
|
||||
tmp2 = cmul(&_conei_, tmp1);
|
||||
tmp2 = c_mul(&_conei_, tmp1);
|
||||
comfree(tmp1);
|
||||
tmp1 = cadd(c, tmp2);
|
||||
tmp1 = c_add(c, tmp2);
|
||||
comfree(tmp2);
|
||||
tmp2 = cln(tmp1, epsilon);
|
||||
tmp2 = c_ln(tmp1, epsilon);
|
||||
comfree(tmp1);
|
||||
tmp1 = cdiv(tmp2, &_conei_);
|
||||
tmp1 = c_div(tmp2, &_conei_);
|
||||
comfree(tmp2);
|
||||
return tmp1;
|
||||
}
|
||||
|
||||
|
||||
COMPLEX *
|
||||
casinh(COMPLEX *c, NUMBER *epsilon)
|
||||
c_asinh(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||
BOOL neg;
|
||||
|
||||
neg = qisneg(c->real);
|
||||
tmp1 = neg ? cneg(c) : clink(c);
|
||||
tmp2 = csquare(tmp1);
|
||||
tmp3 = cadd(&_cone_, tmp2);
|
||||
tmp1 = neg ? c_neg(c) : clink(c);
|
||||
tmp2 = c_square(tmp1);
|
||||
tmp3 = c_add(&_cone_, tmp2);
|
||||
comfree(tmp2);
|
||||
tmp2 = csqrt(tmp3, epsilon, 24);
|
||||
tmp2 = c_sqrt(tmp3, epsilon, 24);
|
||||
comfree(tmp3);
|
||||
tmp3 = cadd(tmp2, tmp1);
|
||||
tmp3 = c_add(tmp2, tmp1);
|
||||
comfree(tmp1);
|
||||
comfree(tmp2);
|
||||
tmp1 = cln(tmp3, epsilon);
|
||||
tmp1 = c_ln(tmp3, epsilon);
|
||||
comfree(tmp3);
|
||||
if (neg) {
|
||||
tmp2 = cneg(tmp1);
|
||||
tmp2 = c_neg(tmp1);
|
||||
comfree(tmp1);
|
||||
return tmp2;
|
||||
}
|
||||
@@ -734,153 +798,153 @@ casinh(COMPLEX *c, NUMBER *epsilon)
|
||||
|
||||
|
||||
COMPLEX *
|
||||
cacosh(COMPLEX *c, NUMBER *epsilon)
|
||||
c_acosh(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2;
|
||||
|
||||
tmp1 = csquare(c);
|
||||
tmp2 = csub(tmp1, &_cone_);
|
||||
tmp1 = c_square(c);
|
||||
tmp2 = c_sub(tmp1, &_cone_);
|
||||
comfree(tmp1);
|
||||
tmp1 = csqrt(tmp2, epsilon, 24);
|
||||
tmp1 = c_sqrt(tmp2, epsilon, 24);
|
||||
comfree(tmp2);
|
||||
tmp2 = cadd(c, tmp1);
|
||||
tmp2 = c_add(c, tmp1);
|
||||
comfree(tmp1);
|
||||
tmp1 = cln(tmp2, epsilon);
|
||||
tmp1 = c_ln(tmp2, epsilon);
|
||||
comfree(tmp2);
|
||||
return tmp1;
|
||||
}
|
||||
|
||||
|
||||
COMPLEX *
|
||||
catan(COMPLEX *c, NUMBER *epsilon)
|
||||
c_atan(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||
|
||||
if (qiszero(c->real) && qisunit(c->imag))
|
||||
return NULL;
|
||||
tmp1 = csub(&_conei_, c);
|
||||
tmp2 = cadd(&_conei_, c);
|
||||
tmp3 = cdiv(tmp1, tmp2);
|
||||
tmp1 = c_sub(&_conei_, c);
|
||||
tmp2 = c_add(&_conei_, c);
|
||||
tmp3 = c_div(tmp1, tmp2);
|
||||
comfree(tmp1);
|
||||
comfree(tmp2);
|
||||
tmp1 = cln(tmp3, epsilon);
|
||||
tmp1 = c_ln(tmp3, epsilon);
|
||||
comfree(tmp3);
|
||||
tmp2 = cscale(tmp1, -1);
|
||||
tmp2 = c_scale(tmp1, -1);
|
||||
comfree(tmp1);
|
||||
tmp1 = cdiv(tmp2, &_conei_);
|
||||
tmp1 = c_div(tmp2, &_conei_);
|
||||
comfree(tmp2);
|
||||
return tmp1;
|
||||
}
|
||||
|
||||
|
||||
COMPLEX *
|
||||
cacot(COMPLEX *c, NUMBER *epsilon)
|
||||
c_acot(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||
|
||||
if (qiszero(c->real) && qisunit(c->imag))
|
||||
return NULL;
|
||||
tmp1 = cadd(c, &_conei_);
|
||||
tmp2 = csub(c, &_conei_);
|
||||
tmp3 = cdiv(tmp1, tmp2);
|
||||
tmp1 = c_add(c, &_conei_);
|
||||
tmp2 = c_sub(c, &_conei_);
|
||||
tmp3 = c_div(tmp1, tmp2);
|
||||
comfree(tmp1);
|
||||
comfree(tmp2);
|
||||
tmp1 = cln(tmp3, epsilon);
|
||||
tmp1 = c_ln(tmp3, epsilon);
|
||||
comfree(tmp3);
|
||||
tmp2 = cscale(tmp1, -1);
|
||||
tmp2 = c_scale(tmp1, -1);
|
||||
comfree(tmp1);
|
||||
tmp1 = cdiv(tmp2, &_conei_);
|
||||
tmp1 = c_div(tmp2, &_conei_);
|
||||
comfree(tmp2);
|
||||
return tmp1;
|
||||
}
|
||||
|
||||
COMPLEX *
|
||||
casec(COMPLEX *c, NUMBER *epsilon)
|
||||
c_asec(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2;
|
||||
|
||||
tmp1 = cinv(c);
|
||||
tmp2 = cacos(tmp1, epsilon);
|
||||
tmp1 = c_inv(c);
|
||||
tmp2 = c_acos(tmp1, epsilon);
|
||||
comfree(tmp1);
|
||||
return tmp2;
|
||||
}
|
||||
|
||||
COMPLEX *
|
||||
cacsc(COMPLEX *c, NUMBER *epsilon)
|
||||
c_acsc(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2;
|
||||
|
||||
tmp1 = cinv(c);
|
||||
tmp2 = casin(tmp1, epsilon);
|
||||
tmp1 = c_inv(c);
|
||||
tmp2 = c_asin(tmp1, epsilon);
|
||||
comfree(tmp1);
|
||||
return tmp2;
|
||||
}
|
||||
|
||||
|
||||
COMPLEX *
|
||||
catanh(COMPLEX *c, NUMBER *epsilon)
|
||||
c_atanh(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||
|
||||
if (qiszero(c->imag) && qisunit(c->real))
|
||||
return NULL;
|
||||
tmp1 = cadd(&_cone_, c);
|
||||
tmp2 = csub(&_cone_, c);
|
||||
tmp3 = cdiv(tmp1, tmp2);
|
||||
tmp1 = c_add(&_cone_, c);
|
||||
tmp2 = c_sub(&_cone_, c);
|
||||
tmp3 = c_div(tmp1, tmp2);
|
||||
comfree(tmp1);
|
||||
comfree(tmp2);
|
||||
tmp1 = cln(tmp3, epsilon);
|
||||
tmp1 = c_ln(tmp3, epsilon);
|
||||
comfree(tmp3);
|
||||
tmp2 = cscale(tmp1, -1);
|
||||
tmp2 = c_scale(tmp1, -1);
|
||||
comfree(tmp1);
|
||||
return tmp2;
|
||||
}
|
||||
|
||||
|
||||
COMPLEX *
|
||||
cacoth(COMPLEX *c, NUMBER *epsilon)
|
||||
c_acoth(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||
|
||||
if (qiszero(c->imag) && qisunit(c->real))
|
||||
return NULL;
|
||||
tmp1 = cadd(c, &_cone_);
|
||||
tmp2 = csub(c, &_cone_);
|
||||
tmp3 = cdiv(tmp1, tmp2);
|
||||
tmp1 = c_add(c, &_cone_);
|
||||
tmp2 = c_sub(c, &_cone_);
|
||||
tmp3 = c_div(tmp1, tmp2);
|
||||
comfree(tmp1);
|
||||
comfree(tmp2);
|
||||
tmp1 = cln(tmp3, epsilon);
|
||||
tmp1 = c_ln(tmp3, epsilon);
|
||||
comfree(tmp3);
|
||||
tmp2 = cscale(tmp1, -1);
|
||||
tmp2 = c_scale(tmp1, -1);
|
||||
comfree(tmp1);
|
||||
return tmp2;
|
||||
}
|
||||
|
||||
COMPLEX *
|
||||
casech(COMPLEX *c, NUMBER *epsilon)
|
||||
c_asech(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2;
|
||||
|
||||
tmp1 = cinv(c);
|
||||
tmp2 = cacosh(tmp1, epsilon);
|
||||
tmp1 = c_inv(c);
|
||||
tmp2 = c_acosh(tmp1, epsilon);
|
||||
comfree(tmp1);
|
||||
return tmp2;
|
||||
}
|
||||
|
||||
COMPLEX *
|
||||
cacsch(COMPLEX *c, NUMBER *epsilon)
|
||||
c_acsch(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2;
|
||||
|
||||
tmp1 = cinv(c);
|
||||
tmp2 = casinh(tmp1, epsilon);
|
||||
tmp1 = c_inv(c);
|
||||
tmp2 = c_asinh(tmp1, epsilon);
|
||||
comfree(tmp1);
|
||||
return tmp2;
|
||||
}
|
||||
|
||||
|
||||
COMPLEX *
|
||||
cgd(COMPLEX *c, NUMBER *epsilon)
|
||||
c_gd(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2, *tmp3;
|
||||
NUMBER *q1, *q2;
|
||||
@@ -947,30 +1011,30 @@ cgd(COMPLEX *c, NUMBER *epsilon)
|
||||
return tmp1;
|
||||
}
|
||||
neg = qisneg(c->real);
|
||||
tmp1 = neg ? cneg(c) : clink(c);
|
||||
tmp2 = cexp(tmp1, epsilon);
|
||||
tmp1 = neg ? c_neg(c) : clink(c);
|
||||
tmp2 = c_exp(tmp1, epsilon);
|
||||
comfree(tmp1);
|
||||
if (tmp2 == NULL)
|
||||
return NULL;
|
||||
tmp1 = cmul(&_conei_, tmp2);
|
||||
tmp3 = cadd(&_conei_, tmp2);
|
||||
tmp1 = c_mul(&_conei_, tmp2);
|
||||
tmp3 = c_add(&_conei_, tmp2);
|
||||
comfree(tmp2);
|
||||
tmp2 = cadd(tmp1, &_cone_);
|
||||
tmp2 = c_add(tmp1, &_cone_);
|
||||
comfree(tmp1);
|
||||
if (ciszero(tmp2) || ciszero(tmp3)) {
|
||||
comfree(tmp2);
|
||||
comfree(tmp3);
|
||||
return NULL;
|
||||
}
|
||||
tmp1 = cdiv(tmp2, tmp3);
|
||||
tmp1 = c_div(tmp2, tmp3);
|
||||
comfree(tmp2);
|
||||
comfree(tmp3);
|
||||
tmp2 = cln(tmp1, epsilon);
|
||||
tmp2 = c_ln(tmp1, epsilon);
|
||||
comfree(tmp1);
|
||||
tmp1 = cdiv(tmp2, &_conei_);
|
||||
tmp1 = c_div(tmp2, &_conei_);
|
||||
comfree(tmp2);
|
||||
if (neg) {
|
||||
tmp2 = cneg(tmp1);
|
||||
tmp2 = c_neg(tmp1);
|
||||
comfree(tmp1);
|
||||
return tmp2;
|
||||
}
|
||||
@@ -979,16 +1043,16 @@ cgd(COMPLEX *c, NUMBER *epsilon)
|
||||
|
||||
|
||||
COMPLEX *
|
||||
cagd(COMPLEX *c, NUMBER *epsilon)
|
||||
c_agd(COMPLEX *c, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *tmp1, *tmp2;
|
||||
|
||||
tmp1 = cmul(&_conei_, c);
|
||||
tmp2 = cgd(tmp1, epsilon);
|
||||
tmp1 = c_mul(&_conei_, c);
|
||||
tmp2 = c_gd(tmp1, epsilon);
|
||||
comfree(tmp1);
|
||||
if (tmp2 == NULL)
|
||||
return NULL;
|
||||
tmp1 = cdiv(tmp2, &_conei_);
|
||||
tmp1 = c_div(tmp2, &_conei_);
|
||||
comfree(tmp2);
|
||||
return tmp1;
|
||||
}
|
||||
@@ -1000,7 +1064,7 @@ cagd(COMPLEX *c, NUMBER *epsilon)
|
||||
* q1 * cos(q2) + q1 * sin(q2) * i.
|
||||
*/
|
||||
COMPLEX *
|
||||
cpolar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon)
|
||||
c_polar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *r;
|
||||
NUMBER *tmp, *cos, *sin;
|
||||
@@ -1042,7 +1106,7 @@ cpolar(NUMBER *q1, NUMBER *q2, NUMBER *epsilon)
|
||||
* specified error.
|
||||
*/
|
||||
COMPLEX *
|
||||
cpower(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon)
|
||||
c_power(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon)
|
||||
{
|
||||
COMPLEX *ctmp1, *ctmp2;
|
||||
long k1, k2, k, m1, m2, m, n;
|
||||
@@ -1099,11 +1163,11 @@ cpower(COMPLEX *c1, COMPLEX *c2, NUMBER *epsilon)
|
||||
if (k < n)
|
||||
return clink(&_czero_);
|
||||
epsilon1 = qbitvalue(n - k - m - 2);
|
||||
ctmp1 = cln(c1, epsilon1);
|
||||
ctmp1 = c_ln(c1, epsilon1);
|
||||
qfree(epsilon1);
|
||||
ctmp2 = cmul(ctmp1, c2);
|
||||
ctmp2 = c_mul(ctmp1, c2);
|
||||
comfree(ctmp1);
|
||||
ctmp1 = cexp(ctmp2, epsilon);
|
||||
ctmp1 = c_exp(ctmp2, epsilon);
|
||||
comfree(ctmp2);
|
||||
return ctmp1;
|
||||
}
|
||||
@@ -1165,7 +1229,7 @@ cprintfr(COMPLEX *c)
|
||||
|
||||
|
||||
NUMBER *
|
||||
cilog(COMPLEX *c, ZVALUE base)
|
||||
c_ilog(COMPLEX *c, ZVALUE base)
|
||||
{
|
||||
NUMBER *qr, *qi;
|
||||
|
||||
|
48
commath.c
48
commath.c
@@ -17,8 +17,8 @@
|
||||
* 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: commath.c,v 29.3 2002/03/12 09:38:26 chongo Exp $
|
||||
* @(#) $Revision: 29.4 $
|
||||
* @(#) $Id: commath.c,v 29.4 2005/10/18 10:43:49 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/commath.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:10
|
||||
@@ -42,7 +42,7 @@ static COMPLEX _cnegone_ = { &_qnegone_, &_qzero_, 1 };
|
||||
* Add two complex numbers.
|
||||
*/
|
||||
COMPLEX *
|
||||
cadd(COMPLEX *c1, COMPLEX *c2)
|
||||
c_add(COMPLEX *c1, COMPLEX *c2)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -67,7 +67,7 @@ cadd(COMPLEX *c1, COMPLEX *c2)
|
||||
* Subtract two complex numbers.
|
||||
*/
|
||||
COMPLEX *
|
||||
csub(COMPLEX *c1, COMPLEX *c2)
|
||||
c_sub(COMPLEX *c1, COMPLEX *c2)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -98,7 +98,7 @@ csub(COMPLEX *c1, COMPLEX *c2)
|
||||
* Then (a+bi) * (c+di) = (q2 - q3) + (q1 - q2 - q3)i.
|
||||
*/
|
||||
COMPLEX *
|
||||
cmul(COMPLEX *c1, COMPLEX *c2)
|
||||
c_mul(COMPLEX *c1, COMPLEX *c2)
|
||||
{
|
||||
COMPLEX *r;
|
||||
NUMBER *q1, *q2, *q3, *q4;
|
||||
@@ -110,9 +110,9 @@ cmul(COMPLEX *c1, COMPLEX *c2)
|
||||
if (cisone(c2))
|
||||
return clink(c1);
|
||||
if (cisreal(c2))
|
||||
return cmulq(c1, c2->real);
|
||||
return c_mulq(c1, c2->real);
|
||||
if (cisreal(c1))
|
||||
return cmulq(c2, c1->real);
|
||||
return c_mulq(c2, c1->real);
|
||||
/*
|
||||
* Need to do the full calculation.
|
||||
*/
|
||||
@@ -141,7 +141,7 @@ cmul(COMPLEX *c1, COMPLEX *c2)
|
||||
* Square a complex number.
|
||||
*/
|
||||
COMPLEX *
|
||||
csquare(COMPLEX *c)
|
||||
c_square(COMPLEX *c)
|
||||
{
|
||||
COMPLEX *r;
|
||||
NUMBER *q1, *q2;
|
||||
@@ -183,7 +183,7 @@ csquare(COMPLEX *c)
|
||||
* Divide two complex numbers.
|
||||
*/
|
||||
COMPLEX *
|
||||
cdiv(COMPLEX *c1, COMPLEX *c2)
|
||||
c_div(COMPLEX *c1, COMPLEX *c2)
|
||||
{
|
||||
COMPLEX *r;
|
||||
NUMBER *q1, *q2, *q3, *den;
|
||||
@@ -254,7 +254,7 @@ cdiv(COMPLEX *c1, COMPLEX *c2)
|
||||
* Invert a complex number.
|
||||
*/
|
||||
COMPLEX *
|
||||
cinv(COMPLEX *c)
|
||||
c_inv(COMPLEX *c)
|
||||
{
|
||||
COMPLEX *r;
|
||||
NUMBER *q1, *q2, *den;
|
||||
@@ -296,7 +296,7 @@ cinv(COMPLEX *c)
|
||||
* Negate a complex number.
|
||||
*/
|
||||
COMPLEX *
|
||||
cneg(COMPLEX *c)
|
||||
c_neg(COMPLEX *c)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -320,7 +320,7 @@ cneg(COMPLEX *c)
|
||||
* This means take the integer part of both components.
|
||||
*/
|
||||
COMPLEX *
|
||||
cint(COMPLEX *c)
|
||||
c_int(COMPLEX *c)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -340,7 +340,7 @@ cint(COMPLEX *c)
|
||||
* This means take the fractional part of both components.
|
||||
*/
|
||||
COMPLEX *
|
||||
cfrac(COMPLEX *c)
|
||||
c_frac(COMPLEX *c)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -360,7 +360,7 @@ cfrac(COMPLEX *c)
|
||||
* This negates the complex part.
|
||||
*/
|
||||
COMPLEX *
|
||||
cconj(COMPLEX *c)
|
||||
c_conj(COMPLEX *c)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -417,7 +417,7 @@ c_imag(COMPLEX *c)
|
||||
* Add a real number to a complex number.
|
||||
*/
|
||||
COMPLEX *
|
||||
caddq(COMPLEX *c, NUMBER *q)
|
||||
c_addq(COMPLEX *c, NUMBER *q)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -436,7 +436,7 @@ caddq(COMPLEX *c, NUMBER *q)
|
||||
* Subtract a real number from a complex number.
|
||||
*/
|
||||
COMPLEX *
|
||||
csubq(COMPLEX *c, NUMBER *q)
|
||||
c_subq(COMPLEX *c, NUMBER *q)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -456,7 +456,7 @@ csubq(COMPLEX *c, NUMBER *q)
|
||||
* number of bits. Negative values shift to the right.
|
||||
*/
|
||||
COMPLEX *
|
||||
cshift(COMPLEX *c, long n)
|
||||
c_shift(COMPLEX *c, long n)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -475,7 +475,7 @@ cshift(COMPLEX *c, long n)
|
||||
* Scale a complex number by a power of two.
|
||||
*/
|
||||
COMPLEX *
|
||||
cscale(COMPLEX *c, long n)
|
||||
c_scale(COMPLEX *c, long n)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -494,7 +494,7 @@ cscale(COMPLEX *c, long n)
|
||||
* Multiply a complex number by a real number.
|
||||
*/
|
||||
COMPLEX *
|
||||
cmulq(COMPLEX *c, NUMBER *q)
|
||||
c_mulq(COMPLEX *c, NUMBER *q)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -503,7 +503,7 @@ cmulq(COMPLEX *c, NUMBER *q)
|
||||
if (qisone(q))
|
||||
return clink(c);
|
||||
if (qisnegone(q))
|
||||
return cneg(c);
|
||||
return c_neg(c);
|
||||
r = comalloc();
|
||||
qfree(r->real);
|
||||
qfree(r->imag);
|
||||
@@ -517,7 +517,7 @@ cmulq(COMPLEX *c, NUMBER *q)
|
||||
* Divide a complex number by a real number.
|
||||
*/
|
||||
COMPLEX *
|
||||
cdivq(COMPLEX *c, NUMBER *q)
|
||||
c_divq(COMPLEX *c, NUMBER *q)
|
||||
{
|
||||
COMPLEX *r;
|
||||
|
||||
@@ -528,7 +528,7 @@ cdivq(COMPLEX *c, NUMBER *q)
|
||||
if (qisone(q))
|
||||
return clink(c);
|
||||
if (qisnegone(q))
|
||||
return cneg(c);
|
||||
return c_neg(c);
|
||||
r = comalloc();
|
||||
qfree(r->real);
|
||||
qfree(r->imag);
|
||||
@@ -564,7 +564,7 @@ qqtoc(NUMBER *q1, NUMBER *q2)
|
||||
* and TRUE if they differ.
|
||||
*/
|
||||
BOOL
|
||||
ccmp(COMPLEX *c1, COMPLEX *c2)
|
||||
c_cmp(COMPLEX *c1, COMPLEX *c2)
|
||||
{
|
||||
BOOL i;
|
||||
|
||||
@@ -581,7 +581,7 @@ ccmp(COMPLEX *c1, COMPLEX *c2)
|
||||
* imaginary parts of the two numbers.
|
||||
*/
|
||||
COMPLEX *
|
||||
crel(COMPLEX *c1, COMPLEX *c2)
|
||||
c_rel(COMPLEX *c1, COMPLEX *c2)
|
||||
{
|
||||
COMPLEX *c;
|
||||
|
||||
|
12
config.c
12
config.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* config - configuration routines
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* 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.14 $
|
||||
* @(#) $Id: config.c,v 29.14 2004/02/25 23:56:13 chongo Exp $
|
||||
* @(#) $Revision: 29.17 $
|
||||
* @(#) $Id: config.c,v 29.17 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
|
||||
*
|
||||
* Under source code control: 1991/07/20 00:21:56
|
||||
@@ -432,7 +432,7 @@ setconfig(int type, VALUE *vp)
|
||||
NUMBER *q;
|
||||
CONFIG *newconf; /* new configuration to set */
|
||||
long temp;
|
||||
LEN len;
|
||||
LEN len = 0;
|
||||
char *p;
|
||||
|
||||
switch (type) {
|
||||
@@ -722,7 +722,7 @@ setconfig(int type, VALUE *vp)
|
||||
math_error("Cannot duplicate new prompt");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
strcpy(p, vp->v_str->s_str);
|
||||
strncpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||
free(conf->prompt1);
|
||||
conf->prompt1 = p;
|
||||
break;
|
||||
@@ -737,7 +737,7 @@ setconfig(int type, VALUE *vp)
|
||||
math_error("Cannot duplicate new more prompt");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
strcpy(p, vp->v_str->s_str);
|
||||
strncpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
|
||||
free(conf->prompt2);
|
||||
conf->prompt2 = p;
|
||||
break;
|
||||
|
10
custom.c
10
custom.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* custom - interface for custom software and hardware interfaces
|
||||
*
|
||||
* Copyright (C) 1999 Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 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
|
||||
@@ -17,9 +17,9 @@
|
||||
* 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: custom.c,v 29.4 2004/02/25 23:54:40 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/../RCS/custom.c,v $
|
||||
* @(#) $Revision: 29.6 $
|
||||
* @(#) $Id: custom.c,v 29.6 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/custom.c,v $
|
||||
*
|
||||
* Under source code control: 1997/03/03 04:53:08
|
||||
* File existed as early as: 1997
|
||||
@@ -189,7 +189,7 @@ customhelp(char *name)
|
||||
/*
|
||||
* form the custom help name
|
||||
*/
|
||||
customname = (char *)malloc(sizeof("custhelp")+strlen(name)+1);
|
||||
customname = (char *)malloc(sizeof("custhelp")+1+strlen(name)+1);
|
||||
if (customname == NULL) {
|
||||
math_error("bad malloc of customname");
|
||||
/*NOTREACHED*/
|
||||
|
@@ -41,7 +41,6 @@ Step 1: Do some background work
|
||||
|
||||
custom.c
|
||||
custom.h
|
||||
custom/custom.h
|
||||
custom/custtbl.c
|
||||
custom/c_*.[ch]
|
||||
custom/*.cal
|
||||
@@ -648,8 +647,8 @@ Step 12: Contribute
|
||||
## 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: HOW_TO_ADD,v 29.4 2004/07/29 08:38:05 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: HOW_TO_ADD,v 29.5 2005/10/18 11:18:34 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/HOW_TO_ADD,v $
|
||||
##
|
||||
## Under source code control: 1997/03/10 03:03:21
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* c_argv - a custom function display info about its args
|
||||
*
|
||||
* Copyright (C) 1999-2004 Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 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
|
||||
@@ -17,8 +17,8 @@
|
||||
* 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: c_argv.c,v 29.4 2004/02/23 14:04:01 chongo Exp $
|
||||
* @(#) $Revision: 29.6 $
|
||||
* @(#) $Id: c_argv.c,v 29.6 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_argv.c,v $
|
||||
*
|
||||
* Under source code control: 1997/03/09 20:27:37
|
||||
@@ -152,9 +152,9 @@ c_argv(char UNUSED *name, int count, VALUE **vals)
|
||||
/* getsize error */
|
||||
printf("\tsize=unknown");
|
||||
}
|
||||
printf("\tsizeof=%ld\n", lsizeof(vals[i]));
|
||||
printf("\tsizeof=%u\n", lsizeof(vals[i]));
|
||||
} else {
|
||||
printf("\tsize=%ld\tsizeof=%ld\n",
|
||||
printf("\tsize=%ld\tsizeof=%u\n",
|
||||
elm_count(vals[i]), lsizeof(vals[i]));
|
||||
}
|
||||
}
|
||||
|
@@ -17,8 +17,8 @@
|
||||
* 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: custtbl.c,v 29.3 2004/07/29 08:37:53 chongo Exp $
|
||||
* @(#) $Revision: 29.4 $
|
||||
* @(#) $Id: custtbl.c,v 29.4 2005/02/05 06:16:19 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/custtbl.c,v $
|
||||
*
|
||||
* Under source code control: 1997/03/09 02:28:54
|
||||
@@ -106,7 +106,7 @@ CONST struct custom cust[] = {
|
||||
{ "sysinfo", "return a calc #define value",
|
||||
0, 1, c_sysinfo },
|
||||
|
||||
{ "pzasusb8", "print ZCALUE as USB8",
|
||||
{ "pzasusb8", "print ZVALUE as USB8",
|
||||
0, 1, c_pzasusb8 },
|
||||
|
||||
{ "pmodm127", "calculate q mod 2^(2^127-1)",
|
||||
|
@@ -19,7 +19,7 @@ DESCRIPTION
|
||||
custom("sysinfo", "BASEB")
|
||||
custom("sysinfo", "CALC_BYTE_ORDER")
|
||||
|
||||
foe details.
|
||||
for details.
|
||||
|
||||
This custom function is intented for testing of the general
|
||||
custom interface.
|
||||
@@ -65,8 +65,8 @@ SEE ALSO
|
||||
## 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: pzasusb8,v 29.2 2000/06/07 14:03:03 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: pzasusb8,v 29.3 2005/10/18 11:18:34 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/pzasusb8,v $
|
||||
##
|
||||
## Under source code control: 1999/10/06 04:05:43
|
||||
|
689
file.c
689
file.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* file - file I/O routines callable by users
|
||||
*
|
||||
* Copyright (C) 1999-2004 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* 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.9 $
|
||||
* @(#) $Id: file.c,v 29.9 2004/02/23 14:04:01 chongo Exp $
|
||||
* @(#) $Revision: 29.14 $
|
||||
* @(#) $Id: file.c,v 29.14 2006/05/20 08:43:55 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.c,v $
|
||||
*
|
||||
* Under source code control: 1991/07/20 00:21:56
|
||||
@@ -68,11 +68,11 @@ extern FILE *f_open(char *name, char *mode);
|
||||
*/
|
||||
static FILEIO files[MAXFILES] = {
|
||||
{FILEID_STDIN, NULL, (dev_t)0, (ino_t)0,
|
||||
"(stdin)", TRUE, FALSE, 'r', "r"},
|
||||
"(stdin)", TRUE, FALSE, FALSE, FALSE, 'r', "r"},
|
||||
{FILEID_STDOUT, NULL, (dev_t)0, (ino_t)0,
|
||||
"(stdout)", FALSE, TRUE, 'w', "w"},
|
||||
"(stdout)", FALSE, TRUE, FALSE, FALSE, 'w', "w"},
|
||||
{FILEID_STDERR, NULL, (dev_t)0, (ino_t)0,
|
||||
"(stderr)", FALSE, TRUE, 'w', "w"}
|
||||
"(stderr)", FALSE, TRUE, FALSE, FALSE, 'w', "w"}
|
||||
};
|
||||
|
||||
|
||||
@@ -188,14 +188,141 @@ file_init(void)
|
||||
|
||||
|
||||
/*
|
||||
* Open the specified file name for reading or writing; mode is assumed
|
||||
* to be one of "r", "w", "a", "r+", "w+", "a+".
|
||||
* Returns a file id which can be used to do I/O to the file, or else
|
||||
* FILEID_NONE if the open failed.
|
||||
* init_fileio - initialize a FILEIO structure
|
||||
*
|
||||
* This function initializes a calc FILEIO structure. It will optionally
|
||||
* malloc the filename string if given an non-NULL associated filename.
|
||||
* It will canonicalize the file open mode string.
|
||||
*
|
||||
* given:
|
||||
* fiop pointer to FILEIO structure to initialize
|
||||
* name associated filename (NULL => caller will setup filename)
|
||||
* mode open mode (one of {r,w,a}{,b}{,+})
|
||||
* sbufp pointer to stat of open file
|
||||
* id calc file ID
|
||||
* fp open file stream
|
||||
*/
|
||||
static void
|
||||
init_fileio(FILEIO *fiop, char *name, char *mode,
|
||||
struct stat *sbufp, FILEID id, FILE *fp)
|
||||
{
|
||||
char modestr[sizeof(fiop->mode)]; /* mode [rwa]b?\+? */
|
||||
size_t namelen; /* length of name */
|
||||
|
||||
/* allocate filename if requested */
|
||||
if (name != NULL) {
|
||||
namelen = strlen(name);
|
||||
fiop->name = (char *)malloc(namelen + 1);
|
||||
if (fiop->name == NULL) {
|
||||
math_error("No memory for filename");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
}
|
||||
|
||||
/* initialize FILEIO structure */
|
||||
if (name != NULL) {
|
||||
strncpy(fiop->name, name, namelen+1);
|
||||
}
|
||||
fiop->id = id;
|
||||
fiop->fp = fp;
|
||||
fiop->dev = sbufp->st_dev;
|
||||
fiop->inode = sbufp->st_ino;
|
||||
fiop->reading = FALSE;
|
||||
fiop->writing = FALSE;
|
||||
fiop->appending = FALSE;
|
||||
fiop->binary = FALSE;
|
||||
fiop->action = 0;
|
||||
fiop->mode[0] = '\0';
|
||||
|
||||
/*
|
||||
* determine file open mode
|
||||
*
|
||||
* While a leading 'r' is for reading and a leading 'w' is
|
||||
* for writing, the presense of a '+' in the string means
|
||||
* both reading and writing. A leading 'a' means append
|
||||
* which is writing.
|
||||
*/
|
||||
/* canonicalize read modes */
|
||||
if (mode[0] == 'r') {
|
||||
|
||||
/* note read mode */
|
||||
strcpy(modestr, "r");
|
||||
fiop->reading = TRUE;
|
||||
|
||||
/* note binary mode even though mode is not used / ignored */
|
||||
if (strchr(mode, 'b') != NULL) {
|
||||
strcat(modestr, "b");
|
||||
}
|
||||
|
||||
/* note if reading and writing */
|
||||
if (strchr(mode, '+') != NULL) {
|
||||
fiop->writing = TRUE;
|
||||
strcat(modestr, "+");
|
||||
}
|
||||
|
||||
/* canonicalize write modes */
|
||||
} else if (mode[0] == 'w') {
|
||||
|
||||
/* note write mode */
|
||||
strcpy(modestr, "w");
|
||||
fiop->writing = TRUE;
|
||||
|
||||
/* note binary mode even though mode is not used / ignored */
|
||||
if (strchr(mode, 'b') != NULL) {
|
||||
strcat(modestr, "b");
|
||||
}
|
||||
|
||||
/* note if reading and writing */
|
||||
if (strchr(mode, '+') != NULL) {
|
||||
fiop->reading = TRUE;
|
||||
strcat(modestr, "+");
|
||||
}
|
||||
|
||||
/* canonicalize append modes */
|
||||
} else if (mode[0] == 'a') {
|
||||
|
||||
/* note append mode */
|
||||
strcpy(modestr, "a");
|
||||
fiop->writing = TRUE;
|
||||
fiop->appending = TRUE;
|
||||
|
||||
/* note binary mode even though mode is not used / ignored */
|
||||
if (strchr(mode, 'b') != NULL) {
|
||||
strcat(modestr, "b");
|
||||
}
|
||||
|
||||
/* note if reading and writing */
|
||||
if (strchr(mode, '+') != NULL) {
|
||||
fiop->reading = TRUE;
|
||||
strcat(modestr, "+");
|
||||
}
|
||||
|
||||
/* canonicalize no I/O modes */
|
||||
} else {
|
||||
modestr[0] = '\0';
|
||||
}
|
||||
modestr[sizeof(modestr)-1] = '\0'; /* firewall */
|
||||
|
||||
/* record canonical open mode string */
|
||||
strncpy(fiop->mode, modestr, sizeof(fiop->mode));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* openid - open the specified file name for reading or writing
|
||||
*
|
||||
* given:
|
||||
* name file name
|
||||
* mode open mode
|
||||
* mode open mode (one of {r,w,a}{,b}{,+})
|
||||
*
|
||||
* returns:
|
||||
* >=3 FILEID which can be used to do I/O to the file
|
||||
* <0 if the open failed
|
||||
*
|
||||
* NOTE: This function will not return 0, 1 or 2 since they are
|
||||
* reserved for stdin, stdout, stderr. In fact, it must not
|
||||
* return 0, 1, or 2 because it will confuse those who call
|
||||
* the opensearchfiile() function
|
||||
*/
|
||||
FILEID
|
||||
openid(char *name, char *mode)
|
||||
@@ -206,9 +333,9 @@ openid(char *name, char *mode)
|
||||
struct stat sbuf; /* file status */
|
||||
int i;
|
||||
|
||||
/* find the next open slot in the files array */
|
||||
if (idnum >= MAXFILES)
|
||||
return -E_FOPEN3;
|
||||
|
||||
return -E_MANYOPEN;
|
||||
fiop = &files[3];
|
||||
for (i = 3; i < MAXFILES; fiop++,i++) {
|
||||
if (fiop->name == NULL)
|
||||
@@ -217,8 +344,8 @@ openid(char *name, char *mode)
|
||||
if (i == MAXFILES)
|
||||
math_error("This should not happen in openid()!!!");
|
||||
|
||||
/* open the file */
|
||||
fp = f_open(name, mode);
|
||||
|
||||
if (fp == NULL) {
|
||||
return FILEID_NONE;
|
||||
}
|
||||
@@ -227,50 +354,88 @@ openid(char *name, char *mode)
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
fiop->name = (char *)malloc(strlen(name) + 1);
|
||||
if (fiop->name == NULL) {
|
||||
math_error("No memory for filename");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
/* get a new FILEID */
|
||||
id = ++lastid;
|
||||
ioindex[idnum++] = i;
|
||||
|
||||
strcpy(fiop->name, name);
|
||||
fiop->id = id;
|
||||
fiop->fp = fp;
|
||||
fiop->dev = sbuf.st_dev;
|
||||
fiop->inode = sbuf.st_ino;
|
||||
fiop->reading = TRUE;
|
||||
fiop->writing = TRUE;
|
||||
fiop->action = 0;
|
||||
/* initialize FILEIO structure */
|
||||
init_fileio(fiop, name, mode, &sbuf, id, fp);
|
||||
|
||||
/*
|
||||
* determine file open mode
|
||||
*
|
||||
* While a leading 'r' is for reading and a leading 'w' is
|
||||
* for writing, the presense of a '+' in the string means
|
||||
* both reading and writing. A leading 'a' means append
|
||||
* which is writing.
|
||||
*/
|
||||
if (mode[0] == 'r') {
|
||||
fiop->reading = TRUE;
|
||||
if (strchr(mode, '+') == NULL) {
|
||||
fiop->writing = FALSE;
|
||||
} else {
|
||||
fiop->writing = TRUE;
|
||||
}
|
||||
} else if (mode[0] == 'w' || mode[0] == 'a') {
|
||||
fiop->writing = TRUE;
|
||||
if (strchr(mode, '+') == NULL) {
|
||||
fiop->reading = FALSE;
|
||||
} else {
|
||||
fiop->reading = TRUE;
|
||||
}
|
||||
} else {
|
||||
fiop->reading = FALSE;
|
||||
fiop->writing = FALSE;
|
||||
/* return calc open file ID */
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* openpathid - open the specified abse filename, or relative filename along a search path
|
||||
*
|
||||
* given:
|
||||
* name file name
|
||||
* mode open mode (one of {r,w,a}{,b}{,+})
|
||||
* pathlist list of colon separated paths (or NULL)
|
||||
*
|
||||
* returns:
|
||||
* >=3 FILEID which can be used to do I/O to the file
|
||||
* <0 if the open failed
|
||||
*
|
||||
* NOTE: This function will not return 0, 1 or 2 since they are
|
||||
* reserved for stdin, stdout, stderr. In fact, it must not
|
||||
* return 0, 1, or 2 because it will confuse those who call
|
||||
* the opensearchfiile() function
|
||||
*/
|
||||
FILEID
|
||||
openpathid(char *name, char *mode, char *pathlist)
|
||||
{
|
||||
FILEIO *fiop; /* file structure */
|
||||
FILEID id; /* new file id */
|
||||
FILE *fp;
|
||||
struct stat sbuf; /* file status */
|
||||
char *openpath; /* malloc copy of path that was opened */
|
||||
int i;
|
||||
|
||||
/* find the next open slot in the files array */
|
||||
if (idnum >= MAXFILES)
|
||||
return -E_MANYOPEN;
|
||||
fiop = &files[3];
|
||||
for (i = 3; i < MAXFILES; fiop++,i++) {
|
||||
if (fiop->name == NULL)
|
||||
break;
|
||||
}
|
||||
strcpy(fiop->mode, mode);
|
||||
if (i == MAXFILES)
|
||||
math_error("This should not happen in openpathid()!!!");
|
||||
|
||||
/* open a file - searching along a path */
|
||||
openpath = NULL;
|
||||
fp = f_pathopen(name, mode, pathlist, &openpath);
|
||||
if (fp == NULL) {
|
||||
if (openpath != NULL) {
|
||||
/* should not happen, but just in case */
|
||||
free(openpath);
|
||||
}
|
||||
return FILEID_NONE;
|
||||
}
|
||||
if (fstat(fileno(fp), &sbuf) < 0) {
|
||||
if (openpath != NULL) {
|
||||
free(openpath);
|
||||
}
|
||||
math_error("bad fstat");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
if (openpath == NULL) {
|
||||
fclose(fp);
|
||||
math_error("bad openpath");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
/* get a new FILEID */
|
||||
id = ++lastid;
|
||||
ioindex[idnum++] = i;
|
||||
|
||||
/* initialize FILEIO structure */
|
||||
init_fileio(fiop, NULL, mode, &sbuf, id, fp);
|
||||
fiop->name = openpath; /* already malloced by f_pathopen */
|
||||
|
||||
/* return calc open file ID */
|
||||
return id;
|
||||
}
|
||||
|
||||
@@ -279,16 +444,20 @@ openid(char *name, char *mode)
|
||||
* reopenid - reopen a FILEID
|
||||
*
|
||||
* given:
|
||||
* id FILEID to reopen
|
||||
* mode new mode to open as
|
||||
* name name of new file
|
||||
* id FILEID to reopen
|
||||
* mode new mode to open as
|
||||
* mode new mode to open as (one of "r", "w", "a", "r+", "w+", "a+")
|
||||
* name name of new file
|
||||
*
|
||||
* returns:
|
||||
* FILEID which can be used to do I/O to the file
|
||||
* <0 if the open failed
|
||||
*/
|
||||
FILEID
|
||||
reopenid(FILEID id, char *mode, char *name)
|
||||
{
|
||||
FILEIO *fiop; /* file structure */
|
||||
FILE *fp;
|
||||
char *newname;
|
||||
struct stat sbuf;
|
||||
int i;
|
||||
|
||||
@@ -299,8 +468,8 @@ reopenid(FILEID id, char *mode, char *name)
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
/* reopen the file */
|
||||
fiop = NULL;
|
||||
|
||||
for (i = 3; i < idnum; i++) {
|
||||
fiop = &files[ioindex[i]];
|
||||
if (fiop->id == id)
|
||||
@@ -344,57 +513,23 @@ reopenid(FILEID id, char *mode, char *name)
|
||||
return FILEID_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
if (fstat(fileno(fp), &sbuf) < 0) {
|
||||
math_error("bad fstat");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
if (name) {
|
||||
newname = (char *)malloc(strlen(name) + 1);
|
||||
if (newname == NULL) {
|
||||
math_error("No memory for filename");
|
||||
/*NOTREACHED*/
|
||||
/* initialize FILEIO structure */
|
||||
if (name == NULL) {
|
||||
if (fiop->name == NULL) {
|
||||
math_error("old and new reopen filenames are NULL");
|
||||
}
|
||||
if (fiop->name)
|
||||
free(fiop->name);
|
||||
strcpy(newname, name);
|
||||
fiop->name = newname;
|
||||
} else if (fiop->name != NULL) {
|
||||
free(fiop->name);
|
||||
fiop->name = NULL;
|
||||
}
|
||||
fiop->fp = fp;
|
||||
fiop->dev = sbuf.st_dev;
|
||||
fiop->inode = sbuf.st_ino;
|
||||
fiop->reading = TRUE;
|
||||
fiop->writing = TRUE;
|
||||
fiop->action = 0;
|
||||
init_fileio(fiop, name, mode, &sbuf, id, fp);
|
||||
|
||||
/*
|
||||
* determine file open mode
|
||||
*
|
||||
* While a leading 'r' is for reading and a leading 'w' is
|
||||
* for writing, the presense of a '+' in the string means
|
||||
* both reading and writing. A leading 'a' means append
|
||||
* which is writing.
|
||||
*/
|
||||
if (mode[0] == 'r') {
|
||||
fiop->reading = TRUE;
|
||||
if (strchr(mode, '+') == NULL) {
|
||||
fiop->writing = FALSE;
|
||||
} else {
|
||||
fiop->writing = TRUE;
|
||||
}
|
||||
} else if (mode[0] == 'w' || mode[0] == 'a') {
|
||||
fiop->writing = TRUE;
|
||||
if (strchr(mode, '+') == NULL) {
|
||||
fiop->reading = FALSE;
|
||||
} else {
|
||||
fiop->reading = TRUE;
|
||||
}
|
||||
} else {
|
||||
fiop->reading = FALSE;
|
||||
fiop->writing = FALSE;
|
||||
}
|
||||
strcpy(fiop->mode, mode);
|
||||
/* return calc open file ID */
|
||||
return id;
|
||||
}
|
||||
|
||||
@@ -810,7 +945,7 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
|
||||
VALUE *vp;
|
||||
char *str;
|
||||
int ch;
|
||||
long len;
|
||||
size_t len;
|
||||
int oldmode, newmode;
|
||||
long olddigits, newdigits;
|
||||
long width, precision;
|
||||
@@ -877,36 +1012,36 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
|
||||
newdigits = precision;
|
||||
|
||||
switch (ch) {
|
||||
case 's':
|
||||
printstring = TRUE;
|
||||
case 'c':
|
||||
printchar = TRUE;
|
||||
case 'd':
|
||||
break;
|
||||
case 'f':
|
||||
newmode = MODE_REAL;
|
||||
break;
|
||||
case 'e':
|
||||
newmode = MODE_EXP;
|
||||
break;
|
||||
case 'r':
|
||||
newmode = MODE_FRAC;
|
||||
break;
|
||||
case 'o':
|
||||
newmode = MODE_OCTAL;
|
||||
break;
|
||||
case 'x':
|
||||
newmode = MODE_HEX;
|
||||
break;
|
||||
case 'b':
|
||||
newmode = MODE_BINARY;
|
||||
break;
|
||||
case 0:
|
||||
math_setfp(stdout);
|
||||
return 0;
|
||||
default:
|
||||
math_chr(ch);
|
||||
continue;
|
||||
case 's':
|
||||
printstring = TRUE;
|
||||
case 'c':
|
||||
printchar = TRUE;
|
||||
case 'd':
|
||||
break;
|
||||
case 'f':
|
||||
newmode = MODE_REAL;
|
||||
break;
|
||||
case 'e':
|
||||
newmode = MODE_EXP;
|
||||
break;
|
||||
case 'r':
|
||||
newmode = MODE_FRAC;
|
||||
break;
|
||||
case 'o':
|
||||
newmode = MODE_OCTAL;
|
||||
break;
|
||||
case 'x':
|
||||
newmode = MODE_HEX;
|
||||
break;
|
||||
case 'b':
|
||||
newmode = MODE_BINARY;
|
||||
break;
|
||||
case 0:
|
||||
math_setfp(stdout);
|
||||
return 0;
|
||||
default:
|
||||
math_chr(ch);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (--count < 0) {
|
||||
@@ -927,41 +1062,41 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
|
||||
if ((width == 0) ||
|
||||
(vp->v_type == V_MAT) || (vp->v_type == V_LIST)) {
|
||||
switch(vp->v_type) {
|
||||
case V_OCTET:
|
||||
if (printstring)
|
||||
math_str((char *)vp->v_octet);
|
||||
else if (printchar)
|
||||
math_chr(*vp->v_octet);
|
||||
else
|
||||
printvalue(vp, PRINT_NORMAL);
|
||||
break;
|
||||
case V_BLOCK:
|
||||
if (printstring)
|
||||
math_str((char *)
|
||||
vp->v_block->data);
|
||||
else if (printchar)
|
||||
math_chr(*vp->v_block->data);
|
||||
else
|
||||
printvalue(vp, PRINT_NORMAL);
|
||||
break;
|
||||
case V_NBLOCK:
|
||||
if (printstring) {
|
||||
if (vp->v_nblock->blk->data !=
|
||||
NULL)
|
||||
math_str((char *)
|
||||
vp->v_nblock
|
||||
->blk->data);
|
||||
} else if (printchar) {
|
||||
if (vp->v_nblock->blk->data !=
|
||||
NULL)
|
||||
math_chr(*vp->v_nblock->
|
||||
blk->data);
|
||||
} else {
|
||||
printvalue(vp, PRINT_NORMAL);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
case V_OCTET:
|
||||
if (printstring)
|
||||
math_str((char *)vp->v_octet);
|
||||
else if (printchar)
|
||||
math_chr(*vp->v_octet);
|
||||
else
|
||||
printvalue(vp, PRINT_NORMAL);
|
||||
break;
|
||||
case V_BLOCK:
|
||||
if (printstring)
|
||||
math_str((char *)
|
||||
vp->v_block->data);
|
||||
else if (printchar)
|
||||
math_chr(*vp->v_block->data);
|
||||
else
|
||||
printvalue(vp, PRINT_NORMAL);
|
||||
break;
|
||||
case V_NBLOCK:
|
||||
if (printstring) {
|
||||
if (vp->v_nblock->blk->data !=
|
||||
NULL)
|
||||
math_str((char *)
|
||||
vp->v_nblock
|
||||
->blk->data);
|
||||
} else if (printchar) {
|
||||
if (vp->v_nblock->blk->data !=
|
||||
NULL)
|
||||
math_chr(*vp->v_nblock->
|
||||
blk->data);
|
||||
} else {
|
||||
printvalue(vp, PRINT_NORMAL);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printvalue(vp, PRINT_NORMAL);
|
||||
}
|
||||
|
||||
math_setmode(oldmode);
|
||||
@@ -1014,13 +1149,13 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
|
||||
if (strchr(str, '\n'))
|
||||
width = 0;
|
||||
len = strlen(str);
|
||||
while (!didneg && (width > len)) {
|
||||
while (!didneg && ((size_t)width > len)) {
|
||||
width--;
|
||||
math_chr(' ');
|
||||
}
|
||||
math_str(str);
|
||||
free(str);
|
||||
while (didneg && (width > len)) {
|
||||
while (didneg && ((size_t)width > len)) {
|
||||
width--;
|
||||
math_chr(' ');
|
||||
}
|
||||
@@ -1414,52 +1549,52 @@ fseekid(FILEID id, ZVALUE offset, int whence)
|
||||
|
||||
/* seek depending on whence */
|
||||
switch (whence) {
|
||||
case 0:
|
||||
/* construct seek position, off = offset */
|
||||
if (zisneg(offset))
|
||||
return -3;
|
||||
off = z2filepos(offset);
|
||||
case 0:
|
||||
/* construct seek position, off = offset */
|
||||
if (zisneg(offset))
|
||||
return -3;
|
||||
off = z2filepos(offset);
|
||||
|
||||
/* seek there */
|
||||
ret = f_seek_set(fiop->fp, &off);
|
||||
break;
|
||||
/* seek there */
|
||||
ret = f_seek_set(fiop->fp, &off);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
/* construct seek position, off = cur+offset */
|
||||
f_tell(fiop->fp, &off);
|
||||
cur = filepos2z(off);
|
||||
zadd(cur, offset, &tmp);
|
||||
zfree(cur);
|
||||
if (zisneg(tmp)) {
|
||||
zfree(tmp);
|
||||
return -3;
|
||||
}
|
||||
off = z2filepos(tmp);
|
||||
case 1:
|
||||
/* construct seek position, off = cur+offset */
|
||||
f_tell(fiop->fp, &off);
|
||||
cur = filepos2z(off);
|
||||
zadd(cur, offset, &tmp);
|
||||
zfree(cur);
|
||||
if (zisneg(tmp)) {
|
||||
zfree(tmp);
|
||||
return -3;
|
||||
}
|
||||
off = z2filepos(tmp);
|
||||
zfree(tmp);
|
||||
|
||||
/* seek there */
|
||||
ret = f_seek_set(fiop->fp, &off);
|
||||
break;
|
||||
/* seek there */
|
||||
ret = f_seek_set(fiop->fp, &off);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
/* construct seek position, off = len+offset */
|
||||
if (get_open_siz(fiop->fp, &cur) < 0)
|
||||
return -4;
|
||||
zadd(cur, offset, &tmp);
|
||||
zfree(cur);
|
||||
if (zisneg(tmp)) {
|
||||
zfree(tmp);
|
||||
return -3;
|
||||
}
|
||||
off = z2filepos(tmp);
|
||||
case 2:
|
||||
/* construct seek position, off = len+offset */
|
||||
if (get_open_siz(fiop->fp, &cur) < 0)
|
||||
return -4;
|
||||
zadd(cur, offset, &tmp);
|
||||
zfree(cur);
|
||||
if (zisneg(tmp)) {
|
||||
zfree(tmp);
|
||||
return -3;
|
||||
}
|
||||
off = z2filepos(tmp);
|
||||
zfree(tmp);
|
||||
|
||||
/* seek there */
|
||||
ret = f_seek_set(fiop->fp, &off);
|
||||
break;
|
||||
/* seek there */
|
||||
ret = f_seek_set(fiop->fp, &off);
|
||||
break;
|
||||
|
||||
default:
|
||||
return -5;
|
||||
default:
|
||||
return -5;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -1828,7 +1963,7 @@ showfiles(void)
|
||||
FILE *fp;
|
||||
struct stat sbuf;
|
||||
ino_t inodes[MAXFILES];
|
||||
long sizes[MAXFILES];
|
||||
off_t sizes[MAXFILES];
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < idnum; i++) {
|
||||
@@ -1840,7 +1975,7 @@ showfiles(void)
|
||||
sizes[i] = -1;
|
||||
} else {
|
||||
inodes[i] = sbuf.st_ino;
|
||||
sizes[i] = (long) sbuf.st_size;
|
||||
sizes[i] = sbuf.st_size;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < idnum; i++) {
|
||||
@@ -2040,7 +2175,7 @@ fscanfile(FILE *fp, char *fmt, int count, VALUE **vals)
|
||||
BOOL skip; /* True if string to be skipped rather than read */
|
||||
int width;
|
||||
VALUE *var; /* lvalue to be assigned to */
|
||||
short subtype; /* for var->v_subtype */
|
||||
unsigned short subtype; /* for var->v_subtype */
|
||||
FILEPOS cur; /* current location */
|
||||
|
||||
if (feof(fp))
|
||||
@@ -2083,75 +2218,75 @@ fscanfile(FILE *fp, char *fmt, int count, VALUE **vals)
|
||||
f = *fmt++;
|
||||
}
|
||||
switch (f) {
|
||||
case 'c':
|
||||
if (width == 0)
|
||||
width = 1;
|
||||
getscanfield(fp,skip,width,0,NULL,&str);
|
||||
break;
|
||||
case 's':
|
||||
getscanwhite(fp,1,0,6,NULL);
|
||||
if (feof(fp))
|
||||
return assnum;
|
||||
getscanwhite(fp,skip,width,-6,&str);
|
||||
break;
|
||||
case '[':
|
||||
f = *fmt;
|
||||
comp = (f == '^');
|
||||
if (comp)
|
||||
f = *++fmt;
|
||||
scanptr = fmt;
|
||||
if (f == '\0')
|
||||
return assnum;
|
||||
fmt = strchr((f == ']' ? fmt + 1 : fmt), ']');
|
||||
if (fmt == NULL)
|
||||
return assnum;
|
||||
scannum = fmt - scanptr;
|
||||
if (comp)
|
||||
scannum = -scannum;
|
||||
fmt++;
|
||||
getscanfield(fp,skip,
|
||||
width,scannum,scanptr,&str);
|
||||
break;
|
||||
case 'f':
|
||||
case 'e':
|
||||
case 'r':
|
||||
case 'i':
|
||||
getscanwhite(fp,1,0,6, NULL);
|
||||
if (feof(fp))
|
||||
return assnum;
|
||||
if (skip) {
|
||||
fskipnum(fp);
|
||||
continue;
|
||||
}
|
||||
assnum++;
|
||||
var = *vals++;
|
||||
if (var->v_type != V_ADDR)
|
||||
math_error("This should not happen!!");
|
||||
var = var->v_addr;
|
||||
subtype = var->v_subtype;
|
||||
freevalue(var);
|
||||
count--;
|
||||
freadsum(fp, var);
|
||||
var->v_subtype = subtype;
|
||||
continue;
|
||||
case 'n':
|
||||
assnum++;
|
||||
var = *vals++;
|
||||
count--;
|
||||
if (var->v_type != V_ADDR)
|
||||
math_error("This should not happen!!");
|
||||
var = var->v_addr;
|
||||
subtype = var->v_subtype;
|
||||
freevalue(var);
|
||||
var->v_type = V_NUM;
|
||||
var->v_num = qalloc();
|
||||
f_tell(fp, &cur);
|
||||
var->v_num->num = filepos2z(cur);
|
||||
var->v_subtype = subtype;
|
||||
continue;
|
||||
default:
|
||||
fprintf(stderr, "Unsupported scan specifier");
|
||||
case 'c':
|
||||
if (width == 0)
|
||||
width = 1;
|
||||
getscanfield(fp,skip,width,0,NULL,&str);
|
||||
break;
|
||||
case 's':
|
||||
getscanwhite(fp,1,0,6,NULL);
|
||||
if (feof(fp))
|
||||
return assnum;
|
||||
getscanwhite(fp,skip,width,-6,&str);
|
||||
break;
|
||||
case '[':
|
||||
f = *fmt;
|
||||
comp = (f == '^');
|
||||
if (comp)
|
||||
f = *++fmt;
|
||||
scanptr = fmt;
|
||||
if (f == '\0')
|
||||
return assnum;
|
||||
fmt = strchr((f == ']' ? fmt + 1 : fmt), ']');
|
||||
if (fmt == NULL)
|
||||
return assnum;
|
||||
scannum = fmt - scanptr;
|
||||
if (comp)
|
||||
scannum = -scannum;
|
||||
fmt++;
|
||||
getscanfield(fp,skip,
|
||||
width,scannum,scanptr,&str);
|
||||
break;
|
||||
case 'f':
|
||||
case 'e':
|
||||
case 'r':
|
||||
case 'i':
|
||||
getscanwhite(fp,1,0,6, NULL);
|
||||
if (feof(fp))
|
||||
return assnum;
|
||||
if (skip) {
|
||||
fskipnum(fp);
|
||||
continue;
|
||||
}
|
||||
assnum++;
|
||||
var = *vals++;
|
||||
if (var->v_type != V_ADDR)
|
||||
math_error("This should not happen!!");
|
||||
var = var->v_addr;
|
||||
subtype = var->v_subtype;
|
||||
freevalue(var);
|
||||
count--;
|
||||
freadsum(fp, var);
|
||||
var->v_subtype = subtype;
|
||||
continue;
|
||||
case 'n':
|
||||
assnum++;
|
||||
var = *vals++;
|
||||
count--;
|
||||
if (var->v_type != V_ADDR)
|
||||
math_error("This should not happen!!");
|
||||
var = var->v_addr;
|
||||
subtype = var->v_subtype;
|
||||
freevalue(var);
|
||||
var->v_type = V_NUM;
|
||||
var->v_num = qalloc();
|
||||
f_tell(fp, &cur);
|
||||
var->v_num->num = filepos2z(cur);
|
||||
var->v_subtype = subtype;
|
||||
continue;
|
||||
default:
|
||||
fprintf(stderr, "Unsupported scan specifier");
|
||||
return assnum;
|
||||
}
|
||||
if (!skip) {
|
||||
assnum++;
|
||||
|
21
file.h
21
file.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* file - file I/O routines callable by users
|
||||
*
|
||||
* Copyright (C) 1999 David I. Bell and Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 David I. Bell and Landon Curt Noll
|
||||
*
|
||||
* Primary author: David I. Bell
|
||||
*
|
||||
@@ -19,8 +19,8 @@
|
||||
* 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: file.h,v 29.5 2001/06/08 21:00:58 chongo Exp $
|
||||
* @(#) $Revision: 29.8 $
|
||||
* @(#) $Id: file.h,v 29.8 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.h,v $
|
||||
*
|
||||
* Under source code control: 1996/05/24 05:55:58
|
||||
@@ -53,8 +53,10 @@ typedef struct {
|
||||
char *name; /* file name */
|
||||
BOOL reading; /* TRUE if opened for reading */
|
||||
BOOL writing; /* TRUE if opened for writing */
|
||||
BOOL appending; /* TRUE if also opened for appending */
|
||||
BOOL binary; /* TRUE if binary mode - mode ignored/unused */
|
||||
char action; /* most recent use for 'r', 'w' or 0 */
|
||||
char mode[sizeof("rb+")];/* open mode */
|
||||
char mode[sizeof("rb+")+1];/* open mode */
|
||||
} FILEIO;
|
||||
|
||||
|
||||
@@ -89,11 +91,12 @@ typedef struct {
|
||||
/*
|
||||
* external functions
|
||||
*/
|
||||
extern FILEIO * findid(FILEID id, int writable);
|
||||
extern int fgetposid(FILEID id, FILEPOS *ptr);
|
||||
extern int fsetposid(FILEID id, FILEPOS *ptr);
|
||||
extern int get_open_siz(FILE *fp, ZVALUE *res);
|
||||
extern char* findfname(FILEID);
|
||||
extern DLL FILEIO * findid(FILEID id, int writable);
|
||||
extern DLL int fgetposid(FILEID id, FILEPOS *ptr);
|
||||
extern DLL int fsetposid(FILEID id, FILEPOS *ptr);
|
||||
extern DLL int get_open_siz(FILE *fp, ZVALUE *res);
|
||||
extern DLL char* findfname(FILEID);
|
||||
extern DLL FILE *f_pathopen(char *name, char *mode, char *pathlist, char **openpath);
|
||||
|
||||
|
||||
#endif /* !__FILE_H__ */
|
||||
|
8
hash.c
8
hash.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* hash - one-way hash routines
|
||||
*
|
||||
* Copyright (C) 1999-2002 Landon Curt Noll
|
||||
* Copyright (C) 1999-2006 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
|
||||
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.6 $
|
||||
* @(#) $Id: hash.c,v 29.6 2004/02/25 23:55:38 chongo Exp $
|
||||
* @(#) $Revision: 29.8 $
|
||||
* @(#) $Id: hash.c,v 29.8 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/hash.c,v $
|
||||
*
|
||||
* Under source code control: 1995/11/23 05:13:11
|
||||
@@ -596,7 +596,7 @@ hash_complex(int type, void *c, HASH *state)
|
||||
HASH *
|
||||
hash_str(int type, char *str, HASH *state)
|
||||
{
|
||||
USB32 len; /* string length */
|
||||
size_t len; /* string length */
|
||||
|
||||
/*
|
||||
* initialize if state is NULL
|
||||
|
@@ -18,8 +18,8 @@
|
||||
# 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.25 $
|
||||
# @(#) $Id: Makefile,v 29.25 2004/07/28 12:21:05 chongo Exp $
|
||||
# @(#) $Revision: 29.28 $
|
||||
# @(#) $Id: Makefile,v 29.28 2006/05/07 12:59:51 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/help/RCS/Makefile,v $
|
||||
#
|
||||
# Under source code control: 1991/07/23 06:47:57
|
||||
@@ -258,32 +258,41 @@ BLT_HELP_FILES= ${BLT_HELP_FILES_3} ${BLT_HELP_FILES_5} \
|
||||
|
||||
# This list is prodiced by the detaillist rule when no WARNINGS are detected.
|
||||
#
|
||||
# Please use:
|
||||
#
|
||||
# make detaillist
|
||||
#
|
||||
# to keep this list in nice sorted order and to check that these
|
||||
# non-special help files are under RCS control.
|
||||
#
|
||||
DETAIL_HELP= abs access acos acosh acot acoth acsc acsch address agd append \
|
||||
appr arg argv arrow asec asech asin asinh assign atan atan2 atanh \
|
||||
avg base base2 bernoulli bit blk blkcpy blkfree blocks bround btrunc \
|
||||
calc_tty calclevel catalan ceil cfappr cfsim char cmdbuf cmp comb \
|
||||
conj cos cosh cot coth count cp csc csch ctime delete den dereference \
|
||||
det digit digits display dp epsilon errcount errmax errno error euler \
|
||||
eval exp fact factor fclose fcnt feof ferror fflush fgetc fgetfield \
|
||||
fgetline fgets fgetstr fib files floor fopen forall fprintf fputc \
|
||||
fputs fputstr frac free freebernoulli freeeuler freeglobals freeredc \
|
||||
freestatics frem freopen fscan fscanf fseek fsize ftell gcd gcdrem \
|
||||
gd getenv hash head highbit hmean hnrmod hypot ilog ilog10 ilog2 \
|
||||
im indices inputlevel insert int inverse iroot isassoc isatty isblk \
|
||||
isconfig isdefined iserror iseven isfile ishash isident isint islist \
|
||||
ismat ismult isnull isnum isobj isobjtype isodd isprime isptr isqrt \
|
||||
isrand israndom isreal isrel issimple issq isstr istype jacobi join \
|
||||
lcm lcmfact lfactor ln lowbit ltol makelist matdim matfill matmax \
|
||||
matmin matsum mattrace mattrans max md5 memsize meq min minv mmin \
|
||||
mne mod modify name near newerror nextcand nextprime norm null \
|
||||
num oldvalue ord param perm pfact pi pix places pmod polar poly \
|
||||
pop popcnt power prevcand prevprime printf prompt protect ptest \
|
||||
push putenv quo quomod rand randbit random randombit randperm rcin \
|
||||
rcmul rcout rcpow rcsq re remove reverse rewind rm root round rsearch \
|
||||
runtime saveval scale scan scanf search sec sech seed segment select \
|
||||
sgn sha sha1 sin sinh size sizeof sleep sort sqrt srand srandom \
|
||||
ssq str strcat strerror strlen strpos strprintf strscan strscanf \
|
||||
substr sum swap system tail tan tanh test time trunc version xor
|
||||
det digit digits display dp epsilon errcount errmax errno error \
|
||||
euler eval exp fact factor fclose fcnt feof ferror fflush fgetc \
|
||||
fgetfield fgetline fgets fgetstr fib files floor fopen forall \
|
||||
fpathopen fprintf fputc fputs fputstr frac free freebernoulli \
|
||||
freeeuler freeglobals freeredc freestatics frem freopen fscan \
|
||||
fscanf fseek fsize ftell gcd gcdrem gd getenv hash head highbit \
|
||||
hmean hnrmod hypot ilog ilog10 ilog2 im indices inputlevel insert \
|
||||
int inverse iroot isassoc isatty isblk isconfig isdefined iserror \
|
||||
iseven isfile ishash isident isint islist ismat ismult isnull isnum \
|
||||
isobj isobjtype isodd isprime isptr isqrt isrand israndom isreal \
|
||||
isrel issimple issq isstr istype jacobi join lcm lcmfact lfactor \
|
||||
ln log lowbit ltol makelist matdim matfill matmax matmin matsum \
|
||||
mattrace mattrans max md5 memsize meq min minv mmin mne mod modify \
|
||||
name near newerror nextcand nextprime norm null num oldvalue ord \
|
||||
param perm pfact pi pix places pmod polar poly pop popcnt power \
|
||||
prevcand prevprime printf prompt protect ptest push putenv quo \
|
||||
quomod rand randbit random randombit randperm rcin rcmul rcout \
|
||||
rcpow rcsq re remove reverse rewind rm root round rsearch runtime \
|
||||
saveval scale scan scanf search sec sech seed segment select sgn \
|
||||
sha sha1 sin sinh size sizeof sleep sort sqrt srand srandom ssq \
|
||||
str strcat strcmp strcpy strerror strlen strncmp strncpy strpos \
|
||||
strprintf strscan strscanf substr sum swap system tail tan tanh \
|
||||
test time trunc version xor
|
||||
|
||||
# This list is of files that are clones of DETAIL_HELP files. They are
|
||||
# built from DETAIL_HELP files.
|
||||
|
8
help/abs
8
help/abs
@@ -29,10 +29,10 @@ DESCRIPTION
|
||||
the result will be the absolute value correct to n decimal places.
|
||||
|
||||
EXAMPLE
|
||||
> print abs(3.4), abs(-3.4)
|
||||
; print abs(3.4), abs(-3.4)
|
||||
3.4 3.4
|
||||
|
||||
> print abs(3+4i, 1e-5), abs(4+5i, 1e-5), abs(4+5i, 1e-10)
|
||||
; print abs(3+4i, 1e-5), abs(4+5i, 1e-5), abs(4+5i, 1e-10)
|
||||
5 6.40312 6.4031242374
|
||||
|
||||
LIMITS
|
||||
@@ -60,8 +60,8 @@ SEE ALSO
|
||||
## 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: abs,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: abs,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/abs,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:22
|
||||
|
24
help/access
24
help/access
@@ -23,19 +23,19 @@ EXAMPLE
|
||||
The system error-numbers and messages may differ for different
|
||||
implementations
|
||||
|
||||
> !rm -f junk
|
||||
> access("junk")
|
||||
; !rm -f junk
|
||||
; access("junk")
|
||||
System error 2
|
||||
> strerror(.)
|
||||
; strerror(.)
|
||||
"No such file or directory"
|
||||
> f = fopen("junk", "w")
|
||||
> access("junk")
|
||||
> fputs(f, "Alpha")
|
||||
> fclose(f)
|
||||
> !chmod u-w junk
|
||||
> access("junk", "w")
|
||||
; f = fopen("junk", "w")
|
||||
; access("junk")
|
||||
; fputs(f, "Alpha")
|
||||
; fclose(f)
|
||||
; !chmod u-w junk
|
||||
; access("junk", "w")
|
||||
System error 13
|
||||
> strerror(.)
|
||||
; strerror(.)
|
||||
"Permission denied"
|
||||
|
||||
LIMITS
|
||||
@@ -64,8 +64,8 @@ SEE ALSO
|
||||
## 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: access,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: access,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/access,v $
|
||||
##
|
||||
## Under source code control: 1996/04/30 03:36:20
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = acos(x) is the number in [0, pi] for which cos(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print acos(.5, 1e-5), acos(.5, 1e-10), acos(.5, 1e-15), acos(.5, 1e-20)
|
||||
; print acos(.5, 1e-5), acos(.5, 1e-10), acos(.5, 1e-15), acos(.5, 1e-20)
|
||||
1.0472 1.0471975512 1.047197551196598 1.04719755119659774615
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## 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: acos,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acos,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acos,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:23
|
||||
|
@@ -20,7 +20,7 @@ DESCRIPTION
|
||||
acosh(x) = ln(x + sqrt(x^2 - 1))
|
||||
|
||||
EXAMPLE
|
||||
> print acosh(2, 1e-5), acosh(2, 1e-10), acosh(2, 1e-15), acosh(2, 1e-20)
|
||||
; print acosh(2, 1e-5), acosh(2, 1e-10), acosh(2, 1e-15), acosh(2, 1e-20)
|
||||
1.31696 1.3169578969 1.316957896924817 1.31695789692481670862
|
||||
|
||||
LIMITS
|
||||
@@ -48,8 +48,8 @@ SEE ALSO
|
||||
## 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: acosh,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acosh,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acosh,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:24
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = acot(x) is the number in (0, pi) for which cot(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print acot(2, 1e-5), acot(2, 1e-10), acot(2, 1e-15), acot(2, 1e-20)
|
||||
; print acot(2, 1e-5), acot(2, 1e-10), acot(2, 1e-15), acot(2, 1e-20)
|
||||
.46365 .463647609 .463647609000806 .46364760900080611621
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## 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: acot,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acot,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acot,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -19,7 +19,7 @@ DESCRIPTION
|
||||
acoth(x) = ln((x + 1)/(x - 1))/2
|
||||
|
||||
EXAMPLE
|
||||
> print acoth(2, 1e-5), acoth(2, 1e-10), acoth(2, 1e-15), acoth(2, 1e-20)
|
||||
; print acoth(2, 1e-5), acoth(2, 1e-10), acoth(2, 1e-15), acoth(2, 1e-20)
|
||||
.54931 .5493061443 .549306144334055 .5493061443340548457
|
||||
|
||||
LIMITS
|
||||
@@ -47,8 +47,8 @@ SEE ALSO
|
||||
## 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: acoth,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acoth,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acoth,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:01
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = acsc(x) is the number in [-pi/2, pi/2] for which csc(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print acsc(2, 1e-5), acsc(2, 1e-10), acsc(2, 1e-15), acsc(2, 1e-20)
|
||||
; print acsc(2, 1e-5), acsc(2, 1e-10), acsc(2, 1e-15), acsc(2, 1e-20)
|
||||
.5236 .5235987756 .523598775598299 .52359877559829887308
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## 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: acsc,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acsc,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acsc,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -20,7 +20,7 @@ DESCRIPTION
|
||||
|
||||
|
||||
EXAMPLE
|
||||
> print acsch(2, 1e-5), acsch(2, 1e-10), acsch(2, 1e-15), acsch(2, 1e-20)
|
||||
; print acsch(2, 1e-5), acsch(2, 1e-10), acsch(2, 1e-15), acsch(2, 1e-20)
|
||||
.48121 .4812118251 .481211825059603 .4812118250596034475
|
||||
|
||||
LIMITS
|
||||
@@ -48,8 +48,8 @@ SEE ALSO
|
||||
## 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: acsch,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: acsch,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acsch,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:01
|
||||
|
20
help/address
20
help/address
@@ -134,21 +134,21 @@ DESCRIPTION
|
||||
EXAMPLE
|
||||
Addresses for particular systems may differ from those displayed here.
|
||||
|
||||
> mat A[3]
|
||||
> B = blk()
|
||||
; mat A[3]
|
||||
; B = blk()
|
||||
|
||||
> print &A, &A[0], &A[1]
|
||||
; print &A, &A[0], &A[1]
|
||||
v-ptr: 1400470d0 v-ptr: 140044b70 v-ptr: 140044b80
|
||||
|
||||
> print &B, &B[0], &B[1]
|
||||
; print &B, &B[0], &B[1]
|
||||
v-ptr: 140047130 o-ptr: 140044d00 o-ptr: 140044d01
|
||||
|
||||
> a = A[0] = 27
|
||||
> print &*a, &*A[0]. &27
|
||||
; a = A[0] = 27
|
||||
; print &*a, &*A[0]. &27
|
||||
n_ptr: 14003a850 n_ptr: 14003a850 n_ptr: 14003a850
|
||||
|
||||
> a = A[0] = "abc"
|
||||
> print &*a, &*A[0], &"abc"
|
||||
; a = A[0] = "abc"
|
||||
; print &*a, &*A[0], &"abc"
|
||||
s_ptr: 14004cae0 s_ptr: 14004cae0 s_ptr: 14004cae0
|
||||
|
||||
LIMITS
|
||||
@@ -176,8 +176,8 @@ SEE ALSO
|
||||
## 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: address,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: address,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/address,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:34
|
||||
|
14
help/agd
14
help/agd
@@ -35,23 +35,23 @@ DESCRIPTION
|
||||
|
||||
|
||||
EXAMPLE
|
||||
> print agd(1, 1e-5), agd(1, 1e-10), agd(1, 1e-15)
|
||||
; print agd(1, 1e-5), agd(1, 1e-10), agd(1, 1e-15)
|
||||
1.22619 1.2261911709 1.226191170883517
|
||||
|
||||
> print agd(2, 1e-5), agd(2, 1e-10)
|
||||
; print agd(2, 1e-5), agd(2, 1e-10)
|
||||
1.52345-3.14159i 1.5234524436-3.1415926536i
|
||||
|
||||
> print agd(5, 1e-5), agd(5, 1e-10), agd(5, 1e-15)
|
||||
; print agd(5, 1e-5), agd(5, 1e-10), agd(5, 1e-15)
|
||||
-1.93237 -1.9323667197 -1.932366719745925
|
||||
|
||||
> print agd(1+2i, 1e-5), agd(1+2i, 1e-10)
|
||||
; print agd(1+2i, 1e-5), agd(1+2i, 1e-10)
|
||||
.22751+1.42291i .2275106584+1.4229114625i
|
||||
|
||||
LIMITS
|
||||
none
|
||||
|
||||
LINK LIBRARY
|
||||
COMPLEX *cagd(COMPLEX *x, NUMBER *eps)
|
||||
COMPLEX *c_agd(COMPLEX *x, NUMBER *eps)
|
||||
|
||||
SEE ALSO
|
||||
gd, exp, ln, sin, sinh, etc.
|
||||
@@ -72,8 +72,8 @@ SEE ALSO
|
||||
## 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: agd,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: agd,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/agd,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:34
|
||||
|
18
help/append
18
help/append
@@ -19,9 +19,9 @@ DESCRIPTION
|
||||
append(x, y_0, y_1, ...) is equivalent to insert(x, n, y_0, y_1, ...).
|
||||
|
||||
EXAMPLE
|
||||
> x = list(2,3,4)
|
||||
> append(x, 5, 6)
|
||||
> print x
|
||||
; x = list(2,3,4)
|
||||
; append(x, 5, 6)
|
||||
; print x
|
||||
|
||||
list (5 elements, 5 nonzero):
|
||||
[[0]] = 2
|
||||
@@ -30,8 +30,8 @@ EXAMPLE
|
||||
[[3]] = 5
|
||||
[[4]] = 6
|
||||
|
||||
> append(x, pop(x), pop(x))
|
||||
> print x
|
||||
; append(x, pop(x), pop(x))
|
||||
; print x
|
||||
|
||||
list (5 elements, 5 nonzero):
|
||||
[[0]] = 4
|
||||
@@ -40,8 +40,8 @@ EXAMPLE
|
||||
[[3]] = 2
|
||||
[[4]] = 3
|
||||
|
||||
> append(x, (remove(x), 7))
|
||||
> print x
|
||||
; append(x, (remove(x), 7))
|
||||
; print x
|
||||
|
||||
list (5 elements, 5 nonzero):
|
||||
[[0]] = 4
|
||||
@@ -75,8 +75,8 @@ SEE ALSO
|
||||
## 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: append,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: append,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/append,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 03:13:17
|
||||
|
34
help/appr
34
help/appr
@@ -97,47 +97,47 @@ PROPERTIES
|
||||
If y is nonzero, appr(x,y,8)/y = an odd integer n only if x = n * y.
|
||||
|
||||
EXAMPLES
|
||||
> print appr(-5.44,0.1,0), appr(5.44,0.1,0), appr(5.7,1,0), appr(-5.7,1,0)
|
||||
; print appr(-5.44,0.1,0), appr(5.44,0.1,0), appr(5.7,1,0), appr(-5.7,1,0)
|
||||
-5.5 5.4 5 -6
|
||||
|
||||
> print appr(-5.44,-.1,0), appr(5.44,-.1,0), appr(5.7,-1,0), appr(-5.7,-1,0)
|
||||
; print appr(-5.44,-.1,0), appr(5.44,-.1,0), appr(5.7,-1,0), appr(-5.7,-1,0)
|
||||
-5.4 5.5 6 -5
|
||||
|
||||
> print appr(-5.44,0.1,3), appr(5.44,0.1,3), appr(5.7,1,3), appr(-5.7,1,3)
|
||||
; print appr(-5.44,0.1,3), appr(5.44,0.1,3), appr(5.7,1,3), appr(-5.7,1,3)
|
||||
-5.5 5.5 6 -6
|
||||
|
||||
> print appr(-5.44,0.1,4), appr(5.44,0.1,4), appr(5.7,1,4), appr(-5.7,1,4)
|
||||
; print appr(-5.44,0.1,4), appr(5.44,0.1,4), appr(5.7,1,4), appr(-5.7,1,4)
|
||||
-5.5 5.4 5 -6
|
||||
|
||||
> print appr(-5.44,0.1,6), appr(5.44,0.1,6), appr(5.7,1,6), appr(-5.7,1,6)
|
||||
; print appr(-5.44,0.1,6), appr(5.44,0.1,6), appr(5.7,1,6), appr(-5.7,1,6)
|
||||
-5.4 5.4 6 -5
|
||||
|
||||
> print appr(-5.44,-.1,6), appr(5.44,-.1,6), appr(5.7,-1,6), appr(-5.7,-1,6)
|
||||
; print appr(-5.44,-.1,6), appr(5.44,-.1,6), appr(5.7,-1,6), appr(-5.7,-1,6)
|
||||
-5.5 5.5 6 -6
|
||||
|
||||
> print appr(-5.44,0.1,9), appr(5.44,0.1,9), appr(5.7,1,9), appr(-5.7,1,9)
|
||||
; print appr(-5.44,0.1,9), appr(5.44,0.1,9), appr(5.7,1,9), appr(-5.7,1,9)
|
||||
-5.5 5.5 5 -5
|
||||
|
||||
> print appr(-.44,0.1,11), appr(.44,0.1,11), appr(5.7,1,11), appr(-5.7,1,11)
|
||||
; print appr(-.44,0.1,11), appr(.44,0.1,11), appr(5.7,1,11), appr(-5.7,1,11)
|
||||
-.4 .5 5 -6
|
||||
|
||||
> print appr(-.44,-.1,11),appr(.44,-.1,11),appr(5.7,-1,11),appr(-5.7,-1,11)
|
||||
; print appr(-.44,-.1,11),appr(.44,-.1,11),appr(5.7,-1,11),appr(-5.7,-1,11)
|
||||
-.5 .4 6 -5
|
||||
|
||||
> print appr(-.44,0.1,12), appr(.44,0.1,12), appr(5.7,1,12), appr(-5.7,1,12)
|
||||
; print appr(-.44,0.1,12), appr(.44,0.1,12), appr(5.7,1,12), appr(-5.7,1,12)
|
||||
-.4 .5 5 -6
|
||||
|
||||
> print appr(-.44,-.1,12),appr(.44,-.1,12),appr(5.7,-1,12),appr(-5.7,-1,12)
|
||||
; print appr(-.44,-.1,12),appr(.44,-.1,12),appr(5.7,-1,12),appr(-5.7,-1,12)
|
||||
-.5 .4 6 -5
|
||||
|
||||
> print appr(-.44,0.1,15), appr(.44,0.1,15), appr(5.7,1,15), appr(-5.7,1,15)
|
||||
; print appr(-.44,0.1,15), appr(.44,0.1,15), appr(5.7,1,15), appr(-5.7,1,15)
|
||||
-.4 .5 5 -6
|
||||
|
||||
> print appr(-.44,-.1,15),appr(.44,-.1,15),appr(5.7,-1,15),appr(-5.7,-1,15)
|
||||
; print appr(-.44,-.1,15),appr(.44,-.1,15),appr(5.7,-1,15),appr(-5.7,-1,15)
|
||||
-.4 .5 5 -6
|
||||
|
||||
> x = sqrt(7-3i, 1e-20)
|
||||
> print appr(x,1e-5,0), appr(x,1e-5,1), appr(x,1e-5,2), appr(x,1e-6,3)
|
||||
; x = sqrt(7-3i, 1e-20)
|
||||
; print appr(x,1e-5,0), appr(x,1e-5,1), appr(x,1e-5,2), appr(x,1e-6,3)
|
||||
2.70331-.55488i 2.70332-.55487i 2.70331-.55487i 2.70332-.55488i
|
||||
|
||||
LIMITS
|
||||
@@ -167,8 +167,8 @@ SEE ALSO
|
||||
## 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: appr,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: appr,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/appr,v $
|
||||
##
|
||||
## Under source code control: 1994/09/25 17:18:21
|
||||
|
10
help/arg
10
help/arg
@@ -16,11 +16,11 @@ DESCRIPTION
|
||||
but usually less than 0.5 * abs(eps).
|
||||
|
||||
EXAMPLE
|
||||
> print arg(2), arg(2+3i, 1e-5), arg(2+3i, 1e-10), arg(2+3i, 1e-20)
|
||||
; print arg(2), arg(2+3i, 1e-5), arg(2+3i, 1e-10), arg(2+3i, 1e-20)
|
||||
0 .98279 .9827937232 .98279372324732906799
|
||||
|
||||
> pi = pi(1e-10); deg = pi/180; eps = deg/10000
|
||||
> print arg(2+3i, eps)/deg, arg(-1 +1i, eps)/deg, arg(-1 - 1i,eps)/deg
|
||||
; pi = pi(1e-10); deg = pi/180; eps = deg/10000
|
||||
; print arg(2+3i, eps)/deg, arg(-1 +1i, eps)/deg, arg(-1 - 1i,eps)/deg
|
||||
56.3099 135 -135
|
||||
|
||||
LIMITS
|
||||
@@ -48,8 +48,8 @@ SEE ALSO
|
||||
## 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: arg,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: arg,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/arg,v $
|
||||
##
|
||||
## Under source code control: 1994/09/25 20:22:31
|
||||
|
@@ -38,8 +38,8 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
$ calc -s a bb ccc
|
||||
> argc = argv();
|
||||
> for (i = 0; i < argc; i++) print "argv[": i : '] = "': argv(i) : '"';
|
||||
; argc = argv();
|
||||
; for (i = 0; i < argc; i++) print "argv[": i : '] = "': argv(i) : '"';
|
||||
argv[0] = "a"
|
||||
argv[1] = "bb"
|
||||
argv[2] = "ccc"
|
||||
@@ -69,8 +69,8 @@ SEE ALSO
|
||||
## 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: argv,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: argv,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/argv,v $
|
||||
##
|
||||
## Under source code control: 1999/11/23 19:45:05
|
||||
|
24
help/arrow
24
help/arrow
@@ -23,21 +23,21 @@ DESCRIPTION
|
||||
Spaces or tabs on either side of -> are optional.
|
||||
|
||||
EXAMPLES
|
||||
> obj pair {one, two}
|
||||
> obj pair A, B
|
||||
> p = &A
|
||||
> p->one = 1; p->two = 2
|
||||
> A
|
||||
; obj pair {one, two}
|
||||
; obj pair A, B
|
||||
; p = &A
|
||||
; p->one = 1; p->two = 2
|
||||
; A
|
||||
obj pair {1, 2}
|
||||
|
||||
> A->two = &B
|
||||
> p->two->one = 3; p->two->two = 4
|
||||
; A->two = &B
|
||||
; p->two->one = 3; p->two->two = 4
|
||||
|
||||
> *p->ptwo
|
||||
; *p->ptwo
|
||||
obj pair {3, 4}
|
||||
|
||||
> B = {5,6}
|
||||
> *p->two
|
||||
; B = {5,6}
|
||||
; *p->two
|
||||
obj pair {5, 6}
|
||||
|
||||
|
||||
@@ -66,8 +66,8 @@ SEE ALSO
|
||||
## 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: arrow,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: arrow,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/arrow,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:34
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = asec(x) is the number in [0, pi] for which sec(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print asec(2, 1e-5), asec(2, 1e-10), asec(2, 1e-15), asec(2, 1e-20)
|
||||
; print asec(2, 1e-5), asec(2, 1e-10), asec(2, 1e-15), asec(2, 1e-20)
|
||||
1.0472 1.0471975512 1.047197551196598 1.04719755119659774615
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## 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: asec,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: asec,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asec,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -19,7 +19,7 @@ DESCRIPTION
|
||||
asech(x) = ln((1 + sqrt(1 - x^2))/x)
|
||||
|
||||
EXAMPLE
|
||||
> print asech(.5,1e-5), asech(.5,1e-10), asech(.5,1e-15), asech(.5,1e-20)
|
||||
; print asech(.5,1e-5), asech(.5,1e-10), asech(.5,1e-15), asech(.5,1e-20)
|
||||
1.31696 1.3169578969 1.316957896924817 1.31695789692481670862
|
||||
|
||||
LIMITS
|
||||
@@ -47,8 +47,8 @@ SEE ALSO
|
||||
## 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: asech,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: asech,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asech,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = asin(x) is the number in [-pi/2, pi/2] for which sin(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print asin(.5, 1e-5), asin(.5, 1e-10), asin(.5, 1e-15), asin(.5, 1e-20)
|
||||
; print asin(.5, 1e-5), asin(.5, 1e-10), asin(.5, 1e-15), asin(.5, 1e-20)
|
||||
.5236 .5235987756 .523598775598299 .52359877559829887308
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## 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: asin,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: asin,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asin,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:24
|
||||
|
@@ -19,7 +19,7 @@ DESCRIPTION
|
||||
asinh(x) = ln(x + sqrt(1 + x^2))
|
||||
|
||||
EXAMPLE
|
||||
> print asinh(2, 1e-5), asinh(2, 1e-10), asinh(2, 1e-15), asinh(2, 1e-20)
|
||||
; print asinh(2, 1e-5), asinh(2, 1e-10), asinh(2, 1e-15), asinh(2, 1e-20)
|
||||
1.44363 1.4436354752 1.44363547517881 1.44363547517881034249
|
||||
|
||||
LIMITS
|
||||
@@ -47,8 +47,8 @@ SEE ALSO
|
||||
## 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: asinh,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: asinh,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asinh,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:25
|
||||
|
28
help/assign
28
help/assign
@@ -76,32 +76,32 @@ DESCRIPTION
|
||||
|
||||
|
||||
EXAMPLE
|
||||
> b = 3+1
|
||||
> a = b
|
||||
> print a, b
|
||||
; b = 3+1
|
||||
; a = b
|
||||
; print a, b
|
||||
4 4
|
||||
|
||||
> obj point {x,y}
|
||||
> mat A[3] = {1, list(2,3), obj point = {4,5}}
|
||||
; obj point {x,y}
|
||||
; mat A[3] = {1, list(2,3), obj point = {4,5}}
|
||||
|
||||
> A[1][[0]] = 6; A[2].x = 7
|
||||
> print A[1]
|
||||
; A[1][[0]] = 6; A[2].x = 7
|
||||
; print A[1]
|
||||
|
||||
list (2 elements, 2 nonzero):
|
||||
[[0]] = 6
|
||||
[[1]] = 3
|
||||
|
||||
> print A[2]
|
||||
; print A[2]
|
||||
obj point {7, 5}
|
||||
|
||||
> A = {A[2], , {9,10}}
|
||||
> print A[0]
|
||||
; A = {A[2], , {9,10}}
|
||||
; print A[0]
|
||||
obj point {7, 5}
|
||||
|
||||
> print A[2]
|
||||
; print A[2]
|
||||
obj point {9, 10}
|
||||
|
||||
> A = {, {2}}
|
||||
; A = {, {2}}
|
||||
print A[1]
|
||||
|
||||
list (2 elements, 2 nonzero):
|
||||
@@ -133,8 +133,8 @@ SEE ALSO
|
||||
## 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: assign,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: assign,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/assign,v $
|
||||
##
|
||||
## Under source code control: 1995/05/11 21:03:23
|
||||
|
12
help/assoc
12
help/assoc
@@ -60,12 +60,12 @@ DESCRIPTION
|
||||
and are illegal.
|
||||
|
||||
EXAMPLE
|
||||
> A = assoc(); print A
|
||||
; A = assoc(); print A
|
||||
assoc (0 elements):
|
||||
|
||||
> A["zero"] = 0; A["one"] = 1; A["two"] = 2; A["three"] = 3;
|
||||
> A["smallest", "prime"] = 2;
|
||||
> print A
|
||||
; A["zero"] = 0; A["one"] = 1; A["two"] = 2; A["three"] = 3;
|
||||
; A["smallest", "prime"] = 2;
|
||||
; print A
|
||||
assoc (5 elements);
|
||||
["two"] = 2
|
||||
["three"] = 3
|
||||
@@ -98,8 +98,8 @@ SEE ALSO
|
||||
## 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: assoc,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: assoc,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/assoc,v $
|
||||
##
|
||||
## Under source code control: 1994/09/25 20:22:31
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
v = atan(x) is the number in (-pi/2, pi/2) for which tan(v) = x.
|
||||
|
||||
EXAMPLE
|
||||
> print atan(2, 1e-5), atan(2, 1e-10), atan(2, 1e-15), atan(2, 1e-20)
|
||||
; print atan(2, 1e-5), atan(2, 1e-10), atan(2, 1e-15), atan(2, 1e-20)
|
||||
1.10715 1.1071487178 1.107148717794091 1.10714871779409050302
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## 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: atan,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: atan,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atan,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:25
|
||||
|
@@ -24,7 +24,7 @@ DESCRIPTION
|
||||
returns 0.
|
||||
|
||||
EXAMPLE
|
||||
> print atan2(0,0), atan2(1,sqrt(3)), atan2(17,53,1e-100)
|
||||
; print atan2(0,0), atan2(1,sqrt(3)), atan2(17,53,1e-100)
|
||||
0 ~.52359877559829887307 ~.31038740713235146535
|
||||
|
||||
LIMITS
|
||||
@@ -52,8 +52,8 @@ SEE ALSO
|
||||
## 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: atan2,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: atan2,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atan2,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:26
|
||||
|
@@ -19,7 +19,7 @@ DESCRIPTION
|
||||
atanh(x) = ln((1 + x)/(1 - x))/2
|
||||
|
||||
EXAMPLE
|
||||
> print atanh(.5,1e-5), atanh(.5,1e-10), atanh(.5,1e-15), atanh(.5,1e-20)
|
||||
; print atanh(.5,1e-5), atanh(.5,1e-10), atanh(.5,1e-15), atanh(.5,1e-20)
|
||||
.54931 .5493061443 .549306144334055 .5493061443340548457
|
||||
|
||||
LIMITS
|
||||
@@ -47,8 +47,8 @@ SEE ALSO
|
||||
## 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: atanh,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: atanh,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atanh,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:27
|
||||
|
12
help/avg
12
help/avg
@@ -27,12 +27,12 @@ DESCRIPTION
|
||||
be averaged.
|
||||
|
||||
EXAMPLE
|
||||
> print avg(1,2,3,4,5), avg(list(1,2,3,4,5)), avg(1,2,list(3,4,5))
|
||||
; print avg(1,2,3,4,5), avg(list(1,2,3,4,5)), avg(1,2,list(3,4,5))
|
||||
3 3 3
|
||||
|
||||
> mat x[2,2] = {1,2,3,4}
|
||||
> mat y[2,2] = {1,2,4,8}
|
||||
> avg(x,y)
|
||||
; mat x[2,2] = {1,2,3,4}
|
||||
; mat y[2,2] = {1,2,4,8}
|
||||
; avg(x,y)
|
||||
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 1
|
||||
@@ -65,8 +65,8 @@ SEE ALSO
|
||||
## 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: avg,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: avg,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/avg,v $
|
||||
##
|
||||
## Under source code control: 1994/09/25 20:22:31
|
||||
|
10
help/base
10
help/base
@@ -60,13 +60,13 @@ DESCRIPTION
|
||||
listed in the table above.
|
||||
|
||||
EXAMPLE
|
||||
> base()
|
||||
; base()
|
||||
10
|
||||
|
||||
> base(8)
|
||||
; base(8)
|
||||
012
|
||||
|
||||
> print 10
|
||||
; print 10
|
||||
012
|
||||
|
||||
LIMITS
|
||||
@@ -97,8 +97,8 @@ SEE ALSO
|
||||
## 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: base,v 29.5 2002/12/29 09:17:54 chongo Exp $
|
||||
## @(#) $Revision: 29.6 $
|
||||
## @(#) $Id: base,v 29.6 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/base,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 00:09:39
|
||||
|
16
help/base2
16
help/base2
@@ -68,16 +68,16 @@ DESCRIPTION
|
||||
listed in the table above.
|
||||
|
||||
EXAMPLE
|
||||
> base2()
|
||||
; base2()
|
||||
0
|
||||
> base2(8)
|
||||
; base2(8)
|
||||
0 /* 0 */
|
||||
> print 10
|
||||
; print 10
|
||||
10 /* 012 */
|
||||
> base2(16),
|
||||
> 131072
|
||||
; base2(16),
|
||||
; 131072
|
||||
131072 /* 0x20000 */
|
||||
> 2345
|
||||
; 2345
|
||||
2345 /* 0x929 */
|
||||
|
||||
LIMITS
|
||||
@@ -109,8 +109,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 1.3 $
|
||||
## @(#) $Id: base2,v 1.3 2002/12/29 09:17:54 chongo Exp $
|
||||
## @(#) $Revision: 1.4 $
|
||||
## @(#) $Id: base2,v 1.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/base2,v $
|
||||
##
|
||||
## Under source code control: 2002/12/29 00:21:07
|
||||
|
@@ -28,8 +28,8 @@ DESCRIPTION
|
||||
freebernoulli().
|
||||
|
||||
EXAMPLE
|
||||
> config("mode", "frac"),;
|
||||
> for (n = 0; n <= 6; n++) print bernoulli(n),; print;
|
||||
; config("mode", "frac"),;
|
||||
; for (n = 0; n <= 6; n++) print bernoulli(n),; print;
|
||||
1 -1/2 1/6 0 -1/30 0 1/42
|
||||
|
||||
LIMITS
|
||||
@@ -57,8 +57,8 @@ SEE ALSO
|
||||
## 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: bernoulli,v 29.5 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.6 $
|
||||
## @(#) $Id: bernoulli,v 29.6 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bernoulli,v $
|
||||
##
|
||||
## Under source code control: 2000/07/13 01:33:00
|
||||
|
14
help/bit
14
help/bit
@@ -20,17 +20,17 @@ DESCRIPTION
|
||||
return 1, otherwise return 0.
|
||||
|
||||
EXAMPLE
|
||||
> print bit(9,0), bit(9,1), bit(9,2), bit(9,3)
|
||||
; print bit(9,0), bit(9,1), bit(9,2), bit(9,3)
|
||||
1 0 0 1
|
||||
|
||||
> print bit(9,4), bit(0,0), bit(9,-1)
|
||||
; print bit(9,4), bit(0,0), bit(9,-1)
|
||||
0 0 0
|
||||
|
||||
> print bit(1.25, -2), bit(1.25, -1), bit(1.25, 0)
|
||||
; print bit(1.25, -2), bit(1.25, -1), bit(1.25, 0)
|
||||
1 0 1
|
||||
|
||||
> p = pi()
|
||||
> print bit(p, 1), bit(p, -2), bit(p, -3)
|
||||
; p = pi()
|
||||
; print bit(p, 1), bit(p, -2), bit(p, -3)
|
||||
1 0 1
|
||||
|
||||
LIMITS
|
||||
@@ -58,8 +58,8 @@ SEE ALSO
|
||||
## 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: bit,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: bit,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bit,v $
|
||||
##
|
||||
## Under source code control: 1994/10/21 02:21:30
|
||||
|
54
help/blk
54
help/blk
@@ -14,7 +14,7 @@ TYPES
|
||||
|
||||
DESCRIPTION
|
||||
With only integer arguments, blk(len, chunk) attempts to
|
||||
allocate a block of memory consisting of N octets (unsigned 8-bit
|
||||
allocate a block of memory consisting of len octets (unsigned 8-bit
|
||||
bytes). Allocation is always done in multiples of chunk
|
||||
octets, so the actual allocation size of len rounded up
|
||||
to the next multiple of chunk.
|
||||
@@ -26,7 +26,7 @@ DESCRIPTION
|
||||
... , B[len-1], these all initially having zero value.
|
||||
|
||||
The octets B[i] for i >= len always have zero value. If B[i] with
|
||||
some i >= len is referenced, len is increased by 1. For example:
|
||||
some i >= len is referenced, size(B) is increased to i + 1. For example:
|
||||
|
||||
B[i] = x
|
||||
|
||||
@@ -56,7 +56,7 @@ DESCRIPTION
|
||||
will append one octet to B and increment size(B).
|
||||
|
||||
The builtin test(B) returns 1 or 0 according as at least one octet
|
||||
is zero or all octets are zero. If B1 and B2 are blocks, they are
|
||||
is nonzero or all octets are zero. If B1 and B2 are blocks, they are
|
||||
considered equal (B1 == B2) if they have the same length and the
|
||||
same data, i.e. B1[i] == B2[i] for 0 <= i < len. Chunksizes
|
||||
and maxsizes are ignored.
|
||||
@@ -107,7 +107,7 @@ DESCRIPTION
|
||||
|
||||
will give a second variable B referring to the same block as A.
|
||||
Either A[i] = x or B[i] = x may then be used to assign a value
|
||||
to an octet in the book. Its length or chunksize may be changed by
|
||||
to an octet in the block. Its length or chunksize may be changed by
|
||||
instructions like:
|
||||
|
||||
blk(A, len, chunk);
|
||||
@@ -154,55 +154,55 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
|
||||
> B = blk(15,10)
|
||||
; B = blk(15,10)
|
||||
|
||||
> B[7] = 0xff
|
||||
> B
|
||||
; B[7] = 0xff
|
||||
; B
|
||||
chunksize = 10, maxsize = 20, datalen = 15
|
||||
00000000000000ff00000000000000
|
||||
|
||||
> B[18] = 127
|
||||
> B
|
||||
; B[18] = 127
|
||||
; B
|
||||
chunksize = 10, maxsize = 20, datalen = 18
|
||||
00000000000000ff0000000000000000007f
|
||||
|
||||
> B[20] = 2
|
||||
; B[20] = 2
|
||||
Index out of bounds for block
|
||||
|
||||
> print size(B), sizeof(B)
|
||||
; print size(B), sizeof(B)
|
||||
18 20
|
||||
|
||||
> B = blk(B, 100, 20)
|
||||
> B
|
||||
; B = blk(B, 100, 20)
|
||||
; B
|
||||
chunksize = 20, maxsize = 120, datalen = 100
|
||||
00000000000000ff0000000000000000007f000000000000000000000000...
|
||||
|
||||
> C = blk(B, 10} = {1,2,3}
|
||||
> C
|
||||
; C = blk(B, 10} = {1,2,3}
|
||||
; C
|
||||
chunksize = 20, maxsize = 20, datalen = 10
|
||||
01020300000000ff0000
|
||||
|
||||
> A1 = blk("alpha")
|
||||
> A1
|
||||
; A1 = blk("alpha")
|
||||
; A1
|
||||
block 0: alpha
|
||||
chunksize = 256, maxsize = 256, datalen = 0
|
||||
|
||||
> A1[7] = 0xff
|
||||
> A2 = A1
|
||||
> A2[17] = 127
|
||||
> A1
|
||||
; A1[7] = 0xff
|
||||
; A2 = A1
|
||||
; A2[17] = 127
|
||||
; A1
|
||||
block 0: alpha
|
||||
chunksize = 256, maxsize = 256, datalen = 18
|
||||
00000000000000ff0000000000000000007f
|
||||
|
||||
> A1 = blk(A1, 1000)
|
||||
> A1
|
||||
; A1 = blk(A1, 1000)
|
||||
; A1
|
||||
block 0: alpha
|
||||
chunksize = 256, maxsize = 1024, datalen = 1000
|
||||
00000000000000ff0000000000000000007f000000000000000000000000...
|
||||
|
||||
> A1 = blk(A1, , 16)
|
||||
> A1
|
||||
; A1 = blk(A1, , 16)
|
||||
; A1
|
||||
block 0: alpha
|
||||
chunksize = 16, maxsize = 1008, datalen = 1000
|
||||
00000000000000ff0000000000000000007f000000000000000000000000...
|
||||
@@ -234,8 +234,8 @@ SEE ALSO
|
||||
## 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: blk,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: blk,v 29.4 2006/05/07 07:16:42 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blk,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 13:07:13
|
||||
|
64
help/blkcpy
64
help/blkcpy
@@ -108,74 +108,74 @@ DESCRIPTION
|
||||
|
||||
|
||||
EXAMPLE
|
||||
> A = blk() = {1,2,3,4}
|
||||
> B = blk()
|
||||
> blkcpy(B,A)
|
||||
> B
|
||||
; A = blk() = {1,2,3,4}
|
||||
; B = blk()
|
||||
; blkcpy(B,A)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 4
|
||||
01020304
|
||||
>
|
||||
> blkcpy(B,A)
|
||||
> B
|
||||
; blkcpy(B,A)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 8
|
||||
0102030401020304
|
||||
> blkcpy(B, A, 2, 10)
|
||||
> B
|
||||
; blkcpy(B, A, 2, 10)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 12
|
||||
010203040102030400000102
|
||||
> blkcpy(B,32767)
|
||||
> B
|
||||
; blkcpy(B,32767)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 16
|
||||
010203040102030400000102ff7f0000
|
||||
> mat M[2,2]
|
||||
> blkcpy(M, A)
|
||||
> M
|
||||
; mat M[2,2]
|
||||
; blkcpy(M, A)
|
||||
; M
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 1
|
||||
[0,1] = 2
|
||||
[1,0] = 3
|
||||
[1,1] = 4
|
||||
> blkcpy(M, A, 2, 2)
|
||||
> M
|
||||
; blkcpy(M, A, 2, 2)
|
||||
; M
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 1
|
||||
[0,1] = 2
|
||||
[1,0] = 1
|
||||
[1,1] = 2
|
||||
|
||||
> A = blk() = {1,2,3,4}
|
||||
> B = blk()
|
||||
> copy(A,B)
|
||||
> B
|
||||
; A = blk() = {1,2,3,4}
|
||||
; B = blk()
|
||||
; copy(A,B)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 4
|
||||
01020304
|
||||
> copy(A,B)
|
||||
> B
|
||||
; copy(A,B)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 8
|
||||
0102030401020304
|
||||
> copy(A,B,1,2)
|
||||
> B
|
||||
; copy(A,B,1,2)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 10
|
||||
01020304010203040203
|
||||
> mat M[2,2]
|
||||
> copy(A,M)
|
||||
> M
|
||||
; mat M[2,2]
|
||||
; copy(A,M)
|
||||
; M
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 1
|
||||
[0,1] = 2
|
||||
[1,0] = 3
|
||||
[1,1] = 4
|
||||
|
||||
> copy(A,M,2)
|
||||
> M
|
||||
; copy(A,M,2)
|
||||
; M
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 3
|
||||
[0,1] = 4
|
||||
[1,0] = 3
|
||||
[1,1] = 4
|
||||
|
||||
> copy(A,M,0,2,2)
|
||||
> M
|
||||
; copy(A,M,0,2,2)
|
||||
; M
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 3
|
||||
[0,1] = 4
|
||||
@@ -207,8 +207,8 @@ SEE ALSO
|
||||
## 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,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: blkcpy,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blkcpy,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 14:08:50
|
||||
|
18
help/blkfree
18
help/blkfree
@@ -23,27 +23,27 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
|
||||
> B1 = blk("foo")
|
||||
> B2 = blk("Second block")
|
||||
; B1 = blk("foo")
|
||||
; B2 = blk("Second block")
|
||||
show blocks
|
||||
id name
|
||||
---- -----
|
||||
0 foo
|
||||
1 Second block
|
||||
|
||||
> blkfree(B1)
|
||||
> show blocks
|
||||
; blkfree(B1)
|
||||
; show blocks
|
||||
id name
|
||||
---- -----
|
||||
1 Second block
|
||||
|
||||
> B1
|
||||
; B1
|
||||
block 0: foo
|
||||
chunksize = 256, maxsize = 0, datalen = 0
|
||||
NULL
|
||||
|
||||
> blk(B1); B[7] = 5
|
||||
> B1
|
||||
; blk(B1); B[7] = 5
|
||||
; B1
|
||||
block 0: foo
|
||||
chunksize = 256, maxsize = 256, datalen = 8
|
||||
0000000000000005
|
||||
@@ -73,8 +73,8 @@ SEE ALSO
|
||||
## 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: blkfree,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: blkfree,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blkfree,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 13:07:13
|
||||
|
16
help/blocks
16
help/blocks
@@ -20,17 +20,17 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
|
||||
> A = blk("alpha")
|
||||
> B = blk("beta") = {1,2,3}
|
||||
> blocks()
|
||||
; A = blk("alpha")
|
||||
; B = blk("beta") = {1,2,3}
|
||||
; blocks()
|
||||
2
|
||||
> blocks(1)
|
||||
; blocks(1)
|
||||
block 1: beta
|
||||
chunksize = 256, maxsize = 256, datalen = 3
|
||||
010203
|
||||
> blocks(2)
|
||||
; blocks(2)
|
||||
Error 10211
|
||||
> strerror()
|
||||
; strerror()
|
||||
"Non-allocated index number for blocks"
|
||||
|
||||
LIMITS
|
||||
@@ -58,8 +58,8 @@ SEE ALSO
|
||||
## 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: blocks,v 29.3 2002/07/10 11:47:04 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: blocks,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blocks,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 13:07:13
|
||||
|
30
help/bround
30
help/bround
@@ -66,38 +66,38 @@ DESCRIPTION
|
||||
variables, so their values are not changed by the call.
|
||||
|
||||
EXAMPLES
|
||||
> a = 7/32, b = -7/32
|
||||
; a = 7/32, b = -7/32
|
||||
|
||||
> print a, b
|
||||
; print a, b
|
||||
.21875 -.21875
|
||||
|
||||
> print round(a,3,0), round(a,3,1), round(a,3,2), print round(a,3,3)
|
||||
; print round(a,3,0), round(a,3,1), round(a,3,2), print round(a,3,3)
|
||||
.218, .219, .218, .219
|
||||
|
||||
> print round(b,3,0), round(b,3,1), round(b,3,2), print round(b,3,3)
|
||||
; print round(b,3,0), round(b,3,1), round(b,3,2), print round(b,3,3)
|
||||
-.219, -.218, -.218, -.219
|
||||
|
||||
> print round(a,3,16), round(a,3,17), round(a,3,18), print round(a,3,19)
|
||||
; print round(a,3,16), round(a,3,17), round(a,3,18), print round(a,3,19)
|
||||
.2188 .2188 .2188 .2188
|
||||
|
||||
> print round(a,4,16), round(a,4,17), round(a,4,18), print round(a,4,19)
|
||||
; print round(a,4,16), round(a,4,17), round(a,4,18), print round(a,4,19)
|
||||
.2187 .2188 .2187 .2188
|
||||
|
||||
> print round(a,2,8), round(a,3,8), round(a,4,8), round(a,5,8)
|
||||
; print round(a,2,8), round(a,3,8), round(a,4,8), round(a,5,8)
|
||||
.22 .218 .2188 .21875
|
||||
|
||||
> print round(a,2,24), round(a,3,24), round(a,4,24), round(a,5,24)
|
||||
; print round(a,2,24), round(a,3,24), round(a,4,24), round(a,5,24)
|
||||
.22 .219 .2188 .21875
|
||||
|
||||
> c = 21875
|
||||
> print round(c,-2,0), round(c,-2,1), round(c,-3,0), round(c,-3,16)
|
||||
; c = 21875
|
||||
; print round(c,-2,0), round(c,-2,1), round(c,-3,0), round(c,-3,16)
|
||||
21800 21900 21000 22000
|
||||
|
||||
> print round(c,2,32), round(c,2,33), round(c,2,56), round(c,4,56)
|
||||
; print round(c,2,32), round(c,2,33), round(c,2,56), round(c,4,56)
|
||||
21000 22000 22000 21880
|
||||
|
||||
> A = list(1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8)
|
||||
> print round(A,2,24)
|
||||
; A = list(1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8)
|
||||
; print round(A,2,24)
|
||||
|
||||
list(7 elements, 7 nonzero):
|
||||
[[0]] = .12
|
||||
@@ -138,8 +138,8 @@ SEE ALSO
|
||||
## 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: bround,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: bround,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bround,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 00:22:35
|
||||
|
12
help/btrunc
12
help/btrunc
@@ -22,16 +22,16 @@ DESCRIPTION
|
||||
int(x).
|
||||
|
||||
EXAMPLE
|
||||
> print btrunc(pi()), btrunc(pi(), 10)
|
||||
; print btrunc(pi()), btrunc(pi(), 10)
|
||||
3 3.140625
|
||||
|
||||
> print btrunc(3.3), btrunc(3.7), btrunc(3.3, 2), btrunc(3.7, 2)
|
||||
; print btrunc(3.3), btrunc(3.7), btrunc(3.3, 2), btrunc(3.7, 2)
|
||||
3 3 3.25 3.5
|
||||
|
||||
> print btrunc(-3.3), btrunc(-3.7), btrunc(-3.3, 2), btrunc(-3.7, 2)
|
||||
; print btrunc(-3.3), btrunc(-3.7), btrunc(-3.3, 2), btrunc(-3.7, 2)
|
||||
-3 -3 -3.25 -3.5
|
||||
|
||||
> print btrunc(55.123, -4), btrunc(-55.123, -4)
|
||||
; print btrunc(55.123, -4), btrunc(-55.123, -4)
|
||||
48 -48
|
||||
|
||||
LIMITS
|
||||
@@ -59,8 +59,8 @@ SEE ALSO
|
||||
## 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: btrunc,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: btrunc,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/btrunc,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 00:44:27
|
||||
|
@@ -18,7 +18,7 @@ DESCRIPTION
|
||||
> !stty echo -cbreak
|
||||
|
||||
EXAMPLE
|
||||
> calc_tty();
|
||||
; calc_tty();
|
||||
|
||||
LIBRARY
|
||||
none
|
||||
@@ -42,8 +42,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.1 $
|
||||
## @(#) $Id: calc_tty,v 29.1 2000/12/14 10:31:45 chongo Exp $
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: calc_tty,v 29.2 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/calc_tty,v $
|
||||
##
|
||||
## Under source code control: 2000/12/14 01:33:00
|
||||
|
@@ -25,7 +25,7 @@ DESCRIPTION
|
||||
from (x,y) = (0,0) to (x,y) = (n,n) for which always y <= x.
|
||||
|
||||
EXAMPLE
|
||||
> print catalan(2), catalan(3), catalan(4), catalan(20)
|
||||
; print catalan(2), catalan(3), catalan(4), catalan(20)
|
||||
2 5 14 6564120420
|
||||
|
||||
LIMITS
|
||||
@@ -53,8 +53,8 @@ SEE ALSO
|
||||
## 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: catalan,v 29.2 2000/12/17 12:27:58 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: catalan,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/catalan,v $
|
||||
##
|
||||
## Under source code control: 2000/12/14 01:33:00
|
||||
|
@@ -20,7 +20,7 @@ DESCRIPTION
|
||||
by ceil(t).
|
||||
|
||||
EXAMPLE
|
||||
> print ceil(27), ceil(1.23), ceil(-4.56), ceil(7.8 - 9.1i)
|
||||
; print ceil(27), ceil(1.23), ceil(-4.56), ceil(7.8 - 9.1i)
|
||||
27 2 -4 8-9i
|
||||
|
||||
LIMITS
|
||||
@@ -48,8 +48,8 @@ SEE ALSO
|
||||
## 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: ceil,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: ceil,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/ceil,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 01:12:01
|
||||
|
18
help/cfappr
18
help/cfappr
@@ -66,17 +66,17 @@ DESCRIPTION
|
||||
exceeding n is 1/cfappr(1/x, n, 16).
|
||||
|
||||
EXAMPLE
|
||||
> c = config("mode", "frac")
|
||||
> x = 43/30; u = cfappr(x, 10, 0); v = cfappr(x, 10, 1);
|
||||
> print u, v, x - u, v - x, v - u, cfappr(x, 10, 16)
|
||||
; c = config("mode", "frac")
|
||||
; x = 43/30; u = cfappr(x, 10, 0); v = cfappr(x, 10, 1);
|
||||
; print u, v, x - u, v - x, v - u, cfappr(x, 10, 16)
|
||||
10/7 13/9 1/210 1/90 1/63 10/7
|
||||
|
||||
> pi = pi(1e-10)
|
||||
> print cfappr(pi, 100, 16), cfappr(pi, .01, 16), cfappr(pi, 1e-6, 16)
|
||||
; pi = pi(1e-10)
|
||||
; print cfappr(pi, 100, 16), cfappr(pi, .01, 16), cfappr(pi, 1e-6, 16)
|
||||
311/99 22/7 355/113
|
||||
|
||||
> x = 17/12; u = cfappr(x,4,0); v = cfappr(x,4,1);
|
||||
> print u, v, x - u, v - x, cfappr(x,4,16)
|
||||
; x = 17/12; u = cfappr(x,4,0); v = cfappr(x,4,1);
|
||||
; print u, v, x - u, v - x, cfappr(x,4,16)
|
||||
4/3 3/2 1/12 1/12 3/2
|
||||
|
||||
LIMITS
|
||||
@@ -104,8 +104,8 @@ SEE ALSO
|
||||
## 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: cfappr,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cfappr,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cfappr,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 01:23:59
|
||||
|
12
help/cfsim
12
help/cfsim
@@ -95,13 +95,13 @@ DESCRIPTION
|
||||
cfsim(1/x, rnd) = 1/cfsim(x, rnd).
|
||||
|
||||
EXAMPLE
|
||||
> c = config("mode", "frac");
|
||||
; c = config("mode", "frac");
|
||||
|
||||
> print cfsim(43/30, 0), cfsim(43/30, 1), cfsim(43/30, 8), cfsim(43/30,16)
|
||||
; print cfsim(43/30, 0), cfsim(43/30, 1), cfsim(43/30, 8), cfsim(43/30,16)
|
||||
10/7 33/23 10/7 33/23
|
||||
|
||||
> x = pi(1e-20); c = config("mode", "frac");
|
||||
> while (!isint(x)) {x = cfsim(x,8); if (den(x) < 1e6) print x,:;}
|
||||
; x = pi(1e-20); c = config("mode", "frac");
|
||||
; while (!isint(x)) {x = cfsim(x,8); if (den(x) < 1e6) print x,:;}
|
||||
1146408/364913 312689/99532 104348/33215 355/113 22/7 3
|
||||
|
||||
LIMITS
|
||||
@@ -129,8 +129,8 @@ SEE ALSO
|
||||
## 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: cfsim,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cfsim,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cfsim,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 01:29:45
|
||||
|
@@ -14,7 +14,7 @@ DESCRIPTION
|
||||
the same value as j. For j = 0, returns the null string "".
|
||||
|
||||
EXAMPLE
|
||||
> print char(0102), char(0x6f), char(119), char(0145), char(0x6e)
|
||||
; print char(0102), char(0x6f), char(119), char(0145), char(0x6e)
|
||||
B o w e n
|
||||
|
||||
LIMITS
|
||||
@@ -42,8 +42,8 @@ SEE ALSO
|
||||
## 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: char,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: char,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/char,v $
|
||||
##
|
||||
## Under source code control: 1994/09/30 01:45:45
|
||||
|
12
help/cmp
12
help/cmp
@@ -92,16 +92,16 @@ DESCRIPTION
|
||||
for example, cmp(2, "2"), returns the null value.
|
||||
|
||||
EXAMPLE
|
||||
> print cmp(3,4), cmp(4,3), cmp(4,4), cmp("a","b"), cmp("abcd","abc")
|
||||
; print cmp(3,4), cmp(4,3), cmp(4,4), cmp("a","b"), cmp("abcd","abc")
|
||||
-1 1 0 -1 1
|
||||
|
||||
> print cmp(3,4i), cmp(4,4i), cmp(5,4i), cmp(-5,4i), cmp(-4i,5), cmp(-4i,-5)
|
||||
; print cmp(3,4i), cmp(4,4i), cmp(5,4i), cmp(-5,4i), cmp(-4i,5), cmp(-4i,-5)
|
||||
1-1i 1-1i 1-1i -1-1i -1-1i 1-1i
|
||||
|
||||
> print cmp(3i,4i), cmp(4i,4i), cmp(5i,4i), cmp(3+4i,5), cmp(3+4i,-5)
|
||||
; print cmp(3i,4i), cmp(4i,4i), cmp(5i,4i), cmp(3+4i,5), cmp(3+4i,-5)
|
||||
-1i 0 1i -1+1i 1+1i
|
||||
|
||||
> print cmp(3+4i,3+4i), cmp(3+4i,3-4i), cmp(3+4i,2+3i), cmp(3+4i,-4-5i)
|
||||
; print cmp(3+4i,3+4i), cmp(3+4i,3-4i), cmp(3+4i,2+3i), cmp(3+4i,-4-5i)
|
||||
0 1i 1+1i 1+1i
|
||||
|
||||
LIMITS
|
||||
@@ -130,8 +130,8 @@ SEE ALSO
|
||||
## 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: cmp,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cmp,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cmp,v $
|
||||
##
|
||||
## Under source code control: 1994/10/20 02:52:30
|
||||
|
@@ -21,10 +21,10 @@ DESCRIPTION
|
||||
may be chosen from x items ignoring the order in which they are chosen.
|
||||
|
||||
EXAMPLE
|
||||
> print comb(7,3), comb(7,4), comb(7,5), comb(3,0), comb(0,0)
|
||||
; print comb(7,3), comb(7,4), comb(7,5), comb(3,0), comb(0,0)
|
||||
35 35 21 1 1
|
||||
|
||||
> print comb(2^31+1,2^31-1)
|
||||
; print comb(2^31+1,2^31-1)
|
||||
2305843010287435776
|
||||
|
||||
LIMITS
|
||||
@@ -54,8 +54,8 @@ SEE ALSO
|
||||
## 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: comb,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: comb,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/comb,v $
|
||||
##
|
||||
## Under source code control: 1994/10/20 04:03:02
|
||||
|
65
help/command
65
help/command
@@ -18,6 +18,7 @@ Command sequence
|
||||
-----------------
|
||||
define function(params) { body }
|
||||
define function(params) = expression
|
||||
|
||||
This first form defines a full function which can consist
|
||||
of declarations followed by many statements which implement
|
||||
the function.
|
||||
@@ -42,16 +43,30 @@ Command sequence
|
||||
|
||||
read calc commands
|
||||
------------------
|
||||
read $var
|
||||
read -once $var
|
||||
read filename
|
||||
read -once filename
|
||||
|
||||
This reads definitions from the specified calc resource filename.
|
||||
|
||||
The name can be quoted if desired. The calculator uses the
|
||||
CALCPATH environment variable to search through the specified
|
||||
directories for the filename, similarly to the use of the
|
||||
PATH environment variable. If CALCPATH is not defined,
|
||||
then a default path which is usually ":/usr/local/lib/calc"
|
||||
is used.
|
||||
In the 1st and 2nd forms, if var is a global variable string
|
||||
value, then the value of that variable is used as a filename.
|
||||
|
||||
The following is equivalent to read lucas.cal or read "lucas.cal":
|
||||
|
||||
global var = "lucas.cal";
|
||||
read $var;
|
||||
|
||||
In the 3rd or 4th forms, the filename argument is treated
|
||||
as a literal string, not a variable. In these forms, the
|
||||
name can be quoted if desired.
|
||||
|
||||
The calculator uses the CALCPATH environment variable to
|
||||
search through the specified directories for the filename,
|
||||
similarly to the use of the PATH environment variable.
|
||||
If CALCPATH is not defined, then a default path which is
|
||||
usually ":/usr/local/lib/calc" is used.
|
||||
|
||||
The ".cal" extension is defaulted for input files, so that
|
||||
if "filename" is not found, then "filename.cal" is then
|
||||
@@ -76,7 +91,9 @@ Command sequence
|
||||
|
||||
write calc commands
|
||||
-------------------
|
||||
write $var
|
||||
write filename
|
||||
|
||||
This writes the values of all global variables to the
|
||||
specified filename, in such a way that the file can be
|
||||
later read in order to recreate the variable values.
|
||||
@@ -85,6 +102,19 @@ Command sequence
|
||||
matrices, lists, and objects are not saved. Function
|
||||
definitions are also not saved.
|
||||
|
||||
In the 1st form, if var is a global variable string
|
||||
value, then the value of that variable is used as a filename.
|
||||
|
||||
The following is equivalent to write dump.out or
|
||||
write "dump.out":
|
||||
|
||||
global var = "dump.out";
|
||||
write $var;
|
||||
|
||||
In the 2nd form, the filename argument is treated as a literal
|
||||
string, not a variable. In this form, the name can be quoted
|
||||
if desired.
|
||||
|
||||
If the -m mode disallows opening of files for writing,
|
||||
this command will be disabled.
|
||||
|
||||
@@ -95,6 +125,7 @@ Command sequence
|
||||
quit string
|
||||
exit
|
||||
exit string
|
||||
|
||||
The action of these commands depends on where they are used.
|
||||
At the interactive level, they will cause calc it edit.
|
||||
This is the normal way to leave the calculator. In any
|
||||
@@ -131,6 +162,7 @@ Command sequence
|
||||
-----
|
||||
abort
|
||||
abort string
|
||||
|
||||
This command behaves like QUIT except that it will attempt
|
||||
to return to the interactive level if permitted, otherwise
|
||||
calc exit.
|
||||
@@ -143,6 +175,7 @@ Command sequence
|
||||
------------------------
|
||||
cd
|
||||
cd dir
|
||||
|
||||
Change the current directory to 'dir'. If 'dir' is ommitted,
|
||||
change the current directory to the home directory, if $HOME
|
||||
is set in the environment.
|
||||
@@ -151,6 +184,7 @@ Command sequence
|
||||
show information
|
||||
----------------
|
||||
show item
|
||||
|
||||
This command displays some information where 'item' is
|
||||
one of the following:
|
||||
|
||||
@@ -185,11 +219,24 @@ Command sequence
|
||||
|
||||
calc help
|
||||
---------
|
||||
help
|
||||
help $var
|
||||
help name
|
||||
|
||||
This displays a help related to 'name' or general
|
||||
help of none is given.
|
||||
|
||||
In the 1st form, if var is a global variable string
|
||||
value, then the value of that variable is used as a name.
|
||||
|
||||
The following is equivalent to help command or help "command":
|
||||
|
||||
global var = "command";
|
||||
help $var;
|
||||
|
||||
In the 2nd form, the filename argument is treated as a literal
|
||||
string, not a variable. In this form, the name can be quoted
|
||||
if desired.
|
||||
|
||||
|
||||
=-=
|
||||
|
||||
@@ -323,8 +370,8 @@ Command sequence
|
||||
## 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: command,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: command,v 29.3 2006/05/20 10:01:33 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/command,v $
|
||||
##
|
||||
## Under source code control: 1991/07/21 04:37:17
|
||||
|
@@ -28,7 +28,7 @@ DESCRIPTION
|
||||
conjugate of the corresponding component of a.
|
||||
|
||||
EXAMPLE
|
||||
> print conj(3), conj(3 + 4i)
|
||||
; print conj(3), conj(3 + 4i)
|
||||
3 3-4i
|
||||
|
||||
LIMITS
|
||||
@@ -56,8 +56,8 @@ SEE ALSO
|
||||
## 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: conj,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: conj,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/conj,v $
|
||||
##
|
||||
## Under source code control: 1995/10/03 10:40:01
|
||||
|
14
help/cos
14
help/cos
@@ -15,14 +15,14 @@ DESCRIPTION
|
||||
absolute value than .75 * eps.
|
||||
|
||||
EXAMPLE
|
||||
> print cos(1, 1e-5), cos(1, 1e-10), cos(1, 1e-15), cos(1, 1e-20)
|
||||
; print cos(1, 1e-5), cos(1, 1e-10), cos(1, 1e-15), cos(1, 1e-20)
|
||||
.5403 .5403023059 .54030230586814 .5403023058681397174
|
||||
|
||||
> print cos(2 + 3i, 1e-5), cos(2 + 3i, 1e-10)
|
||||
; print cos(2 + 3i, 1e-5), cos(2 + 3i, 1e-10)
|
||||
-4.18963-9.10923i -4.189625691-9.1092278938i
|
||||
|
||||
> pi = pi(1e-20)
|
||||
> print cos(pi/3, 1e-10), cos(pi/2, 1e-10), cos(pi, 1e-10)
|
||||
; pi = pi(1e-20)
|
||||
; print cos(pi/3, 1e-10), cos(pi/2, 1e-10), cos(pi, 1e-10)
|
||||
.5 0 -1
|
||||
|
||||
LIMITS
|
||||
@@ -30,7 +30,7 @@ LIMITS
|
||||
|
||||
LINK LIBRARY
|
||||
NUMBER *qcos(NUMBER *x, NUMBER *eps)
|
||||
COMPLEX *ccos(COMPLEX *x, NUMBER *eps)
|
||||
COMPLEX *c_cos(COMPLEX *x, NUMBER *eps)
|
||||
|
||||
SEE ALSO
|
||||
sin, tan, sec, csc, cot, epsilon
|
||||
@@ -51,8 +51,8 @@ SEE ALSO
|
||||
## 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: cos,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: cos,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cos,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:27
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
cosh(x) = (exp(x) + exp(-x))/2
|
||||
|
||||
EXAMPLE
|
||||
> print cosh(1, 1e-5), cosh(1, 1e-10), cosh(1, 1e-15), cosh(1, 1e-20)
|
||||
; print cosh(1, 1e-5), cosh(1, 1e-10), cosh(1, 1e-15), cosh(1, 1e-20)
|
||||
1.54308 1.5430806348 1.543080634815244 1.54308063481524377848
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## 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: cosh,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cosh,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cosh,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 01:40:28
|
||||
|
6
help/cot
6
help/cot
@@ -15,7 +15,7 @@ DESCRIPTION
|
||||
in absolute value than .75 * eps.
|
||||
|
||||
EXAMPLE
|
||||
> print cot(1, 1e-5), cot(1, 1e-10), cot(1, 1e-15), cot(1, 1e-20)
|
||||
; print cot(1, 1e-5), cot(1, 1e-10), cot(1, 1e-15), cot(1, 1e-20)
|
||||
.64209 .6420926159 .642092615934331 .64209261593433070301
|
||||
|
||||
LIMITS
|
||||
@@ -43,8 +43,8 @@ SEE ALSO
|
||||
## 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: cot,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cot,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cot,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
coth(x) = (exp(2*x) + 1)/(exp(2*x) - 1)
|
||||
|
||||
EXAMPLE
|
||||
> print coth(1, 1e-5), coth(1, 1e-10), coth(1, 1e-15), coth(1, 1e-20)
|
||||
; print coth(1, 1e-5), coth(1, 1e-10), coth(1, 1e-15), coth(1, 1e-20)
|
||||
1.31304 1.3130352855 1.313035285499331 1.31303528549933130364
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## 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: coth,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: coth,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/coth,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
10
help/count
10
help/count
@@ -16,9 +16,9 @@ DESCRIPTION
|
||||
tests as "true".
|
||||
|
||||
EXAMPLE
|
||||
> define f(a) = (a < 5)
|
||||
> A = list(1,2,7,6,4,8)
|
||||
> count(A, "f")
|
||||
; define f(a) = (a < 5)
|
||||
; A = list(1,2,7,6,4,8)
|
||||
; count(A, "f")
|
||||
3
|
||||
|
||||
LIMITS
|
||||
@@ -46,8 +46,8 @@ SEE ALSO
|
||||
## 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: count,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: count,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/count,v $
|
||||
##
|
||||
## Under source code control: 1995/07/10 02:09:31
|
||||
|
10
help/cp
10
help/cp
@@ -17,9 +17,9 @@ DESCRIPTION
|
||||
{x1 * y2 - x2 * y1, x3 * y1 - x1 * y3, x1 * y2 - x2 * y1}
|
||||
|
||||
EXAMPLE
|
||||
> mat x[3] = {2,3,4}
|
||||
> mat y[3] = {3,4,5}
|
||||
> print cp(x,y)
|
||||
; mat x[3] = {2,3,4}
|
||||
; mat y[3] = {3,4,5}
|
||||
; print cp(x,y)
|
||||
|
||||
mat [3] (3 elements, 3 nonzero):
|
||||
[0] = -1
|
||||
@@ -52,8 +52,8 @@ SEE ALSO
|
||||
## 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: cp,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cp,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cp,v $
|
||||
##
|
||||
## Under source code control: 1995/10/05 04:52:26
|
||||
|
6
help/csc
6
help/csc
@@ -15,7 +15,7 @@ DESCRIPTION
|
||||
in absolute value than .75 * eps.
|
||||
|
||||
EXAMPLE
|
||||
> print csc(1, 1e-5), csc(1, 1e-10), csc(1, 1e-15), csc(1, 1e-20)
|
||||
; print csc(1, 1e-5), csc(1, 1e-10), csc(1, 1e-15), csc(1, 1e-20)
|
||||
1.1884 1.1883951058 1.188395105778121 1.18839510577812121626
|
||||
|
||||
LIMITS
|
||||
@@ -43,8 +43,8 @@ SEE ALSO
|
||||
## 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: csc,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: csc,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/csc,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -17,7 +17,7 @@ DESCRIPTION
|
||||
csch(x) = 2/(exp(x) - exp(-x))
|
||||
|
||||
EXAMPLE
|
||||
> print csch(1, 1e-5), csch(1, 1e-10), csch(1, 1e-15), csch(1, 1e-20)
|
||||
; print csch(1, 1e-5), csch(1, 1e-10), csch(1, 1e-15), csch(1, 1e-20)
|
||||
.85092 .8509181282 .850918128239322 .85091812823932154513
|
||||
|
||||
LIMITS
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## 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: csch,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: csch,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/csch,v $
|
||||
##
|
||||
## Under source code control: 1995/11/13 03:49:00
|
||||
|
@@ -16,7 +16,7 @@ DESCRIPTION
|
||||
The 25th ctime() character, '\n' is removed.
|
||||
|
||||
EXAMPLE
|
||||
> printf("The time is now %s.\n", ctime())
|
||||
; printf("The time is now %s.\n", ctime())
|
||||
The time is now Mon Apr 15 12:41:44 1996.
|
||||
|
||||
LIMITS
|
||||
@@ -44,8 +44,8 @@ SEE ALSO
|
||||
## 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: ctime,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: ctime,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/ctime,v $
|
||||
##
|
||||
## Under source code control: 1996/04/30 03:05:18
|
||||
|
10
help/custom
10
help/custom
@@ -70,19 +70,19 @@ DESCRIPTION
|
||||
EXAMPLE
|
||||
If calc compiled with ALLOW_CUSTOM= (custom disabled):
|
||||
|
||||
> print custom("sysinfo", "baseb")
|
||||
; print custom("sysinfo", "baseb")
|
||||
Calc was built with custom functions disabled
|
||||
Error 10195
|
||||
|
||||
If calc compiled with ALLOW_CUSTOM= -DCUSTOM and is invoked without -C:
|
||||
|
||||
> print custom("sysinfo", "baseb")
|
||||
; print custom("sysinfo", "baseb")
|
||||
Calc must be run with a -C argument to use custom function
|
||||
Error 10194
|
||||
|
||||
If calc compiled with ALLOW_CUSTOM= -DCUSTOM and is invoked with -C:
|
||||
|
||||
> print custom("sysinfo", "baseb")
|
||||
; print custom("sysinfo", "baseb")
|
||||
32
|
||||
|
||||
LIMITS
|
||||
@@ -110,8 +110,8 @@ SEE ALSO
|
||||
## 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,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: custom,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/custom,v $
|
||||
##
|
||||
## Under source code control: 1997/03/09 16:33:22
|
||||
|
@@ -166,8 +166,8 @@ DESCRIPTION
|
||||
matrices or objects.
|
||||
|
||||
EXAMPLE
|
||||
> define f(a,b) = 2*a + b;
|
||||
> define g(alpha, beta)
|
||||
; define f(a,b) = 2*a + b;
|
||||
; define g(alpha, beta)
|
||||
>> {
|
||||
>> local a, pi2;
|
||||
>>
|
||||
@@ -207,8 +207,8 @@ SEE ALSO
|
||||
## 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: define,v 29.3 2000/07/17 15:36:26 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: define,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/define,v $
|
||||
##
|
||||
##
|
||||
|
10
help/delete
10
help/delete
@@ -15,7 +15,7 @@ DESCRIPTION
|
||||
the value of this element.
|
||||
|
||||
EXAMPLE
|
||||
> lst = list(2,3,4,5)
|
||||
; lst = list(2,3,4,5)
|
||||
|
||||
list (4 elements, 4 nonzero):
|
||||
[[0]] = 2
|
||||
@@ -23,9 +23,9 @@ EXAMPLE
|
||||
[[2]] = 4
|
||||
[[3]] = 5
|
||||
|
||||
> delete(lst, 2)
|
||||
; delete(lst, 2)
|
||||
4
|
||||
> print lst
|
||||
; print lst
|
||||
|
||||
list (3 elements, 3 nonzero):
|
||||
[[0]] = 2
|
||||
@@ -57,8 +57,8 @@ SEE ALSO
|
||||
## 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: delete,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: delete,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/delete,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 03:13:18
|
||||
|
6
help/den
6
help/den
@@ -26,7 +26,7 @@ DESCRIPTION
|
||||
The denominator for this n/d is d.
|
||||
|
||||
EXAMPLE
|
||||
> print den(7), den(-1.25), den(121/33)
|
||||
; print den(7), den(-1.25), den(121/33)
|
||||
1 4 3
|
||||
|
||||
LIMITS
|
||||
@@ -54,8 +54,8 @@ SEE ALSO
|
||||
## 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: den,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: den,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/den,v $
|
||||
##
|
||||
## Under source code control: 1995/10/05 04:52:26
|
||||
|
@@ -58,18 +58,18 @@ DESCRIPTION
|
||||
**c returns the lvalue a; ***c returns the value of a.
|
||||
|
||||
EXAMPLE
|
||||
> mat A[3] = {1,2,3}
|
||||
> p = &A[0]
|
||||
> print *p, *(p + 1), *(p + 2)
|
||||
; mat A[3] = {1,2,3}
|
||||
; p = &A[0]
|
||||
; print *p, *(p + 1), *(p + 2)
|
||||
1 2 3
|
||||
|
||||
> *(p + 1) = 4
|
||||
> print A[1]
|
||||
; *(p + 1) = 4
|
||||
; print A[1]
|
||||
4
|
||||
|
||||
> A[0] = &a
|
||||
> a = 7
|
||||
> print **p
|
||||
; A[0] = &a
|
||||
; a = 7
|
||||
; print **p
|
||||
7
|
||||
|
||||
LIMITS
|
||||
@@ -97,8 +97,8 @@ SEE ALSO
|
||||
## 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: dereference,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: dereference,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/dereference,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:34
|
||||
|
36
help/det
36
help/det
@@ -37,25 +37,25 @@ DESCRIPTION
|
||||
- (a * h - g * b) * (a * f - d * c))/a.
|
||||
|
||||
EXAMPLE
|
||||
> mat A[3,3] = {2, 3, 5, 7, 11, 13, 17, 19, 23}
|
||||
> c = config("mode", "frac")
|
||||
> print det(A), det(A^2), det(A^3), det(A^-1)
|
||||
; mat A[3,3] = {2, 3, 5, 7, 11, 13, 17, 19, 23}
|
||||
; c = config("mode", "frac")
|
||||
; print det(A), det(A^2), det(A^3), det(A^-1)
|
||||
-78 6084 -474552 -1/78
|
||||
|
||||
> 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(x) {local obj res v = {x % md}; return v;}
|
||||
> md = 0
|
||||
> mat A[2,2] = {res(2), res(3), res(5), res(7)}
|
||||
> md = 5
|
||||
> print det(A)
|
||||
; 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(x) {local obj res v = {x % md}; return v;}
|
||||
; md = 0
|
||||
; mat A[2,2] = {res(2), res(3), res(5), res(7)}
|
||||
; md = 5
|
||||
; print det(A)
|
||||
obj res {4}
|
||||
> md = 6
|
||||
> print det(A)
|
||||
; md = 6
|
||||
; print det(A)
|
||||
obj res {5}
|
||||
|
||||
Note that if A had been a 3 x 3 or larger matrix, res_div(a,b) for
|
||||
@@ -89,8 +89,8 @@ SEE ALSO
|
||||
## 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: det,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: det,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/det,v $
|
||||
##
|
||||
## Under source code control: 1995/11/28 11:17:47
|
||||
|
12
help/digits
12
help/digits
@@ -29,16 +29,16 @@ DESCRIPTION
|
||||
digits(-0.123) == 1 combination of all of the above
|
||||
|
||||
EXAMPLE
|
||||
> print digits(100), digits(23209), digits(2^72)
|
||||
; print digits(100), digits(23209), digits(2^72)
|
||||
3 5 22
|
||||
|
||||
> print digits(0), digits(1), digits(-1)
|
||||
; print digits(0), digits(1), digits(-1)
|
||||
1 1 1
|
||||
|
||||
> print digits(-1234), digits(12.3456), digits(107.207)
|
||||
; print digits(-1234), digits(12.3456), digits(107.207)
|
||||
4 2 3
|
||||
|
||||
> print digits(17^463-1, 17), digits(10000, 100), digits(21701, 2)
|
||||
; print digits(17^463-1, 17), digits(10000, 100), digits(21701, 2)
|
||||
3, 15 14
|
||||
|
||||
LIMITS
|
||||
@@ -66,8 +66,8 @@ SEE ALSO
|
||||
## 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: digits,v 29.5 2003/01/26 19:41:35 chongo Exp $
|
||||
## @(#) $Revision: 29.6 $
|
||||
## @(#) $Id: digits,v 29.6 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/digits,v $
|
||||
##
|
||||
## Under source code control: 1995/10/03 10:40:01
|
||||
|
10
help/display
10
help/display
@@ -36,13 +36,13 @@ DESCRIPTION
|
||||
the type of rounding to be used is controlled by config("outround").
|
||||
|
||||
EXAMPLE
|
||||
> print display(), 2/3
|
||||
; print display(), 2/3
|
||||
20 ~0.66666666666666666667
|
||||
|
||||
> print display(40), 2/3
|
||||
; print display(40), 2/3
|
||||
20 ~0.6666666666666666666666666666666666666667
|
||||
|
||||
> print display(5), 2/3
|
||||
; print display(5), 2/3
|
||||
40 ~0.66667
|
||||
|
||||
LIMITS
|
||||
@@ -70,8 +70,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.1 $
|
||||
## @(#) $Id: display,v 29.1 2004/07/26 06:54:41 chongo Exp $
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: display,v 29.2 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/display,v $
|
||||
##
|
||||
## Under source code control: 2004/07/25 23:50:40
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user