Compare commits

..

17 Commits

Author SHA1 Message Date
Landon Curt Noll
7d0cc52afe Release calc version 2.12.1.10 2017-05-21 15:38:49 -07:00
Landon Curt Noll
2441df7fdc Release calc version 2.12.1.9 2017-05-21 15:38:49 -07:00
Landon Curt Noll
5c565a7cea Release calc version 2.12.1.7 2017-05-21 15:38:49 -07:00
Landon Curt Noll
810e541281 Release calc version 2.12.1.8 2017-05-21 15:38:49 -07:00
Landon Curt Noll
ee30d787ea Release calc version 2.12.1.6 2017-05-21 15:38:48 -07:00
Landon Curt Noll
4e92927183 Release calc version 2.12.1.5 2017-05-21 15:38:48 -07:00
Landon Curt Noll
fb4a03c1f1 Release calc version 2.12.1.4 2017-05-21 15:38:48 -07:00
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
Landon Curt Noll
bd3086138b Release calc version 2.12.0.3 2017-05-21 15:38:46 -07:00
Landon Curt Noll
9d62873a02 Release calc version 2.12.0.2 2017-05-21 15:38:46 -07:00
215 changed files with 8565 additions and 4440 deletions

72
BUGS
View File

@@ -68,10 +68,6 @@ of a context diff patch).
Known bugs: Known bugs:
The stoponerror() facility does not seem to work, or perhaps
the stoponerror help file is incorrect. The stoponerror help file
lacks examples because of this problem.
We are sure some more bugs exist. When you find them, please let We are sure some more bugs exist. When you find them, please let
us know! See the above for details on how to report and were to us know! See the above for details on how to report and were to
EMail your bug reports and hopefully patches to fix them. EMail your bug reports and hopefully patches to fix them.
@@ -84,6 +80,25 @@ mis-features in calc:
work better. The following is a list of mis-features that should be work better. The following is a list of mis-features that should be
addressed and improved someday. addressed and improved someday.
* When statement is of the form { ... }, the leading { MUST BE ON
THE SAME LINE as the if, for, while or do keyword.
This works as expected:
if (expr) {
...
}
However this WILL NOT WORK AS EXPECTED:
if (expr)
{
...
}
This needs to be changed. See also "help statement", "help unexpected",
and "help todo".
* The chi.cal resource file does not work well with odd degrees * The chi.cal resource file does not work well with odd degrees
of freedom. Can someone improve this algorithm? of freedom. Can someone improve this algorithm?
@@ -114,51 +129,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 to fail the regression test. The work-a-round is to compile with -O
or to use gcc-2.96 or later. or to use gcc-2.96 or later.
This bug has been observed on the Sparc and the PowerPC machine.
On the PowerPC with gcc-2.95 when compiled with -O2, the following
patch seems to help:
*** zfunc.c.orig Fri Feb 23 18:18:39 2001
--- zfunc.c Fri Feb 23 18:39:33 2001
***************
*** 1481,1487 ****
{
HALF *a, *A, *b, *a0, u;
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
! FULL d, e, f, g, h, s, t, x, topbit;
int remsign;
BOOL up, onebit;
ZVALUE sqrt;
--- 1481,1488 ----
{
HALF *a, *A, *b, *a0, u;
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
! volatile FULL d;
! FULL e, f, g, h, s, t, x, topbit;
int remsign;
BOOL up, onebit;
ZVALUE sqrt;
*** zmath.c 2000/06/07 14:02:13 29.2
--- zmath.c 2001/03/13 19:47:03
***************
*** 1608,1614 ****
void
zbitvalue(long n, ZVALUE *res)
{
! ZVALUE z;
if (n < 0) n = 0;
z.sign = 0;
--- 1608,1614 ----
void
zbitvalue(long n, ZVALUE *res)
{
! volatile ZVALUE z;
if (n < 0) n = 0;
z.sign = 0;
* There are problems compiling calc on the sparcv9 under 64 bit * There are problems compiling calc on the sparcv9 under 64 bit
Solaris. On that platform, gcc-2.96 is able to compile calc, but Solaris. On that platform, gcc-2.96 is able to compile calc, but
calc dumps core very early on in startup. It is said that sparcv9 calc dumps core very early on in startup. It is said that sparcv9
@@ -190,8 +160,8 @@ Problems with old systems that have known work-a-rounds:
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.24 $ ## @(#) $Revision: 29.26 $
## @(#) $Id: BUGS,v 29.24 2006/05/21 07:54:13 chongo Exp $ ## @(#) $Id: BUGS,v 29.26 2007/01/03 21:26:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
## ##
## Under source code control: 1994/03/18 14:06:13 ## Under source code control: 1994/03/18 14:06:13

687
CHANGES
View File

@@ -1,4 +1,153 @@
The following are the changes from calc version 2.12.0 to date: The following are the changes from calc version 2.12.1.8 to date:
Fixed calc cscripts that contained comments that were not valid calc
comments. Improved calc comment documentation in "help unexpected"
to help other avoid similar mistakes. Calc comments are of the form:
/* c style comments */
/*
* multi-line
* commentts
*/
## two or more #-signs
### in a row
### Note that # along is a calc uniary and binary operator
Added "help pound" or "help #' to document the # operator, comments,
and the first line of cscript files.
Documented these help commands in "help help":
help ->
help *
help .
help %
help //
help #
The usage help file is now formed from the contents of the calc man page.
So "help usage" prints the version of the calc man page. Added ${COL}
makefile symbol to support the formation of the calc.usage file from
calc.1 via the CALCPAGER (less).
The "help calc" command is now equivalent to "help help".
The "help define" command is now equivalent to "help command".
Fixed calc command line usage message.
Fixed missing README.src file in RPM src and tgz src tarball.
Removed HAVE_SNPRINTF test in version.c. We now assume that
all systems come with the standard snprintf() library function.
Make does not assume that DONT_HAVE_VSPRINTF must be defined in
order to test for varargs (via have_varvs.c). Instead it uses the
${HAVE_VSPRINTF} to determine if the vsprintf() and vsnprintf()
should be tested to assumed to exist or not exist.
Tests for the existence of vsprintf() now also require the existence
of vsnprintf(). Test for the existence of vsnprintf() now also
require the existence of vsprintf().
The #define CALC_SIZE_T was never used except when memmove() was
not found. This symbol was renamed to MEMMOVE_SIZE_T. Calc
requires that size_t must be a known type.
Calc and cscripts are installed mode 0755 instead of 0555 to
make rpmlint happy.
The following are the changes from calc version 2.12.1.6 to 2.12.1.7:
Added the calc builtin function, usertime(), to return the amount of
user CPU time used by the current process. Unlike the old runtime()
builtin, the CPU time reported for long running processes will not
wrap around to 0 after only a few months.
Added the calc builtin function, systime(), to return the amount of
kernel CPU time used by the current process.
The runtime() builtin function now returns the total amount of CPU
time used by the current process. This time includes both user mode
and kernel mode time. Unlike the old runtime() builtin, the builtin
includes time spent executing operating system code on behalf of
the current process.
Fixed runtime() so that the CPU time reported for long running
processes will wrap around to 0 for a long time.
Added config("hz") to return the clock tick rate. This is
a read-only configuration value.
Added regression tests for recently added config() parameters.
Fixed the #define symbols that were created in have_strdup.h.
Previously this file looked as if have_rusage.h has been
included already.
Restored the function of "help" (without any args) printing the
default help file. Thanks for this fix goes to Silvan Minghetti
<bullet at users dot sourceforge dot net>.
Fixed a problem where some old MS environments failed some of the
regression tests because "read -once foo.cal" was not behaving
correctly due to how the _fullpath() was being called. Thanks for
this fix goes to Anatoly <notexistent-anb at yandex dot ru>.
Documented the mis-feature about how calc parses if, for, while
and do statements in an unexpected way. For example:
This works as expected:
if (expr) {
...
}
However this WILL NOT WORK AS EXPECTED:
if (expr)
{
...
}
because calc will parse the if being terminated by
an empty statement followed by a
if (expr) ;
{
...
}
See also "help statement", "help unexpected", "help todo", and
"help bugs".
The following are the changes from calc version 2.12.1 to 2.12.1.5:
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.
Fixed a problem with the make chk awk script which failed under
OS X 10.4.7.
Fixed a few minor variables that were not set to default values in
lower level Makefiles.
Fixed a reference to a non-existent make variable in HOWTO.INSTALL.
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 Fixed ellip.cal to deal with a calc syntax change that happened
many ages ago but was never applied to this file until now. many ages ago but was never applied to this file until now.
@@ -38,8 +187,8 @@ The following are the changes from calc version 2.12.0 to date:
etc.) for VT100 terminals and terminal window emulators (i.e., xterm, etc.) for VT100 terminals and terminal window emulators (i.e., xterm,
Apple OS/X Terminal, etc.) that support them. For example: Apple OS/X Terminal, etc.) that support them. For example:
read screen ; read screen
print green:"This is green. ":red:"This is red.":black ; print green:"This is green. ":red:"This is red.":black
Fixed a bug where too many open files returned E_FOPEN3. Now Fixed a bug where too many open files returned E_FOPEN3. Now
a new error symbol F_MANYOPEN is used for too many open files. a new error symbol F_MANYOPEN is used for too many open files.
@@ -109,42 +258,269 @@ The following are the changes from calc version 2.12.0 to date:
<ebowen at une dot edu dot au>, the dotest evaluates individual <ebowen at une dot edu dot au>, the dotest evaluates individual
lines from a file. The dotest() function takes 1 to 3 arguments: 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 Search along CALCPATH for dotest_file, which contains lines that
should evaluate to 1. Comment lines and empty lines are ignored. should evaluate to 1. Comment lines and empty lines are ignored.
Comment lines should use ## instead of the multi like /* ... */ Comment lines should use ## instead of the multi like /* ... */
because lines are evaluated one line at a time. 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 Assign the code number that is to be printed at the start of
each non-error line and after **** in each error line. each non-error line and after **** in each error line.
The default code number is 999. The default code number is 999.
dotest_maxcond dotest_maxcond
The maximum number of error conditions that may be detected. The maximum number of error conditions that may be detected.
An error condition is not a sign of a problem, in some cases An error condition is not a sign of a problem, in some cases
a line deliberately forces an error condition. A value of -1, a line deliberately forces an error condition. A value of -1,
the default, implies a maximum of 2147483647. the default, implies a maximum of 2147483647.
Global variables and functions must be declared ahead of time because Global variables and functions must be declared ahead of time because
the dotest scope of evaluation is a line at a time. For example: the dotest scope of evaluation is a line at a time. For example:
read dotest.cal ; read dotest.cal
read set8700.cal ; read set8700.cal
dotest("set8700.line"); ; dotest("set8700.line");
Updated the todo / wish list items. The top priority now is to Updated the todo / wish list items. The top priority now is to
convert calc to GNU autoconf / configure to build the calc. convert calc to GNU autoconf / configure to build the calc.
help todo ; help todo
Added missing help file for the stoponerror() builtin. Added missing help file for the stoponerror() builtin.
Corrected and improved the help documentation for factor and lfactor.
Fixed a problem where some error messages that should have been
written to a file or string, went to stderr instead. This bug was
fixed by Ernest Bowen <ebowen at une dot edu dot au>.
Corrected the documentation relating to the calc -c command line option.
The -c relates to scan/parse errors only, not execution errors.
Corrected a stack overflow problem where the math_fmt() in zio.c
could be induced to overflow the stack. This problem was independently
reported by Chew Keong Tan of Secunia Research <vuln at secunia dot com>.
Corrected a stack overflow problem where the scanerror() in token.c
could be induced to overflow the stack by a malformed token.
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 long bindings
config lines.
Made listsort() in listfunc.c and matsort() matfunc.c more robust
against sorting of impossibly huge lists and matrices.
Warnings about an undefining a builtin or undefined function, a
constant before the comma operator, and an unterminated comment is
now processed by scanerrors (not simply written directly to stderr).
These warnings file and line number in which the "error" occurred
as well as a more precise message than before. If using -c on the
calc command line or if stoponerror(-1), then assuming there are
no other compile errors, only the unterminated comment will stop
completion of the function being defined.
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.
Improved the documentation of the mul2, sq2, pow2, and redc2 config
parameters in help/config.
Added config("baseb"), a read-only configuration value to return
the number of bits in the fundamental base in which calculations
are performed. This is a read-only configuration value.
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.
Improved the error message when && is used as a prefix operator.
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
in the past would result in improper configuration of internal
calc algorithms. Changed cal/test4100.cal to use the minimal
value of 2 for "pow2", and "redc2".
Changed the default values for the following config() parameters:
config("mul2") == 1780
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:
cal/alg_config.cal
Regarding the alg_config.cal resource file:
The best_mul2() function returns the optimal value of config("mul2").
The best_sq2() function returns the optimal value of config("sq2").
The best_pow2() function returns the optimal value of config("pow2").
The other functions are just support functions.
By design, best_mul2(), best_sq2(), and best_pow2() take a few
minutes to run. These functions increase the number of times a
given computational loop is executed until a minimum amount of CPU
time is consumed. To watch these functions progress, one can set
the config("user_debug") value.
Here is a suggested way to use the alg_config.cal resource file:
; read alg_config
; config("user_debug",2),;
; best_mul2(); best_sq2(); best_pow2();
; best_mul2(); best_sq2(); best_pow2();
; best_mul2(); best_sq2(); best_pow2();
NOTE: It is perfectly normal for the optimal value returned
to differ slightly from run to run. Slight variations due to
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.
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: The following are the changes from calc version 2.11.10.1 to 2.11.11:
@@ -291,6 +667,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 that was reported for the PowerMac G5 2GHz MacOS 10.3 by
Guillaume VERGNAUD <vergnaud at via dot ecp dot fr>. 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: The following are the changes from calc version 2.11.9 to 2.11.9.3:
@@ -669,7 +1048,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 For example when forming the calc rpm, the Makefile is called with
T=$RPM_BUILD_ROOT. If $T is empty, calc is installed under /. 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 level makefile. The calc.spec will use a make install rule
with T=$RPM_BUILD_ROOT. with T=$RPM_BUILD_ROOT.
@@ -1060,11 +1439,11 @@ The following are the changes from calc version 2.11.3t0 to 2.11.4:
files may be referred to in succession by separating their names files may be referred to in succession by separating their names
by whitespace. For example: by whitespace. For example:
> read alpha beta gamma; ; read alpha beta gamma;
does essentially the same as: does essentially the same as:
> read alpha; read beta; read gamma; ; read alpha; read beta; read gamma;
This is convenient for commands like: This is convenient for commands like:
@@ -1089,7 +1468,7 @@ The following are the changes from calc version 2.11.3t0 to 2.11.4:
multiple read statement, -once applies only to the next named file. multiple read statement, -once applies only to the next named file.
For example For example
> read -once alpha beta -once gamma; ; read -once alpha beta -once gamma;
will read alpha and gamma only if they have not already been read, will read alpha and gamma only if they have not already been read,
but in any case, will read beta. but in any case, will read beta.
@@ -1097,7 +1476,7 @@ The following are the changes from calc version 2.11.3t0 to 2.11.4:
(8) A fault in the programming for the cd command has been corrected (8) A fault in the programming for the cd command has been corrected
so that specifying a directory by a string constant will work. E.g: so that specifying a directory by a string constant will work. E.g:
> cd "my work" ; cd "my work"
should work if the current directory has a directory with name "my work". should work if the current directory has a directory with name "my work".
@@ -1157,17 +1536,17 @@ The following are the changes from calc version 2.11.3t0 to 2.11.4:
(16) "global" and "local" may now be used in expressions. For example: (16) "global" and "local" may now be used in expressions. For example:
> for (local i = 0; i < 5; i++) print i^2; ; for (local i = 0; i < 5; i++) print i^2;
is now acceptable, as is: is now acceptable, as is:
> define f(x = global x) = (global x = x)^2; ; define f(x = global x) = (global x = x)^2;
which breaks wise programming rules and would probably better be handled which breaks wise programming rules and would probably better be handled
by something like: by something like:
> global x ; global x
> define f(t = x) = (x = t)^2; ; define f(t = x) = (x = t)^2;
Both definitions produce the same code for f. For non-null t, f(t) Both definitions produce the same code for f. For non-null t, f(t)
returns t^2 and assigns the value of t to x; f() and f(t) with null t returns t^2 and assigns the value of t to x; f() and f(t) with null t
@@ -1185,11 +1564,11 @@ The following are the changes from calc version 2.11.3t0 to 2.11.4:
either 32 or 64-bit longs. In setting such components, the arguments either 32 or 64-bit longs. In setting such components, the arguments
are now to less than 2^31. Before this change: are now to less than 2^31. Before this change:
> config("mul2", 2^32 + 3) ; config("mul2", 2^32 + 3)
would be accepted on a 64-bit machine but result in the same as: would be accepted on a 64-bit machine but result in the same as:
> config("mul2", 3) ; config("mul2", 3)
The following are the changes from calc version 2.11.2t0 to 2.11.2t1.0: The following are the changes from calc version 2.11.2t0 to 2.11.2t1.0:
@@ -1428,9 +1807,9 @@ The following are the changes from calc version 2.11.0t10 to 2.11.0t11:
The power(a, b, epsilon) builtin will return a "too-large result" The power(a, b, epsilon) builtin will return a "too-large result"
if an estimate indicates that the result will have absolute value if an estimate indicates that the result will have absolute value
> 2^2^30 * epsilon. Otherwise the evaluation will be attempted that is > 2^2^30 * epsilon. Otherwise the evaluation will be
but may fail due to shortage of memory or may require a long attempted but may fail due to shortage of memory or may require
runtime if the result will be very large. a long runtime if the result will be very large.
Changes have been made to the algorithms used for some special Changes have been made to the algorithms used for some special
functions sinh(), cosh(), tanh(), sin(), cos(), etc., that make functions sinh(), cosh(), tanh(), sin(), cos(), etc., that make
@@ -2327,8 +2706,6 @@ The following are the changes from calc version 2.10.3t5.38 to 2.11.3t5.46:
into a single section. into a single section.
The following are the changes from calc version 2.10.3t5.34 to 2.10.3t5.37: The following are the changes from calc version 2.10.3t5.34 to 2.10.3t5.37:
Per request from David I Bell, the README line: Per request from David I Bell, the README line:
@@ -2466,10 +2843,10 @@ The following are the changes from calc version 2.10.3t5.34 to 2.10.3t5.37:
of links to the occurrence of that argument that is being referred to. of links to the occurrence of that argument that is being referred to.
For example, supposing "abc" has not been used earlier: For example, supposing "abc" has not been used earlier:
> A = "abc" ; A = "abc"
> links(A) ; links(A)
2 2
> links(A) ; links(A)
1 1
The two links in the first call are to A and the current "oldvalue"; The two links in the first call are to A and the current "oldvalue";
@@ -2764,11 +3141,11 @@ The following are the changes from calc version 2.10.3t5.34 to 2.10.3t5.37:
(30) Although it is not illegal, it seems pointless to use a comma operator (30) Although it is not illegal, it seems pointless to use a comma operator
with a constant or simple variable as in with a constant or simple variable as in
> 2 * 3,14159 ; 2 * 3,14159
14159 14159
> a = 4; b = 5; ; a = 4; b = 5;
> A = (a , b + 2); ; A = (a , b + 2);
> A ; A
7 7
I have added a few lines to addop.c so that when this occurs a I have added a few lines to addop.c so that when this occurs a
@@ -2799,27 +3176,27 @@ The following are the changes from calc version 2.10.3t5.34 to 2.10.3t5.37:
Here is a demo: Here is a demo:
> global a; ; global a;
> ;
> define f(x) {local i = x^2; a++; ; define f(x) {local i = x^2; a++;
>> if (x > 5) quit "Too large!"; return i;} ;; if (x > 5) quit "Too large!"; return i;}
f() defined f() defined
> define g(x) = f(x) + f(2*x); ; define g(x) = f(x) + f(2*x);
g() defined g() defined
> g(2) ; g(2)
20 20
> g(3) ; g(3)
Too large! Too large!
"f": line 3 "f": line 3
"g": line 0 "g": line 0
"*": line 6 "*": line 6
> eval("g(3)") ; eval("g(3)")
Too large! Too large!
"f": line 3 "f": line 3
"g": line 0 "g": line 0
"**": line 1 "**": line 1
"*": line 7 "*": line 7
> a ; a
6 6
(32) I've made several small changes like removing (32) I've made several small changes like removing
@@ -2865,14 +3242,14 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
a variable as in p = &var, and then *p in expressions has a variable as in p = &var, and then *p in expressions has
the same effect as var. Here is a simple example of their use: the same effect as var. Here is a simple example of their use:
> define s(L) {local v=0; while (size(L)) v+= *pop(L);return v;} ; define s(L) {local v=0; while (size(L)) v+= *pop(L);return v;}
s() defined s() defined
> global a = 1, b = 2; ; global a = 1, b = 2;
> L = list(&a, &b); ; L = list(&a, &b);
> print s(L) ; print s(L)
3 3
> b = 3; ; b = 3;
> print s(L) ; print s(L)
4 4
Octet-pointers, number-pointers, and string-pointers in Octet-pointers, number-pointers, and string-pointers in
@@ -2884,11 +3261,11 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
Some arithmetic operations has been defined for corresponding Some arithmetic operations has been defined for corresponding
C operations. For example: C operations. For example:
> A = mat[4]; ; A = mat[4];
> p = &A[0]; ; p = &A[0];
> *(p+2) == A[2] ; *(p+2) == A[2]
> ++p ; ++p
> *p == A[1] ; *p == A[1]
There is at present no protection against "illegal" use of & There is at present no protection against "illegal" use of &
and *, e.g. if one attempts here to assign a value to *(p+5), and *, e.g. if one attempts here to assign a value to *(p+5),
@@ -2901,28 +3278,28 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
X; in effect X is an address and *X is the value at X. X; in effect X is an address and *X is the value at X.
Added isptr(p) builtin to return 0 is p is not a pointer, Added isptr(p) builtin to return 0 is p is not a pointer,
>0 if it is a pointer. The value of isptr(p) comes from the and >0 if it is a pointer. The value of isptr(p) comes from
V_XYZ #define (see the top of value.h) of the value to which the V_XYZ #define (see the top of value.h) of the value to
p points. which p points.
To allow & to be used as a C-like address operator, use of it To allow & to be used as a C-like address operator, use of it
has been dropped in calls to user-defined functions. For the has been dropped in calls to user-defined functions. For the
time being I have replaced it by the back-quote `. For example: time being I have replaced it by the back-quote `. For example:
> global a ; global a
> define f(a,b) = a = b ; define f(a,b) = a = b
> f(&a,5) ; f(&a,5)
> print a ; print a
0 0
> f(`a,5) ; f(`a,5)
> print a ; print a
5 5
However, one may use & in a similar way as in: However, one may use & in a similar way as in:
> define g(a,b) = *a = b ; define g(a,b) = *a = b
> g(&a, 7) ; g(&a, 7)
> print a ; print a
7 7
There is no hashvalue for pointers. Thus, like error values, There is no hashvalue for pointers. Thus, like error values,
@@ -2930,38 +3307,38 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
The -> also works in calc. For example: The -> also works in calc. For example:
> obj xy {x,y} ; obj xy {x,y}
> obj uvw {u, v, w} ; obj uvw {u, v, w}
> obj xy A = {1,2} ; obj xy A = {1,2}
> obj uvw B = {3,4,5} ; obj uvw B = {3,4,5}
> p = &A ; p = &A
> q = &B ; q = &B
> p->x ; p->x
1 1
> p->y = 6 ; p->y = 6
> A ; A
obj xy {1, 6} obj xy {1, 6}
> q -> u ; q -> u
3 3
> p->y = q ; p->y = q
> A ; A
obj xy {1, v-ptr: 1400474c0} obj xy {1, v-ptr: 1400474c0}
> p->y->u ; p->y->u
3 3
> p->y->u = 7 ; p->y->u = 7
> B ; B
obj uvw {7, 4, 5} obj uvw {7, 4, 5}
> p -> y = p ; p -> y = p
> A ; A
obj xy {1, v-ptr: 140047490} obj xy {1, v-ptr: 140047490}
> p -> y -> x ; p -> y -> x
1 1
> p->y->y ; p->y->y
v-ptr: 140047490 v-ptr: 140047490
> p->y->y-> x ; p->y->y-> x
1 1
> p->y->y->x = 8 ; p->y->y->x = 8
> A ; A
obj xy {8, v-ptr: 140047490} obj xy {8, v-ptr: 140047490}
@@ -2989,14 +3366,14 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
The prior method calc has used for handling "constants" amounted The prior method calc has used for handling "constants" amounted
to leakage. After: to leakage. After:
> define f(x) = 27 + x; ; define f(x) = 27 + x;
> a = 27; ; a = 27;
It is of course necessary for the constant 27 to be stored, but It is of course necessary for the constant 27 to be stored, but
if one now redefines f and a by: if one now redefines f and a by:
> define f(x) = 45 + x; ; define f(x) = 45 + x;
> a = 45; ; a = 45;
There seems little point in retaining 27 as a constant and There seems little point in retaining 27 as a constant and
therefore using up memory. If this example seems trivial, therefore using up memory. If this example seems trivial,
@@ -3078,16 +3455,16 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
The "." value: The "." value:
> 2 + 2 ; 2 + 2
4 4
> . ; .
4 4
can now be treated as an unnamed variable. For example: can now be treated as an unnamed variable. For example:
> mat x[3,3]={1,2,3,4,5,6,7,8,9} ; mat x[3,3]={1,2,3,4,5,6,7,8,9}
> x ; x
> print .[1,2] ; print .[1,2]
6 6
(9) for a list L defining L[i] to be same as L[[i]] (9) for a list L defining L[i] to be same as L[[i]]
@@ -3124,18 +3501,18 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
For example: For example:
> A = list(1,2,4); ; A = list(1,2,4);
> B = mat[2,2] = {5,6,7,8}; ; B = mat[2,2] = {5,6,7,8};
> define f(x) = (x ? A : B)[[1]]; ; define f(x) = (x ? A : B)[[1]];
> print f(1), f(0) ; print f(1), f(0)
2 6 2 6
> obj xy {x,y} ; obj xy {x,y}
> C = obj xy = {4,5} ; C = obj xy = {4,5}
> p = &C ; p = &C
> *p.x ; *p.x
Not indexing matrix or object Not indexing matrix or object
> (*p).x ; (*p).x
4 4
(14) swap(a,b) now permits swapping of octets in the same or different (14) swap(a,b) now permits swapping of octets in the same or different
@@ -3143,10 +3520,10 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
For example: For example:
> A = blk() = {1,2,3} ; A = blk() = {1,2,3}
> B = blk() = {4,5,6} ; B = blk() = {4,5,6}
> swap(A[0], B[2]) ; swap(A[0], B[2])
> A ; A
chunksize = 256, maxsize = 256, datalen = 3 chunksize = 256, maxsize = 256, datalen = 3
060203 060203
@@ -3282,12 +3659,12 @@ The following are the changes from calc version 2.10.3t5.11 to 2.10.3t5.27:
Blocks will expand when required by the copy() builtin function: Blocks will expand when required by the copy() builtin function:
> f = fopen("help/full", "r") ; f = fopen("help/full", "r")
> B = blk() ; B = blk()
> B ; B
chunksize = 256, maxsize = 256, datalen = 0 chunksize = 256, maxsize = 256, datalen = 0
> copy(B, f) ; copy(B, f)
> B ; B
chunksize = 256, maxsize = 310272, datalen = 310084 chunksize = 256, maxsize = 310272, datalen = 310084
2a2a2a2a2a2a2a2a2a2a2a2a2a0a2a20696e74726f0a2a2a2a2a2a2a2a2a... 2a2a2a2a2a2a2a2a2a2a2a2a2a0a2a20696e74726f0a2a2a2a2a2a2a2a2a...
@@ -4207,11 +4584,11 @@ The following are the changes from calc version 2.10.2t25 to 2.10.2t32:
"global a" is read in the last line. Thus one may now use the "global a" is read in the last line. Thus one may now use the
same name in several "static" areas as in: same name in several "static" areas as in:
> static a = 10; ; static a = 10;
> define f(x) = a + x; ; define f(x) = a + x;
> static a = 20; ; static a = 20;
> define g(x) = a + x; ; define g(x) = a + x;
> global a; ; global a;
The first "a" exists only for the definition of f(); the second The first "a" exists only for the definition of f(); the second
"a" only for the definition of g(). At the end one has only "a" only for the definition of g(). At the end one has only
@@ -4220,10 +4597,10 @@ The following are the changes from calc version 2.10.2t25 to 2.10.2t32:
Ending the scope of a static variable in this way is consistent Ending the scope of a static variable in this way is consistent
with the normal use of static variables as in: with the normal use of static variables as in:
> static a = 10; ; static a = 10;
> define f(x) {static a = 20; return a++ + x;} ; define f(x) {static a = 20; return a++ + x;}
> define g(x) = a + x; ; define g(x) = a + x;
> global a; ; global a;
The scope of the first "a" is temporarily interrupted by the The scope of the first "a" is temporarily interrupted by the
"static a" in the second line; the second "a" remains active "static a" in the second line; the second "a" remains active
@@ -4239,12 +4616,12 @@ The following are the changes from calc version 2.10.2t25 to 2.10.2t32:
to me that its use must end the scope of any static "a". Thus to me that its use must end the scope of any static "a". Thus
the changes I introduce are such that after: the changes I introduce are such that after:
> global a = 10; ; global a = 10;
> define f(x) = a + x; ; define f(x) = a + x;
> static a = 20; ; static a = 20;
> define g(x) = a + x; ; define g(x) = a + x;
> define h(x) {global a = 30; return a + x;} ; define h(x) {global a = 30; return a + x;}
> define i(x) = a + x; ; define i(x) = a + x;
g(x) will always return 20 + x, and until h(x) has been called, g(x) will always return 20 + x, and until h(x) has been called,
f(x) and i(x) will return 10 + x; when h(x) is called, it f(x) and i(x) will return 10 + x; when h(x) is called, it
@@ -4391,8 +4768,8 @@ The following are the changes from calc version 2.10.2t4 to 2.10.2t24:
The show keyword is now a statement instead of a command: The show keyword is now a statement instead of a command:
> define demo() {local f = open("foo", "w"); show files; fclose(f);} ; define demo() {local f = open("foo", "w"); show files; fclose(f);}
> demo() ; demo()
Added a new trace option for display of links to real and complex Added a new trace option for display of links to real and complex
numbers. This is activated by config("trace", 4). The printing of numbers. This is activated by config("trace", 4). The printing of
@@ -4871,13 +5248,13 @@ The following are the changes from calc version 2.10.1t21 to 2.10.2t0:
The param(n) builtin, then n > 0, may be used as an lvalue: The param(n) builtin, then n > 0, may be used as an lvalue:
> define g() = (param(2) = param(1)); ; define g() = (param(2) = param(1));
> define h() = (param(1)++, param(2)--); ; define h() = (param(1)++, param(2)--);
> u = 5 ; u = 5
> v = 10 ; v = 10
> print g(u, &v), u, v; ; print g(u, &v), u, v;
5 5 5 5 5 5
> print h(&u, &v), u, v; ; print h(&u, &v), u, v;
5 6 4 5 6 4
Missing args now evaluate to null as in: Missing args now evaluate to null as in:
@@ -5238,9 +5615,9 @@ The following are the changes from calc version 2.10.0t13 to 2.10.1t10:
C-style arbitrary precision calculator (version 2.10.1t3) C-style arbitrary precision calculator (version 2.10.1t3)
[Type "exit" to exit, or "help" for help.] [Type "exit" to exit, or "help" for help.]
> files(5) ; files(5)
FILE 5 "descriptor[5]" (unknown_mode, pos 0) FILE 5 "descriptor[5]" (unknown_mode, pos 0)
> fgetline(files(5)) ; fgetline(files(5))
"A line of text in the file on descriptor 5" "A line of text in the file on descriptor 5"
The -m mode flag now controls calc's ability to open files The -m mode flag now controls calc's ability to open files
@@ -5962,8 +6339,8 @@ Following is a list of visible changes to calc from version 1.24.7 to 1.26.1:
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.76 $ ## @(#) $Revision: 29.96 $
## @(#) $Id: CHANGES,v 29.76 2006/05/21 07:55:17 chongo Exp $ ## @(#) $Id: CHANGES,v 29.96 2007/02/08 21:22:43 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $
## ##
## Under source code control: 1993/06/02 18:12:57 ## Under source code control: 1993/06/02 18:12:57

View File

@@ -52,14 +52,14 @@ Installing calc from the gziped tarball in 4 easy steps:
CALC_INCDIR where the calc include files are installed CALC_INCDIR where the calc include files are installed
CUSTOMCALDIR where custom *.cal files are installed CUSTOMCALDIR where custom *.cal files are installed
CUSTOMHELPDIR where custom help files are installed CUSTOMHELPDIR where custom help files are installed
CUSTOMINCPDIR where custom .h files are installed CUSTOMINCDIR where custom .h files are installed
SCRIPTDIR where calc shell scripts are installed SCRIPTDIR where calc shell scripts are installed
If you want to install calc files under a top level directory, If you want to install calc files under a top level directory,
then set the T value: then set the T value:
The calc install is performed under $T, the calc build is The calc install is performed under ${T}, the calc build is
performed under /. The purpose for $T is to allow someone performed under /. The purpose for ${T} is to allow someone
to install calc somewhere other than into the system area. to install calc somewhere other than into the system area.
For example, if: 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 calc help, .cal ...: /var/tmp/testing/usr/share/calc
... etc ... /var/tmp/testing/... ... etc ... /var/tmp/testing/...
If $T is empty, calc is installed under /, which is the same 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 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 calc is installed under ${T}, as if one had to chroot under
$T for calc to operate. ${T} for calc to operate.
Look for the section that starts: 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. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.7 $ ## @(#) $Revision: 29.9 $
## @(#) $Id: HOWTO.INSTALL,v 29.7 2003/04/15 03:38:34 chongo Exp $ ## @(#) $Id: HOWTO.INSTALL,v 29.9 2006/09/18 13:11:57 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/RCS/HOWTO.INSTALL,v $ ## @(#) $Source: /usr/local/src/cmd/calc/RCS/HOWTO.INSTALL,v $
## ##
## Under source code control: 1999/09/27 20:48:44 ## Under source code control: 1999/09/27 20:48:44

2348
Makefile

File diff suppressed because it is too large Load Diff

19
addop.c
View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.9 $ * @(#) $Revision: 29.13 $
* @(#) $Id: addop.c,v 29.9 2006/05/22 19:04:45 chongo Exp $ * @(#) $Id: addop.c,v 29.13 2006/06/20 10:28:06 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
* *
* Under source code control: 1990/02/15 01:48:10 * Under source code control: 1990/02/15 01:48:10
@@ -195,8 +195,8 @@ endfunc(void)
checklabels(); checklabels();
if (errorcount) { if (errorcount) {
printf("\"%s\": %ld error%s\n", newname, errorcount, scanerror(T_NULL,"Compilation of \"%s\" failed: %ld error(s)",
((errorcount == 1) ? "" : "s")); newname, errorcount);
return; return;
} }
size = funcsize(curfunc->f_opcodecount); size = funcsize(curfunc->f_opcodecount);
@@ -280,12 +280,13 @@ rmuserfunc(char *name)
index = findstr(&funcnames, name); index = findstr(&funcnames, name);
if (index < 0) { if (index < 0) {
fprintf(stderr, "%s() has never been defined\n", warning("No function named \"%s\" to be undefined", name);
name);
return; return;
} }
if (functions[index] == NULL) if (functions[index] == NULL) {
warning("No defined function \"%s\" to be undefined", name);
return; return;
}
freenumbers(functions[index]); freenumbers(functions[index]);
free(functions[index]); free(functions[index]);
if ((inputisterminal() && conf->resource_debug & RSCDBG_STDIN_FUNC) || if ((inputisterminal() && conf->resource_debug & RSCDBG_STDIN_FUNC) ||
@@ -526,9 +527,7 @@ addop(long op)
fp->f_opcodecount -= diff; fp->f_opcodecount -= diff;
oldop = OP_NOP; oldop = OP_NOP;
oldoldop = OP_NOP; oldoldop = OP_NOP;
fprintf(stderr, warning("Constant before comma operator");
"Line %ld: unused value ignored\n",
linenumber());
return; return;
} }
break; break;

12
alloc.h
View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.4 $ * @(#) $Revision: 29.5 $
* @(#) $Id: alloc.h,v 29.4 2001/06/08 21:00:58 chongo Exp $ * @(#) $Id: alloc.h,v 29.5 2007/02/07 20:51:38 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/alloc.h,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/alloc.h,v $
* *
* Under source code control: 1990/02/15 01:48:29 * Under source code control: 1990/02/15 01:48:29
@@ -94,13 +94,13 @@ extern int strcmp();
#endif /* HAVE_NEWSTR */ #endif /* HAVE_NEWSTR */
#if !defined(HAVE_MEMMOVE) #if !defined(HAVE_MEMMOVE)
# undef CALC_SIZE_T # undef MEMMOVE_SIZE_T
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus) #if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
# define CALC_SIZE_T size_t # define MEMMOVE_SIZE_T size_t
# else # else
# define CALC_SIZE_T long # define MEMMOVE_SIZE_T long
# endif # endif
extern void *memmove(void *s1, const void *s2, CALC_SIZE_T n); extern void *memmove(void *s1, const void *s2, MEMMOVE_SIZE_T n);
#endif #endif
#endif /* !__ALLOC_H__ */ #endif /* !__ALLOC_H__ */

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.9 $ * @(#) $Revision: 29.10 $
* @(#) $Id: blkcpy.c,v 29.9 2006/05/20 08:43:55 chongo Exp $ * @(#) $Id: blkcpy.c,v 29.10 2007/02/07 20:51:38 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/blkcpy.c,v $
* *
* Under source code control: 1997/04/18 20:41:26 * Under source code control: 1997/04/18 20:41:26
@@ -935,7 +935,7 @@ copyostr2blk(char *str,long ssi,long num,BLOCK *dblk,long dsi,BOOL noreloc)
* s1 * s1
*/ */
void * void *
memmove(void *s1, const void *s2, CALC_SIZE_T n) memmove(void *s1, const void *s2, MEMMOVE_SIZE_T n)
{ {
/* /*
* firewall * firewall

View File

@@ -2,7 +2,7 @@
# #
# cal - makefile for calc standard resource files # 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 # Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License # the terms of the version 2.1 of the GNU Lesser General Public License
@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
# @(#) $Revision: 29.18 $ # @(#) $Revision: 29.24 $
# @(#) $Id: Makefile,v 29.18 2006/05/20 19:32:40 chongo Exp $ # @(#) $Id: Makefile,v 29.24 2006/09/18 13:13:25 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $ # @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
# #
# Under source code control: 1991/07/21 05:00:54 # Under source code control: 1991/07/21 05:00:54
@@ -33,8 +33,8 @@
# required vars # required vars
# #
SHELL = /bin/sh SHELL= /bin/sh
MAKE_FILE = Makefile MAKE_FILE= Makefile
#### ####
# Normally, the upper level makefile will set these values. We provide # Normally, the upper level makefile will set these values. We provide
@@ -62,9 +62,9 @@ INCDIR= /usr/include
# ${LIBDIR} where calc link library (*.a) files are installed # ${LIBDIR} where calc link library (*.a) files are installed
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files # ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
# #
# NOTE: The install rule prepends installation paths with $T, which # NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If $T is non-empty, then installation # by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the $T directory. # locations will be relative to the ${T} directory.
# #
# For DJGPP, select: # For DJGPP, select:
# #
@@ -96,12 +96,12 @@ CALC_SHAREDIR= /usr/share/calc
# ${CALC_INCDIR} where the calc include files are installed # ${CALC_INCDIR} where the calc include files are installed
# ${CUSTOMCALDIR} where custom *.cal files are installed # ${CUSTOMCALDIR} where custom *.cal files are installed
# ${CUSTOMHELPDIR} where custom help files are installed # ${CUSTOMHELPDIR} where custom help files are installed
# ${CUSTOMINCPDIR} where custom .h files are installed # ${CUSTOMINCDIR} where custom .h files are installed
# ${SCRIPTDIR} where calc shell scripts are installed # ${SCRIPTDIR} where calc shell scripts are installed
# #
# NOTE: The install rule prepends installation paths with $T, which # NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If $T is non-empty, then installation # by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the $T directory. # locations will be relative to the ${T} directory.
# #
# If in doubt, set: # If in doubt, set:
# #
@@ -121,8 +121,8 @@ SCRIPTDIR= ${BINDIR}/cscript
# T - top level directory under which calc will be installed # T - top level directory under which calc will be installed
# #
# The calc install is performed under $T, the calc build is # The calc install is performed under ${T}, the calc build is
# performed under /. The purpose for $T is to allow someone # performed under /. The purpose for ${T} is to allow someone
# to install calc somewhere other than into the system area. # to install calc somewhere other than into the system area.
# #
# For example, if: # For example, if:
@@ -142,10 +142,10 @@ SCRIPTDIR= ${BINDIR}/cscript
# calc help, .cal ...: /var/tmp/testing/usr/share/calc # calc help, .cal ...: /var/tmp/testing/usr/share/calc
# ... etc ... /var/tmp/testing/... # ... etc ... /var/tmp/testing/...
# #
# If $T is empty, calc is installed under /, which is the same # 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 # 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 # calc is installed under ${T}, as if one had to chroot under
# $T for calc to operate. # ${T} for calc to operate.
# #
# If in doubt, use T= # If in doubt, use T=
# #
@@ -163,6 +163,14 @@ Q=@
# #
CHMOD= chmod CHMOD= chmod
CMP= cmp CMP= cmp
RM= rm
MKDIR= mkdir
RMDIR= rmdir
CP= cp
MV= mv
CO= co
TRUE= true
TOUCH= touch
# The calc files to install # The calc files to install
# #
@@ -177,7 +185,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 \ beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.cal \ randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.cal \
test8400.cal test8500.cal test8600.cal chi.cal intfile.cal screen.cal \ test8400.cal test8500.cal test8600.cal chi.cal intfile.cal screen.cal \
dotest.cal set8700.cal set8700.line dotest.cal set8700.cal set8700.line alg_config.cal sumtimes.cal
# These files are found (but not built) in the distribution # These files are found (but not built) in the distribution
# #
@@ -192,8 +200,8 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
# used by the upper level Makefile to determine of we have done all # used by the upper level Makefile to determine of we have done all
# #
.all: .all:
rm -f .all ${RM} -f .all
touch .all ${TOUCH} .all
## ##
# #
@@ -209,17 +217,17 @@ all: ${CALC_FILES} ${MAKE_FILE} .all
## ##
distlist: ${DISTLIST} 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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo cal/$$i; \ echo cal/$$i; \
fi; \ fi; \
done done
distdir: distdir:
${Q}echo cal ${Q} echo cal
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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo cal/$$i; \ echo cal/$$i; \
fi; \ fi; \
@@ -232,7 +240,7 @@ calcliblist:
## ##
echo_inst_files: 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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${CALC_SHAREDIR}/$$i; \ echo __file__ ${CALC_SHAREDIR}/$$i; \
fi; \ fi; \
@@ -247,32 +255,61 @@ echo_inst_files:
clean: clean:
clobber: clobber:
rm -f .all ${RM} -f .all
# install everything
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
install: all install: all
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \ -${Q} if [ ! -d ${T}${CALC_SHAREDIR} ]; then \
echo mkdir $T${CALC_SHAREDIR}; \ echo ${MKDIR} ${T}${CALC_SHAREDIR}; \
mkdir $T${CALC_SHAREDIR}; \ ${MKDIR} ${T}${CALC_SHAREDIR}; \
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \ if [ ! -d "${T}${CALC_SHAREDIR}" ]; then \
echo mkdir -p "$T${CALC_SHAREDIR}"; \ echo ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
mkdir -p "$T${CALC_SHAREDIR}"; \ ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \ echo ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
${CHMOD} 0755 $T${CALC_SHAREDIR}; \ ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
else \ else \
true; \ ${TRUE}; \
fi fi
${Q}for i in ${CALC_FILES} /dev/null; do \ ${Q} for i in ${CALC_FILES} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \ if [ "$$i" = "/dev/null" ]; then \
continue; \ continue; \
fi; \ fi; \
if ${CMP} -s $$i $T${CALC_SHAREDIR}/$$i; then \ if ${CMP} -s $$i ${T}${CALC_SHAREDIR}/$$i; then \
true; \ ${TRUE}; \
else \ else \
rm -f $T${CALC_SHAREDIR}/$$i.new; \ ${RM} -f ${T}${CALC_SHAREDIR}/$$i.new; \
cp -f $$i $T${CALC_SHAREDIR}/$$i.new; \ ${CP} -f $$i ${T}${CALC_SHAREDIR}/$$i.new; \
${CHMOD} 0444 $T${CALC_SHAREDIR}/$$i.new; \ ${CHMOD} 0444 ${T}${CALC_SHAREDIR}/$$i.new; \
mv -f $T${CALC_SHAREDIR}/$$i.new $T${CALC_SHAREDIR}/$$i; \ ${MV} -f ${T}${CALC_SHAREDIR}/$$i.new ${T}${CALC_SHAREDIR}/$$i; \
echo "installed $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; \ fi; \
done done

View File

@@ -75,7 +75,7 @@ have meanings are as follows:
is displayed. is displayed.
2 Show func will display more information about a functions 2 Show func will display more information about a functions
arguments as well as more argument sdummary information. arguments as well as more argument summary information.
3 During execution, allow calc standard resource files 3 During execution, allow calc standard resource files
to output additional debugging information. to output additional debugging information.
@@ -103,7 +103,7 @@ either of the bottom 2 bits set:
print "funcB(size, mass, ...) defined"; print "funcB(size, mass, ...) defined";
} }
If your the resource file needs to output special debugging informatin, If your the resource file needs to output special debugging information,
we recommend that you check for bit 3 of the config("resource_debug") we recommend that you check for bit 3 of the config("resource_debug")
before printing the debug statement: before printing the debug statement:
@@ -117,12 +117,68 @@ The following is a brief description of some of the calc resource files
that are shipped with calc. See above for example of how to read in that are shipped with calc. See above for example of how to read in
and execute these files. and execute these files.
alg_config.cal
global test_time
mul_loop(repeat,x) defined
mul_ratio(len) defined
best_mul2() defined
sq_loop(repeat,x) defined
sq_ratio(len) defined
best_sq2() defined
pow_loop(repeat,x,ex) defined
pow_ratio(len) defined
best_pow2() defined
These functions search for an optimal value of config("mul2"),
config("sq2"), and config("pow2"). The calc default values of these
configuration values were set by running this resource file on a
1.8GHz AMD 32-bit CPU of ~3406 BogoMIPS.
The best_mul2() function returns the optimal value of config("mul2").
The best_sq2() function returns the optimal value of config("sq2").
The best_pow2() function returns the optimal value of config("pow2").
The other functions are just support functions.
By design, best_mul2(), best_sq2(), and best_pow2() take a few
minutes to run. These functions increase the number of times a
given computational loop is executed until a minimum amount of CPU
time is consumed. To watch these functions progress, one can set
the config("user_debug") value.
Here is a suggested way to use this resource file:
; read alg_config
; config("user_debug",2),;
; best_mul2(); best_sq2(); best_pow2();
; best_mul2(); best_sq2(); best_pow2();
; best_mul2(); best_sq2(); best_pow2();
NOTE: It is perfectly normal for the optimal value returned to differ
slightly from run to run. Slight variations due to inaccuracy in
CPU timings will cause the best value returned to differ slightly
from run to run.
One can use a calc startup file to change the initial values of
config("mul2"), config("sq2"), and config("pow2"). For example one
can place into ~/.calcrc these lines:
config("mul2", 1780),;
config("sq2", 3388),;
config("pow2", 176),;
to automatically and silently change these config values.
See help/config and CALCRC in help/environment for more information.
beer.cal beer.cal
Calc's contribution to the 99 Bottles of Beer web page: Calc's contribution to the 99 Bottles of Beer web page:
http://www.ionet.net/~timtroyr/funhouse/beer.html#calc http://www.ionet.net/~timtroyr/funhouse/beer.html#calc
NOTE: This resource produces a lot of output. :-)
bernoulli.cal bernoulli.cal
@@ -132,7 +188,7 @@ bernoulli.cal
NOTE: There is now a bernoulli() builtin function. This file is NOTE: There is now a bernoulli() builtin function. This file is
left here for backward compatibility and now simply returns left here for backward compatibility and now simply returns
the buildin function. the builtin function.
bigprime.cal bigprime.cal
@@ -153,9 +209,9 @@ chi.cal
The chi_prob() function does not work well with odd degrees of freedom. The chi_prob() function does not work well with odd degrees of freedom.
It is reasonable with even degrees of freedom, although one must give It is reasonable with even degrees of freedom, although one must give
a sifficently small error term as the degress gets large (>100). a sufficiently small error term as the degrees gets large (>100).
The Z(x) and P(x) are internal statistical funcions. The Z(x) and P(x) are internal statistical functions.
eps is an optional epsilon() like error term. eps is an optional epsilon() like error term.
@@ -226,6 +282,8 @@ hello.cal
http://www.latech.edu/~acm/HelloWorld.shtml http://www.latech.edu/~acm/HelloWorld.shtml
http://www.latech.edu/~acm/helloworld/calc.html http://www.latech.edu/~acm/helloworld/calc.html
NOTE: This resource produces a lot of output. :-)
intfile.cal intfile.cal
@@ -643,6 +701,27 @@ sumsq.cal
4N+1, and always impossible for primes of the form 4N-1. 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 user CPU time 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.cal
surd(a, b) surd(a, b)
@@ -935,8 +1014,8 @@ xx_print.cal
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.12 $ ## @(#) $Revision: 29.16 $
## @(#) $Id: README,v 29.12 2006/05/21 04:41:09 chongo Exp $ ## @(#) $Id: README,v 29.16 2006/12/16 11:18:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $ ## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
## ##
## Under source code control: 1990/02/15 01:50:32 ## Under source code control: 1990/02/15 01:50:32

1253
cal/alg_config.cal Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 29.4 $
* @(#) $Id: ellip.cal,v 29.3 2006/03/07 22:16:25 chongo Exp $ * @(#) $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 $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
* *
* Under source code control: 1990/02/15 01:50:33 * Under source code control: 1990/02/15 01:50:33
@@ -28,16 +28,17 @@
*/ */
/* /*
* Attempt to factor numbers using elliptic functions. * Attempt to factor numbers using elliptic functions:
* y^2 = x^3 + a*x + b (mod N).
* *
* 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 * starting from a trivial solution and 'multiplying' that point together
* to generate high powers of the point, looking for such a point whose * 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 * order contains a common factor with ellip_N. The order of the group of
* varies almost randomly within a certain interval for each choice of a * points varies almost randomly within a certain interval for each choice of
* and b, and thus each choice provides an independent opportunity to * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * of the failing value and ellip_N provides a factor of ellip_N.
* only an approximation, read "A Course in Number Theory and Cryptography" * This description is only an approximation, read "A Course in Number
* by Neal Koblitz for a good explanation. * Theory and Cryptography" by Neal Koblitz for a good explanation.
* *
* efactor(iN, ia, B, force) * efactor(iN, ia, B, force)
* iN is the number to be factored. * 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 * 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 f. The number being factored is also saved in the global
* variable N. * variable ellip_N.
*/ */
obj point {x, y}; obj point {x, y};
global N; /* number to factor */ global ellip_N; /* number to factor */
global a; /* first coefficient */ global ellip_a; /* first coefficient */
global b; /* second coefficient */ global ellip_b; /* second coefficient */
global f; /* found factor */ global ellip_f; /* found factor */
define efactor(iN, ia, B, force) define efactor(iN, ia, B, force)
@@ -103,28 +104,28 @@ define efactor(iN, ia, B, force)
if (isnull(ia)) if (isnull(ia))
ia = 1; ia = 1;
obj point x; obj point x;
a = ia; ellip_a = ia;
b = -ia; ellip_b = -ia;
N = iN; ellip_N = iN;
C = isqrt(N); C = isqrt(ellip_N);
C = 2 * C + 2 * isqrt(C) + 1; C = 2 * C + 2 * isqrt(C) + 1;
f = 0; ellip_f = 0;
while (f == 0) { while (ellip_f == 0) {
print "A =", a; print "A =", ellip_a;
x.x = 1; x.x = 1;
x.y = 1; x.y = 1;
print 2, x; print 2, x;
x = x ^ (2 ^ (highbit(C) + 1)); 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)) if (!ptest(p, 1))
continue; continue;
print p, x; print p, x;
x = x ^ (p ^ ((highbit(C) // highbit(p)) + 1)); x = x ^ (p ^ ((highbit(C) // highbit(p)) + 1));
} }
a++; ellip_a++;
b--; ellip_b--;
} }
return f; return ellip_f;
} }
@@ -143,16 +144,16 @@ define point_mul(p1, p2)
if (p1 == p2) if (p1 == p2)
return point_square(`p1); return point_square(`p1);
obj point r; obj point r;
m = (minv(p2.x - p1.x, N) * (p2.y - p1.y)) % N; m = (minv(p2.x - p1.x, ellip_N) * (p2.y - p1.y)) % ellip_N;
if (m == 0) { if (m == 0) {
if (f == 0) if (ellip_f == 0)
f = gcd(p2.x - p1.x, N); ellip_f = gcd(p2.x - p1.x, ellip_N);
r.x = 1; r.x = 1;
r.y = 1; r.y = 1;
return r; return r;
} }
r.x = (m^2 - p1.x - p2.x) % N; r.x = (m^2 - p1.x - p2.x) % ellip_N;
r.y = ((m * (p1.x - r.x)) - p1.y) % N; r.y = ((m * (p1.x - r.x)) - p1.y) % ellip_N;
return r; return r;
} }
@@ -162,16 +163,16 @@ define point_square(p)
local r, m; local r, m;
obj point r; 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 (m == 0) {
if (f == 0) if (ellip_f == 0)
f = gcd(p.y << 1, N); ellip_f = gcd(p.y << 1, ellip_N);
r.x = 1; r.x = 1;
r.y = 1; r.y = 1;
return r; return r;
} }
r.x = (m^2 - p.x - p.x) % N; r.x = (m^2 - p.x - p.x) % ellip_N;
r.y = ((m * (p.x - r.x)) - p.y) % N; r.y = ((m * (p.x - r.x)) - p.y) % ellip_N;
return r; return r;
} }
@@ -184,7 +185,7 @@ define point_pow(p, pow)
if (isodd(pow)) if (isodd(pow))
r = p; r = p;
t = 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); t = point_square(`t);
if (bit & pow) if (bit & pow)
r = point_mul(`t, `r); r = point_mul(`t, `r);

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.3 $
* @(#) $Id: mfactor.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: mfactor.cal,v 29.3 2006/12/16 11:18:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mfactor.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/mfactor.cal,v $
* *
* Under source code control: 1996/07/06 06:09:40 * Under source code control: 1996/07/06 06:09:40
@@ -261,7 +261,7 @@ define mfactor(n, start_k, rept_loop, p_elim)
} else { } else {
/* report this loop */ /* report this loop */
printf("at 2*%d*%d+1, cpu: %f\n", printf("at 2*%d*%d+1, cpu: %f\n",
(q-1)/(2*n), n, runtime()); (q-1)/(2*n), n, usertime());
fflush(files(1)); fflush(files(1));
loop = 0; loop = 0;
} }
@@ -274,7 +274,7 @@ define mfactor(n, start_k, rept_loop, p_elim)
if (rept_loop <= ++loop) { if (rept_loop <= ++loop) {
/* report this loop */ /* report this loop */
printf("at 2*%d*%d+1, cpu: %f\n", printf("at 2*%d*%d+1, cpu: %f\n",
(q-1)/(2*n), n, runtime()); (q-1)/(2*n), n, usertime());
fflush(files(1)); fflush(files(1));
loop = 0; loop = 0;
} }

View File

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

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.3 $
* @(#) $Id: randmprime.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: randmprime.cal,v 29.3 2006/12/16 11:18:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randmprime.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/randmprime.cal,v $
* *
* Under source code control: 1994/03/14 23:11:21 * Under source code control: 1994/03/14 23:11:21
@@ -88,8 +88,8 @@ randmprime(bits, seed, dbg)
* loop until we find a prime * loop until we find a prime
*/ */
if (dbg >= 1) { if (dbg >= 1) {
start = runtime(); start = usertime();
init = runtime(); init = usertime();
plush = 0; plush = 0;
print "DEBUG1: testing (h+" : plush : ")*2^" : n : "-1"; print "DEBUG1: testing (h+" : plush : ")*2^" : n : "-1";
} }
@@ -97,7 +97,7 @@ randmprime(bits, seed, dbg)
/* bump h, and n if needed */ /* bump h, and n if needed */
if (dbg >= 2) { if (dbg >= 2) {
stop = runtime(); stop = usertime();
print "DEBUG2: last test:", stop-start, " total time:", stop-init; print "DEBUG2: last test:", stop-start, " total time:", stop-init;
} }
if (dbg >= 1) { if (dbg >= 1) {
@@ -116,7 +116,7 @@ randmprime(bits, seed, dbg)
/* found a prime */ /* found a prime */
if (dbg >= 2) { if (dbg >= 2) {
stop = runtime(); stop = usertime();
print "DEBUG2: last test:", stop-start, " total time:", stop-init; print "DEBUG2: last test:", stop-start, " total time:", stop-init;
print "DEBUG3: " : h : "*2^" : n : "-1 is prime"; print "DEBUG3: " : h : "*2^" : n : "-1 is prime";
} }

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.25 $ * @(#) $Revision: 29.36 $
* @(#) $Id: regress.cal,v 29.25 2006/05/21 00:58:31 chongo Exp $ * @(#) $Id: regress.cal,v 29.36 2006/12/16 11:18:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
* *
* Under source code control: 1990/02/15 01:50:36 * Under source code control: 1990/02/15 01:50:36
@@ -201,7 +201,6 @@ define test_variables()
local x1, x2, x3; local x1, x2, x3;
global g1, g2; global g1, g2;
local t; local t;
global globalvar;
local x; local x;
print '350: Beginning test_variables'; print '350: Beginning test_variables';
@@ -404,14 +403,14 @@ define test_config()
'512: config("trace") == 0'); '512: config("trace") == 0');
vrfy(config("maxprint") == 16, vrfy(config("maxprint") == 16,
'513: config("maxprint") == 16'); '513: config("maxprint") == 16');
vrfy(config("mul2") == 20, vrfy(config("mul2") == 1780,
'514: config("mul2") == 20'); '514: config("mul2") == 1780');
vrfy(config("sq2") == 20, vrfy(config("sq2") == 3388,
'515: config("sq2") == 20'); '515: config("sq2") == 3388');
vrfy(config("pow2") == 40, vrfy(config("pow2") == 176,
'516: config("pow2") == 40'); '516: config("pow2") == 176');
vrfy(config("redc2") == 50, vrfy(config("redc2") == 220,
'517: config("redc2") == 50'); '517: config("redc2") == 220');
vrfy(config("tilde"), vrfy(config("tilde"),
'518: config("tilde")'); '518: config("tilde")');
vrfy(config("tab"), vrfy(config("tab"),
@@ -498,7 +497,33 @@ define test_config()
vrfy(config("mode2") == "off", vrfy(config("mode2") == "off",
'556: config("mode2") == "off"'); '556: config("mode2") == "off"');
print '557: Ending test_config'; /* hz is numeric */
vrfy(isint(config("hz")), '557: isint(config("hz"))');
/* compile_custom is simple */
vrfy(issimple(config("compile_custom")),
'558: issimple(config("compile_custom"))');
/* allow_custom is simple */
vrfy(issimple(config("allow_custom")),
'559: issimple(config("allow_custom"))');
/* allow_custom is simple */
vrfy(issimple(config("allow_custom")),
'559: issimple(config("allow_custom"))');
/* baseb is numeric */
vrfy(isint(config("baseb")), '560: isint(config("baseb"))');
/* redecl_warn is simple */
vrfy(issimple(config("redecl_warn")),
'561: issimple(config("redecl_warn"))');
/* dupvar_warn is simple */
vrfy(issimple(config("dupvar_warn")),
'562: issimple(config("rdupvar_warn"))');
print '563: Ending test_config';
} }
print '010: parsed test_config()'; print '010: parsed test_config()';
@@ -744,6 +769,7 @@ define test_functions()
local pi; local pi;
local h, n, r, m, v; local h, n, r, m, v;
local n2, m2, v2; local n2, m2, v2;
local t;
print '700: Beginning test_functions'; print '700: Beginning test_functions';
@@ -1317,7 +1343,70 @@ define test_functions()
*/ */
vrfy(isstr(calcpath()), '1155: isstr(calcpath())'); 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');
/* runtime(), systime(), usertime() return numeric values */
vrfy(isnum(runtime()), '1205: isnum(runtime())');
vrfy(isnum(systime()), '1206: isnum(systime())');
vrfy(isnum(usertime()), '1207: isnum(usertime())');
print '1208: Ending test_functions';
} }
print '017: parsed test_functions()'; print '017: parsed test_functions()';
@@ -1334,14 +1423,14 @@ define _test_underscore()
local _a = 27; local _a = 27;
local __a = 23209; local __a = 23209;
print "1200: Beginning _test_underscore"; print "1290: Beginning _test_underscore";
vrfy(_a == 27, '1201: _a == 27'); vrfy(_a == 27, '1291: _a == 27');
vrfy(_ == 49, '1202: _ == 49'); vrfy(_ == 49, '1292: _ == 49');
vrfy(__ == 63, '1203: __ == 63'); vrfy(__ == 63, '1293: __ == 63');
vrfy(__a == 23209, '1204: __a == 23209'); vrfy(__a == 23209, '1294: __a == 23209');
print "1205: Ending _test_underscore"; print "1295: Ending _test_underscore";
} }
print '020: parsed _test_underscore'; print '020: parsed _test_underscore';
@@ -3404,11 +3493,12 @@ print '070: parsed test_redc()';
*/ */
define test_fileops() 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 L = "Landon";
local C = "Curt"; local C = "Curt";
local N = "Noll"; local N = "Noll";
local LCN = "Landon\nCurt\nNoll\n"; local LCN = "Landon\nCurt\nNoll\n";
local long = "0123456789abcdef0123456789abcdef";
print '4200: Beginning test_fileops'; print '4200: Beginning test_fileops';
@@ -3511,16 +3601,55 @@ define test_fileops()
*/ */
vrfy(!iserror(p=fpathopen("junk4200","r",".")), vrfy(!iserror(p=fpathopen("junk4200","r",".")),
'4260: !iserror(p=fparhopen("junk4200","r","."))'); '4260: !iserror(p=fparhopen("junk4200","r","."))');
vrfy(!iserror(fclose(p)), '4261: !iserror(fclose(p))');
vrfy(!iserror(r=fpathopen("regress.cal","r")), vrfy(!iserror(r=fpathopen("regress.cal","r")),
'4261: !iserror(r=fparhopen("regress.cal","r","."))'); '4262: !iserror(r=fparhopen("regress.cal","r","."))');
vrfy(!iserror(fclose(r)), '4263: !iserror(fclose(r))');
/*
* verify non-stack overflow on long filenames
*/
long = long + long + long + long;
print '4264: long = long + long + long + long;';
long = long + long + long + long;
print '4265: long = long + long + long + long;';
vrfy(strlen(long) == 512, '4266: strlen(long) == 512');
/* bump ecnt up by 1 */
++ecnt;
print '4267: ++ecnt;';
vrfy(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 * cleanup
*/ */
x = rm("junk4200"); x = rm("junk4200");
print '4262: x = rm("junk4200")'; print '4280: x = rm("junk4200")';
x = rm("tmp4200");
print '4281: x = rm("tmp4200")';
print '4263: Ending test_fileops'; print '4282: Ending test_fileops';
} }
print '071: parsed test_fileops()'; print '071: parsed test_fileops()';
@@ -3955,7 +4084,7 @@ print '088: parsed test_fileop()';
/* /*
* global and static assignment tests * 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'; print '089: global a = 10, b, c d = 20, e, f';
vrfy(a == 10, '090: a == 10'); vrfy(a == 10, '090: a == 10');
vrfy(b == 0, '091: b == 0'); vrfy(b == 0, '091: b == 0');
@@ -4655,13 +4784,11 @@ print '137: parsed test_random()';
/* /*
* test_newsyn - test new command completion syntax and scope rules * test_newsyn - test new command completion syntax and scope rules
*/ */
for (s5500 = 0, i = 0; i < 5; i++) for (s5500 = 0, i = 0; i < 5; i++) s5500 += i;
s5500 += i;
print "138: 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(s5500 == 10, '139: s5500 == 10');
vrfy(i == 5, '140: i == 5'); vrfy(i == 5, '140: i == 5');
for (s5500 = 0, i = 0; i < 9; i++) for (s5500 = 0, i = 0; i < 9; i++) {
{
s5500 += i; s5500 += i;
} }
print "141: for (s5500 = 0, i = 0; i < 9; i++) { s5500 += i; }"; print "141: for (s5500 = 0, i = 0; i < 9; i++) { s5500 += i; }";
@@ -4709,7 +4836,6 @@ define test_newsyn()
vrfy(i == 3, '5509: i == 3'); vrfy(i == 3, '5509: i == 3');
/**/ /**/
{ {
local i;
for (s5500 = 0, i = 0; i < 11; i++) for (s5500 = 0, i = 0; i < 11; i++)
s5500 += i; s5500 += i;
vrfy(s5500 == 55, '5510: s5500 == 45'); vrfy(s5500 == 55, '5510: s5500 == 45');
@@ -5121,8 +5247,6 @@ print '156: parsed test_size()';
/* /*
* test_assign - test assignment of constants and variables * 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" */ global X5800, Y5800; /* X5800, Y5800 for "variables" */
print '158: global X5800, Y5800'; print '158: global X5800, Y5800';
obj xy5800 {x, y}; obj xy5800 {x, y};
@@ -5209,6 +5333,11 @@ define test_is()
local square; /* square of an odd prime */ local square; /* square of an odd prime */
local string; /* string */ local string; /* string */
local com; /* complex value */ local com; /* complex value */
local rndint; /* a random integer */
local rndexp; /* a random exponent */
local rndval; /* rndint ^ rndexp */
local i; /* integer value */
local ok; /* 1 ==> issq() tests were OK, 0 ==> failure */
print '5900: Beginning test_is'; print '5900: Beginning test_is';
@@ -6146,15 +6275,75 @@ define test_is()
vrfy(istype(matrix,odd) == 0, '6661: istype(matrix,odd) == 0'); vrfy(istype(matrix,odd) == 0, '6661: istype(matrix,odd) == 0');
vrfy(istype(a,odd) == 0, '6662: istype(a,odd) == 0'); vrfy(istype(a,odd) == 0, '6662: istype(a,odd) == 0');
/*
* perform more extensive issq() testing
*/
ok = 1;
for (i=0; i < 256; ++i) {
/* rndval will be a square - even powers>0 of x>1 */
rndexp = random(1, 16) * 2;
rndint = random(2, 4294967296);
if (issq(rndint)) {
++rndint;
}
rndval = rndint ^ rndexp;
if (issq(rndval) == 0) {
prob(strprintf("issq(%d^%d) returned 0",
rndint, rndexp));
ok = 0;
}
}
if (ok) {
print '6663: issq() on 256 squares';
} else {
print '****: failure(s): 6663: faiissq() on 256 squares';
}
for (i=0; i < 256; ++i) {
/* rndval will not be a square - 1 + even powers>0 of x>1 */
rndexp = random(1, 16) * 2;
rndint = random(2, 4294967296);
rndval = rndint ^ rndexp;
if (issq(rndval+1) != 0) {
prob(strprintf("issq(%d^%d)+1 returned non-zero",
rndint, rndexp));
ok = 0;
}
}
if (ok) {
print '6664: issq() on 256 squares+1';
} else {
print '****: failure(s): 6664: issq() on 256 squares+1';
}
print '6664: issq() on 256 squares+1';
for (i=0; i < 256; ++i) {
/* rndval will not be a square - odd powers>0 of x>1 */
rndexp = (random(1, 16) * 2) + 1;
rndint = random(2, 4294967296);
if (issq(rndint)) {
++rndint;
}
rndval = rndint ^ rndexp;
if (issq(rndval) != 0) {
prob(strprintf("issq(%d^%d) returned non-zero",
rndint, rndexp));
ok = 0;
}
}
if (ok) {
print '6665: issq() on 256 non-squares';
} else {
print '****: failure(s): 6665: issq() on 256 non-squares';
}
/* /*
* cleanup * cleanup
*/ */
blkfree("blk5900"); blkfree("blk5900");
print '6663: blkfree("blk5900")'; print '6666: blkfree("blk5900")';
fclose(ofd); fclose(ofd);
print '6664: fclose(ofd)'; print '6667: fclose(ofd)';
print '6665: Ending test_is'; print '6668: Ending test_is';
} }
print '168: test_is()'; print '168: test_is()';
@@ -7736,7 +7925,27 @@ read -once "test8500";
print; print;
print '8600: Starting test of up to 1024 args' print '8600: Starting test of up to 1024 args'
read -once "test8600"; 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 */
/* /*
@@ -7744,6 +7953,7 @@ read -once "test8600";
* *
* We use the dotest driver to evaluate test-97xx data files. * We use the dotest driver to evaluate test-97xx data files.
*/ */
print;
print '8700: Starting dotest runs' print '8700: Starting dotest runs'
print '8701: read -once "dotest"'; print '8701: read -once "dotest"';
read -once "dotest"; read -once "dotest";
@@ -7753,6 +7963,7 @@ vrfy(dotest("set8700.line", 8703) == 0,
'8703: dotest("set8700.line", 8703) == 0'); '8703: dotest("set8700.line", 8703) == 0');
/* 87xx: Ending dotest runs is printed by set8700.test */ /* 87xx: Ending dotest runs is printed by set8700.test */
/* /*
* read various calc resource files * read various calc resource files
* *
@@ -7830,7 +8041,28 @@ read -once varargs;
print '9827: read -once varargs'; print '9827: read -once varargs';
read -once qtime; read -once qtime;
print '9828: read -once qtime'; print '9828: read -once qtime';
print '9829: Ending read of selected calc resource files'; read -once chi;
print '9829: read -once chi';
read -once intfile;
print '9830: read -once intfile';
read -once lucas;
print '9831: read -once lucas';
read -once lucas_tbl;
print '9832: read -once lucas_tbl';
read -once natnumset;
print '9833: read -once natnumset';
read -once repeat;
print '9834: read -once repeat';
read -once screen;
print '9835: read -once screen';
read -once linear;
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';
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. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.1 $ * @(#) $Revision: 29.2 $
* @(#) $Id: set8700.cal,v 29.1 2006/05/20 19:35:33 chongo Exp $ * @(#) $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 $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.cal,v $
* *
* Under source code control: 2006/05/20 14:10:11 * Under source code control: 2006/05/20 14:10:11
@@ -70,3 +70,8 @@ define set8700_g(set8700_x)
obj set8700_point { obj set8700_point {
set8700_x, set8700_y, set8700_z 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. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.1 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: set8700.line,v 29.1 2006/05/20 19:35:33 chongo Exp $ ## @(#) $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 $ ## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.line,v $
## ##
## Under source code control: 2006/05/20 14:10:11 ## Under source code control: 2006/05/20 14:10:11
@@ -143,7 +143,7 @@ a #= 4, a == 1
## Binary # operator not defined for strings ## Binary # operator not defined for strings
global set8700_A; protect(set8700_A) == 0 protect(set8700_A) == 0
## Testing with one lvalue ## Testing with one lvalue
isnull(protect(set8700_A,65)) isnull(protect(set8700_A,65))
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 protect(set8700_B,0), set8700_B = set8700_getA2(), protect(set8700_B) == 1024
set8700_B = set8700_getvar(), protect(set8700_B) == 1024 + 256 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(7,2) == error(10234)
protect(set8700_x,2.5) == error(10235) protect(set8700_x,2.5) == error(10235)
protect(set8700_x,"abc") == error(10235) protect(set8700_x,"abc") == error(10235)
@@ -322,7 +322,6 @@ set8700_x++ == error(10385)
set8700_x == 7 set8700_x == 7
set8700_x-- == error(10388) set8700_x-- == error(10388)
global set8700_A, set8700_B; 1
protect(set8700_A,0), protect(set8700_A,16), 1 protect(set8700_A,0), protect(set8700_A,16), 1
set8700_A = "abcdef", protect(set8700_A) == 16 ## No copy to set8700_A set8700_A = "abcdef", protect(set8700_A) == 16 ## No copy to set8700_A
protect(set8700_B,0), set8700_B = "xyz", protect(set8700_B) == 0 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 = list(mat[1] = {set8700_P}), protect(set8700_L[0][0]) == 16
set8700_L = {{{4,5,6}}}, set8700_L[0][0] == set8700_P 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}) 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.2 $
* @(#) $Id: sumtimes.cal,v 29.2 2006/12/16 11:18:46 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 = usertime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n];
sumtimes_t1 = usertime();
for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += *p;
sumtimes_t2 = usertime();
s = matsum(sumtimes_A);
sumtimes_t3 = usertime();
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 = usertime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n];
sumtimes_t1 = usertime();
s = sum(sumtimes_A);
sumtimes_t2 = usertime();
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 = usertime();
sort(sumtimes_A);
sumtimes_t1 = usertime();
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 = usertime();
sort(sumtimes_A);
sumtimes_t1 = usertime();
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 = usertime();
reverse(sumtimes_A);
sumtimes_t1 = usertime();
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 = usertime();
reverse(sumtimes_A);
sumtimes_t1 = usertime();
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 = usertime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2;
sumtimes_t1 = usertime();
for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += (*p)^2;
sumtimes_t2 = usertime();
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 = usertime();
for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2;
sumtimes_t1 = usertime();
s = ssq(sumtimes_A);
sumtimes_t2 = usertime();
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 = usertime();
for (s = n = 0; n < N; n++) s += 1/sumtimes_A[n];
v1 = N/s;
sumtimes_t1 = usertime();
v2 = hmean(sumtimes_A);
sumtimes_t2 = usertime();
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. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.4 $
* @(#) $Id: test2700.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $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 $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2700.cal,v $
* *
* Under source code control: 1995/11/01 22:52:25 * Under source code control: 1995/11/01 22:52:25
@@ -41,8 +41,7 @@
*/ */
global defaultverbose = 1; defaultverbose = 1;
global err;
define mknonnegreal() { define mknonnegreal() {
switch(rand(8)) { switch(rand(8)) {
@@ -89,11 +88,11 @@ define mkfrac() = rand(2) ? mkposfrac() : -mkposfrac();
define mksquarereal() = mknonnegreal()^2; define mksquarereal() = mknonnegreal()^2;
/* /*
* XXX - Should be able to do better than the following. For nonsquare * We might be able to do better than the following. For nonsquare
* positive integer less than 1e6, could use * positive integer less than 1e6, could use:
* x = rand(1, 1000); * x = rand(1, 1000);
* return rand(x^2 + 1, (x + 1)^2); * return rand(x^2 + 1, (x + 1)^2);
* Maybe could do * Maybe could do:
* do * do
* x = mkreal_2700(); * x = mkreal_2700();
* while * while

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.5 $
* @(#) $Id: test3300.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: test3300.cal,v 29.5 2006/12/16 11:19:45 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3300.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3300.cal,v $
* *
* Under source code control: 1995/12/02 04:27:41 * Under source code control: 1995/12/02 04:27:41
@@ -30,8 +30,7 @@
*/ */
global defaultverbose = 1; /* default verbose value */ defaultverbose = 1; /* default verbose value */
global err;
define testi(str, n, N, verbose) define testi(str, n, N, verbose)
{ {
@@ -82,9 +81,9 @@ define testr(str, n, N, verbose)
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
for (j = 0; j < n; j++) for (j = 0; j < n; j++)
A[i,j] = rand(-(N^2), N^2)/rand(1, N); A[i,j] = rand(-(N^2), N^2)/rand(1, N);
t = runtime(); t = usertime();
d1 = det(A); d1 = det(A);
t = runtime() - t; t = usertime() - t;
d2 = det(A^2); d2 = det(A^2);
if (d2 != d1^2) { if (d2 != d1^2) {
if (verbose > 0) { if (verbose > 0) {

View File

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

View File

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

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.4 $
* @(#) $Id: test4000.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: test4000.cal,v 29.4 2006/12/16 11:18:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4000.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4000.cal,v $
* *
* Under source code control: 1996/03/13 02:38:45 * Under source code control: 1996/03/13 02:38:45
@@ -75,8 +75,7 @@
*/ */
global defaultverbose = 1; /* default verbose value */ defaultverbose = 1; /* default verbose value */
global err;
/* /*
* test defaults * test defaults
@@ -146,7 +145,7 @@ define ptimes(str, N, n, count, skip, verbose)
mat A[n]; mat A[n];
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
A[i] = plen(N); A[i] = plen(N);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
p = ptest(A[i], count, skip); p = ptest(A[i], count, skip);
if (!p) { if (!p) {
@@ -160,7 +159,7 @@ define ptimes(str, N, n, count, skip, verbose)
if (m) { if (m) {
printf("*** %d error(s)\n", m); printf("*** %d error(s)\n", m);
} else { } else {
t = round(runtime() - t, 4); t = round(usertime() - t, 4);
if (verbose > 1) { if (verbose > 1) {
printf("%d probable primes: time = %d\n", n, t); printf("%d probable primes: time = %d\n", n, t);
} else { } else {
@@ -195,7 +194,7 @@ define ctimes(str, N, n, count, skip, verbose)
mat A[n]; mat A[n];
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
A[i] = clen(N); A[i] = clen(N);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
p = ptest(A[i], count, skip); p = ptest(A[i], count, skip);
if (p) { if (p) {
@@ -209,7 +208,7 @@ define ctimes(str, N, n, count, skip, verbose)
if (m) { if (m) {
printf("*** %d error(s)\n", m); printf("*** %d error(s)\n", m);
} else { } else {
t = round(runtime() - t, 4); t = round(usertime() - t, 4);
if (verbose > 1) { if (verbose > 1) {
printf("%d probable primes: time = %d\n", n, t); printf("%d probable primes: time = %d\n", n, t);
} else { } else {
@@ -243,7 +242,7 @@ define crtimes(str, a, b, n, count, skip, verbose)
A[i] = rand(a,b); A[i] = rand(a,b);
P[i] = ptest(A[i], 20, 0); P[i] = ptest(A[i], 20, 0);
} }
t = runtime(); t = usertime();
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
p = ptest(A[i], count, skip); p = ptest(A[i], count, skip);
if (p != P[i]) { if (p != P[i]) {
@@ -258,7 +257,7 @@ define crtimes(str, a, b, n, count, skip, verbose)
if (m) { if (m) {
printf("*** %d error(s)?\n", m); printf("*** %d error(s)?\n", m);
} else { } else {
t = round(runtime() - t, 4); t = round(usertime() - t, 4);
if (verbose > 1) { if (verbose > 1) {
printf("%d probable primes: time = %d\n", n, t); printf("%d probable primes: time = %d\n", n, t);
} else { } else {
@@ -296,16 +295,16 @@ define ntimes(str, N, n, count, skip, residue, modulus, verbose)
mat A[n]; mat A[n];
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
A[i] = rlen(N); A[i] = rlen(N);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
p = nextcand(A[i], count, skip, residue, modulus); p = nextcand(A[i], count, skip, residue, modulus);
} }
tnext = round(runtime() - t, 4); tnext = round(usertime() - t, 4);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
p = prevcand(A[i], count, skip, residue, modulus); p = prevcand(A[i], count, skip, residue, modulus);
} }
tprev = round(runtime() - t, 4); tprev = round(usertime() - t, 4);
if (verbose > 0) { if (verbose > 0) {
printf("%d evaluations, nextcand: %d, prevcand: %d\n", n, tnext, tprev); printf("%d evaluations, nextcand: %d, prevcand: %d\n", n, tnext, tprev);
} }

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.5 $
* @(#) $Id: test4100.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $ * @(#) $Id: test4100.cal,v 29.5 2006/12/16 11:18:46 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4100.cal,v $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4100.cal,v $
* *
* Under source code control: 1996/03/13 03:53:22 * Under source code control: 1996/03/13 03:53:22
@@ -70,18 +70,16 @@
*/ */
global defaultverbose = 1; /* default verbose value */ defaultverbose = 1; /* default verbose value */
global err;
/* /*
* test defaults * test defaults
*/ */
global K1 = 2^17; global test4100_K1 = 2^17;
global K2 = 2^12; global test4100_K2 = 2^12;
global BASEB = 16; global test4100_BASE = 2^config("baseb");
global BASE = 2^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) define olen(N)
{ {
@@ -234,7 +232,7 @@ define times(str,N,n,verbose)
m = olen(N); m = olen(N);
m2 = m^2; m2 = m^2;
if (isnull(n)) { if (isnull(n)) {
n = ceil(K1/power(N,1.585)); n = ceil(test4100_K1/power(N,1.585));
if (verbose > 1) if (verbose > 1)
printf("n = %d\n", n); printf("n = %d\n", n);
} }
@@ -247,38 +245,38 @@ define times(str,N,n,verbose)
C[i] = rand(m2); C[i] = rand(m2);
} }
z = rcin(0,m); /* to initialize redc and maybe lastmod information */ z = rcin(0,m); /* to initialize redc and maybe lastmod information */
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = rcin(A[i],m); z = rcin(A[i],m);
trcin = round(runtime() - t, 3); trcin = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = rcout(A[i],m); z = rcout(A[i],m);
trcout = round(runtime() - t, 3); trcout = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = rcmul(A[i],B[i],m); z = rcmul(A[i],B[i],m);
trcmul = round(runtime() - t, 3); trcmul = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = rcsq(A[i],m); z = rcsq(A[i],m);
trcsq = round(runtime() - t, 3); trcsq = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = A[i] * B[i]; z = A[i] * B[i];
tmul = round(runtime() - t, 3); tmul = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = A[i]^2; z = A[i]^2;
tsq = round(runtime() - t, 3); tsq = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z = C[i] % A[i]; z = C[i] % A[i];
tmod = round(runtime() - t, 3); tmod = round(usertime() - t, 3);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
quomod(C[i], A[i], x, y); quomod(C[i], A[i], x, y);
tquomod = round(runtime() - t,3); tquomod = round(usertime() - t,3);
if (verbose > 1) { if (verbose > 1) {
printf("rcin: %d, rcout: %d, rcmul: %d, rcsq: %d\n", printf("rcin: %d, rcout: %d, rcmul: %d, rcsq: %d\n",
@@ -308,7 +306,7 @@ define powtimes(str, N1, N2, n, verbose)
N2 = 1; N2 = 1;
if (isnull(n)) { 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); printf ("n = %d\n", n);
} }
mat A[n]; mat A[n];
@@ -316,8 +314,8 @@ define powtimes(str, N1, N2, n, verbose)
mat B[n]; mat B[n];
v = olen(N1); v = olen(N1);
cp = config("pow2", 1); cp = config("pow2", 2);
crc = config("redc2", 1); crc = config("redc2", 2);
/* initialize redc and lastmod info */ /* initialize redc and lastmod info */
@@ -328,29 +326,29 @@ define powtimes(str, N1, N2, n, verbose)
Ar[i] = rcin(A[i], v); Ar[i] = rcin(A[i], v);
B[i] = rlen_4100(N2); B[i] = rlen_4100(N2);
} }
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z1 += pmod(A[i], B[i], v); z1 += pmod(A[i], B[i], v);
tbignum = round(runtime() - t, 4); tbignum = round(usertime() - t, 4);
config("pow2", 1e6); config("pow2", 1e6);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z2 += pmod(A[i], B[i], v); z2 += pmod(A[i], B[i], v);
tnormal = round(runtime() - t, 4); tnormal = round(usertime() - t, 4);
config("redc2",1e6); config("redc2",1e6);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z3 += pmod(A[i], B[i], v); z3 += pmod(A[i], B[i], v);
tsmall = round(runtime() - t, 4); tsmall = round(usertime() - t, 4);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z4 += rcpow(Ar[i], B[i], v); z4 += rcpow(Ar[i], B[i], v);
trcsmall = round(runtime() - t, 4); trcsmall = round(usertime() - t, 4);
config("redc2", 1); config("redc2", 2);
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
z5 += rcpow(Ar[i], B[i], v); z5 += rcpow(Ar[i], B[i], v);
trcbig = round(runtime() - t, 4); trcbig = round(usertime() - t, 4);
if (z1 != z2) { if (z1 != z2) {
++m; ++m;
@@ -408,7 +406,7 @@ define inittimes(str,N,n,verbose)
} }
m = 0; m = 0;
if (isnull(n)) { if (isnull(n)) {
n = ceil(K1/N^2); n = ceil(test4100_K1/N^2);
if (verbose > 1) { if (verbose > 1) {
printf ("n = %d\n", n); printf ("n = %d\n", n);
} }
@@ -421,13 +419,13 @@ define inittimes(str,N,n,verbose)
M[i] = olen(N); M[i] = olen(N);
A[i] = rand(M[i]); A[i] = rand(M[i]);
} }
t = runtime(); t = usertime();
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
R[i] = rcin(A[i], M[i]); R[i] = rcin(A[i], M[i]);
trcin = round(runtime() - t, 4); trcin = round(usertime() - t, 4);
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
B[i] = rcout(R[i], M[i]); B[i] = rcout(R[i], M[i]);
trcout = round(runtime() - t, 4); trcout = round(usertime() - t, 4);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
if (B[i] != A[i]) { if (B[i] != A[i]) {
++m; ++m;

View File

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

View File

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

15
calc.c
View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.13 $ * @(#) $Revision: 29.14 $
* @(#) $Id: calc.c,v 29.13 2006/05/19 15:26:10 chongo Exp $ * @(#) $Id: calc.c,v 29.14 2007/02/07 00:37:25 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.c,v $
* *
* Under source code control: 1990/02/15 01:48:11 * Under source code control: 1990/02/15 01:48:11
@@ -416,6 +416,7 @@ main(int argc, char **argv)
cp++; cp++;
*bp++ = ';'; *bp++ = ';';
cmdlen++; cmdlen++;
s_flag = TRUE; /* -f implies -s */
break; break;
case 's': case 's':
@@ -431,11 +432,13 @@ main(int argc, char **argv)
fprintf(stderr, "Illegal option -%c\n", fprintf(stderr, "Illegal option -%c\n",
c); c);
fprintf(stderr, fprintf(stderr,
"usage: %s [-a] [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]\n" "usage: %s [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]\n"
"\t[-D calc_debug[:resource_debug[:user_debug]]]\n" "\t[-D calc_debug[:resource_debug[:user_debug]]]\n"
"\t[-O] [-p] [-q] [-u] [-v] " "\t[-O] [-p] [-q] [-s] [-u] [-v] "
"[--] [calc_cmd ...]\n", "[--] [calc_cmd ...]\n"
program); "usage: %s ... -f filename\n"
"1st cscript line: #/path/to/calc ... -f\n",
program, program);
exit(1); exit(1);
} }
if (havearg) if (havearg)

8
calc.h
View File

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

View File

@@ -1,5 +1,5 @@
.\" .\"
.\" Copyright (C) 1999-2004 Landon Curt Noll .\" Copyright (C) 1999-2007 Landon Curt Noll
.\" .\"
.\" Calc is open software; you can redistribute it and/or modify it under .\" Calc is open software; you can redistribute it and/or modify it under
.\" the terms of the version 2.1 of the GNU Lesser General Public License .\" the terms of the version 2.1 of the GNU Lesser General Public License
@@ -15,8 +15,8 @@
.\" received a copy with calc; if not, write to Free Software Foundation, Inc. .\" received a copy with calc; if not, write to Free Software Foundation, Inc.
.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. .\" 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
.\" .\"
.\" @(#) $Revision: 29.18 $ .\" @(#) $Revision: 29.21 $
.\" @(#) $Id: calc.man,v 29.18 2005/10/18 11:10:18 chongo Exp $ .\" @(#) $Id: calc.man,v 29.21 2007/02/07 00:38:43 chongo Exp $
.\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $ .\" @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.man,v $
.\" .\"
.\" Under source code control: 1991/07/23 05:48:26 .\" Under source code control: 1991/07/23 05:48:26
@@ -28,7 +28,7 @@
.\" calculator by David I. Bell .\" calculator by David I. Bell
.\" man page by Landon Noll .\" man page by Landon Noll
.\" .\"
.TH calc 1 "^..^" "1999-11-30" .TH calc 1 "^..^" "2007-02-06"
.SH NAME .SH NAME
calc \- arbitrary precision calculator calc \- arbitrary precision calculator
.SH SYNOPSIS .SH SYNOPSIS
@@ -63,8 +63,11 @@ CALC OPTIONS
.TP .TP
.B \-c .B \-c
Continue reading command lines even after an execution Continue reading command lines even after an scan/parse
error has caused the abandonment of a line. error has caused the abandonment of a line.
Note that this option only deals with scanning and
parsing of the calc language.
It does not deal with execution or run-time errors.
.sp 1 .sp 1
For example: For example:
.sp 1 .sp 1
@@ -76,7 +79,7 @@ calc read many_errors.cal
.sp 1 .sp 1
will cause will cause
.B calc .B calc
to abort on the first error, whereas: to abort on the first syntax error, whereas:
.sp 1 .sp 1
.in +5n .in +5n
.nf .nf
@@ -88,7 +91,7 @@ will
cause cause
.B calc .B calc
to try to process each line being read to try to process each line being read
despite the errors that it encounters. despite the scan/parse errors that it encounters.
.sp 1 .sp 1
By default, calc startup resource files are silently By default, calc startup resource files are silently
ignored if not found. ignored if not found.

View File

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

View File

@@ -1,7 +1,7 @@
# #
# calcerr - error codes and messages # 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 # Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License # the terms of the version 2.1 of the GNU Lesser General Public License
@@ -17,8 +17,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
# @(#) $Revision: 29.8 $ # @(#) $Revision: 29.10 $
# @(#) $Id: calcerr.tbl,v 29.8 2006/05/19 15:12:57 chongo Exp $ # @(#) $Id: calcerr.tbl,v 29.10 2006/08/20 15:01:30 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
# #
# Under source code control: 1996/05/23 17:38:44 # Under source code control: 1996/05/23 17:38:44
@@ -404,9 +404,9 @@ E_ASSIGN8 No-type-change destination for assign
E_ASSIGN9 No-error-value destination for assign E_ASSIGN9 No-error-value destination for assign
E_SWAP1 No-copy argument for octet swap E_SWAP1 No-copy argument for octet swap
E_SWAP2 No-assign-to-or-from argument for swap E_SWAP2 No-assign-to-or-from argument for swap
E_SWAP3 Non-variable argument for swap E_SWAP3 Non-lvalue argument for swap
E_QUOMOD1 Non-variable argument 4 or 4 for quomod E_QUOMOD1 Non-lvalue argument 3 or 4 for quomod
E_QUOMOD2 Non-real-number argument 1 or 2 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_QUOMOD3 No-assign-to argument 3 or 4 for quomod
E_PREINC1 No-copy-to or no-change argument for octet preinc E_PREINC1 No-copy-to or no-change argument for octet preinc
E_PREINC2 Non-variable argument for 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_FPATHOPEN2 Unrecognized mode for fpathopen
E_LOG1 Bad epsilon argument for log E_LOG1 Bad epsilon argument for log
E_LOG2 Non-numeric first 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. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
# @(#) $Revision: 29.3 $ # @(#) $Revision: 29.5 $
# @(#) $Id: check.awk,v 29.3 2006/05/20 19:43:39 chongo Exp $ # @(#) $Id: check.awk,v 29.5 2006/09/18 08:01:13 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $ # @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $
# #
# Under source code control: 1996/05/25 22:07:58 # Under source code control: 1996/05/25 22:07:58
@@ -64,7 +64,7 @@ NF == 0 {
end_seen = 1; end_seen = 1;
} }
$1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ { $1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ || $1 ~ /^"\)\)$/ {
if (error > 0) { if (error > 0) {
if (havebuf2) { if (havebuf2) {
print buf2; print buf2;

202
codegen.c
View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.15 $ * @(#) $Revision: 29.22 $
* @(#) $Id: codegen.c,v 29.15 2006/05/20 09:42:57 chongo Exp $ * @(#) $Id: codegen.c,v 29.22 2006/12/15 16:25:09 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $
* *
* Under source code control: 1990/02/15 01:48:13 * Under source code control: 1990/02/15 01:48:13
@@ -136,10 +136,6 @@ getcommands(BOOL toplevel)
getfunction(); getfunction();
break; break;
case T_UNDEFINE:
ungetfunction();
break;
case T_EOF: case T_EOF:
if (!toplevel) if (!toplevel)
exitfilescope(); exitfilescope();
@@ -148,6 +144,7 @@ getcommands(BOOL toplevel)
case T_HELP: case T_HELP:
for (i=1;;i++) { for (i=1;;i++) {
switch(getfilename(name, MAXCMD+1, NULL)) { switch(getfilename(name, MAXCMD+1, NULL)) {
case 1:
case -1: case -1:
if(i == 1) { if(i == 1) {
strcpy(name, DEFAULTCALCHELP); strcpy(name, DEFAULTCALCHELP);
@@ -306,8 +303,8 @@ ungetfunction(void)
name = tokensymbol(); name = tokensymbol();
type = getbuiltinfunc(name); type = getbuiltinfunc(name);
if (type >= 0) { if (type >= 0) {
fprintf(stderr, warning(
"Attempt to undefine builtin function \"%s\" ignored\n", name); "Cannot undefine builtin function \"%s\"", name);
continue; continue;
} }
rmuserfunc(name); rmuserfunc(name);
@@ -315,6 +312,16 @@ ungetfunction(void)
case T_MULT: case T_MULT:
rmalluserfunc(); rmalluserfunc();
continue; 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_NEWLINE:
case T_SEMICOLON: case T_SEMICOLON:
case T_EOF: case T_EOF:
@@ -365,7 +372,8 @@ getfunction(void)
if (type == T_RIGHTPAREN) if (type == T_RIGHTPAREN)
break; break;
if (type != T_SYMBOL) { if (type != T_SYMBOL) {
scanerror(T_COMMA, "Bad function definition"); scanerror(T_COMMA,
"Using non-identifier as function parameter");
return; return;
} }
name = tokensymbol(); name = tokensymbol();
@@ -394,7 +402,8 @@ getfunction(void)
if (type == T_RIGHTPAREN) if (type == T_RIGHTPAREN)
break; break;
if (type != T_COMMA) { if (type != T_COMMA) {
scanerror(T_COMMA, "Bad function definition"); scanerror(T_COMMA,
"Using other than comma to separate parameters");
return; return;
} }
} }
@@ -408,8 +417,7 @@ getfunction(void)
break; break;
default: default:
scanerror(T_NULL, scanerror(T_NULL,
"Left brace or equals sign " "Left brace or equals sign expected for function");
"expected for function");
return; return;
} }
endfunc(); endfunc();
@@ -632,6 +640,10 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
(void) getdeclarations(SYM_LOCAL); (void) getdeclarations(SYM_LOCAL);
break; break;
case T_UNDEFINE:
ungetfunction();
break;
case T_RIGHTBRACE: case T_RIGHTBRACE:
scanerror(T_NULL, "Extraneous right brace"); scanerror(T_NULL, "Extraneous right brace");
return; return;
@@ -797,10 +809,10 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
setlabel(&label3); setlabel(&label3);
if (contlabel == NULL_LABEL) if (contlabel == NULL_LABEL)
contlabel = &label3; contlabel = &label3;
(void) tokenmode(oldmode);
getstatement(contlabel, breaklabel, NULL_LABEL, NULL_LABEL); getstatement(contlabel, breaklabel, NULL_LABEL, NULL_LABEL);
addoplabel(OP_JUMP, contlabel); addoplabel(OP_JUMP, contlabel);
setlabel(breaklabel); setlabel(breaklabel);
(void) tokenmode(oldmode);
return; return;
case T_WHILE: case T_WHILE:
@@ -809,6 +821,7 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
clearlabel(contlabel); clearlabel(contlabel);
setlabel(contlabel); setlabel(contlabel);
getcondition(); getcondition();
(void) tokenmode(oldmode);
if (gettoken() != T_SEMICOLON) { if (gettoken() != T_SEMICOLON) {
breaklabel = &label2; breaklabel = &label2;
clearlabel(breaklabel); clearlabel(breaklabel);
@@ -821,7 +834,6 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
} else { } else {
addoplabel(OP_JUMPNZ, contlabel); addoplabel(OP_JUMPNZ, contlabel);
} }
(void) tokenmode(oldmode);
return; return;
case T_DO: case T_DO:
@@ -938,6 +950,7 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
case T_RIGHTBRACKET: case T_RIGHTBRACKET:
case T_RIGHTBRACE: case T_RIGHTBRACE:
case T_NEWLINE: case T_NEWLINE:
case T_ELSE:
case T_EOF: case T_EOF:
rescantoken(); rescantoken();
/*FALLTHRU*/ /*FALLTHRU*/
@@ -1020,6 +1033,7 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
case T_RIGHTBRACE: case T_RIGHTBRACE:
case T_NEWLINE: case T_NEWLINE:
case T_EOF: case T_EOF:
case T_ELSE:
rescantoken(); rescantoken();
return; return;
case T_SEMICOLON: case T_SEMICOLON:
@@ -1393,7 +1407,7 @@ getinitlist(void)
oldmode = tokenmode(TM_DEFAULT); oldmode = tokenmode(TM_DEFAULT);
if (gettoken() != T_LEFTBRACE) { if (gettoken() != T_LEFTBRACE) {
scanerror(T_SEMICOLON, "Missing brace for initialization list"); scanerror(T_SEMICOLON, "Missing left brace for initialization list");
(void) tokenmode(oldmode); (void) tokenmode(oldmode);
return -1; return -1;
} }
@@ -1428,7 +1442,7 @@ getinitlist(void)
default: default:
scanerror(T_SEMICOLON, scanerror(T_SEMICOLON,
"Bad initialization list"); "Missing right brace for initialization list");
(void) tokenmode(oldmode); (void) tokenmode(oldmode);
return -1; return -1;
} }
@@ -1949,7 +1963,8 @@ getreference(void)
switch(gettoken()) { switch(gettoken()) {
case T_ANDAND: case T_ANDAND:
scanerror(T_NULL, "Non-variable operand for &"); scanerror(T_NULL, "&& used as prefix operator");
/*FALLTHRU*/
case T_AND: case T_AND:
type = getreference(); type = getreference();
addop(OP_PTR); addop(OP_PTR);
@@ -2104,9 +2119,23 @@ getterm(void)
type = getidexpr(TRUE, 0); type = getidexpr(TRUE, 0);
break; break;
case T_MULT:
(void) getterm();
addop(OP_DEREF);
type = 0;
break;
case T_POWER: /* '**' or '^' */
(void) getterm();
addop(OP_DEREF);
addop(OP_DEREF);
type = 0;
break;
case T_GLOBAL: case T_GLOBAL:
if (gettoken() != T_SYMBOL) { if (gettoken() != T_SYMBOL) {
scanerror(T_NULL, "Global id expected"); scanerror(T_NULL,
"No identifier after global specifier");
break; break;
} }
rescantoken(); rescantoken();
@@ -2115,19 +2144,30 @@ getterm(void)
case T_LOCAL: case T_LOCAL:
if (gettoken() != T_SYMBOL) { if (gettoken() != T_SYMBOL) {
scanerror(T_NULL, "Local id expected"); scanerror(T_NULL,
"No identifier after local specifier");
break; break;
} }
rescantoken(); rescantoken();
type = getidexpr(TRUE, T_LOCAL); type = getidexpr(TRUE, T_LOCAL);
break; 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: case T_LEFTBRACKET:
scanerror(T_NULL, "Bad index usage"); scanerror(T_NULL, "Left bracket with no preceding lvalue");
break; break;
case T_PERIOD: case T_PERIOD:
scanerror(T_NULL, "Bad element reference"); scanerror(T_NULL, "Period with no preceding lvalue");
break; break;
default: default:
@@ -2189,7 +2229,8 @@ getidexpr(BOOL okmat, int autodef)
type = 0; type = 0;
break; break;
case T_ASSIGN: case T_ASSIGN:
if (autodef != T_GLOBAL && autodef != T_LOCAL) if (autodef != T_GLOBAL && autodef != T_LOCAL &&
autodef != T_STATIC)
autodef = 1; autodef = 1;
/* fall into default case */ /* fall into default case */
default: default:
@@ -2305,7 +2346,7 @@ getfilename(char *name, size_t namelen, BOOL *once)
/* /*
* special hack - symbols starting with $ are * special hack - symbols starting with $ are
* treated as a gloabl variable * treated as a global variable
* instead of a literal string. * instead of a literal string.
*/ */
if (symstr[0] == '$') { if (symstr[0] == '$') {
@@ -2390,22 +2431,11 @@ getshowstatement(void)
"stri\000" "stri\000"
"lite\000" "lite\000"
"opco\000", name); "opco\000", name);
if (arg == 19) { break;
if (gettoken() != T_SYMBOL) { case T_GLOBAL:
rescantoken(); arg = 13; break;
scanerror(T_SEMICOLON, case T_STATIC:
"Function name expected"); arg = 14; break;
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;
default: default:
printf("SHOW command to be followed by at least "); printf("SHOW command to be followed by at least ");
printf("four letters of one of:\n"); printf("four letters of one of:\n");
@@ -2420,6 +2450,21 @@ getshowstatement(void)
return; 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");
} }
@@ -2538,8 +2583,9 @@ getid(char *buf)
* Define a symbol name to be of the specified symbol type. The scope * 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 * 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 * 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 * level. Warnings are issued when a global or local variable is
* incompatible manner. * redeclared and when in the same body the variable will be accessible only
^ with the appropriate specfier.
*/ */
static void static void
definesymbol(char *name, int symtype) definesymbol(char *name, int symtype)
@@ -2548,25 +2594,48 @@ definesymbol(char *name, int symtype)
case SYM_STATIC: case SYM_STATIC:
if (symtype == SYM_GLOBAL || symtype == SYM_STATIC) if (symtype == SYM_GLOBAL || symtype == SYM_STATIC)
endscope(name, symtype == SYM_GLOBAL); endscope(name, symtype == SYM_GLOBAL);
/*FALLTHRU*/ break;
case SYM_UNDEFINED:
case SYM_GLOBAL: case SYM_GLOBAL:
if (symtype == SYM_LOCAL) if (symtype == SYM_GLOBAL && conf->redecl_warn) {
(void) addlocal(name); warning("redeclaraion of global \"%s\"",
else name);
(void) addglobal(name, (symtype == SYM_STATIC)); return;
}
break; break;
case SYM_LOCAL: case SYM_LOCAL:
if (symtype == SYM_LOCAL) if (symtype == SYM_LOCAL && conf->redecl_warn) {
warning("redeclaraion of local \"%s\"",
name);
return; 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: case SYM_PARAM:
scanerror(T_COMMA, if (symtype == SYM_LOCAL && conf->dupvar_warn) {
"Variable \"%s\" is already defined", name); warning("both local and parameter \"%s\" defined",
return; 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));
} }
@@ -2584,21 +2653,28 @@ definesymbol(char *name, int symtype)
static void static void
usesymbol(char *name, int autodef) usesymbol(char *name, int autodef)
{ {
int type;
type = symboltype(name);
if (autodef == T_GLOBAL) { if (autodef == T_GLOBAL) {
addopptr(OP_GLOBALADDR, (char *) addglobal(name, FALSE)); if (type == SYM_GLOBAL) {
return; 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 (autodef == T_LOCAL) {
if (symboltype(name) == SYM_PARAM) { if (type == SYM_LOCAL) {
scanerror(T_COMMA, warning("Unnecessary local specifier");
"Variable \"%s\" is already defined", name); }
return; addopone(OP_LOCALADDR, addlocal(name));
} return;
addopone(OP_LOCALADDR, addlocal(name));
return;
} }
switch (symboltype(name)) { switch (type) {
case SYM_LOCAL: case SYM_LOCAL:
addopone(OP_LOCALADDR, (long) findlocal(name)); addopone(OP_LOCALADDR, (long) findlocal(name));
return; return;

192
config.c
View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.17 $ * @(#) $Revision: 29.23 $
* @(#) $Id: config.c,v 29.17 2006/05/19 15:26:10 chongo Exp $ * @(#) $Id: config.c,v 29.23 2006/12/15 16:17:18 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
* *
* Under source code control: 1991/07/20 00:21:56 * Under source code control: 1991/07/20 00:21:56
@@ -31,6 +31,24 @@
#include <stdio.h> #include <stdio.h>
#include "have_times.h"
#if defined(HAVE_TIME_H)
#include <time.h>
#endif
#if defined(HAVE_TIMES_H)
#include <times.h>
#endif
#if defined(HAVE_SYS_TIME_H)
#include <sys/time.h>
#endif
#if defined(HAVE_SYS_TIMES_H)
#include <sys/times.h>
#endif
#include "calc.h" #include "calc.h"
#include "token.h" #include "token.h"
#include "zrand.h" #include "zrand.h"
@@ -45,6 +63,15 @@
# define strdup(x) calc_strdup((CONST char *)(x)) # define strdup(x) calc_strdup((CONST char *)(x))
#endif /* HAVE_STRDUP */ #endif /* HAVE_STRDUP */
/*
* deal with systems that lack a defined CLK_TCK
*/
#if defined(CLK_TCK)
# define CALC_HZ ((long)(CLK_TCK))
#else
# define CALC_HZ (0L) /* no defined clock tick rate */
#endif
/* /*
* Table of configuration types that can be set or read. * Table of configuration types that can be set or read.
@@ -97,6 +124,10 @@ NAMETYPE configs[] = {
{"compile_custom", CONFIG_COMPILE_CUSTOM}, {"compile_custom", CONFIG_COMPILE_CUSTOM},
{"allow_custom", CONFIG_ALLOW_CUSTOM}, {"allow_custom", CONFIG_ALLOW_CUSTOM},
{"version", CONFIG_VERSION}, {"version", CONFIG_VERSION},
{"baseb", CONFIG_BASEB},
{"redecl_warn", CONFIG_REDECL_WARN},
{"dupvar_warn", CONFIG_DUPVAR_WARN},
{"hz", CONFIG_HZ},
{NULL, 0} {NULL, 0}
}; };
@@ -159,7 +190,10 @@ CONFIG oldstd = { /* backward compatible standard configuration */
FALSE, /* compiled without -DCUSTOM */ FALSE, /* compiled without -DCUSTOM */
#endif #endif
&allow_custom, /* *TRUE=> custom functions are enabled */ &allow_custom, /* *TRUE=> custom functions are enabled */
NULL /* version */ NULL, /* version */
BASEB, /* base for calculations */
TRUE, /* warn when redeclaring */
TRUE, /* warn when variable names collide */
}; };
CONFIG newstd = { /* new non-backward compatible configuration */ CONFIG newstd = { /* new non-backward compatible configuration */
MODE_INITIAL, /* current output mode */ MODE_INITIAL, /* current output mode */
@@ -216,7 +250,10 @@ CONFIG newstd = { /* new non-backward compatible configuration */
FALSE, /* compiled without -DCUSTOM */ FALSE, /* compiled without -DCUSTOM */
#endif #endif
&allow_custom, /* *TRUE=> custom functions are enabled */ &allow_custom, /* *TRUE=> custom functions are enabled */
NULL /* version */ 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 */ CONFIG *conf = NULL; /* loaded in at startup - current configuration */
@@ -405,7 +442,8 @@ lookup_name(NAMETYPE *set, long val)
/* /*
* Check whether VALUE at vp is a LEN (32-bit signed integer) and if so, * Check whether VALUE at vp is a LEN (32-bit signed integer) and if so,
* copy that integer to lp. * 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 static int
@@ -527,7 +565,7 @@ setconfig(int type, VALUE *vp)
break; break;
case CONFIG_MUL2: case CONFIG_MUL2:
if (getlen(vp, &len)) { if (getlen(vp, &len) || len < 0 || len == 1) {
math_error("Bad value for mul2"); math_error("Bad value for mul2");
/*NOTREACHED*/ /*NOTREACHED*/
} }
@@ -537,7 +575,7 @@ setconfig(int type, VALUE *vp)
break; break;
case CONFIG_SQ2: case CONFIG_SQ2:
if (getlen(vp, &len)) { if (getlen(vp, &len) || len < 0 || len == 1) {
math_error("Bad value for sq2"); math_error("Bad value for sq2");
/*NOTREACHED*/ /*NOTREACHED*/
} }
@@ -547,7 +585,7 @@ setconfig(int type, VALUE *vp)
break; break;
case CONFIG_POW2: case CONFIG_POW2:
if (getlen(vp, &len)) { if (getlen(vp, &len) || len < 0 || len == 1) {
math_error("Bad value for pow2"); math_error("Bad value for pow2");
/*NOTREACHED*/ /*NOTREACHED*/
} }
@@ -557,7 +595,7 @@ setconfig(int type, VALUE *vp)
break; break;
case CONFIG_REDC2: case CONFIG_REDC2:
if (getlen(vp, &len)) { if (getlen(vp, &len) || len < 0 || len == 1) {
math_error("Bad value for redc2"); math_error("Bad value for redc2");
/*NOTREACHED*/ /*NOTREACHED*/
} }
@@ -899,6 +937,42 @@ setconfig(int type, VALUE *vp)
math_error("The version config parameter is read-only"); math_error("The version config parameter is read-only");
/*NOTREACHED*/ /*NOTREACHED*/
case CONFIG_BASEB:
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;
case CONFIG_HZ:
math_error("The clock tick rate config parameter is read-only");
/*NOTREACHED*/
default: default:
math_error("Setting illegal config parameter"); math_error("Setting illegal config parameter");
/*NOTREACHED*/ /*NOTREACHED*/
@@ -1110,20 +1184,12 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
break; break;
case CONFIG_TILDE: case CONFIG_TILDE:
if (cfg->tilde_ok) { i = (cfg->tilde_ok ? 1 : 0);
vp->v_num = itoq(1); break;
} else {
vp->v_num = itoq(0);
}
return;
case CONFIG_TAB: case CONFIG_TAB:
if (cfg->tab_ok) { i = (cfg->tab_ok ? 1 : 0);
vp->v_num = itoq(1); break;
} else {
vp->v_num = itoq(0);
}
return;
case CONFIG_QUOMOD: case CONFIG_QUOMOD:
i = cfg->quomod; i = cfg->quomod;
@@ -1162,20 +1228,12 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
break; break;
case CONFIG_LEADZERO: case CONFIG_LEADZERO:
if (cfg->leadzero) { i = (cfg->leadzero ? 1 : 0);
vp->v_num = itoq(1); break;
} else {
vp->v_num = itoq(0);
}
return;
case CONFIG_FULLZERO: case CONFIG_FULLZERO:
if (cfg->fullzero) { i = (cfg->fullzero ? 1 : 0);
vp->v_num = itoq(1); break;
} else {
vp->v_num = itoq(0);
}
return;
case CONFIG_MAXSCAN: case CONFIG_MAXSCAN:
i = cfg->maxscancount; i = cfg->maxscancount;
@@ -1196,12 +1254,8 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
break; break;
case CONFIG_BLKVERBOSE: case CONFIG_BLKVERBOSE:
if (cfg->blkverbose) { i = (cfg->blkverbose ? 1 : 0);
vp->v_num = itoq(1); break;
} else {
vp->v_num = itoq(0);
}
return;
case CONFIG_BLKBASE: case CONFIG_BLKBASE:
vp->v_type = V_STR; vp->v_type = V_STR;
@@ -1236,12 +1290,8 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
break; break;
case CONFIG_VERBOSE_QUIT: case CONFIG_VERBOSE_QUIT:
if (cfg->verbose_quit) { i = (cfg->verbose_quit ? 1 : 0);
vp->v_num = itoq(1); break;
} else {
vp->v_num = itoq(0);
}
return;
case CONFIG_CTRL_D: case CONFIG_CTRL_D:
vp->v_type = V_STR; vp->v_type = V_STR;
@@ -1272,40 +1322,24 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
return; return;
case CONFIG_WINDOWS: case CONFIG_WINDOWS:
if (cfg->windows) { i = (cfg->windows ? 1 : 0);
vp->v_num = itoq(1); break;
} else {
vp->v_num = itoq(0);
}
return;
case CONFIG_CYGWIN: case CONFIG_CYGWIN:
if (cfg->cygwin) { i = (cfg->cygwin ? 1 : 0);
vp->v_num = itoq(1); break;
} else {
vp->v_num = itoq(0);
}
return;
case CONFIG_COMPILE_CUSTOM: case CONFIG_COMPILE_CUSTOM:
if (cfg->compile_custom) { i = (cfg->compile_custom ? 1 : 0);
vp->v_num = itoq(1); break;
} else {
vp->v_num = itoq(0);
}
return;
case CONFIG_ALLOW_CUSTOM: case CONFIG_ALLOW_CUSTOM:
/* firewall */ /* firewall */
if (cfg->allow_custom == NULL) { if (cfg->allow_custom == NULL) {
cfg->allow_custom = &allow_custom; cfg->allow_custom = &allow_custom;
} }
if (*(cfg->allow_custom)) { i = (*(cfg->allow_custom) ? 1 : 0);
vp->v_num = itoq(1); break;
} else {
vp->v_num = itoq(0);
}
return;
case CONFIG_VERSION: case CONFIG_VERSION:
vp->v_type = V_STR; vp->v_type = V_STR;
@@ -1316,6 +1350,22 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
} }
return; return;
case CONFIG_BASEB:
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;
case CONFIG_HZ:
i = CALC_HZ;
break;
default: default:
math_error("Getting illegal CONFIG element"); math_error("Getting illegal CONFIG element");
/*NOTREACHED*/ /*NOTREACHED*/
@@ -1420,5 +1470,7 @@ config_cmp(CONFIG *cfg1, CONFIG *cfg2)
(cfg1->version == NULL && cfg2->version != NULL) || (cfg1->version == NULL && cfg2->version != NULL) ||
(cfg1->version != NULL && cfg2->version == NULL) || (cfg1->version != NULL && cfg2->version == NULL) ||
(cfg1->version != NULL && cfg2->version != NULL && (cfg1->version != NULL && cfg2->version != NULL &&
strcmp(cfg1->version, cfg2->version) != 0); strcmp(cfg1->version, cfg2->version) != 0) ||
cfg1->baseb != cfg2->baseb;
} }

View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.17 $ * @(#) $Revision: 29.21 $
* @(#) $Id: config.h,v 29.17 2004/02/25 23:56:13 chongo Exp $ * @(#) $Id: config.h,v 29.21 2006/12/15 16:16:59 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.h,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/config.h,v $
* *
* Under source code control: 1995/11/01 22:20:17 * Under source code control: 1995/11/01 22:20:17
@@ -94,6 +94,10 @@
#define CONFIG_CYGWIN 40 #define CONFIG_CYGWIN 40
#define CONFIG_COMPILE_CUSTOM 41 #define CONFIG_COMPILE_CUSTOM 41
#define CONFIG_ALLOW_CUSTOM 42 #define CONFIG_ALLOW_CUSTOM 42
#define CONFIG_BASEB 43
#define CONFIG_REDECL_WARN 44
#define CONFIG_DUPVAR_WARN 45
#define CONFIG_HZ 46
/* /*
@@ -150,8 +154,8 @@ struct config {
BOOL blkverbose; /* TRUE => print all lines if a block */ BOOL blkverbose; /* TRUE => print all lines if a block */
int blkbase; /* block output base */ int blkbase; /* block output base */
int blkfmt; /* block output style */ int blkfmt; /* block output style */
long calc_debug; /* internal debug, see CALC_DEBUG_XXX below */ long calc_debug; /* internal debug, see CALC_DEBUG_XYZ below */
long resource_debug; /* resource debug, see RSCDBG_XXX below */ long resource_debug; /* resource debug, see RSCDBG_XYZ below */
long user_debug; /* user defined debug value: 0 default */ long user_debug; /* user defined debug value: 0 default */
BOOL verbose_quit; /* TRUE => print Quit or abort executed msg */ BOOL verbose_quit; /* TRUE => print Quit or abort executed msg */
int ctrl_d; /* see CTRL_D_xyz below */ int ctrl_d; /* see CTRL_D_xyz below */
@@ -162,6 +166,9 @@ struct config {
BOOL compile_custom; /* TRUE => compiled with -DCUSTOM */ BOOL compile_custom; /* TRUE => compiled with -DCUSTOM */
BOOL *allow_custom; /* ptr to if custom functions are allowed */ BOOL *allow_custom; /* ptr to if custom functions are allowed */
char *version; /* calc version string */ 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; typedef struct config CONFIG;

View File

@@ -1,4 +1,4 @@
#!/usr/local/src/cmd/calc/calc -q -s -f #!/usr/local/src/cmd/calc/calc -q -f
/* /*
* 4dsphere - determine if 6 points lie on the surface of a sphere in R^4 * 4dsphere - determine if 6 points lie on the surface of a sphere in R^4
* *
@@ -26,8 +26,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 1.3 $ * @(#) $Revision: 1.4 $
* @(#) $Id: 4dsphere.calc,v 1.3 2001/06/06 09:06:29 chongo Exp $ * @(#) $Id: 4dsphere.calc,v 1.4 2007/02/07 00:34:04 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/4dsphere.calc,v $ * @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/4dsphere.calc,v $
* *
* Under source code control: 2001/05/03 19:02:03 * Under source code control: 2001/05/03 19:02:03

View File

@@ -1,7 +1,7 @@
# #
# cscript - makefile for calc shell script files # 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 # Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License # the terms of the version 2.1 of the GNU Lesser General Public License
@@ -17,8 +17,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
# @(#) $Revision: 29.23 $ # @(#) $Revision: 29.32 $
# @(#) $Id: Makefile,v 29.23 2003/01/14 01:58:18 chongo Exp $ # @(#) $Id: Makefile,v 29.32 2007/02/08 21:21:25 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/Makefile,v $ # @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/Makefile,v $
# #
# Under source code control: 1999/11/29 11:10:26 # Under source code control: 1999/11/29 11:10:26
@@ -34,7 +34,7 @@
# required vars # required vars
# #
SHELL= /bin/sh SHELL= /bin/sh
MAKE_FILE = Makefile MAKE_FILE= Makefile
#### ####
# Normally, the upper level makefile will set these values. We provide # Normally, the upper level makefile will set these values. We provide
@@ -62,9 +62,9 @@ INCDIR= /usr/include
# ${LIBDIR} where calc link library (*.a) files are installed # ${LIBDIR} where calc link library (*.a) files are installed
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files # ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
# #
# NOTE: The install rule prepends installation paths with $T, which # NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If $T is non-empty, then installation # by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the $T directory. # locations will be relative to the ${T} directory.
# #
# For DJGPP, select: # For DJGPP, select:
# #
@@ -96,12 +96,12 @@ CALC_SHAREDIR= /usr/share/calc
# ${CALC_INCDIR} where the calc include files are installed # ${CALC_INCDIR} where the calc include files are installed
# ${CUSTOMCALDIR} where custom *.cal files are installed # ${CUSTOMCALDIR} where custom *.cal files are installed
# ${CUSTOMHELPDIR} where custom help files are installed # ${CUSTOMHELPDIR} where custom help files are installed
# ${CUSTOMINCPDIR} where custom .h files are installed # ${CUSTOMINCDIR} where custom .h files are installed
# ${SCRIPTDIR} where calc shell scripts are installed # ${SCRIPTDIR} where calc shell scripts are installed
# #
# NOTE: The install rule prepends installation paths with $T, which # NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If $T is non-empty, then installation # by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the $T directory. # locations will be relative to the ${T} directory.
# #
# If in doubt, set: # If in doubt, set:
# #
@@ -121,8 +121,8 @@ SCRIPTDIR= ${BINDIR}/cscript
# T - top level directory under which calc will be installed # T - top level directory under which calc will be installed
# #
# The calc install is performed under $T, the calc build is # The calc install is performed under ${T}, the calc build is
# performed under /. The purpose for $T is to allow someone # performed under /. The purpose for ${T} is to allow someone
# to install calc somewhere other than into the system area. # to install calc somewhere other than into the system area.
# #
# For example, if: # For example, if:
@@ -142,10 +142,10 @@ SCRIPTDIR= ${BINDIR}/cscript
# calc help, .cal ...: /var/tmp/testing/usr/share/calc # calc help, .cal ...: /var/tmp/testing/usr/share/calc
# ... etc ... /var/tmp/testing/... # ... etc ... /var/tmp/testing/...
# #
# If $T is empty, calc is installed under /, which is the same # 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 # 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 # calc is installed under ${T}, as if one had to chroot under
# $T for calc to operate. # ${T} for calc to operate.
# #
# If in doubt, use T= # If in doubt, use T=
# #
@@ -166,6 +166,14 @@ SED= sed
SORT= sort SORT= sort
FMT= fmt FMT= fmt
CMP= cmp 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 # The ${SCRIPT} list is the list of calc shell script files (without the .calc
# extension) which will be installed. # extension) which will be installed.
@@ -191,7 +199,7 @@ SCRIPT_SRC= 4dsphere.calc fproduct.calc mersenne.calc \
# These files are found (but not built) in the distribution # These files are found (but not built) in the distribution
# #
DISTLIST= ${SCRIPT_SRC} ${MAKE_FILE} README DISTLIST= ${SCRIPT_SRC} ${MAKE_FILE} README.src
# These files are used to make (but not build) a calc .a library # These files are used to make (but not build) a calc .a library
# #
@@ -199,24 +207,28 @@ CALCLIBLIST=
# complete list of targets # 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 # in the upper level ../Makefile
# #
CSCRIPT_TARGETS= ${SCRIPT} CSCRIPT_TARGETS= ${SCRIPT}
TARGETS= ${CSCRIPT_TARGETS} TARGETS= ${CSCRIPT_TARGETS} README
# The reason for this Makefile # The reason for this Makefile
# #
all: ${TARGETS} .all all: ${TARGETS} .all
README: README.src
@${RM} -f $@
@${SED} -e "s:#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
# used by the upper level Makefile to determine if we have done all # used by the upper level Makefile to determine if we have done all
# #
# NOTE: Due to bogus shells found on one common system we must have # NOTE: Due to bogus shells found on one common system we must have
# a non-empty else clause for every if condition. *sigh* # a non-empty else clause for every if condition. *sigh*
# #
.all: .all:
rm -f .all ${RM} -f .all
touch .all ${TOUCH} .all
## ##
# #
@@ -229,21 +241,22 @@ all: ${TARGETS} .all
## ##
distlist: ${DISTLIST} 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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo cscript/$$i; \ echo cscript/$$i; \
fi; \ fi; \
done | LANG=C ${SORT} done | LANG=C ${SORT}
distdir: distdir:
${Q}echo cscript ${Q} echo cscript
calcliblist: calcliblist:
# These next rule help me form the ${DETAIL_HELP} makefile variables above. # These next rule help me form the ${SCRIPT} and ${SCRIPT_SRC} makefile
# variables above.
# #
detaillist: detaillist:
${Q}-(echo "xxxxxxx"; \ ${Q} -(echo "xxxxxxx"; \
for i in ${SCRIPT} /dev/null; do \ for i in ${SCRIPT} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
if [ ! -f RCS/$$i.calc,v ]; then \ if [ ! -f RCS/$$i.calc,v ]; then \
@@ -255,9 +268,9 @@ detaillist:
done | LANG=C ${SORT}) | ${FMT} -70 | \ done | LANG=C ${SORT}) | ${FMT} -70 | \
${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \ ${SED} -e '1s/xxxxxxx/SCRIPT=/' -e '2,$$s/^/ /' \
-e 's/$$/ \\/' -e '$$s/ \\$$//' -e 's/$$/ \\/' -e '$$s/ \\$$//'
${Q}echo ${Q} echo
${Q}-(echo "xxxxxxxxxxx"; \ ${Q} -(echo "xxxxxxxxxxx"; \
for i in ${SCRIPT} /dev/null; do \ for i in ${SCRIPT} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
if [ ! -f RCS/$$i.calc,v ]; then \ if [ ! -f RCS/$$i.calc,v ]; then \
echo "WARNING: $$i.calc not under RCS control" 1>&2; \ echo "WARNING: $$i.calc not under RCS control" 1>&2; \
@@ -282,46 +295,46 @@ detaillist:
## ##
depend: depend:
${Q}if [ -f Makefile.bak ]; then \ ${Q} if [ -f Makefile.bak ]; then \
echo "Makefile.bak exists, remove or move it out of the way"; \ echo "Makefile.bak exists, remove or move it out of the way"; \
exit 1; \ exit 1; \
else \ else \
true; \ ${TRUE}; \
fi fi
-${Q}rm -f makedep.out -${Q} ${RM} -f makedep.out
${Q}echo forming cscript dependency list ${Q} echo forming cscript dependency list
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \ ${Q} echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
makedep.out makedep.out
${Q}echo "" >> makedep.out ${Q} echo "" >> makedep.out
${Q}for i in ${SCRIPT} /dev/null; do \ ${Q} for i in ${SCRIPT} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
echo "$$i: $$i.calc"; \ echo "$$i: $$i.calc"; \
echo ' @rm -f $$@'; \ echo ' @$${RM} -f $$@'; \
echo ' @$${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \ echo ' @$${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!$${BINDIR}/calc:" $$?>$$@'; \
echo ' @$${CHMOD} +x $$@'; \ echo ' @$${CHMOD} +x $$@'; \
fi; \ fi; \
done >> makedep.out done >> makedep.out
${Q}echo sample dependency list formed ${Q} echo sample dependency list formed
${Q}echo forming new cscript/Makefile ${Q} echo forming new cscript/Makefile
-${Q}rm -f Makefile.bak -${Q} ${RM} -f Makefile.bak
${Q}mv Makefile Makefile.bak ${Q} ${MV} Makefile Makefile.bak
${Q}${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile ${Q} ${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile
${Q}echo "" >> Makefile ${Q} echo "" >> Makefile
${Q}${SED} -n '3,$$p' makedep.out >> Makefile ${Q} ${SED} -n '3,$$p' makedep.out >> Makefile
-${Q}rm -f makedep.out -${Q} ${RM} -f makedep.out
-${Q}if ${CMP} -s Makefile.bak Makefile; then \ -${Q} if ${CMP} -s Makefile.bak Makefile; then \
echo 'sample Makefile was already up to date'; \ echo 'sample Makefile was already up to date'; \
mv -f Makefile.bak Makefile; \ ${MV} -f Makefile.bak Makefile; \
else \ else \
rm -f Makefile.tmp; \ ${RM} -f Makefile.tmp; \
mv Makefile Makefile.tmp; \ ${MV} Makefile Makefile.tmp; \
if [ -d RCS ]; then \ if [ -d RCS ]; then \
co -l Makefile; \ ${CO} -l Makefile; \
fi; \ fi; \
mv Makefile.tmp Makefile; \ ${MV} Makefile.tmp Makefile; \
if [ -d RCS ]; then \ if [ -d RCS ]; then \
echo new sample Makefile formed, you need to check it in; \ echo new sample Makefile formed, you need to check it in; \
fi; \ fi; \
fi fi
## ##
@@ -331,7 +344,7 @@ depend:
## ##
echo_inst_files: 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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${SCRIPTDIR}/$$i; \ echo __file__ ${SCRIPTDIR}/$$i; \
fi; \ fi; \
@@ -344,82 +357,111 @@ echo_inst_files:
## ##
clean: clean:
-rm -f makedep.out -${RM} -f makedep.out
clobber: clobber:
-rm -f ${TARGETS} -${RM} -f ${TARGETS}
# install everything
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
install: all install: all
-${Q}if [ ! -d $T${BINDIR} ]; then \ -${Q} if [ ! -d ${T}${BINDIR} ]; then \
echo mkdir $T${BINDIR}; \ echo ${MKDIR} ${T}${BINDIR}; \
mkdir $T${BINDIR}; \ ${MKDIR} ${T}${BINDIR}; \
if [ ! -d "$T${BINDIR}" ]; then \ if [ ! -d "${T}${BINDIR}" ]; then \
echo mkdir -p "$T${BINDIR}"; \ echo ${MKDIR} -p "${T}${BINDIR}"; \
mkdir -p "$T${BINDIR}"; \ ${MKDIR} -p "${T}${BINDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${BINDIR}; \ echo ${CHMOD} 0755 ${T}${BINDIR}; \
${CHMOD} 0755 $T${BINDIR}; \ ${CHMOD} 0755 ${T}${BINDIR}; \
else \ else \
true; \ ${TRUE}; \
fi fi
-${Q}if [ ! -d $T${SCRIPTDIR} ]; then \ -${Q} if [ ! -d ${T}${SCRIPTDIR} ]; then \
echo mkdir $T${SCRIPTDIR}; \ echo ${MKDIR} ${T}${SCRIPTDIR}; \
mkdir $T${SCRIPTDIR}; \ ${MKDIR} ${T}${SCRIPTDIR}; \
if [ ! -d "$T${SCRIPTDIR}" ]; then \ if [ ! -d "${T}${SCRIPTDIR}" ]; then \
echo mkdir -p "$T${SCRIPTDIR}"; \ echo ${MKDIR} -p "${T}${SCRIPTDIR}"; \
mkdir -p "$T${SCRIPTDIR}"; \ ${MKDIR} -p "${T}${SCRIPTDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${SCRIPTDIR}; \ echo ${CHMOD} 0755 ${T}${SCRIPTDIR}; \
${CHMOD} 0755 $T${SCRIPTDIR}; \ ${CHMOD} 0755 ${T}${SCRIPTDIR}; \
else \ else \
true; \ ${TRUE}; \
fi fi
${Q}for i in ${SCRIPT} /dev/null; do \ ${Q} for i in ${SCRIPT} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \ if [ "$$i" = "/dev/null" ]; then \
continue; \ continue; \
fi; \ fi; \
if ${CMP} -s $$i $T${SCRIPTDIR}/$$i; then \ if ${CMP} -s $$i ${T}${SCRIPTDIR}/$$i; then \
true; \ ${TRUE}; \
else \ else \
rm -f $T${SCRIPTDIR}/$$i.new; \ ${RM} -f ${T}${SCRIPTDIR}/$$i.new; \
cp -f $$i $T${SCRIPTDIR}/$$i.new; \ ${CP} -f $$i ${T}${SCRIPTDIR}/$$i.new; \
${CHMOD} 0555 $T${SCRIPTDIR}/$$i.new; \ ${CHMOD} 0755 ${T}${SCRIPTDIR}/$$i.new; \
mv -f $T${SCRIPTDIR}/$$i.new $T${SCRIPTDIR}/$$i; \ ${MV} -f ${T}${SCRIPTDIR}/$$i.new ${T}${SCRIPTDIR}/$$i; \
echo "installed $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; \ fi; \
done done
# DO NOT DELETE THIS LINE -- make depend depends on it. # DO NOT DELETE THIS LINE -- make depend depends on it.
4dsphere: 4dsphere.calc 4dsphere: 4dsphere.calc
@rm -f $@ @${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@ @${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@ @${CHMOD} +x $@
fproduct: fproduct.calc fproduct: fproduct.calc
@rm -f $@ @${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@ @${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@ @${CHMOD} +x $@
mersenne: mersenne.calc mersenne: mersenne.calc
@rm -f $@ @${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@ @${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@ @${CHMOD} +x $@
piforever: piforever.calc piforever: piforever.calc
@rm -f $@ @${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@ @${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@ @${CHMOD} +x $@
plus: plus.calc plus: plus.calc
@rm -f $@ @${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@ @${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@ @${CHMOD} +x $@
powerterm: powerterm.calc powerterm: powerterm.calc
@rm -f $@ @${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@ @${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@ @${CHMOD} +x $@
simple: simple.calc simple: simple.calc
@rm -f $@ @${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@ @${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@ @${CHMOD} +x $@
square: square.calc square: square.calc
@rm -f $@ @${RM} -f $@
@${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@ @${SED} -e "1s:^#!/usr/local/src/cmd/calc/calc:#!${BINDIR}/calc:" $?>$@
@${CHMOD} +x $@ @${CHMOD} +x $@

View File

@@ -5,6 +5,46 @@ These calc shell scripts are provided because they serve as examples of
how use the calc language, and/or because the authors thought them to how use the calc language, and/or because the authors thought them to
be useful! be useful!
Please note that calc shell scripts must start with the line:
#!/usr/local/src/cmd/calc/calc -q -f
The above line MUST start in column 1 of the first line. The first line
must also end in -f. The -q is optional, but is recommended to disable
the processing of calc startup scripts.
Also please note that single # shell line comments are not supported in calc.
Comments must be /* c-like comment */ or start with a double ## symbol.
This is the correct way to form a calc shell script:
#!/usr/local/src/cmd/calc/calc -q -f
/* a correct comment */
## another correct comment
### two or more together is also a comment
/*
* another correct comment
*/
print "2+2 =", 2+2; ## yet another comment
The first argument after the path to calc executable must be an -S.
The next arguments are optional. The -q is often recommended because
it will disable the processing of the startup scripts.
For more informaton about calc command lines, see "help usage".
This next example WRONG:
#!/usr/local/src/cmd/calc/calc -q
# This is not a calc calc comment because it has only a single #
# You must to start comments with ## or /*
# is is also wrong because the first line does not end in -f
print "This example has invalid comments"
#####
If you write something that you think is useful, please send it to: If you write something that you think is useful, please send it to:
calc-contrib at asthe dot com calc-contrib at asthe dot com
@@ -77,9 +117,9 @@ simple
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.10 $ ## @(#) $Revision: 29.11 $
## @(#) $Id: README,v 29.10 2001/06/10 19:34:40 chongo Exp $ ## @(#) $Id: README.src,v 29.11 2007/02/07 00:33:10 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/README,v $ ## @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/README.src,v $
## ##
## Under source code control: 1999/12/17 10:23:40 ## Under source code control: 1999/12/17 10:23:40
## File existed as early as: 1999 ## File existed as early as: 1999

View File

@@ -1,4 +1,4 @@
#!/usr/local/src/cmd/calc/calc -q -s -f #!/usr/local/src/cmd/calc/calc -q -f
/* /*
* fproduct - write the big Endian product of terms to a file * fproduct - write the big Endian product of terms to a file
* *
@@ -24,8 +24,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.3 $
* @(#) $Id: fproduct.calc,v 29.2 2001/06/06 09:06:29 chongo Exp $ * @(#) $Id: fproduct.calc,v 29.3 2007/02/07 00:34:04 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/fproduct.calc,v $ * @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/fproduct.calc,v $
* *
* Under source code control: 2001/04/07 20:13:11 * Under source code control: 2001/04/07 20:13:11

View File

@@ -1,35 +1,36 @@
#!/usr/local/src/cmd/calc/calc -q -s -f #!/usr/local/src/cmd/calc/calc -q -f
# /*
# mersenne - print the value of a mersenne number * mersenne - print the value of a mersenne number
# *
# Copyright (C) 1999 Landon Curt Noll * Copyright (C) 1999-2007 Landon Curt Noll
# *
# Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
# as published by the Free Software Foundation. * as published by the Free Software Foundation.
# *
# Calc is distributed in the hope that it will be useful, but WITHOUT * Calc is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
# Public License for more details. * Public License for more details.
# *
# A copy of version 2.1 of the GNU Lesser General Public License is * 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 * distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# *
# @(#) $Revision: 29.3 $ * @(#) $Revision: 29.4 $
# @(#) $Id: mersenne.calc,v 29.3 2000/12/15 14:56:54 chongo Exp $ * @(#) $Id: mersenne.calc,v 29.4 2007/02/07 00:34:04 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/mersenne.calc,v $ * @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/mersenne.calc,v $
# *
# Under source code control: 1999/11/30 00:09:01; * Under source code control: 1999/11/30 00:09:01;
# File existed as early as: 1999 * File existed as early as: 1999
# *
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/ * chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/ * Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*
# usage: * usage:
# mersenne exp * mersenne exp
*/
/* /*

View File

@@ -1,35 +1,36 @@
#!/usr/local/src/cmd/calc/calc -q -f #!/usr/local/src/cmd/calc/calc -q -f
# /*
# piforever - print digits of pi forever (or as long as your mem/cpu allow) * piforever - print digits of pi forever (or as long as your mem/cpu allow)
# *
# Copyright (C) 1999 Landon Curt Noll * Copyright (C) 1999-2007 Landon Curt Noll
# *
# Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
# as published by the Free Software Foundation. * as published by the Free Software Foundation.
# *
# Calc is distributed in the hope that it will be useful, but WITHOUT * Calc is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
# Public License for more details. * Public License for more details.
# *
# A copy of version 2.1 of the GNU Lesser General Public License is * 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 * distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# *
# @(#) $Revision: 29.3 $ * @(#) $Revision: 29.4 $
# @(#) $Id: piforever.calc,v 29.3 2000/12/15 14:56:54 chongo Exp $ * @(#) $Id: piforever.calc,v 29.4 2007/02/07 00:34:04 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/piforever.calc,v $ * @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/piforever.calc,v $
# *
# Under source code control: 1999/11/30 00:11:36 * Under source code control: 1999/11/30 00:11:36
# File existed as early as: 1999 * File existed as early as: 1999
# *
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/ * chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/ * Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*
# usage: * usage:
# piforever * piforever
*/
read -once pi.cal read -once pi.cal

View File

@@ -1,35 +1,36 @@
#!/usr/local/src/cmd/calc/calc -q -s -f #!/usr/local/src/cmd/calc/calc -q -f
# /*
# plus - add two or more arguments together * plus - add two or more arguments together
# *
# Copyright (C) 1999 Landon Curt Noll * Copyright (C) 1999-2007 Landon Curt Noll
# *
# Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
# as published by the Free Software Foundation. * as published by the Free Software Foundation.
# *
# Calc is distributed in the hope that it will be useful, but WITHOUT * Calc is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
# Public License for more details. * Public License for more details.
# *
# A copy of version 2.1 of the GNU Lesser General Public License is * 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 * distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# *
# @(#) $Revision: 29.3 $ * @(#) $Revision: 29.4 $
# @(#) $Id: plus.calc,v 29.3 2000/12/15 14:56:54 chongo Exp $ * @(#) $Id: plus.calc,v 29.4 2007/02/07 00:34:04 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/plus.calc,v $ * @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/plus.calc,v $
# *
# Under source code control: 1999/11/29 10:22:37 * Under source code control: 1999/11/29 10:22:37
# File existed as early as: 1999 * File existed as early as: 1999
# *
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/ * chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/ * Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*
# usage: * usage:
# plus val ... * plus val ...
*/
/* /*

View File

@@ -1,4 +1,4 @@
#!/usr/local/src/cmd/calc/calc -q -s -f #!/usr/local/src/cmd/calc/calc -q -f
/* /*
* powerterm - print the argument as a sum of powers of integers * powerterm - print the argument as a sum of powers of integers
* *
@@ -24,8 +24,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.6 $ * @(#) $Revision: 29.7 $
* @(#) $Id: powerterm.calc,v 29.6 2001/06/06 09:06:29 chongo Exp $ * @(#) $Id: powerterm.calc,v 29.7 2007/02/07 00:34:04 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/powerterm.calc,v $ * @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/powerterm.calc,v $
* *
* Under source code control: 2001/04/24 23:49:11 * Under source code control: 2001/04/24 23:49:11

View File

@@ -1,32 +1,33 @@
#!/usr/local/src/cmd/calc/calc -q -f #!/usr/local/src/cmd/calc/calc -q -f
# /*
# simple - an example of a simple calc shell script * simple - an example of a simple calc shell script
# *
# Copyright (C) 1999 Landon Curt Noll * Copyright (C) 1999-2007 Landon Curt Noll
# *
# Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
# as published by the Free Software Foundation. * as published by the Free Software Foundation.
# *
# Calc is distributed in the hope that it will be useful, but WITHOUT * Calc is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
# Public License for more details. * Public License for more details.
# *
# A copy of version 2.1 of the GNU Lesser General Public License is * 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 * distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# *
# @(#) $Revision: 29.3 $ * @(#) $Revision: 29.4 $
# @(#) $Id: simple.calc,v 29.3 2000/12/15 14:56:54 chongo Exp $ * @(#) $Id: simple.calc,v 29.4 2007/02/07 00:34:04 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/simple.calc,v $ * @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/simple.calc,v $
# *
# Under source code control: 1999/11/29 10:22:37 * Under source code control: 1999/11/29 10:22:37
# File existed as early as: 1999 * File existed as early as: 1999
# *
# chongo <was here> /\oo/\ http://www.isthe.com/chongo/ * chongo <was here> /\oo/\ http://www.isthe.com/chongo/
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/ * Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/* /*

View File

@@ -1,64 +1,67 @@
#!/usr/local/src/cmd/calc/calc -q -f #!/usr/local/src/cmd/calc/calc -q -f
# /*
# sqaure - print the squares of input values * sqaure - print the squares of input values
# *
# Copyright (C) 2000 Ernest Bowen * Copyright (C) 2000-2007 Ernest Bowen
# *
# Calc is open software; you can redistribute it and/or modify it under * Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License * the terms of the version 2.1 of the GNU Lesser General Public License
# as published by the Free Software Foundation. * as published by the Free Software Foundation.
# *
# Calc is distributed in the hope that it will be useful, but WITHOUT * Calc is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
# Public License for more details. * Public License for more details.
# *
# A copy of version 2.1 of the GNU Lesser General Public License is * 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 * distributed with calc under the filename COPYING-LGPL. You should have
# received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# *
# @(#) $Revision: 29.3 $ * @(#) $Revision: 29.4 $
# @(#) $Id: square.calc,v 29.3 2000/12/17 14:31:58 chongo Exp $ * @(#) $Id: square.calc,v 29.4 2007/02/07 00:34:04 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/square.calc,v $ * @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/square.calc,v $
# *
# Under source code control: 2000/12/15 06:52:01 * Under source code control: 2000/12/15 06:52:01
# File existed as early as: 2000 * File existed as early as: 2000
# *
# Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/ * Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
*/
/*
* Usage:
*
* From the shell:
*
* ./square
* cat file | ./square
* echo "123" | ./square
*
* Within calc:
*
* > read square
*
* With input from a terminal, there is no prompt but each non-empty
* line of input is evaluated as a calc expression and if it can be
* calculated, the square of the value of that expression is displayed.
* Execution stops when an empty line is input.
*
* From the shell:
*
* ./square
*
* The following shows lines of input followed by output:
*
* 1234
* 1522756
* ln(2)
* ~.48045301391820142467
* config("mode","frac"), bernoulli(10)
* 25/4356
* config("mode", "hex"), 0xff
* 0xfe01
*/
# Usage:
#
# From the shell:
#
# ./square
# cat file | ./square
# echo "123" | ./square
#
# Within calc:
#
# > read square
#
# With input from a terminal, there is no prompt but each non-empty
# line of input is evaluated as a calc expression and if it can be
# calculated, the square of the value of that expression is displayed.
# Execution stops when an empty line is input.
#
# From the shell:
#
# ./square
#
# The following shows lines of input followed by output:
#
# 1234
# 1522756
# ln(2)
# ~.48045301391820142467
# config("mode","frac"), bernoulli(10)
# 25/4356
# config("mode", "hex"), 0xff
# 0xfe01
#
global s; global s;
while ((s = prompt(""))) while ((s = prompt("")))

View File

@@ -2,7 +2,7 @@
# #
# custom - makefile for calc custom routines # 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 # Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License # the terms of the version 2.1 of the GNU Lesser General Public License
@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
# @(#) $Revision: 29.24 $ # @(#) $Revision: 29.29 $
# @(#) $Id: Makefile,v 29.24 2004/07/29 08:38:18 chongo Exp $ # @(#) $Id: Makefile,v 29.29 2006/09/18 13:13:25 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/Makefile,v $ # @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/Makefile,v $
# #
# Under source code control: 1997/03/09 02:28:54 # Under source code control: 1997/03/09 02:28:54
@@ -114,9 +114,9 @@ INCDIR= /usr/include
# ${LIBDIR} where calc link library (*.a) files are installed # ${LIBDIR} where calc link library (*.a) files are installed
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files # ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
# #
# NOTE: The install rule prepends installation paths with $T, which # NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If $T is non-empty, then installation # by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the $T directory. # locations will be relative to the ${T} directory.
# #
# For DJGPP, select: # For DJGPP, select:
# #
@@ -148,12 +148,12 @@ CALC_SHAREDIR= /usr/share/calc
# ${CALC_INCDIR} where the calc include files are installed # ${CALC_INCDIR} where the calc include files are installed
# ${CUSTOMCALDIR} where custom *.cal files are installed # ${CUSTOMCALDIR} where custom *.cal files are installed
# ${CUSTOMHELPDIR} where custom help files are installed # ${CUSTOMHELPDIR} where custom help files are installed
# ${CUSTOMINCPDIR} where custom .h files are installed # ${CUSTOMINCDIR} where custom .h files are installed
# ${SCRIPTDIR} where calc shell scripts are installed # ${SCRIPTDIR} where calc shell scripts are installed
# #
# NOTE: The install rule prepends installation paths with $T, which # NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If $T is non-empty, then installation # by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the $T directory. # locations will be relative to the ${T} directory.
# #
# If in doubt, set: # If in doubt, set:
# #
@@ -173,8 +173,8 @@ SCRIPTDIR= ${BINDIR}/cscript
# T - top level directory under which calc will be installed # T - top level directory under which calc will be installed
# #
# The calc install is performed under $T, the calc build is # The calc install is performed under ${T}, the calc build is
# performed under /. The purpose for $T is to allow someone # performed under /. The purpose for ${T} is to allow someone
# to install calc somewhere other than into the system area. # to install calc somewhere other than into the system area.
# #
# For example, if: # For example, if:
@@ -194,10 +194,10 @@ SCRIPTDIR= ${BINDIR}/cscript
# calc help, .cal ...: /var/tmp/testing/usr/share/calc # calc help, .cal ...: /var/tmp/testing/usr/share/calc
# ... etc ... /var/tmp/testing/... # ... etc ... /var/tmp/testing/...
# #
# If $T is empty, calc is installed under /, which is the same # 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 # 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 # calc is installed under ${T}, as if one had to chroot under
# $T for calc to operate. # ${T} for calc to operate.
# #
# If in doubt, use T= # If in doubt, use T=
# #
@@ -249,6 +249,20 @@ NO_SHARED=
#NO_SHARED= -dn #NO_SHARED= -dn
#NO_SHARED= -non_shared #NO_SHARED= -non_shared
# On some systems where you are disabling dynamic shared link libs, you may
# need to pass a special flag to ${CC} and ${LCC} during linking stage.
#
# System type NO_SHARED recommendation
#
# IRIX with NO_SHARED= -non_shared LD_NO_SHARED= -Wl,-rdata_shared
# IRIX with NO_SHARED= LD_NO_SHARED=
# others LD_NO_SHARED=
#
# If in doubt, use LD_NO_SHARED=
#
LD_NO_SHARED=
#LD_NO_SHARED= -Wl,-rdata_shared
# Normally, the upper level makefile will set these values. We provide # Normally, the upper level makefile will set these values. We provide
# a default here just in case you want to build from this directory. # a default here just in case you want to build from this directory.
# #
@@ -275,12 +289,13 @@ MAKE_FILE= Makefile
# Normally, the upper level makefile will set these values. We provide # Normally, the upper level makefile will set these values. We provide
# a default here just in case you want to build from this directory. # a default here just in case you want to build from this directory.
# #
# If you do not wish to use purify, leave PURIFY commented out. # If you do not wish to use purify, set PURIFY to an empty string.
# #
# If in doubt, leave PURIFY commented out. # If in doubt, use PURIFY=
# #
#PURIFY= purify -logfile=pure.out #PURIFY= purify -logfile=pure.out
#PURIFY= purify #PURIFY= purify
PURIFY=
# Normally, the upper level makefile will set these values. We provide # Normally, the upper level makefile will set these values. We provide
# a default here just in case you want to build from this directory. # a default here just in case you want to build from this directory.
@@ -402,6 +417,16 @@ MAKEDEPEND= makedepend
CHMOD= chmod CHMOD= chmod
SORT= sort SORT= sort
CMP= cmp CMP= cmp
AR= ar
RM= rm
TOUCH= touch
MKDIR= mkdir
RMDIR= rmdir
MV= mv
CP= cp
CO= co
TRUE= true
MAKE= make
## ##
# #
@@ -413,8 +438,8 @@ all: ${TARGETS} ${INSTALL_H_SRC} ${CUSTOM_CALC_FILES} \
${CUSTOM_HELP} ${MAKE_FILE} .all ${CUSTOM_HELP} ${MAKE_FILE} .all
libcustcalc.a: ${CUSTCALC_OBJ} ${MAKE_FILE} ../${MAKE_FILE} libcustcalc.a: ${CUSTCALC_OBJ} ${MAKE_FILE} ../${MAKE_FILE}
-rm -f libcustcalc.a -${RM} -f libcustcalc.a
ar qc libcustcalc.a ${CUSTCALC_OBJ} ${AR} qc libcustcalc.a ${CUSTCALC_OBJ}
${RANLIB} libcustcalc.a ${RANLIB} libcustcalc.a
## ##
@@ -435,8 +460,8 @@ c_sysinfo.o: c_sysinfo.c ${MAKE_FILE}
# to determine of we have done all # to determine of we have done all
# #
.all: .all:
rm -f .all ${RM} -f .all
touch .all ${TOUCH} .all
## ##
# #
@@ -452,17 +477,17 @@ c_sysinfo.o: c_sysinfo.c ${MAKE_FILE}
## ##
distlist: ${DISTLIST} 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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo custom/$$i; \ echo custom/$$i; \
fi; \ fi; \
done done
distdir: distdir:
${Q}echo custom ${Q} echo custom
calcliblist: ${CALCLIBLIST} 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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo custom/$$i; \ echo custom/$$i; \
fi; \ fi; \
@@ -481,81 +506,81 @@ calcliblist: ${CALCLIBLIST}
## ##
depend: depend:
${Q}if [ -f Makefile.bak ]; then \ ${Q} if [ -f Makefile.bak ]; then \
echo "Makefile.bak exists, remove or move it out of the way"; \ echo "Makefile.bak exists, remove or move it out of the way"; \
exit 1; \ exit 1; \
else \ else \
true; \ ${TRUE}; \
fi fi
${Q}echo forming custom/skel ${Q} echo forming custom/skel
-${Q}rm -rf skel -${Q} ${RM} -rf skel
${Q}mkdir skel ${Q} ${MKDIR} skel
${Q}mkdir skel/custom ${Q} ${MKDIR} skel/custom
-${Q}for i in ${C_SRC} /dev/null; do \ -${Q} for i in ${C_SRC} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
${SED} -n '/^#[ ]*include[ ]*"/p' \ ${SED} -n '/^#[ ]*include[ ]*"/p' \
"$$i" > "skel/custom/$$i"; \ "$$i" > "skel/custom/$$i"; \
fi; \ fi; \
done done
-${Q}for i in ${H_SRC} /dev/null; do \ -${Q} for i in ${H_SRC} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \ if [ "$$i" = "/dev/null" ]; then \
continue; \ continue; \
fi; \ fi; \
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \ tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
echo "#if !defined($$tag)" > "skel/custom/$$i"; \ echo "#if !defined($$tag)" > "skel/custom/$$i"; \
echo "#define $$tag" >> "skel/custom/$$i"; \ echo "#define $$tag" >> "skel/custom/$$i"; \
${SED} -n '/^#[ ]*include[ ]*"/p' "$$i" \ ${SED} -n '/^#[ ]*include[ ]*"/p' "$$i" \
>> "skel/custom/$$i"; \ >> "skel/custom/$$i"; \
echo '#endif /* '"$$tag"' */' >> "skel/custom/$$i"; \ echo '#endif /* '"$$tag"' */' >> "skel/custom/$$i"; \
done done
${Q}(cd ..; ${MAKE} hsrc) ${Q} (cd ..; $(MAKE) hsrc)
${Q}for i in `cd ..; ${MAKE} h_list 2>&1 | \ ${Q} for i in `cd ..; $(MAKE) h_list 2>&1 | \
${SED} -e '/Entering directory/d' \ ${SED} -e '/Entering directory/d' \
-e '/Nothing to be done/d' \ -e '/Nothing to be done/d' \
-e '/Leaving directory/d'` /dev/null; do \ -e '/Leaving directory/d'` /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \ if [ "$$i" = "/dev/null" ]; then \
continue; \ continue; \
fi; \ fi; \
tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \ tag="`echo $$i | ${SED} 's/[\.+,:]/_/g'`"; \
echo "#if !defined($$tag)" > "skel/$$i"; \ echo "#if !defined($$tag)" > "skel/$$i"; \
echo "#define $$tag" >> "skel/$$i"; \ echo "#define $$tag" >> "skel/$$i"; \
${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \ ${SED} -n '/^#[ ]*include[ ]*"/p' "../$$i" \
>> "skel/$$i"; \ >> "skel/$$i"; \
echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \ echo '#endif /* '"$$tag"' */' >> "skel/$$i"; \
done done
-${Q}rm -f skel/custom/makedep.out -${Q} ${RM} -f skel/custom/makedep.out
${Q}echo custom/skel formed ${Q} echo custom/skel formed
${Q}echo forming custom dependency list ${Q} echo forming custom dependency list
${Q}echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \ ${Q} echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > \
skel/custom/makedep.out skel/custom/makedep.out
${Q}cd skel/custom; ${MAKEDEPEND} -w 1 -f makedep.out ${C_SRC} ${Q} cd skel/custom; ${MAKEDEPEND} -w 1 -f makedep.out ${C_SRC}
-${Q}for i in ${C_SRC} /dev/null; do \ -${Q} for i in ${C_SRC} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \ echo "$$i" | ${SED} 's/^\(.*\)\.c/\1.o: \1.c/'; \
fi; \ fi; \
done >> skel/custom/makedep.out done >> skel/custom/makedep.out
${Q}echo custom dependency list formed ${Q} echo custom dependency list formed
${Q}echo forming new custom/Makefile ${Q} echo forming new custom/Makefile
-${Q}rm -f Makefile.bak -${Q} ${RM} -f Makefile.bak
${Q}mv Makefile Makefile.bak ${Q} ${MV} Makefile Makefile.bak
${Q}${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile ${Q} ${SED} -n '1,/^# DO NOT DELETE THIS LINE/p' Makefile.bak > Makefile
${Q}echo "" >> Makefile ${Q} echo "" >> Makefile
${Q}${SED} -n '3,$$p' skel/custom/makedep.out | \ ${Q} ${SED} -n '3,$$p' skel/custom/makedep.out | \
LANG=C ${SORT} -u >> Makefile LANG=C ${SORT} -u >> Makefile
-${Q}rm -rf skel -${Q} ${RM} -rf skel
-${Q}if ${CMP} -s Makefile.bak Makefile; then \ -${Q} if ${CMP} -s Makefile.bak Makefile; then \
echo 'custom Makefile was already up to date'; \ echo 'custom Makefile was already up to date'; \
mv -f Makefile.bak Makefile; \ ${MV} -f Makefile.bak Makefile; \
else \ else \
rm -f Makefile.tmp; \ ${RM} -f Makefile.tmp; \
mv Makefile Makefile.tmp; \ ${MV} Makefile Makefile.tmp; \
if [ -d RCS ]; then \ if [ -d RCS ]; then \
co -l Makefile; \ ${CO} -l Makefile; \
fi ;\ fi ;\
mv Makefile.tmp Makefile; \ ${MV} Makefile.tmp Makefile; \
if [ -d RCS ]; then \ if [ -d RCS ]; then \
echo 'new custom Makefile formed -- you need to check it in'; \ echo 'new custom Makefile formed -- you need to check it in'; \
fi; \ fi; \
fi fi
## ##
@@ -565,22 +590,22 @@ depend:
## ##
echo_inst_files: 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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${CUSTOMINCDIR}/$$i; \ echo __file__ ${CUSTOMINCDIR}/$$i; \
fi; \ fi; \
done 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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${CUSTOMHELPDIR}/$$i; \ echo __file__ ${CUSTOMHELPDIR}/$$i; \
fi; \ fi; \
done 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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${CUSTOMCALDIR}/$$i; \ echo __file__ ${CUSTOMCALDIR}/$$i; \
fi; \ fi; \
done 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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${CUSTOMCALDIR}/$$i; \ echo __file__ ${CUSTOMCALDIR}/$$i; \
fi; \ fi; \
@@ -593,154 +618,217 @@ echo_inst_files:
## ##
clean: clean:
-rm -f ${CUSTCALC_OBJ} -${RM} -f ${CUSTCALC_OBJ}
clobber: clobber:
-rm -f ${TARGETS} -${RM} -f ${TARGETS}
rm -f .all Makefile.tmp Makefile.bak ${RM} -f .all Makefile.tmp Makefile.bak
# install everything
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
install: all install: all
-${Q}if [ ! -d $T${INCDIR} ]; then \ -${Q} if [ ! -d ${T}${INCDIR} ]; then \
echo mkdir $T${INCDIR}; \ echo ${MKDIR} ${T}${INCDIR}; \
mkdir $T${INCDIR}; \ ${MKDIR} ${T}${INCDIR}; \
if [ ! -d "$T${INCDIR}" ]; then \ if [ ! -d "${T}${INCDIR}" ]; then \
echo mkdir -p "$T${INCDIR}"; \ echo ${MKDIR} -p "${T}${INCDIR}"; \
mkdir -p "$T${INCDIR}"; \ ${MKDIR} -p "${T}${INCDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${INCDIR}; \ echo ${CHMOD} 0755 ${T}${INCDIR}; \
${CHMOD} 0755 $T${INCDIR}; \ ${CHMOD} 0755 ${T}${INCDIR}; \
else \ else \
true; \ ${TRUE}; \
fi fi
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \ -${Q} if [ ! -d ${T}${CALC_SHAREDIR} ]; then \
echo mkdir $T${CALC_SHAREDIR}; \ echo ${MKDIR} ${T}${CALC_SHAREDIR}; \
mkdir $T${CALC_SHAREDIR}; \ ${MKDIR} ${T}${CALC_SHAREDIR}; \
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \ if [ ! -d "${T}${CALC_SHAREDIR}" ]; then \
echo mkdir -p "$T${CALC_SHAREDIR}"; \ echo ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
mkdir -p "$T${CALC_SHAREDIR}"; \ ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \ echo ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
${CHMOD} 0755 $T${CALC_SHAREDIR}; \ ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
else \ else \
true; \ ${TRUE}; \
fi fi
-${Q}if [ ! -d $T${CALC_INCDIR} ]; then \ -${Q} if [ ! -d ${T}${CALC_INCDIR} ]; then \
echo mkdir $T${CALC_INCDIR}; \ echo ${MKDIR} ${T}${CALC_INCDIR}; \
mkdir $T${CALC_INCDIR}; \ ${MKDIR} ${T}${CALC_INCDIR}; \
if [ ! -d "$T${CALC_INCDIR}" ]; then \ if [ ! -d "${T}${CALC_INCDIR}" ]; then \
echo mkdir -p "$T${CALC_INCDIR}"; \ echo ${MKDIR} -p "${T}${CALC_INCDIR}"; \
mkdir -p "$T${CALC_INCDIR}"; \ ${MKDIR} -p "${T}${CALC_INCDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${CALC_INCDIR}; \ echo ${CHMOD} 0755 ${T}${CALC_INCDIR}; \
${CHMOD} 0755 $T${CALC_INCDIR}; \ ${CHMOD} 0755 ${T}${CALC_INCDIR}; \
else \ else \
true; \ ${TRUE}; \
fi fi
-${Q}if [ ! -d $T${HELPDIR} ]; then \ -${Q} if [ ! -d ${T}${HELPDIR} ]; then \
echo mkdir $T${HELPDIR}; \ echo ${MKDIR} ${T}${HELPDIR}; \
mkdir $T${HELPDIR}; \ ${MKDIR} ${T}${HELPDIR}; \
if [ ! -d "$T${HELPDIR}" ]; then \ if [ ! -d "${T}${HELPDIR}" ]; then \
echo mkdir -p "$T${HELPDIR}"; \ echo ${MKDIR} -p "${T}${HELPDIR}"; \
mkdir -p "$T${HELPDIR}"; \ ${MKDIR} -p "${T}${HELPDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${HELPDIR}; \ echo ${CHMOD} 0755 ${T}${HELPDIR}; \
${CHMOD} 0755 $T${HELPDIR}; \ ${CHMOD} 0755 ${T}${HELPDIR}; \
else \ else \
true; \ ${TRUE}; \
fi fi
-${Q}if [ ! -d $T${CUSTOMCALDIR} ]; then \ -${Q} if [ ! -d ${T}${CUSTOMCALDIR} ]; then \
echo mkdir $T${CUSTOMCALDIR}; \ echo ${MKDIR} ${T}${CUSTOMCALDIR}; \
mkdir $T${CUSTOMCALDIR}; \ ${MKDIR} ${T}${CUSTOMCALDIR}; \
if [ ! -d "$T${CUSTOMCALDIR}" ]; then \ if [ ! -d "${T}${CUSTOMCALDIR}" ]; then \
echo mkdir -p "$T${CUSTOMCALDIR}"; \ echo ${MKDIR} -p "${T}${CUSTOMCALDIR}"; \
mkdir -p "$T${CUSTOMCALDIR}"; \ ${MKDIR} -p "${T}${CUSTOMCALDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${CUSTOMCALDIR}; \ echo ${CHMOD} 0755 ${T}${CUSTOMCALDIR}; \
${CHMOD} 0755 $T${CUSTOMCALDIR}; \ ${CHMOD} 0755 ${T}${CUSTOMCALDIR}; \
else \ else \
true; \ ${TRUE}; \
fi fi
-${Q}if [ ! -d $T${CUSTOMHELPDIR} ]; then \ -${Q} if [ ! -d ${T}${CUSTOMHELPDIR} ]; then \
echo mkdir $T${CUSTOMHELPDIR}; \ echo ${MKDIR} ${T}${CUSTOMHELPDIR}; \
mkdir $T${CUSTOMHELPDIR}; \ ${MKDIR} ${T}${CUSTOMHELPDIR}; \
if [ ! -d "$T${CUSTOMHELPDIR}" ]; then \ if [ ! -d "${T}${CUSTOMHELPDIR}" ]; then \
echo mkdir -p "$T${CUSTOMHELPDIR}"; \ echo ${MKDIR} -p "${T}${CUSTOMHELPDIR}"; \
mkdir -p "$T${CUSTOMHELPDIR}"; \ ${MKDIR} -p "${T}${CUSTOMHELPDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${CUSTOMHELPDIR}; \ echo ${CHMOD} 0755 ${T}${CUSTOMHELPDIR}; \
${CHMOD} 0755 $T${CUSTOMHELPDIR}; \ ${CHMOD} 0755 ${T}${CUSTOMHELPDIR}; \
else \ else \
true; \ ${TRUE}; \
fi fi
-${Q}if [ ! -d $T${CUSTOMINCDIR} ]; then \ -${Q} if [ ! -d ${T}${CUSTOMINCDIR} ]; then \
echo mkdir $T${CUSTOMINCDIR}; \ echo ${MKDIR} ${T}${CUSTOMINCDIR}; \
mkdir $T${CUSTOMINCDIR}; \ ${MKDIR} ${T}${CUSTOMINCDIR}; \
if [ ! -d "$T${CUSTOMINCDIR}" ]; then \ if [ ! -d "${T}${CUSTOMINCDIR}" ]; then \
echo mkdir -p "$T${CUSTOMINCDIR}"; \ echo ${MKDIR} -p "${T}${CUSTOMINCDIR}"; \
mkdir -p "$T${CUSTOMINCDIR}"; \ ${MKDIR} -p "${T}${CUSTOMINCDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${CUSTOMINCDIR}; \ echo ${CHMOD} 0755 ${T}${CUSTOMINCDIR}; \
${CHMOD} 0755 $T${CUSTOMINCDIR}; \ ${CHMOD} 0755 ${T}${CUSTOMINCDIR}; \
else \ else \
true; \ ${TRUE}; \
fi 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 \ if [ "$$i" = "/dev/null" ]; then \
continue; \ continue; \
fi; \ fi; \
if ${CMP} -s tmp $T${CUSTOMINCDIR}/$$i; then \ if ${CMP} -s "$$i" ${T}${CUSTOMINCDIR}/$$i; then \
true; \ ${TRUE}; \
else \ else \
rm -f $T${CUSTOMINCDIR}/$$i.new; \ ${RM} -f ${T}${CUSTOMINCDIR}/$$i.new; \
cp -f $$i $T${CUSTOMINCDIR}/$$i.new; \ ${CP} -f $$i ${T}${CUSTOMINCDIR}/$$i.new; \
${CHMOD} 0444 $T${CUSTOMINCDIR}/$$i.new; \ ${CHMOD} 0444 ${T}${CUSTOMINCDIR}/$$i.new; \
mv -f $T${CUSTOMINCDIR}/$$i.new $T${CUSTOMINCDIR}/$$i; \ ${MV} -f ${T}${CUSTOMINCDIR}/$$i.new ${T}${CUSTOMINCDIR}/$$i; \
echo "installed $T${CUSTOMINCDIR}/$$i"; \ echo "installed ${T}${CUSTOMINCDIR}/$$i"; \
fi; \ fi; \
done 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 \ if [ "$$i" = "/dev/null" ]; then \
continue; \ continue; \
fi; \ fi; \
if ${CMP} -s $$i $T${CUSTOMCALDIR}/$$i; then \ if ${CMP} -s $$i ${T}${CUSTOMCALDIR}/$$i; then \
true; \ ${TRUE}; \
else \ else \
rm -f $T${CUSTOMCALDIR}/$$i.new; \ ${RM} -f ${T}${CUSTOMCALDIR}/$$i.new; \
cp -f $$i $T${CUSTOMCALDIR}/$$i.new; \ ${CP} -f $$i ${T}${CUSTOMCALDIR}/$$i.new; \
${CHMOD} 0444 $T${CUSTOMCALDIR}/$$i.new; \ ${CHMOD} 0444 ${T}${CUSTOMCALDIR}/$$i.new; \
mv -f $T${CUSTOMCALDIR}/$$i.new $T${CUSTOMCALDIR}/$$i; \ ${MV} -f ${T}${CUSTOMCALDIR}/$$i.new ${T}${CUSTOMCALDIR}/$$i; \
echo "installed $T${CUSTOMCALDIR}/$$i"; \ echo "installed ${T}${CUSTOMCALDIR}/$$i"; \
fi; \ fi; \
done done
-${Q}for i in ${CUSTOM_HELP} /dev/null; do \ -${Q} for i in ${CUSTOM_HELP} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \ if [ "$$i" = "/dev/null" ]; then \
continue; \ continue; \
fi; \ fi; \
if ${CMP} -s $$i $T${CUSTOMHELPDIR}/$$i; then \ if ${CMP} -s $$i ${T}${CUSTOMHELPDIR}/$$i; then \
true; \ ${TRUE}; \
else \ else \
rm -f $T${CUSTOMHELPDIR}/$$i.new; \ ${RM} -f ${T}${CUSTOMHELPDIR}/$$i.new; \
cp -f $$i $T${CUSTOMHELPDIR}/$$i.new; \ ${CP} -f $$i ${T}${CUSTOMHELPDIR}/$$i.new; \
${CHMOD} 0444 $T${CUSTOMHELPDIR}/$$i.new; \ ${CHMOD} 0444 ${T}${CUSTOMHELPDIR}/$$i.new; \
mv -f $T${CUSTOMHELPDIR}/$$i.new $T${CUSTOMHELPDIR}/$$i; \ ${MV} -f ${T}${CUSTOMHELPDIR}/$$i.new ${T}${CUSTOMHELPDIR}/$$i; \
echo "installed $T${CUSTOMHELPDIR}/$$i"; \ echo "installed ${T}${CUSTOMHELPDIR}/$$i"; \
fi; \ fi; \
done done
-${Q}if [ ! -z ${ALLOW_CUSTOM} ]; then \ -${Q} if [ ! -z ${ALLOW_CUSTOM} ]; then \
if ${CMP} -s libcustcalc.a $T${CUSTOMCALDIR}/libcustcalc.a; then \ if ${CMP} -s libcustcalc.a ${T}${CUSTOMCALDIR}/libcustcalc.a; then \
true; \ ${TRUE}; \
else \ else \
rm -f $T${CUSTOMCALDIR}/libcustcalc.a.new; \ ${RM} -f ${T}${CUSTOMCALDIR}/libcustcalc.a.new; \
cp -f libcustcalc.a $T${CUSTOMCALDIR}/libcustcalc.a.new; \ ${CP} -f libcustcalc.a ${T}${CUSTOMCALDIR}/libcustcalc.a.new; \
${CHMOD} 0644 $T${CUSTOMCALDIR}/libcustcalc.a.new; \ ${CHMOD} 0644 ${T}${CUSTOMCALDIR}/libcustcalc.a.new; \
mv -f $T${CUSTOMCALDIR}/libcustcalc.a.new \ ${MV} -f ${T}${CUSTOMCALDIR}/libcustcalc.a.new \
$T${CUSTOMCALDIR}/libcustcalc.a; \ ${T}${CUSTOMCALDIR}/libcustcalc.a; \
${RANLIB} $T${CUSTOMCALDIR}/libcustcalc.a; \ ${RANLIB} ${T}${CUSTOMCALDIR}/libcustcalc.a; \
echo "installed $T${CUSTOMCALDIR}/libcustcalc.a"; \ echo "installed ${T}${CUSTOMCALDIR}/libcustcalc.a"; \
fi; \ fi; \
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 # make depend stuff

View File

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

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.3 $ * @(#) $Revision: 29.5 $
* @(#) $Id: c_pmodm127.c,v 29.3 2004/07/29 09:48:31 chongo Exp $ * @(#) $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 $ * @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_pmodm127.c,v $
* *
* Under source code control: 2004/07/28 22:12:25 * 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 #else
zsquare(result.v_num->num, &temp); /* square */ zsquare(result.v_num->num, &temp); /* square */
#endif #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); zfree(result.v_num->num);
zshift(temp, 1, &result.v_num->num); /* times 2 */ zshift(temp, 1, &result.v_num->num); /* times 2 */
zfree(temp); zfree(temp);

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.11 $ * @(#) $Revision: 29.12 $
* @(#) $Id: c_sysinfo.c,v 29.11 2006/05/22 19:04:45 chongo Exp $ * @(#) $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 $ * @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_sysinfo.c,v $
* *
* Under source code control: 1997/03/09 23:14:40 * Under source code control: 1997/03/09 23:14:40
@@ -85,7 +85,6 @@ static struct infoname sys_info[] = {
{"DEFAULTSHELL", "default shell to use", DEFAULTSHELL, (FULL)0}, {"DEFAULTSHELL", "default shell to use", DEFAULTSHELL, (FULL)0},
{"DEV_BITS", "device number size in bits", NULL, (FULL)DEV_BITS}, {"DEV_BITS", "device number size in bits", NULL, (FULL)DEV_BITS},
{"DISPLAY_DEFAULT", "default digits for float display", NULL, (FULL)DISPLAY_DEFAULT}, {"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}, {"EPSILONPREC_DEFAULT", "2^-EPSILON_DEFAULT <= EPSILON_DEFAULT", NULL, (FULL)EPSILONPREC_DEFAULT},
{"EPSILON_DEFAULT", "allowed error for float calculations", EPSILON_DEFAULT, (FULL)0}, {"EPSILON_DEFAULT", "allowed error for float calculations", EPSILON_DEFAULT, (FULL)0},
{"ERRMAX", "default errmax value", NULL, (FULL)ERRMAX}, {"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. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.15 $ * @(#) $Revision: 29.16 $
* @(#) $Id: file.c,v 29.15 2006/05/22 19:04:45 chongo Exp $ * @(#) $Id: file.c,v 29.16 2006/08/20 15:01:30 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/file.c,v $
* *
* Under source code control: 1991/07/20 00:21:56 * Under source code control: 1991/07/20 00:21:56
@@ -746,10 +746,10 @@ flushall(void)
* given: * given:
* id file to read from * id file to read from
* flags read flags (see above) * flags read flags (see above)
* retptr returned pointer to string * retstr returned pointer to string
*/ */
int int
readid(FILEID id, int flags, char **retptr) readid(FILEID id, int flags, STRING **retstr)
{ {
FILEIO *fiop; /* file structure */ FILEIO *fiop; /* file structure */
FILE *fp; FILE *fp;
@@ -761,6 +761,7 @@ readid(FILEID id, int flags, char **retptr)
int c; int c;
BOOL nlstop, nullstop, wsstop, rmstop, done; BOOL nlstop, nullstop, wsstop, rmstop, done;
FILEPOS fpos; FILEPOS fpos;
STRING *newstr;
totlen = 0; totlen = 0;
str = NULL; str = NULL;
@@ -831,7 +832,10 @@ readid(FILEID id, int flags, char **retptr)
if ((nullstop && c == '\0') && !rmstop) if ((nullstop && c == '\0') && !rmstop)
str[totlen - 1] = '\0'; str[totlen - 1] = '\0';
str[totlen] = '\0'; str[totlen] = '\0';
*retptr = str; newstr = stralloc();
newstr->s_len = totlen;
newstr->s_str = str;
*retstr = newstr;
return 0; return 0;
} }
@@ -895,7 +899,7 @@ printid(FILEID id, int flags)
math_chr('"'); math_chr('"');
return 0; 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 * print file position
@@ -904,11 +908,13 @@ printid(FILEID id, int flags)
fp = fiop->fp; fp = fiop->fp;
if (get_open_pos(fp, &pos) < 0) { 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; return 0;
} }
math_str("pos "); math_str(", pos ");
zprintval(pos, 0, 0); zprintval(pos, 0, 0);
zfree(pos); zfree(pos);
@@ -1233,10 +1239,13 @@ idungetc(FILEID id, int ch)
* str string to write * str string to write
*/ */
int int
idfputs(FILEID id, char *str) idfputs(FILEID id, STRING *str)
{ {
FILEIO *fiop; FILEIO *fiop;
FILEPOS fpos; FILEPOS fpos;
FILE *fp;
char *c;
long len;
/* get the file info pointer */ /* get the file info pointer */
fiop = findid(id, TRUE); fiop = findid(id, TRUE);
@@ -1251,14 +1260,13 @@ idfputs(FILEID id, char *str)
fiop->action = 'w'; fiop->action = 'w';
/* set output to file */ fp = fiop->fp;
math_setfp(fiop->fp); len = str->s_len;
c = str->s_str;
/* write the string */ while (len-- > 0)
math_str(str); fputc(*c++, fp);
/* restore output to stdout */
math_setfp(stdout);
return 0; return 0;
} }

393
func.c
View File

@@ -19,8 +19,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.25 $ * @(#) $Revision: 29.32 $
* @(#) $Id: func.c,v 29.25 2006/05/21 07:28:54 chongo Exp $ * @(#) $Id: func.c,v 29.32 2006/12/16 10:46:07 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/func.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/func.c,v $
* *
* Under source code control: 1990/02/15 01:48:15 * Under source code control: 1990/02/15 01:48:15
@@ -83,6 +83,11 @@
# define strdup(x) calc_strdup((CONST char *)(x)) # define strdup(x) calc_strdup((CONST char *)(x))
#endif #endif
#include "have_rusage.h"
#if defined(HAVE_GETRUSAGE)
# include <sys/resource.h>
#endif
#include "have_const.h" #include "have_const.h"
#include "have_unused.h" #include "have_unused.h"
#include "calc.h" #include "calc.h"
@@ -142,18 +147,6 @@ static int env_pool_max = 0; /* number of env_pool elements allocated */
static struct env_pool *e_pool = NULL; /* env_pool elements */ static struct env_pool *e_pool = NULL; /* env_pool elements */
/*
* if HZ & CLK_TCK are not defined, pick typical values, hope for the best
*/
#if !defined(HZ)
# define HZ 60
#endif
#if !defined(CLK_TCK)
# undef CLK_TCK
# define CLK_TCK HZ
#endif
/* /*
* user-defined error strings * user-defined error strings
*/ */
@@ -357,6 +350,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 static VALUE
f_name(VALUE *vp) f_name(VALUE *vp)
{ {
@@ -871,7 +882,7 @@ f_nextcand(int count, NUMBER **vals)
ans->num = tmp; ans->num = tmp;
return ans; return ans;
} }
return qlink(&_qzero_);; return qlink(&_qzero_);
} }
@@ -1694,14 +1705,13 @@ sumlistitems(LIST *lp)
NULL_VALUE, NULL_VALUE); NULL_VALUE, NULL_VALUE);
break; break;
default: 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); addvalue(&sum, &term, &tmp);
freevalue(&sum); freevalue(&sum);
freevalue(&term); freevalue(&term);
@@ -1728,7 +1738,6 @@ f_sum(int count, VALUE **vals)
sum.v_subtype = V_NOSUBTYPE; sum.v_subtype = V_NOSUBTYPE;
term.v_type = V_NULL; term.v_type = V_NULL;
term.v_subtype = V_NOSUBTYPE; term.v_subtype = V_NOSUBTYPE;
while (count-- > 0) { while (count-- > 0) {
vp = *vals++; vp = *vals++;
switch(vp->v_type) { switch(vp->v_type) {
@@ -1740,24 +1749,19 @@ f_sum(int count, VALUE **vals)
NULL_VALUE, NULL_VALUE); NULL_VALUE, NULL_VALUE);
break; break;
default: default:
copyvalue(vp, &term); addvalue(&sum, vp, &tmp);
} freevalue(&sum);
if (sum.v_type == V_NULL) { if (tmp.v_type < 0)
sum = term; return tmp;
continue; sum = tmp;
} continue;
if (term.v_type == V_NULL)
continue;
if (term.v_type < 0) {
freevalue(&sum);
return term;
} }
addvalue(&sum, &term, &tmp); addvalue(&sum, &term, &tmp);
freevalue(&term); freevalue(&term);
freevalue(&sum); freevalue(&sum);
sum = tmp; sum = tmp;
if (sum.v_type < 0) if (sum.v_type < 0)
return sum; break;
} }
return sum; return sum;
} }
@@ -1904,26 +1908,70 @@ f_hnrmod(NUMBER *val1, NUMBER *val2, NUMBER *val3, NUMBER *val4)
return res; 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 static VALUE
f_ssq(int count, VALUE **vals) f_ssq(int count, VALUE **vals)
{ {
VALUE result, tmp1, tmp2; VALUE tmp;
VALUE sum;
VALUE term;
VALUE *vp;
/* initialize VALUEs */ /* initialize VALUEs */
result.v_subtype = V_NOSUBTYPE; tmp.v_type = V_NULL;
tmp1.v_subtype = V_NOSUBTYPE; tmp.v_subtype = V_NOSUBTYPE;
tmp2.v_subtype = V_NOSUBTYPE; sum.v_type = V_NULL;
sum.v_subtype = V_NOSUBTYPE;
squarevalue(*vals++, &result); term.v_type = V_NULL;
while (--count > 0) { term.v_subtype = V_NOSUBTYPE;
squarevalue(*vals++, &tmp1); while (count-- > 0) {
addvalue(&tmp1, &result, &tmp2); vp = *vals++;
freevalue(&tmp1); if (vp->v_type == V_LIST) {
freevalue(&result); term = ssqlistitems(vp->v_list);
result = tmp2; } 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 +3569,67 @@ f_mod(int count, VALUE **vals)
return res; 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 static VALUE
f_mmin(VALUE *v1, VALUE *v2) f_mmin(VALUE *v1, VALUE *v2)
@@ -4951,20 +5060,131 @@ f_listremove(VALUE *vp)
/* /*
* Return the current runtime of calc in seconds. * Return the current user time of calc in seconds.
* This is the user mode time only. */
static NUMBER *
f_usertime(void)
{
#if defined(HAVE_GETRUSAGE)
struct rusage usage; /* system resource usage */
int who = RUSAGE_SELF; /* obtain time for just this process */
int status; /* getrusage() return code */
NUMBER *ret; /* CPU time to return */
NUMBER *secret; /* whole sconds of CPU time to return */
NUMBER *usecret; /* microseconds of CPU time to return */
/* get the resource informaion for ourself */
status = getrusage(who, &usage);
if (status < 0) {
/* system call error, so return 0 */
return qlink(&_qzero_);
}
/* add user time */
secret = stoq(usage.ru_utime.tv_sec);
usecret = iitoq((long)usage.ru_utime.tv_usec, 1000000L);
ret = qqadd(secret, usecret);
qfree(secret);
qfree(usecret);
/* return user CPU time */
return ret;
#else /* HAVE_GETRUSAGE */
/* not a POSIX system */
return qlink(&_qzero_);
#endif /* HAVE_GETRUSAGE */
}
/*
* Return the current kernel time of calc in seconds.
* This is the kernel mode time only.
*/
static NUMBER *
f_systime(void)
{
#if defined(HAVE_GETRUSAGE)
struct rusage usage; /* system resource usage */
int who = RUSAGE_SELF; /* obtain time for just this process */
int status; /* getrusage() return code */
NUMBER *ret; /* CPU time to return */
NUMBER *secret; /* whole sconds of CPU time to return */
NUMBER *usecret; /* microseconds of CPU time to return */
/* get the resource informaion for ourself */
status = getrusage(who, &usage);
if (status < 0) {
/* system call error, so return 0 */
return qlink(&_qzero_);
}
/* add kernel time */
secret = stoq(usage.ru_stime.tv_sec);
usecret = iitoq((long)usage.ru_stime.tv_usec, 1000000L);
ret = qqadd(secret, usecret);
qfree(secret);
qfree(usecret);
/* return kernel CPU time */
return ret;
#else /* HAVE_GETRUSAGE */
/* not a POSIX system */
return qlink(&_qzero_);
#endif /* HAVE_GETRUSAGE */
}
/*
* Return the current user and kernel time of calc in seconds.
*/ */
static NUMBER * static NUMBER *
f_runtime(void) f_runtime(void)
{ {
#if defined(_WIN32) #if defined(HAVE_GETRUSAGE)
return qlink(&_qzero_); struct rusage usage; /* system resource usage */
#else /* Windoz free systems */ int who = RUSAGE_SELF; /* obtain time for just this process */
struct tms buf; int status; /* getrusage() return code */
NUMBER *user; /* user CPU time to return */
NUMBER *sys; /* kernel CPU time to return */
NUMBER *ret; /* total CPU time to return */
NUMBER *secret; /* whole sconds of CPU time to return */
NUMBER *usecret; /* microseconds of CPU time to return */
times(&buf); /* get the resource informaion for ourself */
return iitoq((long) buf.tms_utime, (long) CLK_TCK); status = getrusage(who, &usage);
#endif /* Windoz free systems */ if (status < 0) {
/* system call error, so return 0 */
return qlink(&_qzero_);
}
/* add kernel time */
secret = stoq(usage.ru_stime.tv_sec);
usecret = iitoq((long)usage.ru_stime.tv_usec, 1000000L);
sys = qqadd(secret, usecret);
qfree(secret);
qfree(usecret);
/* add user time */
secret = stoq(usage.ru_utime.tv_sec);
usecret = iitoq((long)usage.ru_utime.tv_usec, 1000000L);
user = qqadd(secret, usecret);
qfree(secret);
qfree(usecret);
/* total time is user + kernel */
ret = qqadd(user, sys);
qfree(user);
qfree(sys);
/* return CPU time */
return ret;
#else /* HAVE_GETRUSAGE */
/* not a POSIX system */
return qlink(&_qzero_);
#endif /* HAVE_GETRUSAGE */
} }
@@ -5738,7 +5958,7 @@ strscan(char *s, int count, VALUE **vals)
static int static int
filescan(FILEID id, int count, VALUE **vals) filescan(FILEID id, int count, VALUE **vals)
{ {
char *str; STRING *str;
int i; int i;
int n = 0; int n = 0;
VALUE val; VALUE val;
@@ -5759,7 +5979,7 @@ filescan(FILEID id, int count, VALUE **vals)
if (i > 0) if (i > 0)
return EOF; return EOF;
n++; n++;
val.v_str = makenewstring(str); val.v_str = str;
result = f_eval(&val); result = f_eval(&val);
var = *vals++; var = *vals++;
if (var->v_type == V_ADDR) { if (var->v_type == V_ADDR) {
@@ -6006,7 +6226,7 @@ f_fputs(int count, VALUE **vals)
return error_value(E_FPUTS2); return error_value(E_FPUTS2);
} }
for (i = 1; i < count; i++) { 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) if (err > 0)
return error_value(E_FPUTS3); return error_value(E_FPUTS3);
} }
@@ -6153,7 +6373,7 @@ static VALUE
f_fgetline(VALUE *vp) f_fgetline(VALUE *vp)
{ {
VALUE result; VALUE result;
char *str; STRING *str;
int i; int i;
/* initialize VALUE */ /* initialize VALUE */
@@ -6167,7 +6387,7 @@ f_fgetline(VALUE *vp)
result.v_type = V_NULL; result.v_type = V_NULL;
if (i == 0) { if (i == 0) {
result.v_type = V_STR; result.v_type = V_STR;
result.v_str = makestring(str); result.v_str = str;
} }
return result; return result;
} }
@@ -6177,7 +6397,7 @@ static VALUE
f_fgets(VALUE *vp) f_fgets(VALUE *vp)
{ {
VALUE result; VALUE result;
char *str; STRING *str;
int i; int i;
/* initialize VALUE */ /* initialize VALUE */
@@ -6191,7 +6411,7 @@ f_fgets(VALUE *vp)
result.v_type = V_NULL; result.v_type = V_NULL;
if (i == 0) { if (i == 0) {
result.v_type = V_STR; result.v_type = V_STR;
result.v_str = makestring(str); result.v_str = str;
} }
return result; return result;
} }
@@ -6201,7 +6421,7 @@ static VALUE
f_fgetstr(VALUE *vp) f_fgetstr(VALUE *vp)
{ {
VALUE result; VALUE result;
char *str; STRING *str;
int i; int i;
/* initialize VALUE */ /* initialize VALUE */
@@ -6215,7 +6435,7 @@ f_fgetstr(VALUE *vp)
result.v_type = V_NULL; result.v_type = V_NULL;
if (i == 0) { if (i == 0) {
result.v_type = V_STR; result.v_type = V_STR;
result.v_str = makestring(str); result.v_str = str;
} }
return result; return result;
} }
@@ -6225,7 +6445,7 @@ static VALUE
f_fgetfield(VALUE *vp) f_fgetfield(VALUE *vp)
{ {
VALUE result; VALUE result;
char *str; STRING *str;
int i; int i;
/* initialize VALUE */ /* initialize VALUE */
@@ -6239,7 +6459,32 @@ f_fgetfield(VALUE *vp)
result.v_type = V_NULL; result.v_type = V_NULL;
if (i == 0) { if (i == 0) {
result.v_type = V_STR; result.v_type = V_STR;
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; return result;
} }
@@ -8076,6 +8321,8 @@ static CONST struct builtin builtins[] = {
"set or read calc_errno"}, "set or read calc_errno"},
{"error", 0, 1, 0, OP_NOP, 0, f_error, {"error", 0, 1, 0, OP_NOP, 0, f_error,
"generate error value"}, "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", 1, 1, 0, OP_NOP, 0, f_euler,
"Euler number"}, "Euler number"},
{"eval", 1, 1, 0, OP_NOP, 0, f_eval, {"eval", 1, 1, 0, OP_NOP, 0, f_eval,
@@ -8106,6 +8353,8 @@ static CONST struct builtin builtins[] = {
"read next char from file"}, "read next char from file"},
{"fgetfield", 1, 1, 0, OP_NOP, 0, f_fgetfield, {"fgetfield", 1, 1, 0, OP_NOP, 0, f_fgetfield,
"read next white-space delimited field from file"}, "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, {"fgetline", 1, 1, 0, OP_NOP, 0, f_fgetline,
"read next line from file, newline removed"}, "read next line from file, newline removed"},
{"fgets", 1, 1, 0, OP_NOP, 0, f_fgets, {"fgets", 1, 1, 0, OP_NOP, 0, f_fgets,
@@ -8374,7 +8623,7 @@ static CONST struct builtin builtins[] = {
"define an environment variable"}, "define an environment variable"},
{"quo", 2, 3, 0, OP_NOP, 0, f_quo, {"quo", 2, 3, 0, OP_NOP, 0, f_quo,
"integer quotient of a by b, rounding type c"}, "integer quotient of a by b, rounding type c"},
{"quomod", 4, 4, 0, OP_QUOMOD, 0, 0, {"quomod", 4, 5, FA, OP_NOP, 0, f_quomod,
"set c and d to quotient and remainder of a\n\t\t\tdivided by b"}, "set c and d to quotient and remainder of a\n\t\t\tdivided by b"},
{"rand", 0, 2, 0, OP_NOP, f_rand, 0, {"rand", 0, 2, 0, OP_NOP, f_rand, 0,
"additive 55 random number [0,2^64), [0,a), or [a,b)"}, "additive 55 random number [0,2^64), [0,a), or [a,b)"},
@@ -8413,7 +8662,7 @@ static CONST struct builtin builtins[] = {
{"rsearch", 2, 4, 0, OP_NOP, 0, f_rsearch, {"rsearch", 2, 4, 0, OP_NOP, 0, f_rsearch,
"reverse search matrix or list for value b\n\t\t\tstarting at index c"}, "reverse search matrix or list for value b\n\t\t\tstarting at index c"},
{"runtime", 0, 0, 0, OP_NOP, f_runtime, 0, {"runtime", 0, 0, 0, OP_NOP, f_runtime, 0,
"user mode cpu time in seconds"}, "user and kernel mode cpu time in seconds"},
{"saveval", 1, 1, 0, OP_SAVEVAL, 0, 0, {"saveval", 1, 1, 0, OP_SAVEVAL, 0, 0,
"set flag for saving values"}, "set flag for saving values"},
{"scale", 2, 2, 0, OP_SCALE, 0, 0, {"scale", 2, 2, 0, OP_SCALE, 0, 0,
@@ -8496,6 +8745,8 @@ static CONST struct builtin builtins[] = {
"swap values of variables a and b (can be dangerous)"}, "swap values of variables a and b (can be dangerous)"},
{"system", 1, 1, 0, OP_NOP, 0, f_system, {"system", 1, 1, 0, OP_NOP, 0, f_system,
"call Unix command"}, "call Unix command"},
{"systime", 0, 0, 0, OP_NOP, f_systime, 0,
"kernel mode cpu time in seconds"},
{"tail", 2, 2, 0, OP_NOP, 0, f_tail, {"tail", 2, 2, 0, OP_NOP, 0, f_tail,
"retain list of specified number at tail of list"}, "retain list of specified number at tail of list"},
{"tan", 1, 2, 0, OP_NOP, 0, f_tan, {"tan", 1, 2, 0, OP_NOP, 0, f_tan,
@@ -8510,6 +8761,8 @@ static CONST struct builtin builtins[] = {
"truncate a to b number of decimal places"}, "truncate a to b number of decimal places"},
{"ungetc", 2, 2, 0, OP_NOP, 0, f_ungetc, {"ungetc", 2, 2, 0, OP_NOP, 0, f_ungetc,
"unget char read from file"}, "unget char read from file"},
{"usertime", 0, 0, 0, OP_NOP, f_usertime, 0,
"user mode cpu time in seconds"},
{"version", 0, 0, 0, OP_NOP, 0, f_version, {"version", 0, 0, 0, OP_NOP, 0, f_version,
"calc version string"}, "calc version string"},
{"xor", 1, IN, 0, OP_NOP, 0, f_xor, {"xor", 1, IN, 0, OP_NOP, 0, f_xor,

7
hash.c
View File

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

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.3 $
* @(#) $Id: have_stdvs.c,v 29.2 2000/06/07 14:02:13 chongo Exp $ * @(#) $Id: have_stdvs.c,v 29.3 2007/02/07 20:53:18 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/have_stdvs.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/have_stdvs.c,v $
* *
* Under source code control: 1995/09/09 22:41:10 * Under source code control: 1995/09/09 22:41:10
@@ -56,6 +56,13 @@
# include <string.h> # include <string.h>
#endif #endif
#undef VSPRINTF_SIZE_T
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
# define VSPRINTF_SIZE_T size_t
#else
# define VSPRINTF_SIZE_T long
#endif
char buf[BUFSIZ]; char buf[BUFSIZ];
@@ -74,6 +81,21 @@ try_this(char *fmt, ...)
} }
void
try_nthis(char *fmt, VSPRINTF_SIZE_T size, ...)
{
va_list ap;
va_start(ap, fmt);
#if !defined(DONT_HAVE_VSPRINTF)
vsnprintf(buf, size, fmt, ap);
#else
snprintf(buf, size, fmt, ap);
#endif
va_end(ap);
}
int int
main(void) main(void)
{ {
@@ -95,9 +117,9 @@ main(void)
exit(1); exit(1);
} }
try_this("%s %d%s%d%d %s", try_this("%s %d%s%d%d %s",
"Landon Noll 1st proved that", 2, "^", 23209, -1, "was prime"); "Landon Noll 1st coproved that", 2, "^", 21701, -1, "was prime");
if (strcmp(buf, if (strcmp(buf,
"Landon Noll 1st proved that 2^23209-1 was prime") != 0) { "Landon Noll 1st coproved that 2^21701-1 was prime") != 0) {
#if !defined(DONT_HAVE_VSPRINTF) #if !defined(DONT_HAVE_VSPRINTF)
/* <stdarg.h> with vsprintf() didn't work */ /* <stdarg.h> with vsprintf() didn't work */
#else #else
@@ -106,6 +128,30 @@ main(void)
exit(1); exit(1);
} }
/*
* test variable args and vsnprintf/snprintf
*/
try_nthis("@%d:%s:%d@", sizeof(buf)-1, 1, "hello", 5);
if (strcmp(buf, "@1:hello:5@") != 0) {
#if !defined(DONT_HAVE_VSPRINTF)
/* <stdarg.h> with vsnprintf() didn't work */
#else
/* <stdarg.h> with snprintf() simulating vsnprintf() didn't work */
#endif
exit(1);
}
try_nthis("%s %d%s%d%d %s", sizeof(buf)-1,
"Landon Noll 1st proved that", 2, "^", 23209, -1, "was prime");
if (strcmp(buf,
"Landon Noll 1st proved that 2^23209-1 was prime") != 0) {
#if !defined(DONT_HAVE_VSPRINTF)
/* <stdarg.h> with vsnprintf() didn't work */
#else
/* <stdarg.h> with snprintf() simulating vsnprintf() didn't work */
#endif
exit(1);
}
/* /*
* report the result * report the result
*/ */
@@ -128,19 +174,22 @@ main(void)
puts("#define STDARG /* use <stdarg.h> */"); puts("#define STDARG /* use <stdarg.h> */");
puts("#include <stdarg.h>"); puts("#include <stdarg.h>");
#endif #endif
puts("\n/* should we use vsprintf()? */"); puts("\n/* should we use vsprintf() and vsnprintf()? */");
#if !defined(DONT_HAVE_VSPRINTF) #if !defined(DONT_HAVE_VSPRINTF)
puts("#define HAVE_VS /* yes */"); puts("#define HAVE_VSPRINTF /* yes */");
#else #else
puts("/*"); puts("/*");
puts(" * Hack aleart!!!"); puts(" * Hack aleart!!!");
puts(" *"); puts(" *");
puts(" * Systems that do not have vsprintf() need something. In some"); puts(" * Systems that do not have vsprintf() need something. In some");
puts(" * cases the sprintf function will deal correctly with the"); puts(" * cases the sprintf function will deal correctly with the");
puts(" * va_alist 3rd arg. Hope for the best!"); puts(" * va_alist 3rd arg. Same gors for a lack of an vsnprintf()");
puts(" * function. In either case we use the #defines below and");
puts(" * hope for the best!");
puts(" */"); puts(" */");
puts("#define vsprintf sprintf"); puts("#define vsprintf sprintf");
puts("#undef HAVE_VS"); puts("#define vsnprintf snprintf");
puts("#undef HAVE_VSPRINTF");
#endif #endif
/* exit(0); */ /* exit(0); */
return 0; return 0;

View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.2 $ * @(#) $Revision: 29.3 $
* @(#) $Id: have_varvs.c,v 29.2 2000/06/07 14:02:13 chongo Exp $ * @(#) $Id: have_varvs.c,v 29.3 2007/02/07 20:53:18 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/have_varvs.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/have_varvs.c,v $
* *
* Under source code control: 1995/09/09 22:41:10 * Under source code control: 1995/09/09 22:41:10
@@ -52,6 +52,13 @@
# include <string.h> # include <string.h>
#endif #endif
#undef VSPRINTF_SIZE_T
#if defined(FORCE_STDC) || (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
# define VSPRINTF_SIZE_T size_t
#else
# define VSPRINTF_SIZE_T long
#endif
char buf[BUFSIZ]; char buf[BUFSIZ];
#if !defined(STDARG) && !defined(SIMULATE_STDARG) #if !defined(STDARG) && !defined(SIMULATE_STDARG)
@@ -73,6 +80,22 @@ try_this(char *fmt, ...)
va_end(ap); va_end(ap);
} }
void
try_nthis(char *fmt, VSPRINTF_SIZE_T size, ...)
{
va_list ap;
va_start(ap);
#if !defined(DONT_HAVE_VSPRINTF)
vsnprintf(buf, size, fmt, ap);
#else
snprintf(buf, size, fmt, ap);
#endif
va_end(ap);
}
#else #else
void void
@@ -81,6 +104,12 @@ try_this(char *a, int b, char *c, int d)
return; return;
} }
void
try_nthis(char *a, VSPRINTF_SIZE_T size, int b, char *c, int d)
{
return;
}
#endif #endif
@@ -109,9 +138,33 @@ main(void)
if (strcmp(buf, if (strcmp(buf,
"Landon Noll 1st proved that 2^23209-1 was prime") != 0) { "Landon Noll 1st proved that 2^23209-1 was prime") != 0) {
#if !defined(DONT_HAVE_VSPRINTF) #if !defined(DONT_HAVE_VSPRINTF)
/* <stdarg.h> with vsprintf() didn't work */ /* <varargs.h> with vsprintf() didn't work */
#else #else
/* <stdarg.h> with sprintf() simulating vsprintf() didn't work */ /* <varargs.h> with sprintf() simulating vsprintf() didn't work */
#endif
exit(1);
}
/*
* test variable args and vsnprintf/snprintf
*/
try_nthis("@%d:%s:%d@", sizeof(buf)-1, 1, "hello", 5);
if (strcmp(buf, "@1:hello:5@") != 0) {
#if !defined(DONT_HAVE_VSPRINTF)
/* <varargs.h> with vsnprintf() didn't work */
#else
/* <varargs.h> with snprintf() simulating vsnprintf() didn't work */
#endif
exit(1);
}
try_nthis("%s %d%s%d%d %s", sizeof(buf)-1,
"Landon Noll 1st proved that", 2, "^", 23209, -1, "was prime");
if (strcmp(buf,
"Landon Noll 1st proved that 2^23209-1 was prime") != 0) {
#if !defined(DONT_HAVE_VSPRINTF)
/* <varargs.h> with vsnprintf() didn't work */
#else
/* <varargs.h> with snprintf() simulating vsnprintf() didn't work */
#endif #endif
exit(1); exit(1);
} }
@@ -122,19 +175,22 @@ main(void)
puts("/* what type of variable args do we have? */"); puts("/* what type of variable args do we have? */");
puts("#define VARARGS /* use <varargs.h> */"); puts("#define VARARGS /* use <varargs.h> */");
puts("#include <varargs.h>"); puts("#include <varargs.h>");
puts("\n/* should we use vsprintf()? */"); puts("\n/* should we use vsprintf() and vsnprintf()? */");
#if !defined(DONT_HAVE_VSPRINTF) #if !defined(DONT_HAVE_VSPRINTF)
puts("#define HAVE_VS /* yes */"); puts("#define HAVE_VSPRINTF /* yes */");
#else #else
puts("/*"); puts("/*");
puts(" * Hack aleart!!!"); puts(" * Hack aleart!!!");
puts(" *"); puts(" *");
puts(" * Systems that do not have vsprintf() need something. In some"); puts(" * Systems that do not have vsprintf() need something. In some");
puts(" * cases the sprintf function will deal correctly with the"); puts(" * cases the sprintf function will deal correctly with the");
puts(" * va_alist 3rd arg. Hope for the best!"); puts(" * va_alist 3rd arg. Same gors for a lack of an vsnprintf()");
puts(" * function. In either case we use the #defines below and");
puts(" * hope for the best!");
puts(" */"); puts(" */");
puts("#define vsprintf sprintf"); puts("#define vsprintf sprintf");
puts("#undef HAVE_VS"); puts("#define vsnprintf snprintf");
puts("#undef HAVE_VSPRINTF");
#endif #endif
/* exit(0); */ /* exit(0); */
return 0; return 0;

7
help.c
View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc. * received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
* *
* @(#) $Revision: 29.8 $ * @(#) $Revision: 29.9 $
* @(#) $Id: help.c,v 29.8 2001/04/08 08:29:28 chongo Exp $ * @(#) $Id: help.c,v 29.9 2007/02/07 00:37:52 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/help.c,v $ * @(#) $Source: /usr/local/src/cmd/calc/RCS/help.c,v $
* *
* Under source code control: 1997/09/14 10:58:30 * Under source code control: 1997/09/14 10:58:30
@@ -62,6 +62,8 @@ static struct help_alias {
{".", "oldvalue"}, {".", "oldvalue"},
{"%", "mod"}, {"%", "mod"},
{"//", "quo"}, {"//", "quo"},
{"#", "pound"},
{"calc", "help"},
{"copy", "blkcpy"}, {"copy", "blkcpy"},
{"copying", "COPYING"}, {"copying", "COPYING"},
{"copying-lgpl", "COPYING-LGPL"}, {"copying-lgpl", "COPYING-LGPL"},
@@ -71,6 +73,7 @@ static struct help_alias {
{"COPYRIGHT", "copyright"}, {"COPYRIGHT", "copyright"},
{"Copyleft", "copyright"}, {"Copyleft", "copyright"},
{"COPYLEFT", "copyright"}, {"COPYLEFT", "copyright"},
{"define", "command"},
{"read", "command"}, {"read", "command"},
{"write", "command"}, {"write", "command"},
{"quit", "command"}, {"quit", "command"},

View File

@@ -2,7 +2,7 @@
# #
# help - makefile for calc help files # 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 # Calc is open software; you can redistribute it and/or modify it under
# the terms of the version 2.1 of the GNU Lesser General Public License # the terms of the version 2.1 of the GNU Lesser General Public License
@@ -18,8 +18,8 @@
# received a copy with calc; if not, write to Free Software Foundation, Inc. # received a copy with calc; if not, write to Free Software Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
# #
# @(#) $Revision: 29.28 $ # @(#) $Revision: 29.36 $
# @(#) $Id: Makefile,v 29.28 2006/05/07 12:59:51 chongo Exp $ # @(#) $Id: Makefile,v 29.36 2007/02/07 00:31:06 chongo Exp $
# @(#) $Source: /usr/local/src/cmd/calc/help/RCS/Makefile,v $ # @(#) $Source: /usr/local/src/cmd/calc/help/RCS/Makefile,v $
# #
# Under source code control: 1991/07/23 06:47:57 # Under source code control: 1991/07/23 06:47:57
@@ -34,7 +34,7 @@
# required vars # required vars
# #
SHELL= /bin/sh SHELL= /bin/sh
MAKE_FILE = Makefile MAKE_FILE= Makefile
#### ####
# Normally, the upper level makefile will set these values. We provide # Normally, the upper level makefile will set these values. We provide
@@ -62,9 +62,9 @@ INCDIR= /usr/include
# ${LIBDIR} where calc link library (*.a) files are installed # ${LIBDIR} where calc link library (*.a) files are installed
# ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files # ${CALC_SHAREDIR} where to install calc help, .cal, startup, config files
# #
# NOTE: The install rule prepends installation paths with $T, which # NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If $T is non-empty, then installation # by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the $T directory. # locations will be relative to the ${T} directory.
# #
# For DJGPP, select: # For DJGPP, select:
# #
@@ -99,9 +99,9 @@ CALC_SHAREDIR= /usr/share/calc
# ${CUSTOMINCPDIR} where custom .h files are installed # ${CUSTOMINCPDIR} where custom .h files are installed
# ${SCRIPTDIR} where calc shell scripts are installed # ${SCRIPTDIR} where calc shell scripts are installed
# #
# NOTE: The install rule prepends installation paths with $T, which # NOTE: The install rule prepends installation paths with ${T}, which
# by default is empty. If $T is non-empty, then installation # by default is empty. If ${T} is non-empty, then installation
# locations will be relative to the $T directory. # locations will be relative to the ${T} directory.
# #
# If in doubt, set: # If in doubt, set:
# #
@@ -121,8 +121,8 @@ SCRIPTDIR= ${BINDIR}/cscript
# T - top level directory under which calc will be installed # T - top level directory under which calc will be installed
# #
# The calc install is performed under $T, the calc build is # The calc install is performed under ${T}, the calc build is
# performed under /. The purpose for $T is to allow someone # performed under /. The purpose for ${T} is to allow someone
# to install calc somewhere other than into the system area. # to install calc somewhere other than into the system area.
# #
# For example, if: # For example, if:
@@ -142,10 +142,10 @@ SCRIPTDIR= ${BINDIR}/cscript
# calc help, .cal ...: /var/tmp/testing/usr/share/calc # calc help, .cal ...: /var/tmp/testing/usr/share/calc
# ... etc ... /var/tmp/testing/... # ... etc ... /var/tmp/testing/...
# #
# If $T is empty, calc is installed under /, which is the same # 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 # 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 # calc is installed under ${T}, as if one had to chroot under
# $T for calc to operate. # ${T} for calc to operate.
# #
# If in doubt, use T= # If in doubt, use T=
# #
@@ -169,6 +169,14 @@ SED= sed
SORT= sort SORT= sort
FMT= fmt FMT= fmt
CMP= cmp CMP= cmp
CP= cp
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 # Some out of date operating systems require / want an executable to
# end with a certain file extension. Some compile systems such as # end with a certain file extension. Some compile systems such as
@@ -206,9 +214,9 @@ STD_HELP_FILES_8= operator statement
BLT_HELP_FILES_9= resource BLT_HELP_FILES_9= resource
STD_HELP_FILES_10= types usage script STD_HELP_FILES_10= types script
BLT_HELP_FILES_10a= cscript BLT_HELP_FILES_10a= usage cscript
STD_HELP_FILES_10b= unexpected variable STD_HELP_FILES_10b= unexpected variable
@@ -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 \ DETAIL_HELP= abs access acos acosh acot acoth acsc acsch address agd append \
appr arg argv arrow asec asech asin asinh assign atan atan2 atanh \ appr arg argv arrow asec asech asin asinh assign atan atan2 atanh \
avg base base2 bernoulli bit blk blkcpy blkfree blocks bround btrunc \ avg base base2 bernoulli bit blk blkcpy blkfree blocks bround \
calc_tty calclevel catalan ceil cfappr cfsim char cmdbuf cmp comb \ btrunc calc_tty calclevel catalan ceil cfappr cfsim char cmdbuf \
conj cos cosh cot coth count cp csc csch ctime delete den dereference \ cmp comb conj cos cosh cot coth count csc csch ctime delete den \
det digit digits display dp epsilon errcount errmax errno error \ dereference det digit digits display dp epsilon errcount errmax \
euler eval exp fact factor fclose fcnt feof ferror fflush fgetc \ errno error estr euler eval exp fact factor fclose fcnt feof ferror \
fgetfield fgetline fgets fgetstr fib files floor fopen forall \ fflush fgetc fgetfield fgetfile fgetline fgets fgetstr fib files \
fpathopen fprintf fputc fputs fputstr frac free freebernoulli \ floor fopen forall fpathopen fprintf fputc fputs fputstr frac free \
freeeuler freeglobals freeredc freestatics frem freopen fscan \ freebernoulli freeeuler freeglobals freeredc freestatics frem freopen \
fscanf fseek fsize ftell gcd gcdrem gd getenv hash head highbit \ fscan fscanf fseek fsize ftell gcd gcdrem gd getenv hash head highbit \
hmean hnrmod hypot ilog ilog10 ilog2 im indices inputlevel insert \ hmean hnrmod hypot ilog ilog10 ilog2 im indices inputlevel insert \
int inverse iroot isassoc isatty isblk isconfig isdefined iserror \ int inverse iroot isassoc isatty isblk isconfig isdefined iserror \
iseven isfile ishash isident isint islist ismat ismult isnull isnum \ iseven isfile ishash isident isint islist ismat ismult isnull isnum \
@@ -284,15 +292,15 @@ DETAIL_HELP= abs access acos acosh acot acoth acsc acsch address agd append \
ln log lowbit ltol makelist matdim matfill matmax matmin matsum \ ln log lowbit ltol makelist matdim matfill matmax matmin matsum \
mattrace mattrans max md5 memsize meq min minv mmin mne mod modify \ mattrace mattrans max md5 memsize meq min minv mmin mne mod modify \
name near newerror nextcand nextprime norm null num oldvalue ord \ name near newerror nextcand nextprime norm null num oldvalue ord \
param perm pfact pi pix places pmod polar poly pop popcnt power \ param perm pfact pi pix places pmod polar poly pop popcnt pound \
prevcand prevprime printf prompt protect ptest push putenv quo \ power prevcand prevprime printf prompt protect ptest push putenv \
quomod rand randbit random randombit randperm rcin rcmul rcout \ 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 \ saveval scale scan scanf search sec sech seed segment select sgn \
sha sha1 sin sinh size sizeof sleep sort sqrt srand srandom ssq \ sha sha1 sin sinh size sizeof sleep sort sqrt srand srandom ssq \
str strcat strcmp strcpy strerror strlen strncmp strncpy strpos \ str strcat strcmp strcpy strerror strlen strncmp strncpy strpos \
strprintf strscan strscanf substr sum swap system tail tan tanh \ strprintf strscan strscanf substr sum swap system systime tail tan \
test time trunc version xor tanh test time trunc usertime version xor
# This list is of files that are clones of DETAIL_HELP files. They are # This list is of files that are clones of DETAIL_HELP files. They are
# built from DETAIL_HELP files. # built from DETAIL_HELP files.
@@ -317,7 +325,7 @@ DISTLIST= ${STD_HELP_FILES} ${DETAIL_HELP} ${MAKE_FILE} \
CALCLIBLIST= CALCLIBLIST=
all: ${FULL_HELP_FILES} full ${DETAIL_HELP} ${DETAIL_CLONE} \ all: ${FULL_HELP_FILES} full ${DETAIL_HELP} ${DETAIL_CLONE} \
${SINGULAR_FILES} calc .all ${SINGULAR_FILES} .all
# used by the upper level Makefile to determine of we have done all # used by the upper level Makefile to determine of we have done all
# #
@@ -325,175 +333,183 @@ all: ${FULL_HELP_FILES} full ${DETAIL_HELP} ${DETAIL_CLONE} \
# an non-emoty else clause for every if condition. *sigh* # an non-emoty else clause for every if condition. *sigh*
# #
.all: .all:
rm -f .all ${RM} -f .all
touch .all ${TOUCH} .all
bindings: ../cal/bindings bindings: ../cal/bindings
rm -f $@ ${RM} -f $@
cp ../cal/bindings $@ ${CP} ../cal/bindings $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
resource: ../cal/README resource: ../cal/README
rm -f $@ ${RM} -f $@
cp ../cal/README $@ ${CP} ../cal/README $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
changes: ../CHANGES changes: ../CHANGES
rm -f $@ ${RM} -f $@
cp ../CHANGES $@ ${CP} ../CHANGES $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
libcalc: ../LIBRARY libcalc: ../LIBRARY
rm -f $@ ${RM} -f $@
${SED} -e 's:$${LIBDIR}:${LIBDIR}:g' \ ${SED} -e 's:$${LIBDIR}:${LIBDIR}:g' \
-e 's:$${CALC_INCDIR}:${CALC_INCDIR}:g' < ../LIBRARY > $@ -e 's:$${CALC_INCDIR}:${CALC_INCDIR}:g' < ../LIBRARY > $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
bugs: ../BUGS bugs: ../BUGS
rm -f $@ ${RM} -f $@
cp ../BUGS $@ ${CP} ../BUGS $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
errorcodes: ../calcerr.h errorcodes.hdr errorcodes.sed errorcodes: ../calcerr.h errorcodes.hdr errorcodes.sed
rm -f $@ ${RM} -f $@
cat errorcodes.hdr > $@ ${CAT} errorcodes.hdr > $@
${SED} -n -f errorcodes.sed < ../calcerr.h >> $@ ${SED} -n -f errorcodes.sed < ../calcerr.h >> $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
calc: usage usage: ../calc.usage
rm -f $@ ${RM} -f $@
cp usage $@ ${CP} ../calc.usage $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
../calc.usage:
(cd ..; $(MAKE) calc.usage)
custom_cal: ../custom/CUSTOM_CAL custom_cal: ../custom/CUSTOM_CAL
rm -f $@ ${RM} -f $@
cp ../custom/CUSTOM_CAL $@ ${CP} ../custom/CUSTOM_CAL $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
new_custom: ../custom/HOW_TO_ADD new_custom: ../custom/HOW_TO_ADD
rm -f $@ ${RM} -f $@
cp ../custom/HOW_TO_ADD $@ ${CP} ../custom/HOW_TO_ADD $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
copy: blkcpy copy: blkcpy
rm -f $@ ${RM} -f $@
cp blkcpy $@ ${CP} blkcpy $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
COPYING: ../COPYING COPYING: ../COPYING
rm -f $@ ${RM} -f $@
cp ../COPYING $@ ${CP} ../COPYING $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
COPYING-LGPL: ../COPYING-LGPL COPYING-LGPL: ../COPYING-LGPL
rm -f $@ ${RM} -f $@
cp ../COPYING-LGPL $@ ${CP} ../COPYING-LGPL $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
cscript: ../cscript/README cscript: ../cscript/README
rm -f $@ ${RM} -f $@
cp ../cscript/README $@ ${CP} ../cscript/README $@
${CHMOD} 0444 $@ ${CHMOD} 0444 $@
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
../cscript/README: ../cscript/README.src
${Q} echo "forming cscript/README"
-${Q} ${RM} -f $@
(cd ../cscript; $(MAKE) README)
full: ${FULL_HELP_FILES} ${MAKE_FILE} full: ${FULL_HELP_FILES} ${MAKE_FILE}
${Q}echo "forming full" ${Q} echo "forming full"
-${Q}rm -f $@ -${Q} ${RM} -f $@
-${Q}for i in ${FULL_HELP_FILES}; do \ -${Q} for i in ${FULL_HELP_FILES}; do \
if [ Xintro != X"$$i" ]; then \ if [ Xintro != X"$$i" ]; then \
echo " "; \ echo " "; \
else \ else \
true; \ ${TRUE}; \
fi; \ fi; \
if [ Xobj.file = X"$$i" ]; then \ if [ Xobj.file = X"$$i" ]; then \
j=obj; \ j=obj; \
@@ -504,34 +520,34 @@ full: ${FULL_HELP_FILES} ${MAKE_FILE}
echo "* $$j"; \ echo "* $$j"; \
echo "*************"; \ echo "*************"; \
echo ""; \ echo ""; \
cat $$i; \ ${CAT} $$i; \
done > $@ done > $@
${Q}echo "full formed" ${Q} echo "full formed"
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
# Singular files are the same files as their plural form. # Singular files are the same files as their plural form.
# #
${SINGULAR_FILES}: ${PLURAL_FILES} ${SINGULAR_FILES}: ${PLURAL_FILES}
${Q}for i in ${SINGULAR_FILES} /dev/null; do \ ${Q} for i in ${SINGULAR_FILES} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
echo "rm -f $${i}"; \ echo "${RM} -f $${i}"; \
rm -f $${i}; \ ${RM} -f $${i}; \
echo "cp $${i}s $${i}"; \ echo "${CP} $${i}s $${i}"; \
cp $${i}s $${i}; \ ${CP} $${i}s $${i}; \
fi; \ fi; \
done done
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/SINGULAR_FILES =-=-='; \ echo '=-=-= skipping the ${CAT} of help/SINGULAR_FILES =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
# Form the builtin file # Form the builtin file
@@ -553,25 +569,25 @@ ${SINGULAR_FILES}: ${PLURAL_FILES}
# do not treat -I.. correctly! # do not treat -I.. correctly!
# #
builtin: builtin.top builtin.end ../func.c funclist.sed builtin: builtin.top builtin.end ../func.c funclist.sed
${Q}echo "forming builtin help file" ${Q} echo "forming builtin help file"
-${Q}rm -f funclist.c -${Q} ${RM} -f funclist.c
${Q}${SED} -n -f funclist.sed ../func.c > funclist.c ${Q} ${SED} -n -f funclist.sed ../func.c > funclist.c
-${Q}rm -f funclist.o funclist${EXT} -${Q} ${RM} -f funclist.o funclist${EXT}
${Q}${LCC} ${ICFLAGS} -DFUNCLIST -I/usr/include \ ${Q} ${LCC} ${ICFLAGS} -DFUNCLIST -I/usr/include \
-I.. funclist.c -c 2>/dev/null -I.. funclist.c -c 2>/dev/null
${Q}${LCC} ${ILDFLAGS} funclist.o -o funclist${EXT} ${Q} ${LCC} ${ILDFLAGS} funclist.o -o funclist${EXT}
-${Q}rm -f builtin -${Q} ${RM} -f builtin
${Q}cat builtin.top > builtin ${Q} ${CAT} builtin.top > builtin
${Q}./funclist${EXT} | \ ${Q} ./funclist${EXT} | \
${SED} -e 's/^/ /' -e 's/[ ][ ]*$$//' >> builtin ${SED} -e 's/^/ /' -e 's/[ ][ ]*$$//' >> builtin
${Q}cat builtin.end >> builtin ${Q} ${CAT} builtin.end >> builtin
${Q}echo "builtin help file formed" ${Q} echo "builtin help file formed"
-@if [ -z "${Q}" ]; then \ -@if [ -z "${Q}" ]; then \
echo ''; \ echo ''; \
echo '=-=-= skipping the cat of help/$@ =-=-='; \ echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
echo ''; \ echo ''; \
else \ else \
true; \ ${TRUE}; \
fi fi
## ##
@@ -585,17 +601,17 @@ builtin: builtin.top builtin.end ../func.c funclist.sed
## ##
distlist: ${DISTLIST} 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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo help/$$i; \ echo help/$$i; \
fi; \ fi; \
done | LANG=C ${SORT} done | LANG=C ${SORT}
distdir: distdir:
${Q}echo help ${Q} echo help
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 \ if [ X"$$i" != X"/dev/null" ]; then \
echo help/$$i; \ echo help/$$i; \
fi; \ fi; \
@@ -606,21 +622,21 @@ calcliblist:
# ignore this rule. # ignore this rule.
# #
bsdi: all bsdi: all
rm -f obj ${RM} -f obj
cp obj.file obj ${CP} obj.file obj
# These next rule help me form the ${DETAIL_HELP} makefile variables above. # These next rule help me form the ${DETAIL_HELP} makefile variables above.
# #
detaillist: detaillist:
${Q}-(echo "xxxxx"; \ ${Q} -(echo "xxxxx"; \
for i in ${DETAIL_HELP} /dev/null; do \ for i in ${DETAIL_HELP} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
if [ ! -f RCS/$$i,v ]; then \ if [ ! -f RCS/$$i,v ]; then \
echo "WARNING: $$i not under RCS control" 1>&2; \ echo "WARNING: $$i not under RCS control" 1>&2; \
else \ else \
echo $$i; \ echo $$i; \
fi; \
fi; \ fi; \
fi; \
done | LANG=C ${SORT}) | ${FMT} -70 | \ done | LANG=C ${SORT}) | ${FMT} -70 | \
${SED} -e '1s/xxxxx/DETAIL_HELP=/' -e '2,$$s/^/ /' \ ${SED} -e '1s/xxxxx/DETAIL_HELP=/' -e '2,$$s/^/ /' \
-e 's/$$/ \\/' -e '$$s/ \\$$//' -e 's/$$/ \\/' -e '$$s/ \\$$//'
@@ -632,13 +648,13 @@ detaillist:
## ##
echo_inst_files: 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 \ builtin ${DETAIL_HELP} ${SINGULAR_FILES} /dev/null; do \
if [ X"$$i" != X"/dev/null" ]; then \ if [ X"$$i" != X"/dev/null" ]; then \
echo __file__ ${HELPDIR}/$$i; \ echo __file__ ${HELPDIR}/$$i; \
fi; \ fi; \
done done
${Q}echo __file__ ${HELPDIR}/obj ${Q} echo __file__ ${HELPDIR}/obj
## ##
# #
@@ -647,61 +663,99 @@ echo_inst_files:
## ##
clean: clean:
rm -f obj mkbuiltin funclist.c funclist.o funclist${EXT} ${RM} -f obj mkbuiltin funclist.c funclist.o funclist${EXT}
rm -f COPYING COPYING-LGPL ${RM} -f COPYING COPYING-LGPL
clobber: clobber:
rm -f ${BLT_HELP_FILES} full .all calc ${RM} -f ${BLT_HELP_FILES} full .all calc
rm -f obj mkbuiltin funclist.c funclist.o funclist${EXT} ${RM} -f obj mkbuiltin funclist.c funclist.o funclist${EXT}
rm -f COPYING COPYING-LGPL ${RM} -f COPYING COPYING-LGPL
rm -f ${SINGULAR_FILES} ${DETAIL_CLONE} ${RM} -f ${SINGULAR_FILES} ${DETAIL_CLONE}
# install everything
#
# NOTE: Keep the uninstall rule in reverse order to the install rule
#
install: all install: all
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \ -${Q} if [ ! -d ${T}${CALC_SHAREDIR} ]; then \
echo mkdir $T${CALC_SHAREDIR}; \ echo ${MKDIR} ${T}${CALC_SHAREDIR}; \
mkdir $T${CALC_SHAREDIR}; \ ${MKDIR} ${T}${CALC_SHAREDIR}; \
if [ ! -d "$T${CALC_SHAREDIR}" ]; then \ if [ ! -d "${T}${CALC_SHAREDIR}" ]; then \
echo mkdir -p "$T${CALC_SHAREDIR}"; \ echo ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
mkdir -p "$T${CALC_SHAREDIR}"; \ ${MKDIR} -p "${T}${CALC_SHAREDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${CALC_SHAREDIR}; \ echo ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
${CHMOD} 0755 $T${CALC_SHAREDIR}; \ ${CHMOD} 0755 ${T}${CALC_SHAREDIR}; \
else \ else \
true; \ ${TRUE}; \
fi fi
-${Q}if [ ! -d $T${HELPDIR} ]; then \ -${Q} if [ ! -d ${T}${HELPDIR} ]; then \
echo mkdir $T${HELPDIR}; \ echo ${MKDIR} ${T}${HELPDIR}; \
mkdir $T${HELPDIR}; \ ${MKDIR} ${T}${HELPDIR}; \
if [ ! -d "$T${HELPDIR}" ]; then \ if [ ! -d "${T}${HELPDIR}" ]; then \
echo mkdir -p "$T${HELPDIR}"; \ echo ${MKDIR} -p "${T}${HELPDIR}"; \
mkdir -p "$T${HELPDIR}"; \ ${MKDIR} -p "${T}${HELPDIR}"; \
fi; \ fi; \
echo ${CHMOD} 0755 $T${HELPDIR}; \ echo ${CHMOD} 0755 ${T}${HELPDIR}; \
${CHMOD} 0755 $T${HELPDIR}; \ ${CHMOD} 0755 ${T}${HELPDIR}; \
else \ else \
true; \ ${TRUE}; \
fi 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 \ full ${DETAIL_HELP} ${SINGULAR_FILES} /dev/null; do \
if [ "$$i" = "/dev/null" ]; then \ if [ "$$i" = "/dev/null" ]; then \
continue; \ continue; \
fi; \ fi; \
if ${CMP} -s $$i $T${HELPDIR}/$$i; then \ if ${CMP} -s $$i ${T}${HELPDIR}/$$i; then \
true; \ ${TRUE}; \
else \ else \
rm -f $T${HELPDIR}/$$i.new; \ ${RM} -f ${T}${HELPDIR}/$$i.new; \
cp -f $$i $T${HELPDIR}/$$i.new; \ ${CP} -f $$i ${T}${HELPDIR}/$$i.new; \
${CHMOD} 0444 $T${HELPDIR}/$$i.new; \ ${CHMOD} 0444 ${T}${HELPDIR}/$$i.new; \
mv -f $T${HELPDIR}/$$i.new $T${HELPDIR}/$$i; \ ${MV} -f ${T}${HELPDIR}/$$i.new ${T}${HELPDIR}/$$i; \
echo "installed $T${HELPDIR}/$$i"; \ echo "installed ${T}${HELPDIR}/$$i"; \
fi; \ fi; \
done done
-${Q}if ${CMP} -s obj.file $T${HELPDIR}/obj; then \ -${Q} if ${CMP} -s obj.file ${T}${HELPDIR}/obj; then \
true; \ ${TRUE}; \
else \ else \
rm -f $T${HELPDIR}/obj.new; \ ${RM} -f ${T}${HELPDIR}/obj.new; \
cp -f obj.file $T${HELPDIR}/obj.new; \ ${CP} -f obj.file ${T}${HELPDIR}/obj.new; \
${CHMOD} 0444 $T${HELPDIR}/obj.new; \ ${CHMOD} 0444 ${T}${HELPDIR}/obj.new; \
mv -f $T${HELPDIR}/obj.new $T${HELPDIR}/obj; \ ${MV} -f ${T}${HELPDIR}/obj.new ${T}${HELPDIR}/obj; \
echo "installed $T${HELPDIR}/obj"; \ echo "installed ${T}${HELPDIR}/obj"; \
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}${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

@@ -38,7 +38,7 @@ DESCRIPTION
&X with that component or element depends only on the continued existence &X with that component or element depends only on the continued existence
of the matrix or object. For example, after of the matrix or object. For example, after
> mat A[3] ; mat A[3]
the addresses &A[0], &A[1], &A[2] locate the three elements the addresses &A[0], &A[1], &A[2] locate the three elements
of the matrix specified by A until another value is assigned to A, etc. of the matrix specified by A until another value is assigned to A, etc.
@@ -60,15 +60,15 @@ DESCRIPTION
results refer to octets in the same block or existing components of the results refer to octets in the same block or existing components of the
same matrix or object. For example, immediately after same matrix or object. For example, immediately after
> mat A[10] ; mat A[10]
> p = &A[5] ; p = &A[5]
it is permitted to use expressions like p + 4, p - 5, p++ . it is permitted to use expressions like p + 4, p - 5, p++ .
Strings defined literally have fixed addresses, e.g., after Strings defined literally have fixed addresses, e.g., after
> p = &"abc" ; p = &"abc"
> A = "abc" ; A = "abc"
the address &*A of the value of A will be equal to p. the address &*A of the value of A will be equal to p.
@@ -78,7 +78,7 @@ DESCRIPTION
be useable only while the variables retain these defined values. be useable only while the variables retain these defined values.
For example, after For example, after
> B = C = strcat("a", "bc"); ; B = C = strcat("a", "bc");
&*B and &*C will be different. If p is defined by p = &*B, p should &*B and &*C will be different. If p is defined by p = &*B, p should
not be used after a new value is assigned to B, or B ceases to exist, not be used after a new value is assigned to B, or B ceases to exist,
@@ -91,9 +91,9 @@ DESCRIPTION
so long as the number remains associated with at least one function or so long as the number remains associated with at least one function or
lvalue. For example, after lvalue. For example, after
> x = 27; ; x = 27;
> y = 3 * 9; ; y = 3 * 9;
> define f(a) = 27 + a; ; define f(a) = 27 + a;
the three occurrences of 27 have the same address which may be displayed the three occurrences of 27 have the same address which may be displayed
by any of &27, &*x, &*y and &f(0). If x and y are assigned by any of &27, &*x, &*y and &f(0). If x and y are assigned
@@ -109,13 +109,13 @@ DESCRIPTION
non-zero value for a will be assigned to different addresses as can be non-zero value for a will be assigned to different addresses as can be
seen from printing &*A, &*B, &*C after seen from printing &*A, &*B, &*C after
> A = f(2); B = f(2); C = f(2); ; A = f(2); B = f(2); C = f(2);
(the case of f(0) is exceptional since 27 + 0 simply copies the 27 (the case of f(0) is exceptional since 27 + 0 simply copies the 27
rather than creating a new number value). Here it is clearly more rather than creating a new number value). Here it is clearly more
efficient to use efficient to use
> A = B = C = f(2); ; A = B = C = f(2);
which, not only performs the addition in f() only once, but stores the which, not only performs the addition in f() only once, but stores the
number values for A, B and C at the same address. number values for A, B and C at the same address.
@@ -160,7 +160,7 @@ LINK LIBRARY
SEE ALSO SEE ALSO
dereference, isptr dereference, isptr
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -176,8 +176,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.4 $ ## @(#) $Revision: 29.5 $
## @(#) $Id: address,v 29.4 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: address,v 29.5 2006/06/10 12:28:10 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/address,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/address,v $
## ##
## Under source code control: 1997/09/06 20:03:34 ## Under source code control: 1997/09/06 20:03:34

View File

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

View File

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

View File

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

View File

@@ -213,12 +213,27 @@ LIMITS
1 <= chunk < 2^31 1 <= chunk < 2^31
LINK LIBRARY 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 SEE ALSO
blocks, blkfree 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 ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -234,8 +249,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.4 $ ## @(#) $Revision: 29.5 $
## @(#) $Id: blk,v 29.4 2006/05/07 07:16:42 chongo Exp $ ## @(#) $Id: blk,v 29.5 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blk,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blk,v $
## ##
## Under source code control: 1997/04/05 13:07:13 ## Under source code control: 1997/04/05 13:07:13

View File

@@ -19,7 +19,7 @@ TYPES
DESCRIPTION DESCRIPTION
A call to: A call to:
blkcpy(dst, src, num, dsi, ssi) blkcpy(dst, src, num, dsi, ssi)
attempts to copy 'num' consecutive items (octets or values) starting attempts to copy 'num' consecutive items (octets or values) starting
from the source item 'src' with index 'ssi'. By default, 'num' from the source item 'src' with index 'ssi'. By default, 'num'
@@ -27,7 +27,7 @@ DESCRIPTION
A call to: A call to:
copy(src, dst, ssi, num, dsi) copy(src, dst, ssi, num, dsi)
does the same thing, but with a different arg order. does the same thing, but with a different arg order.
@@ -40,30 +40,30 @@ DESCRIPTION
The following pairs of source-type, destination-type are permitted: The following pairs of source-type, destination-type are permitted:
block to block to
int int
block block
matrix matrix
file file
matrix to matrix to
block block
matrix matrix
list list
string to string to
block block
file file
list to list to
list list
matrix matrix
file to file to
block block
int to int to
block block
In the above table, int refers to integer values. However if a In the above table, int refers to integer values. However if a
rational value is supplied, only the numerator is copied. rational value is supplied, only the numerator is copied.
@@ -79,11 +79,11 @@ DESCRIPTION
sufficient memory allocated for the copying. For example, to copy sufficient memory allocated for the copying. For example, to copy
a matrix M of size 100 to a newly created list, one may use: a matrix M of size 100 to a newly created list, one may use:
L = makelist(100); ; L = makelist(100);
copy(M, L); ; copy(M, L);
or: or:
L = makelist(100); ; L = makelist(100);
blkcpy(L, M); ; blkcpy(L, M);
For copying from a block B (named or unnamed), the total number of octets For copying from a block B (named or unnamed), the total number of octets
available for copying is taken to the the datalen for that block, available for copying is taken to the the datalen for that block,
@@ -114,7 +114,6 @@ EXAMPLE
; B ; B
chunksize = 256, maxsize = 256, datalen = 4 chunksize = 256, maxsize = 256, datalen = 4
01020304 01020304
>
; blkcpy(B,A) ; blkcpy(B,A)
; B ; B
chunksize = 256, maxsize = 256, datalen = 8 chunksize = 256, maxsize = 256, datalen = 8
@@ -191,7 +190,7 @@ LINK LIBRARY
SEE ALSO SEE ALSO
blk, mat, file, list, str blk, mat, file, list, str
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -207,8 +206,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: blkcpy,v 29.3 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: blkcpy,v 29.4 2006/06/10 12:28:10 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blkcpy,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blkcpy,v $
## ##
## Under source code control: 1997/04/05 14:08:50 ## Under source code control: 1997/04/05 14:08:50

View File

@@ -178,7 +178,7 @@
the hash value may change with different versions of the calculator. the hash value may change with different versions of the calculator.
The base function allows one to specify how numbers should be The base function allows one to specify how numbers should be
printer. The base function provides a numeric shorthand to the printed. The base function provides a numeric shorthand to the
config("mode") interface. With no args, base() will return the config("mode") interface. With no args, base() will return the
current mode. With 1 arg, base(val) will set the mode according to current mode. With 1 arg, base(val) will set the mode according to
the arg and return the previous mode. the arg and return the previous mode.
@@ -199,7 +199,7 @@
For convenience, any non-integer value is assumed to mean "frac", For convenience, any non-integer value is assumed to mean "frac",
and any integer >= 2^64 is assumed to mean "exp". and any integer >= 2^64 is assumed to mean "exp".
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2007 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -215,8 +215,8 @@
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: builtin.end,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: builtin.end,v 29.3 2007/02/08 06:25:23 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/builtin.end,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/builtin.end,v $
## ##
## Under source code control: 1995/07/10 01:17:53 ## Under source code control: 1995/07/10 01:17:53

View File

@@ -13,9 +13,9 @@ DESCRIPTION
may occur when activity is resumed by an fg command after a ctrl-Z may occur when activity is resumed by an fg command after a ctrl-Z
interrupt, or by any of the three commands: interrupt, or by any of the three commands:
> !stty echo ; !stty echo
> !stty -cbreak ; !stty -cbreak
> !stty echo -cbreak ; !stty echo -cbreak
EXAMPLE EXAMPLE
; calc_tty(); ; calc_tty();
@@ -26,7 +26,7 @@ LIBRARY
SEE ALSO SEE ALSO
none none
## Copyright (C) 2000 Ernest Bowen ## Copyright (C) 2000-2006 Ernest Bowen
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -42,8 +42,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: calc_tty,v 29.2 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: calc_tty,v 29.3 2006/06/10 12:28:10 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/calc_tty,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/calc_tty,v $
## ##
## Under source code control: 2000/12/14 01:33:00 ## Under source code control: 2000/12/14 01:33:00

View File

@@ -26,9 +26,9 @@ LINK LIBRARY
none none
SEE ALSO 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 ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -44,8 +44,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: cmdbuf,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: cmdbuf,v 29.3 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cmdbuf,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cmdbuf,v $
## ##
## Under source code control: 1995/07/09 04:05:58 ## 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) void zcomb(ZVALUE x, ZVALUE y, ZVALUE *res)
SEE ALSO 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 ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -54,8 +54,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: comb,v 29.3 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: comb,v 29.4 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/comb,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/comb,v $
## ##
## Under source code control: 1994/10/20 04:03:02 ## Under source code control: 1994/10/20 04:03:02

View File

@@ -19,26 +19,26 @@ Command sequence
define function(params) { body } define function(params) { body }
define function(params) = expression define function(params) = expression
This first form defines a full function which can consist This first form defines a full function which can consist
of declarations followed by many statements which implement of declarations followed by many statements which implement
the function. the function.
The second form defines a simple function which calculates The second form defines a simple function which calculates
the specified expression value from the specified parameters. the specified expression value from the specified parameters.
The expression cannot be a statement. However, the comma The expression cannot be a statement. However, the comma
and question mark operators can be useful. Examples of and question mark operators can be useful. Examples of
simple functions are: simple functions are:
define sumcubes(a, b) = a^3 + b^3 define sumcubes(a, b) = a^3 + b^3
define pimod(a) = a % pi() define pimod(a) = a % pi()
define printnum(a, n, p) define printnum(a, n, p)
{ {
if (p == 0) { if (p == 0) {
print a: "^": n, "=", a^n; print a: "^": n, "=", a^n;
} else { } else {
print a: "^": n, "mod", p, "=", pmod(a,n,p); print a: "^": n, "mod", p, "=", pmod(a,n,p);
}
} }
}
read calc commands read calc commands
@@ -48,45 +48,45 @@ Command sequence
read filename read filename
read -once filename read -once filename
This reads definitions from the specified calc resource filename. This reads definitions from the specified calc resource filename.
In the 1st and 2nd forms, if var is a global variable string In the 1st and 2nd forms, if var is a global variable string
value, then the value of that variable is used as a filename. value, then the value of that variable is used as a filename.
The following is equivalent to read lucas.cal or read "lucas.cal": The following is equivalent to read lucas.cal or read "lucas.cal":
global var = "lucas.cal"; global var = "lucas.cal";
read $var; read $var;
In the 3rd or 4th forms, the filename argument is treated In the 3rd or 4th forms, the filename argument is treated
as a literal string, not a variable. In these forms, the as a literal string, not a variable. In these forms, the
name can be quoted if desired. name can be quoted if desired.
The calculator uses the CALCPATH environment variable to The calculator uses the CALCPATH environment variable to
search through the specified directories for the filename, search through the specified directories for the filename,
similarly to the use of the PATH environment variable. similarly to the use of the PATH environment variable.
If CALCPATH is not defined, then a default path which is If CALCPATH is not defined, then a default path which is
usually ":/usr/local/lib/calc" is used. usually ":/usr/local/lib/calc" is used.
The ".cal" extension is defaulted for input files, so that The ".cal" extension is defaulted for input files, so that
if "filename" is not found, then "filename.cal" is then if "filename" is not found, then "filename.cal" is then
searched for. The contents of the filename are command searched for. The contents of the filename are command
sequences which can consist of expressions to evaluate or sequences which can consist of expressions to evaluate or
functions to define, just like at the top level command level. functions to define, just like at the top level command level.
When -once is given, the read command acts like the regular When -once is given, the read command acts like the regular
read expect that it will ignore filename if is has been read expect that it will ignore filename if is has been
previously read. previously read.
The read -once form is particularly useful in a resource The read -once form is particularly useful in a resource
file that needs to read a 2nd resource file. By using the file that needs to read a 2nd resource file. By using the
READ -once command, one will not reread that 2nd resource READ -once command, one will not reread that 2nd resource
file, nor will once risk entering into a infinite READ loop file, nor will once risk entering into a infinite READ loop
(where that 2nd resource file directly or indirectly does (where that 2nd resource file directly or indirectly does
a READ of the first resource file). a READ of the first resource file).
If the -m mode disallows opening of files for reading, If the -m mode disallows opening of files for reading,
this command will be disabled. this command will be disabled.
write calc commands write calc commands
@@ -94,29 +94,29 @@ Command sequence
write $var write $var
write filename write filename
This writes the values of all global variables to the This writes the values of all global variables to the
specified filename, in such a way that the file can be specified filename, in such a way that the file can be
later read in order to recreate the variable values. later read in order to recreate the variable values.
For speed reasons, values are written as hex fractions. For speed reasons, values are written as hex fractions.
This command currently only saves simple types, so that This command currently only saves simple types, so that
matrices, lists, and objects are not saved. Function matrices, lists, and objects are not saved. Function
definitions are also not saved. definitions are also not saved.
In the 1st form, if var is a global variable string In the 1st form, if var is a global variable string
value, then the value of that variable is used as a filename. value, then the value of that variable is used as a filename.
The following is equivalent to write dump.out or The following is equivalent to write dump.out or
write "dump.out": write "dump.out":
global var = "dump.out"; global var = "dump.out";
write $var; write $var;
In the 2nd form, the filename argument is treated as a literal In the 2nd form, the filename argument is treated as a literal
string, not a variable. In this form, the name can be quoted string, not a variable. In this form, the name can be quoted
if desired. if desired.
If the -m mode disallows opening of files for writing, If the -m mode disallows opening of files for writing,
this command will be disabled. this command will be disabled.
quit or exit quit or exit
@@ -126,36 +126,35 @@ Command sequence
exit exit
exit string exit string
The action of these commands depends on where they are used. The action of these commands depends on where they are used.
At the interactive level, they will cause calc it edit. At the interactive level, they will cause calc it edit.
This is the normal way to leave the calculator. In any This is the normal way to leave the calculator. In any
other use, they will stop the current calculation as if other use, they will stop the current calculation as if
an error had occurred. an error had occurred.
If a string is given, then the string is printed as the reason If a string is given, then the string is printed as the reason
for quitting, otherwise a general quit message is printed. for quitting, otherwise a general quit message is printed.
The routine name and line number which executed the quit is The routine name and line number which executed the quit is
also printed in either case. also printed in either case.
Exit is an alias for quit. Exit is an alias for quit.
Quit is useful when a routine detects invalid arguments, Quit is useful when a routine detects invalid arguments,
in order to stop a calculation cleanly. For example, in order to stop a calculation cleanly. For example,
for a square root routine, an error can be given if the for a square root routine, an error can be given if the
supplied parameter was a negative number, as in: supplied parameter was a negative number, as in:
define mysqrt(n) define mysqrt(n)
{ {
if (! isnum(n)) if (! isnum(n))
quit "non-numeric argument"; quit "non-numeric argument";
if (n < 0) if (n < 0)
quit "Negative argument"; quit "Negative argument";
return sqrt(n); return sqrt(n);
} }
See 'more information about abort and quit' below for
more information.
See 'more information about abort and quit' below for
more information.
abort abort
@@ -163,12 +162,12 @@ Command sequence
abort abort
abort string abort string
This command behaves like QUIT except that it will attempt This command behaves like QUIT except that it will attempt
to return to the interactive level if permitted, otherwise to return to the interactive level if permitted, otherwise
calc exit. calc exit.
See 'more information about abort and quit' below for See 'more information about abort and quit' below for
more information. more information.
change current directory change current directory
@@ -176,45 +175,45 @@ Command sequence
cd cd
cd dir cd dir
Change the current directory to 'dir'. If 'dir' is ommitted, Change the current directory to 'dir'. If 'dir' is ommitted,
change the current directory to the home directory, if $HOME change the current directory to the home directory, if $HOME
is set in the environment. is set in the environment.
show information show information
---------------- ----------------
show item show item
This command displays some information where 'item' is This command displays some information where 'item' is
one of the following: one of the following:
blocks unfreed named blocks blocks unfreed named blocks
builtin built in functions builtin built in functions
config config parameters and values config config parameters and values
constants cache of numeric constants constants cache of numeric constants
custom custom functions if calc -C was used custom custom functions if calc -C was used
errors new error-values created errors new error-values created
files open files, file position and sizes files open files, file position and sizes
function user-defined functions function user-defined functions
globaltypes global variables globaltypes global variables
objfunctions possible object functions objfunctions possible object functions
objtypes defined objects objtypes defined objects
opcodes func internal opcodes for function `func' opcodes func internal opcodes for function `func'
sizes size in octets of calc value types sizes size in octets of calc value types
realglobals numeric global variables realglobals numeric global variables
statics unscoped static variables statics unscoped static variables
numbers calc number cache numbers calc number cache
redcdata REDC data defined redcdata REDC data defined
strings calc string cache strings calc string cache
literals calc literal cache literals calc literal cache
Only the first 4 characters of item are examined, so: Only the first 4 characters of item are examined, so:
show globals show globals
show global show global
show glob show glob
do the same thing. do the same thing.
calc help calc help
@@ -222,25 +221,24 @@ Command sequence
help $var help $var
help name help name
This displays a help related to 'name' or general This displays a help related to 'name' or general
help of none is given. help of none is given.
In the 1st form, if var is a global variable string In the 1st form, if var is a global variable string
value, then the value of that variable is used as a name. value, then the value of that variable is used as a name.
The following is equivalent to help command or help "command": The following is equivalent to help command or help "command":
global var = "command"; global var = "command";
help $var; help $var;
In the 2nd form, the filename argument is treated as a literal In the 2nd form, the filename argument is treated as a literal
string, not a variable. In this form, the name can be quoted string, not a variable. In this form, the name can be quoted
if desired. if desired.
=-= =-=
more information about abort and quit more information about abort and quit
===================================== =====================================
@@ -291,7 +289,7 @@ Command sequence
after statment #1 after statment #1
start statment #2 start statment #2
abort from a() abort from a()
> <==== calc interactive prompt ; <==== calc interactive prompt
because the '-i' calc causes ABORT to drop into an because the '-i' calc causes ABORT to drop into an
interactive prompt. However typing a QUIT or ABORT interactive prompt. However typing a QUIT or ABORT
@@ -321,21 +319,21 @@ Command sequence
If one were to type in the contents of myfile.cal interactively, If one were to type in the contents of myfile.cal interactively,
calc will produce: calc will produce:
> print "start of myfile.cal"; ; print "start of myfile.cal";
start of myfile.cal start of myfile.cal
> define q() {quit "quit from q()"; print "end of q()"} ; define q() {quit "quit from q()"; print "end of q()"}
q() defined q() defined
> define a() {abort "abort from a()"} ; define a() {abort "abort from a()"}
a() defined a() defined
> x = 3; ; x = 3;
> {print "start #1"; if (x > 1) q()} print "after #1"; ; {print "start #1"; if (x > 1) q()} print "after #1";
start statment #1 start statment #1
quit from q() quit from q()
after statment #1 after statment #1
> {print "start #2"; if (x > 1) a()} print "after #2"; ; {print "start #2"; if (x > 1) a()} print "after #2";
start statment #2 start statment #2
abort from a() abort from a()
> {print "start #3"; if (x > 1) quit "quit from 3rd statement"} ; {print "start #3"; if (x > 1) quit "quit from 3rd statement"}
start #3 start #3
quit from 3rd statement quit from 3rd statement
@@ -345,16 +343,14 @@ Command sequence
The QUIT (after the if (x > 1) ...) will cause calc to exit The QUIT (after the if (x > 1) ...) will cause calc to exit
because it was given at the interactive prompt level. because it was given at the interactive prompt level.
=-= =-=
Also see the help topic: Also see the help topic:
statement flow control and declaration statements statement flow control and declaration statements
usage how to invoke the calc command and calc -options usage how to invoke the calc command and calc -options
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -370,8 +366,8 @@ Command sequence
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.5 $
## @(#) $Id: command,v 29.3 2006/05/20 10:01:33 chongo Exp $ ## @(#) $Id: command,v 29.5 2006/06/10 12:28:10 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/command,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/command,v $
## ##
## Under source code control: 1991/07/21 04:37:17 ## Under source code control: 1991/07/21 04:37:17

View File

@@ -1,12 +1,24 @@
Configuration parameters NAME
config - configuration parameters
Configuration parameters affect how the calculator performs certain SYNOPSIS
config(parameter [,value])
TYPES
parameter string
value int, string, config state
return config state
DESCRIPTION
The config() builtin affects how the calculator performs certain
operations. Among features that are controlled by these parameters operations. Among features that are controlled by these parameters
are the accuracy of some calculations, the displayed format of results, are the accuracy of some calculations, the displayed format of results,
the choice from possible alternative algorithms, and whether or not the choice from possible alternative algorithms, and whether or not
debugging information is displayed. The parameters are debugging information is displayed. The parameters are
read or set using the "config" built-in function; they remain in effect read or set using the "config" built-in function; they remain in effect
until their values are changed by a config or equivalent instruction. until their values are changed by a config or equivalent instruction.
The following parameters can be specified: The following parameters can be specified:
"all" all configuration values listed below "all" all configuration values listed below
@@ -38,13 +50,13 @@ Configuration parameters
"prompt" default interactive prompt "prompt" default interactive prompt
"more" default interactive multi-line input prompt "more" default interactive multi-line input prompt
"blkmaxprint" number of block octets to print, 0 means all "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 "blkbase" block output base
"blkfmt" block output format "blkfmt" block output format
"calc_debug" controls internal calc debug information "calc_debug" controls internal calc debug information
"resource_debug" controls resource file debug information "resource_debug" controls resource file debug information
"user_debug" for user defined 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) "ctrl_d" The interactive meaning of ^D (Control D)
"program" Read-only calc program or shell script path "program" Read-only calc program or shell script path
"basename" Read-only basename of the program value "basename" Read-only basename of the program value
@@ -53,6 +65,10 @@ Configuration parameters
"compile_custom" TRUE=>calc was compiled with custom functions "compile_custom" TRUE=>calc was compiled with custom functions
"allow_custom" TRUE=>custom functions are enabled "allow_custom" TRUE=>custom functions are enabled
"version" Read-only calc version "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
"hz" Read-only operating system tick rate or 0
The "all" config value allows one to save/restore the configuration The "all" config value allows one to save/restore the configuration
set of values. The return of: set of values. The return of:
@@ -120,9 +136,6 @@ Configuration parameters
config("tilde", 0) disable roundoff tilde printing config("tilde", 0) disable roundoff tilde printing
config("tab", "off") disable leading tab printing config("tab", "off") disable leading tab printing
Detailed config descriptions
=-= =-=
config("trace", bitflag) config("trace", bitflag)
@@ -254,16 +267,36 @@ Detailed config descriptions
runs in a time of O(N^2). The second method is a recursive and runs in a time of O(N^2). The second method is a recursive and
complicated method which runs in a time of O(N^1.585). The argument complicated method which runs in a time of O(N^1.585). The argument
for these parameters is the number of binary words at which the for these parameters is the number of binary words at which the
second algorithm begins to be used. The minimum value is 2, and second algorithm begins to be used. The minimum value is 2, and
the maximum value is very large. If 2 is used, then the recursive the maximum value is very large. If 2 is used, then the recursive
algorithm is used all the way down to single digits, which becomes algorithm is used all the way down to single digits, which becomes
slow since the recursion overhead is high. If a number such as slow since the recursion overhead is high. If a number such as
1000000 is used, then the recursive algorithm is never used, causing 1000000 is used, then the recursive algorithm is almost never used,
calculations for large numbers to slow down. For a typical example causing calculations for large numbers to slow down.
on a 386, the two algorithms are about equal in speed for a value
of 20, which is about 100 decimal digits. A value of zero resets Units refer to internal calculation digits where each digit
the parameter back to its default value. Usually there is no need is BASEB bits in length. The value of BASEB is returned by
to change these parameters. config("baseb").
The default value for config("sq2") is 3388. 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
(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 decimal digits) use
the 1st algorithm, for multiplication.
A value of zero resets the parameter back to their default values.
The value of 1 and values < 0 are reserved for future use.
Usually there is no need to change these parameters.
=-= =-=
@@ -277,6 +310,23 @@ Detailed config descriptions
which avoids divisions. The argument for pow2 is the size of the which avoids divisions. The argument for pow2 is the size of the
modulus at which the second algorithm begins to be used. modulus at which the second algorithm begins to be used.
Units refer to internal calculation digits where each digit
is BASEB bits in length. The value of BASEB is returned by
config("baseb").
The default value for config("pow2") is 176. 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
(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.
The value of 1 and values < 0 are reserved for future use.
Usually there is no need to change these parameters.
=-= =-=
config("redc2", int) config("redc2", int)
@@ -289,6 +339,23 @@ Detailed config descriptions
O(N^1.585). The argument for redc2 is the size of the modulus at O(N^1.585). The argument for redc2 is the size of the modulus at
which the second algorithm begins to be used. which the second algorithm begins to be used.
Units refer to internal calculation digits where each digit
is BASEB bits in length. The value of BASEB is returned by
config("baseb").
The default value for config("redc2") is 220. This default was
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 decimal digits) use the REDC algorithm,
for calculating powers modulo another number.
A value of zero resets the parameter back to their default values.
The value of 1 and values < 0 are reserved for future use.
Usually there is no need to change these parameters.
=-= =-=
config("tilde", boolean) config("tilde", boolean)
@@ -364,9 +431,15 @@ Detailed config descriptions
by the various kinds of printing to the output: bits 0, 1, 3 and 4 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. 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 The "leadzero" parameter controls whether or not a 0 is printed
before the decimal point in non-zero fractions with absolute value before the decimal point in non-zero fractions with absolute value
@@ -375,7 +448,7 @@ Detailed config descriptions
=-= =-=
config("fullzero", bool) config("fullzero", boolean)
The "fullzero" parameter controls whether or not in decimal floating- The "fullzero" parameter controls whether or not in decimal floating-
point printing, the digits are padded with zeros to reach the point printing, the digits are padded with zeros to reach the
@@ -426,7 +499,7 @@ Detailed config descriptions
=-= =-=
config("blkverbose", bool) config("blkverbose", boolean)
The "blkverbose" determines if all lines, including duplicates The "blkverbose" determines if all lines, including duplicates
should be printed. If TRUE, then all lines are printed. If false, should be printed. If TRUE, then all lines are printed. If false,
@@ -560,11 +633,12 @@ Detailed config descriptions
3 During execution, allow calc standard resource files 3 During execution, allow calc standard resource files
to output additional debugging information. to output additional debugging information.
The value for config("resource_debug") in both oldstd and newstd is 3, The value for config("resource_debug") in both oldstd and newstd
but if calc is invoked with the -d flag, its initial value is zero. is 3, but if calc is invoked with the -d flag, its initial value
Thus, if calc is started without the -d flag, until config("resource_debug") is zero. Thus, if calc is started without the -d flag, until
is changed, a message will be output when a function is defined config("resource_debug") is changed, a message will be output when
either interactively or during the reading of a file. a function is defined either interactively or during the reading of
a file.
The name config("lib_debug") is equivalent to config("resource_debug") The name config("lib_debug") is equivalent to config("resource_debug")
and is included for backward compatibility. and is included for backward compatibility.
@@ -591,7 +665,7 @@ Detailed config descriptions
=-= =-=
config("verbose_quit", bool) config("verbose_quit", boolean)
The "verbose_quit" controls the print of the message: The "verbose_quit" controls the print of the message:
@@ -601,7 +675,7 @@ Detailed config descriptions
A quit of abort without an argument does not display a message when A quit of abort without an argument does not display a message when
invoked at the interactive level. invoked at the interactive level.
By deafult, "verbose_quit" is false. By default, "verbose_quit" is false.
=-= =-=
@@ -756,7 +830,133 @@ Detailed config descriptions
This config parameter is read-only and cannot be set. This config parameter is read-only and cannot be set.
## Copyright (C) 1999 Landon Curt Noll =-=
config("baseb") <== NOTE: This is a read-only config value
Returns the number of bits in the fundamental base in which
internal calculations are performed. For example, a value of
32 means that calc will perform many internal calculations in
base 2^32 with digits that are 32 bits in length.
For libcalc programmers, this is the value of BASEB as defined
in the zmath.h header file.
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.
=-=
config("hz") <== NOTE: This is a read-only config value
Returns the rate at which the operating system advances the clock
on POSIX based systems. Returns 0 on non-POSIX based systems.
The non-zero value returned is in Hetrz.
This config parameter is read-only and cannot be set.
EXAMPLE
; current_cfg = config("all");
; config("tilde", off),;
; config("calc_debug", 15),;
; config("all") == current_cfg
0
; config("all", current_cfg),;
; config("all") == current_cfg
1
; config("version")
"2.12.0"
; config("all")
mode "real"
mode2 "off"
display 20
epsilon 0.00000000000000000001
trace 0
maxprint 16
mul2 20
sq2 20
pow2 40
redc2 50
tilde 1
tab 1
quomod 0
quo 2
mod 0
sqrt 24
appr 24
cfappr 0
cfsim 8
outround 24
round 24
leadzero 1
fullzero 0
maxscan 20
prompt "; "
more ";; "
blkmaxprint 256
blkverbose 0
blkbase "hexadecimal"
blkfmt "hd_style"
resource_debug 3
lib_debug 3
calc_debug 0
user_debug 0
verbose_quit 0
ctrl_d "virgin_eof"
program "calc"
basename "calc"
windows 0
cygwin 0
compile_custom 1
allow_custom 0
version "2.12.0"
baseb 32
redecl_warn 1
dupvar_warn 1
hz 100
; display()
20
; config("display", 50),;
; display()
50
LIMITS
none
LINK LIBRARY
n/a
SEE ALSO
usage, custom, custom_cal, usage, epsilon, display
## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -772,8 +972,8 @@ Detailed config descriptions
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.10 $ ## @(#) $Revision: 29.18 $
## @(#) $Id: config,v 29.10 2004/07/27 23:45:52 chongo Exp $ ## @(#) $Id: config,v 29.18 2006/12/16 11:14:28 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/config,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/config,v $
## ##
## Under source code control: 1991/07/21 04:37:17 ## Under source code control: 1991/07/21 04:37:17

63
help/cp
View File

@@ -1,63 +0,0 @@
NAME
cp - cross product of two 3 element vectors
SYNOPSIS
cp(x, y)
TYPES
x, y 1-dimensional matrices with 3 elements
return 1-dimensional matrix with 3 elements
DESCRIPTION
Calculate the product of two 3 1-dimensional matrices.
If x has elements (x0, x1, x2), and y has elements (y0, y1, y2),
cp(x,y) returns the matrix of type [0:2] with elements:
{x1 * y2 - x2 * y1, x3 * y1 - x1 * y3, x1 * y2 - x2 * y1}
EXAMPLE
; mat x[3] = {2,3,4}
; mat y[3] = {3,4,5}
; print cp(x,y)
mat [3] (3 elements, 3 nonzero):
[0] = -1
[1] = 2
[2] = -1
LIMITS
The components of the matrices are to be of types for which the
required algebraic operations have been defined.
LINK LIBRARY
MATRIX *matcross(MATRIX *x, MATRIX *y)
SEE ALSO
dp
## Copyright (C) 1999 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
## as published by the Free Software Foundation.
##
## Calc is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
## Public License for more details.
##
## A copy of version 2.1 of the GNU Lesser General Public License is
## distributed with calc under the filename COPYING-LGPL. You should have
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
##
## @(#) $Revision: 29.3 $
## @(#) $Id: cp,v 29.3 2006/05/07 07:25:46 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cp,v $
##
## Under source code control: 1995/10/05 04:52:26
## File existed as early as: 1995
##
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/

View File

@@ -30,17 +30,17 @@ DESCRIPTION
For example, suppose a function f and a global variable A have been For example, suppose a function f and a global variable A have been
defined by: defined by:
define f(x) = (x = 3); ; define f(x) = (x = 3);
global mat A[3]; ; global mat A[3];
If g() is a function that evaluates to 2: If g() is a function that evaluates to 2:
f(A[g()]); ; f(A[g()]);
assigns the value of A[2] to the parameter x and then assigns the assigns the value of A[2] to the parameter x and then assigns the
value 3 to x: value 3 to x:
f(`A[g()]); ; f(`A[g()]);
has essentially the effect of assigning A[2] as an lvalue to x and has essentially the effect of assigning A[2] as an lvalue to x and
then assigning the value 3 to A[2]. (Very old versions of calc then assigning the value 3 to A[2]. (Very old versions of calc
@@ -79,7 +79,7 @@ DESCRIPTION
If the expr is omitted from an expression definition, as in: If the expr is omitted from an expression definition, as in:
define h() = ; ; define h() = ;
any call to the function will evaluate the arguments and return the any call to the function will evaluate the arguments and return the
null value. null value.
@@ -105,11 +105,11 @@ DESCRIPTION
After fname has been defined, the definition may be removed by the command: After fname has been defined, the definition may be removed by the command:
undefine fname ; undefine fname
The definitions of all user-defined functions may be removed by: The definitions of all user-defined functions may be removed by:
undefine * ; undefine *
If bit 0 of config("resource_debug") is set and the define command is If bit 0 of config("resource_debug") is set and the define command is
at interactive level, a message saying that fname has been defined at interactive level, a message saying that fname has been defined
@@ -120,8 +120,8 @@ DESCRIPTION
The identifiers used for the parameters in a function definition do The identifiers used for the parameters in a function definition do
not form part of the completed definition. For example, not form part of the completed definition. For example,
define f(a,b) = a + b; ; define f(a,b) = a + b;
define g(alpha, beta) = alpha + beta; ; define g(alpha, beta) = alpha + beta;
result in identical code for the functions f, g. result in identical code for the functions f, g.
@@ -129,8 +129,8 @@ DESCRIPTION
function are displayed on completion of its definition, parameters function are displayed on completion of its definition, parameters
being specified by names used in the definition. For example: being specified by names used in the definition. For example:
> config("trace", 8), ; config("trace", 8),
> define f(a,b) = a + b ; define f(a,b) = a + b
0: PARAMADDR a 0: PARAMADDR a
2: PARAMADDR b 2: PARAMADDR b
4: ADD 4: ADD
@@ -140,7 +140,7 @@ DESCRIPTION
The opcodes may also be displayed later using the show opcodes command; The opcodes may also be displayed later using the show opcodes command;
parameters will be specified by indices instead of by names. For example: parameters will be specified by indices instead of by names. For example:
> show opco f ; show opco f
0: PARAMADDR 0 0: PARAMADDR 0
2: PARAMADDR 1 2: PARAMADDR 1
4: ADD 4: ADD
@@ -168,22 +168,22 @@ DESCRIPTION
EXAMPLE EXAMPLE
; define f(a,b) = 2*a + b; ; define f(a,b) = 2*a + b;
; define g(alpha, beta) ; define g(alpha, beta)
>> { ;; {
>> local a, pi2; ;; local a, pi2;
>> ;;
>> pi2 = 2 * pi(); ;; pi2 = 2 * pi();
>> a = sin(alpha % pi2); ;; a = sin(alpha % pi2);
>> if (a > 0.0) { ;; if (a > 0.0) {
>> return a*beta; ;; return a*beta;
>> } ;; }
>> if (beta > 0.0) { ;; if (beta > 0.0) {
>> a *= cos(-beta % pi2); ;; a *= cos(-beta % pi2);
>> } ;; }
>> return a; ;; return a;
>> } ;; }
LIMITS LIMITS
The number of arguments in a function-call cannot exceed 100. The number of arguments in a function-call cannot exceed 1024.
LIBRARY LIBRARY
none none
@@ -191,7 +191,7 @@ LIBRARY
SEE ALSO SEE ALSO
param, variable, undefine, show param, variable, undefine, show
## Copyright (C) 2000 David I. Bell, Landon Curt Noll and Ernest Bowen ## Copyright (C) 2000-2006 David I. Bell, Landon Curt Noll and Ernest Bowen
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -207,8 +207,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.4 $ ## @(#) $Revision: 29.6 $
## @(#) $Id: define,v 29.4 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: define,v 29.6 2006/06/22 23:49:22 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/define,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/define,v $
## ##
## ##

View File

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

View File

@@ -33,16 +33,17 @@ DESCRIPTION
structure rather than the structure identified by X. For example, structure rather than the structure identified by X. For example,
suppose B has been created by suppose B has been created by
mat B[3] = {1,2,3} ; mat B[3] = {1,2,3}
then then
A = *B = {4,5,6}
; A = *B = {4,5,6}
will assign the values 4,5,6 to the elements of a copy of B, which will assign the values 4,5,6 to the elements of a copy of B, which
will then become the value of A, so that the values of A and B will will then become the value of A, so that the values of A and B will
be different. On the other hand, be different. On the other hand,
A = B = {4,5,6} ; A = B = {4,5,6}
will result in A and B having the same value. will result in A and B having the same value.
@@ -51,9 +52,9 @@ DESCRIPTION
The * operator may be iterated with suitable sequences of pointer-valued The * operator may be iterated with suitable sequences of pointer-valued
lvalues. For example, after lvalues. For example, after
> global a, b, c; ; global a, b, c;
> b = &a; ; b = &a;
> c = &b; ; c = &b;
**c returns the lvalue a; ***c returns the value of a. **c returns the lvalue a; ***c returns the value of a.
@@ -81,7 +82,7 @@ LINK LIBRARY
SEE ALSO SEE ALSO
address, isptr address, isptr
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -97,8 +98,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: dereference,v 29.3 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: dereference,v 29.4 2006/06/10 12:28:10 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/dereference,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/dereference,v $
## ##
## Under source code control: 1997/09/06 20:03:34 ## Under source code control: 1997/09/06 20:03:34

View File

@@ -28,11 +28,11 @@ DESCRIPTION
left of the "decimal" point; the digit d_n at position n contributes left of the "decimal" point; the digit d_n at position n contributes
additively d_n * b^n to the value of x. For example, additively d_n * b^n to the value of x. For example,
d_2 d_1 d_0 . d_-1 d_-2 ; d_2 d_1 d_0 . d_-1 d_-2
represents the number represents the number
d_2 * b^2 + d_1 * b + d0 + d_-1 * b^-1 + d_-2 * b^-2 ; d_2 * b^2 + d_1 * b + d0 + d_-1 * b^-1 + d_-2 * b^-2
The sequence of digits has to be infinite if den(x) has a prime factor The sequence of digits has to be infinite if den(x) has a prime factor
which is not a factor of the base b. In cases where the representation which is not a factor of the base b. In cases where the representation
@@ -53,30 +53,30 @@ DESCRIPTION
With base-b digits for x as explained above, the integer whose base-b With base-b digits for x as explained above, the integer whose base-b
representation is representation is
b_n+k-1 b_n_k-2 ... b_n, ; b_n+k-1 b_n_k-2 ... b_n,
i.e. the k digits with last digit b_n, is given by i.e. the k digits with last digit b_n, is given by
digit(b^-r * x, q, b^k) ; digit(b^-r * x, q, b^k)
if r and q satisfy n = q * b + r. if r and q satisfy n = q * b + r.
EXAMPLE EXAMPLE
> a = 123456.789 ; a = 123456.789
> for (n = 6; n >= -6; n++) print digit(a, n),; print ; for (n = 6; n >= -6; n++) print digit(a, n),; print
0 1 2 3 4 5 6 7 8 9 0 0 0 0 1 2 3 4 5 6 7 8 9 0 0 0
> for (n = 6; n >= -6; n--) print digit(a, n, 100),; print ; for (n = 6; n >= -6; n--) print digit(a, n, 100),; print
0 0 0 0 12 34 56 78 90 0 0 0 0 0 0 0 0 12 34 56 78 90 0 0 0 0
> for (n = 6; n >= -6; n--) print digit(a, n, 256),; print ; for (n = 6; n >= -6; n--) print digit(a, n, 256),; print
0 0 0 0 1 226 64 201 251 231 108 139 67 0 0 0 0 1 226 64 201 251 231 108 139 67
> for (n = 1; n >= -12; n++) print digit(10/7, n),; print ; for (n = 1; n >= -12; n++) print digit(10/7, n),; print
> 0 1 4 2 8 5 7 1 4 2 8 5 7 1 ; 0 1 4 2 8 5 7 1 4 2 8 5 7 1
> print digit(10/7, -7e1000, 1e6) ; print digit(10/7, -7e1000, 1e6)
428571 428571
LIMITS LIMITS
@@ -92,7 +92,7 @@ LINK LIBRARY
SEE ALSO SEE ALSO
bit bit
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -108,8 +108,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.4 $ ## @(#) $Revision: 29.5 $
## @(#) $Id: digit,v 29.4 2000/12/17 12:27:58 chongo Exp $ ## @(#) $Id: digit,v 29.5 2006/06/10 12:28:10 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/digit,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/digit,v $
## ##
## Under source code control: 1995/10/03 10:40:01 ## Under source code control: 1995/10/03 10:40:01

View File

@@ -21,7 +21,6 @@ Environment variables
The CALCBINDINGS file searches the CALCPATH as well. The CALCBINDINGS file searches the CALCPATH as well.
CALCRC CALCRC
On startup (unless -h or -q was given on the command On startup (unless -h or -q was given on the command
@@ -105,8 +104,8 @@ Environment variables
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.4 $ ## @(#) $Revision: 29.5 $
## @(#) $Id: environment,v 29.4 2006/05/07 07:22:20 chongo Exp $ ## @(#) $Id: environment,v 29.5 2006/06/10 13:01:09 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/environment,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/environment,v $
## ##
## Under source code control: 1991/07/23 05:47:25 ## Under source code control: 1991/07/23 05:47:25

View File

@@ -34,8 +34,9 @@ DESCRIPTION
EXAMPLE EXAMPLE
Assuming there is no file with name "not_a_file" Assuming there is no file with name "not_a_file"
; errno(0) ; errno(0)
; errmax(errcount()+4)
0 0
; errmax(errcount()+4)
20
; badfile = fopen("not_a_file", "r") ; badfile = fopen("not_a_file", "r")
; print errno(), error(), strerror() ; print errno(), error(), strerror()
2 System error 2 No such file or directory 2 System error 2 No such file or directory
@@ -70,8 +71,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.4 $ ## @(#) $Revision: 29.5 $
## @(#) $Id: errno,v 29.4 2006/05/21 07:31:46 chongo Exp $ ## @(#) $Id: errno,v 29.5 2006/05/23 19:15:48 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errno,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/errno,v $
## ##
## Under source code control: 1994/10/27 03:05:08 ## Under source code control: 1994/10/27 03:05:08

View File

@@ -19,17 +19,13 @@ DESCRIPTION
is returned by some function, errno() will return the value n. is returned by some function, errno() will return the value n.
EXAMPLE EXAMPLE
Note that by default, errmax() is 0 so unless errmax() is
increased you will get:
; ba = error(10009)
Error 10009 caused errcount to exceed errmax
; errmax(errcount()+1) ; errmax(errcount()+1)
0 20
; a = error(10009) ; a = error(10009)
; a ; a
Error 10009 Error 10009
; strerror(a)
"Bad argument for inverse"
LIMITS LIMITS
none none
@@ -57,8 +53,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.4 $ ## @(#) $Revision: 29.5 $
## @(#) $Id: error,v 29.4 2006/05/21 07:31:46 chongo Exp $ ## @(#) $Id: error,v 29.5 2006/05/23 19:15:48 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/error,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/error,v $
## ##
## Under source code control: 1995/12/18 03:30:59 ## Under source code control: 1995/12/18 03:30:59

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

View File

@@ -9,38 +9,48 @@ TYPES
limit integer with abs(limit) < 2^32, defaults to 2^32 - 1 limit integer with abs(limit) < 2^32, defaults to 2^32 - 1
err integer err integer
return positive integer, -1 or err return positive integer or err
DESCRIPTION DESCRIPTION
This function ignores the signs of n and limit, so here we shall
assume n and limit are both nonnegative.
If n >= 0 and n has a prime factor less than or equal to limit, If n has a prime proper factor less than or equal to limit, then
factor(n, limit) returns the smallest such factor. If n >= 0 factor(n, limit) returns the smallest such factor.
and the smallest prime factor of n exceeds limit, 1 is returned.
In particular, if n >= 0 and limit <= 1, factor(n, limit)
always returns 1; factor(n,2) returns 2 if and only if n is even.
If n < 0, -1 is returned. NOTE: A proper factor of n>1 is a factor < n. In other words,
for n>1 is not a proper factor of itself. The value 1
is a special case because 1 is a proper factor of 1.
If abs(limit) >= 2^32, factor(n, limit) causes an error, When every prime proper factor of n is greater than limit, 1 is
factor(n, limit, err) returns the value of err. returned. In particular, if limit < 2, factor(n, limit) always
returns 1. Also, factor(n,2) returns 2 if and only if n is even
and n > 2.
If 1 < n < nextprime(limit)^2, then f(n, limit) == 1 <==> n is prime.
For example, if 1 < n < 121, n is prime if and only if f(n,7) == 1.
If limit >= 2^32, factor(n, limit) causes an error and factor(n,
limit, err) returns the value of err.
EXAMPLE EXAMPLE
; print factor(35,4), factor(35,5), factor(35), factor(-35) ; print factor(35,4), factor(35,5), factor(35), factor(-35)
1 5 5 -1 1 5 5 5
; print factor(2^32 + 1), factor(2^47 - 1), factor(2^59 - 1) ; print factor(2^32 + 1), factor(2^47 - 1), factor(2^59 - 1)
641 2351 179951 641 2351 179951
LIMITS LIMITS
none limit < 2^32
LINK LIBRARY LINK LIBRARY
FLAG zfactor(ZVALUE n, ZVALUE limit, ZVALUE *res) FLAG zfactor(ZVALUE n, ZVALUE limit, ZVALUE *res)
SEE ALSO SEE ALSO
lfactor isprime, 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 ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -56,8 +66,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.5 $
## @(#) $Id: factor,v 29.3 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: factor,v 29.5 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/factor,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/factor,v $
## ##
## Under source code control: 1995/12/18 12:34:57 ## Under source code control: 1995/12/18 12:34:57

View File

@@ -35,7 +35,7 @@ EXAMPLE
file is open file is open
; err = fclose(fd); ; err = fclose(fd);
; if (isnull(err)) print "close successful"; else errno(err); ; if (isnull(err)) print "close successful"; else strerror(err);
close successful close successful
; if (!fd) print "file is closed"; ; if (!fd) print "file is closed";
@@ -51,7 +51,7 @@ SEE ALSO
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen, errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt 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 ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -67,8 +67,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: fclose,v 29.3 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: fclose,v 29.4 2006/05/23 19:15:48 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fclose,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fclose,v $
## ##
## Under source code control: 1994/10/27 03:04:16 ## Under source code control: 1994/10/27 03:04:16

View File

@@ -7,19 +7,18 @@ SYNOPSIS
TYPES TYPES
fs file stream open for reading fs file stream open for reading
return string, null or error value return string or null
DESCRIPTION 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 characters are skipped. If the reading reaches end-of-file, the
null value is returned. If non-whitespace is encountered, formation null value is returned. Otherwise the function returns the empty
of a string begins, continuing until whitespace of '\0' or end-of-file string "" if the first non-white character is '\0', and in other cases,
is reached. The returned value is this string (terminated as usual the string formed by the non-white-space characters read until '\0' or
by a null character). After the operation, the file position will a white-space character or te end of the file is reached. In the
be immediately after the first whitespace character of '\0' or at cases where the reading is stopped by '\0' or white-space character,
end-of-file. the file position will be that immediately after that character.
EXAMPLE EXAMPLE
@@ -31,7 +30,7 @@ EXAMPLE
; fgetfield(f) ; fgetfield(f)
"Beta" "Beta"
; fgetfield(f) ; fgetfield(f)
>
; freopen(f, "w") ; freopen(f, "w")
; fputstr(f, " Alpha ", "Beta") ; fputstr(f, " Alpha ", "Beta")
; freopen(f, "r") ; freopen(f, "r")
@@ -43,15 +42,15 @@ EXAMPLE
"Beta" "Beta"
LIMITS LIMITS
none - XXX - is this correct? none
LINK LIBRARY LINK LIBRARY
none - XXX - is this correct? none
SEE ALSO SEE ALSO
fgetstr, fputstr, fgets, fputs, fopen, files, fprintf fgetstr, fputstr, fgets, fputs, fopen, files, fprintf
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -67,8 +66,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.6 $
## @(#) $Id: fgetfield,v 29.3 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: fgetfield,v 29.6 2006/08/20 15:01:57 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fgetfield,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fgetfield,v $
## ##
## Under source code control: 1996/04/30 03:05:17 ## 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

@@ -36,18 +36,17 @@ EXAMPLE
"Gamma "Gamma
Delta" Delta"
; fgetstr(f) ; fgetstr(f)
>
LIMITS LIMITS
none - XXX - is this correct? none
LINK LIBRARY LINK LIBRARY
none - XXX - is this correct? none
SEE ALSO SEE ALSO
fputstr, fgetword, fgets, fputs, fopen, files, fprintf fputstr, fgetword, fgets, fputs, fopen, files, fprintf
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -63,8 +62,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.5 $
## @(#) $Id: fgetstr,v 29.3 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: fgetstr,v 29.5 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fgetstr,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fgetstr,v $
## ##
## Under source code control: 1996/04/30 03:05:17 ## Under source code control: 1996/04/30 03:05:17

View File

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

View File

@@ -59,12 +59,12 @@ Using files
function returns the numeric value of errno if there had been an function returns the numeric value of errno if there had been an
error using the file, or the null value if there was no error. error using the file, or the null value if there was no error.
The builtin 'errno' can be use to convert an errno number into The builtin 'strerror' can be use to convert an errno number into
a slightly more meaningful error message: a slightly more meaningful error message:
badfile = fopen("not_a_file", "r"); badfile = fopen("not_a_file", "r");
if (!isfile(badfile)) { if (!isfile(badfile)) {
print "error #" : badfile : ":", errno(badfile); print "error #" : badfile : ":", strerror(badfile);
} }
File values can be printed. When this is done, the filename of the File values can be printed. When this is done, the filename of the
@@ -166,7 +166,7 @@ Using files
but the output is returned as a string value instead of being but the output is returned as a string value instead of being
printed. printed.
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -182,8 +182,8 @@ Using files
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: file,v 29.2 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: file,v 29.3 2006/05/23 19:15:48 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/file,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/file,v $
## ##
## Under source code control: 1991/07/21 04:37:19 ## Under source code control: 1991/07/21 04:37:19

View File

@@ -29,16 +29,16 @@ DESCRIPTION
is assumed to be an open file opened in an unknown mode. Calc is assumed to be an open file opened in an unknown mode. Calc
will try to read and write to this file when directed. will try to read and write to this file when directed.
Consider the following commands: Consider the following commands shell commands:
$ echo "A line of text in the file on descriptor 5" > datafile echo "A line of text in the file on descriptor 5" > datafile
$ calc 5<datafile calc 5<datafile
then one could do the following: then one could do the following:
> files(5) ; files(5)
FILE 5 "descriptor[5]" (unknown_mode, pos 0) FILE 5 "descriptor[5]" (unknown_mode, pos 0)
> fgetline(files(5)) ; fgetline(files(5))
"A line of text in the file on descriptor 5" "A line of text in the file on descriptor 5"
EXAMPLE EXAMPLE
@@ -68,7 +68,7 @@ SEE ALSO
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen, errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt 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 ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -84,8 +84,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: files,v 29.3 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: files,v 29.4 2006/06/10 12:28:10 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/files,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/files,v $
## ##
## Under source code control: 1995/03/04 11:33:19 ## Under source code control: 1995/03/04 11:33:19

View File

@@ -75,7 +75,7 @@ DESCRIPTION
The truth value of an opened file is TRUE. The truth value of an opened file is TRUE.
If the open is unsuccessful, the numeric value of errno is returned. If the open is unsuccessful, the numeric value of errno is returned.
You can the errno() builtin to determine what the errno number means. You can the strerror() builtin to determine what the errno number means.
EXAMPLE EXAMPLE
; fd = fopen("/etc/motd", "r") ; fd = fopen("/etc/motd", "r")
@@ -90,9 +90,11 @@ EXAMPLE
; outfile ; outfile
FILE 4 "~/tmp/output" (writing, pos 0) FILE 4 "~/tmp/output" (writing, pos 0)
; badfile = fopen("not_a_file", "r") ; badfile = fopen("not_a_file", "r");
; if (!isfile(badfile)) print "error #" : badfile : ":", errno(badfile); ; if (!isfile(badfile)) {
error #2: No such file or directory ;; printf("error(%d): %s\n", errno(badfile), strerror(badfile));
;; }
error(2): No such file or directory
LIMITS LIMITS
none none
@@ -103,9 +105,9 @@ LINK LIBRARY
SEE ALSO SEE ALSO
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen, errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt, fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt,
fpathopen fpathopen, strerror
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -121,8 +123,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.4 $ ## @(#) $Revision: 29.6 $
## @(#) $Id: fopen,v 29.4 2006/05/07 07:18:26 chongo Exp $ ## @(#) $Id: fopen,v 29.6 2006/05/23 20:06:16 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fopen,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fopen,v $
## ##
## Under source code control: 1994/10/27 03:04:17 ## Under source code control: 1994/10/27 03:04:17

View File

@@ -165,7 +165,7 @@ EXAMPLE
FILE 7 "/home/chongo/tmp/output" (writing, pos 0) FILE 7 "/home/chongo/tmp/output" (writing, pos 0)
; badfile = fpathopen("no_such_file", "r") ; badfile = fpathopen("no_such_file", "r")
; if (!isfile(badfile)) print "error #" : badfile : ":", errno(badfile); ; if (!isfile(badfile)) print "error #" errno(badfile) : ":" : strerror(badfile);
error #2: No such file or directory error #2: No such file or directory
LIMITS LIMITS
@@ -195,8 +195,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.2 $ ## @(#) $Revision: 29.3 $
## @(#) $Id: fpathopen,v 29.2 2006/05/07 07:24:34 chongo Exp $ ## @(#) $Id: fpathopen,v 29.3 2006/05/23 19:15:48 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fpathopen,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fpathopen,v $
## ##
## Under source code control: 2006/05/07 23:56:04 ## Under source code control: 2006/05/07 23:56:04

View File

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

View File

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

View File

@@ -26,20 +26,20 @@ EXAMPLE
; fgetstr(f) ; fgetstr(f)
"Beta" "Beta"
; fgetstr(f) ; fgetstr(f)
>
; fputstr(f, "Gamma") ; fputstr(f, "Gamma")
Error 72 Error 72
LIMITS LIMITS
none - XXX - is this correct? none
LINK LIBRARY LINK LIBRARY
none - XXX - is this correct? none
SEE ALSO SEE ALSO
fgetstr, fgetfield, fgets, fputs, fopen, files, fprintf fgetstr, fgetfield, fgets, fputs, fopen, files, fprintf
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -55,8 +55,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.5 $
## @(#) $Id: fputstr,v 29.3 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: fputstr,v 29.5 2006/06/25 22:16:55 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fputstr,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fputstr,v $
## ##
## Under source code control: 1996/04/30 03:05:18 ## Under source code control: 1996/04/30 03:05:18

View File

@@ -19,7 +19,6 @@ EXAMPLE
1 2 15 1 2 15
; freeredc() ; freeredc()
; show redc ; show redc
>
LIMITS LIMITS
none none
@@ -30,7 +29,7 @@ LINK LIBRARY
SEE ALSO SEE ALSO
free, freeglobals, freestatics free, freeglobals, freestatics
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2006 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -46,8 +45,8 @@ SEE ALSO
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: freeredc,v 29.3 2006/05/07 07:25:46 chongo Exp $ ## @(#) $Id: freeredc,v 29.4 2006/06/10 12:28:10 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/freeredc,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/freeredc,v $
## ##
## Under source code control: 1997/09/06 20:03:35 ## Under source code control: 1997/09/06 20:03:35

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -51,15 +51,6 @@ following topics:
full all of the above (in the above order) full all of the above (in the above order)
You can also ask for help on a particular function name. For example,
help asinh
help round
or on a particular symbol such as:
help =
For example: For example:
help usage help usage
@@ -71,6 +62,27 @@ without invoking any startup code by running calc as follows:
where 'topic' is one of the topics listed above. where 'topic' is one of the topics listed above.
You can also ask for help on a particular builtin function name. For example:
help asinh
help round
See:
help builtin
for a list of builtin functions.
Some calc operators have their own help pages:
help =
help ->
help *
help .
help %
help //
help #
If the -m mode disallows opening files for reading or execution of programs, If the -m mode disallows opening files for reading or execution of programs,
then the help facility will be disabled. See: then the help facility will be disabled. See:
@@ -103,7 +115,7 @@ as the same effect as:
custom("help", "anything"); custom("help", "anything");
## Copyright (C) 1999 Landon Curt Noll ## Copyright (C) 1999-2007 Landon Curt Noll
## ##
## Calc is open software; you can redistribute it and/or modify it under ## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License ## the terms of the version 2.1 of the GNU Lesser General Public License
@@ -119,8 +131,8 @@ as the same effect as:
## received a copy with calc; if not, write to Free Software Foundation, Inc. ## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
## ##
## @(#) $Revision: 29.3 $ ## @(#) $Revision: 29.4 $
## @(#) $Id: help,v 29.3 2000/06/07 14:02:33 chongo Exp $ ## @(#) $Id: help,v 29.4 2007/02/07 00:30:04 chongo Exp $
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/help,v $ ## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/help,v $
## ##
## Under source code control: 1991/07/21 04:37:20 ## Under source code control: 1991/07/21 04:37:20

View File

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

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