Release calc version 2.12.0

This commit is contained in:
Landon Curt Noll
2006-05-21 01:11:18 -07:00
parent 7165fa17c7
commit 58d94b08d8
342 changed files with 8845 additions and 6327 deletions

147
BUGS
View File

@@ -68,33 +68,14 @@ of a context diff patch).
Known bugs: 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 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 us know! See the above for details on how to report and were to
EMail your bug reports and hopefully patches to fix them. EMail your bug reports and hopefully patches to fix them.
* 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) all have
this bug.
Anyone want to track down and fix this bug?
=-= =-=
mis-features in calc: mis-features in calc:
@@ -129,55 +110,6 @@ mis-features in calc:
Problems with old systems that have known work-a-rounds: 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, * There is a bug in gcc-2.95 that causes calc, when compiled with -O2,
to fail the regression test. The work-a-round is to compile with -O to fail the regression test. The work-a-round is to compile with -O
or to use gcc-2.96 or later. or to use gcc-2.96 or later.
@@ -227,59 +159,6 @@ Problems with old systems that have known work-a-rounds:
if (n < 0) n = 0; if (n < 0) n = 0;
z.sign = 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 * There are problems compiling calc on the sparcv9 under 64 bit
Solaris. On that platform, gcc-2.96 is able to compile calc, but 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 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" CCWARN="-DFORCE_STDC -w"
DEBUG="-fast -xarch=v9" DEBUG="-fast -xarch=v9"
* Under BSDI v4, the warnings of the form: ## Copyright (C) 1999-2006 Landon Curt Noll
/usr/include/ctype.h:147: warning: `__runetype' defined but not used
/usr/include/ctype.h:161: warning: `__isctype' defined but not used
/usr/include/ctype.h:170: warning: `toupper' defined but not used
/usr/include/ctype.h:177: warning: `tolower' defined but not used
are seen. These warnings are the result of mis-features in BSDI
include files. They do not have an impact on the operation
or performance. The work-a-round is to ignore these warnings
under BSDI.
## Copyright (C) 1999 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -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. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.22 $ ## @(#) $Revision: 29.24 $
## @(#) $Id: BUGS,v 29.22 2004/10/23 02:25:02 chongo Exp $ ## @(#) $Id: BUGS,v 29.24 2006/05/21 07:54:13 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
## ##
## Under source code control: 1994/03/18 14:06:13 ## Under source code control: 1994/03/18 14:06:13

158
CHANGES
View File

@@ -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: Fixed a bug reported by the sourceforge user: cedars where:
ln(exp(6)) == 3 /* WRONG!!! */ ln(exp(6)) == 3 /* WRONG!!! */
incorrectly returned 1. This bug was fixed by Ernest Bowen 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. was expanded to cover this issue.
Added minor improvements to hash regression testing of pi(). Added minor improvements to hash regression testing of pi().
@@ -2179,6 +2327,8 @@ The following are the changes from calc version 2.10.3t5.38 to 2.11.3t5.46:
into a single section. into a single section.
The following are the changes from calc version 2.10.3t5.34 to 2.10.3t5.37: 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: Per request from David I Bell, the README line:
@@ -5812,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. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.71 $ ## @(#) $Revision: 29.76 $
## @(#) $Id: CHANGES,v 29.71 2005/12/12 06:47:21 chongo Exp $ ## @(#) $Id: CHANGES,v 29.76 2006/05/21 07:55:17 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $
## ##
## Under source code control: 1993/06/02 18:12:57 ## Under source code control: 1993/06/02 18:12:57

View File

@@ -12,8 +12,8 @@ This file is Copyrighted
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. of this license document, but changing it is not allowed.
# @(#) $Revision: 29.7 $ # @(#) $Revision: 29.8 $
# @(#) $Id: COPYING,v 29.7 2003/02/26 16:54:59 chongo Exp $ # @(#) $Id: COPYING,v 29.8 2006/05/01 19:16:57 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/COPYING,v $ # @(#) $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 shs1.c shs1.h shs.c shs.h
md5.c md5.h COPYING COPYING-LGPL 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 The file COPYING-LGPL, which contains a copy of the version 2.1
GNU Lesser General Public License, is itself Copyrighted by the GNU Lesser General Public License, is itself Copyrighted by the

View File

@@ -10,14 +10,13 @@
# or less. It compiles with gcc -O3 -g3 as well. You can change all # or less. It compiles with gcc -O3 -g3 as well. You can change all
# this by modifying the Makefile variables below. # this by modifying the Makefile variables below.
# #
# NOTE: You might want use the READLINE facility and the less pager if # NOTE: You might want use the READLINE facility if your system
# your system supports them. To do this, set: # has the GNU readline headers and libaraies:
# #
# USE_READLINE= -DUSE_READLINE # USE_READLINE= -DUSE_READLINE
# READLINE_LIB= -lreadline -lhistory -lncurses # 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 # Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License # the terms of the version 2.1 of the GNU Lesser General Public License
@@ -33,8 +32,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
MAKEFILE_REV= $$Revision: 29.74 $$ MAKEFILE_REV= $$Revision: 29.75 $$
# @(#) $Id: Makefile.ship,v 29.74 2005/10/18 11:53:37 chongo Exp $ # @(#) $Id: Makefile.ship,v 29.75 2006/05/19 13:54:05 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/Makefile.ship,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/Makefile.ship,v $
# #
# Under source code control: 1990/02/15 01:48:41 # Under source code control: 1990/02/15 01:48:41
@@ -807,10 +806,10 @@ READLINE_INCLUDE=
# #
# Select CALCPAGER= less.exe -ci for DJGPP. # Select CALCPAGER= less.exe -ci for DJGPP.
# #
CALCPAGER= more #CALCPAGER= more
#CALCPAGER= pg #CALCPAGER= pg
#CALCPAGER= cat #CALCPAGER= cat
#CALCPAGER= less CALCPAGER= less
#CALCPAGER= less.exe -ci #CALCPAGER= less.exe -ci
# Debug/Optimize options for ${CC} and ${LCC} # Debug/Optimize options for ${CC} and ${LCC}
@@ -983,6 +982,9 @@ EXT=
# #
# CCOPT are flags given to ${CC} for optimization # CCOPT are flags given to ${CC} for optimization
# CCWARN are flags given to ${CC} for warning message control # 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} # CCMISC are misc flags given to ${CC}
# #
# CFLAGS are all flags given to ${CC} [[often includes CCOPT, CCWARN, CCMISC]] # CFLAGS are all flags given to ${CC} [[often includes CCOPT, CCWARN, CCMISC]]
@@ -1001,6 +1003,7 @@ EXT=
# Tested on Red Hat 6.0 Linux but should run on almost any Linux release. # Tested on Red Hat 6.0 Linux but should run on almost any Linux release.
# #
CCWARN= -Wall -W -Wno-comment CCWARN= -Wall -W -Wno-comment
CCWERR=
CCOPT= ${DEBUG} ${NO_SHARED} CCOPT= ${DEBUG} ${NO_SHARED}
CCMISC= CCMISC=
# #
@@ -1011,13 +1014,14 @@ LDFLAGS= ${NO_SHARED} ${LD_NO_SHARED}
ILDFLAGS= ILDFLAGS=
# #
LCC= gcc 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 #CCWARN= -Wall -W -Wno-comment
#CCWERR=
#CCOPT= ${DEBUG} ${NO_SHARED} #CCOPT= ${DEBUG} ${NO_SHARED}
#CCMISC= #CCMISC=
# #
@@ -1028,8 +1032,7 @@ CC= ${PURIFY} ${LCC}
#ILDFLAGS= #ILDFLAGS=
# #
#LCC= gcc #LCC= gcc
#LCC= gcc2 #CC= ${PURIFY} ${LCC} ${CCWERR}
#CC= ${PURIFY} ${LCC}
# #
### ###
# #
@@ -1039,6 +1042,7 @@ CC= ${PURIFY} ${LCC}
# If -O2 -g is not supported try: DEBUG= -O -g # If -O2 -g is not supported try: DEBUG= -O -g
# #
#CCWARN= #CCWARN=
#CCWERR=
#CCOPT= ${DEBUG} ${NO_SHARED} #CCOPT= ${DEBUG} ${NO_SHARED}
#CCMISC= #CCMISC=
# #
@@ -1049,7 +1053,7 @@ CC= ${PURIFY} ${LCC}
#ILDFLAGS= #ILDFLAGS=
# #
#LCC= cc #LCC= cc
#CC= ${PURIFY} ${LCC} #CC= ${PURIFY} ${LCC} ${CCWERR}
# #
### ###
# #
@@ -1067,6 +1071,7 @@ CC= ${PURIFY} ${LCC}
# woff 1209: cancel 'controlling expression is constant' warnings # woff 1209: cancel 'controlling expression is constant' warnings
# #
#CCWARN= -fullwarn -woff 1209 #CCWARN= -fullwarn -woff 1209
#CCWERR=
#CCOPT= ${DEBUG} ${NO_SHARED} #CCOPT= ${DEBUG} ${NO_SHARED}
#CCMISC= -rdata_shared #CCMISC= -rdata_shared
# #
@@ -1077,7 +1082,7 @@ CC= ${PURIFY} ${LCC}
#ILDFLAGS= #ILDFLAGS=
# #
#LCC= cc -n32 -xansi #LCC= cc -n32 -xansi
#CC= ${PURIFY} ${LCC} #CC= ${PURIFY} ${LCC} ${CCWERR}
# #
### ###
# #
@@ -1090,6 +1095,7 @@ CC= ${PURIFY} ${LCC}
# If 'make check' fails use: DEBUG= -g # If 'make check' fails use: DEBUG= -g
# #
#CCWARN= #CCWARN=
#CCWERR=
#CCOPT= ${DEBUG} ${NO_SHARED} #CCOPT= ${DEBUG} ${NO_SHARED}
#CCMISC= +e #CCMISC= +e
# #
@@ -1100,7 +1106,7 @@ CC= ${PURIFY} ${LCC}
#ILDFLAGS= #ILDFLAGS=
# #
#LCC= cc #LCC= cc
#CC= ${PURIFY} ${LCC} #CC= ${PURIFY} ${LCC} ${CCWERR}
# #
### ###
# #
@@ -1110,6 +1116,7 @@ CC= ${PURIFY} ${LCC}
# If -O2 -g is not supported try: DEBUG= -O -g # If -O2 -g is not supported try: DEBUG= -O -g
# #
#CCWARN= #CCWARN=
#CCWERR=
#CCOPT= ${DEBUG} ${NO_SHARED} #CCOPT= ${DEBUG} ${NO_SHARED}
#CCMISC= -qlanglvl=ansi #CCMISC= -qlanglvl=ansi
# #
@@ -1120,7 +1127,7 @@ CC= ${PURIFY} ${LCC}
#ILDFLAGS= #ILDFLAGS=
# #
#LCC= cc #LCC= cc
#CC= ${PURIFY} ${LCC} #CC= ${PURIFY} ${LCC} ${CCWERR}
# #
### ###
# #
@@ -1133,6 +1140,7 @@ CC= ${PURIFY} ${LCC}
# to avoid the use of -Xc (which as a lose performance wise). # to avoid the use of -Xc (which as a lose performance wise).
# #
#CCWARN= #CCWARN=
#CCWERR=
#CCOPT= ${DEBUG} ${NO_SHARED} #CCOPT= ${DEBUG} ${NO_SHARED}
#CCMISC= -DFORCE_STDC #CCMISC= -DFORCE_STDC
# #
@@ -1143,7 +1151,7 @@ CC= ${PURIFY} ${LCC}
#ILDFLAGS= #ILDFLAGS=
# #
#LCC= cc #LCC= cc
#CC= ${PURIFY} ${LCC} #CC= ${PURIFY} ${LCC} ${CCWERR}
# #
### ###
# #
@@ -1152,6 +1160,7 @@ CC= ${PURIFY} ${LCC}
# For better performance, set the following: DEBUG= -std0 -fast -O4 -static # For better performance, set the following: DEBUG= -std0 -fast -O4 -static
# #
#CCWARN= #CCWARN=
#CCWERR=
#CCOPT= ${DEBUG} ${NO_SHARED} #CCOPT= ${DEBUG} ${NO_SHARED}
#CCMISC= #CCMISC=
# #
@@ -1162,7 +1171,7 @@ CC= ${PURIFY} ${LCC}
#ILDFLAGS= #ILDFLAGS=
# #
#LCC= cc #LCC= cc
#CC= ${PURIFY} ${LCC} #CC= ${PURIFY} ${LCC} ${CCWERR}
############################################################################## ##############################################################################
#-=-=-=-=-=-=-=-=- Be careful if you change something below -=-=-=-=-=-=-=-=-# #-=-=-=-=-=-=-=-=- Be careful if you change something below -=-=-=-=-=-=-=-=-#

226
addop.c
View File

