Compare commits

..

8 Commits

Author SHA1 Message Date
Landon Curt Noll
81a523043e Release calc version 2.12.1.3 2017-05-21 15:38:48 -07:00
Landon Curt Noll
2c0d0bbc1b Release calc version 2.12.1.2 2017-05-21 15:38:48 -07:00
Landon Curt Noll
a7147039ee Release calc version 2.12.1.1 2017-05-21 15:38:47 -07:00
Landon Curt Noll
6fa83e417e Release calc version 2.12.1 2017-05-21 15:38:47 -07:00
Landon Curt Noll
c335809b5f Release calc version 2.12.0.8 2017-05-21 15:38:47 -07:00
Landon Curt Noll
ee99adf8ca Release calc version 2.12.0.6 2017-05-21 15:38:47 -07:00
Landon Curt Noll
87570b56fe Release calc version 2.12.0.5 2017-05-21 15:38:47 -07:00
Landon Curt Noll
afe37ec851 Release calc version 2.12.0.4 2017-05-21 15:38:46 -07:00
149 changed files with 4240 additions and 2710 deletions

53
BUGS
View File

@@ -68,10 +68,6 @@ of a context diff patch).
Known bugs:
The stoponerror() facility does not seem to work, or perhaps
the stoponerror help file is incorrect. The stoponerror help file
lacks examples because of this problem.
We are sure some more bugs exist. When you find them, please let
us know! See the above for details on how to report and were to
EMail your bug reports and hopefully patches to fix them.
@@ -114,51 +110,6 @@ Problems with old systems that have known work-a-rounds:
to fail the regression test. The work-a-round is to compile with -O
or to use gcc-2.96 or later.
This bug has been observed on the Sparc and the PowerPC machine.
On the PowerPC with gcc-2.95 when compiled with -O2, the following
patch seems to help:
*** zfunc.c.orig Fri Feb 23 18:18:39 2001
--- zfunc.c Fri Feb 23 18:39:33 2001
***************
*** 1481,1487 ****
{
HALF *a, *A, *b, *a0, u;
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
! FULL d, e, f, g, h, s, t, x, topbit;
int remsign;
BOOL up, onebit;
ZVALUE sqrt;
--- 1481,1488 ----
{
HALF *a, *A, *b, *a0, u;
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
! volatile FULL d;
! FULL e, f, g, h, s, t, x, topbit;
int remsign;
BOOL up, onebit;
ZVALUE sqrt;
*** zmath.c 2000/06/07 14:02:13 29.2
--- zmath.c 2001/03/13 19:47:03
***************
*** 1608,1614 ****
void
zbitvalue(long n, ZVALUE *res)
{
! ZVALUE z;
if (n < 0) n = 0;
z.sign = 0;
--- 1608,1614 ----
void
zbitvalue(long n, ZVALUE *res)
{
! volatile ZVALUE z;
if (n < 0) n = 0;
z.sign = 0;
* There are problems compiling calc on the sparcv9 under 64 bit
Solaris. On that platform, gcc-2.96 is able to compile calc, but
calc dumps core very early on in startup. It is said that sparcv9
@@ -190,8 +141,8 @@ Problems with old systems that have known work-a-rounds:
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.24 $
## @(#) $Id: BUGS,v 29.24 2006/05/21 07:54:13 chongo Exp $
## @(#) $Revision: 29.25 $
## @(#) $Id: BUGS,v 29.25 2006/08/20 17:51:25 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
##
## Under source code control: 1994/03/18 14:06:13

215
CHANGES
View File

@@ -1,4 +1,20 @@
The following are the changes from calc version 2.12.0 to date:
The following are the changes from calc version 2.12.1 to date:
Fixed minor typos in the 'version 2.12.0 to 2.12.0.8' section below.
Made minor formatting changes as well.
Changed use of ${Q} in the Makefile to avoid an make "feature"
related to OpenBSD. Added ${RM} make variable for make tools that
do not have builtin defined terms.
Removed the ECHO_PROG Makefile variable. Also removed it from
the sysinfo() custom function.
Improved the support for cross-compiled environmens by using
make symbols for all non-shell commands executed by Makefiles.
The following are the changes from calc version 2.12.0 to 2.12.0.8:
Fixed ellip.cal to deal with a calc syntax change that happened
many ages ago but was never applied to this file until now.
@@ -109,34 +125,34 @@ The following are the changes from calc version 2.12.0 to date:
<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(dotest_file [,dotest_code [,dotest_maxcond]])
dotest_file
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.
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
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.
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
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.
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:
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");
; 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.
@@ -164,7 +180,7 @@ The following are the changes from calc version 2.12.0 to date:
Made math_error() in math_error.c more robust against a error
message constant that is too long.
Made read_bindings() in hist.c more robust against very line bindings
Made read_bindings() in hist.c more robust against very long bindings
config lines.
Made listsort() in listfunc.c and matsort() matfunc.c more robust
@@ -179,8 +195,7 @@ The following are the changes from calc version 2.12.0 to date:
no other compile errors, only the unterminated comment will stop
completion of the function being defined.
Added the reading of more calc resource files to the cal/regress.cal
regression test.
The cal/regress.cal now reads most of the calc resource files.
The issq() test had a slight performance boost. A minor note
was added to the help/issq file.
@@ -192,25 +207,18 @@ The following are the changes from calc version 2.12.0 to date:
the number of bits in the fundamental base in which calculations
are performed. This is a read-only configuration value.
Calc now permits such as:
++*p-- ++*----*++p----
Calc now will allow syntax such as ++*p-- and ++*----*++p----
where p is an lvalue; successful evaluation of course require the
successive operations to be performed to have operands of appropriate
types; e.g. in *A, A is usually an lvalue whose current value is a
pointer. ++ and -- act on lvalues. In the above examples there are
implied parentheses from the beginning to immediately after p. If
there are no pre ++ or -- operations, as in
**p++
the implied parentheses are from immediately before p to the end.
there are no pre ++ or -- operations, as in **p++. The implied
parentheses are from immediately before p to the end.
Improved the error message when && is used as a prefix operator.
Changed the help/config file to read like a builtin function
help file.
Changed the help/config file to read like a builtin function help file.
One can no longer set to 1, or to a value < 0, the config()
parameters: "mul2", "sq2", "pow2", and "redc2". These values
@@ -224,10 +232,10 @@ The following are the changes from calc version 2.12.0 to date:
config("sq2") == 3388
config("pow2") == 176
These values were determined established on a 1.8GHz AMD 32-bit
CPU of ~3406 BogoMIPS by the new resource file:
These values were determined established on a 1.8GHz AMD 32-bit
CPU of ~3406 BogoMIPS by the new resource file:
cal/alg_config.cal
cal/alg_config.cal
Regarding the alg_config.cal resource file:
@@ -255,11 +263,131 @@ The following are the changes from calc version 2.12.0 to date:
inaccuracy in CPU timings will cause the best value returned to
differ slightly from run to run.
See "help resource" for more information on alg_config.cal.
See "help resource" for more information on alg_config.cal.
Updated the "help variable" text to reflect the current calc
use of ` (backquote), * (star), and & (ampersand).
Removal of some restrictions on the use of the same identifier
for more than one of parameter, local, static or global variable.
For example, at command level, one could use:
for (local x = 0; x < 10; x++) print sqrt(x);
At the beginning of a statement, "(global A)" is a way of
indicating a reference to the variable A, whereas "global A"
would be taken as a declaration. Parentheses are not required in
"++global A" or "global A++" when "global" is used in this way.
The patch extends this "specifier" (or "qualifier") feature
to static variables, but such that "static A" refers only
to a static variable at the current file and function scope
levels. (If there is already a static variable A at the current
file and function levels, a declaration statement "static A"
would end the scope of that variable and define a new static
variable with identifier A. A "global A" declaration is more
drastic in that it ends the scope of any static variable A at
the same or higher scope levels.)
Unlike a static declaration in which an "initialization" occurs at
most once, in the specifier case, "static A = expr" is simply an
assignment which may be repeated any number of times. An example
of its use is:
define np() = static a = nextprime(a);
For n not too large, the n-th call to this function will
return the n-th prime. The variable a here will be private to
the function.
Because one can use "global", "local" or "static" to specify a
type of variable, there seems little point in restricting the
ways identifiers that can be used in more than one of these
or as parameters. Obviously, introducing A as a local variable
when it is being used as a parameter can lead to confusion and a
warning is appropriate, but if it is to be used only occasionally,
it might be convenient to be able to refer to it as "local A"
rather than introducing another identifier. While it may be
silly to use the same identifier for both a parameter and local
variable, it should not be illegal.
Added warnings for possibly questionable code in function definitions.
Added config("redecl_warn", boolean) to control if calc issues
warnings about variables being declared. The config("redecl_warn")
value is TRUE by default.
Added config("dupvar_warn", boolean) to control if calc issues
warnings about when variable names collide. The config("dupvar_warn")
value is TRUE by default. Examples of variable name collisions
include when:
* both local and static variables have the same name
* both local and global variables have the same name
* both function parameter and local variables have the same name
* both function parameter and global variables have the same name
Fix of a bug which causes some static variables not to be correctly
unscoped when their identifiers are used in a global declaration.
Change of "undefine" from a command-level keyword to statement level and
introduction of an "undefine static A" statement to end the scope of a
static variable A at the current file/function levels.
Change/restored the syntax rules for "for" and "while" loops to
recognize an unescaped newline in top-level command-level statements.
Updated help/avg, help/define, help/fprintf, help/gcd, help/hash,
help/hmean, help/lcm, help/max, help/min, help/null, help/poly,
help/printf, help/ssq, help/strcat, help/strprintf, help/sum,
help/xor.
Changed the definition of the function ssq() to enable list arguments
to be processed in the same way as in sum(). For example:
ssq(1,2, list(3,4,list(5,6)), list(), 7, 8)
returns the value of 1^2 + 2^2 + ... + 8^2 == 204.
Added the calc resource sumtimes.cal, to give the runtimes for
various ways of evaluating sums, sums of squares, etc, for large
lists and matrices. For example:
read sumtimes
doalltimes(1e6)
Calc now ignores carriage returns (\r), vertical tabs (\v), and
form feeds (\f) when token parsing. Thus users on Windoz systems
can write files using their \r\n format and users on non-Windoz
systems can read them without errors.
The quomod() builtin function now takes an optional 5th argument
which controls the rounding mode like config("quomod") does, but
only for that call. Now quomod() is in line with quo() and mod()
in that the final argument is an optional rounding mode.
Added a "make uninstall" rule which will attempt to remove everything
that was installed by a "make install".
Changed the "Copyright" line in the rpm spec file to a "License" line
as per new rpm v4.4 syntax.
The quomod() builtin function does not allow constants for its 3rd
and 4th arguments. Updated the "help quomod" file and added more
quomod regression tests.
Added patch from Ernest Bowen <ebowen at une dot edu dot au> to
add the builtin: estr(). The estr(x) will return a representation
of a null, string, real number, complex number, list, matrix,
object. block, named block, error as a string.
Added patch from Ernest Bowen <ebowen at une dot edu dot au> to
add the builtin: fgetfile(). The fgetfile(x) will return the rest
of an open file as a string.
Improved help files for fgetfield, fputs, name, or quomod.
The following are the changes from calc version 2.11.10.1 to 2.11.11:
@@ -406,6 +534,9 @@ The following are the changes from calc version 2.11.10 to 2.11.10:
that was reported for the PowerMac G5 2GHz MacOS 10.3 by
Guillaume VERGNAUD <vergnaud at via dot ecp dot fr>.
Fixed a number of pending issues with help files filling in
missing LIMITS, LINK LIBRARY, and SEE ALSO information,
The following are the changes from calc version 2.11.9 to 2.11.9.3:
@@ -784,7 +915,7 @@ The following are the changes from calc version 2.11.5t4.1 to 2.11.5t4.4:
For example when forming the calc rpm, the Makefile is called with
T=$RPM_BUILD_ROOT. If $T is empty, calc is installed under /.
Removed all echo_XXX rules except for echo_inst_files from lower
Removed all echo_XYZ rules except for echo_inst_files from lower
level makefile. The calc.spec will use a make install rule
with T=$RPM_BUILD_ROOT.
@@ -6077,8 +6208,8 @@ Following is a list of visible changes to calc from version 1.24.7 to 1.26.1:
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.80 $
## @(#) $Id: CHANGES,v 29.80 2006/06/11 07:52:58 chongo Exp $
## @(#) $Revision: 29.88 $
## @(#) $Id: CHANGES,v 29.88 2006/09/18 06:29:07 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $
##
## Under source code control: 1993/06/02 18:12:57

View File

@@ -58,8 +58,8 @@ Installing calc from the gziped tarball in 4 easy steps:
If you want to install calc files under a top level directory,
then set the T value:
The calc install is performed under $T, the calc build is
performed under /. The purpose for $T is to allow someone
The calc install is performed under ${T}, the calc build is
performed under /. The purpose for ${T} is to allow someone
to install calc somewhere other than into the system area.
For example, if:
@@ -79,10 +79,10 @@ Installing calc from the gziped tarball in 4 easy steps:
calc help, .cal ...: /var/tmp/testing/usr/share/calc
... etc ... /var/tmp/testing/...
If $T is empty, calc is installed under /, which is the same
top of tree for which it was built. If $T is non-empty, then
calc is installed under $T, as if one had to chroot under
$T for calc to operate.
If ${T} is empty, calc is installed under /, which is the same
top of tree for which it was built. If ${T} is non-empty, then
calc is installed under ${T}, as if one had to chroot under
${T} for calc to operate.
Look for the section that starts:
@@ -162,8 +162,8 @@ the calc help subsystem. See the README file for details.
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.7 $
## @(#) $Id: HOWTO.INSTALL,v 29.7 2003/04/15 03:38:34 chongo Exp $
## @(#) $Revision: 29.8 $
## @(#) $Id: HOWTO.INSTALL,v 29.8 2006/09/18 06:27:39 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/HOWTO.INSTALL,v $
##
## Under source code control: 1999/09/27 20:48:44

2294
Makefile

File diff suppressed because it is too large Load Diff

15
addop.c
View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.12 $
* @(#) $Id: addop.c,v 29.12 2006/06/03 22:47:28 chongo Exp $
* @(#) $Revision: 29.13 $
* @(#) $Id: addop.c,v 29.13 2006/06/20 10:28:06 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
*
* Under source code control: 1990/02/15 01:48:10
@@ -280,13 +280,13 @@ rmuserfunc(char *name)
index = findstr(&funcnames, name);
if (index < 0) {
errorcount--;
scanerror(T_NULL,
"Attempt to undefine an undefined function\n\t\"%s\"", name);
warning("No function named \"%s\" to be undefined", name);
return;
}
if (functions[index] == NULL)
if (functions[index] == NULL) {
warning("No defined function \"%s\" to be undefined", name);
return;
}
freenumbers(functions[index]);
free(functions[index]);
if ((inputisterminal() && conf->resource_debug & RSCDBG_STDIN_FUNC) ||
@@ -527,8 +527,7 @@ addop(long op)
fp->f_opcodecount -= diff;
oldop = OP_NOP;
oldoldop = OP_NOP;
errorcount--;
scanerror(T_NULL, "Constant before comma operator");
warning("Constant before comma operator");
return;
}
break;

View File

@@ -2,7 +2,7 @@
#
# cal - makefile for calc standard resource files
#
# Copyright (C) 1999 Landon Curt Noll
# Copyright (C) 1999-2006 Landon Curt Noll
#
# Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License
@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
#
# @(#) $Revision: 29.19 $
# @(#) $Id: Makefile,v 29.19 2006/06/10 13:01:34 chongo Exp $
# @(#) $Revision: 29.23 $
# @(#) $Id: Makefile,v 29.23 2006/09/18 06:27:39 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
#
# Under source code control: 1991/07/21 05:00:54
@@ -62,9 +62,9 @@ INCDIR= /usr/include
# ${LIBDIR} where calc link library (*.a) files are installed
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
#
# NOTE: The install rule prepends installation paths with $T, which
# by default is empty. If $T is non-empty, then installation
# locations will be relative to the $T directory.
# NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the ${T} directory.
#
# For DJGPP, select:
#
@@ -99,9 +99,9 @@ CALC_SHAREDIR= /usr/share/calc
# ${CUSTOMINCPDIR} where custom .h files are installed
# ${SCRIPTDIR} where calc shell scripts are installed
#
# NOTE: The install rule prepends installation paths with $T, which
# by default is empty. If $T is non-empty, then installation
# locations will be relative to the $T directory.
# NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the ${T} directory.
#
# If in doubt, set:
#
@@ -121,8 +121,8 @@ SCRIPTDIR= ${BINDIR}/cscript
# T - top level directory under which calc will be installed
#
# The calc install is performed under $T, the calc build is
# performed under /. The purpose for $T is to allow someone
# The calc install is performed under ${T}, the calc build is
# performed under /. The purpose for ${T} is to allow someone
# to install calc somewhere other than into the system area.
#
# For example, if:
@@ -142,10 +142,10 @@ SCRIPTDIR= ${BINDIR}/cscript
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
# ... etc ... /var/tmp/testing/...
#
# If $T is empty, calc is installed under /, which is the same
# top of tree for which it was built. If $T is non-empty, then
# calc is installed under $T, as if one had to chroot under
# $T for calc to operate.
# If ${T} is empty, calc is installed under /, which is the same
# top of tree for which it was built. If ${T} is non-empty, then
# calc is installed under ${T}, as if one had to chroot under
# ${T} for calc to operate.
#
# If in doubt, use T=
#
@@ -163,6 +163,13 @@ Q=@
#
CHMOD= chmod
CMP= cmp
RM= rm
MKDIR= mkdir
RMDIR= rmdir
CP= cp
MV= mv
CO= co
TRUE= true
# The calc files to install
#
@@ -177,7 +184,7 @@ CALC_FILES= README bigprime.cal deg.cal ellip.cal lucas.cal lucas_chk.cal \
beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.cal \
test8400.cal test8500.cal test8600.cal chi.cal intfile.cal screen.cal \
dotest.cal set8700.cal set8700.line alg_config.cal
dotest.cal set8700.cal set8700.line alg_config.cal sumtimes.cal
# These files are found (but not built) in the distribution
#
@@ -192,8 +199,8 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
# used by the upper level Makefile to determine of we have done all
#
.all:
rm -f .all
touch .all
${RM} -f .all
${TOUCH} .all
##
#
@@ -209,17 +216,17 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
##
distlist: ${DISTLIST}
${Q}for i in ${DISTLIST} /dev/null; do \
${Q} for i in ${DISTLIST} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo cal/$$i; \
fi; \
done
distdir:
${Q}echo cal
${Q} echo cal
calcliblist:
${Q}for i in ${CALCLIBLIST} /dev/null; do \
${Q} for i in ${CALCLIBLIST} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo cal/$$i; \
fi; \
@@ -232,7 +239,7 @@ calcliblist:
##
echo_inst_files:
${Q}for i in ${CALC_FILES} /dev/null; do \
${Q} for i in ${CALC_FILES} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${CALC_SHAREDIR}/$$i; \
fi; \
@@ -247,32 +254,61 @@ echo_inst_files:
clean:
clobber:
rm -f .all
${RM} -f .all
# install everything
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
install: all
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \
echo mkdir $T${CALC_SHAREDIR}; \
mkdir $T${CALC_SHAREDIR}; \
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \
echo mkdir -p "$T${CALC_SHAREDIR}"; \
mkdir -p "$T${CALC_SHAREDIR}"; \
-${Q} if [ ! -d ${T}${CALC_SHAREDIR} ]; then \
echo ${MKDIR} ${T}${CALC_SHAREDIR}; \
${MKDIR} ${T}${CALC_SHAREDIR}; \
if [ ! -d "${T}${CALC_SHAREDIR}" ]; then \
echo ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \
${CHMOD} 0755 $T${CALC_SHAREDIR}; \
echo ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
else \
true; \
${TRUE}; \
fi
${Q}for i in ${CALC_FILES} /dev/null; do \
${Q} for i in ${CALC_FILES} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if ${CMP} -s $$i $T${CALC_SHAREDIR}/$$i; then \
true; \
if ${CMP} -s $$i ${T}${CALC_SHAREDIR}/$$i; then \
${TRUE}; \
else \
rm -f $T${CALC_SHAREDIR}/$$i.new; \
cp -f $$i $T${CALC_SHAREDIR}/$$i.new; \
${CHMOD} 0444 $T${CALC_SHAREDIR}/$$i.new; \
mv -f $T${CALC_SHAREDIR}/$$i.new $T${CALC_SHAREDIR}/$$i; \
echo "installed $T${CALC_SHAREDIR}/$$i"; \
${RM} -f ${T}${CALC_SHAREDIR}/$$i.new; \
${CP} -f $$i ${T}${CALC_SHAREDIR}/$$i.new; \
${CHMOD} 0444 ${T}${CALC_SHAREDIR}/$$i.new; \
${MV} -f ${T}${CALC_SHAREDIR}/$$i.new ${T}${CALC_SHAREDIR}/$$i; \
echo "installed ${T}${CALC_SHAREDIR}/$$i"; \
fi; \
done
# Try to remove everything that was installed
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
uninstall:
-${Q} for i in ${CALC_FILES} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if [ -f "${T}${CALC_SHAREDIR}/$$i" ]; then \
${RM} -f "${T}${CALC_SHAREDIR}/$$i"; \
if [ -f "${T}${CALC_SHAREDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CALC_SHAREDIR}/$$i"; \
else \
echo "uninstalled ${T}${CALC_SHAREDIR}/$$i"; \
fi; \
fi; \
done
-${Q} for i in ${CALC_SHAREDIR}; do \
if [ -d "${T}$$i" ]; then \
${RMDIR} "${T}$$i" 2>/dev/null; \
echo "cleaned up ${T}$$i"; \
fi; \
done

View File

@@ -701,6 +701,27 @@ sumsq.cal
4N+1, and always impossible for primes of the form 4N-1.
sumtimes.cal
timematsum(N)
timelistsum(N)
timematsort(N)
timelistsort(N)
timematreverse(N)
timelistreverse(N)
timematssq(N)
timelistssq(N)
timehmean(N,M)
doalltimes(N)
Give the runtimes for various ways of evaluating sums, sums of
squares, etc, for large lists and matrices. N is the size of
the list or matrix to use. The doalltimes() function will run
all fo the sumtimes tests. For example:
doalltimes(1e6);
surd.cal
surd(a, b)
@@ -993,8 +1014,8 @@ xx_print.cal
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.14 $
## @(#) $Id: README,v 29.14 2006/06/11 07:22:05 chongo Exp $
## @(#) $Revision: 29.15 $
## @(#) $Id: README,v 29.15 2006/06/23 00:34:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
##
## Under source code control: 1990/02/15 01:50:32

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.3 $
* @(#) $Id: ellip.cal,v 29.3 2006/03/07 22:16:25 chongo Exp $
* @(#) $Revision: 29.4 $
* @(#) $Id: ellip.cal,v 29.4 2006/06/20 09:29:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
*
* Under source code control: 1990/02/15 01:50:33
@@ -28,16 +28,17 @@
*/
/*
* Attempt to factor numbers using elliptic functions.
* y^2 = x^3 + a*x + b (mod N).
* Attempt to factor numbers using elliptic functions:
*
* Many points (x,y) (mod N) are found that solve the above equation,
* y^2 = x^3 + a*x + b (mod ellip_N).
*
* Many points (x,y) (mod ellip_N) are found that solve the above equation,
* starting from a trivial solution and 'multiplying' that point together
* to generate high powers of the point, looking for such a point whose
* order contains a common factor with N. The order of the group of points
* varies almost randomly within a certain interval for each choice of a
* and b, and thus each choice provides an independent opportunity to
* factor N. To generate a trivial solution, a is chosen and then b is
* order contains a common factor with ellip_N. The order of the group of
* points varies almost randomly within a certain interval for each choice of
* a and b, and thus each choice provides an independent opportunity to
* factor ellip_N. To generate a trivial solution, a is chosen and then b is
* selected so that (1,1) is a solution. The multiplication is done using
* the basic fact that the equation is a cubic, and so if a line hits the
* curve in two rational points, then the third intersection point must
@@ -45,9 +46,9 @@
* the number of rational solutions can be made very large. When modular
* arithmetic is used, solving for the third point requires the taking of a
* modular inverse (instead of division), and if this fails, then the GCD
* of the failing value and N provides a factor of N. This description is
* only an approximation, read "A Course in Number Theory and Cryptography"
* by Neal Koblitz for a good explanation.
* of the failing value and ellip_N provides a factor of ellip_N.
* This description is only an approximation, read "A Course in Number
* Theory and Cryptography" by Neal Koblitz for a good explanation.
*
* efactor(iN, ia, B, force)
* iN is the number to be factored.
@@ -81,15 +82,15 @@
*
* If a factor is found, it is returned and is also saved in the global
* variable f. The number being factored is also saved in the global
* variable N.
* variable ellip_N.
*/
obj point {x, y};
global N; /* number to factor */
global a; /* first coefficient */
global b; /* second coefficient */
global f; /* found factor */
global ellip_N; /* number to factor */
global ellip_a; /* first coefficient */
global ellip_b; /* second coefficient */
global ellip_f; /* found factor */
define efactor(iN, ia, B, force)
@@ -103,28 +104,28 @@ define efactor(iN, ia, B, force)
if (isnull(ia))
ia = 1;
obj point x;
a = ia;
b = -ia;
N = iN;
C = isqrt(N);
ellip_a = ia;
ellip_b = -ia;
ellip_N = iN;
C = isqrt(ellip_N);
C = 2 * C + 2 * isqrt(C) + 1;
f = 0;
while (f == 0) {
print "A =", a;
ellip_f = 0;
while (ellip_f == 0) {
print "A =", ellip_a;
x.x = 1;
x.y = 1;
print 2, x;
x = x ^ (2 ^ (highbit(C) + 1));
for (p = 3; ((p < B) && (f == 0)); p += 2) {
for (p = 3; ((p < B) && (ellip_f == 0)); p += 2) {
if (!ptest(p, 1))
continue;
print p, x;
x = x ^ (p ^ ((highbit(C) // highbit(p)) + 1));
}
a++;
b--;
ellip_a++;
ellip_b--;
}
return f;
return ellip_f;
}
@@ -143,16 +144,16 @@ define point_mul(p1, p2)
if (p1 == p2)
return point_square(`p1);
obj point r;
m = (minv(p2.x - p1.x, N) * (p2.y - p1.y)) % N;
m = (minv(p2.x - p1.x, ellip_N) * (p2.y - p1.y)) % ellip_N;
if (m == 0) {
if (f == 0)
f = gcd(p2.x - p1.x, N);
if (ellip_f == 0)
ellip_f = gcd(p2.x - p1.x, ellip_N);
r.x = 1;
r.y = 1;
return r;
}
r.x = (m^2 - p1.x - p2.x) % N;
r.y = ((m * (p1.x - r.x)) - p1.y) % N;
r.x = (m^2 - p1.x - p2.x) % ellip_N;
r.y = ((m * (p1.x - r.x)) - p1.y) % ellip_N;
return r;
}
@@ -162,16 +163,16 @@ define point_square(p)
local r, m;
obj point r;
m = ((3 * p.x^2 + a) * minv(p.y << 1, N)) % N;
m = ((3 * p.x^2 + ellip_a) * minv(p.y << 1, ellip_N)) % ellip_N;
if (m == 0) {
if (f == 0)
f = gcd(p.y << 1, N);
if (ellip_f == 0)
ellip_f = gcd(p.y << 1, ellip_N);
r.x = 1;
r.y = 1;
return r;
}
r.x = (m^2 - p.x - p.x) % N;
r.y = ((m * (p.x - r.x)) - p.y) % N;
r.x = (m^2 - p.x - p.x) % ellip_N;
r.y = ((m * (p.x - r.x)) - p.y) % ellip_N;
return r;
}
@@ -184,7 +185,7 @@ define point_pow(p, pow)
if (isodd(pow))
r = p;
t = p;
for (bit = 2; ((bit <= pow) && (f == 0)); bit <<= 1) {
for (bit = 2; ((bit <= pow) && (ellip_f == 0)); bit <<= 1) {
t = point_square(`t);
if (bit & pow)
r = point_mul(`t, `r);

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.2 $
* @(#) $Id: prompt.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $Id: prompt.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/prompt.cal,v $
*
* Under source code control: 1995/12/18 04:43:25
@@ -101,7 +101,7 @@ define adder() {
}
}
global x;
global prompt_x;
define showvalues(str) {
local s;
@@ -109,8 +109,8 @@ define showvalues(str) {
s = prompt("? ");
if (s == "end")
break;
x = eval(s);
if (!isnum(x)) {
prompt_x = eval(s);
if (!isnum(prompt_x)) {
print "Please enter a number";
continue;
}

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.29 $
* @(#) $Id: regress.cal,v 29.29 2006/06/11 07:07:23 chongo Exp $
* @(#) $Revision: 29.35 $
* @(#) $Id: regress.cal,v 29.35 2006/08/20 16:16:11 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
*
* Under source code control: 1990/02/15 01:50:36
@@ -201,7 +201,6 @@ define test_variables()
local x1, x2, x3;
global g1, g2;
local t;
global globalvar;
local x;
print '350: Beginning test_variables';
@@ -744,6 +743,7 @@ define test_functions()
local pi;
local h, n, r, m, v;
local n2, m2, v2;
local t;
print '700: Beginning test_functions';
@@ -1317,7 +1317,65 @@ define test_functions()
*/
vrfy(isstr(calcpath()), '1155: isstr(calcpath())');
print '1156: Ending test_functions';
/*
* ssq use of lists
*/
vrfy(ssq(1,2, list(3,4,list(5,6)), list(), 7, 8) == 204,
'1156: ssq(1,2, list(3,4,list(5,6)), list(), 7, 8) == 204');
/*
* quomod 5th argument rounding tests
*/
vrfy(quomod(10,-3,a,b,0) == 1, '1157: vrfy(quomod(10,-3,a,b,0) == 1');
vrfy(a == -4, '1158: a == -4');
vrfy(b == -2, '1159: b == -2');
vrfy(quomod(-10,-3,a,b,1) == 1, '1160: vrfy(quomod(-10,-3,a,b,1) == 1');
vrfy(a == 4, '1161: a == 4');
vrfy(b == 2, '1162: b == 2');
vrfy(quomod(10,3,a,b,2) == 1, '1163: vrfy(quomod(10,3,a,b,2) == 1');
vrfy(a == 3, '1164: a == 3');
vrfy(b == 1, '1165: b == 1');
vrfy(quomod(-10,3,a,b,3) == 1, '1166: vrfy(quomod(-10,3,a,b,3) == 1');
vrfy(a == -4, '1167: a == -4');
vrfy(b == 2, '1168: b == 2');
vrfy(quomod(10,-3,a,b,4) == 1, '1169: vrfy(quomod(10,-3,a,b,4) == 1');
vrfy(a == -3, '1170: a == -3');
vrfy(b == 1, '1171: b == 1');
vrfy(quomod(-10,-3,a,b,5) == 1, '1172: vrfy(quomod(-10,-3,a,b,5) == 1');
vrfy(a == 3, '1173: a == 3');
vrfy(b == -1, '1174: b == -1');
vrfy(quomod(10,3,a,b,6) == 1, '1175: vrfy(quomod(10,3,a,b,6) == 1');
vrfy(a == 3, '1176: a == 3');
vrfy(b == 1, '1177: b == 1');
vrfy(quomod(-10,3,a,b,7) == 1, '1178: vrfy(quomod(-10,3,a,b,7) == 1');
vrfy(a == -4, '1179: a == -4');
vrfy(b == 2, '1180: b == 2');
vrfy(quomod(10,-3,a,b,8) == 1, '1181: vrfy(quomod(10,-3,a,b,8) == 1');
vrfy(a == -4, '1182: a == -4');
vrfy(b == -2, '1183: b == -2');
vrfy(quomod(-10,-3,a,b,9) == 1, '1184: vrfy(quomod(-10,-3,a,b,9) == 1');
vrfy(a == 3, '1185: a == 3');
vrfy(b == -1, '1186: b == -1');
vrfy(quomod(10,3,a,b,10) == 1, '1187: vrfy(quomod(10,3,a,b,10) == 1');
vrfy(a == 4, '1188: a == 4');
vrfy(b == -2, '1189: b == -2');
vrfy(quomod(-10,3,a,b,11) == 1, '1190: vrfy(quomod(-10,3,a,b,11) == 1');
vrfy(a == -4, '1191: a == -4');
vrfy(b == 2, '1192: b == 2');
vrfy(quomod(10,-3,a,b,12) == 1, '1193: vrfy(quomod(10,-3,a,b,12) == 1');
vrfy(a == -3, '1194: a == -3');
vrfy(b == 1, '1195: b == 1');
vrfy(quomod(-10,-3,a,b,13) == 1,'1196: vrfy(quomod(-10,-3,a,b,13) == 1');
vrfy(a == 4, '1197: a == 4');
vrfy(b == 2, '1198: b == 2');
vrfy(quomod(10,3,a,b,14) == 1, '1199: vrfy(quomod(10,3,a,b,14) == 1');
vrfy(a == 4, '1200: a == 4');
vrfy(b == -2, '1201: b == -2');
vrfy(quomod(-10,3,a,b,15) == 1, '1202: vrfy(quomod(-10,3,a,b,15) == 1');
vrfy(a == -4, '1203: a == -4');
vrfy(b == 2, '1204: b == 2');
print '1205: Ending test_functions';
}
print '017: parsed test_functions()';
@@ -1334,14 +1392,14 @@ define _test_underscore()
local _a = 27;
local __a = 23209;
print "1200: Beginning _test_underscore";
print "1290: Beginning _test_underscore";
vrfy(_a == 27, '1201: _a == 27');
vrfy(_ == 49, '1202: _ == 49');
vrfy(__ == 63, '1203: __ == 63');
vrfy(__a == 23209, '1204: __a == 23209');
vrfy(_a == 27, '1291: _a == 27');
vrfy(_ == 49, '1292: _ == 49');
vrfy(__ == 63, '1293: __ == 63');
vrfy(__a == 23209, '1294: __a == 23209');
print "1205: Ending _test_underscore";
print "1295: Ending _test_underscore";
}
print '020: parsed _test_underscore';
@@ -3404,7 +3462,7 @@ print '070: parsed test_redc()';
*/
define test_fileops()
{
local a, b, c, f, m, n, p, r, x, y, z;
local a, b, c, f, m, n, p, r, s, x, y, z;
local L = "Landon";
local C = "Curt";
local N = "Noll";
@@ -3529,15 +3587,38 @@ define test_fileops()
++ecnt;
print '4267: ++ecnt;';
vrfy(isfile(p=fopen(long,"r")) == 0,
'4268: isfile(p=fopen(long,"r")) == 0');
'4268: isfile(p=fopen(long,"r")) == 0');
/*
* test fgetfile() and fgetline()
*/
vrfy(!iserror(p=fopen("tmp4200","w")),
'4269: !iserror(p=fopen("tmp4200","w"))');
vrfy(!iserror(fputs(p,"chongo\n")),
'4270: !iserror(fputs(p,"chongo\n"))');
vrfy(!iserror(fputs(p,"w\0a\0s\n")),
'4271: !iserror(fputs(p,"w\0a\0s\n"))');
vrfy(!iserror(fputs(p,"here\n")),
'4272: !iserror(fputs(p,"here\n"))');
vrfy(!iserror(fclose(p)), '4273: !iserror(fclose(p))');
vrfy(!iserror(p=fopen("tmp4200","r")),
'4274: !iserror(p=fopen("tmp4200","r"))');
vrfy(!iserror(s=fgetline(p)), '4275: !iserror(s=fgetline(p))');
vrfy(strcmp(s,"chongo") == 0, '4276: strcmp(s,"chongo") == 0');
vrfy(!iserror(s=fgetfile(p)), '4277: !iserror(s=fgetfile(p))');
vrfy(strcmp(s,"w\0a\0s\nhere\n") == 0,
'4278: strcmp(s,"w\0a\0s\nhere\n") == 0');
vrfy(!iserror(fclose(p)), '4279: !iserror(fclose(p))');
/*
* cleanup
*/
x = rm("junk4200");
print '4269: x = rm("junk4200")';
print '4280: x = rm("junk4200")';
x = rm("tmp4200");
print '4281: x = rm("tmp4200")';
print '4270: Ending test_fileops';
print '4282: Ending test_fileops';
}
print '071: parsed test_fileops()';
@@ -3972,7 +4053,7 @@ print '088: parsed test_fileop()';
/*
* global and static assignment tests
*/
global a = 10, b, c d = 20, e, f;
global a = 10, b, c d = 20, e;
print '089: global a = 10, b, c d = 20, e, f';
vrfy(a == 10, '090: a == 10');
vrfy(b == 0, '091: b == 0');
@@ -4672,13 +4753,11 @@ print '137: parsed test_random()';
/*
* test_newsyn - test new command completion syntax and scope rules
*/
for (s5500 = 0, i = 0; i < 5; i++)
s5500 += i;
for (s5500 = 0, i = 0; i < 5; i++) s5500 += i;
print "138: for (s5500 = 0, i = 0; i < 5; i++) s5500 += i;";
vrfy(s5500 == 10, '139: s5500 == 10');
vrfy(i == 5, '140: i == 5');
for (s5500 = 0, i = 0; i < 9; i++)
{
for (s5500 = 0, i = 0; i < 9; i++) {
s5500 += i;
}
print "141: for (s5500 = 0, i = 0; i < 9; i++) { s5500 += i; }";
@@ -4726,7 +4805,6 @@ define test_newsyn()
vrfy(i == 3, '5509: i == 3');
/**/
{
local i;
for (s5500 = 0, i = 0; i < 11; i++)
s5500 += i;
vrfy(s5500 == 55, '5510: s5500 == 45');
@@ -5138,8 +5216,6 @@ print '156: parsed test_size()';
/*
* test_assign - test assignment of constants and variables
*/
global A, B; /* A, B for "constants" */
print '157: global A, B';
global X5800, Y5800; /* X5800, Y5800 for "variables" */
print '158: global X5800, Y5800';
obj xy5800 {x, y};
@@ -7818,7 +7894,27 @@ read -once "test8500";
print;
print '8600: Starting test of up to 1024 args'
read -once "test8600";
/* 86xx: Ending test of up to 1024 args is printed by test8600.cal */
/* 860x: Ending test of up to 1024 args is printed by test8600.cal */
/*
* dupvar_warn and redecl_warn testing
*/
print;
print '8650: Starting test of dupvar_warn and redecl_warn config parameters';
vrfy(config("redecl_warn",0), '8651: config("redecl_warn",0)');
vrfy(config("dupvar_warn",0), '8652: config("dupvar_warn",0)');
vrfy(u_glob == 6, '8653: u_glob == 6');
global u_glob = 555;
print '8654: reclare u_glob';
vrfy(u_glob == 555, '8655: u_glob == 555');
define func_8650(u_glob) { local u_glob; return u_glob; }
print '8656: u_glob as both local and parameter';
define func_8650a(u_glob) { static u_glob; return u_glob; }
print '8657: u_glob as both static and parameter';
vrfy(config("redecl_warn",1)==0, '8658: config("redecl_warn",1)==0');
vrfy(config("dupvar_warn",1)==0, '8659: config("dupvar_warn",1)==0');
/* 865x: Ending test of up to 1024 args is printed by test8600.cal */
/*
@@ -7826,6 +7922,7 @@ read -once "test8600";
*
* We use the dotest driver to evaluate test-97xx data files.
*/
print;
print '8700: Starting dotest runs'
print '8701: read -once "dotest"';
read -once "dotest";
@@ -7835,6 +7932,7 @@ 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
*
@@ -7931,7 +8029,9 @@ print '9836: read -once linear';
print '9837: skipping read -once beer.cal because it is an infinite loop';
print '9838: skipping read -once hello.cal because it is an infinite loop';
print '9839: skipping read -once xx_print.cal because it is a printing demo';
print '9840: Ending read of selected calc resource files';
read -once sumtimes;
print '9840: read -once sumtimes';
print '9841: Ending read of selected calc resource files';
/*

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.1 $
* @(#) $Id: set8700.cal,v 29.1 2006/05/20 19:35:33 chongo Exp $
* @(#) $Revision: 29.2 $
* @(#) $Id: set8700.cal,v 29.2 2006/08/20 16:16:11 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.cal,v $
*
* Under source code control: 2006/05/20 14:10:11
@@ -70,3 +70,8 @@ define set8700_g(set8700_x)
obj set8700_point {
set8700_x, set8700_y, set8700_z
}
global mat set8700_c[] = { 1, 2+3i, -5+4i, 5i+6, -7i };
global mat set8700_e[] = { 0, 1, 0, 0, 2, -3/2, 2, -1/2,
-3, 0.5, -1.0, 0.5, 1.0, 0.0, 0.0, 0.0 };

View File

@@ -17,8 +17,8 @@
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.1 $
## @(#) $Id: set8700.line,v 29.1 2006/05/20 19:35:33 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: set8700.line,v 29.4 2006/08/20 16:16:11 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.line,v $
##
## Under source code control: 2006/05/20 14:10:11
@@ -143,7 +143,7 @@ a #= 4, a == 1
## Binary # operator not defined for strings
global set8700_A; protect(set8700_A) == 0
protect(set8700_A) == 0
## Testing with one lvalue
isnull(protect(set8700_A,65))
protect(set8700_A) == 65
@@ -302,7 +302,7 @@ 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
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)
@@ -322,7 +322,6 @@ 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
@@ -403,3 +402,28 @@ 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})
## Testing quomod
quomod(14,5,3,4) == error(10374)
global set8700_a,set8700_b; quomod("abc", 4, set8700_a, set8700_b) == error(10375)
quomod(14,5,set8700_a,set8700_b,0) == 1 && set8700_a == 2 && set8700_b == 4
quomod(14,5,set8700_a,set8700_b,1) == 1 && set8700_a == 3 && set8700_b == -1
quomod("abc",2,set8700_a,set8700_b) == error(10375)
set8700_a = "abc"; quomod(14,5,set8700_a,set8700_b) == error(10375)
set8700_a = null(); quomod(14,5,set8700_a,set8700_b,24) == 1; set8700_a == 3 && set8700_b == -1
quomod(14,5,set8700_a,set8700_a) == error(10374)
quomod(14,5,set8700_a,set8700_b,-1) == error(10375)
protect(set8700_a,1); quomod(17,2,set8700_a,set8700_b) == error(10376)
protect(set8700_a,0); quomod(17,2,set8700_a,set8700_b); set8700_a == 8 && set8700_b == 1
set8700_p = &set8700_a, set8700_q = &set8700_b; quomod(14,5,*set8700_p,*set8700_q); *set8700_p == 2 && *set8700_q == 4
## Testing estr
base(1/3) == 10
strcmp(estr(null()), "\"\"") == 0
strcmp(estr(bernoulli(48)), "-5609403368997817686249127547/46410") == 0
strcmp(estr(sin(3i)), "1001787492740990189897i/100000000000000000000") == 0
base(10) == 1/3
strcmp(estr("fizzbin"), "\"fizzbin\"") == 0
strcmp(estr(set8700_c), "mat[5]={1,2+3i,-5+4i,6+5i,-7i}") == 0
strcmp(estr(set8700_e), "mat[16]={0,1,0,0,2,-3/2,2,-1/2,-3,1/2,-1,1/2,1,0,0,0}") == 0
strcmp(estr(list(2,3,5)), "list(2,3,5)") == 0

186
cal/sumtimes.cal Normal file
View File

@@ -0,0 +1,186 @@
/*
* sumtimes - runtimes evaluating sums & squares of large lists and mats
*
* Copyright (C) 2006 Ernest Bowen
*
* Calc is open software; you can redistribute it and/or modify it under
* the terms of the version 2.1 of the GNU Lesser General Public License
* as published by the Free Software Foundation.
*
* Calc is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
* Public License for more details.
*
* A copy of version 2.1 of the GNU Lesser General Public License is
* distributed with calc under the filename COPYING-LGPL. You should have
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.1 $
* @(#) $Id: sumtimes.cal,v 29.1 2006/06/23 00:35:30 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/sumtimes.cal,v $
*
* Under source code control: 2006/06/22 17:29
* File existed as early as: 2006
*
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
global sumtimes_t0, sumtimes_t1, sumtimes_t2, sumtimes_t3;
global sumtimes_A, sumtimes_B;
config("tilde", 0),;
define timematsum(N) {
local n, s, p, ptop;
sumtimes_A = mat[N];
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
ptop = &sumtimes_A[n-1];
sumtimes_t0 = runtime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n];
sumtimes_t1 = runtime();
for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += *p;
sumtimes_t2 = runtime();
s = matsum(sumtimes_A);
sumtimes_t3 = runtime();
print "Matrix sum runtimes";
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
printf('\t"For" loop using pointers:\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
printf('\tUsing builtin "matsum":\t\t%.4f\n', sumtimes_t3 - sumtimes_t2);
}
define timelistsum(N) {
local n, s;
sumtimes_A = makelist(N);
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n];
sumtimes_t1 = runtime();
s = sum(sumtimes_A);
sumtimes_t2 = runtime();
print "List sum runtimes";
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
printf('\tUsing builtin "sum":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
}
define timematsort(N) {
local n;
sumtimes_A = mat[N];
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime();
sort(sumtimes_A);
sumtimes_t1 = runtime();
printf('\tMatrix sort runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
}
define timelistsort(N) {
local n;
sumtimes_A = makelist(N);
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime();
sort(sumtimes_A);
sumtimes_t1 = runtime();
printf('\tList sort runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
}
define timematreverse(N) {
local n;
sumtimes_A = mat[N];
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime();
reverse(sumtimes_A);
sumtimes_t1 = runtime();
printf('\tMatrix reverse runtime %.4f\n', sumtimes_t1 - sumtimes_t0);
}
define timelistreverse(N) {
local n;
sumtimes_A = makelist(N);
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime();
reverse(sumtimes_A);
sumtimes_t1 = runtime();
printf('\tList reverse runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
}
define timematssq(N) {
local n, s, p, ptop;
sumtimes_A = mat[N];
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
ptop = &sumtimes_A[n-1];
sumtimes_t0 = runtime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2;
sumtimes_t1 = runtime();
for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += (*p)^2;
sumtimes_t2 = runtime();
print "Matrix sum of squares runtimes";
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
printf('\t"For" loop using pointers:\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
}
define timelistssq(N) {
local n, s;
sumtimes_A = makelist(N);
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
sumtimes_t0 = runtime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2;
sumtimes_t1 = runtime();
s = ssq(sumtimes_A);
sumtimes_t2 = runtime();
print "List sum of squares runtimes";
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
printf('\tUsing builtin "ssq":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
}
define timehmean(N, M = 10) {
local n, s, v1, v2;
sumtimes_A = makelist(N);
for (n = 0; n < N; n++) sumtimes_A[n] = rand(1, M);
sumtimes_t0 = runtime();
for (s = n = 0; n < N; n++) s += 1/sumtimes_A[n];
v1 = N/s;
sumtimes_t1 = runtime();
v2 = hmean(sumtimes_A);
sumtimes_t2 = runtime();
print v1, v2;
print "List harmonic meanruntimes";
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
printf('\tUsing builtin "hmean":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
}
define doalltimes(N) {
timematsum(N);
print;
timelistsum(N);
print;
timematssq(N);
print;
timelistssq(N);
print;
timematsort(N);
timelistsort(N);
timematreverse(N);
timelistreverse(N);
print;
}

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.2 $
* @(#) $Id: test2700.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
* @(#) $Revision: 29.4 $
* @(#) $Id: test2700.cal,v 29.4 2006/06/25 22:06:23 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2700.cal,v $
*
* Under source code control: 1995/11/01 22:52:25
@@ -41,8 +41,7 @@
*/
global defaultverbose = 1;
global err;
defaultverbose = 1;
define mknonnegreal() {
switch(rand(8)) {
@@ -89,11 +88,11 @@ define mkfrac() = rand(2) ? mkposfrac() : -mkposfrac();
define mksquarereal() = mknonnegreal()^2;
/*
* XXX - Should be able to do better than the following. For nonsquare
* positive integer less than 1e6, could use
* We might be able to do better than the following. For nonsquare
* positive integer less than 1e6, could use:
* x = rand(1, 1000);
* return rand(x^2 + 1, (x + 1)^2);
* Maybe could do
* Maybe could do:
* do
* x = mkreal_2700();
* while

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.2 $
* @(#) $Id: test3300.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $Id: test3300.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3300.cal,v $
*
* Under source code control: 1995/12/02 04:27:41
@@ -30,8 +30,7 @@
*/
global defaultverbose = 1; /* default verbose value */
global err;
defaultverbose = 1; /* default verbose value */
define testi(str, n, N, verbose)
{

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.2 $
* @(#) $Id: test3400.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $Id: test3400.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3400.cal,v $
*
* Under source code control: 1995/12/02 05:20:11
@@ -54,8 +54,7 @@
*/
global defaultverbose = 1; /* default verbose value */
global err;
defaultverbose = 1; /* default verbose value */
global pi1k = pi(1e-1000);

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.2 $
* @(#) $Id: test3500.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $Id: test3500.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3500.cal,v $
*
* Under source code control: 1995/12/18 22:50:46
@@ -53,8 +53,7 @@
*/
global defaultverbose = 1; /* default verbose value */
global err;
defaultverbose = 1; /* default verbose value */
define testfrem(x,y,verbose)
{

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.2 $
* @(#) $Id: test4000.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $Id: test4000.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4000.cal,v $
*
* Under source code control: 1996/03/13 02:38:45
@@ -75,8 +75,7 @@
*/
global defaultverbose = 1; /* default verbose value */
global err;
defaultverbose = 1; /* default verbose value */
/*
* test defaults

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.3 $
* @(#) $Id: test4100.cal,v 29.3 2006/06/10 20:19:20 chongo Exp $
* @(#) $Revision: 29.4 $
* @(#) $Id: test4100.cal,v 29.4 2006/06/20 09:29:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4100.cal,v $
*
* Under source code control: 1996/03/13 03:53:22
@@ -70,18 +70,16 @@
*/
global defaultverbose = 1; /* default verbose value */
global err;
defaultverbose = 1; /* default verbose value */
/*
* test defaults
*/
global K1 = 2^17;
global K2 = 2^12;
global BASEB = 16;
global BASE = 2^BASEB;
global test4100_K1 = 2^17;
global test4100_K2 = 2^12;
global test4100_BASE = 2^config("baseb");
define rlen_4100(N) = rand(BASE^(N-1), BASE^N);
define rlen_4100(N) = rand(test4100_BASE^(N-1), test4100_BASE^N);
define olen(N)
{
@@ -234,7 +232,7 @@ define times(str,N,n,verbose)
m = olen(N);
m2 = m^2;
if (isnull(n)) {
n = ceil(K1/power(N,1.585));
n = ceil(test4100_K1/power(N,1.585));
if (verbose > 1)
printf("n = %d\n", n);
}
@@ -308,7 +306,7 @@ define powtimes(str, N1, N2, n, verbose)
N2 = 1;
if (isnull(n)) {
n = ceil(K2/power(N1, 1.585)/N2);
n = ceil(test4100_K2/power(N1, 1.585)/N2);
printf ("n = %d\n", n);
}
mat A[n];
@@ -408,7 +406,7 @@ define inittimes(str,N,n,verbose)
}
m = 0;
if (isnull(n)) {
n = ceil(K1/N^2);
n = ceil(test4100_K1/N^2);
if (verbose > 1) {
printf ("n = %d\n", n);
}

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.4 $
* @(#) $Id: test4600.cal,v 29.4 2001/04/10 22:09:02 chongo Exp $
* @(#) $Revision: 29.5 $
* @(#) $Id: test4600.cal,v 29.5 2006/06/20 09:29:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4600.cal,v $
*
* Under source code control: 1996/07/02 20:04:40
@@ -30,8 +30,7 @@
*/
global defaultverbose = 1 /* default verbose value */
global err;
defaultverbose = 1; /* default verbose value */
/*
* test globals

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.2 $
* @(#) $Id: test5100.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $Id: test5100.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5100.cal,v $
*
* Under source code control: 1996/12/02 23:57:10
@@ -30,8 +30,7 @@
*/
global defaultverbose = 1; /* default verbose value */
global err;
defaultverbose = 1; /* default verbose value */
/*
* We test the new code generator declaration scope and order.

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.2 $
* @(#) $Id: test5200.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
* @(#) $Revision: 29.3 $
* @(#) $Id: test5200.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5200.cal,v $
*
* Under source code control: 1997/02/07 02:48:10
@@ -30,8 +30,7 @@
*/
global defaultverbose = 1; /* default verbose value */
global err;
defaultverbose = 1; /* default verbose value */
/*
* test the fix of a global/static bug

8
calc.h
View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.18 $
* @(#) $Id: calc.h,v 29.18 2006/05/21 07:28:54 chongo Exp $
* @(#) $Revision: 29.19 $
* @(#) $Id: calc.h,v 29.19 2006/08/20 15:01:30 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
*
* Under source code control: 1990/02/15 01:48:31
@@ -113,10 +113,10 @@ extern DLL int closeid(FILEID id);
extern DLL int getcharid(FILEID id);
extern DLL int idprintf(FILEID id, char *fmt, int count, VALUE **vals);
extern DLL int idfputc(FILEID id, int ch);
extern DLL int idfputs(FILEID id, char *str);
extern DLL int idfputs(FILEID id, STRING *str);
extern DLL int printid(FILEID id, int flags);
extern DLL int flushid(FILEID id);
extern DLL int readid(FILEID id, int flags, char **retptr);
extern DLL int readid(FILEID id, int flags, STRING **retptr);
extern DLL int getloc(FILEID id, ZVALUE *loc);
extern DLL int setloc(FILEID id, ZVALUE zpos);
extern DLL int getsize(FILEID id, ZVALUE *size);

View File

@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
#
# @(#) $Revision: 29.15 $
# @(#) $Id: calc.spec.in,v 29.15 2006/05/21 06:26:00 chongo Exp $
# @(#) $Revision: 29.16 $
# @(#) $Id: calc.spec.in,v 29.16 2006/06/26 05:50:44 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.spec.in,v $
#
# Under source code control: 2003/02/16 20:21:39
@@ -38,7 +38,7 @@ Summary: Arbitrary precision calculator.
Name: calc
Version: <<<PROJECT_VERSION>>>
Release: 0
Copyright: LGPL
License: LGPL
Group: Applications/Engineering
Source: %{name}-%{version}.tar.gz
URL: http://www.isthe.com/chongo/tech/comp/calc/index.html
@@ -101,6 +101,8 @@ rm -rf %{buildroot}
%attr(644, root, root) %{_libdir}/*.a
%changelog
* Sun Jun 25 2006 Landon Curt Noll http://www.isthe.com/chongo
- Changed Copyright to License as per new rpm v4.4 syntax
* 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

View File

@@ -1,7 +1,7 @@
#
# calcerr - error codes and messages
#
# Copyright (C) 1999 Ernest Bowen
# Copyright (C) 1999-2006 Ernest Bowen
#
# Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License
@@ -17,8 +17,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
#
# @(#) $Revision: 29.8 $
# @(#) $Id: calcerr.tbl,v 29.8 2006/05/19 15:12:57 chongo Exp $
# @(#) $Revision: 29.10 $
# @(#) $Id: calcerr.tbl,v 29.10 2006/08/20 15:01:30 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
#
# Under source code control: 1996/05/23 17:38:44
@@ -404,9 +404,9 @@ 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_SWAP3 Non-lvalue argument for swap
E_QUOMOD1 Non-lvalue argument 3 or 4 for quomod
E_QUOMOD2 Non-real-number arg 1 or 2 or bad arg 5 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
@@ -445,3 +445,7 @@ 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
E_FGETFILE1 Non-file argument for fgetfile
E_FGETFILE2 File argument for fgetfile not open for reading
E_FGETFILE3 Unable to set file position in fgetfile
E_ESTR Non-representable type for estr

View File

@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
#
# @(#) $Revision: 29.3 $
# @(#) $Id: check.awk,v 29.3 2006/05/20 19:43:39 chongo Exp $
# @(#) $Revision: 29.4 $
# @(#) $Id: check.awk,v 29.4 2006/08/20 16:16:31 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $
#
# Under source code control: 1996/05/25 22:07:58
@@ -64,7 +64,7 @@ NF == 0 {
end_seen = 1;
}
$1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ {
$1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ || $1 ~ /^"))$/ {
if (error > 0) {
if (havebuf2) {
print buf2;

169
codegen.c
View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.20 $
* @(#) $Id: codegen.c,v 29.20 2006/06/11 07:25:14 chongo Exp $
* @(#) $Revision: 29.21 $
* @(#) $Id: codegen.c,v 29.21 2006/06/20 10:28:06 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $
*
* Under source code control: 1990/02/15 01:48:13
@@ -136,10 +136,6 @@ getcommands(BOOL toplevel)
getfunction();
break;
case T_UNDEFINE:
ungetfunction();
break;
case T_EOF:
if (!toplevel)
exitfilescope();
@@ -306,9 +302,8 @@ ungetfunction(void)
name = tokensymbol();
type = getbuiltinfunc(name);
if (type >= 0) {
errorcount--;
scanerror(T_NULL,
"Attempt to undefine the builtin function \"%s\"", name);
warning(
"Cannot undefine builtin function \"%s\"", name);
continue;
}
rmuserfunc(name);
@@ -316,6 +311,16 @@ ungetfunction(void)
case T_MULT:
rmalluserfunc();
continue;
case T_STATIC:
if (gettoken() != T_SYMBOL) {
scanerror(T_SEMICOLON,
"Non-identifier following \"undefine static\"");
return;
}
name = tokensymbol();
endscope(name, FALSE);
continue;
case T_NEWLINE:
case T_SEMICOLON:
case T_EOF:
@@ -634,6 +639,10 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
(void) getdeclarations(SYM_LOCAL);
break;
case T_UNDEFINE:
ungetfunction();
break;
case T_RIGHTBRACE:
scanerror(T_NULL, "Extraneous right brace");
return;
@@ -799,10 +808,10 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
setlabel(&label3);
if (contlabel == NULL_LABEL)
contlabel = &label3;
(void) tokenmode(oldmode);
getstatement(contlabel, breaklabel, NULL_LABEL, NULL_LABEL);
addoplabel(OP_JUMP, contlabel);
setlabel(breaklabel);
(void) tokenmode(oldmode);
return;
case T_WHILE:
@@ -811,6 +820,7 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
clearlabel(contlabel);
setlabel(contlabel);
getcondition();
(void) tokenmode(oldmode);
if (gettoken() != T_SEMICOLON) {
breaklabel = &label2;
clearlabel(breaklabel);
@@ -823,7 +833,6 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
} else {
addoplabel(OP_JUMPNZ, contlabel);
}
(void) tokenmode(oldmode);
return;
case T_DO:
@@ -2124,7 +2133,8 @@ getterm(void)
case T_GLOBAL:
if (gettoken() != T_SYMBOL) {
scanerror(T_NULL, "Global id expected");
scanerror(T_NULL,
"No identifier after global specifier");
break;
}
rescantoken();
@@ -2133,19 +2143,30 @@ getterm(void)
case T_LOCAL:
if (gettoken() != T_SYMBOL) {
scanerror(T_NULL, "Local id expected");
scanerror(T_NULL,
"No identifier after local specifier");
break;
}
rescantoken();
type = getidexpr(TRUE, T_LOCAL);
break;
case T_STATIC:
if (gettoken() != T_SYMBOL) {
scanerror(T_NULL,
"No identifier after static specifier");
break;
}
rescantoken();
type = getidexpr(TRUE, T_STATIC);
break;
case T_LEFTBRACKET:
scanerror(T_NULL, "Bad index usage");
scanerror(T_NULL, "Left bracket with no preceding lvalue");
break;
case T_PERIOD:
scanerror(T_NULL, "Bad element reference");
scanerror(T_NULL, "Period with no preceding lvalue");
break;
default:
@@ -2207,7 +2228,8 @@ getidexpr(BOOL okmat, int autodef)
type = 0;
break;
case T_ASSIGN:
if (autodef != T_GLOBAL && autodef != T_LOCAL)
if (autodef != T_GLOBAL && autodef != T_LOCAL &&
autodef != T_STATIC)
autodef = 1;
/* fall into default case */
default:
@@ -2408,22 +2430,11 @@ getshowstatement(void)
"stri\000"
"lite\000"
"opco\000", name);
if (arg == 19) {
if (gettoken() != T_SYMBOL) {
rescantoken();
scanerror(T_SEMICOLON,
"Function name expected");
return;
}
index = adduserfunc(tokensymbol());
addopone(OP_SHOW, index + 19);
return;
}
if (arg > 0)
addopone(OP_SHOW, arg);
else
printf("Unknown SHOW parameter ignored\n");
return;
break;
case T_GLOBAL:
arg = 13; break;
case T_STATIC:
arg = 14; break;
default:
printf("SHOW command to be followed by at least ");
printf("four letters of one of:\n");
@@ -2438,6 +2449,21 @@ getshowstatement(void)
return;
}
if (arg == 19) {
if (gettoken() != T_SYMBOL) {
rescantoken();
scanerror(T_SEMICOLON,
"Function name expected for show statement");
return;
}
index = adduserfunc(tokensymbol());
addopone(OP_SHOW, index + 19);
return;
}
if (arg > 0)
addopone(OP_SHOW, arg);
else
warning("Unknown parameter for show statement");
}
@@ -2556,8 +2582,9 @@ getid(char *buf)
* Define a symbol name to be of the specified symbol type. The scope
* of a static variable with the same name is terminated if symtype is
* global or if symtype is static and the old variable is at the same
* level. A scan error occurs if the name is already in use in an
* incompatible manner.
* level. Warnings are issued when a global or local variable is
* redeclared and when in the same body the variable will be accessible only
^ with the appropriate specfier.
*/
static void
definesymbol(char *name, int symtype)
@@ -2566,25 +2593,48 @@ definesymbol(char *name, int symtype)
case SYM_STATIC:
if (symtype == SYM_GLOBAL || symtype == SYM_STATIC)
endscope(name, symtype == SYM_GLOBAL);
/*FALLTHRU*/
case SYM_UNDEFINED:
break;
case SYM_GLOBAL:
if (symtype == SYM_LOCAL)
(void) addlocal(name);
else
(void) addglobal(name, (symtype == SYM_STATIC));
if (symtype == SYM_GLOBAL && conf->redecl_warn) {
warning("redeclaraion of global \"%s\"",
name);
return;
}
break;
case SYM_LOCAL:
if (symtype == SYM_LOCAL)
if (symtype == SYM_LOCAL && conf->redecl_warn) {
warning("redeclaraion of local \"%s\"",
name);
return;
/*FALLTHRU*/
}
if (symtype == SYM_GLOBAL && conf->dupvar_warn) {
warning("both local and global \"%s\" defined", name);
break;
}
if (conf->dupvar_warn) {
warning("both local and static \"%s\" defined", name);
}
break;
case SYM_PARAM:
scanerror(T_COMMA,
"Variable \"%s\" is already defined", name);
return;
if (symtype == SYM_LOCAL && conf->dupvar_warn) {
warning("both local and parameter \"%s\" defined",
name);
break;
}
if (symtype == SYM_GLOBAL && conf->dupvar_warn) {
warning("both global and parameter \"%s\" defined",
name);
break;
}
if (conf->dupvar_warn) {
warning("both static and parameter \"%s\" defined", name);
}
}
if (symtype == SYM_LOCAL)
(void) addlocal(name);
else
(void) addglobal(name, (symtype == SYM_STATIC));
}
@@ -2602,21 +2652,28 @@ definesymbol(char *name, int symtype)
static void
usesymbol(char *name, int autodef)
{
int type;
type = symboltype(name);
if (autodef == T_GLOBAL) {
addopptr(OP_GLOBALADDR, (char *) addglobal(name, FALSE));
return;
if (type == SYM_GLOBAL) {
warning("Unnecessary global specifier");
}
addopptr(OP_GLOBALADDR, (char *) addglobal(name, FALSE));
return;
}
if (autodef == T_STATIC) {
addopptr(OP_GLOBALADDR, (char *) addglobal(name, TRUE));
return;
}
if (autodef == T_LOCAL) {
if (symboltype(name) == SYM_PARAM) {
scanerror(T_COMMA,
"Variable \"%s\" is already defined", name);
return;
}
addopone(OP_LOCALADDR, addlocal(name));
return;
if (type == SYM_LOCAL) {
warning("Unnecessary local specifier");
}
addopone(OP_LOCALADDR, addlocal(name));
return;
}
switch (symboltype(name)) {
switch (type) {
case SYM_LOCAL:
addopone(OP_LOCALADDR, (long) findlocal(name));
return;

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.20 $
* @(#) $Id: config.c,v 29.20 2006/06/11 00:08:56 chongo Exp $
* @(#) $Revision: 29.22 $
* @(#) $Id: config.c,v 29.22 2006/06/25 22:05:38 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
*
* Under source code control: 1991/07/20 00:21:56
@@ -98,6 +98,8 @@ NAMETYPE configs[] = {
{"allow_custom", CONFIG_ALLOW_CUSTOM},
{"version", CONFIG_VERSION},
{"baseb", CONFIG_BASEB},
{"redecl_warn", CONFIG_REDECL_WARN},
{"dupvar_warn", CONFIG_DUPVAR_WARN},
{NULL, 0}
};
@@ -162,6 +164,8 @@ CONFIG oldstd = { /* backward compatible standard configuration */
&allow_custom, /* *TRUE=> custom functions are enabled */
NULL, /* version */
BASEB, /* base for calculations */
TRUE, /* warn when redeclaring */
TRUE, /* warn when variable names collide */
};
CONFIG newstd = { /* new non-backward compatible configuration */
MODE_INITIAL, /* current output mode */
@@ -220,6 +224,8 @@ CONFIG newstd = { /* new non-backward compatible configuration */
&allow_custom, /* *TRUE=> custom functions are enabled */
NULL, /* version */
BASEB, /* base for calculations */
TRUE, /* warn when redeclaring */
TRUE, /* warn when variable names collide */
};
CONFIG *conf = NULL; /* loaded in at startup - current configuration */
@@ -408,7 +414,8 @@ lookup_name(NAMETYPE *set, long val)
/*
* Check whether VALUE at vp is a LEN (32-bit signed integer) and if so,
* copy that integer to lp.
* Return: 1, 2, 0, or -1 XXX
*
* Return: 1 ==> not an integer, 2 ==> int > 2^31, 0 ==> OK, -1 ==> error
*/
static int
@@ -906,6 +913,34 @@ setconfig(int type, VALUE *vp)
math_error("The baseb config parameter is read-only");
/*NOTREACHED*/
case CONFIG_REDECL_WARN:
if (vp->v_type == V_NUM) {
q = vp->v_num;
conf->redecl_warn = !qiszero(q);
} else if (vp->v_type == V_STR) {
temp = lookup_long(truth, vp->v_str->s_str);
if (temp < 0) {
math_error("Illegal truth value for redecl_warn");
/*NOTREACHED*/
}
conf->redecl_warn = (int)temp;
}
break;
case CONFIG_DUPVAR_WARN:
if (vp->v_type == V_NUM) {
q = vp->v_num;
conf->dupvar_warn = !qiszero(q);
} else if (vp->v_type == V_STR) {
temp = lookup_long(truth, vp->v_str->s_str);
if (temp < 0) {
math_error("Illegal truth value for dupvar_warn");
/*NOTREACHED*/
}
conf->dupvar_warn = (int)temp;
}
break;
default:
math_error("Setting illegal config parameter");
/*NOTREACHED*/
@@ -1287,6 +1322,14 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
i = BASEB;
break;
case CONFIG_REDECL_WARN:
i = (cfg->redecl_warn ? 1 : 0);
break;
case CONFIG_DUPVAR_WARN:
i = (cfg->dupvar_warn ? 1 : 0);
break;
default:
math_error("Getting illegal CONFIG element");
/*NOTREACHED*/

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.18 $
* @(#) $Id: config.h,v 29.18 2006/06/06 07:17:02 chongo Exp $
* @(#) $Revision: 29.20 $
* @(#) $Id: config.h,v 29.20 2006/06/25 22:05:38 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.h,v $
*
* Under source code control: 1995/11/01 22:20:17
@@ -95,6 +95,8 @@
#define CONFIG_COMPILE_CUSTOM 41
#define CONFIG_ALLOW_CUSTOM 42
#define CONFIG_BASEB 43
#define CONFIG_REDECL_WARN 44
#define CONFIG_DUPVAR_WARN 45
/*
@@ -151,8 +153,8 @@ struct config {
BOOL blkverbose; /* TRUE => print all lines if a block */
int blkbase; /* block output base */
int blkfmt; /* block output style */
long calc_debug; /* internal debug, see CALC_DEBUG_XXX below */
long resource_debug; /* resource debug, see RSCDBG_XXX below */
long calc_debug; /* internal debug, see CALC_DEBUG_XYZ below */
long resource_debug; /* resource debug, see RSCDBG_XYZ below */
long user_debug; /* user defined debug value: 0 default */
BOOL verbose_quit; /* TRUE => print Quit or abort executed msg */
int ctrl_d; /* see CTRL_D_xyz below */
@@ -164,6 +166,8 @@ struct config {
BOOL *allow_custom; /* ptr to if custom functions are allowed */
char *version; /* calc version string */
int baseb; /* base for calculations */
BOOL redecl_warn; /* TRUE => warn of redeclating variables */
BOOL dupvar_warn; /* TRUE => warn of var name collisions */
};
typedef struct config CONFIG;

View File

@@ -1,7 +1,7 @@
#
# cscript - makefile for calc shell script files
#
# Copyright (C) 1999 Landon Curt Noll
# Copyright (C) 1999-2006 Landon Curt Noll
#
# Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License
@@ -17,8 +17,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
#
# @(#) $Revision: 29.23 $
# @(#) $Id: Makefile,v 29.23 2003/01/14 01:58:18 chongo Exp $
# @(#) $Revision: 29.27 $
# @(#) $Id: Makefile,v 29.27 2006/09/18 07:04:42 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/Makefile,v $
#
# Under source code control: 1999/11/29 11:10:26
@@ -62,9 +62,9 @@ INCDIR= /usr/include
# ${LIBDIR} where calc link library (*.a) files are installed
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
#
# NOTE: The install rule prepends installation paths with $T, which
# by default is empty. If $T is non-empty, then installation
# locations will be relative to the $T directory.
# NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the ${T} directory.
#
# For DJGPP, select:
#
@@ -99,9 +99,9 @@ CALC_SHAREDIR= /usr/share/calc
# ${CUSTOMINCPDIR} where custom .h files are installed
# ${SCRIPTDIR} where calc shell scripts are installed
#
# NOTE: The install rule prepends installation paths with $T, which
# by default is empty. If $T is non-empty, then installation
# locations will be relative to the $T directory.
# NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the ${T} directory.
#
# If in doubt, set:
#
@@ -121,8 +121,8 @@ SCRIPTDIR= ${BINDIR}/cscript
# T - top level directory under which calc will be installed
#
# The calc install is performed under $T, the calc build is
# performed under /. The purpose for $T is to allow someone
# The calc install is performed under ${T}, the calc build is
# performed under /. The purpose for ${T} is to allow someone
# to install calc somewhere other than into the system area.
#
# For example, if:
@@ -142,10 +142,10 @@ SCRIPTDIR= ${BINDIR}/cscript
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
# ... etc ... /var/tmp/testing/...
#
# If $T is empty, calc is installed under /, which is the same
# top of tree for which it was built. If $T is non-empty, then
# calc is installed under $T, as if one had to chroot under
# $T for calc to operate.
# If ${T} is empty, calc is installed under /, which is the same
# top of tree for which it was built. If ${T} is non-empty, then
# calc is installed under ${T}, as if one had to chroot under
# ${T} for calc to operate.
#
# If in doubt, use T=
#
@@ -166,6 +166,14 @@ SED= sed
SORT= sort
FMT= fmt
CMP= cmp
MKDIR= mkdir
RMDIR= rmdir
RM= rm
TOUCH= touch
MV= mv
CP= cp
CO= co
TRUE= true
# The ${SCRIPT} list is the list of calc shell script files (without the .calc
# extension) which will be installed.
@@ -199,7 +207,7 @@ CALCLIBLIST=
# complete list of targets
#
# NOTE: This list MUST be co-ordinated with the ${CSCRIPT_TARGETS} variable
# NOTE: This list MUST be coordinated with the ${CSCRIPT_TARGETS} variable
# in the upper level ../Makefile
#
CSCRIPT_TARGETS= ${SCRIPT}
@@ -215,8 +223,8 @@ all: ${TARGETS} .all
# a non-empty else clause for every if condition. *sigh*
#
.all:
rm -f .all
touch .all
${RM} -f .all
${TOUCH} .all
##
#
@@ -229,21 +237,21 @@ all: ${TARGETS} .all
##
distlist: ${DISTLIST}
${Q}for i in ${DISTLIST} /dev/null; do \
${Q} for i in ${DISTLIST} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo cscript/$$i; \
fi; \
done | LANG=C ${SORT}
distdir:
${Q}echo cscript
${Q} echo cscript
calcliblist:
# These next rule help me form the ${DETAIL_HELP} makefile variables above.
#
detaillist:
${Q}-(echo "xxxxxxx"; \
${Q} -(echo "xxxxxxx"; \
for i in ${SCRIPT} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
if [ ! -f RCS/$$i.calc,v ]; then \
@@ -255,9 +263,9 @@ detaillist:
done | LANG=C ${SORT}) | ${FMT} -70 | \
${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \
-e 's/$$/ \\/' -e '$$s/ \\$$//'
${Q}echo
${Q}-(echo "xxxxxxxxxxx"; \
for i in ${SCRIPT} /dev/null; do \
${Q} echo
${Q} -(echo "xxxxxxxxxxx"; \
for i in ${SCRIPT} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
if [ ! -f RCS/$$i.calc,v ]; then \
echo "WARNING: $$i.calc not under RCS control" 1>&2; \
@@ -282,46 +290,46 @@ detaillist:
##
depend:
${Q}if [ -f Makefile.bak ]; then \
echo "Makefile.bak exists, remove or move it out of the way"; \
exit 1; \
${Q} if [ -f Makefile.bak ]; then \
echo "Makefile.bak exists, remove or move it out of the way"; \
exit 1; \
else \
true; \
${TRUE}; \
fi
-${Q}rm -f makedep.out
${Q}echo forming cscript dependency list
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
-${Q} ${RM} -f makedep.out
${Q} echo forming cscript dependency list
${Q} echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
makedep.out
${Q}echo "" >> makedep.out
${Q}for i in ${SCRIPT} /dev/null; do \
${Q} echo "" >> makedep.out
${Q} for i in ${SCRIPT} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo "$$i: $$i.calc"; \
echo ' @rm -f $$@'; \
echo ' @$${RM} -f $$@'; \
echo ' @$${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \
echo ' @$${CHMOD} +x $$@'; \
fi; \
done >> makedep.out
${Q}echo sample dependency list formed
${Q}echo forming new cscript/Makefile
-${Q}rm -f Makefile.bak
${Q}mv Makefile Makefile.bak
${Q}${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile
${Q}echo "" >> Makefile
${Q}${SED} -n '3,$$p' makedep.out >> Makefile
-${Q}rm -f makedep.out
-${Q}if ${CMP} -s Makefile.bak Makefile; then \
echo 'sample Makefile was already up to date'; \
mv -f Makefile.bak Makefile; \
${Q} echo sample dependency list formed
${Q} echo forming new cscript/Makefile
-${Q} ${RM} -f Makefile.bak
${Q} ${MV} Makefile Makefile.bak
${Q} ${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile
${Q} echo "" >> Makefile
${Q} ${SED} -n '3,$$p' makedep.out >> Makefile
-${Q} ${RM} -f makedep.out
-${Q} if ${CMP} -s Makefile.bak Makefile; then \
echo 'sample Makefile was already up to date'; \
${MV} -f Makefile.bak Makefile; \
else \
rm -f Makefile.tmp; \
mv Makefile Makefile.tmp; \
if [ -d RCS ]; then \
co -l Makefile; \
fi; \
mv Makefile.tmp Makefile; \
if [ -d RCS ]; then \
echo new sample Makefile formed, you need to check it in; \
fi; \
${RM} -f Makefile.tmp; \
${MV} Makefile Makefile.tmp; \
if [ -d RCS ]; then \
${CO} -l Makefile; \
fi; \
${MV} Makefile.tmp Makefile; \
if [ -d RCS ]; then \
echo new sample Makefile formed, you need to check it in; \
fi; \
fi
##
@@ -331,7 +339,7 @@ depend:
##
echo_inst_files:
${Q}for i in ${SCRIPT} /dev/null; do \
${Q} for i in ${SCRIPT} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${SCRIPTDIR}/$$i; \
fi; \
@@ -344,82 +352,111 @@ echo_inst_files:
##
clean:
-rm -f makedep.out
-${RM} -f makedep.out
clobber:
-rm -f ${TARGETS}
-${RM} -f ${TARGETS}
# install everything
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
install: all
-${Q}if [ ! -d $T${BINDIR} ]; then \
echo mkdir $T${BINDIR}; \
mkdir $T${BINDIR}; \
if [ ! -d "$T${BINDIR}" ]; then \
echo mkdir -p "$T${BINDIR}"; \
mkdir -p "$T${BINDIR}"; \
-${Q} if [ ! -d ${T}${BINDIR} ]; then \
echo ${MKDIR} ${T}${BINDIR}; \
${MKDIR} ${T}${BINDIR}; \
if [ ! -d "${T}${BINDIR}" ]; then \
echo ${MKDIR} -p "${T}${BINDIR}"; \
${MKDIR} -p "${T}${BINDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${BINDIR}; \
${CHMOD} 0755 $T${BINDIR}; \
echo ${CHMOD} 0755 ${T}${BINDIR}; \
${CHMOD} 0755 ${T}${BINDIR}; \
else \
true; \
${TRUE}; \
fi
-${Q}if [ ! -d $T${SCRIPTDIR} ]; then \
echo mkdir $T${SCRIPTDIR}; \
mkdir $T${SCRIPTDIR}; \
if [ ! -d "$T${SCRIPTDIR}" ]; then \
echo mkdir -p "$T${SCRIPTDIR}"; \
mkdir -p "$T${SCRIPTDIR}"; \
-${Q} if [ ! -d ${T}${SCRIPTDIR} ]; then \
echo ${MKDIR} ${T}${SCRIPTDIR}; \
${MKDIR} ${T}${SCRIPTDIR}; \
if [ ! -d "${T}${SCRIPTDIR}" ]; then \
echo ${MKDIR} -p "${T}${SCRIPTDIR}"; \
${MKDIR} -p "${T}${SCRIPTDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${SCRIPTDIR}; \
${CHMOD} 0755 $T${SCRIPTDIR}; \
echo ${CHMOD} 0755 ${T}${SCRIPTDIR}; \
${CHMOD} 0755 ${T}${SCRIPTDIR}; \
else \
true; \
${TRUE}; \
fi
${Q}for i in ${SCRIPT} /dev/null; do \
${Q} for i in ${SCRIPT} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if ${CMP} -s $$i $T${SCRIPTDIR}/$$i; then \
true; \
if ${CMP} -s $$i ${T}${SCRIPTDIR}/$$i; then \
${TRUE}; \
else \
rm -f $T${SCRIPTDIR}/$$i.new; \
cp -f $$i $T${SCRIPTDIR}/$$i.new; \
${CHMOD} 0555 $T${SCRIPTDIR}/$$i.new; \
mv -f $T${SCRIPTDIR}/$$i.new $T${SCRIPTDIR}/$$i; \
echo "installed $T${SCRIPTDIR}/$$i"; \
${RM} -f ${T}${SCRIPTDIR}/$$i.new; \
${CP} -f $$i ${T}${SCRIPTDIR}/$$i.new; \
${CHMOD} 0555 ${T}${SCRIPTDIR}/$$i.new; \
${MV} -f ${T}${SCRIPTDIR}/$$i.new ${T}${SCRIPTDIR}/$$i; \
echo "installed ${T}${SCRIPTDIR}/$$i"; \
fi; \
done
# Try to remove everything that was installed
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
uninstall:
-${Q} for i in ${SCRIPT} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if [ -f "${T}${SCRIPTDIR}/$$i" ]; then \
${RM} -f "${T}${SCRIPTDIR}/$$i"; \
if [ -f "${T}${SCRIPTDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${SCRIPTDIR}/$$i"; \
else \
echo "uninstalled ${T}${SCRIPTDIR}/$$i"; \
fi; \
fi; \
done
-${Q} for i in ${SCRIPTDIR} ${BINDIR}; do \
if [ -d "${T}$$i" ]; then \
${RMDIR} "${T}$$i" 2>/dev/null; \
echo "cleaned up ${T}$$i"; \
fi; \
done
# DO NOT DELETE THIS LINE -- make depend depends on it.
4dsphere: 4dsphere.calc
@rm -f $@
@${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
fproduct: fproduct.calc
@rm -f $@
@${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
mersenne: mersenne.calc
@rm -f $@
@${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
piforever: piforever.calc
@rm -f $@
@${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
plus: plus.calc
@rm -f $@
@${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
powerterm: powerterm.calc
@rm -f $@
@${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
simple: simple.calc
@rm -f $@
@${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@
square: square.calc
@rm -f $@
@${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@

View File

@@ -2,7 +2,7 @@
#
# custom - makefile for calc custom routines
#
# Copyright (C) 1999,2004 Landon Curt Noll
# Copyright (C) 1999-2006 Landon Curt Noll
#
# Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License
@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
#
# @(#) $Revision: 29.24 $
# @(#) $Id: Makefile,v 29.24 2004/07/29 08:38:18 chongo Exp $
# @(#) $Revision: 29.28 $
# @(#) $Id: Makefile,v 29.28 2006/09/18 07:04:42 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/Makefile,v $
#
# Under source code control: 1997/03/09 02:28:54
@@ -114,9 +114,9 @@ INCDIR= /usr/include
# ${LIBDIR} where calc link library (*.a) files are installed
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
#
# NOTE: The install rule prepends installation paths with $T, which
# by default is empty. If $T is non-empty, then installation
# locations will be relative to the $T directory.
# NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the ${T} directory.
#
# For DJGPP, select:
#
@@ -151,9 +151,9 @@ CALC_SHAREDIR= /usr/share/calc
# ${CUSTOMINCPDIR} where custom .h files are installed
# ${SCRIPTDIR} where calc shell scripts are installed
#
# NOTE: The install rule prepends installation paths with $T, which
# by default is empty. If $T is non-empty, then installation
# locations will be relative to the $T directory.
# NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the ${T} directory.
#
# If in doubt, set:
#
@@ -173,8 +173,8 @@ SCRIPTDIR= ${BINDIR}/cscript
# T - top level directory under which calc will be installed
#
# The calc install is performed under $T, the calc build is
# performed under /. The purpose for $T is to allow someone
# The calc install is performed under ${T}, the calc build is
# performed under /. The purpose for ${T} is to allow someone
# to install calc somewhere other than into the system area.
#
# For example, if:
@@ -194,10 +194,10 @@ SCRIPTDIR= ${BINDIR}/cscript
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
# ... etc ... /var/tmp/testing/...
#
# If $T is empty, calc is installed under /, which is the same
# top of tree for which it was built. If $T is non-empty, then
# calc is installed under $T, as if one had to chroot under
# $T for calc to operate.
# If ${T} is empty, calc is installed under /, which is the same
# top of tree for which it was built. If ${T} is non-empty, then
# calc is installed under ${T}, as if one had to chroot under
# ${T} for calc to operate.
#
# If in doubt, use T=
#
@@ -402,6 +402,15 @@ MAKEDEPEND= makedepend
CHMOD= chmod
SORT= sort
CMP= cmp
AR= ar
RM= rm
TOUCH= touch
MKDIR= mkdir
RMDIR= rmdir
MV= mv
CP= cp
CO= co
TRUE= true
##
#
@@ -413,8 +422,8 @@ all: ${TARGETS} ${INSTALL_H_SRC} ${CUSTOM_CALC_FILES} \
${CUSTOM_HELP} ${MAKE_FILE} .all
libcustcalc.a: ${CUSTCALC_OBJ} ${MAKE_FILE} ../${MAKE_FILE}
-rm -f libcustcalc.a
ar qc libcustcalc.a ${CUSTCALC_OBJ}
-${RM} -f libcustcalc.a
${AR} qc libcustcalc.a ${CUSTCALC_OBJ}
${RANLIB} libcustcalc.a
##
@@ -435,8 +444,8 @@ c_sysinfo.o: c_sysinfo.c ${MAKE_FILE}
# to determine of we have done all
#
.all:
rm -f .all
touch .all
${RM} -f .all
${TOUCH} .all
##
#
@@ -452,17 +461,17 @@ c_sysinfo.o: c_sysinfo.c ${MAKE_FILE}
##
distlist: ${DISTLIST}
${Q}for i in ${DISTLIST} /dev/null; do \
${Q} for i in ${DISTLIST} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo custom/$$i; \
fi; \
done
distdir:
${Q}echo custom
${Q} echo custom
calcliblist: ${CALCLIBLIST}
${Q}for i in ${CALCLIBLIST} /dev/null; do \
${Q} for i in ${CALCLIBLIST} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo custom/$$i; \
fi; \
@@ -481,81 +490,81 @@ calcliblist: ${CALCLIBLIST}
##
depend:
${Q}if [ -f Makefile.bak ]; then \
echo "Makefile.bak exists, remove or move it out of the way"; \
exit 1; \
${Q} if [ -f Makefile.bak ]; then \
echo "Makefile.bak exists, remove or move it out of the way"; \
exit 1; \
else \
true; \
${TRUE}; \
fi
${Q}echo forming custom/skel
-${Q}rm -rf skel
${Q}mkdir skel
${Q}mkdir skel/custom
-${Q}for i in ${C_SRC} /dev/null; do \
${Q} echo forming custom/skel
-${Q} ${RM} -rf skel
${Q} ${MKDIR} skel
${Q} ${MKDIR} skel/custom
-${Q} for i in ${C_SRC} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
${SED} -n '/^#[ ]*include[ ]*"/p' \
"$$i" > "skel/custom/$$i"; \
fi; \
done
-${Q}for i in ${H_SRC} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
echo "#if !defined($$tag)" > "skel/custom/$$i"; \
echo "#define $$tag" >> "skel/custom/$$i"; \
${SED} -n '/^#[ ]*include[ ]*"/p' "$$i" \
>> "skel/custom/$$i"; \
echo '#endif /* '"$$tag"' */' >> "skel/custom/$$i"; \
-${Q} for i in ${H_SRC} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
echo "#if !defined($$tag)" > "skel/custom/$$i"; \
echo "#define $$tag" >> "skel/custom/$$i"; \
${SED} -n '/^#[ ]*include[ ]*"/p' "$$i" \
>> "skel/custom/$$i"; \
echo '#endif /* '"$$tag"' */' >> "skel/custom/$$i"; \
done
${Q}(cd ..; ${MAKE} hsrc)
${Q}for i in `cd ..; ${MAKE} h_list 2>&1 | \
${SED} -e '/Entering directory/d' \
-e '/Nothing to be done/d' \
-e '/Leaving directory/d'` /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
echo "#if !defined($$tag)" > "skel/$$i"; \
echo "#define $$tag" >> "skel/$$i"; \
${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
>> "skel/$$i"; \
echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
${Q} (cd ..; ${MAKE} hsrc)
${Q} for i in `cd ..; ${MAKE} h_list 2>&1 | \
${SED} -e '/Entering directory/d' \
-e '/Nothing to be done/d' \
-e '/Leaving directory/d'` /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
echo "#if !defined($$tag)" > "skel/$$i"; \
echo "#define $$tag" >> "skel/$$i"; \
${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
>> "skel/$$i"; \
echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
done
-${Q}rm -f skel/custom/makedep.out
${Q}echo custom/skel formed
${Q}echo forming custom dependency list
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
-${Q} ${RM} -f skel/custom/makedep.out
${Q} echo custom/skel formed
${Q} echo forming custom dependency list
${Q} echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
skel/custom/makedep.out
${Q}cd skel/custom; ${MAKEDEPEND} -w 1 -f makedep.out ${C_SRC}
-${Q}for i in ${C_SRC} /dev/null; do \
${Q} cd skel/custom; ${MAKEDEPEND} -w 1 -f makedep.out ${C_SRC}
-${Q} for i in ${C_SRC} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \
fi; \
done >> skel/custom/makedep.out
${Q}echo custom dependency list formed
${Q}echo forming new custom/Makefile
-${Q}rm -f Makefile.bak
${Q}mv Makefile Makefile.bak
${Q}${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile
${Q}echo "" >> Makefile
${Q}${SED} -n '3,$$p' skel/custom/makedep.out | \
${Q} echo custom dependency list formed
${Q} echo forming new custom/Makefile
-${Q} ${RM} -f Makefile.bak
${Q} ${MV} Makefile Makefile.bak
${Q} ${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile
${Q} echo "" >> Makefile
${Q} ${SED} -n '3,$$p' skel/custom/makedep.out | \
LANG=C ${SORT} -u >> Makefile
-${Q}rm -rf skel
-${Q}if ${CMP} -s Makefile.bak Makefile; then \
echo 'custom Makefile was already up to date'; \
mv -f Makefile.bak Makefile; \
-${Q} ${RM} -rf skel
-${Q} if ${CMP} -s Makefile.bak Makefile; then \
echo 'custom Makefile was already up to date'; \
${MV} -f Makefile.bak Makefile; \
else \
rm -f Makefile.tmp; \
mv Makefile Makefile.tmp; \
if [ -d RCS ]; then \
co -l Makefile; \
fi ;\
mv Makefile.tmp Makefile; \
if [ -d RCS ]; then \
echo 'new custom Makefile formed -- you need to check it in'; \
fi; \
${RM} -f Makefile.tmp; \
${MV} Makefile Makefile.tmp; \
if [ -d RCS ]; then \
${CO} -l Makefile; \
fi ;\
${MV} Makefile.tmp Makefile; \
if [ -d RCS ]; then \
echo 'new custom Makefile formed -- you need to check it in'; \
fi; \
fi
##
@@ -565,22 +574,22 @@ depend:
##
echo_inst_files:
${Q}for i in ${INSTALL_H_SRC} /dev/null; do \
${Q} for i in ${INSTALL_H_SRC} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${CUSTOMINCDIR}/$$i; \
fi; \
done
${Q}for i in ${CUSTOM_HELP} /dev/null; do \
${Q} for i in ${CUSTOM_HELP} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${CUSTOMHELPDIR}/$$i; \
fi; \
done
${Q}for i in ${CUSTOM_CALC_FILES} /dev/null; do \
${Q} for i in ${CUSTOM_CALC_FILES} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${CUSTOMCALDIR}/$$i; \
fi; \
done
${Q}for i in ${CALC_LIBCUSTOM} /dev/null; do \
${Q} for i in ${CALC_LIBCUSTOM} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${CUSTOMCALDIR}/$$i; \
fi; \
@@ -593,154 +602,217 @@ echo_inst_files:
##
clean:
-rm -f ${CUSTCALC_OBJ}
-${RM} -f ${CUSTCALC_OBJ}
clobber:
-rm -f ${TARGETS}
rm -f .all Makefile.tmp Makefile.bak
-${RM} -f ${TARGETS}
${RM} -f .all Makefile.tmp Makefile.bak
# install everything
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
install: all
-${Q}if [ ! -d $T${INCDIR} ]; then \
echo mkdir $T${INCDIR}; \
mkdir $T${INCDIR}; \
if [ ! -d "$T${INCDIR}" ]; then \
echo mkdir -p "$T${INCDIR}"; \
mkdir -p "$T${INCDIR}"; \
-${Q} if [ ! -d ${T}${INCDIR} ]; then \
echo ${MKDIR} ${T}${INCDIR}; \
${MKDIR} ${T}${INCDIR}; \
if [ ! -d "${T}${INCDIR}" ]; then \
echo ${MKDIR} -p "${T}${INCDIR}"; \
${MKDIR} -p "${T}${INCDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${INCDIR}; \
${CHMOD} 0755 $T${INCDIR}; \
echo ${CHMOD} 0755 ${T}${INCDIR}; \
${CHMOD} 0755 ${T}${INCDIR}; \
else \
true; \
${TRUE}; \
fi
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \
echo mkdir $T${CALC_SHAREDIR}; \
mkdir $T${CALC_SHAREDIR}; \
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \
echo mkdir -p "$T${CALC_SHAREDIR}"; \
mkdir -p "$T${CALC_SHAREDIR}"; \
-${Q} if [ ! -d ${T}${CALC_SHAREDIR} ]; then \
echo ${MKDIR} ${T}${CALC_SHAREDIR}; \
${MKDIR} ${T}${CALC_SHAREDIR}; \
if [ ! -d "${T}${CALC_SHAREDIR}" ]; then \
echo ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \
${CHMOD} 0755 $T${CALC_SHAREDIR}; \
echo ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
else \
true; \
${TRUE}; \
fi
-${Q}if [ ! -d $T${CALC_INCDIR} ]; then \
echo mkdir $T${CALC_INCDIR}; \
mkdir $T${CALC_INCDIR}; \
if [ ! -d "$T${CALC_INCDIR}" ]; then \
echo mkdir -p "$T${CALC_INCDIR}"; \
mkdir -p "$T${CALC_INCDIR}"; \
-${Q} if [ ! -d ${T}${CALC_INCDIR} ]; then \
echo ${MKDIR} ${T}${CALC_INCDIR}; \
${MKDIR} ${T}${CALC_INCDIR}; \
if [ ! -d "${T}${CALC_INCDIR}" ]; then \
echo ${MKDIR} -p "${T}${CALC_INCDIR}"; \
${MKDIR} -p "${T}${CALC_INCDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${CALC_INCDIR}; \
${CHMOD} 0755 $T${CALC_INCDIR}; \
echo ${CHMOD} 0755 ${T}${CALC_INCDIR}; \
${CHMOD} 0755 ${T}${CALC_INCDIR}; \
else \
true; \
${TRUE}; \
fi
-${Q}if [ ! -d $T${HELPDIR} ]; then \
echo mkdir $T${HELPDIR}; \
mkdir $T${HELPDIR}; \
if [ ! -d "$T${HELPDIR}" ]; then \
echo mkdir -p "$T${HELPDIR}"; \
mkdir -p "$T${HELPDIR}"; \
-${Q} if [ ! -d ${T}${HELPDIR} ]; then \
echo ${MKDIR} ${T}${HELPDIR}; \
${MKDIR} ${T}${HELPDIR}; \
if [ ! -d "${T}${HELPDIR}" ]; then \
echo ${MKDIR} -p "${T}${HELPDIR}"; \
${MKDIR} -p "${T}${HELPDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${HELPDIR}; \
${CHMOD} 0755 $T${HELPDIR}; \
echo ${CHMOD} 0755 ${T}${HELPDIR}; \
${CHMOD} 0755 ${T}${HELPDIR}; \
else \
true; \
${TRUE}; \
fi
-${Q}if [ ! -d $T${CUSTOMCALDIR} ]; then \
echo mkdir $T${CUSTOMCALDIR}; \
mkdir $T${CUSTOMCALDIR}; \
if [ ! -d "$T${CUSTOMCALDIR}" ]; then \
echo mkdir -p "$T${CUSTOMCALDIR}"; \
mkdir -p "$T${CUSTOMCALDIR}"; \
-${Q} if [ ! -d ${T}${CUSTOMCALDIR} ]; then \
echo ${MKDIR} ${T}${CUSTOMCALDIR}; \
${MKDIR} ${T}${CUSTOMCALDIR}; \
if [ ! -d "${T}${CUSTOMCALDIR}" ]; then \
echo ${MKDIR} -p "${T}${CUSTOMCALDIR}"; \
${MKDIR} -p "${T}${CUSTOMCALDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${CUSTOMCALDIR}; \
${CHMOD} 0755 $T${CUSTOMCALDIR}; \
echo ${CHMOD} 0755 ${T}${CUSTOMCALDIR}; \
${CHMOD} 0755 ${T}${CUSTOMCALDIR}; \
else \
true; \
${TRUE}; \
fi
-${Q}if [ ! -d $T${CUSTOMHELPDIR} ]; then \
echo mkdir $T${CUSTOMHELPDIR}; \
mkdir $T${CUSTOMHELPDIR}; \
if [ ! -d "$T${CUSTOMHELPDIR}" ]; then \
echo mkdir -p "$T${CUSTOMHELPDIR}"; \
mkdir -p "$T${CUSTOMHELPDIR}"; \
-${Q} if [ ! -d ${T}${CUSTOMHELPDIR} ]; then \
echo ${MKDIR} ${T}${CUSTOMHELPDIR}; \
${MKDIR} ${T}${CUSTOMHELPDIR}; \
if [ ! -d "${T}${CUSTOMHELPDIR}" ]; then \
echo ${MKDIR} -p "${T}${CUSTOMHELPDIR}"; \
${MKDIR} -p "${T}${CUSTOMHELPDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${CUSTOMHELPDIR}; \
${CHMOD} 0755 $T${CUSTOMHELPDIR}; \
echo ${CHMOD} 0755 ${T}${CUSTOMHELPDIR}; \
${CHMOD} 0755 ${T}${CUSTOMHELPDIR}; \
else \
true; \
${TRUE}; \
fi
-${Q}if [ ! -d $T${CUSTOMINCDIR} ]; then \
echo mkdir $T${CUSTOMINCDIR}; \
mkdir $T${CUSTOMINCDIR}; \
if [ ! -d "$T${CUSTOMINCDIR}" ]; then \
echo mkdir -p "$T${CUSTOMINCDIR}"; \
mkdir -p "$T${CUSTOMINCDIR}"; \
-${Q} if [ ! -d ${T}${CUSTOMINCDIR} ]; then \
echo ${MKDIR} ${T}${CUSTOMINCDIR}; \
${MKDIR} ${T}${CUSTOMINCDIR}; \
if [ ! -d "${T}${CUSTOMINCDIR}" ]; then \
echo ${MKDIR} -p "${T}${CUSTOMINCDIR}"; \
${MKDIR} -p "${T}${CUSTOMINCDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${CUSTOMINCDIR}; \
${CHMOD} 0755 $T${CUSTOMINCDIR}; \
echo ${CHMOD} 0755 ${T}${CUSTOMINCDIR}; \
${CHMOD} 0755 ${T}${CUSTOMINCDIR}; \
else \
true; \
${TRUE}; \
fi
-${Q}for i in ${INSTALL_H_SRC} /dev/null; do \
-${Q} for i in ${INSTALL_H_SRC} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if ${CMP} -s tmp $T${CUSTOMINCDIR}/$$i; then \
true; \
if ${CMP} -s "$$i" ${T}${CUSTOMINCDIR}/$$i; then \
${TRUE}; \
else \
rm -f $T${CUSTOMINCDIR}/$$i.new; \
cp -f $$i $T${CUSTOMINCDIR}/$$i.new; \
${CHMOD} 0444 $T${CUSTOMINCDIR}/$$i.new; \
mv -f $T${CUSTOMINCDIR}/$$i.new $T${CUSTOMINCDIR}/$$i; \
echo "installed $T${CUSTOMINCDIR}/$$i"; \
${RM} -f ${T}${CUSTOMINCDIR}/$$i.new; \
${CP} -f $$i ${T}${CUSTOMINCDIR}/$$i.new; \
${CHMOD} 0444 ${T}${CUSTOMINCDIR}/$$i.new; \
${MV} -f ${T}${CUSTOMINCDIR}/$$i.new ${T}${CUSTOMINCDIR}/$$i; \
echo "installed ${T}${CUSTOMINCDIR}/$$i"; \
fi; \
done
-${Q}rm -f tmp
-${Q}for i in ${CUSTOM_CALC_FILES} /dev/null; do \
-${Q} for i in ${CUSTOM_CALC_FILES} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if ${CMP} -s $$i $T${CUSTOMCALDIR}/$$i; then \
true; \
if ${CMP} -s $$i ${T}${CUSTOMCALDIR}/$$i; then \
${TRUE}; \
else \
rm -f $T${CUSTOMCALDIR}/$$i.new; \
cp -f $$i $T${CUSTOMCALDIR}/$$i.new; \
${CHMOD} 0444 $T${CUSTOMCALDIR}/$$i.new; \
mv -f $T${CUSTOMCALDIR}/$$i.new $T${CUSTOMCALDIR}/$$i; \
echo "installed $T${CUSTOMCALDIR}/$$i"; \
${RM} -f ${T}${CUSTOMCALDIR}/$$i.new; \
${CP} -f $$i ${T}${CUSTOMCALDIR}/$$i.new; \
${CHMOD} 0444 ${T}${CUSTOMCALDIR}/$$i.new; \
${MV} -f ${T}${CUSTOMCALDIR}/$$i.new ${T}${CUSTOMCALDIR}/$$i; \
echo "installed ${T}${CUSTOMCALDIR}/$$i"; \
fi; \
done
-${Q}for i in ${CUSTOM_HELP} /dev/null; do \
-${Q} for i in ${CUSTOM_HELP} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if ${CMP} -s $$i $T${CUSTOMHELPDIR}/$$i; then \
true; \
if ${CMP} -s $$i ${T}${CUSTOMHELPDIR}/$$i; then \
${TRUE}; \
else \
rm -f $T${CUSTOMHELPDIR}/$$i.new; \
cp -f $$i $T${CUSTOMHELPDIR}/$$i.new; \
${CHMOD} 0444 $T${CUSTOMHELPDIR}/$$i.new; \
mv -f $T${CUSTOMHELPDIR}/$$i.new $T${CUSTOMHELPDIR}/$$i; \
echo "installed $T${CUSTOMHELPDIR}/$$i"; \
${RM} -f ${T}${CUSTOMHELPDIR}/$$i.new; \
${CP} -f $$i ${T}${CUSTOMHELPDIR}/$$i.new; \
${CHMOD} 0444 ${T}${CUSTOMHELPDIR}/$$i.new; \
${MV} -f ${T}${CUSTOMHELPDIR}/$$i.new ${T}${CUSTOMHELPDIR}/$$i; \
echo "installed ${T}${CUSTOMHELPDIR}/$$i"; \
fi; \
done
-${Q}if [ ! -z ${ALLOW_CUSTOM} ]; then \
if ${CMP} -s libcustcalc.a $T${CUSTOMCALDIR}/libcustcalc.a; then \
true; \
-${Q} if [ ! -z ${ALLOW_CUSTOM} ]; then \
if ${CMP} -s libcustcalc.a ${T}${CUSTOMCALDIR}/libcustcalc.a; then \
${TRUE}; \
else \
rm -f $T${CUSTOMCALDIR}/libcustcalc.a.new; \
cp -f libcustcalc.a $T${CUSTOMCALDIR}/libcustcalc.a.new; \
${CHMOD} 0644 $T${CUSTOMCALDIR}/libcustcalc.a.new; \
mv -f $T${CUSTOMCALDIR}/libcustcalc.a.new \
$T${CUSTOMCALDIR}/libcustcalc.a; \
${RANLIB} $T${CUSTOMCALDIR}/libcustcalc.a; \
echo "installed $T${CUSTOMCALDIR}/libcustcalc.a"; \
${RM} -f ${T}${CUSTOMCALDIR}/libcustcalc.a.new; \
${CP} -f libcustcalc.a ${T}${CUSTOMCALDIR}/libcustcalc.a.new; \
${CHMOD} 0644 ${T}${CUSTOMCALDIR}/libcustcalc.a.new; \
${MV} -f ${T}${CUSTOMCALDIR}/libcustcalc.a.new \
${T}${CUSTOMCALDIR}/libcustcalc.a; \
${RANLIB} ${T}${CUSTOMCALDIR}/libcustcalc.a; \
echo "installed ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
fi; \
fi
# Try to remove everything that was installed
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
uninstall:
-${Q} if [ -f "${T}${CUSTOMCALDIR}/libcustcalc.a" ]; then \
${RM} -f "${T}${CUSTOMCALDIR}/libcustcalc.a"; \
if [ -f "${T}${CUSTOMCALDIR}/libcustcalc.a" ]; then \
echo "cannot uninstall ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
else \
echo "uninstalled ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
fi; \
fi
-${Q} for i in ${CUSTOM_HELP} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if [ -f "${T}${CUSTOMHELPDIR}/$$i" ]; then \
${RM} -f "${T}${CUSTOMHELPDIR}/$$i"; \
if [ -f "${T}${CUSTOMHELPDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CUSTOMHELPDIR}/$$i"; \
else \
echo "uninstalled ${T}${CUSTOMHELPDIR}/$$i"; \
fi; \
fi; \
done
-${Q} for i in ${CUSTOM_CALC_FILES} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if [ -f "${T}${CUSTOMCALDIR}/$$i" ]; then \
${RM} -f "${T}${CUSTOMCALDIR}/$$i"; \
if [ -f "${T}${CUSTOMCALDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CUSTOMCALDIR}/$$i"; \
else \
echo "uninstalled ${T}${CUSTOMCALDIR}/$$i"; \
fi; \
fi; \
done
-${Q} for i in ${INSTALL_H_SRC} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if [ -f "${T}${CUSTOMINCDIR}/$$i" ]; then \
${RM} -f "${T}${CUSTOMINCDIR}/$$i"; \
if [ -f "${T}${CUSTOMINCDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${CUSTOMINCDIR}/$$i"; \
else \
echo "uninstalled ${T}${CUSTOMINCDIR}/$$i"; \
fi; \
fi; \
done
-${Q} for i in ${CUSTOMINCDIR} ${CUSTOMHELPDIR} ${CUSTOMCALDIR} \
${HELPDIR} ${CALC_INCDIR} ${CALC_SHAREDIR} ${INCDIR}; do \
if [ -d "${T}$$i" ]; then \
${RMDIR} "${T}$$i" 2>/dev/null; \
echo "cleaned up ${T}$$i"; \
fi; \
done
##
#
# make depend stuff

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.7 $
* @(#) $Id: c_argv.c,v 29.7 2006/05/22 19:04:45 chongo Exp $
* @(#) $Revision: 29.8 $
* @(#) $Id: c_argv.c,v 29.8 2006/06/25 22:06:23 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_argv.c,v $
*
* Under source code control: 1997/03/09 20:27:37
@@ -123,12 +123,9 @@ c_argv(char UNUSED *name, int count, VALUE **vals)
case V_BLOCK: /* memory block */
type = "octet_block";
break;
#if 0
/* XXX - V_OCTET is subject to change */
case V_OCTET: /* octet (unsigned char) */
type = "octet";
break;
#endif
default:
type = "unknown";
break;

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.3 $
* @(#) $Id: c_pmodm127.c,v 29.3 2004/07/29 09:48:31 chongo Exp $
* @(#) $Revision: 29.5 $
* @(#) $Id: c_pmodm127.c,v 29.5 2006/06/25 22:08:42 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_pmodm127.c,v $
*
* Under source code control: 2004/07/28 22:12:25
@@ -156,7 +156,11 @@ c_pmodm127(char UNUSED *name, int UNUSED count, VALUE **vals)
#else
zsquare(result.v_num->num, &temp); /* square */
#endif
/* XXX - we could manually shift to speed up a tiny bit */
/*
* We could manually shift here, but this would o speed
* up the operation only a very tiny bit at the expense
* of a bunch of special code.
*/
zfree(result.v_num->num);
zshift(temp, 1, &result.v_num->num); /* times 2 */
zfree(temp);

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.11 $
* @(#) $Id: c_sysinfo.c,v 29.11 2006/05/22 19:04:45 chongo Exp $
* @(#) $Revision: 29.12 $
* @(#) $Id: c_sysinfo.c,v 29.12 2006/09/18 06:28:47 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_sysinfo.c,v $
*
* Under source code control: 1997/03/09 23:14:40
@@ -85,7 +85,6 @@ static struct infoname sys_info[] = {
{"DEFAULTSHELL", "default shell to use", DEFAULTSHELL, (FULL)0},
{"DEV_BITS", "device number size in bits", NULL, (FULL)DEV_BITS},
{"DISPLAY_DEFAULT", "default digits for float display", NULL, (FULL)DISPLAY_DEFAULT},
{"ECHO_PROG", "where the echo command is located", ECHO_PROG, (FULL)0},
{"EPSILONPREC_DEFAULT", "2^-EPSILON_DEFAULT <= EPSILON_DEFAULT", NULL, (FULL)EPSILONPREC_DEFAULT},
{"EPSILON_DEFAULT", "allowed error for float calculations", EPSILON_DEFAULT, (FULL)0},
{"ERRMAX", "default errmax value", NULL, (FULL)ERRMAX},

38
file.c
View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.15 $
* @(#) $Id: file.c,v 29.15 2006/05/22 19:04:45 chongo Exp $
* @(#) $Revision: 29.16 $
* @(#) $Id: file.c,v 29.16 2006/08/20 15:01:30 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.c,v $
*
* Under source code control: 1991/07/20 00:21:56
@@ -746,10 +746,10 @@ flushall(void)
* given:
* id file to read from
* flags read flags (see above)
* retptr returned pointer to string
* retstr returned pointer to string
*/
int
readid(FILEID id, int flags, char **retptr)
readid(FILEID id, int flags, STRING **retstr)
{
FILEIO *fiop; /* file structure */
FILE *fp;
@@ -761,6 +761,7 @@ readid(FILEID id, int flags, char **retptr)
int c;
BOOL nlstop, nullstop, wsstop, rmstop, done;
FILEPOS fpos;
STRING *newstr;
totlen = 0;
str = NULL;
@@ -831,7 +832,10 @@ readid(FILEID id, int flags, char **retptr)
if ((nullstop && c == '\0') && !rmstop)
str[totlen - 1] = '\0';
str[totlen] = '\0';
*retptr = str;
newstr = stralloc();
newstr->s_len = totlen;
newstr->s_str = str;
*retstr = newstr;
return 0;
}
@@ -895,7 +899,7 @@ printid(FILEID id, int flags)
math_chr('"');
return 0;
}
math_fmt("FILE %d \"%s\" (%s, ", id, fiop->name, fiop->mode);
math_fmt("FILE %d \"%s\" (%s", id, fiop->name, fiop->mode);
/*
* print file position
@@ -904,11 +908,13 @@ printid(FILEID id, int flags)
fp = fiop->fp;
if (get_open_pos(fp, &pos) < 0) {
math_str("Error while determining file position!)");
if (fileno(fp) > 2)
math_str("Error while determining file position!");
math_chr(')');
return 0;
}
math_str("pos ");
math_str(", pos ");
zprintval(pos, 0, 0);
zfree(pos);
@@ -1233,10 +1239,13 @@ idungetc(FILEID id, int ch)
* str string to write
*/
int
idfputs(FILEID id, char *str)
idfputs(FILEID id, STRING *str)
{
FILEIO *fiop;
FILEPOS fpos;
FILE *fp;
char *c;
long len;
/* get the file info pointer */
fiop = findid(id, TRUE);
@@ -1251,14 +1260,13 @@ idfputs(FILEID id, char *str)
fiop->action = 'w';
/* set output to file */
math_setfp(fiop->fp);
fp = fiop->fp;
len = str->s_len;
c = str->s_str;
/* write the string */
math_str(str);
while (len-- > 0)
fputc(*c++, fp);
/* restore output to stdout */
math_setfp(stdout);
return 0;
}

239
func.c
View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.26 $
* @(#) $Id: func.c,v 29.26 2006/06/11 00:08:56 chongo Exp $
* @(#) $Revision: 29.30 $
* @(#) $Id: func.c,v 29.30 2006/08/20 15:01:30 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/func.c,v $
*
* Under source code control: 1990/02/15 01:48:15
@@ -357,6 +357,24 @@ f_str(VALUE *vp)
}
static VALUE
f_estr(VALUE *vp)
{
VALUE result;
char *cp;
/* initialize result */
result.v_type = V_STR;
result.v_subtype = V_NOSUBTYPE;
math_divertio();
printestr(vp);
cp = math_getdivertedio();
result.v_str = makestring(cp);
return result;
}
static VALUE
f_name(VALUE *vp)
{
@@ -1694,14 +1712,13 @@ sumlistitems(LIST *lp)
NULL_VALUE, NULL_VALUE);
break;
default:
copyvalue(vp, &term);
addvalue(&sum, vp, &tmp);
freevalue(&sum);
if (tmp.v_type < 0)
return tmp;
sum = tmp;
continue;
}
if (sum.v_type == V_NULL) {
sum = term;
continue;
}
if (term.v_type == V_NULL)
continue;
addvalue(&sum, &term, &tmp);
freevalue(&sum);
freevalue(&term);
@@ -1728,7 +1745,6 @@ f_sum(int count, VALUE **vals)
sum.v_subtype = V_NOSUBTYPE;
term.v_type = V_NULL;
term.v_subtype = V_NOSUBTYPE;
while (count-- > 0) {
vp = *vals++;
switch(vp->v_type) {
@@ -1740,24 +1756,19 @@ f_sum(int count, VALUE **vals)
NULL_VALUE, NULL_VALUE);
break;
default:
copyvalue(vp, &term);
}
if (sum.v_type == V_NULL) {
sum = term;
continue;
}
if (term.v_type == V_NULL)
continue;
if (term.v_type < 0) {
freevalue(&sum);
return term;
addvalue(&sum, vp, &tmp);
freevalue(&sum);
if (tmp.v_type < 0)
return tmp;
sum = tmp;
continue;
}
addvalue(&sum, &term, &tmp);
freevalue(&term);
freevalue(&sum);
sum = tmp;
if (sum.v_type < 0)
return sum;
break;
}
return sum;
}
@@ -1904,26 +1915,70 @@ f_hnrmod(NUMBER *val1, NUMBER *val2, NUMBER *val3, NUMBER *val4)
return res;
}
VALUE
ssqlistitems(LIST *lp)
{
LISTELEM *ep;
VALUE *vp;
VALUE term;
VALUE tmp;
VALUE sum;
/* initialize VALUEs */
term.v_type = V_NULL;
term.v_subtype = V_NOSUBTYPE;
tmp.v_type = V_NULL;
tmp.v_subtype = V_NOSUBTYPE;
sum.v_type = V_NULL;
sum.v_subtype = V_NOSUBTYPE;
for (ep = lp->l_first; ep; ep = ep->e_next) {
vp = &ep->e_value;
if (vp->v_type == V_LIST) {
term = ssqlistitems(vp->v_list);
} else {
squarevalue(vp, &term);
}
addvalue(&sum, &term, &tmp);
freevalue(&sum);
freevalue(&term);
sum = tmp;
if (sum.v_type < 0)
break;
}
return sum;
}
static VALUE
f_ssq(int count, VALUE **vals)
{
VALUE result, tmp1, tmp2;
VALUE tmp;
VALUE sum;
VALUE term;
VALUE *vp;
/* initialize VALUEs */
result.v_subtype = V_NOSUBTYPE;
tmp1.v_subtype = V_NOSUBTYPE;
tmp2.v_subtype = V_NOSUBTYPE;
squarevalue(*vals++, &result);
while (--count > 0) {
squarevalue(*vals++, &tmp1);
addvalue(&tmp1, &result, &tmp2);
freevalue(&tmp1);
freevalue(&result);
result = tmp2;
tmp.v_type = V_NULL;
tmp.v_subtype = V_NOSUBTYPE;
sum.v_type = V_NULL;
sum.v_subtype = V_NOSUBTYPE;
term.v_type = V_NULL;
term.v_subtype = V_NOSUBTYPE;
while (count-- > 0) {
vp = *vals++;
if (vp->v_type == V_LIST) {
term = ssqlistitems(vp->v_list);
} else {
squarevalue(vp, &term);
}
addvalue(&sum, &term, &tmp);
freevalue(&term);
freevalue(&sum);
sum = tmp;
if (sum.v_type < 0)
break;
}
return result;
return sum;
}
@@ -3521,6 +3576,67 @@ f_mod(int count, VALUE **vals)
return res;
}
static VALUE
f_quomod(int count, VALUE **vals)
{
VALUE *v1, *v2, *v3, *v4, *v5;
VALUE result;
long rnd;
BOOL res;
short s3, s4; /* to preserve subtypes of v3, v4 */
v1 = vals[0];
v2 = vals[1];
v3 = vals[2];
v4 = vals[3];
if (v3->v_type != V_ADDR || v4->v_type != V_ADDR ||
v3->v_addr == v4->v_addr)
return error_value(E_QUOMOD1);
if (count == 5) {
v5 = vals[4];
if (v5->v_type == V_ADDR)
v5 = v5->v_addr;
if (v5->v_type != V_NUM || qisfrac(v5->v_num) ||
qisneg(v5->v_num) || zge31b(v5->v_num->num))
return error_value(E_QUOMOD2);
rnd = qtoi(v5->v_num);
} else
rnd = conf->quomod;
if (v1->v_type == V_ADDR)
v1 = v1->v_addr;
if (v2->v_type == V_ADDR)
v2 = v2->v_addr;
v3 = v3->v_addr;
v4 = v4->v_addr;
if (v1->v_type != V_NUM || v2->v_type != V_NUM ||
(v3->v_type != V_NUM && v3->v_type != V_NULL) ||
(v4->v_type != V_NUM && v4->v_type != V_NULL))
return error_value(E_QUOMOD2);
s3 = v3->v_subtype;
s4 = v4->v_subtype;
if ((s3 | s4) & V_NOASSIGNTO)
return error_value(E_QUOMOD3);
freevalue(v3);
freevalue(v4);
v3->v_type = V_NUM;
v4->v_type = V_NUM;
v3->v_subtype = s3;
v4->v_subtype = s4;
res = qquomod(v1->v_num, v2->v_num, &v3->v_num, &v4->v_num, rnd);
result.v_type = V_NUM;
result.v_subtype = V_NOSUBTYPE;
result.v_num = res ? qlink(&_qone_) : qlink(&_qzero_);
return result;
}
static VALUE
f_mmin(VALUE *v1, VALUE *v2)
@@ -5738,7 +5854,7 @@ strscan(char *s, int count, VALUE **vals)
static int
filescan(FILEID id, int count, VALUE **vals)
{
char *str;
STRING *str;
int i;
int n = 0;
VALUE val;
@@ -5759,7 +5875,7 @@ filescan(FILEID id, int count, VALUE **vals)
if (i > 0)
return EOF;
n++;
val.v_str = makenewstring(str);
val.v_str = str;
result = f_eval(&val);
var = *vals++;
if (var->v_type == V_ADDR) {
@@ -6006,7 +6122,7 @@ f_fputs(int count, VALUE **vals)
return error_value(E_FPUTS2);
}
for (i = 1; i < count; i++) {
err = idfputs(vals[0]->v_file, vals[i]->v_str->s_str);
err = idfputs(vals[0]->v_file, vals[i]->v_str);
if (err > 0)
return error_value(E_FPUTS3);
}
@@ -6153,7 +6269,7 @@ static VALUE
f_fgetline(VALUE *vp)
{
VALUE result;
char *str;
STRING *str;
int i;
/* initialize VALUE */
@@ -6167,7 +6283,7 @@ f_fgetline(VALUE *vp)
result.v_type = V_NULL;
if (i == 0) {
result.v_type = V_STR;
result.v_str = makestring(str);
result.v_str = str;
}
return result;
}
@@ -6177,7 +6293,7 @@ static VALUE
f_fgets(VALUE *vp)
{
VALUE result;
char *str;
STRING *str;
int i;
/* initialize VALUE */
@@ -6191,7 +6307,7 @@ f_fgets(VALUE *vp)
result.v_type = V_NULL;
if (i == 0) {
result.v_type = V_STR;
result.v_str = makestring(str);
result.v_str = str;
}
return result;
}
@@ -6201,7 +6317,7 @@ static VALUE
f_fgetstr(VALUE *vp)
{
VALUE result;
char *str;
STRING *str;
int i;
/* initialize VALUE */
@@ -6215,7 +6331,7 @@ f_fgetstr(VALUE *vp)
result.v_type = V_NULL;
if (i == 0) {
result.v_type = V_STR;
result.v_str = makestring(str);
result.v_str = str;
}
return result;
}
@@ -6225,7 +6341,7 @@ static VALUE
f_fgetfield(VALUE *vp)
{
VALUE result;
char *str;
STRING *str;
int i;
/* initialize VALUE */
@@ -6239,7 +6355,32 @@ f_fgetfield(VALUE *vp)
result.v_type = V_NULL;
if (i == 0) {
result.v_type = V_STR;
result.v_str = makestring(str);
result.v_str = str;
}
return result;
}
static VALUE
f_fgetfile(VALUE *vp)
{
VALUE result;
STRING *str;
int i;
/* initialize VALUE */
result.v_subtype = V_NOSUBTYPE;
if (vp->v_type != V_FILE)
return error_value(E_FGETFILE1);
i = readid(vp->v_file, 0, &str);
if (i == 1)
return error_value(E_FGETFILE2);
if (i == 3)
return error_value(E_FGETFILE3);
result.v_type = V_NULL;
if (i == 0) {
result.v_type = V_STR;
result.v_str = str;
}
return result;
}
@@ -8076,6 +8217,8 @@ static CONST struct builtin builtins[] = {
"set or read calc_errno"},
{"error", 0, 1, 0, OP_NOP, 0, f_error,
"generate error value"},
{"estr", 1, 1, 0, OP_NOP, 0, f_estr,
"exact text string representation of value"},
{"euler", 1, 1, 0, OP_NOP, 0, f_euler,
"Euler number"},
{"eval", 1, 1, 0, OP_NOP, 0, f_eval,
@@ -8106,6 +8249,8 @@ static CONST struct builtin builtins[] = {
"read next char from file"},
{"fgetfield", 1, 1, 0, OP_NOP, 0, f_fgetfield,
"read next white-space delimited field from file"},
{"fgetfile", 1, 1, 0, OP_NOP, 0, f_fgetfile,
"read to end of file"},
{"fgetline", 1, 1, 0, OP_NOP, 0, f_fgetline,
"read next line from file, newline removed"},
{"fgets", 1, 1, 0, OP_NOP, 0, f_fgets,
@@ -8374,7 +8519,7 @@ static CONST struct builtin builtins[] = {
"define an environment variable"},
{"quo", 2, 3, 0, OP_NOP, 0, f_quo,
"integer quotient of a by b, rounding type c"},
{"quomod", 4, 4, 0, OP_QUOMOD, 0, 0,
{"quomod", 4, 5, FA, OP_NOP, 0, f_quomod,
"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,
"additive 55 random number [0,2^64), [0,a), or [a,b)"},

6
hash.c
View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.9 $
* @(#) $Id: hash.c,v 29.9 2006/06/06 07:17:02 chongo Exp $
* @(#) $Revision: 29.10 $
* @(#) $Id: hash.c,v 29.10 2006/06/20 10:25:45 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/hash.c,v $
*
* Under source code control: 1995/11/23 05:13:11
@@ -996,6 +996,8 @@ hash_value(int type, void *v, HASH *state)
}
state = hash_str(type, value->v_config->version, state);
state = hash_int(type, value->v_config->baseb, state);
state = hash_bool(type, value->v_config->redecl_warn, state);
state = hash_bool(type, value->v_config->dupvar_warn, state);
break;
case V_HASH:

View File

@@ -2,7 +2,7 @@
#
# help - makefile for calc help files
#
# Copyright (C) 1999-2002 Landon Curt Noll
# Copyright (C) 1999-2006 Landon Curt Noll
#
# Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License
@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
#
# @(#) $Revision: 29.28 $
# @(#) $Id: Makefile,v 29.28 2006/05/07 12:59:51 chongo Exp $
# @(#) $Revision: 29.33 $
# @(#) $Id: Makefile,v 29.33 2006/09/18 07:04:42 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/help/RCS/Makefile,v $
#
# Under source code control: 1991/07/23 06:47:57
@@ -62,9 +62,9 @@ INCDIR= /usr/include
# ${LIBDIR} where calc link library (*.a) files are installed
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
#
# NOTE: The install rule prepends installation paths with $T, which
# by default is empty. If $T is non-empty, then installation
# locations will be relative to the $T directory.
# NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the ${T} directory.
#
# For DJGPP, select:
#
@@ -99,9 +99,9 @@ CALC_SHAREDIR= /usr/share/calc
# ${CUSTOMINCPDIR} where custom .h files are installed
# ${SCRIPTDIR} where calc shell scripts are installed
#
# NOTE: The install rule prepends installation paths with $T, which
# by default is empty. If $T is non-empty, then installation
# locations will be relative to the $T directory.
# NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the ${T} directory.
#
# If in doubt, set:
#
@@ -121,8 +121,8 @@ SCRIPTDIR= ${BINDIR}/cscript
# T - top level directory under which calc will be installed
#
# The calc install is performed under $T, the calc build is
# performed under /. The purpose for $T is to allow someone
# The calc install is performed under ${T}, the calc build is
# performed under /. The purpose for ${T} is to allow someone
# to install calc somewhere other than into the system area.
#
# For example, if:
@@ -142,10 +142,10 @@ SCRIPTDIR= ${BINDIR}/cscript
# calc help, .cal ...: /var/tmp/testing/usr/share/calc
# ... etc ... /var/tmp/testing/...
#
# If $T is empty, calc is installed under /, which is the same
# top of tree for which it was built. If $T is non-empty, then
# calc is installed under $T, as if one had to chroot under
# $T for calc to operate.
# If ${T} is empty, calc is installed under /, which is the same
# top of tree for which it was built. If ${T} is non-empty, then
# calc is installed under ${T}, as if one had to chroot under
# ${T} for calc to operate.
#
# If in doubt, use T=
#
@@ -169,6 +169,14 @@ SED= sed
SORT= sort
FMT= fmt
CMP= cmp
CP= cm
MV= mv
TRUE= true
RM= rm
MKDIR= mkdir
RMDIR= rmdir
TOUCH= touch
CAT= cat
# Some out of date operating systems require / want an executable to
# end with a certain file extension. Some compile systems such as
@@ -267,15 +275,15 @@ BLT_HELP_FILES= ${BLT_HELP_FILES_3} ${BLT_HELP_FILES_5} \
#
DETAIL_HELP= abs access acos acosh acot acoth acsc acsch address agd append \
appr arg argv arrow asec asech asin asinh assign atan atan2 atanh \
avg base base2 bernoulli bit blk blkcpy blkfree blocks bround btrunc \
calc_tty calclevel catalan ceil cfappr cfsim char cmdbuf cmp comb \
conj cos cosh cot coth count cp csc csch ctime delete den dereference \
det digit digits display dp epsilon errcount errmax errno error \
euler eval exp fact factor fclose fcnt feof ferror fflush fgetc \
fgetfield fgetline fgets fgetstr fib files floor fopen forall \
fpathopen fprintf fputc fputs fputstr frac free freebernoulli \
freeeuler freeglobals freeredc freestatics frem freopen fscan \
fscanf fseek fsize ftell gcd gcdrem gd getenv hash head highbit \
avg base base2 bernoulli bit blk blkcpy blkfree blocks bround \
btrunc calc_tty calclevel catalan ceil cfappr cfsim char cmdbuf \
cmp comb conj cos cosh cot coth count ${CP} csc csch ctime delete den \
dereference det digit digits display dp epsilon errcount errmax \
errno error estr euler eval exp fact factor fclose fcnt feof ferror \
fflush fgetc fgetfield fgetfile fgetline fgets fgetstr fib files \
floor fopen forall fpathopen fprintf fputc fputs fputstr frac free \
freebernoulli freeeuler freeglobals freeredc freestatics frem freopen \
fscan fscanf fseek fsize ftell gcd gcdrem gd getenv hash head highbit \
hmean hnrmod hypot ilog ilog10 ilog2 im indices inputlevel insert \
int inverse iroot isassoc isatty isblk isconfig isdefined iserror \
iseven isfile ishash isident isint islist ismat ismult isnull isnum \
@@ -287,7 +295,7 @@ DETAIL_HELP= abs access acos acosh acot acoth acsc acsch address agd append \
param perm pfact pi pix places pmod polar poly pop popcnt power \
prevcand prevprime printf prompt protect ptest push putenv quo \
quomod rand randbit random randombit randperm rcin rcmul rcout \
rcpow rcsq re remove reverse rewind rm root round rsearch runtime \
rcpow rcsq re remove reverse rewind ${RM} root round rsearch runtime \
saveval scale scan scanf search sec sech seed segment select sgn \
sha sha1 sin sinh size sizeof sleep sort sqrt srand srandom ssq \
str strcat strcmp strcpy strerror strlen strncmp strncpy strpos \
@@ -325,175 +333,175 @@ all: ${FULL_HELP_FILES} full ${DETAIL_HELP} ${DETAIL_CLONE} \
# an non-emoty else clause for every if condition. *sigh*
#
.all:
rm -f .all
touch .all
${RM} -f .all
${TOUCH} .all
bindings: ../cal/bindings
rm -f $@
cp ../cal/bindings $@
${RM} -f $@
${CP} ../cal/bindings $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
resource: ../cal/README
rm -f $@
cp ../cal/README $@
${RM} -f $@
${CP} ../cal/README $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
changes: ../CHANGES
rm -f $@
cp ../CHANGES $@
${RM} -f $@
${CP} ../CHANGES $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
libcalc: ../LIBRARY
rm -f $@
${RM} -f $@
${SED} -e 's:$${LIBDIR}:${LIBDIR}:g' \
-e 's:$${CALC_INCDIR}:${CALC_INCDIR}:g' < ../LIBRARY > $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
bugs: ../BUGS
rm -f $@
cp ../BUGS $@
${RM} -f $@
${CP} ../BUGS $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
errorcodes: ../calcerr.h errorcodes.hdr errorcodes.sed
rm -f $@
cat errorcodes.hdr > $@
${RM} -f $@
${CAT} errorcodes.hdr > $@
${SED} -n -f errorcodes.sed < ../calcerr.h >> $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
calc: usage
rm -f $@
cp usage $@
${RM} -f $@
${CP} usage $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
custom_cal: ../custom/CUSTOM_CAL
rm -f $@
cp ../custom/CUSTOM_CAL $@
${RM} -f $@
${CP} ../custom/CUSTOM_CAL $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
new_custom: ../custom/HOW_TO_ADD
rm -f $@
cp ../custom/HOW_TO_ADD $@
${RM} -f $@
${CP} ../custom/HOW_TO_ADD $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
copy: blkcpy
rm -f $@
cp blkcpy $@
${RM} -f $@
${CP} blkcpy $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
COPYING: ../COPYING
rm -f $@
cp ../COPYING $@
${RM} -f $@
${CP} ../COPYING $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
COPYING-LGPL: ../COPYING-LGPL
rm -f $@
cp ../COPYING-LGPL $@
${RM} -f $@
${CP} ../COPYING-LGPL $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
cscript: ../cscript/README
rm -f $@
cp ../cscript/README $@
${RM} -f $@
${CP} ../cscript/README $@
${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
full: ${FULL_HELP_FILES} ${MAKE_FILE}
${Q}echo "forming full"
-${Q}rm -f $@
-${Q}for i in ${FULL_HELP_FILES}; do \
${Q} echo "forming full"
-${Q} ${RM} -f $@
-${Q} for i in ${FULL_HELP_FILES}; do \
if [ Xintro != X"$$i" ]; then \
echo " "; \
else \
true; \
${TRUE}; \
fi; \
if [ Xobj.file = X"$$i" ]; then \
j=obj; \
@@ -504,34 +512,34 @@ full: ${FULL_HELP_FILES} ${MAKE_FILE}
echo "* $$j"; \
echo "*************"; \
echo ""; \
cat $$i; \
${CAT} $$i; \
done > $@
${Q}echo "full formed"
${Q} echo "full formed"
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
# Singular files are the same files as their plural form.
#
${SINGULAR_FILES}: ${PLURAL_FILES}
${Q}for i in ${SINGULAR_FILES} /dev/null; do \
${Q} for i in ${SINGULAR_FILES} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo "rm -f $${i}"; \
rm -f $${i}; \
echo "cp $${i}s $${i}"; \
cp $${i}s $${i}; \
echo "${RM} -f $${i}"; \
${RM} -f $${i}; \
echo "${CP} $${i}s $${i}"; \
${CP} $${i}s $${i}; \
fi; \
done
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/SINGULAR_FILES =-=-='; \
echo '=-=-= skipping the ${CAT} of help/SINGULAR_FILES =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
# Form the builtin file
@@ -553,25 +561,25 @@ ${SINGULAR_FILES}: ${PLURAL_FILES}
# do not treat -I.. correctly!
#
builtin: builtin.top builtin.end ../func.c funclist.sed
${Q}echo "forming builtin help file"
-${Q}rm -f funclist.c
${Q}${SED} -n -f funclist.sed ../func.c > funclist.c
-${Q}rm -f funclist.o funclist${EXT}
${Q}${LCC} ${ICFLAGS} -DFUNCLIST -I/usr/include \
${Q} echo "forming builtin help file"
-${Q} ${RM} -f funclist.c
${Q} ${SED} -n -f funclist.sed ../func.c > funclist.c
-${Q} ${RM} -f funclist.o funclist${EXT}
${Q} ${LCC} ${ICFLAGS} -DFUNCLIST -I/usr/include \
-I.. funclist.c -c 2>/dev/null
${Q}${LCC} ${ILDFLAGS} funclist.o -o funclist${EXT}
-${Q}rm -f builtin
${Q}cat builtin.top > builtin
${Q}./funclist${EXT} | \
${Q} ${LCC} ${ILDFLAGS} funclist.o -o funclist${EXT}
-${Q} ${RM} -f builtin
${Q} ${CAT} builtin.top > builtin
${Q} ./funclist${EXT} | \
${SED} -e 's/^/ /' -e 's/[ ][ ]*$$//' >> builtin
${Q}cat builtin.end >> builtin
${Q}echo "builtin help file formed"
${Q} ${CAT} builtin.end >> builtin
${Q} echo "builtin help file formed"
-@if [ -z "${Q}" ]; then \
echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \
else \
true; \
${TRUE}; \
fi
##
@@ -585,17 +593,17 @@ builtin: builtin.top builtin.end ../func.c funclist.sed
##
distlist: ${DISTLIST}
${Q}for i in ${DISTLIST} /dev/null; do \
${Q} for i in ${DISTLIST} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo help/$$i; \
fi; \
done | LANG=C ${SORT}
distdir:
${Q}echo help
${Q} echo help
calcliblist:
${Q}for i in ${CALCLIBLIST} /dev/null; do \
${Q} for i in ${CALCLIBLIST} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo help/$$i; \
fi; \
@@ -606,21 +614,21 @@ calcliblist:
# ignore this rule.
#
bsdi: all
rm -f obj
cp obj.file obj
${RM} -f obj
${CP} obj.file obj
# These next rule help me form the ${DETAIL_HELP} makefile variables above.
#
detaillist:
${Q}-(echo "xxxxx"; \
${Q} -(echo "xxxxx"; \
for i in ${DETAIL_HELP} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
if [ ! -f RCS/$$i,v ]; then \
echo "WARNING: $$i not under RCS control" 1>&2; \
else \
echo $$i; \
if [ X"$$i" != X"/dev/null" ]; then \
if [ ! -f RCS/$$i,v ]; then \
echo "WARNING: $$i not under RCS control" 1>&2; \
else \
echo $$i; \
fi; \
fi; \
fi; \
done | LANG=C ${SORT}) | ${FMT} -70 | \
${SED} -e '1s/xxxxx/DETAIL_HELP=/' -e '2,$$s/^/ /' \
-e 's/$$/ \\/' -e '$$s/ \\$$//'
@@ -632,13 +640,13 @@ detaillist:
##
echo_inst_files:
${Q}for i in ${STD_HELP_FILES} full ${BLT_HELP_FILES} \
${Q} for i in ${STD_HELP_FILES} full ${BLT_HELP_FILES} \
builtin ${DETAIL_HELP} ${SINGULAR_FILES} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${HELPDIR}/$$i; \
fi; \
done
${Q}echo __file__ ${HELPDIR}/obj
${Q} echo __file__ ${HELPDIR}/obj
##
#
@@ -647,61 +655,99 @@ echo_inst_files:
##
clean:
rm -f obj mkbuiltin funclist.c funclist.o funclist${EXT}
rm -f COPYING COPYING-LGPL
${RM} -f obj mkbuiltin funclist.c funclist.o funclist${EXT}
${RM} -f COPYING COPYING-LGPL
clobber:
rm -f ${BLT_HELP_FILES} full .all calc
rm -f obj mkbuiltin funclist.c funclist.o funclist${EXT}
rm -f COPYING COPYING-LGPL
rm -f ${SINGULAR_FILES} ${DETAIL_CLONE}
${RM} -f ${BLT_HELP_FILES} full .all calc
${RM} -f obj mkbuiltin funclist.c funclist.o funclist${EXT}
${RM} -f COPYING COPYING-LGPL
${RM} -f ${SINGULAR_FILES} ${DETAIL_CLONE}
# install everything
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
install: all
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \
echo mkdir $T${CALC_SHAREDIR}; \
mkdir $T${CALC_SHAREDIR}; \
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \
echo mkdir -p "$T${CALC_SHAREDIR}"; \
mkdir -p "$T${CALC_SHAREDIR}"; \
-${Q} if [ ! -d ${T}${CALC_SHAREDIR} ]; then \
echo ${MKDIR} ${T}${CALC_SHAREDIR}; \
${MKDIR} ${T}${CALC_SHAREDIR}; \
if [ ! -d "${T}${CALC_SHAREDIR}" ]; then \
echo ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \
${CHMOD} 0755 $T${CALC_SHAREDIR}; \
echo ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
else \
true; \
${TRUE}; \
fi
-${Q}if [ ! -d $T${HELPDIR} ]; then \
echo mkdir $T${HELPDIR}; \
mkdir $T${HELPDIR}; \
if [ ! -d "$T${HELPDIR}" ]; then \
echo mkdir -p "$T${HELPDIR}"; \
mkdir -p "$T${HELPDIR}"; \
-${Q} if [ ! -d ${T}${HELPDIR} ]; then \
echo ${MKDIR} ${T}${HELPDIR}; \
${MKDIR} ${T}${HELPDIR}; \
if [ ! -d "${T}${HELPDIR}" ]; then \
echo ${MKDIR} -p "${T}${HELPDIR}"; \
${MKDIR} -p "${T}${HELPDIR}"; \
fi; \
echo ${CHMOD} 0755 $T${HELPDIR}; \
${CHMOD} 0755 $T${HELPDIR}; \
echo ${CHMOD} 0755 ${T}${HELPDIR}; \
${CHMOD} 0755 ${T}${HELPDIR}; \
else \
true; \
${TRUE}; \
fi
-${Q}for i in ${STD_HELP_FILES} ${BLT_HELP_FILES} builtin \
-${Q} for i in ${STD_HELP_FILES} ${BLT_HELP_FILES} builtin \
full ${DETAIL_HELP} ${SINGULAR_FILES} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if ${CMP} -s $$i $T${HELPDIR}/$$i; then \
true; \
if ${CMP} -s $$i ${T}${HELPDIR}/$$i; then \
${TRUE}; \
else \
rm -f $T${HELPDIR}/$$i.new; \
cp -f $$i $T${HELPDIR}/$$i.new; \
${CHMOD} 0444 $T${HELPDIR}/$$i.new; \
mv -f $T${HELPDIR}/$$i.new $T${HELPDIR}/$$i; \
echo "installed $T${HELPDIR}/$$i"; \
${RM} -f ${T}${HELPDIR}/$$i.new; \
${CP} -f $$i ${T}${HELPDIR}/$$i.new; \
${CHMOD} 0444 ${T}${HELPDIR}/$$i.new; \
${MV} -f ${T}${HELPDIR}/$$i.new ${T}${HELPDIR}/$$i; \
echo "installed ${T}${HELPDIR}/$$i"; \
fi; \
done
-${Q}if ${CMP} -s obj.file $T${HELPDIR}/obj; then \
true; \
-${Q} if ${CMP} -s obj.file ${T}${HELPDIR}/obj; then \
${TRUE}; \
else \
rm -f $T${HELPDIR}/obj.new; \
cp -f obj.file $T${HELPDIR}/obj.new; \
${CHMOD} 0444 $T${HELPDIR}/obj.new; \
mv -f $T${HELPDIR}/obj.new $T${HELPDIR}/obj; \
echo "installed $T${HELPDIR}/obj"; \
${RM} -f ${T}${HELPDIR}/obj.new; \
${CP} -f obj.file ${T}${HELPDIR}/obj.new; \
${CHMOD} 0444 ${T}${HELPDIR}/obj.new; \
${MV} -f ${T}${HELPDIR}/obj.new ${T}${HELPDIR}/obj; \
echo "installed ${T}${HELPDIR}/obj"; \
fi
# Try to remove everything that was installed
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
uninstall:
-${Q} if [ -f "${T}${HELPDIR}/obj" ]; then \
${RM} -f "${T}${HELPDIR}/obj"; \
if [ -f "${T}${HELPDIR}/obj" ]; then \
echo "cannot uninstall ${T}${HELPDIR}/obj"; \
else \
echo "uninstalled ${T}${HELPDIR}/obj"; \
fi; \
fi
-${Q} for i in ${SINGULAR_FILES} ${DETAIL_HELP} full builtin \
${BLT_HELP_FILES} ${STD_HELP_FILES} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \
continue; \
fi; \
if [ -f "${T}${HELPDIR}/$$i" ]; then \
${RM} -f "${T}${HELPDIR}/$$i"; \
if [ -f "${T}${HELPDIR}/$$i" ]; then \
echo "cannot uninstall ${T}${HELPDIR}/$$i"; \
else \
echo "uninstalled ${T}${HELPDIR}/$$i"; \
fi; \
fi; \
done
-${Q} for i in ${HELPDIR} ${CALC_SHAREDIR}; do \
if [ -d "${T}$$i" ]; then \
${RMDIR} "${T}$$i" 2>/dev/null; \
echo "cleaned up ${T}$$i"; \
fi; \
done

View File

@@ -57,9 +57,10 @@ LINK LIBRARY
none
SEE ALSO
delete, insert, islist, list, pop, push, remove, rsearch, search, size
delete, insert, islist, pop, push, remove, rsearch, search,
select, size
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -75,8 +76,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: append,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: append,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/append,v $
##
## Under source code control: 1994/03/19 03:13:17

View File

@@ -51,9 +51,9 @@ LINK LIBRARY
none
SEE ALSO
param, usage
param, system, usage
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -69,8 +69,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: argv,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: argv,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/argv,v $
##
## Under source code control: 1999/11/23 19:45:05

View File

@@ -41,7 +41,7 @@ EXAMPLE
[1,1] = 6
LIMITS
The number of arguments is not to exceed 100.
The number of arguments is not to exceed 1024.
LINK LIBRARY
none
@@ -49,7 +49,7 @@ LINK LIBRARY
SEE ALSO
hmean
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -65,8 +65,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: avg,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: avg,v 29.4 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/avg,v $
##
## Under source code control: 1994/09/25 20:22:31

View File

@@ -213,12 +213,27 @@ LIMITS
1 <= chunk < 2^31
LINK LIBRARY
XXX
BLOCK *blkalloc(int len, int chunk)
void blk_free(BLOCK *blk)
BLOCK *blkrealloc(BLOCK *blk, int newlen, int newchunk)
void blktrunc(BLOCK *blk)
BLOCK *blk_copy(BLOCK *blk)
int blk_cmp(BLOCK *a, BLOCK *b)
void blk_print(BLOCK *blk)
void nblock_print(NBLOCK *nblk)
NBLOCK *reallocnblock(int id, int len, int chunk)
NBLOCK *createnblock(char *name, int len, int chunk)
int findnblockid(char * name)
int removenblock(int id)
int countnblocks(void)
void shownblocks(void)
NBLOCK *findnblock(int id)
BLOCK *copyrealloc(BLOCK *blk, int newlen, int newchunk)
SEE ALSO
blocks, blkfree
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -234,8 +249,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.4 $
## @(#) $Id: blk,v 29.4 2006/05/07 07:16:42 chongo Exp $
## @(#) $Revision: 29.5 $
## @(#) $Id: blk,v 29.5 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blk,v $
##
## Under source code control: 1997/04/05 13:07:13

View File

@@ -26,9 +26,9 @@ LINK LIBRARY
none
SEE ALSO
XXX - fill in
argv, system
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -44,8 +44,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.2 $
## @(#) $Id: cmdbuf,v 29.2 2000/06/07 14:02:33 chongo Exp $
## @(#) $Revision: 29.3 $
## @(#) $Id: cmdbuf,v 29.3 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cmdbuf,v $
##
## Under source code control: 1995/07/09 04:05:58

View File

@@ -36,9 +36,9 @@ LINK LIBRARY
void zcomb(ZVALUE x, ZVALUE y, ZVALUE *res)
SEE ALSO
fact, perm
fact, perm, randperm
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -54,8 +54,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: comb,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: comb,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/comb,v $
##
## Under source code control: 1994/10/20 04:03:02

View File

@@ -50,13 +50,13 @@ DESCRIPTION
"prompt" default interactive prompt
"more" default interactive multi-line input prompt
"blkmaxprint" number of block octets to print, 0 means all
"blkverbose" TRUE=>print all lines, FALSE=>skip duplicates
"blkverbose" TRUE => print all lines, FALSE=>skip duplicates
"blkbase" block output base
"blkfmt" block output format
"calc_debug" controls internal calc debug information
"resource_debug" controls resource file debug information
"user_debug" for user defined debug information
"verbose_quit" TRUE=>print message on empty quit or abort
"verbose_quit" TRUE => print message on empty quit or abort
"ctrl_d" The interactive meaning of ^D (Control D)
"program" Read-only calc program or shell script path
"basename" Read-only basename of the program value
@@ -66,6 +66,8 @@ DESCRIPTION
"allow_custom" TRUE=>custom functions are enabled
"version" Read-only calc version
"baseb" bits in calculation base, a read-only value
"redecl_warn" TRUE => warn when redeclaring
"dupvar_warn" TRUE => warn when variable names collide
The "all" config value allows one to save/restore the configuration
set of values. The return of:
@@ -279,14 +281,14 @@ DESCRIPTION
established on a 1.8GHz AMD 32-bit CPU of ~3406 BogoMIPS when
the two algorithms are about equal in speed. For that CPU test,
config("baseb") was 32. This means that by default numbers up to
(3388*32)+31 = 108447 bits in length (< 32645 decinal digits) use
(3388*32)+31 = 108447 bits in length (< 32645 decimal digits) use
the 1st algorithm, for squaring.
The default value for config("mul2") is 1780. This default was
established on a 1.8GHz AMD 32-bit CPU of ~3406 BogoMIPS when
the two algorithms are about equal in speed. For that CPU test,
config("baseb") was 32. This means that by default numbers up to
(1779*32)+31 = 56927 bits in length (< 17137 decinal digits) use
(1779*32)+31 = 56927 bits in length (< 17137 decimal digits) use
the 1st algorithm, for multiplication.
A value of zero resets the parameter back to their default values.
@@ -315,7 +317,7 @@ DESCRIPTION
established on a 1.8GHz AMD 32-bit CPU of ~3406 BogoMIPS when
the two algorithms are about equal in speed. For that CPU test,
config("baseb") was 32. This means that by default numbers up to
(176*32)+31 = 5663 bits in length (< 1704 decinal digits) use the
(176*32)+31 = 5663 bits in length (< 1704 decimal digits) use the
1st algorithm, for calculating powers modulo another number.
A value of zero resets the parameter back to their default values.
@@ -344,7 +346,7 @@ DESCRIPTION
established as 5/4 (the historical ratio of config("pow2") to
config("pow2")) of the config("pow2") value. This means that if
config("baseb") is 32, then by default numbers up to (220*32)+31 =
7071 bits in length (< 2128 decinal digits) use the REDC algorithm,
7071 bits in length (< 2128 decimal digits) use the REDC algorithm,
for calculating powers modulo another number.
A value of zero resets the parameter back to their default values.
@@ -428,9 +430,15 @@ DESCRIPTION
by the various kinds of printing to the output: bits 0, 1, 3 and 4
are used in the same way as for the functions round and bround.
The C language method of modulus and integer division is:
config("quomod", 2)
config("quo", 2)
config("mod", 2)
=-=
config("leadzero", bool)
config("leadzero", boolean)
The "leadzero" parameter controls whether or not a 0 is printed
before the decimal point in non-zero fractions with absolute value
@@ -439,7 +447,7 @@ DESCRIPTION
=-=
config("fullzero", bool)
config("fullzero", boolean)
The "fullzero" parameter controls whether or not in decimal floating-
point printing, the digits are padded with zeros to reach the
@@ -490,7 +498,7 @@ DESCRIPTION
=-=
config("blkverbose", bool)
config("blkverbose", boolean)
The "blkverbose" determines if all lines, including duplicates
should be printed. If TRUE, then all lines are printed. If false,
@@ -656,7 +664,7 @@ DESCRIPTION
=-=
config("verbose_quit", bool)
config("verbose_quit", boolean)
The "verbose_quit" controls the print of the message:
@@ -835,6 +843,31 @@ DESCRIPTION
This config parameter is read-only and cannot be set.
=-=
config("redecl_warn", boolean)
Config("redecl_warn") controls whether or not a warning is issued
when redeclaring variables.
The initial "redecl_warn" value is 1.
=-=
config("dupvar_warn", boolean)
Config("dupvar_warn") controls whether or not a warning is issued
when a variable name collides with an exist name of a higher scope.
Examples of collisions are when:
* both local and static variables have the same name
* both local and global variables have the same name
* both function parameter and local variables have the same name
* both function parameter and global variables have the same name
The initial "redecl_warn" value is 1.
EXAMPLE
; current_cfg = config("all");
; config("tilde", off),;
@@ -893,6 +926,8 @@ EXAMPLE
allow_custom 0
version "2.12.0"
baseb 32
redecl_warn 1
dupvar_warn 1
; display()
20
@@ -925,8 +960,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.15 $
## @(#) $Id: config,v 29.15 2006/06/11 07:22:05 chongo Exp $
## @(#) $Revision: 29.17 $
## @(#) $Id: config,v 29.17 2006/06/24 19:06:58 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/config,v $
##
## Under source code control: 1991/07/21 04:37:17

View File

@@ -183,7 +183,7 @@ EXAMPLE
;; }
LIMITS
The number of arguments in a function-call cannot exceed 100.
The number of arguments in a function-call cannot exceed 1024.
LIBRARY
none
@@ -207,8 +207,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.5 $
## @(#) $Id: define,v 29.5 2006/06/10 12:28:10 chongo Exp $
## @(#) $Revision: 29.6 $
## @(#) $Id: define,v 29.6 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/define,v $
##
##

View File

@@ -39,9 +39,10 @@ LINK LIBRARY
none
SEE ALSO
append, insert, pop, push, remove, size
append, insert, islist, pop, push, remove, rsearch, search,
select, size
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -57,8 +58,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: delete,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: delete,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/delete,v $
##
## Under source code control: 1994/03/19 03:13:18

45
help/estr Normal file
View File

@@ -0,0 +1,45 @@
NAME
estr - represent some types of value by text strings
SYNOPSIS
estr(x)
TYPES
x null, string, real or complex number, list, matrix,
object. block, named block, error
return string
DESCRIPTION
This function attempts to represent x exactly by a string s of
ordinary text characters such that eval(s) == x.
If x is null, estr(x) returns the string "".
If x is a string, estr(x) returns the string in which occurrences of
newline, tab, ", \, etc. have been converted to \n, \t, \",
\\, etc., '\0' to \000 or \0 according as the next character is
or is not an octal digit, and other non-text characters to their
escaped hex representation, e.g. char(165) becomes \xa5.
For real x, estr(x) represebts x in fractional mode.
EXAMPLE
; estr("abc\0xyz\00023\n\xa5\r\n")
""abc\0xyz\00023\n\xa5\r\n""
; estr(1.67)
"167/100"
; estr(mat[3] = {2, list(3,5), "abc"})
"mat[3]={2,list(3,5),"abc""
LIMITS
none
LINK LIBRARY
none
SEE ALSO
str, strprintf

View File

@@ -30,9 +30,9 @@ LINK LIBRARY
void zfact(NUMBER x, *ret)
SEE ALSO
comb, perm
comb, perm, randperm
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -48,8 +48,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: fact,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: fact,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fact,v $
##
## Under source code control: 1994/10/20 04:03:02

View File

@@ -47,7 +47,8 @@ LINK LIBRARY
FLAG zfactor(ZVALUE n, ZVALUE limit, ZVALUE *res)
SEE ALSO
lfactor
isprime, lfactor, nextcand, nextprime, prevcand, prevprime,
pfact, pix, ptest
## Copyright (C) 1999-2006 Landon Curt Noll
##
@@ -65,8 +66,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.4 $
## @(#) $Id: factor,v 29.4 2006/06/01 11:36:02 chongo Exp $
## @(#) $Revision: 29.5 $
## @(#) $Id: factor,v 29.5 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/factor,v $
##
## Under source code control: 1995/12/18 12:34:57

View File

@@ -7,19 +7,18 @@ SYNOPSIS
TYPES
fs file stream open for reading
return string, null or error value
return string or null
DESCRIPTION
If characters cannot be read from the file, an error value is returned.
Otherwise starting at the current file position, any whitespace
Starting at the current file position, any whitespace
characters are skipped. If the reading reaches end-of-file, the
null value is returned. If non-whitespace is encountered, formation
of a string begins, continuing until whitespace of '\0' or end-of-file
is reached. The returned value is this string (terminated as usual
by a null character). After the operation, the file position will
be immediately after the first whitespace character of '\0' or at
end-of-file.
null value is returned. Otherwise the function returns the empty
string "" if the first non-white character is '\0', and in other cases,
the string formed by the non-white-space characters read until '\0' or
a white-space character or te end of the file is reached. In the
cases where the reading is stopped by '\0' or white-space character,
the file position will be that immediately after that character.
EXAMPLE
@@ -43,10 +42,10 @@ EXAMPLE
"Beta"
LIMITS
none - XXX - is this correct?
none
LINK LIBRARY
none - XXX - is this correct?
none
SEE ALSO
fgetstr, fputstr, fgets, fputs, fopen, files, fprintf
@@ -67,8 +66,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.4 $
## @(#) $Id: fgetfield,v 29.4 2006/06/10 12:28:10 chongo Exp $
## @(#) $Revision: 29.6 $
## @(#) $Id: fgetfield,v 29.6 2006/08/20 15:01:57 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fgetfield,v $
##
## Under source code control: 1996/04/30 03:05:17

72
help/fgetfile Normal file
View File

@@ -0,0 +1,72 @@
NAME
fgetfile - read the rest of a file to form a string
SYNOPSIS
fgetfile(fs)
TYPES
fs file stream open for reading
return string or null value
DESCRIPTION
If the current file position for fs is the end of the file, the
null value is returned.
Otherwise the function returns the string formed from reading all
characters from the current file position to the end of the file.
If the content of the file "newfile" is a sequence of statements that
could form the body of function definition, the statement sequence
fs = fopen("newfile", "r");
eval(fgetfile(fs));
achieves the same as the command
read newfile;
EXAMPLE
; f = fopen("/tmp/newfile", "w")
; fputs(f, "abc\0xyz\n\t\xb0\0\r\v123"
; freopen(f, "r")
; estr(fgetfile(f))
""abc\0xyz\n\t\xb0\0\r\v123""
LIMITS
none
LINK LIBRARY
none
SEE ALSO
fgets, fgetstr, files, fopen, fprintf, fputs, fputstr
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
## as published by the Free Software Foundation.
##
## Calc is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
## Public License for more details.
##
## A copy of version 2.1 of the GNU Lesser General Public License is
## distributed with calc under the filename COPYING-LGPL. You should have
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.2 $
## @(#) $Id: fgetfile,v 29.2 2006/08/20 15:01:57 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fgetfile,v $
##
## Under source code control: 1996/04/30 03:05:17
## File existed as early as: 1996
##
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/

View File

@@ -38,10 +38,10 @@ EXAMPLE
; fgetstr(f)
LIMITS
none - XXX - is this correct?
none
LINK LIBRARY
none - XXX - is this correct?
none
SEE ALSO
fputstr, fgetword, fgets, fputs, fopen, files, fprintf
@@ -62,8 +62,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.4 $
## @(#) $Id: fgetstr,v 29.4 2006/06/10 12:28:10 chongo Exp $
## @(#) $Revision: 29.5 $
## @(#) $Id: fgetstr,v 29.5 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fgetstr,v $
##
## Under source code control: 1996/04/30 03:05:17

View File

@@ -25,9 +25,9 @@ LINK LIBRARY
NUMBER *qfib(NUMBER *n)
SEE ALSO
XXX - fill in
fact
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -43,8 +43,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: fib,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: fib,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fib,v $
##
## Under source code control: 1995/10/25 04:03:45

View File

@@ -46,7 +46,7 @@ EXAMPLE
[3] = NULL
LIMITS
The number of arguments of fprintf() is not to exceed 100.
The number of arguments of fprintf() is not to exceed 1024.
LINK LIBRARY
none
@@ -54,7 +54,7 @@ LINK LIBRARY
SEE ALSO
printf, strprintf, print
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -70,8 +70,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: fprintf,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: fprintf,v 29.4 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fprintf,v $
##
## Under source code control: 1996/03/12 22:50:41

View File

@@ -2,34 +2,34 @@ NAME
fputs - write a string to a file
SYNOPSIS
fputs(fd, data)
fputs(fd, s1, s2, ...)
TYPES
fd file
data str
fd file stream open for writing
s1, s2, ... strings
return nil
return null value
DESCRIPTION
This function writes the string found in data to the file
associated with fd.
This function writes in succession the strings s1, s2, ..., to the
file associated with fd.
EXAMPLE
; fd = fopen("/tmp/newfile", "w")
; fputs(fd, "chongo was here\n")
; fputs(fd, "chongo was", " here\n")
; fd2 = fopen("/tmp/newfile", "r")
; fgetline(fd2)
"chongo was here"
LIMITS
fd must be associated with an open file
The number of arguments is not to exceed 1024
LINK LIBRARY
none
SEE ALSO
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt
errno, fclose, feof, ferror, fflush, fgetc, fgetfile, fgetline, fgets,
files, fopen, fprintf, fputc, fseek, fsize, ftell, isfile
## Copyright (C) 1999 Landon Curt Noll
##
@@ -47,8 +47,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: fputs,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: fputs,v 29.4 2006/08/20 15:01:57 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fputs,v $
##
## Under source code control: 1995/03/04 11:33:20

View File

@@ -31,10 +31,10 @@ EXAMPLE
Error 72
LIMITS
none - XXX - is this correct?
none
LINK LIBRARY
none - XXX - is this correct?
none
SEE ALSO
fgetstr, fgetfield, fgets, fputs, fopen, files, fprintf
@@ -55,8 +55,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.4 $
## @(#) $Id: fputstr,v 29.4 2006/06/10 12:28:10 chongo Exp $
## @(#) $Revision: 29.5 $
## @(#) $Id: fputstr,v 29.5 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fputstr,v $
##
## Under source code control: 1996/04/30 03:05:18

View File

@@ -32,16 +32,16 @@ EXAMPLE
Error 10013
LIMITS
none - XXX - is this correct?
none
LINK LIBRARY
none - XXX - is this correct?
none
SEE ALSO
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -57,8 +57,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: freopen,v 29.3 2006/05/07 07:18:56 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: freopen,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/freopen,v $
##
## Under source code control: 1996/04/30 03:05:18

View File

@@ -30,15 +30,15 @@ EXAMPLE
7 a-2i word 49
LIMITS
none - XXX - is this correct?
The number of arguments is not to exceed 1024.
LINK LIBRARY
none - XXX - is this correct?
none
SEE ALSO
scan, strscan, fscanf, scanf, strscanf, printf, fprintf, strprintf
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -54,8 +54,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: fscan,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: fscan,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fscan,v $
##
## Under source code control: 1996/04/30 03:05:18

View File

@@ -121,15 +121,15 @@ EXAMPLE
"mma"
LIMITS
none - XXX - is this correct?
The number of arguments is not to exceed 1024.
LINK LIBRARY
none - XXX - is this correct?
extern int fscanfid(FILEID id, char *fmt, int count, VALUE **vals);
SEE ALSO
scanf, strscanf, printf, fprintf, strprintf, fscan, scan, strscan
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -145,8 +145,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: fscanf,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: fscanf,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fscanf,v $
##
## Under source code control: 1996/04/30 03:05:18

View File

@@ -19,7 +19,7 @@ EXAMPLE
6 .02 0
LIMITS
The number of arguments may not to exceed 100.
The number of arguments may not to exceed 1024.
LINK LIBRARY
NUMBER *qgcd(NUMBER *x1, NUMBER *x2)
@@ -27,7 +27,7 @@ LINK LIBRARY
SEE ALSO
lcm
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -43,8 +43,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: gcd,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: gcd,v 29.4 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/gcd,v $
##
## Under source code control: 1995/10/05 04:52:26

View File

@@ -29,7 +29,7 @@ EXAMPLE
2378490456
LIMITS
The number of arguments is not to exceed 100.
The number of arguments is not to exceed 1024.
LINK LIBRARY
none
@@ -37,7 +37,7 @@ LINK LIBRARY
SEE ALSO
sha, sha1, md5
## Copyright (C) 1999-2003 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -53,8 +53,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.4 $
## @(#) $Id: hash,v 29.4 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.5 $
## @(#) $Id: hash,v 29.5 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/hash,v $
##
## Under source code control: 1996/03/12 23:10:01

View File

@@ -29,7 +29,7 @@ EXAMPLE
1 4/3 18/11 48/25 0
LIMITS
The number of arguments is not to exceed 100.
The number of arguments is not to exceed 1024.
LINK LIBRARY
none
@@ -37,7 +37,7 @@ LINK LIBRARY
SEE ALSO
avg
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -53,8 +53,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: hmean,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: hmean,v 29.4 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/hmean,v $
##
## Under source code control: 1995/12/18 03:30:59

View File

@@ -56,9 +56,10 @@ LINK LIBRARY
none
SEE ALSO
append, delete, islist, list, pop, push, remove, rsearch, search, size
append, delete, islist, pop, push, remove, rsearch, search,
select, size
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -74,8 +75,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: insert,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: insert,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/insert,v $
##
## Under source code control: 1994/03/19 03:13:18

View File

@@ -34,7 +34,7 @@ LIMITS
none
LINK LIBRARY
none - XXX ???
none
SEE ALSO
blk, blocks, blkfree,
@@ -43,7 +43,7 @@ SEE ALSO
isobjtype, isodd, isprime, isrand, israndom, isreal, isrel,
issimple, issq, isstr, istype
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -59,8 +59,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: isblk,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: isblk,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/isblk,v $
##
## Under source code control: 1997/04/06 03:03:23

View File

@@ -34,7 +34,7 @@ LIMITS
none
LINK LIBRARY
none - XXX ?
none
SEE ALSO
define, undefine,
@@ -43,7 +43,7 @@ SEE ALSO
isobjtype, isodd, isprime, isrand, israndom, isreal, isrel,
issimple, issq, isstr, istype
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -59,8 +59,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: isdefined,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: isdefined,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/isdefined,v $
##
## Under source code control: 1997/04/05 14:10:17

View File

@@ -25,14 +25,15 @@ LINK LIBRARY
none
SEE ALSO
append, delete, insert, islist, pop, push, remove, rsearch,
search, size, list,
isassoc, isatty, isblk, isconfig, isdefined, iserror, iseven, isfile,
ishash, isident, isint, ismat, ismult, isnull, isnum, isobj,
isobjtype, isodd, isprime, isrand, israndom, isreal, isrel,
issimple, issq, isstr, istype
append, delete, insert, pop, push, remove, rsearch, search,
select, size,
## Copyright (C) 1999 Landon Curt Noll
isassoc, isatty, isblk, isconfig, isdefined, iserror, iseven, isfile,
ishash, isident, isint, ismat, ismult, isnull, isnum, isobj,
isobjtype, isodd, isprime, isrand, israndom, isreal, isrel,
issimple, issq, isstr, istype
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -48,8 +49,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: islist,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: islist,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/islist,v $
##
## Under source code control: 1994/03/19 03:13:19

View File

@@ -25,7 +25,7 @@ LIMITS
none
LINK LIBRARY
none - XXX ???
none
SEE ALSO
obj,
@@ -34,7 +34,7 @@ SEE ALSO
isodd, isprime, isrand, israndom, isreal, isrel,
issimple, issq, isstr, istype
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -50,8 +50,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: isobjtype,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: isobjtype,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/isobjtype,v $
##
## Under source code control: 1997/04/05 14:10:17

View File

@@ -45,13 +45,10 @@ LINK LIBRARY
FLAG zisprime(ZVALUE x) (return 1 if prime, 0 not prime, -1 if >= 2^32)
SEE ALSO
factor, lfactor, nextprime, prevprime, pfact, pix,
isassoc, isatty, isblk, isconfig, isdefined, iserror, iseven, isfile,
ishash, isident, isint, islist, ismat, ismult, isnull, isnum, isobj,
isobjtype, isodd, isrand, israndom, isreal, isrel,
issimple, issq, isstr, istype
factor, lfactor, nextcand, nextprime, prevcand, prevprime,
pfact, pix, ptest
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -67,8 +64,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: isprime,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: isprime,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/isprime,v $
##
## Under source code control: 1994/10/21 02:21:29

View File

@@ -13,8 +13,6 @@ DESCRIPTION
Determine if x is a Blum-Blum-Shub pseudo-random number generator state.
This function will return 1 if x is a file, 0 otherwise.
XXX - the interface to the Blum generator has not been not written.
EXAMPLE
; a = srandom(0)
; print israndom(a), israndom(0);
@@ -33,7 +31,7 @@ SEE ALSO
isobjtype, isodd, isprime, isrand, isreal, isrel,
issimple, issq, isstr, istype
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -49,8 +47,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: israndom,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: israndom,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/israndom,v $
##
## Under source code control: 1995/11/11 05:09:41

View File

@@ -21,7 +21,7 @@ EXAMPLE
-120 79.2 2
LIMITS
none
The number of arguments is not to exceed 1024.
LINK LIBRARY
NUMBER *qlcm(NUMBER *x1, NUMBER *x2)
@@ -29,7 +29,7 @@ LINK LIBRARY
SEE ALSO
gcd
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -45,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: lcm,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: lcm,v 29.4 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/lcm,v $
##
## Under source code control: 1995/10/05 04:52:26

View File

@@ -40,7 +40,8 @@ LINK LIBRARY
FULL zlowfactor(ZVALUE z, long count)
SEE ALSO
factor
factor, isprime, nextcand, nextprime, prevcand, prevprime,
pfact, pix, ptest
## Copyright (C) 1999-2006 Landon Curt Noll
##
@@ -58,8 +59,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.4 $
## @(#) $Id: lfactor,v 29.4 2006/06/01 11:36:02 chongo Exp $
## @(#) $Revision: 29.5 $
## @(#) $Id: lfactor,v 29.5 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/lfactor,v $
##
## Under source code control: 1995/12/18 12:34:57

View File

@@ -410,9 +410,9 @@ LINK LIBRARY
n/a
SEE ALSO
ismat, matdim, matmax, matmin, mattrans, mattrace, matsum, det, inverse,
isident, test, config, search, rsearch, reverse, copy, blkcpy, dp, cp,
randperm, sort
ismat, matdim, matmax, matmin, mattrans, mattrace, matsum, matfill,
det, inverse, isident, test, config, search, rsearch, reverse, copy,
blkcpy, dp, cp, randperm, sort
## Copyright (C) 1999-2006 Landon Curt Noll
##
@@ -430,8 +430,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.6 $
## @(#) $Id: mat,v 29.6 2006/06/11 07:25:14 chongo Exp $
## @(#) $Revision: 29.7 $
## @(#) $Id: mat,v 29.7 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/mat,v $
##
## Under source code control: 1991/07/21 04:37:22

View File

@@ -24,9 +24,11 @@ LINK LIBRARY
none
SEE ALSO
XXX - fill in
mat, ismat, matmax, matmin, mattrans, mattrace, matsum, matfill,
det, inverse, isident, test, config, search, rsearch, reverse, copy,
blkcpy, dp, cp, randperm, sort
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -42,8 +44,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: matdim,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: matdim,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/matdim,v $
##
## Under source code control: 1995/10/25 04:03:45

View File

@@ -37,9 +37,11 @@ LINK LIBRARY
none
SEE ALSO
XXX - fill in
mat, ismat, matdim, matmax, matmin, mattrans, mattrace, matsum,
det, inverse, isident, test, config, search, rsearch, reverse, copy,
blkcpy, dp, cp, randperm, sort
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -55,8 +57,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: matfill,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: matfill,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/matfill,v $
##
## Under source code control: 1995/10/25 04:03:45

View File

@@ -26,9 +26,11 @@ LINK LIBRARY
none
SEE ALSO
XXX - fill in
mat, ismat, matdim, matmin, mattrans, mattrace, matsum, matfill,
det, inverse, isident, test, config, search, rsearch, reverse, copy,
blkcpy, dp, cp, randperm, sort
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -44,8 +46,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: matmax,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: matmax,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/matmax,v $
##
## Under source code control: 1995/10/25 04:03:45

View File

@@ -26,9 +26,11 @@ LINK LIBRARY
none
SEE ALSO
XXX - fill in
mat, ismat, matdim, matmax, mattrans, mattrace, matsum, matfill,
det, inverse, isident, test, config, search, rsearch, reverse, copy,
blkcpy, dp, cp, randperm, sort
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -44,8 +46,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: matmin,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: matmin,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/matmin,v $
##
## Under source code control: 1995/10/25 04:03:45

View File

@@ -25,9 +25,11 @@ LINK LIBRARY
void matsum(MATRIX *m, VALUE *vres);
SEE ALSO
XXX - fill in
mat, ismat, matdim, matmax, matmin, mattrans, mattrace, matfill,
det, inverse, isident, test, config, search, rsearch, reverse, copy,
blkcpy, dp, cp, randperm, sort
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -43,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: matsum,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: matsum,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/matsum,v $
##
## Under source code control: 1995/10/25 04:03:46

View File

@@ -31,9 +31,11 @@ LINK LIBRARY
MATRIX *mattrans(MATRIX *m)
SEE ALSO
XXX - fill in
mat, ismat, matdim, matmax, matmin, mattrace, matsum, matfill,
det, inverse, isident, test, config, search, rsearch, reverse, copy,
blkcpy, dp, cp, randperm, sort
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -49,8 +51,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: mattrans,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: mattrans,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/mattrans,v $
##
## Under source code control: 1995/10/25 04:03:46

View File

@@ -62,7 +62,7 @@ EXAMPLE
3
LIMITS
The number of arguments is not to exceed 100.
The number of arguments is not to exceed 1024.
LINK LIBRARY
NUMBER *qmax(NUMBER *x1, NUMBER *x2)
@@ -70,7 +70,7 @@ LINK LIBRARY
SEE ALSO
max, obj
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -86,8 +86,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: max,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: max,v 29.4 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/max,v $
##
## Under source code control: 1995/10/05 04:52:27

View File

@@ -62,15 +62,15 @@ EXAMPLE
1
LIMITS
The number of arguments is not to exceed 100.
The number of arguments is not to exceed 1024.
LINK LIBRARY
NUMBER *qmin(NUMBER *x1, NUMBER *x2)
SEE ALSO
max, obj
max, obj, sum, ssq
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -86,8 +86,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: min,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: min,v 29.4 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/min,v $
##
## Under source code control: 1995/10/05 04:52:27

View File

@@ -23,6 +23,24 @@ TYPES
return number
DESCRIPTION
The expression:
x % y
is equivalent to call:
mod(x, y)
The function:
mod(x, y, rnd)
is equivalent to:
config("mod", rnd), x % y
except that the global config("mod") value does not change.
If x is real or complex and y is zero, mod(x, y, rnd) returns x.
If x is complex, mod(x, y, rnd) returns
@@ -32,18 +50,16 @@ DESCRIPTION
If x/y is an integer mod(x, y, rnd) returns zero.
If x/y is not an integer, mod(x, y, rnd) returns one of the two numbers
r for which for some integer q, x = q * v + r and abs(r) < abs(y).
Which of the two numbers is returned is controlled by rnd.
If x/y is not an integer, mod(x, y, rnd) returns one of the two
values of r for which for some integer q exists such that x = q * y + r
and abs(r) < abs(y). Which of the two values or r that is returned is
controlled by rnd.
If bit 4 of rnd is set (e.g. if 16 <= rnd < 32) abs(r) <= abs(y)/2;
this uniquely determines r if abs(r) < abs(y)/2. If bit 4 of rnd is
set and abs(r) = abs(y)/2, or if bit 4 of r is not set, the result for
r depends on rnd as in the following table:
(Blank entries indicate that the description would be complicated
and probably not of much interest.)
rnd & 15 sign of r parity of q
0 sgn(y)
@@ -63,26 +79,36 @@ DESCRIPTION
14 even if x > 0, otherwise odd
15 odd if x > 0, otherwise even
This dependence on rnd is consistent with quo(x, y, rnd) and
appr(x, y, rnd) in that for any real x and y and any integer rnd,
NOTE: Blank entries in the table above indicate that the
description would be complicated and probably not of
much interest.
x = y * quo(x, y, rnd) + mod(x, y, rnd).
mod(x, y, rnd) = x - appr(x, y, rnd)
The C language method of modulus and integer division is:
If y and rnd are fixed and mod(x, y, rnd) is to be considered as
a canonical residue of x modulo y, bits 1 and 3 of rnd should be
zero: if 0 <= rnd < 32, it is only for rnd = 0, 1, 4, 5, 16, 17,
20, or 21, that the set of possible values for mod(x, y, rnd)
form an interval of length y, and for any x1, x2,
config("quomod", 2)
config("quo", 2)
config("mod", 2)
mod(x1, y, rnd) = mod(x2, y, rnd)
This dependence on rnd is consistent with quo(x, y, rnd) and
appr(x, y, rnd) in that for any real x and y and any integer rnd,
is equivalent to:
x = y * quo(x, y, rnd) + mod(x, y, rnd).
mod(x, y, rnd) = x - appr(x, y, rnd)
x1 is congruent to x2 modulo y.
If y and rnd are fixed and mod(x, y, rnd) is to be considered as
a canonical residue of x % y, bits 1 and 3 of rnd should be
zero: if 0 <= rnd < 32, it is only for rnd = 0, 1, 4, 5, 16, 17,
20, or 21, that the set of possible values for mod(x, y, rnd)
form an interval of length y, and for any x1, x2,
This is particularly relevant when working with the ring of
integers modulo an integer y.
mod(x1, y, rnd) = mod(x2, y, rnd)
is equivalent to:
x1 is congruent to x2 modulo y.
This is particularly relevant when working with the ring of
integers modulo an integer y.
EXAMPLE
; print mod(11,5,0), mod(11,5,1), mod(-11,5,2), mod(-11,-5,3)
@@ -111,7 +137,7 @@ LINK LIBRARY
SEE ALSO
quo, quomod, //, %
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -127,8 +153,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: mod,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.5 $
## @(#) $Id: mod,v 29.5 2006/06/24 19:06:58 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/mod,v $
##
## Under source code control: 1995/09/18 02:09:31

View File

@@ -26,19 +26,19 @@ EXAMPLE
; name(f)
"/tmp/beta"
; names(files(0))
; name(files(0))
"(stdin)"
LIMITS
none
LINK LIBRARY
none - XXX ???
none
SEE ALSO
blk, fopen
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -54,8 +54,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: name,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.5 $
## @(#) $Id: name,v 29.5 2006/08/20 15:01:57 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/name,v $
##
## Under source code control: 1997/04/05 14:12:44

View File

@@ -74,9 +74,10 @@ LINK LIBRARY
ZVALUE *cand)
SEE ALSO
prevcand, ptest
factor, isprime, lfactor, nextprime, prevcand, prevprime,
pfact, pix, ptest
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -92,8 +93,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: nextcand,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: nextcand,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/nextcand,v $
##
## Under source code control: 1996/02/25 00:27:43

View File

@@ -33,9 +33,10 @@ LINK LIBRARY
FULL znprime(ZVALUE z)
SEE ALSO
prevprime
factor, isprime, lfactor, nextcand, prevcand, prevprime,
pfact, pix, ptest
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -51,8 +52,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: nextprime,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: nextprime,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/nextprime,v $
##
## Under source code control: 1995/12/18 12:34:57

View File

@@ -66,7 +66,7 @@ EXAMPLE
27
LIMITS
The number of arguments is not to exceed 100.
The number of arguments is not to exceed 1024.
LINK LIBRARY
none
@@ -74,7 +74,7 @@ LINK LIBRARY
SEE ALSO
isnull, test
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -90,8 +90,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: null,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: null,v 29.4 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/null,v $
##
## Under source code control: 1996/03/12 23:10:01

View File

@@ -35,9 +35,9 @@ LINK LIBRARY
void zperm(NUMBER x, y, *ret)
SEE ALSO
comb, fact
comb, fact, randperm
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -53,8 +53,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: perm,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: perm,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/perm,v $
##
## Under source code control: 1994/10/20 04:03:02

View File

@@ -24,9 +24,10 @@ LINK LIBRARY
void zpfact(ZVALUE z, ZVALUE *dest)
SEE ALSO
fact, lcmfact
factor, isprime, lfactor, nextcand, nextprime, prevcand, prevprime,
pix, ptest, fact, lcmfact
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -42,8 +43,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: pfact,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: pfact,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/pfact,v $
##
## Under source code control: 1995/12/18 12:34:57

View File

@@ -24,9 +24,9 @@ LINK LIBRARY
NUMBER *qpi(NUMBER *eps)
SEE ALSO
XXX - fill in
atan2
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -42,8 +42,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: pi,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: pi,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/pi,v $
##
## Under source code control: 1995/10/25 04:03:46

View File

@@ -35,9 +35,10 @@ LINK LIBRARY
FULL pix(FULL x)
SEE ALSO
XXX - fill in
factor, isprime, lfactor, nextcand, nextprime, prevcand, prevprime,
pfact, ptest
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -53,8 +54,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: pix,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: pix,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/pix,v $
##
## Under source code control: 1995/12/18 12:34:58

View File

@@ -128,15 +128,15 @@ EXAMPLE
113 113 113
LIMITS
The number of arguments is not to exceed 100
The number of arguments is not to exceed 1024
LINK LIBRARY
BOOL evalpoly(LIST *clist, LISTELEM *x, VALUE *result);
SEE ALSO
XXX - fill in
list
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -152,8 +152,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: poly,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: poly,v 29.4 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/poly,v $
##
## Under source code control: 1995/12/02 02:40:43

View File

@@ -43,9 +43,10 @@ LINK LIBRARY
none
SEE ALSO
append, delete, insert, islist, list, push, remove, rsearch, search, size
append, delete, insert, islist, push, remove, rsearch, search,
select, size
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -61,8 +62,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: pop,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: pop,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/pop,v $
##
## Under source code control: 1994/03/19 03:13:20

View File

@@ -82,9 +82,10 @@ LINK LIBRARY
ZVALUE *cand)
SEE ALSO
nextcand, ptest
factor, isprime, lfactor, nextcand, nextprime, prevprime,
pfact, pix, ptest
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -100,8 +101,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: prevcand,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: prevcand,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/prevcand,v $
##
## Under source code control: 1996/02/25 00:27:43

View File

@@ -36,9 +36,10 @@ LINK LIBRARY
FULL zpprime(ZVALUE z)
SEE ALSO
nextprime
factor, isprime, lfactor, nextcand, nextprime, prevcand,
pfact, pix, ptest
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -54,8 +55,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: prevprime,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: prevprime,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/prevprime,v $
##
## Under source code control: 1995/12/18 12:34:58

View File

@@ -118,7 +118,7 @@ EXAMPLE
LIMITS
The number of arguments of printf() is not to exceed 100.
The number of arguments of printf() is not to exceed 1024.
LINK LIBRARY
none
@@ -126,7 +126,7 @@ LINK LIBRARY
SEE ALSO
fprintf, strprintf, print
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -142,8 +142,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: printf,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: printf,v 29.4 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/printf,v $
##
## Under source code control: 1996/03/12 22:50:41

View File

@@ -35,7 +35,7 @@ LINK LIBRARY
none
SEE ALSO
XXX - fill in
fgetfield, fgetline, fgetstr
## Copyright (C) 1999-2006 Landon Curt Noll
##
@@ -53,8 +53,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.4 $
## @(#) $Id: prompt,v 29.4 2006/06/10 12:28:10 chongo Exp $
## @(#) $Revision: 29.5 $
## @(#) $Id: prompt,v 29.5 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/prompt,v $
##
## Under source code control: 1995/12/18 12:34:58

View File

@@ -126,9 +126,10 @@ LINK LIBRARY
BOOL zprimetest(ZVALUE n, long count, long skip)
SEE ALSO
isprime, prevcand, nextcand
factor, isprime, lfactor, nextcand, nextprime, prevcand, prevprime,
pfact, pix
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -144,8 +145,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: ptest,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: ptest,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/ptest,v $
##
## Under source code control: 1996/02/25 00:27:43

View File

@@ -52,9 +52,10 @@ LINK LIBRARY
none
SEE ALSO
append, delete, insert, islist, list, pop, remove, rsearch, search, size
append, delete, insert, islist, pop, remove, rsearch, search,
select, size
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -70,8 +71,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: push,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.4 $
## @(#) $Id: push,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/push,v $
##
## Under source code control: 1994/03/19 03:13:20

View File

@@ -32,8 +32,8 @@ DESCRIPTION
If x/y is an integer quo(x, y, rnd) returns x/y.
If x is real, y nonzero and x/y is not an integer, x // y returns
one of the two integers v for which abs(x/y - v) < 1. Which
integer is returned is controlled by rnd as follows:
one of the two integers v for which abs(x/y - v) < 1. Which
integer is returned is controlled by rnd as follows:
rnd sign of x/y - v Description of rounding
@@ -60,6 +60,16 @@ DESCRIPTION
half-integer, as if
rnd replaced by rnd & 15
NOTE: Blank entries in the table above indicate that the
description would be complicated and probably not of
much interest.
The C language method of modulus and integer division is:
config("quomod", 2)
config("quo", 2)
config("mod", 2)
EXAMPLE
print quo(11,5,0), quo(11,5,1), quo(-11,5,2), quo(-11,-5,3)
2 3 -2 3
@@ -93,8 +103,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.2 $
## @(#) $Id: quo,v 29.2 2000/06/07 14:02:33 chongo Exp $
## @(#) $Revision: 29.3 $
## @(#) $Id: quo,v 29.3 2006/06/24 19:06:58 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/quo,v $
##
## Under source code control: 1995/09/18 04:01:44

View File

@@ -1,47 +1,105 @@
NAME
quomod - assign quotient and remainder to two variables
quomod - assign quotient and remainder to two lvalues
SYNOPSIS
quomod(x, y, q, r)
quomod(x, y, Q, R [, rnd])
TYPES
x real
y real
q any
r any
Q null-or-real-valued lvalue with assign-to permission
R null-or-real-valued lvalue with assign-to permission
rnd nonnegative integer, defaults to config("quomod")
return real
return 0 or 1
DESCRIPTION
Returns 0 or 1 according as x is or is not a multiple of y.
Let x = q * y + r where q is an integer and 0 <= r < y
This function assigns the values q and r to the variables
Q and R. If x >= 0, the results for Q and R are the same as
those given by Q = x // y, R = x % y.
If y is nonzero and x/y is an integer q, this function assigns
q to Q and zero to R, and returns zero.
If y is zero, zero is assigned to Q, x to R and 0 or 1 returned
according as x is zero or nonzero.
In the remaining case, y nonzero and x/y not an intger, there
are two pairs (q,r) for which x = q * y + r, q is an integer, and
abs(r) < abs(y). Depending on the low 5 bits of rnd, the q and r
of one of these pairs will be assigned to Q and R respectively,
and the number 1 returned. The effects of rnd can be described in
terms of the way q is related to x/y, e.g. by rounding down,
rounding towards zero, rounding to a nearest integeri, etc. or
by properties of the remainder r, e.g. positive, negative,
smallest, etc. The effects of the most commonly used values of
rnd are described in the following table:
rnd q r
0 round down. q = floor(x/y) same sign as y
1 round up, q = ceil(x/y) opposite sign to y
2 round to zero, q = int(x/y) same sign as x, r = y * frac(x/y)
3 round from zero oppsite sign to x
4 positive
5 negative
6 same sign as x/y
7 opposite sigh to x/y
8 to nearest even
9 to nearest odd
For 16 <= rnd < 32, the rounding is to the nearest integer and r
is the smallest (in absolute value) remainder except when x/y is
halfway between consecutive integers, in which case the rounding
is as given by the 4 low bits of rnd. Using rnd = 24 gives the
cpmmonly used principle of rounding: round to the nearest integer,
but take the even integer when there are two equally close integers.
For more detail on the effects of rnd for values other than those
listed above, see "help quo" and "help mod".
In all cases, the values assigned to Q and R by quomod(x, y, Q, R, rnd)
are the same as those given by Q = quo(x,y,rnd), R = mod(x,y,rnd).
If config("quo") == rnd, Q is also given by quo(x,y) or x // y.
If config("mod") == rnd, R is also given by mod(x,y) or x % y.
The rounding used by the C language for x / y and x % y corresponds
to rnd = 2.
An error values is returned and the values of Q and R are not changed
if Q and R are not both lvalues, or if the current value of any
argument is not as specified above, or if Q or R has no-assign-to
prptection, e.g. after protect(Q,1).
XXX - need to document relationship with "quomod" config value
EXAMPLE
; global u, v;
; global mat M[2];
; print quomod(13,5,u,v), u, v, quomod(15.6,5.2,M[0],M[1]), M[0], M[1];
; 1 2 3 0 3 0
1 2 3 0 3 0
; A = assoc();
; print quomod(13, 5, A[1], A[2]), A[1], A[2]
; 1 2 3
XXX - need examples of how the "quomod" config file changes results
; print quomod(10, -3, u, v), u, v;
1 -4 -2
; print quomod(10, -3, u, v, 0), u, v;
1 -4 -2
; print quomod(10, -3, u, v, 1), u, v;
1 -3 1
; print quomod(10, -3, u, v, 2), u, v;
1 -3 1
; print quomod(-10, -3, u, v, 2), u, v;
1 3 -1
LIMITS
y > 0
rnd < 2^31
LINK LIBRARY
BOOL qquomod(NUMBER *q1, NUMBER *q2, NUMBER **retqdiv, NUMBER **retqmod)
BOOL qquomod(NUMBER *q1, NUMBER *q2, NUMBER **quo, NUMBER **mod)
SEE ALSO
//, %
//, %, quo, mod, floor. ceil, int. frac
## Copyright (C) 1999 Landon Curt Noll
## Copyright (C) 1999-2006 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -57,8 +115,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: quomod,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Revision: 29.7 $
## @(#) $Id: quomod,v 29.7 2006/08/20 15:01:57 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/quomod,v $
##
## Under source code control: 1995/05/07 03:17:03

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