@@ -1,7 +1,7 @@
/* /*
* addop - add opcodes to a function being compiled * 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 * Primary author: David I. Bell
* *
@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.5 $ * @(#) $Revision: 29.8 $
* @(#) $Id: addop.c,v 29.5 2004/02/23 14:04:01 chongo Exp $ * @(#) $Id: addop.c,v 29.8 2006/05/20 08:43:55 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
* *
* Under source code control: 1990/02/15 01:48:10 * Under source code control: 1990/02/15 01:48:10
@@ -184,7 +184,7 @@ void
endfunc(void) endfunc(void)
{ {
register FUNC *fp; /* function just finished */ 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; unsigned long index;
if (oldop != OP_RETURN) { if (oldop != OP_RETURN) {
@@ -211,7 +211,7 @@ endfunc(void)
if (newname[0] != '*' && (conf->traceflags & TRACE_FNCODES)) { if (newname[0] != '*' && (conf->traceflags & TRACE_FNCODES)) {
dumpnames = TRUE; dumpnames = TRUE;
for (size = 0; size < fp->f_opcodecount; ) { for (size = 0; size < fp->f_opcodecount; ) {
printf("%ld: ", (long)size); printf("%u: ", size);
size += dumpop(&fp->f_opcodes[size]); size += dumpop(&fp->f_opcodes[size]);
} }
} }
@@ -451,124 +451,124 @@ addop(long op)
* slightly optimize the code depending on the various combinations. * slightly optimize the code depending on the various combinations.
*/ */
switch (op) { switch (op) {
case OP_GETVALUE: case OP_GETVALUE:
switch (oldop) { switch (oldop) {
case OP_NUMBER: case OP_NUMBER:
case OP_ZERO: case OP_ZERO:
case OP_ONE: case OP_ONE:
case OP_IMAGINARY: case OP_IMAGINARY:
case OP_GETEPSILON: case OP_GETEPSILON:
case OP_SETEPSILON: case OP_SETEPSILON:
case OP_STRING: case OP_STRING:
case OP_UNDEF: case OP_UNDEF:
case OP_GETCONFIG: case OP_GETCONFIG:
case OP_SETCONFIG: case OP_SETCONFIG:
return; return;
case OP_DUPLICATE: case OP_DUPLICATE:
diff = 1; diff = 1;
oldop = OP_DUPVALUE; oldop = OP_DUPVALUE;
break; break;
case OP_FIADDR: case OP_FIADDR:
diff = 1; diff = 1;
oldop = OP_FIVALUE; oldop = OP_FIVALUE;
break; break;
case OP_GLOBALADDR: case OP_GLOBALADDR:
diff = 1 + PTR_SIZE; diff = 1 + PTR_SIZE;
oldop = OP_GLOBALVALUE; oldop = OP_GLOBALVALUE;
break; break;
case OP_LOCALADDR: case OP_LOCALADDR:
oldop = OP_LOCALVALUE; oldop = OP_LOCALVALUE;
break; break;
case OP_PARAMADDR: case OP_PARAMADDR:
oldop = OP_PARAMVALUE; oldop = OP_PARAMVALUE;
break; break;
case OP_ELEMADDR: case OP_ELEMADDR:
oldop = OP_ELEMVALUE; oldop = OP_ELEMVALUE;
break; break;
default: default:
cut = FALSE; cut = FALSE;
} }
if (cut) { if (cut) {
fp->f_opcodes[count - diff] = oldop; fp->f_opcodes[count - diff] = oldop;
return; 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; break;
case OP_POP: case OP_STRING:
switch (oldop) { sfree(findstring((long)fp->f_opcodes[count-1]));
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;
}
break; break;
case OP_NEGATE: case OP_LOCALADDR:
if (oldop == OP_NUMBER) { case OP_PARAMADDR:
q = constvalue(fp->f_opcodes[count-1]); break;
fp->f_opcodes[count-1] = addqconstant(qneg(q)); case OP_GLOBALADDR:
qfree(q); diff = 1 + PTR_SIZE;
return; 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 (oldop == OP_NUMBER) {
if (oldoldop == OP_NUMBER) { if (oldoldop == OP_NUMBER) {
q1 = constvalue(fp->f_opcodes[count - 3]); q1 = constvalue(fp->f_opcodes[count - 3]);
q2 = constvalue(fp->f_opcodes[count - 1]); q2 = constvalue(fp->f_opcodes[count - 1]);
switch (op) { switch (op) {
case OP_DIV: case OP_DIV:
if (qiszero(q2)) { 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; 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) { if (cut) {
qfree(q1); qfree(q1);

144
blkcpy.c
View File

@@ -1,7 +1,7 @@
/* /*
* blkcpy - general values and related routines used by the calculator * blkcpy - general values and related routines used by the calculator
* *
* Copyright (C) 1999-2004 Landon Curt Noll and Ernest Bowen * Copyright (C) 1999-2006 Landon Curt Noll and Ernest Bowen
* *
* Primary author: Landon Curt Noll * Primary author: Landon Curt Noll
* *
@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.5 $ * @(#) $Revision: 29.9 $
* @(#) $Id: blkcpy.c,v 29.5 2004/02/23 14:04:01 chongo Exp $ * @(#) $Id: blkcpy.c,v 29.9 2006/05/20 08:43:55 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $
* *
* Under source code control: 1997/04/18 20:41:26 * Under source code control: 1997/04/18 20:41:26
@@ -73,51 +73,51 @@ copystod(VALUE *svp, long ssi, long num, VALUE *dvp, long dsi)
* determine/check source type * determine/check source type
*/ */
switch(svp->v_type) { switch(svp->v_type) {
case V_NBLOCK: case V_NBLOCK:
if (svp->v_nblock->subtype & V_NOCOPYFROM) if (svp->v_nblock->subtype & V_NOCOPYFROM)
return E_COPY15; return E_COPY15;
sblk = svp->v_nblock->blk; sblk = svp->v_nblock->blk;
if (sblk->data == NULL) if (sblk->data == NULL)
return E_COPY8; return E_COPY8;
break; break;
case V_BLOCK: case V_BLOCK:
sblk = svp->v_block; sblk = svp->v_block;
break; break;
case V_STR: case V_STR:
case V_OCTET: case V_OCTET:
case V_NUM: case V_NUM:
case V_FILE: case V_FILE:
case V_MAT: case V_MAT:
case V_LIST: case V_LIST:
break; break;
default: default:
return E_COPY9; return E_COPY9;
} }
/* /*
* determine/check destination type * determine/check destination type
*/ */
switch(dvp->v_type) { switch(dvp->v_type) {
case V_NBLOCK: case V_NBLOCK:
if (dvp->v_nblock->subtype & V_NOCOPYTO) if (dvp->v_nblock->subtype & V_NOCOPYTO)
return E_COPY16; return E_COPY16;
noreloc |=((dvp->v_nblock->subtype & V_NOREALLOC) != 0); noreloc |=((dvp->v_nblock->subtype & V_NOREALLOC) != 0);
dblk = dvp->v_nblock->blk; dblk = dvp->v_nblock->blk;
if (dblk->data == NULL) if (dblk->data == NULL)
return E_COPY10; return E_COPY10;
break; break;
case V_BLOCK: case V_BLOCK:
noreloc = ((dvp->v_subtype & V_NOREALLOC) != 0); noreloc = ((dvp->v_subtype & V_NOREALLOC) != 0);
dblk = dvp->v_block; dblk = dvp->v_block;
break; break;
case V_STR: case V_STR:
case V_NUM: case V_NUM:
case V_FILE: case V_FILE:
case V_MAT: case V_MAT:
case V_LIST: case V_LIST:
break; break;
default: default:
return E_COPY11; return E_COPY11;
} }
/* /*
@@ -280,7 +280,7 @@ copymat2mat(MATRIX *smat, long ssi, long num, MATRIX *dmat, long dsi)
VALUE *vp; VALUE *vp;
VALUE *vq; VALUE *vq;
VALUE *vtemp; VALUE *vtemp;
short subtype; unsigned short subtype;
if (ssi > smat->m_size) if (ssi > smat->m_size)
return E_COPY2; return E_COPY2;
@@ -311,7 +311,7 @@ copymat2mat(MATRIX *smat, long ssi, long num, MATRIX *dmat, long dsi)
subtype = vq->v_subtype; subtype = vq->v_subtype;
freevalue(vq); freevalue(vq);
*vq = *vp; *vq = *vp;
vq->v_subtype = subtype; vq->v_subtype |= subtype;
} }
free(vtemp); free(vtemp);
return 0; return 0;
@@ -329,7 +329,7 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
VALUE *vq; VALUE *vq;
VALUE *vtemp; VALUE *vtemp;
long i; long i;
short subtype; unsigned short subtype;
if (ssi > blk->datalen) if (ssi > blk->datalen)
return E_COPY2; return E_COPY2;
@@ -363,7 +363,7 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
subtype = vq->v_subtype; subtype = vq->v_subtype;
freevalue(vq); freevalue(vq);
*vq = *vp; *vq = *vp;
vq->v_subtype = subtype; vq->v_subtype |= subtype;
} }
free(vtemp); free(vtemp);
return 0; return 0;
@@ -429,6 +429,7 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
LISTELEM *ep; LISTELEM *ep;
VALUE *vtemp; VALUE *vtemp;
long i; long i;
unsigned short subtype;
if (ssi > smat->m_size) if (ssi > smat->m_size)
return E_COPY2; return E_COPY2;
@@ -456,8 +457,10 @@ copymat2list(MATRIX *smat, long ssi, long num, LIST *lp, long dsi)
ep = listelement(lp, (long) dsi); ep = listelement(lp, (long) dsi);
i = num; i = num;
while (i-- > 0) { while (i-- > 0) {
subtype = ep->e_value.v_subtype;
freevalue(&ep->e_value); freevalue(&ep->e_value);
ep->e_value = *vq++; ep->e_value = *vq++;
ep->e_value.v_subtype |= subtype;
ep = ep->e_next; ep = ep->e_next;
} }
free(vtemp); free(vtemp);
@@ -476,7 +479,7 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
LISTELEM *ep; LISTELEM *ep;
VALUE *vtemp; VALUE *vtemp;
long i; long i;
short subtype; unsigned short subtype;
if (ssi > lp->l_count) if (ssi > lp->l_count)
return E_COPY2; return E_COPY2;
@@ -508,7 +511,7 @@ copylist2mat(LIST *lp, long ssi, long num, MATRIX *dmat, long dsi)
subtype = vq->v_subtype; subtype = vq->v_subtype;
freevalue(vq); freevalue(vq);
*vq = *vp; *vq = *vp;
vq->v_subtype = subtype; vq->v_subtype |= subtype;
} }
free(vtemp); free(vtemp);
return 0; return 0;
@@ -526,6 +529,7 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
LISTELEM *dep; LISTELEM *dep;
VALUE *vtemp; VALUE *vtemp;
VALUE *vp; VALUE *vp;
unsigned short subtype;
if (ssi > slp->l_count) if (ssi > slp->l_count)
return E_COPY2; return E_COPY2;
@@ -555,8 +559,10 @@ copylist2list(LIST *slp, long ssi, long num, LIST *dlp, long dsi)
vp = vtemp; vp = vtemp;
i = num; i = num;
while (i-- > 0) { while (i-- > 0) {
subtype = dep->e_value.v_subtype;
freevalue(&dep->e_value); freevalue(&dep->e_value);
dep->e_value = *vp++; dep->e_value = *vp++;
dep->e_value.v_subtype |= subtype;
dep = dep->e_next; dep = dep->e_next;
} }
free(vtemp); free(vtemp);
@@ -806,13 +812,13 @@ copystr2str(STRING *sstr, long ssi, long num, STRING *dstr, long dsi)
{ {
char *c, *c1; 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; num = sstr->s_len - ssi;
if (num <= 0) if (num <= 0)
return 0; /* Nothing to be copied */ return 0; /* Nothing to be copied */
if (dsi < 0) /* default destination index */ if (dsi < 0) /* default destination index */
dsi = 0; dsi = 0;
if (dsi + num > dstr->s_len) if ((size_t)(dsi + num) > dstr->s_len)
num = dstr->s_len - dsi; num = dstr->s_len - dsi;
c1 = sstr->s_str + ssi; c1 = sstr->s_str + ssi;
c = dstr->s_str + dsi; 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 */ return 0; /* Nothing to be copied */
if (dsi < 0) /* default destination index */ if (dsi < 0) /* default destination index */
dsi = 0; dsi = 0;
if (dsi + num > dstr->s_len) if ((size_t)(dsi + num) > dstr->s_len)
num = dstr->s_len - dsi; num = dstr->s_len - dsi;
c1 = sblk->data + ssi; c1 = sblk->data + ssi;
c = (USB8 *)dstr->s_str + dsi; c = (USB8 *)dstr->s_str + dsi;
@@ -852,18 +858,18 @@ copyblk2str(BLOCK *sblk, long ssi, long num, STRING *dstr, long dsi)
int int
copyostr2str(char *sstr, long ssi, long num, STRING *dstr, long dsi) copyostr2str(char *sstr, long ssi, long num, STRING *dstr, long dsi)
{ {
long len; size_t len;
char *c, *c1; 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; num = len - ssi;
if (num <= 0) /* Nothing to be copied */ if (num <= 0) /* Nothing to be copied */
return 0; return 0;
if (dsi < 0) if (dsi < 0)
dsi = 0; /* Default destination index */ dsi = 0; /* Default destination index */
if (dsi + num > dstr->s_len) if ((size_t)(dsi + num) > dstr->s_len)
num = dstr->s_len - dsi; num = dstr->s_len - dsi;
c1 = sstr + ssi; c1 = sstr + ssi;
c = dstr->s_str + dsi; c = dstr->s_str + dsi;
@@ -879,16 +885,16 @@ copyostr2str(char *sstr, long ssi, long num, STRING *dstr, long dsi)
int int
copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc) copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
{ {
int len; size_t len;
int newlen; size_t newlen;
int newsize; size_t newsize;
USB8 *newdata; USB8 *newdata;
len = strlen(str) + 1; len = strlen(str) + 1;
if (ssi > len) if (ssi > 0 && (size_t)ssi > len)
return E_COPY2; return E_COPY2;
if (num < 0 || ssi + num > len) if (num < 0 || (size_t)(ssi + num) > len)
num = len - ssi; num = len - ssi;
if (num <= 0) /* Nothing to be copied */ if (num <= 0) /* Nothing to be copied */
return 0; return 0;
@@ -897,7 +903,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
newlen = dsi + num; newlen = dsi + num;
if (newlen <= 0) if (newlen <= 0)
return E_COPY7; return E_COPY7;
if (newlen >= dblk->maxsize) { if (newlen >= (size_t)dblk->maxsize) {
if (noreloc) if (noreloc)
return E_COPY17; return E_COPY17;
newsize = (1 + newlen/dblk->blkchunk) * dblk->blkchunk; 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; dblk->maxsize = newsize;
} }
memmove(dblk->data + dsi, str + ssi, num); memmove(dblk->data + dsi, str + ssi, num);
if (newlen > dblk->datalen) if (newlen > (size_t)dblk->datalen)
dblk->datalen = newlen; dblk->datalen = newlen;
return 0; return 0;
} }
@@ -978,8 +984,8 @@ memmove(void *s1, const void *s2, CALC_SIZE_T n)
int int
copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc) copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL noreloc)
{ {
long newlen; size_t newlen;
long newsize; size_t newsize;
USB8 *newdata; USB8 *newdata;
#if CALC_BYTE_ORDER == BIG_ENDIAN #if CALC_BYTE_ORDER == BIG_ENDIAN
ZVALUE *swnum; /* byte swapped numerator */ 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; return E_COPY5;
if (dsi < 0) if (dsi < 0)
dsi = dblk->datalen; dsi = dblk->datalen;
newlen = dsi + (long)(num*sizeof(HALF)); newlen = dsi + (num*sizeof(HALF));
if (newlen <= 0) if (newlen <= 0)
return E_COPY7; return E_COPY7;
if (newlen >= dblk->maxsize) { if (newlen >= (size_t)dblk->maxsize) {
if (noreloc) if (noreloc)
return E_COPY17; return E_COPY17;
newsize = (1 + newlen/dblk->blkchunk) * dblk->blkchunk; 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)); memmove(dblk->data+dsi, (char *)(swnum->v+ssi), num*sizeof(HALF));
zfree(*swnum); zfree(*swnum);
#endif #endif
if (newlen > dblk->datalen) if (newlen > (size_t)dblk->datalen)
dblk->datalen = newlen; dblk->datalen = newlen;
return 0; return 0;
} }
@@ -1029,7 +1035,7 @@ copynum2blk(NUMBER *snum, long ssi, long num, BLOCK *dblk, long dsi, BOOL norelo
int int
copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi, NUMBER **res) copyblk2num(BLOCK *sblk, long ssi, long num, NUMBER *dnum, long dsi, NUMBER **res)
{ {
long newlen; size_t newlen;
NUMBER *ret; /* cloned and modified numerator */ NUMBER *ret; /* cloned and modified numerator */
#if CALC_BYTE_ORDER == BIG_ENDIAN #if CALC_BYTE_ORDER == BIG_ENDIAN
HALF *swapped; /* byte swapped input data */ 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; return E_COPY5;
if (dsi < 0) if (dsi < 0)
dsi = dnum->num.len; dsi = dnum->num.len;
newlen = dsi + (long)((num+sizeof(HALF)-1)/sizeof(HALF)); newlen = dsi + ((num+sizeof(HALF)-1)/sizeof(HALF));
if (newlen <= 0) if (newlen <= 0)
return E_COPY7; return E_COPY7;

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.3 $
* @(#) $Id: block.c,v 29.2 2000/06/07 14:02:13 chongo Exp $ * @(#) $Id: block.c,v 29.3 2006/05/01 19:16:57 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/block.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/block.c,v $
* *
* Under source code control: 1997/02/27 00:29:40 * Under source code control: 1997/02/27 00:29:40
@@ -57,7 +57,7 @@ static void blkchk(BLOCK*);
* *
* given: * given:
* len - initial memory length of the block * len - initial memory length of the block
* type - BLK_TYPE_XXX * type - BLK_TYPE_XYZ
* chunk - allocation chunk size * chunk - allocation chunk size
* *
* returns: * returns:

View File

@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
# @(#) $Revision: 29.16 $ # @(#) $Revision: 29.18 $
# @(#) $Id: Makefile,v 29.16 2005/12/12 06:42:30 chongo Exp $ # @(#) $Id: Makefile,v 29.18 2006/05/20 19:32:40 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $ # @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
# #
# Under source code control: 1991/07/21 05:00:54 # Under source code control: 1991/07/21 05:00:54
@@ -176,7 +176,8 @@ CALC_FILES= README bigprime.cal deg.cal ellip.cal lucas.cal lucas_chk.cal \
test3500.cal seedrandom.cal test4000.cal test4100.cal test4600.cal \ test3500.cal seedrandom.cal test4000.cal test4100.cal test4600.cal \
beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \ beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.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 # These files are found (but not built) in the distribution
# #

View File

@@ -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. most resource files will print out a short message when they are read.
For example: For example:
> read lucas ; read lucas
lucas(h,n) defined lucas(h,n) defined
gen_u0(h,n,v1) defined gen_u0(h,n,v1) defined
gen_v1(h,n) 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 resource file will cause several functions to be defined.
Executing the lucas function: Executing the lucas function:
> lucas(149,60) ; lucas(149,60)
1 1
> lucas(146,61) ; lucas(146,61)
0 0
shows that 149*2^60-1 is prime whereas 146*2^61-1 is not. 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. 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 ellip.cal
efactor(iN, ia, B, force) efactor(iN, ia, B, force)
@@ -505,6 +537,58 @@ regress.cal
Errors are reported with '****' messages, or worse. :-) 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.cal
seedrandom(seed1, seed2, bitsize [,trials]) seedrandom(seed1, seed2, bitsize [,trials])
@@ -523,6 +607,24 @@ seedrandom.cal
Blum primes for the modulus. 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.cal
solve(low, high, epsilon) solve(low, high, epsilon)
@@ -833,8 +935,8 @@ xx_print.cal
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.10 $ ## @(#) $Revision: 29.12 $
## @(#) $Id: README,v 29.10 2005/12/12 06:39:18 chongo Exp $ ## @(#) $Id: README,v 29.12 2006/05/21 04:41:09 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $ ## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
## ##
## Under source code control: 1990/02/15 01:50:32 ## Under source code control: 1990/02/15 01:50:32

193
cal/dotest.cal Normal file
View 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;
}

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.3 $
* @(#) $Id: ellip.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $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 $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
* *
* Under source code control: 1990/02/15 01:50:33 * Under source code control: 1990/02/15 01:50:33
@@ -141,7 +141,7 @@ define point_mul(p1, p2)
if (p2 == 1) if (p2 == 1)
return p1; return p1;
if (p1 == p2) if (p1 == p2)
return point_square(&p1); return point_square(`p1);
obj point r; obj point r;
m = (minv(p2.x - p1.x, N) * (p2.y - p1.y)) % N; m = (minv(p2.x - p1.x, N) * (p2.y - p1.y)) % N;
if (m == 0) { if (m == 0) {
@@ -185,9 +185,9 @@ define point_pow(p, pow)
r = p; r = p;
t = p; t = p;
for (bit = 2; ((bit <= pow) && (f == 0)); bit <<= 1) { for (bit = 2; ((bit <= pow) && (f == 0)); bit <<= 1) {
t = point_square(&t); t = point_square(`t);
if (bit & pow) if (bit & pow)
r = point_mul(&t, &r); r = point_mul(`t, `r);
} }
return r; return r;
} }

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.3 $
* @(#) $Id: natnumset.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $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 $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/natnumset.cal,v $
* *
* Under source code control: 1997/09/07 23:53:51 * 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) define interval(a, b)
{ {
local i, j, s; 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)) if (!isint(a) || !isint(b))
quit "Non-integer argument for interval"; quit "Non-integer argument for interval";

View File

@@ -1,7 +1,7 @@
/* /*
* regress - calc regression and correctness test suite * 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 * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.20 $ * @(#) $Revision: 29.25 $
* @(#) $Id: regress.cal,v 29.20 2004/10/22 23:51:26 chongo Exp $ * @(#) $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 $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
* *
* Under source code control: 1990/02/15 01:50:36 * Under source code control: 1990/02/15 01:50:36
@@ -1310,9 +1310,14 @@ define test_functions()
* verify sleep * verify sleep
*/ */
vrfy(sleep(1/5) == null(), '1153: sleep(1/5) == null()'); 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()'; print '017: parsed test_functions()';
@@ -2595,6 +2600,22 @@ define test_2600()
strcat(str(tnum++), ': ln(exp(6)^15) == 90')); strcat(str(tnum++), ': ln(exp(6)^15) == 90'));
vrfy(ln(exp(5)^18) == 90, vrfy(ln(exp(5)^18) == 90,
strcat(str(tnum++), ': 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),; epsilon(i),;
print tnum++: ': epsilon(i),;'; print tnum++: ': epsilon(i),;';
@@ -3383,7 +3404,7 @@ print '070: parsed test_redc()';
*/ */
define test_fileops() 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 L = "Landon";
local C = "Curt"; local C = "Curt";
local N = "Noll"; local N = "Noll";
@@ -3485,13 +3506,21 @@ define test_fileops()
vrfy(y == "Noll", '4258: y == "Noll"'); vrfy(y == "Noll", '4258: y == "Noll"');
vrfy(isnull(fclose(f)), '4259: isnull(fclose(f))'); 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 * cleanup
*/ */
x = rm("junk4200"); 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()'; print '071: parsed test_fileops()';
@@ -5115,7 +5144,7 @@ define test_assign(base, work)
Y5800 = base+4; Y5800 = base+4;
print base+4: ': Y5800 = base+4'; print base+4: ': Y5800 = base+4';
obj xy5800 A={1,2}, obj xy5800 B={3,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 * test assignment
@@ -5238,7 +5267,7 @@ define test_is()
prime = 3217; prime = 3217;
print '5922: prime = 3217'; print '5922: prime = 3217';
square = prime^2; square = prime^2;
print '5923: square = prine^2'; print '5923: square = prime^2';
string = "a string"; string = "a string";
print '5924: string = "a string"'; print '5924: string = "a string"';
com = 3+4i; com = 3+4i;
@@ -6237,7 +6266,7 @@ define test_blk()
/* A second named block */ /* A second named block */
B1 = blk("+++6700", 15, 10) = {1,2,3,4,5}; 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(size(B1) == 15, '6747: size(B1) == 15');
vrfy(sizeof(B1) == 20, '6748: sizeof(B1) == 20'); vrfy(sizeof(B1) == 20, '6748: sizeof(B1) == 20');
vrfy(test(B1) == 1, '6749: test(B1) == 1'); 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(size(char(0)) == 1, '8203: size(char(0)) == 1');
vrfy(strlen(char(0)) == 0, '8204: strlen(char(0)) == 0'); vrfy(strlen(char(0)) == 0, '8204: strlen(char(0)) == 0');
vrfy(char(0) != "", '8205: char(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"'); 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 * test_divmod - psuedo-random tests on the // and % with various rounding modes
*/ */
print; print;
print '8500: Starting test_divmod' print '8500: Starting test of divmod'
read -once "test8500"; 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 * test_maxargs - test up to 1024 args being passed to a builtin function
*/ */
print; print;
print '8600: Starting test_1024args' print '8600: Starting test of up to 1024 args'
read -once "test8600"; 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 * read various calc resource files
* *

61
cal/screen.cal Normal file
View 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
View 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
View 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
View File

@@ -1,7 +1,7 @@
/* /*
* calc - arbitrary precision calculator * 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 * Primary author: David I. Bell
* *
@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.11 $ * @(#) $Revision: 29.13 $
* @(#) $Id: calc.c,v 29.11 2004/02/23 14:04:01 chongo Exp $ * @(#) $Id: calc.c,v 29.13 2006/05/19 15:26:10 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $
* *
* Under source code control: 1990/02/15 01:48:11 * Under source code control: 1990/02/15 01:48:11
@@ -111,7 +111,7 @@ main(int argc, char **argv)
BOOL done = FALSE; BOOL done = FALSE;
BOOL havearg; BOOL havearg;
BOOL haveendstr; BOOL haveendstr;
int len; size_t len;
/* /*
* parse args * parse args
@@ -393,7 +393,7 @@ main(int argc, char **argv)
} }
/* XXX What if *cp = '\''? */ /* XXX What if *cp = '\''? */
*bp++ = '\''; *bp++ = '\'';
strcpy(bp, cp); strncpy(bp, cp, len+1);
bp += len; bp += len;
*bp++ = '\''; *bp++ = '\'';
cp += len; cp += len;
@@ -452,16 +452,19 @@ main(int argc, char **argv)
} }
while (index < maxindex) { while (index < maxindex) {
size_t cplen;
if (cmdlen > 0) if (cmdlen > 0)
cmdbuf[cmdlen++] = ' '; cmdbuf[cmdlen++] = ' ';
newcmdlen = cmdlen + strlen(cp); cplen = strlen(cp);
newcmdlen = cmdlen + cplen;
if (newcmdlen > MAXCMD) { if (newcmdlen > MAXCMD) {
fprintf(stderr, fprintf(stderr,
"%s: commands too long\n", "%s: commands too long\n",
program); program);
exit(1); exit(1);
} }
strcpy(cmdbuf + cmdlen, cp); strncpy(cmdbuf + cmdlen, cp, cplen+1);
cmdlen = newcmdlen; cmdlen = newcmdlen;
index++; index++;
if (index < maxindex) if (index < maxindex)
@@ -579,7 +582,7 @@ main(int argc, char **argv)
if (run_state == RUN_PRE_CMD_ARGS) { if (run_state == RUN_PRE_CMD_ARGS) {
if (havecommands) { if (havecommands) {
set_run_state(RUN_CMD_ARGS); set_run_state(RUN_CMD_ARGS);
(void) openstring(cmdbuf, (long) strlen(cmdbuf)); (void) openstring(cmdbuf, strlen(cmdbuf));
getcommands(FALSE); getcommands(FALSE);
closeinput(); closeinput();
} }

15
calc.h
View File

@@ -1,7 +1,7 @@
/* /*
* calc - definitions for calculator program * 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 * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.11 $ * @(#) $Revision: 29.18 $
* @(#) $Id: calc.h,v 29.11 2003/08/26 04:36:10 chongo Exp $ * @(#) $Id: calc.h,v 29.18 2006/05/21 07:28:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
* *
* Under source code control: 1990/02/15 01:48:31 * Under source code control: 1990/02/15 01:48:31
@@ -98,12 +98,13 @@
#define FILEID_STDIN ((FILEID) 0) #define FILEID_STDIN ((FILEID) 0)
#define FILEID_STDOUT ((FILEID) 1) #define FILEID_STDOUT ((FILEID) 1)
#define FILEID_STDERR ((FILEID) 2) #define FILEID_STDERR ((FILEID) 2)
#define FILEID_NONE ((FILEID) -1) #define FILEID_NONE ((FILEID) -1) /* must be < 0 */
/* /*
* File I/O routines. * File I/O routines.
*/ */
extern DLL FILEID openid(char *name, char *mode); 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 FILEID indexid(long index);
extern DLL BOOL validid(FILEID id); extern DLL BOOL validid(FILEID id);
extern DLL BOOL errorid(FILEID id); extern DLL BOOL errorid(FILEID id);
@@ -148,7 +149,7 @@ extern DLL void trimconstants(void);
/* /*
* Input routines. * 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 openterminal(void);
extern DLL int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok); extern DLL int opensearchfile(char *name, char *pathlist, char *exten, int reopen_ok);
extern DLL char *nextline(void); 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 c_flag; /* TRUE => continue after error if permitted */
extern DLL int i_flag; /* TRUE => try to go interactive after error */ 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 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 BOOL abort_now; /* TRUE => try to go interactive */
extern DLL int argc_value; /* count of argv[] strings for argv() builtin */ 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 char *program; /* our name (argv[0]) */
extern DLL int no_env; /* TRUE (-e) => ignore env vars on startup */ 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 use_old_std; /* TRUE (-O) => use classic configuration */
extern DLL int allow_read; /* FALSE => dont open any files for reading */ extern DLL int allow_read; /* FALSE => dont open any files for reading */

View File

@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
# @(#) $Revision: 29.14 $ # @(#) $Revision: 29.15 $
# @(#) $Id: calc.spec.in,v 29.14 2005/12/12 06:57:27 chongo Exp $ # @(#) $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 $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.spec.in,v $
# #
# Under source code control: 2003/02/16 20:21:39 # Under source code control: 2003/02/16 20:21:39
@@ -92,6 +92,7 @@ rm -rf %{buildroot}
%{_datadir}/%{name}/bindings %{_datadir}/%{name}/bindings
%{_datadir}/%{name}/README %{_datadir}/%{name}/README
%{_datadir}/%{name}/*.cal %{_datadir}/%{name}/*.cal
%{_datadir}/%{name}/*.line
%files devel %files devel
%defattr(-, root, root) %defattr(-, root, root)
@@ -100,7 +101,10 @@ rm -rf %{buildroot}
%attr(644, root, root) %{_libdir}/*.a %attr(644, root, root) %{_libdir}/*.a
%changelog %changelog
* Sun Dec 11 2006 Landon Curt Noll http://www.isthe.com/chongo * 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 - Release of calc-2.11.11
- Fixed description in spec file - Fixed description in spec file
* Wed Feb 26 2003 Landon Curt Noll http://www.isthe.com/chongo * Wed Feb 26 2003 Landon Curt Noll http://www.isthe.com/chongo

View File

@@ -17,8 +17,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
# @(#) $Revision: 29.4 $ # @(#) $Revision: 29.8 $
# @(#) $Id: calcerr.tbl,v 29.4 2001/04/10 22:06:46 chongo Exp $ # @(#) $Id: calcerr.tbl,v 29.8 2006/05/19 15:12:57 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
# #
# Under source code control: 1996/05/23 17:38:44 # Under source code control: 1996/05/23 17:38:44
@@ -164,7 +164,7 @@ E_RSEARCH3 Bad third argument for rsearch
E_RSEARCH4 Bad fourth argument for rsearch E_RSEARCH4 Bad fourth argument for rsearch
E_RSEARCH5 Cannot find fsize or fpos for rsearch E_RSEARCH5 Cannot find fsize or fpos for rsearch
E_RSEARCH6 File not readable 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_REWIND2 Attempt to rewind a file that is not open
E_STRERROR1 Bad argument type for strerror E_STRERROR1 Bad argument type for strerror
E_STRERROR2 Index out of range 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_COPY14 No-copy-to destination variable
E_COPY15 No-copy-from source named block E_COPY15 No-copy-from source named block
E_COPY16 No-copy-to destination 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_COPYF1 File not open for copy
E_COPYF2 fseek or fsize failure for copy E_COPYF2 fseek or fsize failure for copy
E_COPYF3 fwrite error for copy E_COPYF3 fwrite error for copy
E_COPYF4 fread error for copy E_COPYF4 fread error for copy
E_PROTECT1 Non-variable first argument for protect E_PROTECT1 Non-variable first argument for protect
E_PROTECT2 Non-integer second argument for protect E_PROTECT2 Bad second argument for protect
E_PROTECT3 Out-of-range second argument for protect E_PROTECT3 Bad third argument for protect
E_MATFILL3 No-copy-to destination for matfill E_MATFILL3 No-copy-to destination for matfill
E_MATFILL4 No-assign-from source for matfill E_MATFILL4 No-assign-from source for matfill
E_MATTRACE1 Non-matrix argument for mattrace E_MATTRACE1 Non-matrix argument for mattrace
@@ -393,3 +393,55 @@ E_BERN Bad argument for bern
E_EULER Bad argument for euler E_EULER Bad argument for euler
E_SLEEP Bad argument for sleep E_SLEEP Bad argument for sleep
E_TTY calc_tty failure 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

View File

@@ -2,7 +2,7 @@
# #
# check - check the regression output for problems # 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 # Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License # the terms of the version 2.1 of the GNU Lesser General Public License
@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
# @(#) $Revision: 29.2 $ # @(#) $Revision: 29.3 $
# @(#) $Id: check.awk,v 29.2 2000/06/07 14:02:13 chongo Exp $ # @(#) $Id: check.awk,v 29.3 2006/05/20 19:43:39 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $
# #
# Under source code control: 1996/05/25 22:07:58 # Under source code control: 1996/05/25 22:07:58
@@ -64,7 +64,7 @@ NF == 0 {
end_seen = 1; end_seen = 1;
} }
$1 ~ /^[0-9]+:/ { $1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ {
if (error > 0) { if (error > 0) {
if (havebuf2) { if (havebuf2) {
print buf2; print buf2;

View File

@@ -100,6 +100,7 @@ extern COMPLEX *c_sqrt(COMPLEX *c, NUMBER *epsilon, long R);
extern COMPLEX *c_root(COMPLEX *c, NUMBER *q, NUMBER *epsilon); extern COMPLEX *c_root(COMPLEX *c, NUMBER *q, NUMBER *epsilon);
extern COMPLEX *c_exp(COMPLEX *c, NUMBER *epsilon); extern COMPLEX *c_exp(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_ln(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_cos(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_sin(COMPLEX *c, NUMBER *epsilon); extern COMPLEX *c_sin(COMPLEX *c, NUMBER *epsilon);
extern COMPLEX *c_cosh(COMPLEX *c, NUMBER *epsilon); extern COMPLEX *c_cosh(COMPLEX *c, NUMBER *epsilon);

1377
codegen.c

File diff suppressed because it is too large Load Diff

116
comfunc.c
View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 29.6 $
* @(#) $Id: comfunc.c,v 29.4 2005/10/18 10:43:49 chongo Exp $ * @(#) $Id: comfunc.c,v 29.6 2006/05/20 08:43:55 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/comfunc.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/comfunc.c,v $
* *
* Under source code control: 1990/02/15 01:48:13 * Under source code control: 1990/02/15 01:48:13
@@ -33,6 +33,16 @@
#include "config.h" #include "config.h"
#include "cmath.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. * Compute the result of raising a complex number to an integer power.
* *
@@ -69,29 +79,29 @@ c_powi(COMPLEX *c, NUMBER *q)
*/ */
if (power <= 4) { if (power <= 4) {
switch ((int) (power * sign)) { switch ((int) (power * sign)) {
case 0: case 0:
return clink(&_cone_); return clink(&_cone_);
case 1: case 1:
return clink(c); return clink(c);
case -1: case -1:
return c_inv(c); return c_inv(c);
case 2: case 2:
return c_square(c); return c_square(c);
case -2: case -2:
tmp = c_square(c); tmp = c_square(c);
res = c_inv(tmp); res = c_inv(tmp);
comfree(tmp); comfree(tmp);
return res; return res;
case 3: case 3:
tmp = c_square(c); tmp = c_square(c);
res = c_mul(c, tmp); res = c_mul(c, tmp);
comfree(tmp); comfree(tmp);
return res; return res;
case 4: case 4:
tmp = c_square(c); tmp = c_square(c);
res = c_square(tmp); res = c_square(tmp);
comfree(tmp); comfree(tmp);
return res; return res;
} }
} }
/* /*
@@ -491,7 +501,7 @@ c_ln(COMPLEX *c, NUMBER *epsilon)
NUMBER *a2b2, *tmp1, *tmp2, *epsilon1; NUMBER *a2b2, *tmp1, *tmp2, *epsilon1;
if (ciszero(c)) { if (ciszero(c)) {
math_error("Logarithm of zero"); math_error("logarithm of zero");
/*NOTREACHED*/ /*NOTREACHED*/
} }
if (cisone(c)) if (cisone(c))
@@ -519,6 +529,60 @@ c_ln(COMPLEX *c, NUMBER *epsilon)
return r; 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. * Calculate the complex cosine within the specified accuracy.

View File

@@ -1,7 +1,7 @@
/* /*
* config - configuration routines * 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 * Primary author: David I. Bell
* *
@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.15 $ * @(#) $Revision: 29.17 $
* @(#) $Id: config.c,v 29.15 2005/12/12 06:45:41 chongo Exp $ * @(#) $Id: config.c,v 29.17 2006/05/19 15:26:10 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
* *
* Under source code control: 1991/07/20 00:21:56 * Under source code control: 1991/07/20 00:21:56
@@ -722,7 +722,7 @@ setconfig(int type, VALUE *vp)
math_error("Cannot duplicate new prompt"); math_error("Cannot duplicate new prompt");
/*NOTREACHED*/ /*NOTREACHED*/
} }
strcpy(p, vp->v_str->s_str); strncpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
free(conf->prompt1); free(conf->prompt1);
conf->prompt1 = p; conf->prompt1 = p;
break; break;
@@ -737,7 +737,7 @@ setconfig(int type, VALUE *vp)
math_error("Cannot duplicate new more prompt"); math_error("Cannot duplicate new more prompt");
/*NOTREACHED*/ /*NOTREACHED*/
} }
strcpy(p, vp->v_str->s_str); strncpy(p, vp->v_str->s_str, vp->v_str->s_len + 1);
free(conf->prompt2); free(conf->prompt2);
conf->prompt2 = p; conf->prompt2 = p;
break; break;

View File

@@ -1,7 +1,7 @@
/* /*
* custom - interface for custom software and hardware interfaces * 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 * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 29.6 $
* @(#) $Id: custom.c,v 29.4 2004/02/25 23:54:40 chongo Exp $ * @(#) $Id: custom.c,v 29.6 2006/05/19 15:26:10 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/custom.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/custom.c,v $
* *
* Under source code control: 1997/03/03 04:53:08 * Under source code control: 1997/03/03 04:53:08
@@ -189,7 +189,7 @@ customhelp(char *name)
/* /*
* form the custom help 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) { if (customname == NULL) {
math_error("bad malloc of customname"); math_error("bad malloc of customname");
/*NOTREACHED*/ /*NOTREACHED*/

View File

@@ -1,7 +1,7 @@
/* /*
* c_argv - a custom function display info about its args * c_argv - a custom function display info about its args
* *
* Copyright (C) 1999-2004 Landon Curt Noll * Copyright (C) 1999-2006 Landon Curt Noll
* *
* Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 29.6 $
* @(#) $Id: c_argv.c,v 29.4 2004/02/23 14:04:01 chongo Exp $ * @(#) $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 $ * @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_argv.c,v $
* *
* Under source code control: 1997/03/09 20:27:37 * Under source code control: 1997/03/09 20:27:37
@@ -152,9 +152,9 @@ c_argv(char UNUSED *name, int count, VALUE **vals)
/* getsize error */ /* getsize error */
printf("\tsize=unknown"); printf("\tsize=unknown");
} }
printf("\tsizeof=%ld\n", lsizeof(vals[i])); printf("\tsizeof=%u\n", lsizeof(vals[i]));
} else { } else {
printf("\tsize=%ld\tsizeof=%ld\n", printf("\tsize=%ld\tsizeof=%u\n",
elm_count(vals[i]), lsizeof(vals[i])); elm_count(vals[i]), lsizeof(vals[i]));
} }
} }

689
file.c
View File

@@ -1,7 +1,7 @@
/* /*
* file - file I/O routines callable by users * 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 * Primary author: David I. Bell
* *
@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.9 $ * @(#) $Revision: 29.14 $
* @(#) $Id: file.c,v 29.9 2004/02/23 14:04:01 chongo Exp $ * @(#) $Id: file.c,v 29.14 2006/05/20 08:43:55 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/file.c,v $
* *
* Under source code control: 1991/07/20 00:21:56 * Under source code control: 1991/07/20 00:21:56
@@ -68,11 +68,11 @@ extern FILE *f_open(char *name, char *mode);
*/ */
static FILEIO files[MAXFILES] = { static FILEIO files[MAXFILES] = {
{FILEID_STDIN, NULL, (dev_t)0, (ino_t)0, {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, {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, {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 * init_fileio - initialize a FILEIO structure
* 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 * This function initializes a calc FILEIO structure. It will optionally
* FILEID_NONE if the open failed. * 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: * given:
* name file name * 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 FILEID
openid(char *name, char *mode) openid(char *name, char *mode)
@@ -206,9 +333,9 @@ openid(char *name, char *mode)
struct stat sbuf; /* file status */ struct stat sbuf; /* file status */
int i; int i;
/* find the next open slot in the files array */
if (idnum >= MAXFILES) if (idnum >= MAXFILES)
return -E_FOPEN3; return -E_MANYOPEN;
fiop = &files[3]; fiop = &files[3];
for (i = 3; i < MAXFILES; fiop++,i++) { for (i = 3; i < MAXFILES; fiop++,i++) {
if (fiop->name == NULL) if (fiop->name == NULL)
@@ -217,8 +344,8 @@ openid(char *name, char *mode)
if (i == MAXFILES) if (i == MAXFILES)
math_error("This should not happen in openid()!!!"); math_error("This should not happen in openid()!!!");
/* open the file */
fp = f_open(name, mode); fp = f_open(name, mode);
if (fp == NULL) { if (fp == NULL) {
return FILEID_NONE; return FILEID_NONE;
} }
@@ -227,50 +354,88 @@ openid(char *name, char *mode)
/*NOTREACHED*/ /*NOTREACHED*/
} }
fiop->name = (char *)malloc(strlen(name) + 1); /* get a new FILEID */
if (fiop->name == NULL) {
math_error("No memory for filename");
/*NOTREACHED*/
}
id = ++lastid; id = ++lastid;
ioindex[idnum++] = i; ioindex[idnum++] = i;
strcpy(fiop->name, name); /* initialize FILEIO structure */
fiop->id = id; init_fileio(fiop, name, mode, &sbuf, id, fp);
fiop->fp = fp;
fiop->dev = sbuf.st_dev;
fiop->inode = sbuf.st_ino;
fiop->reading = TRUE;
fiop->writing = TRUE;
fiop->action = 0;
/* /* return calc open file ID */
* determine file open mode return id;
* }
* 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. * openpathid - open the specified abse filename, or relative filename along a search path
*/ *
if (mode[0] == 'r') { * given:
fiop->reading = TRUE; * name file name
if (strchr(mode, '+') == NULL) { * mode open mode (one of {r,w,a}{,b}{,+})
fiop->writing = FALSE; * pathlist list of colon separated paths (or NULL)
} else { *
fiop->writing = TRUE; * returns:
} * >=3 FILEID which can be used to do I/O to the file
} else if (mode[0] == 'w' || mode[0] == 'a') { * <0 if the open failed
fiop->writing = TRUE; *
if (strchr(mode, '+') == NULL) { * NOTE: This function will not return 0, 1 or 2 since they are
fiop->reading = FALSE; * reserved for stdin, stdout, stderr. In fact, it must not
} else { * return 0, 1, or 2 because it will confuse those who call
fiop->reading = TRUE; * the opensearchfiile() function
} */
} else { FILEID
fiop->reading = FALSE; openpathid(char *name, char *mode, char *pathlist)
fiop->writing = FALSE; {
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; return id;
} }
@@ -279,16 +444,20 @@ openid(char *name, char *mode)
* reopenid - reopen a FILEID * reopenid - reopen a FILEID
* *
* given: * given:
* id FILEID to reopen * id FILEID to reopen
* mode new mode to open as * mode new mode to open as
* name name of new file * 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 FILEID
reopenid(FILEID id, char *mode, char *name) reopenid(FILEID id, char *mode, char *name)
{ {
FILEIO *fiop; /* file structure */ FILEIO *fiop; /* file structure */
FILE *fp; FILE *fp;
char *newname;
struct stat sbuf; struct stat sbuf;
int i; int i;
@@ -299,8 +468,8 @@ reopenid(FILEID id, char *mode, char *name)
/*NOTREACHED*/ /*NOTREACHED*/
} }
/* reopen the file */
fiop = NULL; fiop = NULL;
for (i = 3; i < idnum; i++) { for (i = 3; i < idnum; i++) {
fiop = &files[ioindex[i]]; fiop = &files[ioindex[i]];
if (fiop->id == id) if (fiop->id == id)
@@ -344,57 +513,23 @@ reopenid(FILEID id, char *mode, char *name)
return FILEID_NONE; return FILEID_NONE;
} }
} }
if (fstat(fileno(fp), &sbuf) < 0) { if (fstat(fileno(fp), &sbuf) < 0) {
math_error("bad fstat"); math_error("bad fstat");
/*NOTREACHED*/ /*NOTREACHED*/
} }
if (name) { /* initialize FILEIO structure */
newname = (char *)malloc(strlen(name) + 1); if (name == NULL) {
if (newname == NULL) { if (fiop->name == NULL) {
math_error("No memory for filename"); math_error("old and new reopen filenames are NULL");
/*NOTREACHED*/
} }
if (fiop->name) } else if (fiop->name != NULL) {
free(fiop->name); free(fiop->name);
strcpy(newname, name); fiop->name = NULL;
fiop->name = newname;
} }
fiop->fp = fp; init_fileio(fiop, name, mode, &sbuf, id, fp);
fiop->dev = sbuf.st_dev;
fiop->inode = sbuf.st_ino;
fiop->reading = TRUE;
fiop->writing = TRUE;
fiop->action = 0;
/* /* return calc open file ID */
* 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 id; return id;
} }
@@ -810,7 +945,7 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
VALUE *vp; VALUE *vp;
char *str; char *str;
int ch; int ch;
long len; size_t len;
int oldmode, newmode; int oldmode, newmode;
long olddigits, newdigits; long olddigits, newdigits;
long width, precision; long width, precision;
@@ -877,36 +1012,36 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
newdigits = precision; newdigits = precision;
switch (ch) { switch (ch) {
case 's': case 's':
printstring = TRUE; printstring = TRUE;
case 'c': case 'c':
printchar = TRUE; printchar = TRUE;
case 'd': case 'd':
break; break;
case 'f': case 'f':
newmode = MODE_REAL; newmode = MODE_REAL;
break; break;
case 'e': case 'e':
newmode = MODE_EXP; newmode = MODE_EXP;
break; break;
case 'r': case 'r':
newmode = MODE_FRAC; newmode = MODE_FRAC;
break; break;
case 'o': case 'o':
newmode = MODE_OCTAL; newmode = MODE_OCTAL;
break; break;
case 'x': case 'x':
newmode = MODE_HEX; newmode = MODE_HEX;
break; break;
case 'b': case 'b':
newmode = MODE_BINARY; newmode = MODE_BINARY;
break; break;
case 0: case 0:
math_setfp(stdout); math_setfp(stdout);
return 0; return 0;
default: default:
math_chr(ch); math_chr(ch);
continue; continue;
} }
if (--count < 0) { if (--count < 0) {
@@ -927,41 +1062,41 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
if ((width == 0) || if ((width == 0) ||
(vp->v_type == V_MAT) || (vp->v_type == V_LIST)) { (vp->v_type == V_MAT) || (vp->v_type == V_LIST)) {
switch(vp->v_type) { switch(vp->v_type) {
case V_OCTET: case V_OCTET:
if (printstring) if (printstring)
math_str((char *)vp->v_octet); math_str((char *)vp->v_octet);
else if (printchar) else if (printchar)
math_chr(*vp->v_octet); math_chr(*vp->v_octet);
else 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); 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); math_setmode(oldmode);
@@ -1014,13 +1149,13 @@ idprintf(FILEID id, char *fmt, int count, VALUE **vals)
if (strchr(str, '\n')) if (strchr(str, '\n'))
width = 0; width = 0;
len = strlen(str); len = strlen(str);
while (!didneg && (width > len)) { while (!didneg && ((size_t)width > len)) {
width--; width--;
math_chr(' '); math_chr(' ');
} }
math_str(str); math_str(str);
free(str); free(str);
while (didneg && (width > len)) { while (didneg && ((size_t)width > len)) {
width--; width--;
math_chr(' '); math_chr(' ');
} }
@@ -1414,52 +1549,52 @@ fseekid(FILEID id, ZVALUE offset, int whence)
/* seek depending on whence */ /* seek depending on whence */
switch (whence) { switch (whence) {
case 0: case 0:
/* construct seek position, off = offset */ /* construct seek position, off = offset */
if (zisneg(offset)) if (zisneg(offset))
return -3; return -3;
off = z2filepos(offset); off = z2filepos(offset);
/* seek there */ /* seek there */
ret = f_seek_set(fiop->fp, &off); ret = f_seek_set(fiop->fp, &off);
break; break;
case 1: case 1:
/* construct seek position, off = cur+offset */ /* construct seek position, off = cur+offset */
f_tell(fiop->fp, &off); f_tell(fiop->fp, &off);
cur = filepos2z(off); cur = filepos2z(off);
zadd(cur, offset, &tmp); zadd(cur, offset, &tmp);
zfree(cur); zfree(cur);
if (zisneg(tmp)) { if (zisneg(tmp)) {
zfree(tmp);
return -3;
}
off = z2filepos(tmp);
zfree(tmp); zfree(tmp);
return -3;
}
off = z2filepos(tmp);
zfree(tmp);
/* seek there */ /* seek there */
ret = f_seek_set(fiop->fp, &off); ret = f_seek_set(fiop->fp, &off);
break; break;
case 2: case 2:
/* construct seek position, off = len+offset */ /* construct seek position, off = len+offset */
if (get_open_siz(fiop->fp, &cur) < 0) if (get_open_siz(fiop->fp, &cur) < 0)
return -4; return -4;
zadd(cur, offset, &tmp); zadd(cur, offset, &tmp);
zfree(cur); zfree(cur);
if (zisneg(tmp)) { if (zisneg(tmp)) {
zfree(tmp);
return -3;
}
off = z2filepos(tmp);
zfree(tmp); zfree(tmp);
return -3;
}
off = z2filepos(tmp);
zfree(tmp);
/* seek there */ /* seek there */
ret = f_seek_set(fiop->fp, &off); ret = f_seek_set(fiop->fp, &off);
break; break;
default: default:
return -5; return -5;
} }
return ret; return ret;
} }
@@ -1828,7 +1963,7 @@ showfiles(void)
FILE *fp; FILE *fp;
struct stat sbuf; struct stat sbuf;
ino_t inodes[MAXFILES]; ino_t inodes[MAXFILES];
long sizes[MAXFILES]; off_t sizes[MAXFILES];
int i, j; int i, j;
for (i = 0; i < idnum; i++) { for (i = 0; i < idnum; i++) {
@@ -1840,7 +1975,7 @@ showfiles(void)
sizes[i] = -1; sizes[i] = -1;
} else { } else {
inodes[i] = sbuf.st_ino; inodes[i] = sbuf.st_ino;
sizes[i] = (long) sbuf.st_size; sizes[i] = sbuf.st_size;
} }
} }
for (i = 0; i < idnum; i++) { 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 */ BOOL skip; /* True if string to be skipped rather than read */
int width; int width;
VALUE *var; /* lvalue to be assigned to */ VALUE *var; /* lvalue to be assigned to */
short subtype; /* for var->v_subtype */ unsigned short subtype; /* for var->v_subtype */
FILEPOS cur; /* current location */ FILEPOS cur; /* current location */
if (feof(fp)) if (feof(fp))
@@ -2083,75 +2218,75 @@ fscanfile(FILE *fp, char *fmt, int count, VALUE **vals)
f = *fmt++; f = *fmt++;
} }
switch (f) { switch (f) {
case 'c': case 'c':
if (width == 0) if (width == 0)
width = 1; width = 1;
getscanfield(fp,skip,width,0,NULL,&str); getscanfield(fp,skip,width,0,NULL,&str);
break; break;
case 's': case 's':
getscanwhite(fp,1,0,6,NULL); getscanwhite(fp,1,0,6,NULL);
if (feof(fp)) 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; 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) { if (!skip) {
assnum++; assnum++;

21
file.h
View File

@@ -1,7 +1,7 @@
/* /*
* file - file I/O routines callable by users * file - file I/O routines callable by users
* *
* Copyright (C) 1999 David I. Bell and Landon Curt Noll * Copyright (C) 1999-2006 David I. Bell and Landon Curt Noll
* *
* Primary author: David I. Bell * Primary author: David I. Bell
* *
@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.5 $ * @(#) $Revision: 29.8 $
* @(#) $Id: file.h,v 29.5 2001/06/08 21:00:58 chongo Exp $ * @(#) $Id: file.h,v 29.8 2006/05/19 15:26:10 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.h,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/file.h,v $
* *
* Under source code control: 1996/05/24 05:55:58 * Under source code control: 1996/05/24 05:55:58
@@ -53,8 +53,10 @@ typedef struct {
char *name; /* file name */ char *name; /* file name */
BOOL reading; /* TRUE if opened for reading */ BOOL reading; /* TRUE if opened for reading */
BOOL writing; /* TRUE if opened for writing */ BOOL writing; /* TRUE if opened for writing */
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 action; /* most recent use for 'r', 'w' or 0 */
char mode[sizeof("rb+")];/* open mode */ char mode[sizeof("rb+")+1];/* open mode */
} FILEIO; } FILEIO;
@@ -89,11 +91,12 @@ typedef struct {
/* /*
* external functions * external functions
*/ */
extern FILEIO * findid(FILEID id, int writable); extern DLL FILEIO * findid(FILEID id, int writable);
extern int fgetposid(FILEID id, FILEPOS *ptr); extern DLL int fgetposid(FILEID id, FILEPOS *ptr);
extern int fsetposid(FILEID id, FILEPOS *ptr); extern DLL int fsetposid(FILEID id, FILEPOS *ptr);
extern int get_open_siz(FILE *fp, ZVALUE *res); extern DLL int get_open_siz(FILE *fp, ZVALUE *res);
extern char* findfname(FILEID); extern DLL char* findfname(FILEID);
extern DLL FILE *f_pathopen(char *name, char *mode, char *pathlist, char **openpath);
#endif /* !__FILE_H__ */ #endif /* !__FILE_H__ */

535
func.c
View File

@@ -1,7 +1,7 @@
/* /*
* func - built-in functions implemented here * func - built-in functions implemented here
* *
* 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 * Primary author: David I. Bell
* *
@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.16 $ * @(#) $Revision: 29.25 $
* @(#) $Id: func.c,v 29.16 2005/10/18 10:43:49 chongo Exp $ * @(#) $Id: func.c,v 29.25 2006/05/21 07:28:54 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/func.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/func.c,v $
* *
* Under source code control: 1990/02/15 01:48:15 * Under source code control: 1990/02/15 01:48:15
@@ -128,8 +128,6 @@ extern int idungetc(FILEID id, int ch);
extern LIST* associndices(ASSOC *ap, long index); extern LIST* associndices(ASSOC *ap, long index);
extern LIST* matindices(MATRIX *mp, long index); extern LIST* matindices(MATRIX *mp, long index);
extern int stoponerror;
/* /*
* malloced environment storage * malloced environment storage
@@ -197,25 +195,25 @@ f_eval(VALUE *vp)
FUNC *newfunc; FUNC *newfunc;
VALUE result; VALUE result;
char *str; char *str;
long num; size_t num;
int temp; long temp_stoponerror; /* temp value of stoponerror */
if (vp->v_type != V_STR) if (vp->v_type != V_STR)
return error_value(E_EVAL2); return error_value(E_EVAL2);
str = vp->v_str->s_str; str = vp->v_str->s_str;
num = vp->v_str->s_len; num = vp->v_str->s_len;
switch (openstring(str, num)) { switch (openstring(str, num)) {
case -2: case -2:
return error_value(E_EVAL3); return error_value(E_EVAL3);
case -1: case -1:
return error_value(E_EVAL4); return error_value(E_EVAL4);
} }
oldfunc = curfunc; oldfunc = curfunc;
enterfilescope(); enterfilescope();
temp = stoponerror; temp_stoponerror = stoponerror;
stoponerror = -1; stoponerror = -1;
if (evaluate(TRUE)) { if (evaluate(TRUE)) {
stoponerror = temp; stoponerror = temp_stoponerror;
closeinput(); closeinput();
exitfilescope(); exitfilescope();
freevalue(stack--); freevalue(stack--);
@@ -229,7 +227,7 @@ f_eval(VALUE *vp)
free(newfunc); free(newfunc);
return result; return result;
} }
stoponerror = temp; stoponerror = temp_stoponerror;
closeinput(); closeinput();
exitfilescope(); exitfilescope();
newfunc = curfunc; newfunc = curfunc;
@@ -250,7 +248,7 @@ f_prompt(VALUE *vp)
VALUE result; VALUE result;
char *cp; char *cp;
char *newcp; char *newcp;
unsigned int len; size_t len;
/* initialize VALUE */ /* initialize VALUE */
result.v_type = V_STR; result.v_type = V_STR;
@@ -275,7 +273,7 @@ f_prompt(VALUE *vp)
math_error("Cannot allocate string"); math_error("Cannot allocate string");
/*NOTREACHED*/ /*NOTREACHED*/
} }
strcpy(newcp, cp); strncpy(newcp, cp, len+1);
result.v_str = makestring(newcp); result.v_str = makestring(newcp);
return result; return result;
} }
@@ -331,29 +329,29 @@ f_str(VALUE *vp)
result.v_subtype = V_NOSUBTYPE; result.v_subtype = V_NOSUBTYPE;
switch (vp->v_type) { switch (vp->v_type) {
case V_STR: case V_STR:
result.v_str = stringcopy(vp->v_str); result.v_str = makenewstring(vp->v_str->s_str);
break; break;
case V_NULL: case V_NULL:
result.v_str = slink(&_nullstring_); result.v_str = slink(&_nullstring_);
break; break;
case V_OCTET: case V_OCTET:
result.v_str = charstring(*vp->v_octet); result.v_str = charstring(*vp->v_octet);
break; break;
case V_NUM: case V_NUM:
math_divertio(); math_divertio();
qprintnum(vp->v_num, MODE_DEFAULT); qprintnum(vp->v_num, MODE_DEFAULT);
cp = math_getdivertedio(); cp = math_getdivertedio();
result.v_str = makestring(cp); result.v_str = makestring(cp);
break; break;
case V_COM: case V_COM:
math_divertio(); math_divertio();
comprint(vp->v_com); comprint(vp->v_com);
cp = math_getdivertedio(); cp = math_getdivertedio();
result.v_str = makestring(cp); result.v_str = makestring(cp);
break; break;
default: default:
return error_value(E_STR); return error_value(E_STR);
} }
return result; return result;
} }
@@ -371,23 +369,23 @@ f_name(VALUE *vp)
result.v_subtype = V_NOSUBTYPE; result.v_subtype = V_NOSUBTYPE;
switch (vp->v_type) { switch (vp->v_type) {
case V_NBLOCK: case V_NBLOCK:
result.v_type = V_STR; result.v_type = V_STR;
result.v_str = makenewstring(vp->v_nblock->name); result.v_str = makenewstring(vp->v_nblock->name);
return result; return result;
case V_FILE: case V_FILE:
name = findfname(vp->v_file); name = findfname(vp->v_file);
if (name == NULL) { if (name == NULL) {
result.v_type = V_NULL;
return result;
}
math_divertio();
math_str(name);
cp = math_getdivertedio();
break;
default:
result.v_type = V_NULL; result.v_type = V_NULL;
return result; return result;
}
math_divertio();
math_str(name);
cp = math_getdivertedio();
break;
default:
result.v_type = V_NULL;
return result;
} }
result.v_str = makestring(cp); result.v_str = makestring(cp);
return result; return result;
@@ -2037,6 +2035,51 @@ f_ln(int count, VALUE **vals)
} }
static VALUE
f_log(int count, VALUE **vals)
{
VALUE result;
COMPLEX ctmp, *c;
NUMBER *err;
/* initialize VALUE */
result.v_subtype = V_NOSUBTYPE;
err = conf->epsilon;
if (count == 2) {
if (vals[1]->v_type != V_NUM)
return error_value(E_LOG1);
err = vals[1]->v_num;
}
switch (vals[0]->v_type) {
case V_NUM:
if (!qisneg(vals[0]->v_num) && !qiszero(vals[0]->v_num)) {
result.v_num = qlog(vals[0]->v_num, err);
result.v_type = V_NUM;
return result;
}
ctmp.real = vals[0]->v_num;
ctmp.imag = qlink(&_qzero_);
ctmp.links = 1;
c = c_log(&ctmp, err);
break;
case V_COM:
c = c_log(vals[0]->v_com, err);
break;
default:
return error_value(E_LOG2);
}
result.v_type = V_COM;
result.v_com = c;
if (cisreal(c)) {
result.v_num = qlink(c->real);
result.v_type = V_NUM;
comfree(c);
}
return result;
}
static VALUE static VALUE
f_cos(int count, VALUE **vals) f_cos(int count, VALUE **vals)
{ {
@@ -4001,8 +4044,8 @@ f_strlen(VALUE *vp)
static VALUE static VALUE
f_strcmp(VALUE *v1, VALUE *v2) f_strcmp(VALUE *v1, VALUE *v2)
{ {
unsigned char *c1, *c2;
VALUE result; VALUE result;
FLAG flag;
/* initialize VALUE */ /* initialize VALUE */
result.v_subtype = V_NOSUBTYPE; result.v_subtype = V_NOSUBTYPE;
@@ -4010,17 +4053,10 @@ f_strcmp(VALUE *v1, VALUE *v2)
if (v1->v_type != V_STR || v2->v_type != V_STR) if (v1->v_type != V_STR || v2->v_type != V_STR)
return error_value(E_STRCMP); return error_value(E_STRCMP);
c1 = (unsigned char *)v1->v_str->s_str; flag = stringrel(v1->v_str, v2->v_str);
c2 = (unsigned char *)v2->v_str->s_str;
result.v_type = V_NUM; result.v_type = V_NUM;
for (; *c1 == *c2; ++c1, ++c2) { result.v_num = itoq((long) flag);
if (*c1 == '\0') {
result.v_num = qlink(&_qzero_);
return result;
}
}
result.v_num = (*c1 > *c2) ? qlink(&_qone_) : qlink(&_qnegone_);
return result; return result;
} }
@@ -4028,8 +4064,8 @@ f_strcmp(VALUE *v1, VALUE *v2)
static VALUE static VALUE
f_strncmp(VALUE *v1, VALUE *v2, VALUE *v3) f_strncmp(VALUE *v1, VALUE *v2, VALUE *v3)
{ {
unsigned char *c1, *c2; long n1, n2, n;
long i; FLAG flag;
VALUE result; VALUE result;
/* initialize VALUE */ /* initialize VALUE */
@@ -4039,18 +4075,21 @@ f_strncmp(VALUE *v1, VALUE *v2, VALUE *v3)
v3->v_type != V_NUM || qisneg(v3->v_num) || v3->v_type != V_NUM || qisneg(v3->v_num) ||
qisfrac(v3->v_num) || zge31b(v3->v_num->num)) qisfrac(v3->v_num) || zge31b(v3->v_num->num))
return error_value(E_STRNCMP); return error_value(E_STRNCMP);
i = qtoi(v3->v_num); n1 = v1->v_str->s_len;
for (c1 = (unsigned char *)v1->v_str->s_str, n2 = v2->v_str->s_len;
c2 = (unsigned char *)v2->v_str->s_str; n = qtoi(v3->v_num);
i > 0 && *c1 == *c2; ++c1, ++c2, --i) { if (n < n1)
if (*c1 == '\0') v1->v_str->s_len = n;
break; if (n < n2)
} v2->v_str->s_len = n;
flag = stringrel(v1->v_str, v2->v_str);
v1->v_str->s_len = n1;
v2->v_str->s_len = n2;
result.v_type = V_NUM; result.v_type = V_NUM;
if (i == 0 || *c1 == *c2) result.v_num = itoq((long) flag);
result.v_num = qlink(&_qzero_);
else
result.v_num = (*c1>*c2) ? qlink(&_qone_) : qlink(&_qnegone_);
return result; return result;
} }
@@ -4141,7 +4180,7 @@ static VALUE
f_substr(VALUE *v1, VALUE *v2, VALUE *v3) f_substr(VALUE *v1, VALUE *v2, VALUE *v3)
{ {
NUMBER *q1, *q2; NUMBER *q1, *q2;
long i1, i2, len; size_t start, len;
char *cp; char *cp;
char *ccp; char *ccp;
VALUE result; VALUE result;
@@ -4157,33 +4196,32 @@ f_substr(VALUE *v1, VALUE *v2, VALUE *v3)
q2 = v3->v_num; q2 = v3->v_num;
if (qisfrac(q1) || qisneg(q1) || qisfrac(q2) || qisneg(q2)) if (qisfrac(q1) || qisneg(q1) || qisfrac(q2) || qisneg(q2))
return error_value(E_SUBSTR2); return error_value(E_SUBSTR2);
i1 = qtoi(q1); start = qtoi(q1);
i2 = qtoi(q2); len = qtoi(q2);
cp = v1->v_str->s_str; if (start > 0)
len = (long)strlen(cp); start--;
result.v_type = V_STR; result.v_type = V_STR;
if (i1 > 0) if (start >= v1->v_str->s_len || len == 0) {
i1--;
if (i1 >= len) { /* indexing off of end */
result.v_str = slink(&_nullstring_); result.v_str = slink(&_nullstring_);
return result; return result;
} }
cp += i1; if (len > v1->v_str->s_len - start)
len -= i1; len = v1->v_str->s_len - start;
if (len > i2) cp = v1->v_str->s_str + start;
len = i2;
ccp = (char *) malloc(len + 1); ccp = (char *) malloc(len + 1);
if (ccp == NULL) { if (ccp == NULL) {
math_error("No memory for substr"); math_error("No memory for substr");
/*NOTREACHED*/ /*NOTREACHED*/
} }
strncpy(ccp, cp, len); result.v_str = stralloc();
ccp[len] = '\0'; result.v_str->s_len = len;
result.v_str = makestring(ccp); result.v_str->s_str = ccp;
while (len-- > 0)
*ccp++ = *cp++;
*ccp = '\0';
return result; return result;
} }
static VALUE static VALUE
f_char(VALUE *vp) f_char(VALUE *vp)
{ {
@@ -4245,8 +4283,9 @@ f_ord(VALUE *vp)
static VALUE static VALUE
f_protect(int count, VALUE **vals) f_protect(int count, VALUE **vals)
{ {
int i; int i, depth;
VALUE *v1, *v2; VALUE *v1, *v2, *v3;
VALUE result; VALUE result;
BOOL have_nblock; BOOL have_nblock;
@@ -4272,22 +4311,20 @@ f_protect(int count, VALUE **vals)
v2 = vals[1]; v2 = vals[1];
if (v2->v_type == V_ADDR) if (v2->v_type == V_ADDR)
v2 = v2->v_addr; v2 = v2->v_addr;
if (v2->v_type != V_NUM || qisfrac(v2->v_num)) if (v2->v_type != V_NUM||qisfrac(v2->v_num)||zge16b(v2->v_num->num))
return error_value(E_PROTECT2); return error_value(E_PROTECT2);
if (qisneg(v2->v_num) || zge31b(v2->v_num->num))
return error_value(E_PROTECT3);
i = qtoi(v2->v_num); i = qtoi(v2->v_num);
if (i > MAXPROTECT) depth = 0;
return error_value(E_PROTECT3); if (count > 2) {
if (have_nblock) { v3 = vals[2];
v1->v_nblock->subtype |= i; if (v3->v_type == V_ADDR)
return result; v3 = v3->v_addr;
if (v3->v_type != V_NUM || qisfrac(v3->v_num) ||
qisneg(v3->v_num) || zge31b(v3->v_num->num))
return error_value(E_PROTECT3);
depth = qtoi(v3->v_num);
} }
if (i & V_PROTECTALL) { protecttodepth(v1, i, depth);
protectall(v1, i);
return result;
}
v1->v_subtype |= i;
return result; return result;
} }
@@ -4786,10 +4823,9 @@ f_listinsert(int count, VALUE **vals)
v1 = *vals++; v1 = *vals++;
if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST)) if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST))
return error_value(E_INSERT1); return error_value(E_INSERT1);
if (v1->v_addr->v_subtype & V_NOREALLOC) { if (v1->v_addr->v_subtype & V_NOREALLOC)
math_error("No-relocate list for insert"); return error_value(E_LIST1);
/*NOTREACHED*/
}
v2 = *vals++; v2 = *vals++;
if (v2->v_type == V_ADDR) if (v2->v_type == V_ADDR)
v2 = v2->v_addr; v2 = v2->v_addr;
@@ -4820,10 +4856,9 @@ f_listpush(int count, VALUE **vals)
v1 = *vals++; v1 = *vals++;
if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST)) if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST))
return error_value(E_PUSH); return error_value(E_PUSH);
if (v1->v_addr->v_subtype & V_NOREALLOC) { if (v1->v_addr->v_subtype & V_NOREALLOC)
math_error("No-relocate list for push"); return error_value(E_LIST3);
/*NOTREACHED*/
}
while (--count > 0) { while (--count > 0) {
v2 = *vals++; v2 = *vals++;
if (v2->v_type == V_ADDR) if (v2->v_type == V_ADDR)
@@ -4847,10 +4882,9 @@ f_listappend(int count, VALUE **vals)
v1 = *vals++; v1 = *vals++;
if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST)) if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST))
return error_value(E_APPEND); return error_value(E_APPEND);
if (v1->v_addr->v_subtype & V_NOREALLOC) { if (v1->v_addr->v_subtype & V_NOREALLOC)
math_error("No-relocate list for append"); return error_value(E_LIST4);
/*NOTREACHED*/
}
while (--count > 0) { while (--count > 0) {
v2 = *vals++; v2 = *vals++;
if (v2->v_type == V_ADDR) if (v2->v_type == V_ADDR)
@@ -4872,10 +4906,9 @@ f_listdelete(VALUE *v1, VALUE *v2)
if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST)) if ((v1->v_type != V_ADDR) || (v1->v_addr->v_type != V_LIST))
return error_value(E_DELETE1); return error_value(E_DELETE1);
if (v1->v_addr->v_subtype & V_NOREALLOC) { if (v1->v_addr->v_subtype & V_NOREALLOC)
math_error("No-relocate list for delete"); return error_value(E_LIST2);
/*NOTREACHED*/
}
if (v2->v_type == V_ADDR) if (v2->v_type == V_ADDR)
v2 = v2->v_addr; v2 = v2->v_addr;
if ((v2->v_type != V_NUM) || qisfrac(v2->v_num)) if ((v2->v_type != V_NUM) || qisfrac(v2->v_num))
@@ -4890,15 +4923,12 @@ f_listpop(VALUE *vp)
{ {
VALUE result; VALUE result;
/* initialize VALUE */
result.v_subtype = V_NOSUBTYPE;
if ((vp->v_type != V_ADDR) || (vp->v_addr->v_type != V_LIST)) if ((vp->v_type != V_ADDR) || (vp->v_addr->v_type != V_LIST))
return error_value(E_POP); return error_value(E_POP);
if (vp->v_addr->v_subtype & V_NOREALLOC) {
math_error("No-relocate list for pop"); if (vp->v_addr->v_subtype & V_NOREALLOC)
/*NOTREACHED*/ return error_value(E_LIST5);
}
removelistfirst(vp->v_addr->v_list, &result); removelistfirst(vp->v_addr->v_list, &result);
return result; return result;
} }
@@ -4909,15 +4939,12 @@ f_listremove(VALUE *vp)
{ {
VALUE result; VALUE result;
/* initialize VALUE */
result.v_subtype = V_NOSUBTYPE;
if ((vp->v_type != V_ADDR) || (vp->v_addr->v_type != V_LIST)) if ((vp->v_type != V_ADDR) || (vp->v_addr->v_type != V_LIST))
return error_value(E_REMOVE); return error_value(E_REMOVE);
if (vp->v_addr->v_subtype & V_NOREALLOC) {
math_error("No-relocate list for remove"); if (vp->v_addr->v_subtype & V_NOREALLOC)
/*NOTREACHED*/ return error_value(E_LIST6);
}
removelistlast(vp->v_addr->v_list, &result); removelistlast(vp->v_addr->v_list, &result);
return result; return result;
} }
@@ -4957,23 +4984,16 @@ f_time(void)
static VALUE static VALUE
f_ctime(void) f_ctime(void)
{ {
time_t systime;
char *str;
VALUE res; VALUE res;
time_t now; /* the current time */
/* initialize VALUE */ /* initialize VALUE */
res.v_subtype = V_NOSUBTYPE; res.v_subtype = V_NOSUBTYPE;
str = (char *) malloc(26);
if (str == NULL) {
math_error("No memory for ctime()");
/*NOTREACHED*/
}
systime = time(NULL);
strcpy(str, ctime(&systime));
str[24] = '\0';
res.v_str = makestring(str);
res.v_type = V_STR; res.v_type = V_STR;
/* get the time */
now = time(NULL);
res.v_str = makenewstring(ctime(&now));
return res; return res;
} }
@@ -5019,6 +5039,61 @@ f_fopen(VALUE *v1, VALUE *v2)
} }
static VALUE
f_fpathopen(int count, VALUE **vals)
{
VALUE result;
FILEID id;
char *mode;
/* initialize VALUE */
result.v_subtype = V_NOSUBTYPE;
/* check for valid strongs */
if (vals[0]->v_type != V_STR || vals[1]->v_type != V_STR) {
return error_value(E_FPATHOPEN1);
}
if (count == 3 && vals[2]->v_type != V_STR) {
return error_value(E_FPATHOPEN1);
}
/* check for a valid mode [rwa][b+\0][b+\0] */
mode = vals[1]->v_str->s_str;
if ((*mode != 'r') && (*mode != 'w') && (*mode != 'a'))
return error_value(E_FPATHOPEN2);
if (mode[1] != '\0') {
if (mode[1] != '+' && mode[1] != 'b')
return error_value(E_FPATHOPEN2);
if (mode[2] != '\0') {
if ((mode[2] != '+' && mode[2] != 'b') ||
mode[1] == mode[2])
return error_value(E_FPATHOPEN2);
if (mode[3] != '\0')
return error_value(E_FPATHOPEN2);
}
}
/* try to open along a path */
errno = 0;
if (count == 2) {
id = openpathid(vals[0]->v_str->s_str,
vals[1]->v_str->s_str,
calcpath);
} else {
id = openpathid(vals[0]->v_str->s_str,
vals[1]->v_str->s_str,
vals[2]->v_str->s_str);
}
if (id == FILEID_NONE)
return error_value(errno);
if (id < 0)
return error_value(-id);
result.v_type = V_FILE;
result.v_file = id;
return result;
}
static VALUE static VALUE
f_freopen(int count, VALUE **vals) f_freopen(int count, VALUE **vals)
{ {
@@ -5138,7 +5213,7 @@ f_errcount(int count, VALUE **vals)
static VALUE static VALUE
f_errmax(int count, VALUE **vals) f_errmax(int count, VALUE **vals)
{ {
int oldmax; long oldmax;
VALUE *vp; VALUE *vp;
VALUE result; VALUE result;
@@ -5150,11 +5225,12 @@ f_errmax(int count, VALUE **vals)
vp = vals[0]; vp = vals[0];
if (vp->v_type != V_NUM || qisfrac(vp->v_num) || if (vp->v_type != V_NUM || qisfrac(vp->v_num) ||
zge31b(vp->v_num->num)) zge31b(vp->v_num->num) || zltnegone(vp->v_num->num)) {
fprintf(stderr, fprintf(stderr,
"Out-of-range arg for errmax ignored\n"); "Out-of-range arg for errmax ignored\n");
else } else {
errmax = (int) ztoi(vp->v_num->num); errmax = ztoi(vp->v_num->num);
}
} }
result.v_type = V_NUM; result.v_type = V_NUM;
@@ -5166,7 +5242,7 @@ f_errmax(int count, VALUE **vals)
static VALUE static VALUE
f_stoponerror(int count, VALUE **vals) f_stoponerror(int count, VALUE **vals)
{ {
int oldval; long oldval;
VALUE *vp; VALUE *vp;
VALUE result; VALUE result;
@@ -5178,11 +5254,12 @@ f_stoponerror(int count, VALUE **vals)
vp = vals[0]; vp = vals[0];
if (vp->v_type != V_NUM || qisfrac(vp->v_num) || if (vp->v_type != V_NUM || qisfrac(vp->v_num) ||
zge31b(vp->v_num->num)) zge31b(vp->v_num->num) || zltnegone(vp->v_num->num)) {
fprintf(stderr, fprintf(stderr,
"Out-of-range arg for stoponerror ignored\n"); "Out-of-range arg for stoponerror ignored\n");
else } else {
stoponerror = (int) ztoi(vp->v_num->num); stoponerror = ztoi(vp->v_num->num);
}
} }
result.v_type = V_NUM; result.v_type = V_NUM;
@@ -6196,10 +6273,8 @@ f_reverse(VALUE *val)
{ {
VALUE res; VALUE res;
/* initialize VALUE */
res.v_subtype = V_NOSUBTYPE;
res.v_type = val->v_type; res.v_type = val->v_type;
res.v_subtype = val->v_subtype;
switch(val->v_type) { switch(val->v_type) {
case V_MAT: case V_MAT:
res.v_mat = matcopy(val->v_mat); res.v_mat = matcopy(val->v_mat);
@@ -6227,10 +6302,8 @@ f_sort(VALUE *val)
{ {
VALUE res; VALUE res;
/* initialize VALUE */
res.v_subtype = V_NOSUBTYPE;
res.v_type = val->v_type; res.v_type = val->v_type;
res.v_subtype = val->v_subtype;
switch (val->v_type) { switch (val->v_type) {
case V_MAT: case V_MAT:
res.v_mat = matcopy(val->v_mat); res.v_mat = matcopy(val->v_mat);
@@ -6413,31 +6486,27 @@ f_modify(VALUE *v1, VALUE *v2)
long s; long s;
VALUE res; VALUE res;
VALUE *vp; VALUE *vp;
unsigned short subtype;
/* initialize VALUE */ if (v1->v_type != V_ADDR)
res.v_subtype = V_NOSUBTYPE; return error_value(E_MODIFY1);
if (v1->v_type != V_ADDR) {
math_error("Non-variable first argument for modify");
/*NOTREACHED*/
}
v1 = v1->v_addr; v1 = v1->v_addr;
if (v2->v_type == V_ADDR) if (v2->v_type == V_ADDR)
v2 = v2->v_addr; v2 = v2->v_addr;
if (v2->v_type != V_STR) { if (v2->v_type != V_STR)
math_error("Non-string second argument for modify"); return error_value(E_MODIFY2);
/*NOTREACHED*/ if (v1->v_subtype & V_NONEWVALUE)
} return error_value(E_MODIFY3);
fp = findfunc(adduserfunc(v2->v_str->s_str)); fp = findfunc(adduserfunc(v2->v_str->s_str));
if (!fp) { if (!fp)
math_error("Undefined function for modify"); return error_value(E_MODIFY4);
/*NOTREACHED*/
}
switch (v1->v_type) { switch (v1->v_type) {
case V_LIST: case V_LIST:
for (ep = v1->v_list->l_first; ep; ep = ep->e_next) { for (ep = v1->v_list->l_first; ep; ep = ep->e_next) {
subtype = ep->e_value.v_subtype;
*++stack = ep->e_value; *++stack = ep->e_value;
calculate(fp, 1); calculate(fp, 1);
stack->v_subtype |= subtype;
ep->e_value = *stack--; ep->e_value = *stack--;
} }
break; break;
@@ -6445,16 +6514,29 @@ f_modify(VALUE *v1, VALUE *v2)
vp = v1->v_mat->m_table; vp = v1->v_mat->m_table;
s = v1->v_mat->m_size; s = v1->v_mat->m_size;
while (s-- > 0) { while (s-- > 0) {
subtype = vp->v_subtype;
*++stack = *vp; *++stack = *vp;
calculate(fp, 1); calculate(fp, 1);
stack->v_subtype |= subtype;
*vp++ = *stack--;
}
break;
case V_OBJ:
vp = v1->v_obj->o_table;
s = v1->v_obj->o_actions->oa_count;
while (s-- > 0) {
subtype = vp->v_subtype;
*++stack = *vp;
calculate(fp, 1);
stack->v_subtype |= subtype;
*vp++ = *stack--; *vp++ = *stack--;
} }
break; break;
default: default:
math_error("Non list or matrix first argument for modify"); return error_value(E_MODIFY5);
/*NOTREACHED*/
} }
res.v_type = V_NULL; res.v_type = V_NULL;
res.v_subtype = V_NOSUBTYPE;
return res; return res;
} }
@@ -6657,13 +6739,15 @@ f_cmdbuf(void)
{ {
VALUE result; VALUE result;
char *newcp; char *newcp;
size_t cmdbuf_len; /* length of cmdbuf string */
/* initialize VALUE */ /* initialize VALUE */
result.v_type = V_STR; result.v_type = V_STR;
result.v_subtype = V_NOSUBTYPE; result.v_subtype = V_NOSUBTYPE;
newcp = (char *)malloc(strlen(cmdbuf) + 1); cmdbuf_len = strlen(cmdbuf);
strcpy(newcp, cmdbuf); newcp = (char *)malloc(cmdbuf_len+1);
strncpy(newcp, cmdbuf, cmdbuf_len+1);
result.v_str = makestring(newcp); result.v_str = makestring(newcp);
return result; return result;
} }
@@ -6738,7 +6822,7 @@ f_inputlevel (void)
static VALUE static VALUE
f_calclevel (void) f_calclevel(void)
{ {
VALUE result; VALUE result;
@@ -6751,6 +6835,20 @@ f_calclevel (void)
} }
static VALUE
f_calcpath(void)
{
VALUE result;
/* initialize VALUE */
result.v_type = V_STR;
result.v_subtype = V_NOSUBTYPE;
result.v_str = makenewstring(calcpath);
return result;
}
static VALUE static VALUE
f_access(int count, VALUE **vals) f_access(int count, VALUE **vals)
{ {
@@ -6758,7 +6856,8 @@ f_access(int count, VALUE **vals)
int m; int m;
char *s, *fname; char *s, *fname;
VALUE result; VALUE result;
long i; size_t len;
int i;
/* initialize VALUE */ /* initialize VALUE */
result.v_type = V_NULL; result.v_type = V_NULL;
@@ -6779,8 +6878,8 @@ f_access(int count, VALUE **vals)
break; break;
case V_STR: case V_STR:
s = vals[1]->v_str->s_str; s = vals[1]->v_str->s_str;
i = (long)strlen(s); len = (long)strlen(s);
while (i-- > 0) { while (len-- > 0) {
switch (*s++) { switch (*s++) {
case 'r': m |= 4; break; case 'r': m |= 4; break;
case 'w': m |= 2; break; case 'w': m |= 2; break;
@@ -6855,7 +6954,8 @@ f_putenv(int count, VALUE **vals)
math_error("Cannot allocate string in putenv"); math_error("Cannot allocate string in putenv");
/*NOTREACHED*/ /*NOTREACHED*/
} }
strcpy(putenv_str, vals[0]->v_str->s_str); strncpy(putenv_str, vals[0]->v_str->s_str,
vals[0]->v_str->s_len + 1);
} }
/* return putenv result */ /* return putenv result */
@@ -6912,7 +7012,7 @@ f_system(VALUE *vp)
} }
#if defined(_WIN32) #if defined(_WIN32)
/* if the execute length is 0 then just return 0 */ /* if the execute length is 0 then just return 0 */
if (strlen(vp->v_str->s_str) == 0) { if (vp->v_str->s_len == 0) {
result.v_num = itoq((long)0); result.v_num = itoq((long)0);
} else { } else {
result.v_num = itoq((long)system(vp->v_str->s_str)); result.v_num = itoq((long)system(vp->v_str->s_str));
@@ -7820,14 +7920,14 @@ f_version(void)
* *
* For nice output, when the description of function (b_desc) * For nice output, when the description of function (b_desc)
* gets too long (extends into col 79) you should chop the * gets too long (extends into col 79) you should chop the
* line and add "\n\t\t ", thats newline, 2 tabs a 4 spaces. * line and add "\n\t\t\t", that's newline and 3 tabs.
* For example the description: * For example the description:
* *
* ... very long description that goes beyond col 79 * ... very long description that goes beyond col 79
* *
* should be written as: * should be written as:
* *
* "... very long description that\n\t\t goes beyond col 79"}, * "... very long description that\n\t\t\tgoes beyond col 79"},
* *
* fields: * fields:
* b_name name of built-in function * b_name name of built-in function
@@ -7904,16 +8004,18 @@ static CONST struct builtin builtins[] = {
"round value a to b number of binary places"}, "round value a to b number of binary places"},
{"btrunc", 1, 2, 0, OP_NOP, f_btrunc, 0, {"btrunc", 1, 2, 0, OP_NOP, f_btrunc, 0,
"truncate a to b number of binary places"}, "truncate a to b number of binary places"},
{"calclevel", 0, 0, 0, OP_NOP, 0, f_calclevel,
"current calculation level"},
{"calc_tty", 0, 0, 0, OP_NOP, 0, f_calc_tty, {"calc_tty", 0, 0, 0, OP_NOP, 0, f_calc_tty,
"set tty for interactivity"}, "set tty for interactivity"},
{"calclevel", 0, 0, 0, OP_NOP, 0, f_calclevel,
"current calculation level"},
{"calcpath", 0, 0, 0, OP_NOP, 0, f_calcpath,
"current CALCPATH search path value"},
{"catalan", 1, 1, 0, OP_NOP, 0, f_catalan, {"catalan", 1, 1, 0, OP_NOP, 0, f_catalan,
"catalan number for index a"}, "catalan number for index a"},
{"ceil", 1, 1, 0, OP_NOP, 0, f_ceil, {"ceil", 1, 1, 0, OP_NOP, 0, f_ceil,
"smallest integer greater than or equal to number"}, "smallest integer greater than or equal to number"},
{"cfappr", 1, 3, 0, OP_NOP, f_cfappr, 0, {"cfappr", 1, 3, 0, OP_NOP, f_cfappr, 0,
"approximate a within accuracy b using\n\t\t continued fractions"}, "approximate a within accuracy b using\n\t\t\tcontinued fractions"},
{"cfsim", 1, 2, 0, OP_NOP, f_cfsim, 0, {"cfsim", 1, 2, 0, OP_NOP, f_cfsim, 0,
"simplify number using continued fractions"}, "simplify number using continued fractions"},
{"char", 1, 1, 0, OP_NOP, 0, f_char, {"char", 1, 1, 0, OP_NOP, 0, f_char,
@@ -8009,13 +8111,15 @@ static CONST struct builtin builtins[] = {
{"fgets", 1, 1, 0, OP_NOP, 0, f_fgets, {"fgets", 1, 1, 0, OP_NOP, 0, f_fgets,
"read next line from file, newline is kept"}, "read next line from file, newline is kept"},
{"fgetstr", 1, 1, 0, OP_NOP, 0, f_fgetstr, {"fgetstr", 1, 1, 0, OP_NOP, 0, f_fgetstr,
"read next null-terminated string from file, null character is kept"}, "read next null-terminated string from file, null\n\t\t\tcharacter is kept"},
{"files", 0, 1, 0, OP_NOP, 0, f_files, {"files", 0, 1, 0, OP_NOP, 0, f_files,
"return opened file or max number of opened files"}, "return opened file or max number of opened files"},
{"floor", 1, 1, 0, OP_NOP, 0, f_floor, {"floor", 1, 1, 0, OP_NOP, 0, f_floor,
"greatest integer less than or equal to number"}, "greatest integer less than or equal to number"},
{"fopen", 2, 2, 0, OP_NOP, 0, f_fopen, {"fopen", 2, 2, 0, OP_NOP, 0, f_fopen,
"open file name a in mode b"}, "open file name a in mode b"},
{"fpathopen", 2, 3, 0, OP_NOP, 0, f_fpathopen,
"open file name a in mode b, search for a along\n\t\t\tCALCPATH or path c"},
{"fprintf", 2, IN, 0, OP_NOP, 0, f_fprintf, {"fprintf", 2, IN, 0, OP_NOP, 0, f_fprintf,
"print formatted output to opened file"}, "print formatted output to opened file"},
{"fputc", 2, 2, 0, OP_NOP, 0, f_fputc, {"fputc", 2, 2, 0, OP_NOP, 0, f_fputc,
@@ -8039,9 +8143,9 @@ static CONST struct builtin builtins[] = {
{"freopen", 2, 3, 0, OP_NOP, 0, f_freopen, {"freopen", 2, 3, 0, OP_NOP, 0, f_freopen,
"reopen a file stream to a named file"}, "reopen a file stream to a named file"},
{"fscan", 2, IN, FA, OP_NOP, 0, f_fscan, {"fscan", 2, IN, FA, OP_NOP, 0, f_fscan,
"scan a file for assignments to one or more variables"}, "scan a file for assignments to one or\n\t\t\tmore variables"},
{"fscanf", 2, IN, FA, OP_NOP, 0, f_fscanf, {"fscanf", 2, IN, FA, OP_NOP, 0, f_fscanf,
"formatted scan of a file for assignment to one or more variables"}, "formatted scan of a file for assignment to one\n\t\t\tor more variables"},
{"fseek", 2, 3, 0, OP_NOP, 0, f_fseek, {"fseek", 2, 3, 0, OP_NOP, 0, f_fseek,
"seek to position b (offset from c) in file a"}, "seek to position b (offset from c) in file a"},
{"fsize", 1, 1, 0, OP_NOP, 0, f_fsize, {"fsize", 1, 1, 0, OP_NOP, 0, f_fsize,
@@ -8059,7 +8163,7 @@ static CONST struct builtin builtins[] = {
{"getenv", 1, 1, 0, OP_NOP, 0, f_getenv, {"getenv", 1, 1, 0, OP_NOP, 0, f_getenv,
"value of environment variable (or NULL)"}, "value of environment variable (or NULL)"},
{"hash", 1, IN, 0, OP_NOP, 0, f_hash, {"hash", 1, IN, 0, OP_NOP, 0, f_hash,
"return non-negative hash value for one or\n\t\t more values"}, "return non-negative hash value for one or\n\t\t\tmore values"},
{"head", 2, 2, 0, OP_NOP, 0, f_head, {"head", 2, 2, 0, OP_NOP, 0, f_head,
"return list of specified number at head of a list"}, "return list of specified number at head of a list"},
{"highbit", 1, 1, 0, OP_HIGHBIT, 0, 0, {"highbit", 1, 1, 0, OP_HIGHBIT, 0, 0,
@@ -8153,7 +8257,7 @@ static CONST struct builtin builtins[] = {
{"istype", 2, 2, 0, OP_ISTYPE, 0, 0, {"istype", 2, 2, 0, OP_ISTYPE, 0, 0,
"whether the type of a is same as the type of b"}, "whether the type of a is same as the type of b"},
{"jacobi", 2, 2, 0, OP_NOP, qjacobi, 0, {"jacobi", 2, 2, 0, OP_NOP, qjacobi, 0,
"-1 => a is not quadratic residue mod b\n\t\t 1 => b is composite, or a is quad residue of b"}, "-1 => a is not quadratic residue mod b\n\t\t\t1 => b is composite, or a is quad residue of b"},
{"join", 1, IN, 0, OP_NOP, 0, f_join, {"join", 1, IN, 0, OP_NOP, 0, f_join,
"join one or more lists into one list"}, "join one or more lists into one list"},
{"lcm", 1, IN, 0, OP_NOP, f_lcm, 0, {"lcm", 1, IN, 0, OP_NOP, f_lcm, 0,
@@ -8168,6 +8272,8 @@ static CONST struct builtin builtins[] = {
"create list of specified values"}, "create list of specified values"},
{"ln", 1, 2, 0, OP_NOP, 0, f_ln, {"ln", 1, 2, 0, OP_NOP, 0, f_ln,
"natural logarithm of value a within accuracy b"}, "natural logarithm of value a within accuracy b"},
{"log", 1, 2, 0, OP_NOP, 0, f_log,
"base 10 logarithm of value a within accuracy b"},
{"lowbit", 1, 1, 0, OP_LOWBIT, 0, 0, {"lowbit", 1, 1, 0, OP_LOWBIT, 0, 0,
"low bit number in base 2 representation"}, "low bit number in base 2 representation"},
{"ltol", 1, 2, FE, OP_NOP, f_legtoleg, 0, {"ltol", 1, 2, FE, OP_NOP, f_legtoleg, 0,
@@ -8227,7 +8333,7 @@ static CONST struct builtin builtins[] = {
{"ord", 1, 1, 0, OP_NOP, 0, f_ord, {"ord", 1, 1, 0, OP_NOP, 0, f_ord,
"integer corresponding to character value"}, "integer corresponding to character value"},
{"param", 1, 1, 0, OP_ARGVALUE, 0, 0, {"param", 1, 1, 0, OP_ARGVALUE, 0, 0,
"value of parameter n (or parameter count if n\n\t\t is zero)"}, "value of parameter n (or parameter count if n\n\t\t\tis zero)"},
{"perm", 2, 2, 0, OP_NOP, qperm, 0, {"perm", 2, 2, 0, OP_NOP, qperm, 0,
"permutation number a!/(a-b)!"}, "permutation number a!/(a-b)!"},
{"prevcand", 1, 5, 0, OP_NOP, f_prevcand, 0, {"prevcand", 1, 5, 0, OP_NOP, f_prevcand, 0,
@@ -8247,14 +8353,14 @@ static CONST struct builtin builtins[] = {
{"polar", 2, 3, 0, OP_NOP, 0, f_polar, {"polar", 2, 3, 0, OP_NOP, 0, f_polar,
"complex value of polar coordinate (a * exp(b*1i))"}, "complex value of polar coordinate (a * exp(b*1i))"},
{"poly", 1, IN, 0, OP_NOP, 0, f_poly, {"poly", 1, IN, 0, OP_NOP, 0, f_poly,
"evaluates a polynomial given its coefficients or coefficient-list"}, "evaluates a polynomial given its coefficients\n\t\t\tor coefficient-list"},
{"pop", 1, 1, FA, OP_NOP, 0, f_listpop, {"pop", 1, 1, FA, OP_NOP, 0, f_listpop,
"pop value from front of list"}, "pop value from front of list"},
{"popcnt", 1, 2, 0, OP_NOP, f_popcnt, 0, {"popcnt", 1, 2, 0, OP_NOP, f_popcnt, 0,
"number of bits in a that match b (or 1)"}, "number of bits in a that match b (or 1)"},
{"power", 2, 3, 0, OP_NOP, 0, f_power, {"power", 2, 3, 0, OP_NOP, 0, f_power,
"value a raised to the power b within accuracy c"}, "value a raised to the power b within accuracy c"},
{"protect", 1, 2, FA, OP_NOP, 0, f_protect, {"protect", 1, 3, FA, OP_NOP, 0, f_protect,
"read or set protection level for variable"}, "read or set protection level for variable"},
{"ptest", 1, 3, 0, OP_NOP, f_primetest, 0, {"ptest", 1, 3, 0, OP_NOP, f_primetest, 0,
"probabilistic primality test"}, "probabilistic primality test"},
@@ -8269,7 +8375,7 @@ static CONST struct builtin builtins[] = {
{"quo", 2, 3, 0, OP_NOP, 0, f_quo, {"quo", 2, 3, 0, OP_NOP, 0, f_quo,
"integer quotient of a by b, rounding type c"}, "integer quotient of a by b, rounding type c"},
{"quomod", 4, 4, 0, OP_QUOMOD, 0, 0, {"quomod", 4, 4, 0, OP_QUOMOD, 0, 0,
"set c and d to quotient and remainder of a\n\t\t divided by b"}, "set c and d to quotient and remainder of a\n\t\t\tdivided by b"},
{"rand", 0, 2, 0, OP_NOP, f_rand, 0, {"rand", 0, 2, 0, OP_NOP, f_rand, 0,
"additive 55 random number [0,2^64), [0,a), or [a,b)"}, "additive 55 random number [0,2^64), [0,a), or [a,b)"},
{"randbit", 0, 1, 0, OP_NOP, f_randbit, 0, {"randbit", 0, 1, 0, OP_NOP, f_randbit, 0,
@@ -8305,7 +8411,7 @@ static CONST struct builtin builtins[] = {
{"round", 1, 3, 0, OP_NOP, 0, f_round, {"round", 1, 3, 0, OP_NOP, 0, f_round,
"round value a to b number of decimal places"}, "round value a to b number of decimal places"},
{"rsearch", 2, 4, 0, OP_NOP, 0, f_rsearch, {"rsearch", 2, 4, 0, OP_NOP, 0, f_rsearch,
"reverse search matrix or list for value b\n\t\t starting at index c"}, "reverse search matrix or list for value b\n\t\t\tstarting at index c"},
{"runtime", 0, 0, 0, OP_NOP, f_runtime, 0, {"runtime", 0, 0, 0, OP_NOP, f_runtime, 0,
"user mode cpu time in seconds"}, "user mode cpu time in seconds"},
{"saveval", 1, 1, 0, OP_SAVEVAL, 0, 0, {"saveval", 1, 1, 0, OP_SAVEVAL, 0, 0,
@@ -8313,11 +8419,11 @@ static CONST struct builtin builtins[] = {
{"scale", 2, 2, 0, OP_SCALE, 0, 0, {"scale", 2, 2, 0, OP_SCALE, 0, 0,
"scale value up or down by a power of two"}, "scale value up or down by a power of two"},
{"scan", 1, IN, FA, OP_NOP, 0, f_scan, {"scan", 1, IN, FA, OP_NOP, 0, f_scan,
"scan standard input for assignment to one or more variables"}, "scan standard input for assignment to one\n\t\t\tor more variables"},
{"scanf", 2, IN, FA, OP_NOP, 0, f_scanf, {"scanf", 2, IN, FA, OP_NOP, 0, f_scanf,
"formatted scan of standard input for assignment to variables"}, "formatted scan of standard input for assignment\n\t\t\tto variables"},
{"search", 2, 4, 0, OP_NOP, 0, f_search, {"search", 2, 4, 0, OP_NOP, 0, f_search,
"search matrix or list for value b starting\n\t\t at index c"}, "search matrix or list for value b starting\n\t\t\tat index c"},
{"sec", 1, 2, 0, OP_NOP, 0, f_sec, {"sec", 1, 2, 0, OP_NOP, 0, f_sec,
"sec of a within accuracy b"}, "sec of a within accuracy b"},
{"sech", 1, 2, 0, OP_NOP, 0, f_sech, {"sech", 1, 2, 0, OP_NOP, 0, f_sech,
@@ -8363,9 +8469,9 @@ static CONST struct builtin builtins[] = {
{"strcat", 1,IN, 0, OP_NOP, 0, f_strcat, {"strcat", 1,IN, 0, OP_NOP, 0, f_strcat,
"concatenate strings together"}, "concatenate strings together"},
{"strcmp", 2, 2, 0, OP_NOP, 0, f_strcmp, {"strcmp", 2, 2, 0, OP_NOP, 0, f_strcmp,
"compare two null-terminated strings"}, "compare two strings"},
{"strcpy", 2, 2, 0, OP_NOP, 0, f_strcpy, {"strcpy", 2, 2, 0, OP_NOP, 0, f_strcpy,
"copy null-terminated string to string"}, "copy string to string"},
{"strerror", 0, 1, 0, OP_NOP, 0, f_strerror, {"strerror", 0, 1, 0, OP_NOP, 0, f_strerror,
"string describing error type"}, "string describing error type"},
{"strlen", 1, 1, 0, OP_NOP, 0, f_strlen, {"strlen", 1, 1, 0, OP_NOP, 0, f_strlen,
@@ -8450,10 +8556,11 @@ void
showbuiltins(void) showbuiltins(void)
{ {
CONST struct builtin *bp; /* current function */ CONST struct builtin *bp; /* current function */
int i;
printf("\nName\tArgs\tDescription\n\n"); printf("\nName\tArgs\tDescription\n\n");
for (bp = builtins; bp->b_name; bp++) { for (bp = builtins, i = 0; bp->b_name; bp++, i++) {
printf("%-9s ", bp->b_name); printf("%-14s ", bp->b_name);
if (bp->b_maxargs == IN) if (bp->b_maxargs == IN)
printf("%d+ ", bp->b_minargs); printf("%d+ ", bp->b_minargs);
else if (bp->b_minargs == bp->b_maxargs) else if (bp->b_minargs == bp->b_maxargs)
@@ -8461,6 +8568,11 @@ showbuiltins(void)
else else
printf("%d-%-4d", bp->b_minargs, bp->b_maxargs); printf("%d-%-4d", bp->b_minargs, bp->b_maxargs);
printf("%s\n", bp->b_desc); printf("%s\n", bp->b_desc);
if (i == 32) {
i = 0;
if (getchar() == 27)
break;
}
} }
printf("\n"); printf("\n");
} }
@@ -8551,6 +8663,7 @@ builtinfunc(long index, int argcount, VALUE *stck)
vpp++; vpp++;
} }
result.v_type = V_NUM; result.v_type = V_NUM;
result.v_subtype = V_NOSUBTYPE;
if (!(bp->b_flags & FE) && (bp->b_minargs != bp->b_maxargs)) { if (!(bp->b_flags & FE) && (bp->b_minargs != bp->b_maxargs)) {
result.v_num = (*bp->b_numfunc)(argcount, numargs); result.v_num = (*bp->b_numfunc)(argcount, numargs);
return result; return result;

8
hash.c
View File

@@ -1,7 +1,7 @@
/* /*
* hash - one-way hash routines * 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 * Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.6 $ * @(#) $Revision: 29.8 $
* @(#) $Id: hash.c,v 29.6 2004/02/25 23:55:38 chongo Exp $ * @(#) $Id: hash.c,v 29.8 2006/05/19 15:26:10 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/hash.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/hash.c,v $
* *
* Under source code control: 1995/11/23 05:13:11 * Under source code control: 1995/11/23 05:13:11
@@ -596,7 +596,7 @@ hash_complex(int type, void *c, HASH *state)
HASH * HASH *
hash_str(int type, char *str, HASH *state) hash_str(int type, char *str, HASH *state)
{ {
USB32 len; /* string length */ size_t len; /* string length */
/* /*
* initialize if state is NULL * initialize if state is NULL

View File

@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
# @(#) $Revision: 29.25 $ # @(#) $Revision: 29.28 $
# @(#) $Id: Makefile,v 29.25 2004/07/28 12:21:05 chongo Exp $ # @(#) $Id: Makefile,v 29.28 2006/05/07 12:59:51 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/help/RCS/Makefile,v $ # @(#) $Source: /usr/local/src/cmd/calc/help/RCS/Makefile,v $
# #
# Under source code control: 1991/07/23 06:47:57 # Under source code control: 1991/07/23 06:47:57
@@ -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. # 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 \ 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 \ appr arg argv arrow asec asech asin asinh assign atan atan2 atanh \
avg base base2 bernoulli bit blk blkcpy blkfree blocks bround btrunc \ avg base base2 bernoulli bit blk blkcpy blkfree blocks bround btrunc \
calc_tty calclevel catalan ceil cfappr cfsim char cmdbuf cmp comb \ calc_tty calclevel catalan ceil cfappr cfsim char cmdbuf cmp comb \
conj cos cosh cot coth count cp csc csch ctime delete den dereference \ conj cos cosh cot coth count cp csc csch ctime delete den dereference \
det digit digits display dp epsilon errcount errmax errno error euler \ det digit digits display dp epsilon errcount errmax errno error \
eval exp fact factor fclose fcnt feof ferror fflush fgetc fgetfield \ euler eval exp fact factor fclose fcnt feof ferror fflush fgetc \
fgetline fgets fgetstr fib files floor fopen forall fprintf fputc \ fgetfield fgetline fgets fgetstr fib files floor fopen forall \
fputs fputstr frac free freebernoulli freeeuler freeglobals freeredc \ fpathopen fprintf fputc fputs fputstr frac free freebernoulli \
freestatics frem freopen fscan fscanf fseek fsize ftell gcd gcdrem \ freeeuler freeglobals freeredc freestatics frem freopen fscan \
gd getenv hash head highbit hmean hnrmod hypot ilog ilog10 ilog2 \ fscanf fseek fsize ftell gcd gcdrem gd getenv hash head highbit \
im indices inputlevel insert int inverse iroot isassoc isatty isblk \ hmean hnrmod hypot ilog ilog10 ilog2 im indices inputlevel insert \
isconfig isdefined iserror iseven isfile ishash isident isint islist \ int inverse iroot isassoc isatty isblk isconfig isdefined iserror \
ismat ismult isnull isnum isobj isobjtype isodd isprime isptr isqrt \ iseven isfile ishash isident isint islist ismat ismult isnull isnum \
isrand israndom isreal isrel issimple issq isstr istype jacobi join \ isobj isobjtype isodd isprime isptr isqrt isrand israndom isreal \
lcm lcmfact lfactor ln lowbit ltol makelist matdim matfill matmax \ isrel issimple issq isstr istype jacobi join lcm lcmfact lfactor \
matmin matsum mattrace mattrans max md5 memsize meq min minv mmin \ ln log lowbit ltol makelist matdim matfill matmax matmin matsum \
mne mod modify name near newerror nextcand nextprime norm null \ mattrace mattrans max md5 memsize meq min minv mmin mne mod modify \
num oldvalue ord param perm pfact pi pix places pmod polar poly \ name near newerror nextcand nextprime norm null num oldvalue ord \
pop popcnt power prevcand prevprime printf prompt protect ptest \ param perm pfact pi pix places pmod polar poly pop popcnt power \
push putenv quo quomod rand randbit random randombit randperm rcin \ prevcand prevprime printf prompt protect ptest push putenv quo \
rcmul rcout rcpow rcsq re remove reverse rewind rm root round rsearch \ quomod rand randbit random randombit randperm rcin rcmul rcout \
runtime saveval scale scan scanf search sec sech seed segment select \ rcpow rcsq re remove reverse rewind rm root round rsearch runtime \
sgn sha sha1 sin sinh size sizeof sleep sort sqrt srand srandom \ saveval scale scan scanf search sec sech seed segment select sgn \
ssq str strcat strerror strlen strpos strprintf strscan strscanf \ sha sha1 sin sinh size sizeof sleep sort sqrt srand srandom ssq \
substr sum swap system tail tan tanh test time trunc version xor 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 # This list is of files that are clones of DETAIL_HELP files. They are
# built from DETAIL_HELP files. # built from DETAIL_HELP files.

View File

@@ -29,10 +29,10 @@ DESCRIPTION
the result will be the absolute value correct to n decimal places. the result will be the absolute value correct to n decimal places.
EXAMPLE EXAMPLE
> print abs(3.4), abs(-3.4) ; print abs(3.4), abs(-3.4)
3.4 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 5 6.40312 6.4031242374
LIMITS LIMITS
@@ -60,8 +60,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: abs,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: abs,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/abs,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/abs,v $
## ##
## Under source code control: 1994/03/19 01:40:22 ## Under source code control: 1994/03/19 01:40:22

View File

@@ -23,19 +23,19 @@ EXAMPLE
The system error-numbers and messages may differ for different The system error-numbers and messages may differ for different
implementations implementations
> !rm -f junk ; !rm -f junk
> access("junk") ; access("junk")
System error 2 System error 2
> strerror(.) ; strerror(.)
"No such file or directory" "No such file or directory"
> f = fopen("junk", "w") ; f = fopen("junk", "w")
> access("junk") ; access("junk")
> fputs(f, "Alpha") ; fputs(f, "Alpha")
> fclose(f) ; fclose(f)
> !chmod u-w junk ; !chmod u-w junk
> access("junk", "w") ; access("junk", "w")
System error 13 System error 13
> strerror(.) ; strerror(.)
"Permission denied" "Permission denied"
LIMITS LIMITS
@@ -64,8 +64,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: access,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: access,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/access,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/access,v $
## ##
## Under source code control: 1996/04/30 03:36:20 ## Under source code control: 1996/04/30 03:36:20

View File

@@ -17,7 +17,7 @@ DESCRIPTION
v = acos(x) is the number in [0, pi] for which cos(v) = x. v = acos(x) is the number in [0, pi] for which cos(v) = x.
EXAMPLE 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 1.0472 1.0471975512 1.047197551196598 1.04719755119659774615
LIMITS LIMITS
@@ -45,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: acos,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: acos,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acos,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acos,v $
## ##
## Under source code control: 1994/03/19 01:40:23 ## Under source code control: 1994/03/19 01:40:23

View File

@@ -20,7 +20,7 @@ DESCRIPTION
acosh(x) = ln(x + sqrt(x^2 - 1)) acosh(x) = ln(x + sqrt(x^2 - 1))
EXAMPLE 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 1.31696 1.3169578969 1.316957896924817 1.31695789692481670862
LIMITS LIMITS
@@ -48,8 +48,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: acosh,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: acosh,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acosh,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acosh,v $
## ##
## Under source code control: 1994/03/19 01:40:24 ## Under source code control: 1994/03/19 01:40:24

View File

@@ -17,7 +17,7 @@ DESCRIPTION
v = acot(x) is the number in (0, pi) for which cot(v) = x. v = acot(x) is the number in (0, pi) for which cot(v) = x.
EXAMPLE 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 .46365 .463647609 .463647609000806 .46364760900080611621
LIMITS LIMITS
@@ -45,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: acot,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: acot,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acot,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acot,v $
## ##
## Under source code control: 1995/11/13 03:49:00 ## Under source code control: 1995/11/13 03:49:00

View File

@@ -19,7 +19,7 @@ DESCRIPTION
acoth(x) = ln((x + 1)/(x - 1))/2 acoth(x) = ln((x + 1)/(x - 1))/2
EXAMPLE 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 .54931 .5493061443 .549306144334055 .5493061443340548457
LIMITS LIMITS
@@ -47,8 +47,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: acoth,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: acoth,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acoth,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acoth,v $
## ##
## Under source code control: 1995/11/13 03:49:01 ## Under source code control: 1995/11/13 03:49:01

View File

@@ -17,7 +17,7 @@ DESCRIPTION
v = acsc(x) is the number in [-pi/2, pi/2] for which csc(v) = x. v = acsc(x) is the number in [-pi/2, pi/2] for which csc(v) = x.
EXAMPLE 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 .5236 .5235987756 .523598775598299 .52359877559829887308
LIMITS LIMITS
@@ -45,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: acsc,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: acsc,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acsc,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acsc,v $
## ##
## Under source code control: 1995/11/13 03:49:00 ## Under source code control: 1995/11/13 03:49:00

View File

@@ -20,7 +20,7 @@ DESCRIPTION
EXAMPLE 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 .48121 .4812118251 .481211825059603 .4812118250596034475
LIMITS LIMITS
@@ -48,8 +48,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: acsch,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: acsch,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acsch,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/acsch,v $
## ##
## Under source code control: 1995/11/13 03:49:01 ## Under source code control: 1995/11/13 03:49:01

View File

@@ -134,21 +134,21 @@ DESCRIPTION
EXAMPLE EXAMPLE
Addresses for particular systems may differ from those displayed here. Addresses for particular systems may differ from those displayed here.
> mat A[3] ; mat A[3]
> B = blk() ; B = blk()
> print &A, &A[0], &A[1] ; print &A, &A[0], &A[1]
v-ptr: 1400470d0 v-ptr: 140044b70 v-ptr: 140044b80 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 v-ptr: 140047130 o-ptr: 140044d00 o-ptr: 140044d01
> a = A[0] = 27 ; a = A[0] = 27
> print &*a, &*A[0]. &27 ; print &*a, &*A[0]. &27
n_ptr: 14003a850 n_ptr: 14003a850 n_ptr: 14003a850 n_ptr: 14003a850 n_ptr: 14003a850 n_ptr: 14003a850
> a = A[0] = "abc" ; a = A[0] = "abc"
> print &*a, &*A[0], &"abc" ; print &*a, &*A[0], &"abc"
s_ptr: 14004cae0 s_ptr: 14004cae0 s_ptr: 14004cae0 s_ptr: 14004cae0 s_ptr: 14004cae0 s_ptr: 14004cae0
LIMITS LIMITS
@@ -176,8 +176,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: address,v 29.3 2002/07/10 11:47:04 chongo Exp $ ## @(#) $Id: address,v 29.4 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/address,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/address,v $
## ##
## Under source code control: 1997/09/06 20:03:34 ## Under source code control: 1997/09/06 20:03:34

View File

@@ -35,16 +35,16 @@ DESCRIPTION
EXAMPLE 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 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 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 -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 .22751+1.42291i .2275106584+1.4229114625i
LIMITS LIMITS
@@ -72,8 +72,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: agd,v 29.3 2005/10/18 10:48:29 chongo Exp $ ## @(#) $Id: agd,v 29.4 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/agd,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/agd,v $
## ##
## Under source code control: 1997/09/06 20:03:34 ## Under source code control: 1997/09/06 20:03:34

View File

@@ -19,9 +19,9 @@ DESCRIPTION
append(x, y_0, y_1, ...) is equivalent to insert(x, n, y_0, y_1, ...). append(x, y_0, y_1, ...) is equivalent to insert(x, n, y_0, y_1, ...).
EXAMPLE EXAMPLE
> x = list(2,3,4) ; x = list(2,3,4)
> append(x, 5, 6) ; append(x, 5, 6)
> print x ; print x
list (5 elements, 5 nonzero): list (5 elements, 5 nonzero):
[[0]] = 2 [[0]] = 2
@@ -30,8 +30,8 @@ EXAMPLE
[[3]] = 5 [[3]] = 5
[[4]] = 6 [[4]] = 6
> append(x, pop(x), pop(x)) ; append(x, pop(x), pop(x))
> print x ; print x
list (5 elements, 5 nonzero): list (5 elements, 5 nonzero):
[[0]] = 4 [[0]] = 4
@@ -40,8 +40,8 @@ EXAMPLE
[[3]] = 2 [[3]] = 2
[[4]] = 3 [[4]] = 3
> append(x, (remove(x), 7)) ; append(x, (remove(x), 7))
> print x ; print x
list (5 elements, 5 nonzero): list (5 elements, 5 nonzero):
[[0]] = 4 [[0]] = 4
@@ -75,8 +75,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: append,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: append,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/append,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/append,v $
## ##
## Under source code control: 1994/03/19 03:13:17 ## Under source code control: 1994/03/19 03:13:17

View File

@@ -97,47 +97,47 @@ PROPERTIES
If y is nonzero, appr(x,y,8)/y = an odd integer n only if x = n * y. If y is nonzero, appr(x,y,8)/y = an odd integer n only if x = n * y.
EXAMPLES 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 -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 -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 -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 -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 -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 -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 -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 -.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 -.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 -.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 -.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 -.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 -.4 .5 5 -6
> x = sqrt(7-3i, 1e-20) ; 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) ; print appr(x,1e-5,0), appr(x,1e-5,1), appr(x,1e-5,2), appr(x,1e-6,3)
2.70331-.55488i 2.70332-.55487i 2.70331-.55487i 2.70332-.55488i 2.70331-.55488i 2.70332-.55487i 2.70331-.55487i 2.70332-.55488i
LIMITS LIMITS
@@ -167,8 +167,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: appr,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: appr,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/appr,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/appr,v $
## ##
## Under source code control: 1994/09/25 17:18:21 ## Under source code control: 1994/09/25 17:18:21

View File

@@ -16,11 +16,11 @@ DESCRIPTION
but usually less than 0.5 * abs(eps). but usually less than 0.5 * abs(eps).
EXAMPLE 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 0 .98279 .9827937232 .98279372324732906799
> pi = pi(1e-10); deg = pi/180; eps = deg/10000 ; 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 ; print arg(2+3i, eps)/deg, arg(-1 +1i, eps)/deg, arg(-1 - 1i,eps)/deg
56.3099 135 -135 56.3099 135 -135
LIMITS LIMITS
@@ -48,8 +48,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: arg,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: arg,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/arg,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/arg,v $
## ##
## Under source code control: 1994/09/25 20:22:31 ## Under source code control: 1994/09/25 20:22:31

View File

@@ -38,8 +38,8 @@ DESCRIPTION
EXAMPLE EXAMPLE
$ calc -s a bb ccc $ calc -s a bb ccc
> argc = argv(); ; argc = argv();
> for (i = 0; i < argc; i++) print "argv[": i : '] = "': argv(i) : '"'; ; for (i = 0; i < argc; i++) print "argv[": i : '] = "': argv(i) : '"';
argv[0] = "a" argv[0] = "a"
argv[1] = "bb" argv[1] = "bb"
argv[2] = "ccc" argv[2] = "ccc"
@@ -69,8 +69,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: argv,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: argv,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/argv,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/argv,v $
## ##
## Under source code control: 1999/11/23 19:45:05 ## Under source code control: 1999/11/23 19:45:05

View File

@@ -23,21 +23,21 @@ DESCRIPTION
Spaces or tabs on either side of -> are optional. Spaces or tabs on either side of -> are optional.
EXAMPLES EXAMPLES
> obj pair {one, two} ; obj pair {one, two}
> obj pair A, B ; obj pair A, B
> p = &A ; p = &A
> p->one = 1; p->two = 2 ; p->one = 1; p->two = 2
> A ; A
obj pair {1, 2} obj pair {1, 2}
> A->two = &B ; A->two = &B
> p->two->one = 3; p->two->two = 4 ; p->two->one = 3; p->two->two = 4
> *p->ptwo ; *p->ptwo
obj pair {3, 4} obj pair {3, 4}
> B = {5,6} ; B = {5,6}
> *p->two ; *p->two
obj pair {5, 6} obj pair {5, 6}
@@ -66,8 +66,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: arrow,v 29.3 2002/07/10 11:47:04 chongo Exp $ ## @(#) $Id: arrow,v 29.4 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/arrow,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/arrow,v $
## ##
## Under source code control: 1997/09/06 20:03:34 ## Under source code control: 1997/09/06 20:03:34

View File

@@ -17,7 +17,7 @@ DESCRIPTION
v = asec(x) is the number in [0, pi] for which sec(v) = x. v = asec(x) is the number in [0, pi] for which sec(v) = x.
EXAMPLE 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 1.0472 1.0471975512 1.047197551196598 1.04719755119659774615
LIMITS LIMITS
@@ -45,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: asec,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: asec,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asec,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asec,v $
## ##
## Under source code control: 1995/11/13 03:49:00 ## Under source code control: 1995/11/13 03:49:00

View File

@@ -19,7 +19,7 @@ DESCRIPTION
asech(x) = ln((1 + sqrt(1 - x^2))/x) asech(x) = ln((1 + sqrt(1 - x^2))/x)
EXAMPLE 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 1.31696 1.3169578969 1.316957896924817 1.31695789692481670862
LIMITS LIMITS
@@ -47,8 +47,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: asech,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: asech,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asech,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asech,v $
## ##
## Under source code control: 1995/11/13 03:49:00 ## Under source code control: 1995/11/13 03:49:00

View File

@@ -17,7 +17,7 @@ DESCRIPTION
v = asin(x) is the number in [-pi/2, pi/2] for which sin(v) = x. v = asin(x) is the number in [-pi/2, pi/2] for which sin(v) = x.
EXAMPLE EXAMPLE
> print asin(.5, 1e-5), asin(.5, 1e-10), asin(.5, 1e-15), asin(.5, 1e-20) ; print asin(.5, 1e-5), asin(.5, 1e-10), asin(.5, 1e-15), asin(.5, 1e-20)
.5236 .5235987756 .523598775598299 .52359877559829887308 .5236 .5235987756 .523598775598299 .52359877559829887308
LIMITS LIMITS
@@ -45,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: asin,v 29.3 2002/07/10 11:47:04 chongo Exp $ ## @(#) $Id: asin,v 29.4 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asin,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asin,v $
## ##
## Under source code control: 1994/03/19 01:40:24 ## Under source code control: 1994/03/19 01:40:24

View File

@@ -19,7 +19,7 @@ DESCRIPTION
asinh(x) = ln(x + sqrt(1 + x^2)) asinh(x) = ln(x + sqrt(1 + x^2))
EXAMPLE 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 1.44363 1.4436354752 1.44363547517881 1.44363547517881034249
LIMITS LIMITS
@@ -47,8 +47,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: asinh,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: asinh,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asinh,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/asinh,v $
## ##
## Under source code control: 1994/03/19 01:40:25 ## Under source code control: 1994/03/19 01:40:25

View File

@@ -76,32 +76,32 @@ DESCRIPTION
EXAMPLE EXAMPLE
> b = 3+1 ; b = 3+1
> a = b ; a = b
> print a, b ; print a, b
4 4 4 4
> obj point {x,y} ; obj point {x,y}
> mat A[3] = {1, list(2,3), obj point = {4,5}} ; mat A[3] = {1, list(2,3), obj point = {4,5}}
> A[1][[0]] = 6; A[2].x = 7 ; A[1][[0]] = 6; A[2].x = 7
> print A[1] ; print A[1]
list (2 elements, 2 nonzero): list (2 elements, 2 nonzero):
[[0]] = 6 [[0]] = 6
[[1]] = 3 [[1]] = 3
> print A[2] ; print A[2]
obj point {7, 5} obj point {7, 5}
> A = {A[2], , {9,10}} ; A = {A[2], , {9,10}}
> print A[0] ; print A[0]
obj point {7, 5} obj point {7, 5}
> print A[2] ; print A[2]
obj point {9, 10} obj point {9, 10}
> A = {, {2}} ; A = {, {2}}
print A[1] print A[1]
list (2 elements, 2 nonzero): list (2 elements, 2 nonzero):
@@ -133,8 +133,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: assign,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: assign,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/assign,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/assign,v $
## ##
## Under source code control: 1995/05/11 21:03:23 ## Under source code control: 1995/05/11 21:03:23

View File

@@ -60,12 +60,12 @@ DESCRIPTION
and are illegal. and are illegal.
EXAMPLE EXAMPLE
> A = assoc(); print A ; A = assoc(); print A
assoc (0 elements): assoc (0 elements):
> A["zero"] = 0; A["one"] = 1; A["two"] = 2; A["three"] = 3; ; A["zero"] = 0; A["one"] = 1; A["two"] = 2; A["three"] = 3;
> A["smallest", "prime"] = 2; ; A["smallest", "prime"] = 2;
> print A ; print A
assoc (5 elements); assoc (5 elements);
["two"] = 2 ["two"] = 2
["three"] = 3 ["three"] = 3
@@ -98,8 +98,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: assoc,v 29.3 2002/07/10 11:47:04 chongo Exp $ ## @(#) $Id: assoc,v 29.4 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/assoc,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/assoc,v $
## ##
## Under source code control: 1994/09/25 20:22:31 ## Under source code control: 1994/09/25 20:22:31

View File

@@ -17,7 +17,7 @@ DESCRIPTION
v = atan(x) is the number in (-pi/2, pi/2) for which tan(v) = x. v = atan(x) is the number in (-pi/2, pi/2) for which tan(v) = x.
EXAMPLE EXAMPLE
> print atan(2, 1e-5), atan(2, 1e-10), atan(2, 1e-15), atan(2, 1e-20) ; print atan(2, 1e-5), atan(2, 1e-10), atan(2, 1e-15), atan(2, 1e-20)
1.10715 1.1071487178 1.107148717794091 1.10714871779409050302 1.10715 1.1071487178 1.107148717794091 1.10714871779409050302
LIMITS LIMITS
@@ -45,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: atan,v 29.3 2002/07/10 11:47:04 chongo Exp $ ## @(#) $Id: atan,v 29.4 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atan,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atan,v $
## ##
## Under source code control: 1994/03/19 01:40:25 ## Under source code control: 1994/03/19 01:40:25

View File

@@ -24,7 +24,7 @@ DESCRIPTION
returns 0. returns 0.
EXAMPLE 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 0 ~.52359877559829887307 ~.31038740713235146535
LIMITS LIMITS
@@ -52,8 +52,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: atan2,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: atan2,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atan2,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atan2,v $
## ##
## Under source code control: 1994/03/19 01:40:26 ## Under source code control: 1994/03/19 01:40:26

View File

@@ -19,7 +19,7 @@ DESCRIPTION
atanh(x) = ln((1 + x)/(1 - x))/2 atanh(x) = ln((1 + x)/(1 - x))/2
EXAMPLE 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 .54931 .5493061443 .549306144334055 .5493061443340548457
LIMITS LIMITS
@@ -47,8 +47,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: atanh,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: atanh,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atanh,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/atanh,v $
## ##
## Under source code control: 1994/03/19 01:40:27 ## Under source code control: 1994/03/19 01:40:27

View File

@@ -27,12 +27,12 @@ DESCRIPTION
be averaged. be averaged.
EXAMPLE 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 3 3 3
> mat x[2,2] = {1,2,3,4} ; mat x[2,2] = {1,2,3,4}
> mat y[2,2] = {1,2,4,8} ; mat y[2,2] = {1,2,4,8}
> avg(x,y) ; avg(x,y)
mat [2,2] (4 elements, 4 nonzero): mat [2,2] (4 elements, 4 nonzero):
[0,0] = 1 [0,0] = 1
@@ -65,8 +65,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: avg,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: avg,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/avg,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/avg,v $
## ##
## Under source code control: 1994/09/25 20:22:31 ## Under source code control: 1994/09/25 20:22:31

View File

@@ -60,13 +60,13 @@ DESCRIPTION
listed in the table above. listed in the table above.
EXAMPLE EXAMPLE
> base() ; base()
10 10
> base(8) ; base(8)
012 012
> print 10 ; print 10
012 012
LIMITS LIMITS
@@ -97,8 +97,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.5 $ ## @(#) $Revision: 29.6 $
## @(#) $Id: base,v 29.5 2002/12/29 09:17:54 chongo Exp $ ## @(#) $Id: base,v 29.6 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/base,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/base,v $
## ##
## Under source code control: 1994/09/30 00:09:39 ## Under source code control: 1994/09/30 00:09:39

View File

@@ -68,16 +68,16 @@ DESCRIPTION
listed in the table above. listed in the table above.
EXAMPLE EXAMPLE
> base2() ; base2()
0 0
> base2(8) ; base2(8)
0 /* 0 */ 0 /* 0 */
> print 10 ; print 10
10 /* 012 */ 10 /* 012 */
> base2(16), ; base2(16),
> 131072 ; 131072
131072 /* 0x20000 */ 131072 /* 0x20000 */
> 2345 ; 2345
2345 /* 0x929 */ 2345 /* 0x929 */
LIMITS LIMITS
@@ -109,8 +109,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 1.3 $ ## @(#) $Revision: 1.4 $
## @(#) $Id: base2,v 1.3 2002/12/29 09:17:54 chongo Exp $ ## @(#) $Id: base2,v 1.4 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/base2,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/base2,v $
## ##
## Under source code control: 2002/12/29 00:21:07 ## Under source code control: 2002/12/29 00:21:07

View File

@@ -28,8 +28,8 @@ DESCRIPTION
freebernoulli(). freebernoulli().
EXAMPLE EXAMPLE
> config("mode", "frac"),; ; config("mode", "frac"),;
> for (n = 0; n <= 6; n++) print bernoulli(n),; print; ; for (n = 0; n <= 6; n++) print bernoulli(n),; print;
1 -1/2 1/6 0 -1/30 0 1/42 1 -1/2 1/6 0 -1/30 0 1/42
LIMITS LIMITS
@@ -57,8 +57,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.5 $ ## @(#) $Revision: 29.6 $
## @(#) $Id: bernoulli,v 29.5 2002/07/10 11:47:04 chongo Exp $ ## @(#) $Id: bernoulli,v 29.6 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bernoulli,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bernoulli,v $
## ##
## Under source code control: 2000/07/13 01:33:00 ## Under source code control: 2000/07/13 01:33:00

View File

@@ -20,17 +20,17 @@ DESCRIPTION
return 1, otherwise return 0. return 1, otherwise return 0.
EXAMPLE 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 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 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 1 0 1
> p = pi() ; p = pi()
> print bit(p, 1), bit(p, -2), bit(p, -3) ; print bit(p, 1), bit(p, -2), bit(p, -3)
1 0 1 1 0 1
LIMITS LIMITS
@@ -58,8 +58,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: bit,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: bit,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bit,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bit,v $
## ##
## Under source code control: 1994/10/21 02:21:30 ## Under source code control: 1994/10/21 02:21:30

View File

@@ -14,7 +14,7 @@ TYPES
DESCRIPTION DESCRIPTION
With only integer arguments, blk(len, chunk) attempts to 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 bytes). Allocation is always done in multiples of chunk
octets, so the actual allocation size of len rounded up octets, so the actual allocation size of len rounded up
to the next multiple of chunk. to the next multiple of chunk.
@@ -26,7 +26,7 @@ DESCRIPTION
... , B[len-1], these all initially having zero value. ... , B[len-1], these all initially having zero value.
The octets B[i] for i >= len always have zero value. If B[i] with 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 B[i] = x
@@ -56,7 +56,7 @@ DESCRIPTION
will append one octet to B and increment size(B). will append one octet to B and increment size(B).
The builtin test(B) returns 1 or 0 according as at least one octet 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 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 same data, i.e. B1[i] == B2[i] for 0 <= i < len. Chunksizes
and maxsizes are ignored. and maxsizes are ignored.
@@ -107,7 +107,7 @@ DESCRIPTION
will give a second variable B referring to the same block as A. 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 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: instructions like:
blk(A, len, chunk); blk(A, len, chunk);
@@ -154,55 +154,55 @@ DESCRIPTION
EXAMPLE EXAMPLE
> B = blk(15,10) ; B = blk(15,10)
> B[7] = 0xff ; B[7] = 0xff
> B ; B
chunksize = 10, maxsize = 20, datalen = 15 chunksize = 10, maxsize = 20, datalen = 15
00000000000000ff00000000000000 00000000000000ff00000000000000
> B[18] = 127 ; B[18] = 127
> B ; B
chunksize = 10, maxsize = 20, datalen = 18 chunksize = 10, maxsize = 20, datalen = 18
00000000000000ff0000000000000000007f 00000000000000ff0000000000000000007f
> B[20] = 2 ; B[20] = 2
Index out of bounds for block Index out of bounds for block
> print size(B), sizeof(B) ; print size(B), sizeof(B)
18 20 18 20
> B = blk(B, 100, 20) ; B = blk(B, 100, 20)
> B ; B
chunksize = 20, maxsize = 120, datalen = 100 chunksize = 20, maxsize = 120, datalen = 100
00000000000000ff0000000000000000007f000000000000000000000000... 00000000000000ff0000000000000000007f000000000000000000000000...
> C = blk(B, 10} = {1,2,3} ; C = blk(B, 10} = {1,2,3}
> C ; C
chunksize = 20, maxsize = 20, datalen = 10 chunksize = 20, maxsize = 20, datalen = 10
01020300000000ff0000 01020300000000ff0000
> A1 = blk("alpha") ; A1 = blk("alpha")
> A1 ; A1
block 0: alpha block 0: alpha
chunksize = 256, maxsize = 256, datalen = 0 chunksize = 256, maxsize = 256, datalen = 0
> A1[7] = 0xff ; A1[7] = 0xff
> A2 = A1 ; A2 = A1
> A2[17] = 127 ; A2[17] = 127
> A1 ; A1
block 0: alpha block 0: alpha
chunksize = 256, maxsize = 256, datalen = 18 chunksize = 256, maxsize = 256, datalen = 18
00000000000000ff0000000000000000007f 00000000000000ff0000000000000000007f
> A1 = blk(A1, 1000) ; A1 = blk(A1, 1000)
> A1 ; A1
block 0: alpha block 0: alpha
chunksize = 256, maxsize = 1024, datalen = 1000 chunksize = 256, maxsize = 1024, datalen = 1000
00000000000000ff0000000000000000007f000000000000000000000000... 00000000000000ff0000000000000000007f000000000000000000000000...
> A1 = blk(A1, , 16) ; A1 = blk(A1, , 16)
> A1 ; A1
block 0: alpha block 0: alpha
chunksize = 16, maxsize = 1008, datalen = 1000 chunksize = 16, maxsize = 1008, datalen = 1000
00000000000000ff0000000000000000007f000000000000000000000000... 00000000000000ff0000000000000000007f000000000000000000000000...
@@ -234,8 +234,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: blk,v 29.3 2002/07/10 11:47:04 chongo Exp $ ## @(#) $Id: blk,v 29.4 2006/05/07 07:16:42 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blk,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blk,v $
## ##
## Under source code control: 1997/04/05 13:07:13 ## Under source code control: 1997/04/05 13:07:13

View File

@@ -108,74 +108,74 @@ DESCRIPTION
EXAMPLE EXAMPLE
> A = blk() = {1,2,3,4} ; A = blk() = {1,2,3,4}
> B = blk() ; B = blk()
> blkcpy(B,A) ; blkcpy(B,A)
> B ; B
chunksize = 256, maxsize = 256, datalen = 4 chunksize = 256, maxsize = 256, datalen = 4
01020304 01020304
> >
> blkcpy(B,A) ; blkcpy(B,A)
> B ; B
chunksize = 256, maxsize = 256, datalen = 8 chunksize = 256, maxsize = 256, datalen = 8
0102030401020304 0102030401020304
> blkcpy(B, A, 2, 10) ; blkcpy(B, A, 2, 10)
> B ; B
chunksize = 256, maxsize = 256, datalen = 12 chunksize = 256, maxsize = 256, datalen = 12
010203040102030400000102 010203040102030400000102
> blkcpy(B,32767) ; blkcpy(B,32767)
> B ; B
chunksize = 256, maxsize = 256, datalen = 16 chunksize = 256, maxsize = 256, datalen = 16
010203040102030400000102ff7f0000 010203040102030400000102ff7f0000
> mat M[2,2] ; mat M[2,2]
> blkcpy(M, A) ; blkcpy(M, A)
> M ; M
mat [2,2] (4 elements, 4 nonzero): mat [2,2] (4 elements, 4 nonzero):
[0,0] = 1 [0,0] = 1
[0,1] = 2 [0,1] = 2
[1,0] = 3 [1,0] = 3
[1,1] = 4 [1,1] = 4
> blkcpy(M, A, 2, 2) ; blkcpy(M, A, 2, 2)
> M ; M
mat [2,2] (4 elements, 4 nonzero): mat [2,2] (4 elements, 4 nonzero):
[0,0] = 1 [0,0] = 1
[0,1] = 2 [0,1] = 2
[1,0] = 1 [1,0] = 1
[1,1] = 2 [1,1] = 2
> A = blk() = {1,2,3,4} ; A = blk() = {1,2,3,4}
> B = blk() ; B = blk()
> copy(A,B) ; copy(A,B)
> B ; B
chunksize = 256, maxsize = 256, datalen = 4 chunksize = 256, maxsize = 256, datalen = 4
01020304 01020304
> copy(A,B) ; copy(A,B)
> B ; B
chunksize = 256, maxsize = 256, datalen = 8 chunksize = 256, maxsize = 256, datalen = 8
0102030401020304 0102030401020304
> copy(A,B,1,2) ; copy(A,B,1,2)
> B ; B
chunksize = 256, maxsize = 256, datalen = 10 chunksize = 256, maxsize = 256, datalen = 10
01020304010203040203 01020304010203040203
> mat M[2,2] ; mat M[2,2]
> copy(A,M) ; copy(A,M)
> M ; M
mat [2,2] (4 elements, 4 nonzero): mat [2,2] (4 elements, 4 nonzero):
[0,0] = 1 [0,0] = 1
[0,1] = 2 [0,1] = 2
[1,0] = 3 [1,0] = 3
[1,1] = 4 [1,1] = 4
> copy(A,M,2) ; copy(A,M,2)
> M ; M
mat [2,2] (4 elements, 4 nonzero): mat [2,2] (4 elements, 4 nonzero):
[0,0] = 3 [0,0] = 3
[0,1] = 4 [0,1] = 4
[1,0] = 3 [1,0] = 3
[1,1] = 4 [1,1] = 4
> copy(A,M,0,2,2) ; copy(A,M,0,2,2)
> M ; M
mat [2,2] (4 elements, 4 nonzero): mat [2,2] (4 elements, 4 nonzero):
[0,0] = 3 [0,0] = 3
[0,1] = 4 [0,1] = 4
@@ -207,8 +207,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: blkcpy,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: blkcpy,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blkcpy,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blkcpy,v $
## ##
## Under source code control: 1997/04/05 14:08:50 ## Under source code control: 1997/04/05 14:08:50

View File

@@ -23,27 +23,27 @@ DESCRIPTION
EXAMPLE EXAMPLE
> B1 = blk("foo") ; B1 = blk("foo")
> B2 = blk("Second block") ; B2 = blk("Second block")
show blocks show blocks
id name id name
---- ----- ---- -----
0 foo 0 foo
1 Second block 1 Second block
> blkfree(B1) ; blkfree(B1)
> show blocks ; show blocks
id name id name
---- ----- ---- -----
1 Second block 1 Second block
> B1 ; B1
block 0: foo block 0: foo
chunksize = 256, maxsize = 0, datalen = 0 chunksize = 256, maxsize = 0, datalen = 0
NULL NULL
> blk(B1); B[7] = 5 ; blk(B1); B[7] = 5
> B1 ; B1
block 0: foo block 0: foo
chunksize = 256, maxsize = 256, datalen = 8 chunksize = 256, maxsize = 256, datalen = 8
0000000000000005 0000000000000005
@@ -73,8 +73,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: blkfree,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: blkfree,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blkfree,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blkfree,v $
## ##
## Under source code control: 1997/04/05 13:07:13 ## Under source code control: 1997/04/05 13:07:13

View File

@@ -20,17 +20,17 @@ DESCRIPTION
EXAMPLE EXAMPLE
> A = blk("alpha") ; A = blk("alpha")
> B = blk("beta") = {1,2,3} ; B = blk("beta") = {1,2,3}
> blocks() ; blocks()
2 2
> blocks(1) ; blocks(1)
block 1: beta block 1: beta
chunksize = 256, maxsize = 256, datalen = 3 chunksize = 256, maxsize = 256, datalen = 3
010203 010203
> blocks(2) ; blocks(2)
Error 10211 Error 10211
> strerror() ; strerror()
"Non-allocated index number for blocks" "Non-allocated index number for blocks"
LIMITS LIMITS
@@ -58,8 +58,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: blocks,v 29.3 2002/07/10 11:47:04 chongo Exp $ ## @(#) $Id: blocks,v 29.4 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blocks,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blocks,v $
## ##
## Under source code control: 1997/04/05 13:07:13 ## Under source code control: 1997/04/05 13:07:13

View File

@@ -66,38 +66,38 @@ DESCRIPTION
variables, so their values are not changed by the call. variables, so their values are not changed by the call.
EXAMPLES EXAMPLES
> a = 7/32, b = -7/32 ; a = 7/32, b = -7/32
> print a, b ; print a, b
.21875 -.21875 .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 .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 -.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 .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 .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 .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 .22 .219 .2188 .21875
> c = 21875 ; c = 21875
> print round(c,-2,0), round(c,-2,1), round(c,-3,0), round(c,-3,16) ; print round(c,-2,0), round(c,-2,1), round(c,-3,0), round(c,-3,16)
21800 21900 21000 22000 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 21000 22000 22000 21880
> A = list(1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8) ; A = list(1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8)
> print round(A,2,24) ; print round(A,2,24)
list(7 elements, 7 nonzero): list(7 elements, 7 nonzero):
[[0]] = .12 [[0]] = .12
@@ -138,8 +138,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: bround,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: bround,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bround,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/bround,v $
## ##
## Under source code control: 1994/09/30 00:22:35 ## Under source code control: 1994/09/30 00:22:35

View File

@@ -22,16 +22,16 @@ DESCRIPTION
int(x). int(x).
EXAMPLE EXAMPLE
> print btrunc(pi()), btrunc(pi(), 10) ; print btrunc(pi()), btrunc(pi(), 10)
3 3.140625 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 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 -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 48 -48
LIMITS LIMITS
@@ -59,8 +59,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: btrunc,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: btrunc,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/btrunc,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/btrunc,v $
## ##
## Under source code control: 1994/09/30 00:44:27 ## Under source code control: 1994/09/30 00:44:27

View File

@@ -18,7 +18,7 @@ DESCRIPTION
> !stty echo -cbreak > !stty echo -cbreak
EXAMPLE EXAMPLE
> calc_tty(); ; calc_tty();
LIBRARY LIBRARY
none none
@@ -42,8 +42,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.1 $ ## @(#) $Revision: 29.2 $
## @(#) $Id: calc_tty,v 29.1 2000/12/14 10:31:45 chongo Exp $ ## @(#) $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 $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/calc_tty,v $
## ##
## Under source code control: 2000/12/14 01:33:00 ## Under source code control: 2000/12/14 01:33:00

View File

@@ -25,7 +25,7 @@ DESCRIPTION
from (x,y) = (0,0) to (x,y) = (n,n) for which always y <= x. from (x,y) = (0,0) to (x,y) = (n,n) for which always y <= x.
EXAMPLE EXAMPLE
> print catalan(2), catalan(3), catalan(4), catalan(20) ; print catalan(2), catalan(3), catalan(4), catalan(20)
2 5 14 6564120420 2 5 14 6564120420
LIMITS LIMITS
@@ -53,8 +53,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: catalan,v 29.2 2000/12/17 12:27:58 chongo Exp $ ## @(#) $Id: catalan,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/catalan,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/catalan,v $
## ##
## Under source code control: 2000/12/14 01:33:00 ## Under source code control: 2000/12/14 01:33:00

View File

@@ -20,7 +20,7 @@ DESCRIPTION
by ceil(t). by ceil(t).
EXAMPLE 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 27 2 -4 8-9i
LIMITS LIMITS
@@ -48,8 +48,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: ceil,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: ceil,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/ceil,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/ceil,v $
## ##
## Under source code control: 1994/09/30 01:12:01 ## Under source code control: 1994/09/30 01:12:01

View File

@@ -66,17 +66,17 @@ DESCRIPTION
exceeding n is 1/cfappr(1/x, n, 16). exceeding n is 1/cfappr(1/x, n, 16).
EXAMPLE EXAMPLE
> c = config("mode", "frac") ; c = config("mode", "frac")
> x = 43/30; u = cfappr(x, 10, 0); v = cfappr(x, 10, 1); ; 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) ; 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 10/7 13/9 1/210 1/90 1/63 10/7
> pi = pi(1e-10) ; pi = pi(1e-10)
> print cfappr(pi, 100, 16), cfappr(pi, .01, 16), cfappr(pi, 1e-6, 16) ; print cfappr(pi, 100, 16), cfappr(pi, .01, 16), cfappr(pi, 1e-6, 16)
311/99 22/7 355/113 311/99 22/7 355/113
> x = 17/12; u = cfappr(x,4,0); v = cfappr(x,4,1); ; x = 17/12; u = cfappr(x,4,0); v = cfappr(x,4,1);
> print u, v, x - u, v - x, cfappr(x,4,16) ; print u, v, x - u, v - x, cfappr(x,4,16)
4/3 3/2 1/12 1/12 3/2 4/3 3/2 1/12 1/12 3/2
LIMITS LIMITS
@@ -104,8 +104,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: cfappr,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: cfappr,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cfappr,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cfappr,v $
## ##
## Under source code control: 1994/09/30 01:23:59 ## Under source code control: 1994/09/30 01:23:59

View File

@@ -95,13 +95,13 @@ DESCRIPTION
cfsim(1/x, rnd) = 1/cfsim(x, rnd). cfsim(1/x, rnd) = 1/cfsim(x, rnd).
EXAMPLE 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 10/7 33/23 10/7 33/23
> x = pi(1e-20); c = config("mode", "frac"); ; x = pi(1e-20); c = config("mode", "frac");
> while (!isint(x)) {x = cfsim(x,8); if (den(x) < 1e6) print x,:;} ; while (!isint(x)) {x = cfsim(x,8); if (den(x) < 1e6) print x,:;}
1146408/364913 312689/99532 104348/33215 355/113 22/7 3 1146408/364913 312689/99532 104348/33215 355/113 22/7 3
LIMITS LIMITS
@@ -129,8 +129,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: cfsim,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: cfsim,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cfsim,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cfsim,v $
## ##
## Under source code control: 1994/09/30 01:29:45 ## Under source code control: 1994/09/30 01:29:45

View File

@@ -14,7 +14,7 @@ DESCRIPTION
the same value as j. For j = 0, returns the null string "". the same value as j. For j = 0, returns the null string "".
EXAMPLE 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 B o w e n
LIMITS LIMITS
@@ -42,8 +42,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: char,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: char,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/char,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/char,v $
## ##
## Under source code control: 1994/09/30 01:45:45 ## Under source code control: 1994/09/30 01:45:45

View File

@@ -92,16 +92,16 @@ DESCRIPTION
for example, cmp(2, "2"), returns the null value. for example, cmp(2, "2"), returns the null value.
EXAMPLE 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 -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 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 -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 0 1i 1+1i 1+1i
LIMITS LIMITS
@@ -130,8 +130,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: cmp,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: cmp,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cmp,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cmp,v $
## ##
## Under source code control: 1994/10/20 02:52:30 ## Under source code control: 1994/10/20 02:52:30

View File

@@ -21,10 +21,10 @@ DESCRIPTION
may be chosen from x items ignoring the order in which they are chosen. may be chosen from x items ignoring the order in which they are chosen.
EXAMPLE 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 35 35 21 1 1
> print comb(2^31+1,2^31-1) ; print comb(2^31+1,2^31-1)
2305843010287435776 2305843010287435776
LIMITS LIMITS
@@ -54,8 +54,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: comb,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: comb,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/comb,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/comb,v $
## ##
## Under source code control: 1994/10/20 04:03:02 ## Under source code control: 1994/10/20 04:03:02

View File

@@ -18,6 +18,7 @@ Command sequence
----------------- -----------------
define function(params) { body } define function(params) { body }
define function(params) = expression define function(params) = expression
This first form defines a full function which can consist This first form defines a full function which can consist
of declarations followed by many statements which implement of declarations followed by many statements which implement
the function. the function.
@@ -42,16 +43,30 @@ Command sequence
read calc commands read calc commands
------------------ ------------------
read $var
read -once $var
read filename read filename
read -once filename read -once filename
This reads definitions from the specified calc resource filename. This reads definitions from the specified calc resource filename.
The name can be quoted if desired. The calculator uses the In the 1st and 2nd forms, if var is a global variable string
CALCPATH environment variable to search through the specified value, then the value of that variable is used as a filename.
directories for the filename, similarly to the use of the
PATH environment variable. If CALCPATH is not defined, The following is equivalent to read lucas.cal or read "lucas.cal":
then a default path which is usually ":/usr/local/lib/calc"
is used. 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 The ".cal" extension is defaulted for input files, so that
if "filename" is not found, then "filename.cal" is then if "filename" is not found, then "filename.cal" is then
@@ -76,7 +91,9 @@ Command sequence
write calc commands write calc commands
------------------- -------------------
write $var
write filename write filename
This writes the values of all global variables to the This writes the values of all global variables to the
specified filename, in such a way that the file can be specified filename, in such a way that the file can be
later read in order to recreate the variable values. later read in order to recreate the variable values.
@@ -85,6 +102,19 @@ Command sequence
matrices, lists, and objects are not saved. Function matrices, lists, and objects are not saved. Function
definitions are also not saved. 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, If the -m mode disallows opening of files for writing,
this command will be disabled. this command will be disabled.
@@ -95,6 +125,7 @@ Command sequence
quit string quit string
exit exit
exit string exit string
The action of these commands depends on where they are used. The action of these commands depends on where they are used.
At the interactive level, they will cause calc it edit. At the interactive level, they will cause calc it edit.
This is the normal way to leave the calculator. In any This is the normal way to leave the calculator. In any
@@ -131,6 +162,7 @@ Command sequence
----- -----
abort abort
abort string abort string
This command behaves like QUIT except that it will attempt This command behaves like QUIT except that it will attempt
to return to the interactive level if permitted, otherwise to return to the interactive level if permitted, otherwise
calc exit. calc exit.
@@ -143,6 +175,7 @@ Command sequence
------------------------ ------------------------
cd cd
cd dir cd dir
Change the current directory to 'dir'. If 'dir' is ommitted, Change the current directory to 'dir'. If 'dir' is ommitted,
change the current directory to the home directory, if $HOME change the current directory to the home directory, if $HOME
is set in the environment. is set in the environment.
@@ -151,6 +184,7 @@ Command sequence
show information show information
---------------- ----------------
show item show item
This command displays some information where 'item' is This command displays some information where 'item' is
one of the following: one of the following:
@@ -185,11 +219,24 @@ Command sequence
calc help calc help
--------- ---------
help help $var
help name help name
This displays a help related to 'name' or general This displays a help related to 'name' or general
help of none is given. 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. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: command,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: command,v 29.3 2006/05/20 10:01:33 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/command,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/command,v $
## ##
## Under source code control: 1991/07/21 04:37:17 ## Under source code control: 1991/07/21 04:37:17

View File

@@ -28,7 +28,7 @@ DESCRIPTION
conjugate of the corresponding component of a. conjugate of the corresponding component of a.
EXAMPLE EXAMPLE
> print conj(3), conj(3 + 4i) ; print conj(3), conj(3 + 4i)
3 3-4i 3 3-4i
LIMITS LIMITS
@@ -56,8 +56,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: conj,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: conj,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/conj,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/conj,v $
## ##
## Under source code control: 1995/10/03 10:40:01 ## Under source code control: 1995/10/03 10:40:01

View File

@@ -15,14 +15,14 @@ DESCRIPTION
absolute value than .75 * eps. absolute value than .75 * eps.
EXAMPLE 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 .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 -4.18963-9.10923i -4.189625691-9.1092278938i
> pi = pi(1e-20) ; pi = pi(1e-20)
> print cos(pi/3, 1e-10), cos(pi/2, 1e-10), cos(pi, 1e-10) ; print cos(pi/3, 1e-10), cos(pi/2, 1e-10), cos(pi, 1e-10)
.5 0 -1 .5 0 -1
LIMITS LIMITS
@@ -51,8 +51,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: cos,v 29.3 2005/10/18 10:48:29 chongo Exp $ ## @(#) $Id: cos,v 29.4 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cos,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cos,v $
## ##
## Under source code control: 1994/03/19 01:40:27 ## Under source code control: 1994/03/19 01:40:27

View File

@@ -17,7 +17,7 @@ DESCRIPTION
cosh(x) = (exp(x) + exp(-x))/2 cosh(x) = (exp(x) + exp(-x))/2
EXAMPLE 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 1.54308 1.5430806348 1.543080634815244 1.54308063481524377848
LIMITS LIMITS
@@ -45,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: cosh,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: cosh,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cosh,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cosh,v $
## ##
## Under source code control: 1994/03/19 01:40:28 ## Under source code control: 1994/03/19 01:40:28

View File

@@ -15,7 +15,7 @@ DESCRIPTION
in absolute value than .75 * eps. in absolute value than .75 * eps.
EXAMPLE 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 .64209 .6420926159 .642092615934331 .64209261593433070301
LIMITS LIMITS
@@ -43,8 +43,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: cot,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: cot,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cot,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cot,v $
## ##
## Under source code control: 1995/11/13 03:49:00 ## Under source code control: 1995/11/13 03:49:00

View File

@@ -17,7 +17,7 @@ DESCRIPTION
coth(x) = (exp(2*x) + 1)/(exp(2*x) - 1) coth(x) = (exp(2*x) + 1)/(exp(2*x) - 1)
EXAMPLE 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 1.31304 1.3130352855 1.313035285499331 1.31303528549933130364
LIMITS LIMITS
@@ -45,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: coth,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: coth,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/coth,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/coth,v $
## ##
## Under source code control: 1995/11/13 03:49:00 ## Under source code control: 1995/11/13 03:49:00

View File

@@ -16,9 +16,9 @@ DESCRIPTION
tests as "true". tests as "true".
EXAMPLE EXAMPLE
> define f(a) = (a < 5) ; define f(a) = (a < 5)
> A = list(1,2,7,6,4,8) ; A = list(1,2,7,6,4,8)
> count(A, "f") ; count(A, "f")
3 3
LIMITS LIMITS
@@ -46,8 +46,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: count,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: count,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/count,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/count,v $
## ##
## Under source code control: 1995/07/10 02:09:31 ## Under source code control: 1995/07/10 02:09:31

10
help/cp
View File

@@ -17,9 +17,9 @@ DESCRIPTION
{x1 * y2 - x2 * y1, x3 * y1 - x1 * y3, x1 * y2 - x2 * y1} {x1 * y2 - x2 * y1, x3 * y1 - x1 * y3, x1 * y2 - x2 * y1}
EXAMPLE EXAMPLE
> mat x[3] = {2,3,4} ; mat x[3] = {2,3,4}
> mat y[3] = {3,4,5} ; mat y[3] = {3,4,5}
> print cp(x,y) ; print cp(x,y)
mat [3] (3 elements, 3 nonzero): mat [3] (3 elements, 3 nonzero):
[0] = -1 [0] = -1
@@ -52,8 +52,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: cp,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: cp,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cp,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cp,v $
## ##
## Under source code control: 1995/10/05 04:52:26 ## Under source code control: 1995/10/05 04:52:26

View File

@@ -15,7 +15,7 @@ DESCRIPTION
in absolute value than .75 * eps. in absolute value than .75 * eps.
EXAMPLE 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 1.1884 1.1883951058 1.188395105778121 1.18839510577812121626
LIMITS LIMITS
@@ -43,8 +43,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: csc,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: csc,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/csc,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/csc,v $
## ##
## Under source code control: 1995/11/13 03:49:00 ## Under source code control: 1995/11/13 03:49:00

View File

@@ -17,7 +17,7 @@ DESCRIPTION
csch(x) = 2/(exp(x) - exp(-x)) csch(x) = 2/(exp(x) - exp(-x))
EXAMPLE 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 .85092 .8509181282 .850918128239322 .85091812823932154513
LIMITS LIMITS
@@ -45,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: csch,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: csch,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/csch,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/csch,v $
## ##
## Under source code control: 1995/11/13 03:49:00 ## Under source code control: 1995/11/13 03:49:00

View File

@@ -16,7 +16,7 @@ DESCRIPTION
The 25th ctime() character, '\n' is removed. The 25th ctime() character, '\n' is removed.
EXAMPLE 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. The time is now Mon Apr 15 12:41:44 1996.
LIMITS LIMITS
@@ -44,8 +44,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: ctime,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: ctime,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/ctime,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/ctime,v $
## ##
## Under source code control: 1996/04/30 03:05:18 ## Under source code control: 1996/04/30 03:05:18

View File

@@ -70,19 +70,19 @@ DESCRIPTION
EXAMPLE EXAMPLE
If calc compiled with ALLOW_CUSTOM= (custom disabled): If calc compiled with ALLOW_CUSTOM= (custom disabled):
> print custom("sysinfo", "baseb") ; print custom("sysinfo", "baseb")
Calc was built with custom functions disabled Calc was built with custom functions disabled
Error 10195 Error 10195
If calc compiled with ALLOW_CUSTOM= -DCUSTOM and is invoked without -C: 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 Calc must be run with a -C argument to use custom function
Error 10194 Error 10194
If calc compiled with ALLOW_CUSTOM= -DCUSTOM and is invoked with -C: If calc compiled with ALLOW_CUSTOM= -DCUSTOM and is invoked with -C:
> print custom("sysinfo", "baseb") ; print custom("sysinfo", "baseb")
32 32
LIMITS LIMITS
@@ -110,8 +110,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: custom,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: custom,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/custom,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/custom,v $
## ##
## Under source code control: 1997/03/09 16:33:22 ## Under source code control: 1997/03/09 16:33:22

View File

@@ -166,8 +166,8 @@ DESCRIPTION
matrices or objects. matrices or objects.
EXAMPLE EXAMPLE
> define f(a,b) = 2*a + b; ; define f(a,b) = 2*a + b;
> define g(alpha, beta) ; define g(alpha, beta)
>> { >> {
>> local a, pi2; >> local a, pi2;
>> >>
@@ -207,8 +207,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: define,v 29.3 2000/07/17 15:36:26 chongo Exp $ ## @(#) $Id: define,v 29.4 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/define,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/define,v $
## ##
## ##

View File

@@ -15,7 +15,7 @@ DESCRIPTION
the value of this element. the value of this element.
EXAMPLE EXAMPLE
> lst = list(2,3,4,5) ; lst = list(2,3,4,5)
list (4 elements, 4 nonzero): list (4 elements, 4 nonzero):
[[0]] = 2 [[0]] = 2
@@ -23,9 +23,9 @@ EXAMPLE
[[2]] = 4 [[2]] = 4
[[3]] = 5 [[3]] = 5
> delete(lst, 2) ; delete(lst, 2)
4 4
> print lst ; print lst
list (3 elements, 3 nonzero): list (3 elements, 3 nonzero):
[[0]] = 2 [[0]] = 2
@@ -57,8 +57,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: delete,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: delete,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/delete,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/delete,v $
## ##
## Under source code control: 1994/03/19 03:13:18 ## Under source code control: 1994/03/19 03:13:18

View File

@@ -26,7 +26,7 @@ DESCRIPTION
The denominator for this n/d is d. The denominator for this n/d is d.
EXAMPLE EXAMPLE
> print den(7), den(-1.25), den(121/33) ; print den(7), den(-1.25), den(121/33)
1 4 3 1 4 3
LIMITS LIMITS
@@ -54,8 +54,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: den,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: den,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/den,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/den,v $
## ##
## Under source code control: 1995/10/05 04:52:26 ## Under source code control: 1995/10/05 04:52:26

View File

@@ -58,18 +58,18 @@ DESCRIPTION
**c returns the lvalue a; ***c returns the value of a. **c returns the lvalue a; ***c returns the value of a.
EXAMPLE EXAMPLE
> mat A[3] = {1,2,3} ; mat A[3] = {1,2,3}
> p = &A[0] ; p = &A[0]
> print *p, *(p + 1), *(p + 2) ; print *p, *(p + 1), *(p + 2)
1 2 3 1 2 3
> *(p + 1) = 4 ; *(p + 1) = 4
> print A[1] ; print A[1]
4 4
> A[0] = &a ; A[0] = &a
> a = 7 ; a = 7
> print **p ; print **p
7 7
LIMITS LIMITS
@@ -97,8 +97,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: dereference,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: dereference,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/dereference,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/dereference,v $
## ##
## Under source code control: 1997/09/06 20:03:34 ## Under source code control: 1997/09/06 20:03:34

View File

@@ -37,25 +37,25 @@ DESCRIPTION
- (a * h - g * b) * (a * f - d * c))/a. - (a * h - g * b) * (a * f - d * c))/a.
EXAMPLE EXAMPLE
> mat A[3,3] = {2, 3, 5, 7, 11, 13, 17, 19, 23} ; mat A[3,3] = {2, 3, 5, 7, 11, 13, 17, 19, 23}
> c = config("mode", "frac") ; c = config("mode", "frac")
> print det(A), det(A^2), det(A^3), det(A^-1) ; print det(A), det(A^2), det(A^3), det(A^-1)
-78 6084 -474552 -1/78 -78 6084 -474552 -1/78
> obj res {r} ; obj res {r}
> global md ; global md
> define res_test(a) = !ismult(a.r, 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_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_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_neg(a) {local obj res v = {(-a.r) % md}; return v;}
> define res(x) {local obj res v = {x % md}; return v;} ; define res(x) {local obj res v = {x % md}; return v;}
> md = 0 ; md = 0
> mat A[2,2] = {res(2), res(3), res(5), res(7)} ; mat A[2,2] = {res(2), res(3), res(5), res(7)}
> md = 5 ; md = 5
> print det(A) ; print det(A)
obj res {4} obj res {4}
> md = 6 ; md = 6
> print det(A) ; print det(A)
obj res {5} obj res {5}
Note that if A had been a 3 x 3 or larger matrix, res_div(a,b) for 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. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: det,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: det,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/det,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/det,v $
## ##
## Under source code control: 1995/11/28 11:17:47 ## Under source code control: 1995/11/28 11:17:47

View File

@@ -29,16 +29,16 @@ DESCRIPTION
digits(-0.123) == 1 combination of all of the above digits(-0.123) == 1 combination of all of the above
EXAMPLE EXAMPLE
> print digits(100), digits(23209), digits(2^72) ; print digits(100), digits(23209), digits(2^72)
3 5 22 3 5 22
> print digits(0), digits(1), digits(-1) ; print digits(0), digits(1), digits(-1)
1 1 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 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 3, 15 14
LIMITS LIMITS
@@ -66,8 +66,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.5 $ ## @(#) $Revision: 29.6 $
## @(#) $Id: digits,v 29.5 2003/01/26 19:41:35 chongo Exp $ ## @(#) $Id: digits,v 29.6 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/digits,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/digits,v $
## ##
## Under source code control: 1995/10/03 10:40:01 ## Under source code control: 1995/10/03 10:40:01

View File

@@ -36,13 +36,13 @@ DESCRIPTION
the type of rounding to be used is controlled by config("outround"). the type of rounding to be used is controlled by config("outround").
EXAMPLE EXAMPLE
> print display(), 2/3 ; print display(), 2/3
20 ~0.66666666666666666667 20 ~0.66666666666666666667
> print display(40), 2/3 ; print display(40), 2/3
20 ~0.6666666666666666666666666666666666666667 20 ~0.6666666666666666666666666666666666666667
> print display(5), 2/3 ; print display(5), 2/3
40 ~0.66667 40 ~0.66667
LIMITS LIMITS
@@ -70,8 +70,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.1 $ ## @(#) $Revision: 29.2 $
## @(#) $Id: display,v 29.1 2004/07/26 06:54:41 chongo Exp $ ## @(#) $Id: display,v 29.2 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/display,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/display,v $
## ##
## Under source code control: 2004/07/25 23:50:40 ## Under source code control: 2004/07/25 23:50:40

10
help/dp
View File

@@ -22,9 +22,9 @@ DESCRIPTION
x0*y0 + x1*y1 + ... + xn*yn x0*y0 + x1*y1 + ... + xn*yn
EXAMPLE EXAMPLE
> mat x[3] = {2,3,4} ; mat x[3] = {2,3,4}
> mat y[1:3] = {3,4,5} ; mat y[1:3] = {3,4,5}
> print dp(x,y) ; print dp(x,y)
38 38
LIMITS LIMITS
@@ -52,8 +52,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: dp,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: dp,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/dp,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/dp,v $
## ##
## Under source code control: 1995/10/05 04:52:26 ## Under source code control: 1995/10/05 04:52:26

View File

@@ -3,8 +3,9 @@ Environment variables
CALCPATH CALCPATH
A :-separated list of directories used to search for A :-separated list of directories used to search for
resource filenames (*.cal files) that do not begin with resource filenames (*.cal files) that do not begin with:
/, ./ or ~.
/ ./ ../ ~
If this variable does not exist, a compiled value If this variable does not exist, a compiled value
is used. Typically compiled in value is: is used. Typically compiled in value is:
@@ -104,8 +105,8 @@ Environment variables
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: environment,v 29.3 2004/07/26 07:10:43 chongo Exp $ ## @(#) $Id: environment,v 29.4 2006/05/07 07:22:20 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/environment,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/environment,v $
## ##
## Under source code control: 1991/07/23 05:47:25 ## Under source code control: 1991/07/23 05:47:25

View File

@@ -19,9 +19,9 @@ DESCRIPTION
the functions appr(x, eps, rnd), sqrt(x, eps, rnd), etc. the functions appr(x, eps, rnd), sqrt(x, eps, rnd), etc.
EXAMPLE EXAMPLE
> oldeps = epsilon(1e-6) ; oldeps = epsilon(1e-6)
> print epsilon(), sqrt(2), epsilon(1e-4), sqrt(2), epsilon(oldeps) ; print epsilon(), sqrt(2), epsilon(1e-4), sqrt(2), epsilon(oldeps)
> .000001 1.414214 .000001 1.4142 .0001 ; .000001 1.414214 .000001 1.4142 .0001
LIMITS LIMITS
none none
@@ -49,8 +49,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: epsilon,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: epsilon,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/epsilon,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/epsilon,v $
## ##
## Under source code control: 1995/10/05 04:52:26 ## Under source code control: 1995/10/05 04:52:26

View File

@@ -28,12 +28,12 @@ DESCRIPTION
errcount. errcount.
EXAMPLE EXAMPLE
> errmax(10) ; errmax(10)
0 0
> errcount() ; errcount()
0 0
> a = 1/0; b = 2 + ""; c = error(27); d = newerror("a"); ; a = 1/0; b = 2 + ""; c = error(27); d = newerror("a");
> print errcount(), a, errcount(), errmax(); ; print errcount(), a, errcount(), errmax();
4 Error 10001 4 10 4 Error 10001 4 10
LIMITS LIMITS
@@ -43,9 +43,10 @@ LINK LIBRARY
none none
SEE ALSO SEE ALSO
errmax, error, strerror, iserror, errno, newerror, errorcodes errmax, error, strerror, iserror, errno, newerror, errorcodes,
stoponerror
## 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 ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -61,8 +62,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: errcount,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: errcount,v 29.4 2006/05/21 07:31:35 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errcount,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errcount,v $
## ##
## Under source code control: 1997/03/08 08:51:14 ## Under source code control: 1997/03/08 08:51:14

View File

@@ -13,33 +13,39 @@ DESCRIPTION
Without an argument, errmax() returns the current value of an Without an argument, errmax() returns the current value of an
internal variable errmax. Calling errmax(num) returns this value internal variable errmax. Calling errmax(num) returns this value
but then resets its value to num. Execution is aborted if but then resets its value to num. Execution is aborted if
evaluation of an error value if this makes errcount > errmax. evaluation of an error value if this makes errcount > errmax
An error message displays the errno for the error. and errmax is >= 0.
When errmax is -1, there is no limit on the number of errors.
EXAMPLE EXAMPLE
> errmax(2) ; errmax(2)
0 0
> errcount() ; errcount()
0 0
> a = 1/0; b = 2 + ""; c = error(27); d = newerror("alpha"); ; a = 1/0; b = 2 + ""; c = error(27); d = newerror("alpha");
Error 27 caused errcount to exceed errmax Error 27 caused errcount to exceed errmax
> print c, d ## Here global variables c and d were created when compiling the line
## but execution was aborted before the intended assignments to c and d.
; print c, d
0 0 0 0
Here global variables c and d were created when compiling the line ; errmax(-1)
but execution was aborted before the intended assignments to c and d. 2
LIMITS LIMITS
0 <= num < 2^32 -1 <= num <= 2147483647
LINK LIBRARY LINK LIBRARY
none none
SEE ALSO SEE ALSO
errcount, error, strerror, iserror, errno, newerror, errorcodes errcount, error, strerror, iserror, errno, newerror, errorcodes,
stoponerror
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -55,8 +61,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.6 $
## @(#) $Id: errmax,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: errmax,v 29.6 2006/05/21 07:31:35 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errmax,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errmax,v $
## ##
## Under source code control: 1997/03/08 08:51:14 ## Under source code control: 1997/03/08 08:51:14

View File

@@ -33,15 +33,15 @@ DESCRIPTION
EXAMPLE EXAMPLE
Assuming there is no file with name "not_a_file" Assuming there is no file with name "not_a_file"
> errno(0) ; errno(0)
> errmax(errcount()+4) ; errmax(errcount()+4)
0 0
> badfile = fopen("not_a_file", "r") ; badfile = fopen("not_a_file", "r")
> print errno(), error(), strerror() ; print errno(), error(), strerror()
2 System error 2 No such file or directory 2 System error 2 No such file or directory
> a = 1/0 ; a = 1/0
> print errno(), error(), strerror() ; print errno(), error(), strerror()
10001 Error 10001 Division by zero 10001 Error 10001 Division by zero
LIMITS LIMITS
@@ -51,9 +51,10 @@ LINK LIBRARY
none none
SEE ALSO SEE ALSO
errmax, errcount, error, strerror, iserror, newerror, errorcodes errmax, errcount, error, strerror, iserror, newerror, errorcodes,
stoponerror
## 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 ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -69,8 +70,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: errno,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: errno,v 29.4 2006/05/21 07:31:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errno,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errno,v $
## ##
## Under source code control: 1994/10/27 03:05:08 ## Under source code control: 1994/10/27 03:05:08

Some files were not shown because too many files have changed in this diff Show More