mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
6fa83e417e | ||
|
c335809b5f | ||
|
ee99adf8ca | ||
|
87570b56fe | ||
|
afe37ec851 | ||
|
bd3086138b |
53
BUGS
53
BUGS
@@ -68,10 +68,6 @@ of a context diff patch).
|
||||
|
||||
Known bugs:
|
||||
|
||||
The stoponerror() facility does not seem to work, or perhaps
|
||||
the stoponerror help file is incorrect. The stoponerror help file
|
||||
lacks examples because of this problem.
|
||||
|
||||
We are sure some more bugs exist. When you find them, please let
|
||||
us know! See the above for details on how to report and were to
|
||||
EMail your bug reports and hopefully patches to fix them.
|
||||
@@ -114,51 +110,6 @@ Problems with old systems that have known work-a-rounds:
|
||||
to fail the regression test. The work-a-round is to compile with -O
|
||||
or to use gcc-2.96 or later.
|
||||
|
||||
This bug has been observed on the Sparc and the PowerPC machine.
|
||||
|
||||
On the PowerPC with gcc-2.95 when compiled with -O2, the following
|
||||
patch seems to help:
|
||||
|
||||
*** zfunc.c.orig Fri Feb 23 18:18:39 2001
|
||||
--- zfunc.c Fri Feb 23 18:39:33 2001
|
||||
***************
|
||||
*** 1481,1487 ****
|
||||
{
|
||||
HALF *a, *A, *b, *a0, u;
|
||||
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
|
||||
! FULL d, e, f, g, h, s, t, x, topbit;
|
||||
int remsign;
|
||||
BOOL up, onebit;
|
||||
ZVALUE sqrt;
|
||||
--- 1481,1488 ----
|
||||
{
|
||||
HALF *a, *A, *b, *a0, u;
|
||||
int i, j, j1, j2, k, k1, m, m0, m1, n, n0, o;
|
||||
! volatile FULL d;
|
||||
! FULL e, f, g, h, s, t, x, topbit;
|
||||
int remsign;
|
||||
BOOL up, onebit;
|
||||
ZVALUE sqrt;
|
||||
*** zmath.c 2000/06/07 14:02:13 29.2
|
||||
--- zmath.c 2001/03/13 19:47:03
|
||||
***************
|
||||
*** 1608,1614 ****
|
||||
void
|
||||
zbitvalue(long n, ZVALUE *res)
|
||||
{
|
||||
! ZVALUE z;
|
||||
|
||||
if (n < 0) n = 0;
|
||||
z.sign = 0;
|
||||
--- 1608,1614 ----
|
||||
void
|
||||
zbitvalue(long n, ZVALUE *res)
|
||||
{
|
||||
! volatile ZVALUE z;
|
||||
|
||||
if (n < 0) n = 0;
|
||||
z.sign = 0;
|
||||
|
||||
* There are problems compiling calc on the sparcv9 under 64 bit
|
||||
Solaris. On that platform, gcc-2.96 is able to compile calc, but
|
||||
calc dumps core very early on in startup. It is said that sparcv9
|
||||
@@ -190,8 +141,8 @@ Problems with old systems that have known work-a-rounds:
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.24 $
|
||||
## @(#) $Id: BUGS,v 29.24 2006/05/21 07:54:13 chongo Exp $
|
||||
## @(#) $Revision: 29.25 $
|
||||
## @(#) $Id: BUGS,v 29.25 2006/08/20 17:51:25 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/BUGS,v $
|
||||
##
|
||||
## Under source code control: 1994/03/18 14:06:13
|
||||
|
476
CHANGES
476
CHANGES
@@ -38,8 +38,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,
|
||||
Apple OS/X Terminal, etc.) that support them. For example:
|
||||
|
||||
read screen
|
||||
print green:"This is green. ":red:"This is red.":black
|
||||
; read screen
|
||||
; print green:"This is green. ":red:"This is red.":black
|
||||
|
||||
Fixed a bug where too many open files returned E_FOPEN3. Now
|
||||
a new error symbol F_MANYOPEN is used for too many open files.
|
||||
@@ -134,14 +134,14 @@ The following are the changes from calc version 2.12.0 to date:
|
||||
Global variables and functions must be declared ahead of time because
|
||||
the dotest scope of evaluation is a line at a time. For example:
|
||||
|
||||
read dotest.cal
|
||||
read set8700.cal
|
||||
dotest("set8700.line");
|
||||
; read dotest.cal
|
||||
; read set8700.cal
|
||||
; dotest("set8700.line");
|
||||
|
||||
Updated the todo / wish list items. The top priority now is to
|
||||
convert calc to GNU autoconf / configure to build the calc.
|
||||
|
||||
help todo
|
||||
; help todo
|
||||
|
||||
Added missing help file for the stoponerror() builtin.
|
||||
|
||||
@@ -179,6 +179,209 @@ The following are the changes from calc version 2.12.0 to date:
|
||||
no other compile errors, only the unterminated comment will stop
|
||||
completion of the function being defined.
|
||||
|
||||
Added the reading of more calc resource files to the cal/regress.cal
|
||||
regression test.
|
||||
|
||||
The 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 permits such as:
|
||||
|
||||
++*p-- ++*----*++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.
|
||||
|
||||
The provision of warnings for possibly questionable programming 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. 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
|
||||
|
||||
The config("dupvar_warn") value is TRUE by default.
|
||||
|
||||
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 carrage 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 augument 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:
|
||||
|
||||
@@ -325,6 +528,9 @@ The following are the changes from calc version 2.11.10 to 2.11.10:
|
||||
that was reported for the PowerMac G5 2GHz MacOS 10.3 by
|
||||
Guillaume VERGNAUD <vergnaud at via dot ecp dot fr>.
|
||||
|
||||
Fixed a number of pending issues with help files filling in
|
||||
missing LIMITS, LINK LIBRARY, and SEE ALSO information,
|
||||
|
||||
|
||||
The following are the changes from calc version 2.11.9 to 2.11.9.3:
|
||||
|
||||
@@ -703,7 +909,7 @@ The following are the changes from calc version 2.11.5t4.1 to 2.11.5t4.4:
|
||||
For example when forming the calc rpm, the Makefile is called with
|
||||
T=$RPM_BUILD_ROOT. If $T is empty, calc is installed under /.
|
||||
|
||||
Removed all echo_XXX rules except for echo_inst_files from lower
|
||||
Removed all echo_XYZ rules except for echo_inst_files from lower
|
||||
level makefile. The calc.spec will use a make install rule
|
||||
with T=$RPM_BUILD_ROOT.
|
||||
|
||||
@@ -1094,11 +1300,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
|
||||
by whitespace. For example:
|
||||
|
||||
> read alpha beta gamma;
|
||||
; read alpha beta gamma;
|
||||
|
||||
does essentially the same as:
|
||||
|
||||
> read alpha; read beta; read gamma;
|
||||
; read alpha; read beta; read gamma;
|
||||
|
||||
This is convenient for commands like:
|
||||
|
||||
@@ -1123,7 +1329,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.
|
||||
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,
|
||||
but in any case, will read beta.
|
||||
@@ -1131,7 +1337,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
|
||||
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".
|
||||
|
||||
@@ -1191,17 +1397,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:
|
||||
|
||||
> 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:
|
||||
|
||||
> 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
|
||||
by something like:
|
||||
|
||||
> global x
|
||||
> define f(t = x) = (x = t)^2;
|
||||
; global x
|
||||
; define f(t = x) = (x = t)^2;
|
||||
|
||||
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
|
||||
@@ -1219,11 +1425,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
|
||||
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:
|
||||
|
||||
> config("mul2", 3)
|
||||
; config("mul2", 3)
|
||||
|
||||
|
||||
The following are the changes from calc version 2.11.2t0 to 2.11.2t1.0:
|
||||
@@ -1462,9 +1668,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"
|
||||
if an estimate indicates that the result will have absolute value
|
||||
> 2^2^30 * epsilon. Otherwise the evaluation will be attempted
|
||||
but may fail due to shortage of memory or may require a long
|
||||
runtime if the result will be very large.
|
||||
that is > 2^2^30 * epsilon. Otherwise the evaluation will be
|
||||
attempted but may fail due to shortage of memory or may require
|
||||
a long runtime if the result will be very large.
|
||||
|
||||
Changes have been made to the algorithms used for some special
|
||||
functions sinh(), cosh(), tanh(), sin(), cos(), etc., that make
|
||||
@@ -2500,10 +2706,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.
|
||||
For example, supposing "abc" has not been used earlier:
|
||||
|
||||
> A = "abc"
|
||||
> links(A)
|
||||
; A = "abc"
|
||||
; links(A)
|
||||
2
|
||||
> links(A)
|
||||
; links(A)
|
||||
1
|
||||
|
||||
The two links in the first call are to A and the current "oldvalue";
|
||||
@@ -2798,11 +3004,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
|
||||
with a constant or simple variable as in
|
||||
|
||||
> 2 * 3,14159
|
||||
; 2 * 3,14159
|
||||
14159
|
||||
> a = 4; b = 5;
|
||||
> A = (a , b + 2);
|
||||
> A
|
||||
; a = 4; b = 5;
|
||||
; A = (a , b + 2);
|
||||
; A
|
||||
7
|
||||
|
||||
I have added a few lines to addop.c so that when this occurs a
|
||||
@@ -2833,27 +3039,27 @@ The following are the changes from calc version 2.10.3t5.34 to 2.10.3t5.37:
|
||||
|
||||
Here is a demo:
|
||||
|
||||
> global a;
|
||||
>
|
||||
> define f(x) {local i = x^2; a++;
|
||||
>> if (x > 5) quit "Too large!"; return i;}
|
||||
; global a;
|
||||
;
|
||||
; define f(x) {local i = x^2; a++;
|
||||
;; if (x > 5) quit "Too large!"; return i;}
|
||||
f() defined
|
||||
> define g(x) = f(x) + f(2*x);
|
||||
; define g(x) = f(x) + f(2*x);
|
||||
g() defined
|
||||
> g(2)
|
||||
; g(2)
|
||||
20
|
||||
> g(3)
|
||||
; g(3)
|
||||
Too large!
|
||||
"f": line 3
|
||||
"g": line 0
|
||||
"*": line 6
|
||||
> eval("g(3)")
|
||||
; eval("g(3)")
|
||||
Too large!
|
||||
"f": line 3
|
||||
"g": line 0
|
||||
"**": line 1
|
||||
"*": line 7
|
||||
> a
|
||||
; a
|
||||
6
|
||||
|
||||
(32) I've made several small changes like removing
|
||||
@@ -2899,14 +3105,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
|
||||
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
|
||||
> global a = 1, b = 2;
|
||||
> L = list(&a, &b);
|
||||
> print s(L)
|
||||
; global a = 1, b = 2;
|
||||
; L = list(&a, &b);
|
||||
; print s(L)
|
||||
3
|
||||
> b = 3;
|
||||
> print s(L)
|
||||
; b = 3;
|
||||
; print s(L)
|
||||
4
|
||||
|
||||
Octet-pointers, number-pointers, and string-pointers in
|
||||
@@ -2918,11 +3124,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
|
||||
C operations. For example:
|
||||
|
||||
> A = mat[4];
|
||||
> p = &A[0];
|
||||
> *(p+2) == A[2]
|
||||
> ++p
|
||||
> *p == A[1]
|
||||
; A = mat[4];
|
||||
; p = &A[0];
|
||||
; *(p+2) == A[2]
|
||||
; ++p
|
||||
; *p == A[1]
|
||||
|
||||
There is at present no protection against "illegal" use of &
|
||||
and *, e.g. if one attempts here to assign a value to *(p+5),
|
||||
@@ -2935,28 +3141,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.
|
||||
|
||||
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
|
||||
V_XYZ #define (see the top of value.h) of the value to which
|
||||
p points.
|
||||
and >0 if it is a pointer. The value of isptr(p) comes from
|
||||
the V_XYZ #define (see the top of value.h) of the value to
|
||||
which p points.
|
||||
|
||||
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
|
||||
time being I have replaced it by the back-quote `. For example:
|
||||
|
||||
> global a
|
||||
> define f(a,b) = a = b
|
||||
> f(&a,5)
|
||||
> print a
|
||||
; global a
|
||||
; define f(a,b) = a = b
|
||||
; f(&a,5)
|
||||
; print a
|
||||
0
|
||||
> f(`a,5)
|
||||
> print a
|
||||
; f(`a,5)
|
||||
; print a
|
||||
5
|
||||
|
||||
However, one may use & in a similar way as in:
|
||||
|
||||
> define g(a,b) = *a = b
|
||||
> g(&a, 7)
|
||||
> print a
|
||||
; define g(a,b) = *a = b
|
||||
; g(&a, 7)
|
||||
; print a
|
||||
7
|
||||
|
||||
There is no hashvalue for pointers. Thus, like error values,
|
||||
@@ -2964,38 +3170,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:
|
||||
|
||||
> obj xy {x,y}
|
||||
> obj uvw {u, v, w}
|
||||
> obj xy A = {1,2}
|
||||
> obj uvw B = {3,4,5}
|
||||
> p = &A
|
||||
> q = &B
|
||||
> p->x
|
||||
; obj xy {x,y}
|
||||
; obj uvw {u, v, w}
|
||||
; obj xy A = {1,2}
|
||||
; obj uvw B = {3,4,5}
|
||||
; p = &A
|
||||
; q = &B
|
||||
; p->x
|
||||
1
|
||||
> p->y = 6
|
||||
> A
|
||||
; p->y = 6
|
||||
; A
|
||||
obj xy {1, 6}
|
||||
> q -> u
|
||||
; q -> u
|
||||
3
|
||||
> p->y = q
|
||||
> A
|
||||
; p->y = q
|
||||
; A
|
||||
obj xy {1, v-ptr: 1400474c0}
|
||||
> p->y->u
|
||||
; p->y->u
|
||||
3
|
||||
> p->y->u = 7
|
||||
> B
|
||||
; p->y->u = 7
|
||||
; B
|
||||
obj uvw {7, 4, 5}
|
||||
> p -> y = p
|
||||
> A
|
||||
; p -> y = p
|
||||
; A
|
||||
obj xy {1, v-ptr: 140047490}
|
||||
> p -> y -> x
|
||||
; p -> y -> x
|
||||
1
|
||||
> p->y->y
|
||||
; p->y->y
|
||||
v-ptr: 140047490
|
||||
> p->y->y-> x
|
||||
; p->y->y-> x
|
||||
1
|
||||
> p->y->y->x = 8
|
||||
> A
|
||||
; p->y->y->x = 8
|
||||
; A
|
||||
obj xy {8, v-ptr: 140047490}
|
||||
|
||||
|
||||
@@ -3023,14 +3229,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
|
||||
to leakage. After:
|
||||
|
||||
> define f(x) = 27 + x;
|
||||
> a = 27;
|
||||
; define f(x) = 27 + x;
|
||||
; a = 27;
|
||||
|
||||
It is of course necessary for the constant 27 to be stored, but
|
||||
if one now redefines f and a by:
|
||||
|
||||
> define f(x) = 45 + x;
|
||||
> a = 45;
|
||||
; define f(x) = 45 + x;
|
||||
; a = 45;
|
||||
|
||||
There seems little point in retaining 27 as a constant and
|
||||
therefore using up memory. If this example seems trivial,
|
||||
@@ -3112,16 +3318,16 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
|
||||
|
||||
The "." value:
|
||||
|
||||
> 2 + 2
|
||||
; 2 + 2
|
||||
4
|
||||
> .
|
||||
; .
|
||||
4
|
||||
|
||||
can now be treated as an unnamed variable. For example:
|
||||
|
||||
> mat x[3,3]={1,2,3,4,5,6,7,8,9}
|
||||
> x
|
||||
> print .[1,2]
|
||||
; mat x[3,3]={1,2,3,4,5,6,7,8,9}
|
||||
; x
|
||||
; print .[1,2]
|
||||
6
|
||||
|
||||
(9) for a list L defining L[i] to be same as L[[i]]
|
||||
@@ -3158,18 +3364,18 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
|
||||
|
||||
For example:
|
||||
|
||||
> A = list(1,2,4);
|
||||
> B = mat[2,2] = {5,6,7,8};
|
||||
> define f(x) = (x ? A : B)[[1]];
|
||||
> print f(1), f(0)
|
||||
; A = list(1,2,4);
|
||||
; B = mat[2,2] = {5,6,7,8};
|
||||
; define f(x) = (x ? A : B)[[1]];
|
||||
; print f(1), f(0)
|
||||
2 6
|
||||
|
||||
> obj xy {x,y}
|
||||
> C = obj xy = {4,5}
|
||||
> p = &C
|
||||
> *p.x
|
||||
; obj xy {x,y}
|
||||
; C = obj xy = {4,5}
|
||||
; p = &C
|
||||
; *p.x
|
||||
Not indexing matrix or object
|
||||
> (*p).x
|
||||
; (*p).x
|
||||
4
|
||||
|
||||
(14) swap(a,b) now permits swapping of octets in the same or different
|
||||
@@ -3177,10 +3383,10 @@ The following are the changes from calc version 2.10.3t5.28 to 2.10.3t5.33:
|
||||
|
||||
For example:
|
||||
|
||||
> A = blk() = {1,2,3}
|
||||
> B = blk() = {4,5,6}
|
||||
> swap(A[0], B[2])
|
||||
> A
|
||||
; A = blk() = {1,2,3}
|
||||
; B = blk() = {4,5,6}
|
||||
; swap(A[0], B[2])
|
||||
; A
|
||||
chunksize = 256, maxsize = 256, datalen = 3
|
||||
060203
|
||||
|
||||
@@ -3316,12 +3522,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:
|
||||
|
||||
> f = fopen("help/full", "r")
|
||||
> B = blk()
|
||||
> B
|
||||
; f = fopen("help/full", "r")
|
||||
; B = blk()
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 0
|
||||
> copy(B, f)
|
||||
> B
|
||||
; copy(B, f)
|
||||
; B
|
||||
chunksize = 256, maxsize = 310272, datalen = 310084
|
||||
2a2a2a2a2a2a2a2a2a2a2a2a2a0a2a20696e74726f0a2a2a2a2a2a2a2a2a...
|
||||
|
||||
@@ -4241,11 +4447,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
|
||||
same name in several "static" areas as in:
|
||||
|
||||
> static a = 10;
|
||||
> define f(x) = a + x;
|
||||
> static a = 20;
|
||||
> define g(x) = a + x;
|
||||
> global a;
|
||||
; static a = 10;
|
||||
; define f(x) = a + x;
|
||||
; static a = 20;
|
||||
; define g(x) = a + x;
|
||||
; global a;
|
||||
|
||||
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
|
||||
@@ -4254,10 +4460,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
|
||||
with the normal use of static variables as in:
|
||||
|
||||
> static a = 10;
|
||||
> define f(x) {static a = 20; return a++ + x;}
|
||||
> define g(x) = a + x;
|
||||
> global a;
|
||||
; static a = 10;
|
||||
; define f(x) {static a = 20; return a++ + x;}
|
||||
; define g(x) = a + x;
|
||||
; global a;
|
||||
|
||||
The scope of the first "a" is temporarily interrupted by the
|
||||
"static a" in the second line; the second "a" remains active
|
||||
@@ -4273,12 +4479,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
|
||||
the changes I introduce are such that after:
|
||||
|
||||
> global a = 10;
|
||||
> define f(x) = a + x;
|
||||
> static a = 20;
|
||||
> define g(x) = a + x;
|
||||
> define h(x) {global a = 30; return a + x;}
|
||||
> define i(x) = a + x;
|
||||
; global a = 10;
|
||||
; define f(x) = a + x;
|
||||
; static a = 20;
|
||||
; define g(x) = a + x;
|
||||
; define h(x) {global a = 30; return a + x;}
|
||||
; define i(x) = a + x;
|
||||
|
||||
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
|
||||
@@ -4425,8 +4631,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:
|
||||
|
||||
> define demo() {local f = open("foo", "w"); show files; fclose(f);}
|
||||
> demo()
|
||||
; define demo() {local f = open("foo", "w"); show files; fclose(f);}
|
||||
; demo()
|
||||
|
||||
Added a new trace option for display of links to real and complex
|
||||
numbers. This is activated by config("trace", 4). The printing of
|
||||
@@ -4905,13 +5111,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:
|
||||
|
||||
> define g() = (param(2) = param(1));
|
||||
> define h() = (param(1)++, param(2)--);
|
||||
> u = 5
|
||||
> v = 10
|
||||
> print g(u, &v), u, v;
|
||||
; define g() = (param(2) = param(1));
|
||||
; define h() = (param(1)++, param(2)--);
|
||||
; u = 5
|
||||
; v = 10
|
||||
; print g(u, &v), u, v;
|
||||
5 5 5
|
||||
> print h(&u, &v), u, v;
|
||||
; print h(&u, &v), u, v;
|
||||
5 6 4
|
||||
|
||||
Missing args now evaluate to null as in:
|
||||
@@ -5272,9 +5478,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)
|
||||
[Type "exit" to exit, or "help" for help.]
|
||||
|
||||
> files(5)
|
||||
; files(5)
|
||||
FILE 5 "descriptor[5]" (unknown_mode, pos 0)
|
||||
> fgetline(files(5))
|
||||
; fgetline(files(5))
|
||||
"A line of text in the file on descriptor 5"
|
||||
|
||||
The -m mode flag now controls calc's ability to open files
|
||||
@@ -5996,8 +6202,8 @@ Following is a list of visible changes to calc from version 1.24.7 to 1.26.1:
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.78 $
|
||||
## @(#) $Id: CHANGES,v 29.78 2006/06/03 22:52:39 chongo Exp $
|
||||
## @(#) $Revision: 29.86 $
|
||||
## @(#) $Id: CHANGES,v 29.86 2006/08/20 16:18:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/RCS/CHANGES,v $
|
||||
##
|
||||
## Under source code control: 1993/06/02 18:12:57
|
||||
|
98
Makefile
98
Makefile
@@ -32,8 +32,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
MAKEFILE_REV= $$Revision: 29.75 $$
|
||||
# @(#) $Id: Makefile.ship,v 29.75 2006/05/19 13:54:05 chongo Exp $
|
||||
MAKEFILE_REV= $$Revision: 29.76 $$
|
||||
# @(#) $Id: Makefile.ship,v 29.76 2006/06/26 05:46:06 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/Makefile.ship,v $
|
||||
#
|
||||
# Under source code control: 1990/02/15 01:48:41
|
||||
@@ -3543,6 +3543,10 @@ clobber:
|
||||
-rm -rf win32
|
||||
${V} echo '=-=-=-=-= end of $@ rule =-=-=-=-='
|
||||
|
||||
# install everything
|
||||
#
|
||||
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||
#
|
||||
install: calc libcalc.a ${LIB_H_SRC} ${BUILD_H_SRC} calc.1
|
||||
${V} echo '=-=-=-=-= start of $@ rule =-=-=-=-='
|
||||
-${Q}if [ ! -z "$T" ]; then \
|
||||
@@ -3744,6 +3748,96 @@ install: calc libcalc.a ${LIB_H_SRC} ${BUILD_H_SRC} calc.1
|
||||
fi
|
||||
${V} echo '=-=-=-=-= end of $@ rule =-=-=-=-='
|
||||
|
||||
# Try to remove everything that was installed
|
||||
#
|
||||
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||
#
|
||||
uninstall:
|
||||
${V} echo '=-=-=-=-= start of $@ rule =-=-=-=-='
|
||||
-${Q}if [ -z "${CATDIR}" ]; then \
|
||||
true; \
|
||||
else \
|
||||
if [ -f "$T${CATDIR}/calc.${CATEXT}" ]; then \
|
||||
rm -f "$T${CATDIR}/calc.${CATEXT}"; \
|
||||
if [ -f "$T${CATDIR}/calc.${CATEXT}" ]; then \
|
||||
echo "cannot uninstall $T${CATDIR}/calc.${CATEXT}"; \
|
||||
else \
|
||||
echo "uninstalled $T${CATDIR}/calc.${CATEXT}"; \
|
||||
fi; \
|
||||
fi; \
|
||||
fi
|
||||
-${Q}if [ -z "${MANDIR}" ]; then \
|
||||
true; \
|
||||
else \
|
||||
if [ -f "$T${MANDIR}/calc.${MANEXT}" ]; then \
|
||||
rm -f "$T${MANDIR}/calc.${MANEXT}"; \
|
||||
if [ -f "$T${MANDIR}/calc.${MANEXT}" ]; then \
|
||||
echo "cannot uninstall $T${MANDIR}/calc.${MANEXT}"; \
|
||||
else \
|
||||
echo "uninstalled $T${MANDIR}/calc.${MANEXT}"; \
|
||||
fi; \
|
||||
fi; \
|
||||
fi
|
||||
-${Q}for i in ${BUILD_H_SRC} ${LIB_H_SRC} /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
if [ -f "$T${CALC_INCDIR}/$$i" ]; then \
|
||||
rm -f "$T${CALC_INCDIR}/$$i"; \
|
||||
if [ -f "$T${CALC_INCDIR}/$$i" ]; then \
|
||||
echo "cannot uninstall $T${CALC_INCDIR}/$$i"; \
|
||||
else \
|
||||
echo "uninstalled $T${CALC_INCDIR}/$$i"; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
-${Q}if [ -f "$T${LIBDIR}/libcalc.a" ]; then \
|
||||
rm -f "$T${LIBDIR}/libcalc.a"; \
|
||||
if [ -f "$T${LIBDIR}/libcalc.a" ]; then \
|
||||
echo "cannot uninstall $T${LIBDIR}/libcalc.a"; \
|
||||
else \
|
||||
echo "uninstalled $T${LIBDIR}/libcalc.a"; \
|
||||
fi; \
|
||||
fi
|
||||
${V} echo '=-=-=-=-= Invoking $@ rule for cscript =-=-=-=-='
|
||||
${Q}cd cscript; ${MAKE} -f Makefile ${CSCRIPT_PASSDOWN} uninstall
|
||||
${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-='
|
||||
${V} echo '=-=-=-=-= Invoking $@ rule for sample =-=-=-=-='
|
||||
${Q}cd sample; ${MAKE} -f Makefile ${SAMPLE_PASSDOWN} uninstall
|
||||
${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-='
|
||||
${V} echo '=-=-=-=-= Invoking $@ rule for custom =-=-=-=-='
|
||||
${Q}cd custom; ${MAKE} -f Makefile ${CUSTOM_PASSDOWN} uninstall
|
||||
${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-='
|
||||
${V} echo '=-=-=-=-= Invoking $@ rule for cal =-=-=-=-='
|
||||
${Q}cd cal; ${MAKE} -f Makefile ${CAL_PASSDOWN} uninstall
|
||||
${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-='
|
||||
${V} echo '=-=-=-=-= Invoking $@ rule for help =-=-=-=-='
|
||||
${Q}cd help; ${MAKE} -f Makefile ${HELP_PASSDOWN} uninstall
|
||||
${V} echo '=-=-=-=-= Back to the main Makefile for $@ rule =-=-=-=-='
|
||||
-${Q}if [ -f "$T${BINDIR}/calc${EXT}" ]; then \
|
||||
rm -f "$T${BINDIR}/calc${EXT}"; \
|
||||
if [ -f "$T${BINDIR}/calc${EXT}" ]; then \
|
||||
echo "cannot uninstall $T${BINDIR}/calc${EXT}"; \
|
||||
else \
|
||||
echo "uninstalled $T${BINDIR}/calc${EXT}"; \
|
||||
fi; \
|
||||
fi
|
||||
-${Q}for i in ${CATDIR} ${MANDIR} ${SCRIPTDIR} \
|
||||
${CUSTOMINCDIR} ${CUSTOMHELPDIR} ${CUSTOMCALDIR} \
|
||||
${CALC_INCDIR} ${LIBDIR} ${INCDIR} ${BINDIR}; do \
|
||||
if [ -d "$T$$i" ]; then \
|
||||
rmdir "$T$$i" 2>/dev/null; \
|
||||
echo "cleaned up $T$$i"; \
|
||||
fi; \
|
||||
done
|
||||
-${Q}if [ ! -z "$T" ]; then \
|
||||
if [ -d "$T" ]; then \
|
||||
rmdir "$T" 2>/dev/null; \
|
||||
echo "cleaned up $T"; \
|
||||
fi; \
|
||||
fi
|
||||
${V} echo '=-=-=-=-= end of $@ rule =-=-=-=-='
|
||||
|
||||
# splint - A tool for statically checking C programs
|
||||
#
|
||||
splint: #hsrc
|
||||
|
15
addop.c
15
addop.c
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.12 $
|
||||
* @(#) $Id: addop.c,v 29.12 2006/06/03 22:47:28 chongo Exp $
|
||||
* @(#) $Revision: 29.13 $
|
||||
* @(#) $Id: addop.c,v 29.13 2006/06/20 10:28:06 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/addop.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:10
|
||||
@@ -280,13 +280,13 @@ rmuserfunc(char *name)
|
||||
|
||||
index = findstr(&funcnames, name);
|
||||
if (index < 0) {
|
||||
errorcount--;
|
||||
scanerror(T_NULL,
|
||||
"Attempt to undefine an undefined function\n\t\"%s\"", name);
|
||||
warning("No function named \"%s\" to be undefined", name);
|
||||
return;
|
||||
}
|
||||
if (functions[index] == NULL)
|
||||
if (functions[index] == NULL) {
|
||||
warning("No defined function \"%s\" to be undefined", name);
|
||||
return;
|
||||
}
|
||||
freenumbers(functions[index]);
|
||||
free(functions[index]);
|
||||
if ((inputisterminal() && conf->resource_debug & RSCDBG_STDIN_FUNC) ||
|
||||
@@ -527,8 +527,7 @@ addop(long op)
|
||||
fp->f_opcodecount -= diff;
|
||||
oldop = OP_NOP;
|
||||
oldoldop = OP_NOP;
|
||||
errorcount--;
|
||||
scanerror(T_NULL, "Constant before comma operator");
|
||||
warning("Constant before comma operator");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
35
cal/Makefile
35
cal/Makefile
@@ -18,8 +18,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.18 $
|
||||
# @(#) $Id: Makefile,v 29.18 2006/05/20 19:32:40 chongo Exp $
|
||||
# @(#) $Revision: 29.21 $
|
||||
# @(#) $Id: Makefile,v 29.21 2006/06/26 05:46:06 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/Makefile,v $
|
||||
#
|
||||
# Under source code control: 1991/07/21 05:00:54
|
||||
@@ -177,7 +177,7 @@ CALC_FILES= README bigprime.cal deg.cal ellip.cal lucas.cal lucas_chk.cal \
|
||||
beer.cal hello.cal test5100.cal test5200.cal randombitrun.cal \
|
||||
randomrun.cal repeat.cal xx_print.cal natnumset.cal qtime.cal \
|
||||
test8400.cal test8500.cal test8600.cal chi.cal intfile.cal screen.cal \
|
||||
dotest.cal set8700.cal set8700.line
|
||||
dotest.cal set8700.cal set8700.line alg_config.cal sumtimes.cal
|
||||
|
||||
# These files are found (but not built) in the distribution
|
||||
#
|
||||
@@ -249,6 +249,10 @@ clean:
|
||||
clobber:
|
||||
rm -f .all
|
||||
|
||||
# install everything
|
||||
#
|
||||
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||
#
|
||||
install: all
|
||||
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \
|
||||
echo mkdir $T${CALC_SHAREDIR}; \
|
||||
@@ -276,3 +280,28 @@ install: all
|
||||
echo "installed $T${CALC_SHAREDIR}/$$i"; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
# Try to remove everything that was installed
|
||||
#
|
||||
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||
#
|
||||
uninstall:
|
||||
-${Q}for i in ${CALC_FILES} /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
if [ -f "$T${CALC_SHAREDIR}/$$i" ]; then \
|
||||
rm -f "$T${CALC_SHAREDIR}/$$i"; \
|
||||
if [ -f "$T${CALC_SHAREDIR}/$$i" ]; then \
|
||||
echo "cannot uninstall $T${CALC_SHAREDIR}/$$i"; \
|
||||
else \
|
||||
echo "uninstalled $T${CALC_SHAREDIR}/$$i"; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
-${Q}for i in ${CALC_SHAREDIR}; do \
|
||||
if [ -d "$T$$i" ]; then \
|
||||
rmdir "$T$$i" 2>/dev/null; \
|
||||
echo "cleaned up $T$$i"; \
|
||||
fi; \
|
||||
done
|
||||
|
93
cal/README
93
cal/README
@@ -75,7 +75,7 @@ have meanings are as follows:
|
||||
is displayed.
|
||||
|
||||
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
|
||||
to output additional debugging information.
|
||||
@@ -103,7 +103,7 @@ either of the bottom 2 bits set:
|
||||
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")
|
||||
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
|
||||
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
|
||||
|
||||
Calc's contribution to the 99 Bottles of Beer web page:
|
||||
|
||||
http://www.ionet.net/~timtroyr/funhouse/beer.html#calc
|
||||
|
||||
NOTE: This resource produces a lot of output. :-)
|
||||
|
||||
|
||||
bernoulli.cal
|
||||
|
||||
@@ -132,7 +188,7 @@ bernoulli.cal
|
||||
|
||||
NOTE: There is now a bernoulli() builtin function. This file is
|
||||
left here for backward compatibility and now simply returns
|
||||
the buildin function.
|
||||
the builtin function.
|
||||
|
||||
|
||||
bigprime.cal
|
||||
@@ -153,9 +209,9 @@ chi.cal
|
||||
|
||||
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
|
||||
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.
|
||||
|
||||
@@ -226,6 +282,8 @@ hello.cal
|
||||
http://www.latech.edu/~acm/HelloWorld.shtml
|
||||
http://www.latech.edu/~acm/helloworld/calc.html
|
||||
|
||||
NOTE: This resource produces a lot of output. :-)
|
||||
|
||||
|
||||
intfile.cal
|
||||
|
||||
@@ -643,6 +701,27 @@ sumsq.cal
|
||||
4N+1, and always impossible for primes of the form 4N-1.
|
||||
|
||||
|
||||
sumtimes.cal
|
||||
|
||||
timematsum(N)
|
||||
timelistsum(N)
|
||||
timematsort(N)
|
||||
timelistsort(N)
|
||||
timematreverse(N)
|
||||
timelistreverse(N)
|
||||
timematssq(N)
|
||||
timelistssq(N)
|
||||
timehmean(N,M)
|
||||
doalltimes(N)
|
||||
|
||||
Give the runtimes for various ways of evaluating sums, sums of
|
||||
squares, etc, for large lists and matrices. N is the size of
|
||||
the list or matrix to use. The doalltimes() function will run
|
||||
all fo the sumtimes tests. For example:
|
||||
|
||||
doalltimes(1e6);
|
||||
|
||||
|
||||
surd.cal
|
||||
|
||||
surd(a, b)
|
||||
@@ -935,8 +1014,8 @@ xx_print.cal
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.12 $
|
||||
## @(#) $Id: README,v 29.12 2006/05/21 04:41:09 chongo Exp $
|
||||
## @(#) $Revision: 29.15 $
|
||||
## @(#) $Id: README,v 29.15 2006/06/23 00:34:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/README,v $
|
||||
##
|
||||
## Under source code control: 1990/02/15 01:50:32
|
||||
|
1253
cal/alg_config.cal
Normal file
1253
cal/alg_config.cal
Normal file
File diff suppressed because it is too large
Load Diff
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: ellip.cal,v 29.3 2006/03/07 22:16:25 chongo Exp $
|
||||
* @(#) $Revision: 29.4 $
|
||||
* @(#) $Id: ellip.cal,v 29.4 2006/06/20 09:29:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/ellip.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:33
|
||||
@@ -28,16 +28,17 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Attempt to factor numbers using elliptic functions.
|
||||
* y^2 = x^3 + a*x + b (mod N).
|
||||
* Attempt to factor numbers using elliptic functions:
|
||||
*
|
||||
* Many points (x,y) (mod N) are found that solve the above equation,
|
||||
* y^2 = x^3 + a*x + b (mod ellip_N).
|
||||
*
|
||||
* Many points (x,y) (mod ellip_N) are found that solve the above equation,
|
||||
* starting from a trivial solution and 'multiplying' that point together
|
||||
* to generate high powers of the point, looking for such a point whose
|
||||
* order contains a common factor with N. The order of the group of points
|
||||
* varies almost randomly within a certain interval for each choice of a
|
||||
* and b, and thus each choice provides an independent opportunity to
|
||||
* factor N. To generate a trivial solution, a is chosen and then b is
|
||||
* order contains a common factor with ellip_N. The order of the group of
|
||||
* points varies almost randomly within a certain interval for each choice of
|
||||
* a and b, and thus each choice provides an independent opportunity to
|
||||
* factor ellip_N. To generate a trivial solution, a is chosen and then b is
|
||||
* selected so that (1,1) is a solution. The multiplication is done using
|
||||
* the basic fact that the equation is a cubic, and so if a line hits the
|
||||
* curve in two rational points, then the third intersection point must
|
||||
@@ -45,9 +46,9 @@
|
||||
* the number of rational solutions can be made very large. When modular
|
||||
* arithmetic is used, solving for the third point requires the taking of a
|
||||
* modular inverse (instead of division), and if this fails, then the GCD
|
||||
* of the failing value and N provides a factor of N. This description is
|
||||
* only an approximation, read "A Course in Number Theory and Cryptography"
|
||||
* by Neal Koblitz for a good explanation.
|
||||
* of the failing value and ellip_N provides a factor of ellip_N.
|
||||
* This description is only an approximation, read "A Course in Number
|
||||
* Theory and Cryptography" by Neal Koblitz for a good explanation.
|
||||
*
|
||||
* efactor(iN, ia, B, force)
|
||||
* iN is the number to be factored.
|
||||
@@ -81,15 +82,15 @@
|
||||
*
|
||||
* If a factor is found, it is returned and is also saved in the global
|
||||
* variable f. The number being factored is also saved in the global
|
||||
* variable N.
|
||||
* variable ellip_N.
|
||||
*/
|
||||
|
||||
|
||||
obj point {x, y};
|
||||
global N; /* number to factor */
|
||||
global a; /* first coefficient */
|
||||
global b; /* second coefficient */
|
||||
global f; /* found factor */
|
||||
global ellip_N; /* number to factor */
|
||||
global ellip_a; /* first coefficient */
|
||||
global ellip_b; /* second coefficient */
|
||||
global ellip_f; /* found factor */
|
||||
|
||||
|
||||
define efactor(iN, ia, B, force)
|
||||
@@ -103,28 +104,28 @@ define efactor(iN, ia, B, force)
|
||||
if (isnull(ia))
|
||||
ia = 1;
|
||||
obj point x;
|
||||
a = ia;
|
||||
b = -ia;
|
||||
N = iN;
|
||||
C = isqrt(N);
|
||||
ellip_a = ia;
|
||||
ellip_b = -ia;
|
||||
ellip_N = iN;
|
||||
C = isqrt(ellip_N);
|
||||
C = 2 * C + 2 * isqrt(C) + 1;
|
||||
f = 0;
|
||||
while (f == 0) {
|
||||
print "A =", a;
|
||||
ellip_f = 0;
|
||||
while (ellip_f == 0) {
|
||||
print "A =", ellip_a;
|
||||
x.x = 1;
|
||||
x.y = 1;
|
||||
print 2, x;
|
||||
x = x ^ (2 ^ (highbit(C) + 1));
|
||||
for (p = 3; ((p < B) && (f == 0)); p += 2) {
|
||||
for (p = 3; ((p < B) && (ellip_f == 0)); p += 2) {
|
||||
if (!ptest(p, 1))
|
||||
continue;
|
||||
print p, x;
|
||||
x = x ^ (p ^ ((highbit(C) // highbit(p)) + 1));
|
||||
}
|
||||
a++;
|
||||
b--;
|
||||
ellip_a++;
|
||||
ellip_b--;
|
||||
}
|
||||
return f;
|
||||
return ellip_f;
|
||||
}
|
||||
|
||||
|
||||
@@ -143,16 +144,16 @@ define point_mul(p1, p2)
|
||||
if (p1 == p2)
|
||||
return point_square(`p1);
|
||||
obj point r;
|
||||
m = (minv(p2.x - p1.x, N) * (p2.y - p1.y)) % N;
|
||||
m = (minv(p2.x - p1.x, ellip_N) * (p2.y - p1.y)) % ellip_N;
|
||||
if (m == 0) {
|
||||
if (f == 0)
|
||||
f = gcd(p2.x - p1.x, N);
|
||||
if (ellip_f == 0)
|
||||
ellip_f = gcd(p2.x - p1.x, ellip_N);
|
||||
r.x = 1;
|
||||
r.y = 1;
|
||||
return r;
|
||||
}
|
||||
r.x = (m^2 - p1.x - p2.x) % N;
|
||||
r.y = ((m * (p1.x - r.x)) - p1.y) % N;
|
||||
r.x = (m^2 - p1.x - p2.x) % ellip_N;
|
||||
r.y = ((m * (p1.x - r.x)) - p1.y) % ellip_N;
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -162,16 +163,16 @@ define point_square(p)
|
||||
local r, m;
|
||||
|
||||
obj point r;
|
||||
m = ((3 * p.x^2 + a) * minv(p.y << 1, N)) % N;
|
||||
m = ((3 * p.x^2 + ellip_a) * minv(p.y << 1, ellip_N)) % ellip_N;
|
||||
if (m == 0) {
|
||||
if (f == 0)
|
||||
f = gcd(p.y << 1, N);
|
||||
if (ellip_f == 0)
|
||||
ellip_f = gcd(p.y << 1, ellip_N);
|
||||
r.x = 1;
|
||||
r.y = 1;
|
||||
return r;
|
||||
}
|
||||
r.x = (m^2 - p.x - p.x) % N;
|
||||
r.y = ((m * (p.x - r.x)) - p.y) % N;
|
||||
r.x = (m^2 - p.x - p.x) % ellip_N;
|
||||
r.y = ((m * (p.x - r.x)) - p.y) % ellip_N;
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -184,7 +185,7 @@ define point_pow(p, pow)
|
||||
if (isodd(pow))
|
||||
r = p;
|
||||
t = p;
|
||||
for (bit = 2; ((bit <= pow) && (f == 0)); bit <<= 1) {
|
||||
for (bit = 2; ((bit <= pow) && (ellip_f == 0)); bit <<= 1) {
|
||||
t = point_square(`t);
|
||||
if (bit & pow)
|
||||
r = point_mul(`t, `r);
|
||||
|
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: prompt.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: prompt.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/prompt.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/12/18 04:43:25
|
||||
@@ -101,7 +101,7 @@ define adder() {
|
||||
}
|
||||
}
|
||||
|
||||
global x;
|
||||
global prompt_x;
|
||||
|
||||
define showvalues(str) {
|
||||
local s;
|
||||
@@ -109,8 +109,8 @@ define showvalues(str) {
|
||||
s = prompt("? ");
|
||||
if (s == "end")
|
||||
break;
|
||||
x = eval(s);
|
||||
if (!isnum(x)) {
|
||||
prompt_x = eval(s);
|
||||
if (!isnum(prompt_x)) {
|
||||
print "Please enter a number";
|
||||
continue;
|
||||
}
|
||||
|
254
cal/regress.cal
254
cal/regress.cal
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.26 $
|
||||
* @(#) $Id: regress.cal,v 29.26 2006/06/02 09:49:13 chongo Exp $
|
||||
* @(#) $Revision: 29.35 $
|
||||
* @(#) $Id: regress.cal,v 29.35 2006/08/20 16:16:11 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/regress.cal,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:50:36
|
||||
@@ -201,7 +201,6 @@ define test_variables()
|
||||
local x1, x2, x3;
|
||||
global g1, g2;
|
||||
local t;
|
||||
global globalvar;
|
||||
local x;
|
||||
|
||||
print '350: Beginning test_variables';
|
||||
@@ -404,14 +403,14 @@ define test_config()
|
||||
'512: config("trace") == 0');
|
||||
vrfy(config("maxprint") == 16,
|
||||
'513: config("maxprint") == 16');
|
||||
vrfy(config("mul2") == 20,
|
||||
'514: config("mul2") == 20');
|
||||
vrfy(config("sq2") == 20,
|
||||
'515: config("sq2") == 20');
|
||||
vrfy(config("pow2") == 40,
|
||||
'516: config("pow2") == 40');
|
||||
vrfy(config("redc2") == 50,
|
||||
'517: config("redc2") == 50');
|
||||
vrfy(config("mul2") == 1780,
|
||||
'514: config("mul2") == 1780');
|
||||
vrfy(config("sq2") == 3388,
|
||||
'515: config("sq2") == 3388');
|
||||
vrfy(config("pow2") == 176,
|
||||
'516: config("pow2") == 176');
|
||||
vrfy(config("redc2") == 220,
|
||||
'517: config("redc2") == 220');
|
||||
vrfy(config("tilde"),
|
||||
'518: config("tilde")');
|
||||
vrfy(config("tab"),
|
||||
@@ -744,6 +743,7 @@ define test_functions()
|
||||
local pi;
|
||||
local h, n, r, m, v;
|
||||
local n2, m2, v2;
|
||||
local t;
|
||||
|
||||
print '700: Beginning test_functions';
|
||||
|
||||
@@ -1317,7 +1317,65 @@ define test_functions()
|
||||
*/
|
||||
vrfy(isstr(calcpath()), '1155: isstr(calcpath())');
|
||||
|
||||
print '1156: Ending test_functions';
|
||||
/*
|
||||
* ssq use of lists
|
||||
*/
|
||||
vrfy(ssq(1,2, list(3,4,list(5,6)), list(), 7, 8) == 204,
|
||||
'1156: ssq(1,2, list(3,4,list(5,6)), list(), 7, 8) == 204');
|
||||
|
||||
/*
|
||||
* quomod 5th argument rounding tests
|
||||
*/
|
||||
vrfy(quomod(10,-3,a,b,0) == 1, '1157: vrfy(quomod(10,-3,a,b,0) == 1');
|
||||
vrfy(a == -4, '1158: a == -4');
|
||||
vrfy(b == -2, '1159: b == -2');
|
||||
vrfy(quomod(-10,-3,a,b,1) == 1, '1160: vrfy(quomod(-10,-3,a,b,1) == 1');
|
||||
vrfy(a == 4, '1161: a == 4');
|
||||
vrfy(b == 2, '1162: b == 2');
|
||||
vrfy(quomod(10,3,a,b,2) == 1, '1163: vrfy(quomod(10,3,a,b,2) == 1');
|
||||
vrfy(a == 3, '1164: a == 3');
|
||||
vrfy(b == 1, '1165: b == 1');
|
||||
vrfy(quomod(-10,3,a,b,3) == 1, '1166: vrfy(quomod(-10,3,a,b,3) == 1');
|
||||
vrfy(a == -4, '1167: a == -4');
|
||||
vrfy(b == 2, '1168: b == 2');
|
||||
vrfy(quomod(10,-3,a,b,4) == 1, '1169: vrfy(quomod(10,-3,a,b,4) == 1');
|
||||
vrfy(a == -3, '1170: a == -3');
|
||||
vrfy(b == 1, '1171: b == 1');
|
||||
vrfy(quomod(-10,-3,a,b,5) == 1, '1172: vrfy(quomod(-10,-3,a,b,5) == 1');
|
||||
vrfy(a == 3, '1173: a == 3');
|
||||
vrfy(b == -1, '1174: b == -1');
|
||||
vrfy(quomod(10,3,a,b,6) == 1, '1175: vrfy(quomod(10,3,a,b,6) == 1');
|
||||
vrfy(a == 3, '1176: a == 3');
|
||||
vrfy(b == 1, '1177: b == 1');
|
||||
vrfy(quomod(-10,3,a,b,7) == 1, '1178: vrfy(quomod(-10,3,a,b,7) == 1');
|
||||
vrfy(a == -4, '1179: a == -4');
|
||||
vrfy(b == 2, '1180: b == 2');
|
||||
vrfy(quomod(10,-3,a,b,8) == 1, '1181: vrfy(quomod(10,-3,a,b,8) == 1');
|
||||
vrfy(a == -4, '1182: a == -4');
|
||||
vrfy(b == -2, '1183: b == -2');
|
||||
vrfy(quomod(-10,-3,a,b,9) == 1, '1184: vrfy(quomod(-10,-3,a,b,9) == 1');
|
||||
vrfy(a == 3, '1185: a == 3');
|
||||
vrfy(b == -1, '1186: b == -1');
|
||||
vrfy(quomod(10,3,a,b,10) == 1, '1187: vrfy(quomod(10,3,a,b,10) == 1');
|
||||
vrfy(a == 4, '1188: a == 4');
|
||||
vrfy(b == -2, '1189: b == -2');
|
||||
vrfy(quomod(-10,3,a,b,11) == 1, '1190: vrfy(quomod(-10,3,a,b,11) == 1');
|
||||
vrfy(a == -4, '1191: a == -4');
|
||||
vrfy(b == 2, '1192: b == 2');
|
||||
vrfy(quomod(10,-3,a,b,12) == 1, '1193: vrfy(quomod(10,-3,a,b,12) == 1');
|
||||
vrfy(a == -3, '1194: a == -3');
|
||||
vrfy(b == 1, '1195: b == 1');
|
||||
vrfy(quomod(-10,-3,a,b,13) == 1,'1196: vrfy(quomod(-10,-3,a,b,13) == 1');
|
||||
vrfy(a == 4, '1197: a == 4');
|
||||
vrfy(b == 2, '1198: b == 2');
|
||||
vrfy(quomod(10,3,a,b,14) == 1, '1199: vrfy(quomod(10,3,a,b,14) == 1');
|
||||
vrfy(a == 4, '1200: a == 4');
|
||||
vrfy(b == -2, '1201: b == -2');
|
||||
vrfy(quomod(-10,3,a,b,15) == 1, '1202: vrfy(quomod(-10,3,a,b,15) == 1');
|
||||
vrfy(a == -4, '1203: a == -4');
|
||||
vrfy(b == 2, '1204: b == 2');
|
||||
|
||||
print '1205: Ending test_functions';
|
||||
}
|
||||
print '017: parsed test_functions()';
|
||||
|
||||
@@ -1334,14 +1392,14 @@ define _test_underscore()
|
||||
local _a = 27;
|
||||
local __a = 23209;
|
||||
|
||||
print "1200: Beginning _test_underscore";
|
||||
print "1290: Beginning _test_underscore";
|
||||
|
||||
vrfy(_a == 27, '1201: _a == 27');
|
||||
vrfy(_ == 49, '1202: _ == 49');
|
||||
vrfy(__ == 63, '1203: __ == 63');
|
||||
vrfy(__a == 23209, '1204: __a == 23209');
|
||||
vrfy(_a == 27, '1291: _a == 27');
|
||||
vrfy(_ == 49, '1292: _ == 49');
|
||||
vrfy(__ == 63, '1293: __ == 63');
|
||||
vrfy(__a == 23209, '1294: __a == 23209');
|
||||
|
||||
print "1205: Ending _test_underscore";
|
||||
print "1295: Ending _test_underscore";
|
||||
}
|
||||
print '020: parsed _test_underscore';
|
||||
|
||||
@@ -3404,7 +3462,7 @@ print '070: parsed test_redc()';
|
||||
*/
|
||||
define test_fileops()
|
||||
{
|
||||
local a, b, c, f, m, n, p, r, x, y, z;
|
||||
local a, b, c, f, m, n, p, r, s, x, y, z;
|
||||
local L = "Landon";
|
||||
local C = "Curt";
|
||||
local N = "Noll";
|
||||
@@ -3529,15 +3587,38 @@ define test_fileops()
|
||||
++ecnt;
|
||||
print '4267: ++ecnt;';
|
||||
vrfy(isfile(p=fopen(long,"r")) == 0,
|
||||
'4268: isfile(p=fopen(long,"r")) == 0');
|
||||
'4268: isfile(p=fopen(long,"r")) == 0');
|
||||
|
||||
/*
|
||||
* test fgetfile() and fgetline()
|
||||
*/
|
||||
vrfy(!iserror(p=fopen("tmp4200","w")),
|
||||
'4269: !iserror(p=fopen("tmp4200","w"))');
|
||||
vrfy(!iserror(fputs(p,"chongo\n")),
|
||||
'4270: !iserror(fputs(p,"chongo\n"))');
|
||||
vrfy(!iserror(fputs(p,"w\0a\0s\n")),
|
||||
'4271: !iserror(fputs(p,"w\0a\0s\n"))');
|
||||
vrfy(!iserror(fputs(p,"here\n")),
|
||||
'4272: !iserror(fputs(p,"here\n"))');
|
||||
vrfy(!iserror(fclose(p)), '4273: !iserror(fclose(p))');
|
||||
vrfy(!iserror(p=fopen("tmp4200","r")),
|
||||
'4274: !iserror(p=fopen("tmp4200","r"))');
|
||||
vrfy(!iserror(s=fgetline(p)), '4275: !iserror(s=fgetline(p))');
|
||||
vrfy(strcmp(s,"chongo") == 0, '4276: strcmp(s,"chongo") == 0');
|
||||
vrfy(!iserror(s=fgetfile(p)), '4277: !iserror(s=fgetfile(p))');
|
||||
vrfy(strcmp(s,"w\0a\0s\nhere\n") == 0,
|
||||
'4278: strcmp(s,"w\0a\0s\nhere\n") == 0');
|
||||
vrfy(!iserror(fclose(p)), '4279: !iserror(fclose(p))');
|
||||
|
||||
/*
|
||||
* cleanup
|
||||
*/
|
||||
x = rm("junk4200");
|
||||
print '4269: x = rm("junk4200")';
|
||||
print '4280: x = rm("junk4200")';
|
||||
x = rm("tmp4200");
|
||||
print '4281: x = rm("tmp4200")';
|
||||
|
||||
print '4270: Ending test_fileops';
|
||||
print '4282: Ending test_fileops';
|
||||
}
|
||||
print '071: parsed test_fileops()';
|
||||
|
||||
@@ -3972,7 +4053,7 @@ print '088: parsed test_fileop()';
|
||||
/*
|
||||
* global and static assignment tests
|
||||
*/
|
||||
global a = 10, b, c d = 20, e, f;
|
||||
global a = 10, b, c d = 20, e;
|
||||
print '089: global a = 10, b, c d = 20, e, f';
|
||||
vrfy(a == 10, '090: a == 10');
|
||||
vrfy(b == 0, '091: b == 0');
|
||||
@@ -4672,13 +4753,11 @@ print '137: parsed test_random()';
|
||||
/*
|
||||
* test_newsyn - test new command completion syntax and scope rules
|
||||
*/
|
||||
for (s5500 = 0, i = 0; i < 5; i++)
|
||||
s5500 += i;
|
||||
for (s5500 = 0, i = 0; i < 5; i++) s5500 += i;
|
||||
print "138: for (s5500 = 0, i = 0; i < 5; i++) s5500 += i;";
|
||||
vrfy(s5500 == 10, '139: s5500 == 10');
|
||||
vrfy(i == 5, '140: i == 5');
|
||||
for (s5500 = 0, i = 0; i < 9; i++)
|
||||
{
|
||||
for (s5500 = 0, i = 0; i < 9; i++) {
|
||||
s5500 += i;
|
||||
}
|
||||
print "141: for (s5500 = 0, i = 0; i < 9; i++) { s5500 += i; }";
|
||||
@@ -4726,7 +4805,6 @@ define test_newsyn()
|
||||
vrfy(i == 3, '5509: i == 3');
|
||||
/**/
|
||||
{
|
||||
local i;
|
||||
for (s5500 = 0, i = 0; i < 11; i++)
|
||||
s5500 += i;
|
||||
vrfy(s5500 == 55, '5510: s5500 == 45');
|
||||
@@ -5138,8 +5216,6 @@ print '156: parsed test_size()';
|
||||
/*
|
||||
* test_assign - test assignment of constants and variables
|
||||
*/
|
||||
global A, B; /* A, B for "constants" */
|
||||
print '157: global A, B';
|
||||
global X5800, Y5800; /* X5800, Y5800 for "variables" */
|
||||
print '158: global X5800, Y5800';
|
||||
obj xy5800 {x, y};
|
||||
@@ -5226,6 +5302,11 @@ define test_is()
|
||||
local square; /* square of an odd prime */
|
||||
local string; /* string */
|
||||
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';
|
||||
|
||||
@@ -6163,15 +6244,75 @@ define test_is()
|
||||
vrfy(istype(matrix,odd) == 0, '6661: istype(matrix,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
|
||||
*/
|
||||
blkfree("blk5900");
|
||||
print '6663: blkfree("blk5900")';
|
||||
print '6666: blkfree("blk5900")';
|
||||
fclose(ofd);
|
||||
print '6664: fclose(ofd)';
|
||||
print '6667: fclose(ofd)';
|
||||
|
||||
print '6665: Ending test_is';
|
||||
print '6668: Ending test_is';
|
||||
}
|
||||
print '168: test_is()';
|
||||
|
||||
@@ -7753,7 +7894,27 @@ read -once "test8500";
|
||||
print;
|
||||
print '8600: Starting test of up to 1024 args'
|
||||
read -once "test8600";
|
||||
/* 86xx: Ending test of up to 1024 args is printed by test8600.cal */
|
||||
/* 860x: Ending test of up to 1024 args is printed by test8600.cal */
|
||||
|
||||
|
||||
/*
|
||||
* dupvar_warn and redecl_warn testing
|
||||
*/
|
||||
print;
|
||||
print '8650: Starting test of dupvar_warn and redecl_warn config parameters';
|
||||
vrfy(config("redecl_warn",0), '8651: config("redecl_warn",0)');
|
||||
vrfy(config("dupvar_warn",0), '8652: config("dupvar_warn",0)');
|
||||
vrfy(u_glob == 6, '8653: u_glob == 6');
|
||||
global u_glob = 555;
|
||||
print '8654: reclare u_glob';
|
||||
vrfy(u_glob == 555, '8655: u_glob == 555');
|
||||
define func_8650(u_glob) { local u_glob; return u_glob; }
|
||||
print '8656: u_glob as both local and parameter';
|
||||
define func_8650a(u_glob) { static u_glob; return u_glob; }
|
||||
print '8657: u_glob as both static and parameter';
|
||||
vrfy(config("redecl_warn",1)==0, '8658: config("redecl_warn",1)==0');
|
||||
vrfy(config("dupvar_warn",1)==0, '8659: config("dupvar_warn",1)==0');
|
||||
/* 865x: Ending test of up to 1024 args is printed by test8600.cal */
|
||||
|
||||
|
||||
/*
|
||||
@@ -7761,6 +7922,7 @@ read -once "test8600";
|
||||
*
|
||||
* We use the dotest driver to evaluate test-97xx data files.
|
||||
*/
|
||||
print;
|
||||
print '8700: Starting dotest runs'
|
||||
print '8701: read -once "dotest"';
|
||||
read -once "dotest";
|
||||
@@ -7770,6 +7932,7 @@ vrfy(dotest("set8700.line", 8703) == 0,
|
||||
'8703: dotest("set8700.line", 8703) == 0');
|
||||
/* 87xx: Ending dotest runs is printed by set8700.test */
|
||||
|
||||
|
||||
/*
|
||||
* read various calc resource files
|
||||
*
|
||||
@@ -7847,7 +8010,28 @@ read -once varargs;
|
||||
print '9827: read -once varargs';
|
||||
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';
|
||||
|
||||
|
||||
/*
|
||||
|
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.1 $
|
||||
* @(#) $Id: set8700.cal,v 29.1 2006/05/20 19:35:33 chongo Exp $
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: set8700.cal,v 29.2 2006/08/20 16:16:11 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.cal,v $
|
||||
*
|
||||
* Under source code control: 2006/05/20 14:10:11
|
||||
@@ -70,3 +70,8 @@ define set8700_g(set8700_x)
|
||||
obj set8700_point {
|
||||
set8700_x, set8700_y, set8700_z
|
||||
}
|
||||
|
||||
global mat set8700_c[] = { 1, 2+3i, -5+4i, 5i+6, -7i };
|
||||
|
||||
global mat set8700_e[] = { 0, 1, 0, 0, 2, -3/2, 2, -1/2,
|
||||
-3, 0.5, -1.0, 0.5, 1.0, 0.0, 0.0, 0.0 };
|
||||
|
@@ -17,8 +17,8 @@
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.1 $
|
||||
## @(#) $Id: set8700.line,v 29.1 2006/05/20 19:35:33 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: set8700.line,v 29.4 2006/08/20 16:16:11 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/set8700.line,v $
|
||||
##
|
||||
## Under source code control: 2006/05/20 14:10:11
|
||||
@@ -143,7 +143,7 @@ a #= 4, a == 1
|
||||
|
||||
## Binary # operator not defined for strings
|
||||
|
||||
global set8700_A; protect(set8700_A) == 0
|
||||
protect(set8700_A) == 0
|
||||
## Testing with one lvalue
|
||||
isnull(protect(set8700_A,65))
|
||||
protect(set8700_A) == 65
|
||||
@@ -302,7 +302,7 @@ protect(set8700_B,0), set8700_B = set8700_getA1(), protect(set8700_B) == 1024
|
||||
protect(set8700_B,0), set8700_B = set8700_getA2(), protect(set8700_B) == 1024
|
||||
set8700_B = set8700_getvar(), protect(set8700_B) == 1024 + 256
|
||||
|
||||
global set8700_x, set8700_y; set8700_x = 7, protect(set8700_x) == 0
|
||||
set8700_x = 7, protect(set8700_x) == 0
|
||||
protect(7,2) == error(10234)
|
||||
protect(set8700_x,2.5) == error(10235)
|
||||
protect(set8700_x,"abc") == error(10235)
|
||||
@@ -322,7 +322,6 @@ set8700_x++ == error(10385)
|
||||
set8700_x == 7
|
||||
set8700_x-- == error(10388)
|
||||
|
||||
global set8700_A, set8700_B; 1
|
||||
protect(set8700_A,0), protect(set8700_A,16), 1
|
||||
set8700_A = "abcdef", protect(set8700_A) == 16 ## No copy to set8700_A
|
||||
protect(set8700_B,0), set8700_B = "xyz", protect(set8700_B) == 0
|
||||
@@ -403,3 +402,28 @@ set8700_P == (obj set8700_point = {1,2,3})
|
||||
set8700_L = list(mat[1] = {set8700_P}), protect(set8700_L[0][0]) == 16
|
||||
set8700_L = {{{4,5,6}}}, set8700_L[0][0] == set8700_P
|
||||
protect(set8700_L,0,2), set8700_L = {{{4,5,6}}}, set8700_L[0][0] == (obj set8700_point = {4,5,6})
|
||||
|
||||
## Testing quomod
|
||||
quomod(14,5,3,4) == error(10374)
|
||||
global set8700_a,set8700_b; quomod("abc", 4, set8700_a, set8700_b) == error(10375)
|
||||
quomod(14,5,set8700_a,set8700_b,0) == 1 && set8700_a == 2 && set8700_b == 4
|
||||
quomod(14,5,set8700_a,set8700_b,1) == 1 && set8700_a == 3 && set8700_b == -1
|
||||
quomod("abc",2,set8700_a,set8700_b) == error(10375)
|
||||
set8700_a = "abc"; quomod(14,5,set8700_a,set8700_b) == error(10375)
|
||||
set8700_a = null(); quomod(14,5,set8700_a,set8700_b,24) == 1; set8700_a == 3 && set8700_b == -1
|
||||
quomod(14,5,set8700_a,set8700_a) == error(10374)
|
||||
quomod(14,5,set8700_a,set8700_b,-1) == error(10375)
|
||||
protect(set8700_a,1); quomod(17,2,set8700_a,set8700_b) == error(10376)
|
||||
protect(set8700_a,0); quomod(17,2,set8700_a,set8700_b); set8700_a == 8 && set8700_b == 1
|
||||
set8700_p = &set8700_a, set8700_q = &set8700_b; quomod(14,5,*set8700_p,*set8700_q); *set8700_p == 2 && *set8700_q == 4
|
||||
|
||||
## Testing estr
|
||||
base(1/3) == 10
|
||||
strcmp(estr(null()), "\"\"") == 0
|
||||
strcmp(estr(bernoulli(48)), "-5609403368997817686249127547/46410") == 0
|
||||
strcmp(estr(sin(3i)), "1001787492740990189897i/100000000000000000000") == 0
|
||||
base(10) == 1/3
|
||||
strcmp(estr("fizzbin"), "\"fizzbin\"") == 0
|
||||
strcmp(estr(set8700_c), "mat[5]={1,2+3i,-5+4i,6+5i,-7i}") == 0
|
||||
strcmp(estr(set8700_e), "mat[16]={0,1,0,0,2,-3/2,2,-1/2,-3,1/2,-1,1/2,1,0,0,0}") == 0
|
||||
strcmp(estr(list(2,3,5)), "list(2,3,5)") == 0
|
||||
|
186
cal/sumtimes.cal
Normal file
186
cal/sumtimes.cal
Normal file
@@ -0,0 +1,186 @@
|
||||
/*
|
||||
* sumtimes - runtimes evaluating sums & squares of large lists and mats
|
||||
*
|
||||
* Copyright (C) 2006 Ernest Bowen
|
||||
*
|
||||
* Calc is open software; you can redistribute it and/or modify it under
|
||||
* the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
||||
* Public License for more details.
|
||||
*
|
||||
* A copy of version 2.1 of the GNU Lesser General Public License is
|
||||
* distributed with calc under the filename COPYING-LGPL. You should have
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.1 $
|
||||
* @(#) $Id: sumtimes.cal,v 29.1 2006/06/23 00:35:30 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/sumtimes.cal,v $
|
||||
*
|
||||
* Under source code control: 2006/06/22 17:29
|
||||
* File existed as early as: 2006
|
||||
*
|
||||
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
||||
*/
|
||||
|
||||
|
||||
global sumtimes_t0, sumtimes_t1, sumtimes_t2, sumtimes_t3;
|
||||
global sumtimes_A, sumtimes_B;
|
||||
config("tilde", 0),;
|
||||
|
||||
define timematsum(N) {
|
||||
local n, s, p, ptop;
|
||||
|
||||
sumtimes_A = mat[N];
|
||||
|
||||
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||
|
||||
ptop = &sumtimes_A[n-1];
|
||||
sumtimes_t0 = runtime();
|
||||
for (s = n = 0; n < N; n++) s += sumtimes_A[n];
|
||||
sumtimes_t1 = runtime();
|
||||
for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += *p;
|
||||
sumtimes_t2 = runtime();
|
||||
s = matsum(sumtimes_A);
|
||||
sumtimes_t3 = runtime();
|
||||
|
||||
print "Matrix sum runtimes";
|
||||
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||
printf('\t"For" loop using pointers:\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
|
||||
printf('\tUsing builtin "matsum":\t\t%.4f\n', sumtimes_t3 - sumtimes_t2);
|
||||
}
|
||||
|
||||
define timelistsum(N) {
|
||||
local n, s;
|
||||
|
||||
sumtimes_A = makelist(N);
|
||||
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||
|
||||
sumtimes_t0 = runtime();
|
||||
for (s = n = 0; n < N; n++) s += sumtimes_A[n];
|
||||
sumtimes_t1 = runtime();
|
||||
s = sum(sumtimes_A);
|
||||
sumtimes_t2 = runtime();
|
||||
print "List sum runtimes";
|
||||
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||
printf('\tUsing builtin "sum":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
|
||||
}
|
||||
|
||||
|
||||
define timematsort(N) {
|
||||
local n;
|
||||
|
||||
sumtimes_A = mat[N];
|
||||
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||
sumtimes_t0 = runtime();
|
||||
sort(sumtimes_A);
|
||||
sumtimes_t1 = runtime();
|
||||
printf('\tMatrix sort runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||
}
|
||||
|
||||
|
||||
define timelistsort(N) {
|
||||
local n;
|
||||
|
||||
sumtimes_A = makelist(N);
|
||||
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||
sumtimes_t0 = runtime();
|
||||
sort(sumtimes_A);
|
||||
sumtimes_t1 = runtime();
|
||||
printf('\tList sort runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||
}
|
||||
|
||||
define timematreverse(N) {
|
||||
local n;
|
||||
|
||||
sumtimes_A = mat[N];
|
||||
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||
sumtimes_t0 = runtime();
|
||||
reverse(sumtimes_A);
|
||||
sumtimes_t1 = runtime();
|
||||
printf('\tMatrix reverse runtime %.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||
}
|
||||
|
||||
define timelistreverse(N) {
|
||||
local n;
|
||||
|
||||
sumtimes_A = makelist(N);
|
||||
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||
sumtimes_t0 = runtime();
|
||||
reverse(sumtimes_A);
|
||||
sumtimes_t1 = runtime();
|
||||
printf('\tList reverse runtime:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||
}
|
||||
|
||||
define timematssq(N) {
|
||||
local n, s, p, ptop;
|
||||
|
||||
sumtimes_A = mat[N];
|
||||
|
||||
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||
|
||||
ptop = &sumtimes_A[n-1];
|
||||
sumtimes_t0 = runtime();
|
||||
for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2;
|
||||
sumtimes_t1 = runtime();
|
||||
for (s = 0, p = &sumtimes_A[0]; p <= ptop; p++) s += (*p)^2;
|
||||
sumtimes_t2 = runtime();
|
||||
|
||||
print "Matrix sum of squares runtimes";
|
||||
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||
printf('\t"For" loop using pointers:\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
|
||||
}
|
||||
|
||||
define timelistssq(N) {
|
||||
local n, s;
|
||||
|
||||
sumtimes_A = makelist(N);
|
||||
for (n = 0; n < N; n++) sumtimes_A[n] = rand(N);
|
||||
|
||||
sumtimes_t0 = runtime();
|
||||
for (s = n = 0; n < N; n++) s += sumtimes_A[n]^2;
|
||||
sumtimes_t1 = runtime();
|
||||
s = ssq(sumtimes_A);
|
||||
sumtimes_t2 = runtime();
|
||||
print "List sum of squares runtimes";
|
||||
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||
printf('\tUsing builtin "ssq":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
|
||||
}
|
||||
|
||||
define timehmean(N, M = 10) {
|
||||
local n, s, v1, v2;
|
||||
|
||||
sumtimes_A = makelist(N);
|
||||
for (n = 0; n < N; n++) sumtimes_A[n] = rand(1, M);
|
||||
|
||||
sumtimes_t0 = runtime();
|
||||
for (s = n = 0; n < N; n++) s += 1/sumtimes_A[n];
|
||||
v1 = N/s;
|
||||
sumtimes_t1 = runtime();
|
||||
v2 = hmean(sumtimes_A);
|
||||
sumtimes_t2 = runtime();
|
||||
print v1, v2;
|
||||
print "List harmonic meanruntimes";
|
||||
printf('\tStandard "for" loop:\t\t%.4f\n', sumtimes_t1 - sumtimes_t0);
|
||||
printf('\tUsing builtin "hmean":\t\t%.4f\n', sumtimes_t2 - sumtimes_t1);
|
||||
}
|
||||
|
||||
define doalltimes(N) {
|
||||
timematsum(N);
|
||||
print;
|
||||
timelistsum(N);
|
||||
print;
|
||||
timematssq(N);
|
||||
print;
|
||||
timelistssq(N);
|
||||
print;
|
||||
timematsort(N);
|
||||
timelistsort(N);
|
||||
timematreverse(N);
|
||||
timelistreverse(N);
|
||||
print;
|
||||
}
|
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: test2700.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||
* @(#) $Revision: 29.4 $
|
||||
* @(#) $Id: test2700.cal,v 29.4 2006/06/25 22:06:23 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test2700.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/11/01 22:52:25
|
||||
@@ -41,8 +41,7 @@
|
||||
*/
|
||||
|
||||
|
||||
global defaultverbose = 1;
|
||||
global err;
|
||||
defaultverbose = 1;
|
||||
|
||||
define mknonnegreal() {
|
||||
switch(rand(8)) {
|
||||
@@ -89,11 +88,11 @@ define mkfrac() = rand(2) ? mkposfrac() : -mkposfrac();
|
||||
define mksquarereal() = mknonnegreal()^2;
|
||||
|
||||
/*
|
||||
* XXX - Should be able to do better than the following. For nonsquare
|
||||
* positive integer less than 1e6, could use
|
||||
* We might be able to do better than the following. For nonsquare
|
||||
* positive integer less than 1e6, could use:
|
||||
* x = rand(1, 1000);
|
||||
* return rand(x^2 + 1, (x + 1)^2);
|
||||
* Maybe could do
|
||||
* Maybe could do:
|
||||
* do
|
||||
* x = mkreal_2700();
|
||||
* while
|
||||
|
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: test3300.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: test3300.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3300.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/12/02 04:27:41
|
||||
@@ -30,8 +30,7 @@
|
||||
*/
|
||||
|
||||
|
||||
global defaultverbose = 1; /* default verbose value */
|
||||
global err;
|
||||
defaultverbose = 1; /* default verbose value */
|
||||
|
||||
define testi(str, n, N, verbose)
|
||||
{
|
||||
|
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: test3400.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: test3400.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3400.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/12/02 05:20:11
|
||||
@@ -54,8 +54,7 @@
|
||||
*/
|
||||
|
||||
|
||||
global defaultverbose = 1; /* default verbose value */
|
||||
global err;
|
||||
defaultverbose = 1; /* default verbose value */
|
||||
|
||||
global pi1k = pi(1e-1000);
|
||||
|
||||
|
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: test3500.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: test3500.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test3500.cal,v $
|
||||
*
|
||||
* Under source code control: 1995/12/18 22:50:46
|
||||
@@ -53,8 +53,7 @@
|
||||
*/
|
||||
|
||||
|
||||
global defaultverbose = 1; /* default verbose value */
|
||||
global err;
|
||||
defaultverbose = 1; /* default verbose value */
|
||||
|
||||
define testfrem(x,y,verbose)
|
||||
{
|
||||
|
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: test4000.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: test4000.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4000.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/03/13 02:38:45
|
||||
@@ -75,8 +75,7 @@
|
||||
*/
|
||||
|
||||
|
||||
global defaultverbose = 1; /* default verbose value */
|
||||
global err;
|
||||
defaultverbose = 1; /* default verbose value */
|
||||
|
||||
/*
|
||||
* test defaults
|
||||
|
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: test4100.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||
* @(#) $Revision: 29.4 $
|
||||
* @(#) $Id: test4100.cal,v 29.4 2006/06/20 09:29:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4100.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/03/13 03:53:22
|
||||
@@ -70,18 +70,16 @@
|
||||
*/
|
||||
|
||||
|
||||
global defaultverbose = 1; /* default verbose value */
|
||||
global err;
|
||||
defaultverbose = 1; /* default verbose value */
|
||||
|
||||
/*
|
||||
* test defaults
|
||||
*/
|
||||
global K1 = 2^17;
|
||||
global K2 = 2^12;
|
||||
global BASEB = 16;
|
||||
global BASE = 2^BASEB;
|
||||
global test4100_K1 = 2^17;
|
||||
global test4100_K2 = 2^12;
|
||||
global test4100_BASE = 2^config("baseb");
|
||||
|
||||
define rlen_4100(N) = rand(BASE^(N-1), BASE^N);
|
||||
define rlen_4100(N) = rand(test4100_BASE^(N-1), test4100_BASE^N);
|
||||
|
||||
define olen(N)
|
||||
{
|
||||
@@ -234,7 +232,7 @@ define times(str,N,n,verbose)
|
||||
m = olen(N);
|
||||
m2 = m^2;
|
||||
if (isnull(n)) {
|
||||
n = ceil(K1/power(N,1.585));
|
||||
n = ceil(test4100_K1/power(N,1.585));
|
||||
if (verbose > 1)
|
||||
printf("n = %d\n", n);
|
||||
}
|
||||
@@ -308,7 +306,7 @@ define powtimes(str, N1, N2, n, verbose)
|
||||
N2 = 1;
|
||||
|
||||
if (isnull(n)) {
|
||||
n = ceil(K2/power(N1, 1.585)/N2);
|
||||
n = ceil(test4100_K2/power(N1, 1.585)/N2);
|
||||
printf ("n = %d\n", n);
|
||||
}
|
||||
mat A[n];
|
||||
@@ -316,8 +314,8 @@ define powtimes(str, N1, N2, n, verbose)
|
||||
mat B[n];
|
||||
v = olen(N1);
|
||||
|
||||
cp = config("pow2", 1);
|
||||
crc = config("redc2", 1);
|
||||
cp = config("pow2", 2);
|
||||
crc = config("redc2", 2);
|
||||
|
||||
/* initialize redc and lastmod info */
|
||||
|
||||
@@ -346,7 +344,7 @@ define powtimes(str, N1, N2, n, verbose)
|
||||
for (i = 0; i < n; i++)
|
||||
z4 += rcpow(Ar[i], B[i], v);
|
||||
trcsmall = round(runtime() - t, 4);
|
||||
config("redc2", 1);
|
||||
config("redc2", 2);
|
||||
t = runtime();
|
||||
for (i = 0; i < n; i++)
|
||||
z5 += rcpow(Ar[i], B[i], v);
|
||||
@@ -408,7 +406,7 @@ define inittimes(str,N,n,verbose)
|
||||
}
|
||||
m = 0;
|
||||
if (isnull(n)) {
|
||||
n = ceil(K1/N^2);
|
||||
n = ceil(test4100_K1/N^2);
|
||||
if (verbose > 1) {
|
||||
printf ("n = %d\n", n);
|
||||
}
|
||||
|
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.4 $
|
||||
* @(#) $Id: test4600.cal,v 29.4 2001/04/10 22:09:02 chongo Exp $
|
||||
* @(#) $Revision: 29.5 $
|
||||
* @(#) $Id: test4600.cal,v 29.5 2006/06/20 09:29:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test4600.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/07/02 20:04:40
|
||||
@@ -30,8 +30,7 @@
|
||||
*/
|
||||
|
||||
|
||||
global defaultverbose = 1 /* default verbose value */
|
||||
global err;
|
||||
defaultverbose = 1; /* default verbose value */
|
||||
|
||||
/*
|
||||
* test globals
|
||||
|
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: test5100.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: test5100.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5100.cal,v $
|
||||
*
|
||||
* Under source code control: 1996/12/02 23:57:10
|
||||
@@ -30,8 +30,7 @@
|
||||
*/
|
||||
|
||||
|
||||
global defaultverbose = 1; /* default verbose value */
|
||||
global err;
|
||||
defaultverbose = 1; /* default verbose value */
|
||||
|
||||
/*
|
||||
* We test the new code generator declaration scope and order.
|
||||
|
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.2 $
|
||||
* @(#) $Id: test5200.cal,v 29.2 2000/06/07 14:02:25 chongo Exp $
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: test5200.cal,v 29.3 2006/06/20 09:29:16 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/test5200.cal,v $
|
||||
*
|
||||
* Under source code control: 1997/02/07 02:48:10
|
||||
@@ -30,8 +30,7 @@
|
||||
*/
|
||||
|
||||
|
||||
global defaultverbose = 1; /* default verbose value */
|
||||
global err;
|
||||
defaultverbose = 1; /* default verbose value */
|
||||
|
||||
/*
|
||||
* test the fix of a global/static bug
|
||||
|
8
calc.h
8
calc.h
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.18 $
|
||||
* @(#) $Id: calc.h,v 29.18 2006/05/21 07:28:54 chongo Exp $
|
||||
* @(#) $Revision: 29.19 $
|
||||
* @(#) $Id: calc.h,v 29.19 2006/08/20 15:01:30 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.h,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:31
|
||||
@@ -113,10 +113,10 @@ extern DLL int closeid(FILEID id);
|
||||
extern DLL int getcharid(FILEID id);
|
||||
extern DLL int idprintf(FILEID id, char *fmt, int count, VALUE **vals);
|
||||
extern DLL int idfputc(FILEID id, int ch);
|
||||
extern DLL int idfputs(FILEID id, char *str);
|
||||
extern DLL int idfputs(FILEID id, STRING *str);
|
||||
extern DLL int printid(FILEID id, int flags);
|
||||
extern DLL int flushid(FILEID id);
|
||||
extern DLL int readid(FILEID id, int flags, char **retptr);
|
||||
extern DLL int readid(FILEID id, int flags, STRING **retptr);
|
||||
extern DLL int getloc(FILEID id, ZVALUE *loc);
|
||||
extern DLL int setloc(FILEID id, ZVALUE zpos);
|
||||
extern DLL int getsize(FILEID id, ZVALUE *size);
|
||||
|
@@ -18,8 +18,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.15 $
|
||||
# @(#) $Id: calc.spec.in,v 29.15 2006/05/21 06:26:00 chongo Exp $
|
||||
# @(#) $Revision: 29.16 $
|
||||
# @(#) $Id: calc.spec.in,v 29.16 2006/06/26 05:50:44 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calc.spec.in,v $
|
||||
#
|
||||
# Under source code control: 2003/02/16 20:21:39
|
||||
@@ -38,7 +38,7 @@ Summary: Arbitrary precision calculator.
|
||||
Name: calc
|
||||
Version: <<<PROJECT_VERSION>>>
|
||||
Release: 0
|
||||
Copyright: LGPL
|
||||
License: LGPL
|
||||
Group: Applications/Engineering
|
||||
Source: %{name}-%{version}.tar.gz
|
||||
URL: http://www.isthe.com/chongo/tech/comp/calc/index.html
|
||||
@@ -101,6 +101,8 @@ rm -rf %{buildroot}
|
||||
%attr(644, root, root) %{_libdir}/*.a
|
||||
|
||||
%changelog
|
||||
* Sun Jun 25 2006 Landon Curt Noll http://www.isthe.com/chongo
|
||||
- Changed Copyright to License as per new rpm v4.4 syntax
|
||||
* Sun May 20 2006 Landon Curt Noll http://www.isthe.com/chongo
|
||||
- Release of calc-2.12.0
|
||||
- Added *.line set files to the list of packaged files
|
||||
|
16
calcerr.tbl
16
calcerr.tbl
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# calcerr - error codes and messages
|
||||
#
|
||||
# Copyright (C) 1999 Ernest Bowen
|
||||
# Copyright (C) 1999-2006 Ernest Bowen
|
||||
#
|
||||
# Calc is open software; you can redistribute it and/or modify it under
|
||||
# the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -17,8 +17,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.8 $
|
||||
# @(#) $Id: calcerr.tbl,v 29.8 2006/05/19 15:12:57 chongo Exp $
|
||||
# @(#) $Revision: 29.10 $
|
||||
# @(#) $Id: calcerr.tbl,v 29.10 2006/08/20 15:01:30 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/calcerr.tbl,v $
|
||||
#
|
||||
# Under source code control: 1996/05/23 17:38:44
|
||||
@@ -404,9 +404,9 @@ E_ASSIGN8 No-type-change destination for assign
|
||||
E_ASSIGN9 No-error-value destination for assign
|
||||
E_SWAP1 No-copy argument for octet swap
|
||||
E_SWAP2 No-assign-to-or-from argument for swap
|
||||
E_SWAP3 Non-variable argument for swap
|
||||
E_QUOMOD1 Non-variable argument 4 or 4 for quomod
|
||||
E_QUOMOD2 Non-real-number argument 1 or 2 for quomod
|
||||
E_SWAP3 Non-lvalue argument for swap
|
||||
E_QUOMOD1 Non-lvalue argument 3 or 4 for quomod
|
||||
E_QUOMOD2 Non-real-number arg 1 or 2 or bad arg 5 for quomod
|
||||
E_QUOMOD3 No-assign-to argument 3 or 4 for quomod
|
||||
E_PREINC1 No-copy-to or no-change argument for octet preinc
|
||||
E_PREINC2 Non-variable argument for preinc
|
||||
@@ -445,3 +445,7 @@ E_FPATHOPEN1 Non-string arguments for fpathopen
|
||||
E_FPATHOPEN2 Unrecognized mode for fpathopen
|
||||
E_LOG1 Bad epsilon argument for log
|
||||
E_LOG2 Non-numeric first argument for log
|
||||
E_FGETFILE1 Non-file argument for fgetfile
|
||||
E_FGETFILE2 File argument for fgetfile not open for reading
|
||||
E_FGETFILE3 Unable to set file position in fgetfile
|
||||
E_ESTR Non-representable type for estr
|
||||
|
@@ -18,8 +18,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.3 $
|
||||
# @(#) $Id: check.awk,v 29.3 2006/05/20 19:43:39 chongo Exp $
|
||||
# @(#) $Revision: 29.4 $
|
||||
# @(#) $Id: check.awk,v 29.4 2006/08/20 16:16:31 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/RCS/check.awk,v $
|
||||
#
|
||||
# Under source code control: 1996/05/25 22:07:58
|
||||
@@ -64,7 +64,7 @@ NF == 0 {
|
||||
end_seen = 1;
|
||||
}
|
||||
|
||||
$1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ {
|
||||
$1 ~ /^[0-9]+:/ || $1 ~ /^[0-9]+-[0-9]*:/ || $1 ~ /^"))$/ {
|
||||
if (error > 0) {
|
||||
if (havebuf2) {
|
||||
print buf2;
|
||||
|
185
codegen.c
185
codegen.c
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.18 $
|
||||
* @(#) $Id: codegen.c,v 29.18 2006/06/03 22:47:28 chongo Exp $
|
||||
* @(#) $Revision: 29.21 $
|
||||
* @(#) $Id: codegen.c,v 29.21 2006/06/20 10:28:06 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/codegen.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:13
|
||||
@@ -136,10 +136,6 @@ getcommands(BOOL toplevel)
|
||||
getfunction();
|
||||
break;
|
||||
|
||||
case T_UNDEFINE:
|
||||
ungetfunction();
|
||||
break;
|
||||
|
||||
case T_EOF:
|
||||
if (!toplevel)
|
||||
exitfilescope();
|
||||
@@ -306,9 +302,8 @@ ungetfunction(void)
|
||||
name = tokensymbol();
|
||||
type = getbuiltinfunc(name);
|
||||
if (type >= 0) {
|
||||
errorcount--;
|
||||
scanerror(T_NULL,
|
||||
"Attempt to undefine the builtin function \"%s\"", name);
|
||||
warning(
|
||||
"Cannot undefine builtin function \"%s\"", name);
|
||||
continue;
|
||||
}
|
||||
rmuserfunc(name);
|
||||
@@ -316,6 +311,16 @@ ungetfunction(void)
|
||||
case T_MULT:
|
||||
rmalluserfunc();
|
||||
continue;
|
||||
case T_STATIC:
|
||||
if (gettoken() != T_SYMBOL) {
|
||||
scanerror(T_SEMICOLON,
|
||||
"Non-identifier following \"undefine static\"");
|
||||
return;
|
||||
}
|
||||
name = tokensymbol();
|
||||
endscope(name, FALSE);
|
||||
continue;
|
||||
|
||||
case T_NEWLINE:
|
||||
case T_SEMICOLON:
|
||||
case T_EOF:
|
||||
@@ -634,6 +639,10 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
||||
(void) getdeclarations(SYM_LOCAL);
|
||||
break;
|
||||
|
||||
case T_UNDEFINE:
|
||||
ungetfunction();
|
||||
break;
|
||||
|
||||
case T_RIGHTBRACE:
|
||||
scanerror(T_NULL, "Extraneous right brace");
|
||||
return;
|
||||
@@ -799,10 +808,10 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
||||
setlabel(&label3);
|
||||
if (contlabel == NULL_LABEL)
|
||||
contlabel = &label3;
|
||||
(void) tokenmode(oldmode);
|
||||
getstatement(contlabel, breaklabel, NULL_LABEL, NULL_LABEL);
|
||||
addoplabel(OP_JUMP, contlabel);
|
||||
setlabel(breaklabel);
|
||||
(void) tokenmode(oldmode);
|
||||
return;
|
||||
|
||||
case T_WHILE:
|
||||
@@ -811,6 +820,7 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
||||
clearlabel(contlabel);
|
||||
setlabel(contlabel);
|
||||
getcondition();
|
||||
(void) tokenmode(oldmode);
|
||||
if (gettoken() != T_SEMICOLON) {
|
||||
breaklabel = &label2;
|
||||
clearlabel(breaklabel);
|
||||
@@ -823,7 +833,6 @@ getstatement(LABEL *contlabel, LABEL *breaklabel, LABEL *nextcaselabel, LABEL *d
|
||||
} else {
|
||||
addoplabel(OP_JUMPNZ, contlabel);
|
||||
}
|
||||
(void) tokenmode(oldmode);
|
||||
return;
|
||||
|
||||
case T_DO:
|
||||
@@ -1953,7 +1962,8 @@ getreference(void)
|
||||
|
||||
switch(gettoken()) {
|
||||
case T_ANDAND:
|
||||
scanerror(T_NULL, "Non-variable operand for &");
|
||||
scanerror(T_NULL, "&& used as prefix operator");
|
||||
/*FALLTHRU*/
|
||||
case T_AND:
|
||||
type = getreference();
|
||||
addop(OP_PTR);
|
||||
@@ -2108,9 +2118,23 @@ getterm(void)
|
||||
type = getidexpr(TRUE, 0);
|
||||
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:
|
||||
if (gettoken() != T_SYMBOL) {
|
||||
scanerror(T_NULL, "Global id expected");
|
||||
scanerror(T_NULL,
|
||||
"No identifier after global specifier");
|
||||
break;
|
||||
}
|
||||
rescantoken();
|
||||
@@ -2119,19 +2143,30 @@ getterm(void)
|
||||
|
||||
case T_LOCAL:
|
||||
if (gettoken() != T_SYMBOL) {
|
||||
scanerror(T_NULL, "Local id expected");
|
||||
scanerror(T_NULL,
|
||||
"No identifier after local specifier");
|
||||
break;
|
||||
}
|
||||
rescantoken();
|
||||
type = getidexpr(TRUE, T_LOCAL);
|
||||
break;
|
||||
|
||||
case T_STATIC:
|
||||
if (gettoken() != T_SYMBOL) {
|
||||
scanerror(T_NULL,
|
||||
"No identifier after static specifier");
|
||||
break;
|
||||
}
|
||||
rescantoken();
|
||||
type = getidexpr(TRUE, T_STATIC);
|
||||
break;
|
||||
|
||||
case T_LEFTBRACKET:
|
||||
scanerror(T_NULL, "Bad index usage");
|
||||
scanerror(T_NULL, "Left bracket with no preceding lvalue");
|
||||
break;
|
||||
|
||||
case T_PERIOD:
|
||||
scanerror(T_NULL, "Bad element reference");
|
||||
scanerror(T_NULL, "Period with no preceding lvalue");
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -2193,7 +2228,8 @@ getidexpr(BOOL okmat, int autodef)
|
||||
type = 0;
|
||||
break;
|
||||
case T_ASSIGN:
|
||||
if (autodef != T_GLOBAL && autodef != T_LOCAL)
|
||||
if (autodef != T_GLOBAL && autodef != T_LOCAL &&
|
||||
autodef != T_STATIC)
|
||||
autodef = 1;
|
||||
/* fall into default case */
|
||||
default:
|
||||
@@ -2394,22 +2430,11 @@ getshowstatement(void)
|
||||
"stri\000"
|
||||
"lite\000"
|
||||
"opco\000", name);
|
||||
if (arg == 19) {
|
||||
if (gettoken() != T_SYMBOL) {
|
||||
rescantoken();
|
||||
scanerror(T_SEMICOLON,
|
||||
"Function name expected");
|
||||
return;
|
||||
}
|
||||
index = adduserfunc(tokensymbol());
|
||||
addopone(OP_SHOW, index + 19);
|
||||
return;
|
||||
}
|
||||
if (arg > 0)
|
||||
addopone(OP_SHOW, arg);
|
||||
else
|
||||
printf("Unknown SHOW parameter ignored\n");
|
||||
return;
|
||||
break;
|
||||
case T_GLOBAL:
|
||||
arg = 13; break;
|
||||
case T_STATIC:
|
||||
arg = 14; break;
|
||||
default:
|
||||
printf("SHOW command to be followed by at least ");
|
||||
printf("four letters of one of:\n");
|
||||
@@ -2424,6 +2449,21 @@ getshowstatement(void)
|
||||
return;
|
||||
|
||||
}
|
||||
if (arg == 19) {
|
||||
if (gettoken() != T_SYMBOL) {
|
||||
rescantoken();
|
||||
scanerror(T_SEMICOLON,
|
||||
"Function name expected for show statement");
|
||||
return;
|
||||
}
|
||||
index = adduserfunc(tokensymbol());
|
||||
addopone(OP_SHOW, index + 19);
|
||||
return;
|
||||
}
|
||||
if (arg > 0)
|
||||
addopone(OP_SHOW, arg);
|
||||
else
|
||||
warning("Unknown parameter for show statement");
|
||||
}
|
||||
|
||||
|
||||
@@ -2542,8 +2582,9 @@ getid(char *buf)
|
||||
* Define a symbol name to be of the specified symbol type. The scope
|
||||
* of a static variable with the same name is terminated if symtype is
|
||||
* global or if symtype is static and the old variable is at the same
|
||||
* level. A scan error occurs if the name is already in use in an
|
||||
* incompatible manner.
|
||||
* level. Warnings are issued when a global or local variable is
|
||||
* redeclared and when in the same body the variable will be accessible only
|
||||
^ with the appropriate specfier.
|
||||
*/
|
||||
static void
|
||||
definesymbol(char *name, int symtype)
|
||||
@@ -2552,25 +2593,48 @@ definesymbol(char *name, int symtype)
|
||||
case SYM_STATIC:
|
||||
if (symtype == SYM_GLOBAL || symtype == SYM_STATIC)
|
||||
endscope(name, symtype == SYM_GLOBAL);
|
||||
/*FALLTHRU*/
|
||||
case SYM_UNDEFINED:
|
||||
break;
|
||||
case SYM_GLOBAL:
|
||||
if (symtype == SYM_LOCAL)
|
||||
(void) addlocal(name);
|
||||
else
|
||||
(void) addglobal(name, (symtype == SYM_STATIC));
|
||||
if (symtype == SYM_GLOBAL && conf->redecl_warn) {
|
||||
warning("redeclaraion of global \"%s\"",
|
||||
name);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
case SYM_LOCAL:
|
||||
if (symtype == SYM_LOCAL)
|
||||
if (symtype == SYM_LOCAL && conf->redecl_warn) {
|
||||
warning("redeclaraion of local \"%s\"",
|
||||
name);
|
||||
return;
|
||||
/*FALLTHRU*/
|
||||
}
|
||||
if (symtype == SYM_GLOBAL && conf->dupvar_warn) {
|
||||
warning("both local and global \"%s\" defined", name);
|
||||
break;
|
||||
}
|
||||
if (conf->dupvar_warn) {
|
||||
warning("both local and static \"%s\" defined", name);
|
||||
}
|
||||
break;
|
||||
case SYM_PARAM:
|
||||
scanerror(T_COMMA,
|
||||
"Variable \"%s\" is already defined", name);
|
||||
return;
|
||||
if (symtype == SYM_LOCAL && conf->dupvar_warn) {
|
||||
warning("both local and parameter \"%s\" defined",
|
||||
name);
|
||||
break;
|
||||
}
|
||||
if (symtype == SYM_GLOBAL && conf->dupvar_warn) {
|
||||
warning("both global and parameter \"%s\" defined",
|
||||
name);
|
||||
break;
|
||||
}
|
||||
if (conf->dupvar_warn) {
|
||||
warning("both static and parameter \"%s\" defined", name);
|
||||
}
|
||||
}
|
||||
|
||||
if (symtype == SYM_LOCAL)
|
||||
(void) addlocal(name);
|
||||
else
|
||||
(void) addglobal(name, (symtype == SYM_STATIC));
|
||||
}
|
||||
|
||||
|
||||
@@ -2588,21 +2652,28 @@ definesymbol(char *name, int symtype)
|
||||
static void
|
||||
usesymbol(char *name, int autodef)
|
||||
{
|
||||
int type;
|
||||
|
||||
type = symboltype(name);
|
||||
if (autodef == T_GLOBAL) {
|
||||
addopptr(OP_GLOBALADDR, (char *) addglobal(name, FALSE));
|
||||
return;
|
||||
if (type == SYM_GLOBAL) {
|
||||
warning("Unnecessary global specifier");
|
||||
}
|
||||
addopptr(OP_GLOBALADDR, (char *) addglobal(name, FALSE));
|
||||
return;
|
||||
}
|
||||
if (autodef == T_STATIC) {
|
||||
addopptr(OP_GLOBALADDR, (char *) addglobal(name, TRUE));
|
||||
return;
|
||||
}
|
||||
if (autodef == T_LOCAL) {
|
||||
if (symboltype(name) == SYM_PARAM) {
|
||||
scanerror(T_COMMA,
|
||||
"Variable \"%s\" is already defined", name);
|
||||
return;
|
||||
}
|
||||
addopone(OP_LOCALADDR, addlocal(name));
|
||||
return;
|
||||
if (type == SYM_LOCAL) {
|
||||
warning("Unnecessary local specifier");
|
||||
}
|
||||
addopone(OP_LOCALADDR, addlocal(name));
|
||||
return;
|
||||
}
|
||||
switch (symboltype(name)) {
|
||||
switch (type) {
|
||||
case SYM_LOCAL:
|
||||
addopone(OP_LOCALADDR, (long) findlocal(name));
|
||||
return;
|
||||
|
156
config.c
156
config.c
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.17 $
|
||||
* @(#) $Id: config.c,v 29.17 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Revision: 29.22 $
|
||||
* @(#) $Id: config.c,v 29.22 2006/06/25 22:05:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.c,v $
|
||||
*
|
||||
* Under source code control: 1991/07/20 00:21:56
|
||||
@@ -97,6 +97,9 @@ NAMETYPE configs[] = {
|
||||
{"compile_custom", CONFIG_COMPILE_CUSTOM},
|
||||
{"allow_custom", CONFIG_ALLOW_CUSTOM},
|
||||
{"version", CONFIG_VERSION},
|
||||
{"baseb", CONFIG_BASEB},
|
||||
{"redecl_warn", CONFIG_REDECL_WARN},
|
||||
{"dupvar_warn", CONFIG_DUPVAR_WARN},
|
||||
{NULL, 0}
|
||||
};
|
||||
|
||||
@@ -159,7 +162,10 @@ CONFIG oldstd = { /* backward compatible standard configuration */
|
||||
FALSE, /* compiled without -DCUSTOM */
|
||||
#endif
|
||||
&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 */
|
||||
MODE_INITIAL, /* current output mode */
|
||||
@@ -216,7 +222,10 @@ CONFIG newstd = { /* new non-backward compatible configuration */
|
||||
FALSE, /* compiled without -DCUSTOM */
|
||||
#endif
|
||||
&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 */
|
||||
|
||||
@@ -405,7 +414,8 @@ lookup_name(NAMETYPE *set, long val)
|
||||
/*
|
||||
* Check whether VALUE at vp is a LEN (32-bit signed integer) and if so,
|
||||
* copy that integer to lp.
|
||||
* Return: 1, 2, 0, or -1 XXX
|
||||
*
|
||||
* Return: 1 ==> not an integer, 2 ==> int > 2^31, 0 ==> OK, -1 ==> error
|
||||
*/
|
||||
|
||||
static int
|
||||
@@ -527,7 +537,7 @@ setconfig(int type, VALUE *vp)
|
||||
break;
|
||||
|
||||
case CONFIG_MUL2:
|
||||
if (getlen(vp, &len)) {
|
||||
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||
math_error("Bad value for mul2");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
@@ -537,7 +547,7 @@ setconfig(int type, VALUE *vp)
|
||||
break;
|
||||
|
||||
case CONFIG_SQ2:
|
||||
if (getlen(vp, &len)) {
|
||||
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||
math_error("Bad value for sq2");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
@@ -547,7 +557,7 @@ setconfig(int type, VALUE *vp)
|
||||
break;
|
||||
|
||||
case CONFIG_POW2:
|
||||
if (getlen(vp, &len)) {
|
||||
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||
math_error("Bad value for pow2");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
@@ -557,7 +567,7 @@ setconfig(int type, VALUE *vp)
|
||||
break;
|
||||
|
||||
case CONFIG_REDC2:
|
||||
if (getlen(vp, &len)) {
|
||||
if (getlen(vp, &len) || len < 0 || len == 1) {
|
||||
math_error("Bad value for redc2");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
@@ -899,6 +909,38 @@ setconfig(int type, VALUE *vp)
|
||||
math_error("The version config parameter is read-only");
|
||||
/*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;
|
||||
|
||||
default:
|
||||
math_error("Setting illegal config parameter");
|
||||
/*NOTREACHED*/
|
||||
@@ -1110,20 +1152,12 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
break;
|
||||
|
||||
case CONFIG_TILDE:
|
||||
if (cfg->tilde_ok) {
|
||||
vp->v_num = itoq(1);
|
||||
} else {
|
||||
vp->v_num = itoq(0);
|
||||
}
|
||||
return;
|
||||
i = (cfg->tilde_ok ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CONFIG_TAB:
|
||||
if (cfg->tab_ok) {
|
||||
vp->v_num = itoq(1);
|
||||
} else {
|
||||
vp->v_num = itoq(0);
|
||||
}
|
||||
return;
|
||||
i = (cfg->tab_ok ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CONFIG_QUOMOD:
|
||||
i = cfg->quomod;
|
||||
@@ -1162,20 +1196,12 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
break;
|
||||
|
||||
case CONFIG_LEADZERO:
|
||||
if (cfg->leadzero) {
|
||||
vp->v_num = itoq(1);
|
||||
} else {
|
||||
vp->v_num = itoq(0);
|
||||
}
|
||||
return;
|
||||
i = (cfg->leadzero ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CONFIG_FULLZERO:
|
||||
if (cfg->fullzero) {
|
||||
vp->v_num = itoq(1);
|
||||
} else {
|
||||
vp->v_num = itoq(0);
|
||||
}
|
||||
return;
|
||||
i = (cfg->fullzero ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CONFIG_MAXSCAN:
|
||||
i = cfg->maxscancount;
|
||||
@@ -1196,12 +1222,8 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
break;
|
||||
|
||||
case CONFIG_BLKVERBOSE:
|
||||
if (cfg->blkverbose) {
|
||||
vp->v_num = itoq(1);
|
||||
} else {
|
||||
vp->v_num = itoq(0);
|
||||
}
|
||||
return;
|
||||
i = (cfg->blkverbose ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CONFIG_BLKBASE:
|
||||
vp->v_type = V_STR;
|
||||
@@ -1236,12 +1258,8 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
break;
|
||||
|
||||
case CONFIG_VERBOSE_QUIT:
|
||||
if (cfg->verbose_quit) {
|
||||
vp->v_num = itoq(1);
|
||||
} else {
|
||||
vp->v_num = itoq(0);
|
||||
}
|
||||
return;
|
||||
i = (cfg->verbose_quit ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CONFIG_CTRL_D:
|
||||
vp->v_type = V_STR;
|
||||
@@ -1272,40 +1290,24 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
return;
|
||||
|
||||
case CONFIG_WINDOWS:
|
||||
if (cfg->windows) {
|
||||
vp->v_num = itoq(1);
|
||||
} else {
|
||||
vp->v_num = itoq(0);
|
||||
}
|
||||
return;
|
||||
i = (cfg->windows ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CONFIG_CYGWIN:
|
||||
if (cfg->cygwin) {
|
||||
vp->v_num = itoq(1);
|
||||
} else {
|
||||
vp->v_num = itoq(0);
|
||||
}
|
||||
return;
|
||||
i = (cfg->cygwin ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CONFIG_COMPILE_CUSTOM:
|
||||
if (cfg->compile_custom) {
|
||||
vp->v_num = itoq(1);
|
||||
} else {
|
||||
vp->v_num = itoq(0);
|
||||
}
|
||||
return;
|
||||
i = (cfg->compile_custom ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CONFIG_ALLOW_CUSTOM:
|
||||
/* firewall */
|
||||
if (cfg->allow_custom == NULL) {
|
||||
cfg->allow_custom = &allow_custom;
|
||||
}
|
||||
if (*(cfg->allow_custom)) {
|
||||
vp->v_num = itoq(1);
|
||||
} else {
|
||||
vp->v_num = itoq(0);
|
||||
}
|
||||
return;
|
||||
i = (*(cfg->allow_custom) ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CONFIG_VERSION:
|
||||
vp->v_type = V_STR;
|
||||
@@ -1316,6 +1318,18 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
||||
}
|
||||
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;
|
||||
|
||||
default:
|
||||
math_error("Getting illegal CONFIG element");
|
||||
/*NOTREACHED*/
|
||||
@@ -1420,5 +1434,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 &&
|
||||
strcmp(cfg1->version, cfg2->version) != 0);
|
||||
strcmp(cfg1->version, cfg2->version) != 0) ||
|
||||
|
||||
cfg1->baseb != cfg2->baseb;
|
||||
}
|
||||
|
14
config.h
14
config.h
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.17 $
|
||||
* @(#) $Id: config.h,v 29.17 2004/02/25 23:56:13 chongo Exp $
|
||||
* @(#) $Revision: 29.20 $
|
||||
* @(#) $Id: config.h,v 29.20 2006/06/25 22:05:38 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/config.h,v $
|
||||
*
|
||||
* Under source code control: 1995/11/01 22:20:17
|
||||
@@ -94,6 +94,9 @@
|
||||
#define CONFIG_CYGWIN 40
|
||||
#define CONFIG_COMPILE_CUSTOM 41
|
||||
#define CONFIG_ALLOW_CUSTOM 42
|
||||
#define CONFIG_BASEB 43
|
||||
#define CONFIG_REDECL_WARN 44
|
||||
#define CONFIG_DUPVAR_WARN 45
|
||||
|
||||
|
||||
/*
|
||||
@@ -150,8 +153,8 @@ struct config {
|
||||
BOOL blkverbose; /* TRUE => print all lines if a block */
|
||||
int blkbase; /* block output base */
|
||||
int blkfmt; /* block output style */
|
||||
long calc_debug; /* internal debug, see CALC_DEBUG_XXX below */
|
||||
long resource_debug; /* resource debug, see RSCDBG_XXX below */
|
||||
long calc_debug; /* internal debug, see CALC_DEBUG_XYZ below */
|
||||
long resource_debug; /* resource debug, see RSCDBG_XYZ below */
|
||||
long user_debug; /* user defined debug value: 0 default */
|
||||
BOOL verbose_quit; /* TRUE => print Quit or abort executed msg */
|
||||
int ctrl_d; /* see CTRL_D_xyz below */
|
||||
@@ -162,6 +165,9 @@ struct config {
|
||||
BOOL compile_custom; /* TRUE => compiled with -DCUSTOM */
|
||||
BOOL *allow_custom; /* ptr to if custom functions are allowed */
|
||||
char *version; /* calc version string */
|
||||
int baseb; /* base for calculations */
|
||||
BOOL redecl_warn; /* TRUE => warn of redeclating variables */
|
||||
BOOL dupvar_warn; /* TRUE => warn of var name collisions */
|
||||
};
|
||||
typedef struct config CONFIG;
|
||||
|
||||
|
@@ -17,8 +17,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.23 $
|
||||
# @(#) $Id: Makefile,v 29.23 2003/01/14 01:58:18 chongo Exp $
|
||||
# @(#) $Revision: 29.24 $
|
||||
# @(#) $Id: Makefile,v 29.24 2006/06/26 05:46:06 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/Makefile,v $
|
||||
#
|
||||
# Under source code control: 1999/11/29 11:10:26
|
||||
@@ -349,6 +349,10 @@ clean:
|
||||
clobber:
|
||||
-rm -f ${TARGETS}
|
||||
|
||||
# install everything
|
||||
#
|
||||
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||
#
|
||||
install: all
|
||||
-${Q}if [ ! -d $T${BINDIR} ]; then \
|
||||
echo mkdir $T${BINDIR}; \
|
||||
@@ -389,6 +393,31 @@ install: all
|
||||
fi; \
|
||||
done
|
||||
|
||||
# Try to remove everything that was installed
|
||||
#
|
||||
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||
#
|
||||
uninstall:
|
||||
-${Q}for i in ${SCRIPT} /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
if [ -f "$T${SCRIPTDIR}/$$i" ]; then \
|
||||
rm -f "$T${SCRIPTDIR}/$$i"; \
|
||||
if [ -f "$T${SCRIPTDIR}/$$i" ]; then \
|
||||
echo "cannot uninstall $T${SCRIPTDIR}/$$i"; \
|
||||
else \
|
||||
echo "uninstalled $T${SCRIPTDIR}/$$i"; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
-${Q}for i in ${SCRIPTDIR} ${BINDIR}; do \
|
||||
if [ -d "$T$$i" ]; then \
|
||||
rmdir "$T$$i" 2>/dev/null; \
|
||||
echo "cleaned up $T$$i"; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
4dsphere: 4dsphere.calc
|
||||
|
@@ -18,8 +18,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.24 $
|
||||
# @(#) $Id: Makefile,v 29.24 2004/07/29 08:38:18 chongo Exp $
|
||||
# @(#) $Revision: 29.25 $
|
||||
# @(#) $Id: Makefile,v 29.25 2006/06/26 05:46:06 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/Makefile,v $
|
||||
#
|
||||
# Under source code control: 1997/03/09 02:28:54
|
||||
@@ -599,6 +599,10 @@ clobber:
|
||||
-rm -f ${TARGETS}
|
||||
rm -f .all Makefile.tmp Makefile.bak
|
||||
|
||||
# install everything
|
||||
#
|
||||
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||
#
|
||||
install: all
|
||||
-${Q}if [ ! -d $T${INCDIR} ]; then \
|
||||
echo mkdir $T${INCDIR}; \
|
||||
@@ -688,7 +692,7 @@ install: all
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
if ${CMP} -s tmp $T${CUSTOMINCDIR}/$$i; then \
|
||||
if ${CMP} -s "$$i" $T${CUSTOMINCDIR}/$$i; then \
|
||||
true; \
|
||||
else \
|
||||
rm -f $T${CUSTOMINCDIR}/$$i.new; \
|
||||
@@ -698,7 +702,6 @@ install: all
|
||||
echo "installed $T${CUSTOMINCDIR}/$$i"; \
|
||||
fi; \
|
||||
done
|
||||
-${Q}rm -f tmp
|
||||
-${Q}for i in ${CUSTOM_CALC_FILES} /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
@@ -741,6 +744,66 @@ install: all
|
||||
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
|
||||
|
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.7 $
|
||||
* @(#) $Id: c_argv.c,v 29.7 2006/05/22 19:04:45 chongo Exp $
|
||||
* @(#) $Revision: 29.8 $
|
||||
* @(#) $Id: c_argv.c,v 29.8 2006/06/25 22:06:23 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_argv.c,v $
|
||||
*
|
||||
* Under source code control: 1997/03/09 20:27:37
|
||||
@@ -123,12 +123,9 @@ c_argv(char UNUSED *name, int count, VALUE **vals)
|
||||
case V_BLOCK: /* memory block */
|
||||
type = "octet_block";
|
||||
break;
|
||||
#if 0
|
||||
/* XXX - V_OCTET is subject to change */
|
||||
case V_OCTET: /* octet (unsigned char) */
|
||||
type = "octet";
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
type = "unknown";
|
||||
break;
|
||||
|
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.3 $
|
||||
* @(#) $Id: c_pmodm127.c,v 29.3 2004/07/29 09:48:31 chongo Exp $
|
||||
* @(#) $Revision: 29.5 $
|
||||
* @(#) $Id: c_pmodm127.c,v 29.5 2006/06/25 22:08:42 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/custom/RCS/c_pmodm127.c,v $
|
||||
*
|
||||
* Under source code control: 2004/07/28 22:12:25
|
||||
@@ -156,7 +156,11 @@ c_pmodm127(char UNUSED *name, int UNUSED count, VALUE **vals)
|
||||
#else
|
||||
zsquare(result.v_num->num, &temp); /* square */
|
||||
#endif
|
||||
/* XXX - we could manually shift to speed up a tiny bit */
|
||||
/*
|
||||
* We could manually shift here, but this would o speed
|
||||
* up the operation only a very tiny bit at the expense
|
||||
* of a bunch of special code.
|
||||
*/
|
||||
zfree(result.v_num->num);
|
||||
zshift(temp, 1, &result.v_num->num); /* times 2 */
|
||||
zfree(temp);
|
||||
|
38
file.c
38
file.c
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.15 $
|
||||
* @(#) $Id: file.c,v 29.15 2006/05/22 19:04:45 chongo Exp $
|
||||
* @(#) $Revision: 29.16 $
|
||||
* @(#) $Id: file.c,v 29.16 2006/08/20 15:01:30 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/file.c,v $
|
||||
*
|
||||
* Under source code control: 1991/07/20 00:21:56
|
||||
@@ -746,10 +746,10 @@ flushall(void)
|
||||
* given:
|
||||
* id file to read from
|
||||
* flags read flags (see above)
|
||||
* retptr returned pointer to string
|
||||
* retstr returned pointer to string
|
||||
*/
|
||||
int
|
||||
readid(FILEID id, int flags, char **retptr)
|
||||
readid(FILEID id, int flags, STRING **retstr)
|
||||
{
|
||||
FILEIO *fiop; /* file structure */
|
||||
FILE *fp;
|
||||
@@ -761,6 +761,7 @@ readid(FILEID id, int flags, char **retptr)
|
||||
int c;
|
||||
BOOL nlstop, nullstop, wsstop, rmstop, done;
|
||||
FILEPOS fpos;
|
||||
STRING *newstr;
|
||||
|
||||
totlen = 0;
|
||||
str = NULL;
|
||||
@@ -831,7 +832,10 @@ readid(FILEID id, int flags, char **retptr)
|
||||
if ((nullstop && c == '\0') && !rmstop)
|
||||
str[totlen - 1] = '\0';
|
||||
str[totlen] = '\0';
|
||||
*retptr = str;
|
||||
newstr = stralloc();
|
||||
newstr->s_len = totlen;
|
||||
newstr->s_str = str;
|
||||
*retstr = newstr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -895,7 +899,7 @@ printid(FILEID id, int flags)
|
||||
math_chr('"');
|
||||
return 0;
|
||||
}
|
||||
math_fmt("FILE %d \"%s\" (%s, ", id, fiop->name, fiop->mode);
|
||||
math_fmt("FILE %d \"%s\" (%s", id, fiop->name, fiop->mode);
|
||||
|
||||
/*
|
||||
* print file position
|
||||
@@ -904,11 +908,13 @@ printid(FILEID id, int flags)
|
||||
fp = fiop->fp;
|
||||
|
||||
if (get_open_pos(fp, &pos) < 0) {
|
||||
math_str("Error while determining file position!)");
|
||||
if (fileno(fp) > 2)
|
||||
math_str("Error while determining file position!");
|
||||
math_chr(')');
|
||||
return 0;
|
||||
}
|
||||
|
||||
math_str("pos ");
|
||||
math_str(", pos ");
|
||||
zprintval(pos, 0, 0);
|
||||
zfree(pos);
|
||||
|
||||
@@ -1233,10 +1239,13 @@ idungetc(FILEID id, int ch)
|
||||
* str string to write
|
||||
*/
|
||||
int
|
||||
idfputs(FILEID id, char *str)
|
||||
idfputs(FILEID id, STRING *str)
|
||||
{
|
||||
FILEIO *fiop;
|
||||
FILEPOS fpos;
|
||||
FILE *fp;
|
||||
char *c;
|
||||
long len;
|
||||
|
||||
/* get the file info pointer */
|
||||
fiop = findid(id, TRUE);
|
||||
@@ -1251,14 +1260,13 @@ idfputs(FILEID id, char *str)
|
||||
|
||||
fiop->action = 'w';
|
||||
|
||||
/* set output to file */
|
||||
math_setfp(fiop->fp);
|
||||
fp = fiop->fp;
|
||||
len = str->s_len;
|
||||
c = str->s_str;
|
||||
|
||||
/* write the string */
|
||||
math_str(str);
|
||||
while (len-- > 0)
|
||||
fputc(*c++, fp);
|
||||
|
||||
/* restore output to stdout */
|
||||
math_setfp(stdout);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
241
func.c
241
func.c
@@ -19,8 +19,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.25 $
|
||||
* @(#) $Id: func.c,v 29.25 2006/05/21 07:28:54 chongo Exp $
|
||||
* @(#) $Revision: 29.30 $
|
||||
* @(#) $Id: func.c,v 29.30 2006/08/20 15:01:30 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/func.c,v $
|
||||
*
|
||||
* Under source code control: 1990/02/15 01:48:15
|
||||
@@ -357,6 +357,24 @@ f_str(VALUE *vp)
|
||||
}
|
||||
|
||||
|
||||
static VALUE
|
||||
f_estr(VALUE *vp)
|
||||
{
|
||||
VALUE result;
|
||||
char *cp;
|
||||
|
||||
/* initialize result */
|
||||
result.v_type = V_STR;
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
math_divertio();
|
||||
printestr(vp);
|
||||
cp = math_getdivertedio();
|
||||
result.v_str = makestring(cp);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static VALUE
|
||||
f_name(VALUE *vp)
|
||||
{
|
||||
@@ -871,7 +889,7 @@ f_nextcand(int count, NUMBER **vals)
|
||||
ans->num = tmp;
|
||||
return ans;
|
||||
}
|
||||
return qlink(&_qzero_);;
|
||||
return qlink(&_qzero_);
|
||||
}
|
||||
|
||||
|
||||
@@ -1694,14 +1712,13 @@ sumlistitems(LIST *lp)
|
||||
NULL_VALUE, NULL_VALUE);
|
||||
break;
|
||||
default:
|
||||
copyvalue(vp, &term);
|
||||
addvalue(&sum, vp, &tmp);
|
||||
freevalue(&sum);
|
||||
if (tmp.v_type < 0)
|
||||
return tmp;
|
||||
sum = tmp;
|
||||
continue;
|
||||
}
|
||||
if (sum.v_type == V_NULL) {
|
||||
sum = term;
|
||||
continue;
|
||||
}
|
||||
if (term.v_type == V_NULL)
|
||||
continue;
|
||||
addvalue(&sum, &term, &tmp);
|
||||
freevalue(&sum);
|
||||
freevalue(&term);
|
||||
@@ -1728,7 +1745,6 @@ f_sum(int count, VALUE **vals)
|
||||
sum.v_subtype = V_NOSUBTYPE;
|
||||
term.v_type = V_NULL;
|
||||
term.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
while (count-- > 0) {
|
||||
vp = *vals++;
|
||||
switch(vp->v_type) {
|
||||
@@ -1740,24 +1756,19 @@ f_sum(int count, VALUE **vals)
|
||||
NULL_VALUE, NULL_VALUE);
|
||||
break;
|
||||
default:
|
||||
copyvalue(vp, &term);
|
||||
}
|
||||
if (sum.v_type == V_NULL) {
|
||||
sum = term;
|
||||
continue;
|
||||
}
|
||||
if (term.v_type == V_NULL)
|
||||
continue;
|
||||
if (term.v_type < 0) {
|
||||
freevalue(&sum);
|
||||
return term;
|
||||
addvalue(&sum, vp, &tmp);
|
||||
freevalue(&sum);
|
||||
if (tmp.v_type < 0)
|
||||
return tmp;
|
||||
sum = tmp;
|
||||
continue;
|
||||
}
|
||||
addvalue(&sum, &term, &tmp);
|
||||
freevalue(&term);
|
||||
freevalue(&sum);
|
||||
sum = tmp;
|
||||
if (sum.v_type < 0)
|
||||
return sum;
|
||||
break;
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
@@ -1904,26 +1915,70 @@ f_hnrmod(NUMBER *val1, NUMBER *val2, NUMBER *val3, NUMBER *val4)
|
||||
return res;
|
||||
}
|
||||
|
||||
VALUE
|
||||
ssqlistitems(LIST *lp)
|
||||
{
|
||||
LISTELEM *ep;
|
||||
VALUE *vp;
|
||||
VALUE term;
|
||||
VALUE tmp;
|
||||
VALUE sum;
|
||||
|
||||
/* initialize VALUEs */
|
||||
term.v_type = V_NULL;
|
||||
term.v_subtype = V_NOSUBTYPE;
|
||||
tmp.v_type = V_NULL;
|
||||
tmp.v_subtype = V_NOSUBTYPE;
|
||||
sum.v_type = V_NULL;
|
||||
sum.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
for (ep = lp->l_first; ep; ep = ep->e_next) {
|
||||
vp = &ep->e_value;
|
||||
if (vp->v_type == V_LIST) {
|
||||
term = ssqlistitems(vp->v_list);
|
||||
} else {
|
||||
squarevalue(vp, &term);
|
||||
}
|
||||
addvalue(&sum, &term, &tmp);
|
||||
freevalue(&sum);
|
||||
freevalue(&term);
|
||||
sum = tmp;
|
||||
if (sum.v_type < 0)
|
||||
break;
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
f_ssq(int count, VALUE **vals)
|
||||
{
|
||||
VALUE result, tmp1, tmp2;
|
||||
VALUE tmp;
|
||||
VALUE sum;
|
||||
VALUE term;
|
||||
VALUE *vp;
|
||||
|
||||
/* initialize VALUEs */
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
tmp1.v_subtype = V_NOSUBTYPE;
|
||||
tmp2.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
squarevalue(*vals++, &result);
|
||||
while (--count > 0) {
|
||||
squarevalue(*vals++, &tmp1);
|
||||
addvalue(&tmp1, &result, &tmp2);
|
||||
freevalue(&tmp1);
|
||||
freevalue(&result);
|
||||
result = tmp2;
|
||||
tmp.v_type = V_NULL;
|
||||
tmp.v_subtype = V_NOSUBTYPE;
|
||||
sum.v_type = V_NULL;
|
||||
sum.v_subtype = V_NOSUBTYPE;
|
||||
term.v_type = V_NULL;
|
||||
term.v_subtype = V_NOSUBTYPE;
|
||||
while (count-- > 0) {
|
||||
vp = *vals++;
|
||||
if (vp->v_type == V_LIST) {
|
||||
term = ssqlistitems(vp->v_list);
|
||||
} else {
|
||||
squarevalue(vp, &term);
|
||||
}
|
||||
addvalue(&sum, &term, &tmp);
|
||||
freevalue(&term);
|
||||
freevalue(&sum);
|
||||
sum = tmp;
|
||||
if (sum.v_type < 0)
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
return sum;
|
||||
}
|
||||
|
||||
|
||||
@@ -3521,6 +3576,67 @@ f_mod(int count, VALUE **vals)
|
||||
return res;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
f_quomod(int count, VALUE **vals)
|
||||
{
|
||||
VALUE *v1, *v2, *v3, *v4, *v5;
|
||||
VALUE result;
|
||||
long rnd;
|
||||
BOOL res;
|
||||
short s3, s4; /* to preserve subtypes of v3, v4 */
|
||||
|
||||
v1 = vals[0];
|
||||
v2 = vals[1];
|
||||
v3 = vals[2];
|
||||
v4 = vals[3];
|
||||
|
||||
if (v3->v_type != V_ADDR || v4->v_type != V_ADDR ||
|
||||
v3->v_addr == v4->v_addr)
|
||||
return error_value(E_QUOMOD1);
|
||||
if (count == 5) {
|
||||
v5 = vals[4];
|
||||
if (v5->v_type == V_ADDR)
|
||||
v5 = v5->v_addr;
|
||||
if (v5->v_type != V_NUM || qisfrac(v5->v_num) ||
|
||||
qisneg(v5->v_num) || zge31b(v5->v_num->num))
|
||||
return error_value(E_QUOMOD2);
|
||||
rnd = qtoi(v5->v_num);
|
||||
} else
|
||||
rnd = conf->quomod;
|
||||
|
||||
if (v1->v_type == V_ADDR)
|
||||
v1 = v1->v_addr;
|
||||
if (v2->v_type == V_ADDR)
|
||||
v2 = v2->v_addr;
|
||||
v3 = v3->v_addr;
|
||||
v4 = v4->v_addr;
|
||||
|
||||
if (v1->v_type != V_NUM || v2->v_type != V_NUM ||
|
||||
(v3->v_type != V_NUM && v3->v_type != V_NULL) ||
|
||||
(v4->v_type != V_NUM && v4->v_type != V_NULL))
|
||||
return error_value(E_QUOMOD2);
|
||||
|
||||
s3 = v3->v_subtype;
|
||||
s4 = v4->v_subtype;
|
||||
|
||||
if ((s3 | s4) & V_NOASSIGNTO)
|
||||
return error_value(E_QUOMOD3);
|
||||
|
||||
freevalue(v3);
|
||||
freevalue(v4);
|
||||
|
||||
v3->v_type = V_NUM;
|
||||
v4->v_type = V_NUM;
|
||||
|
||||
v3->v_subtype = s3;
|
||||
v4->v_subtype = s4;
|
||||
|
||||
res = qquomod(v1->v_num, v2->v_num, &v3->v_num, &v4->v_num, rnd);
|
||||
result.v_type = V_NUM;
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
result.v_num = res ? qlink(&_qone_) : qlink(&_qzero_);
|
||||
return result;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
f_mmin(VALUE *v1, VALUE *v2)
|
||||
@@ -5738,7 +5854,7 @@ strscan(char *s, int count, VALUE **vals)
|
||||
static int
|
||||
filescan(FILEID id, int count, VALUE **vals)
|
||||
{
|
||||
char *str;
|
||||
STRING *str;
|
||||
int i;
|
||||
int n = 0;
|
||||
VALUE val;
|
||||
@@ -5759,7 +5875,7 @@ filescan(FILEID id, int count, VALUE **vals)
|
||||
if (i > 0)
|
||||
return EOF;
|
||||
n++;
|
||||
val.v_str = makenewstring(str);
|
||||
val.v_str = str;
|
||||
result = f_eval(&val);
|
||||
var = *vals++;
|
||||
if (var->v_type == V_ADDR) {
|
||||
@@ -6006,7 +6122,7 @@ f_fputs(int count, VALUE **vals)
|
||||
return error_value(E_FPUTS2);
|
||||
}
|
||||
for (i = 1; i < count; i++) {
|
||||
err = idfputs(vals[0]->v_file, vals[i]->v_str->s_str);
|
||||
err = idfputs(vals[0]->v_file, vals[i]->v_str);
|
||||
if (err > 0)
|
||||
return error_value(E_FPUTS3);
|
||||
}
|
||||
@@ -6153,7 +6269,7 @@ static VALUE
|
||||
f_fgetline(VALUE *vp)
|
||||
{
|
||||
VALUE result;
|
||||
char *str;
|
||||
STRING *str;
|
||||
int i;
|
||||
|
||||
/* initialize VALUE */
|
||||
@@ -6167,7 +6283,7 @@ f_fgetline(VALUE *vp)
|
||||
result.v_type = V_NULL;
|
||||
if (i == 0) {
|
||||
result.v_type = V_STR;
|
||||
result.v_str = makestring(str);
|
||||
result.v_str = str;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -6177,7 +6293,7 @@ static VALUE
|
||||
f_fgets(VALUE *vp)
|
||||
{
|
||||
VALUE result;
|
||||
char *str;
|
||||
STRING *str;
|
||||
int i;
|
||||
|
||||
/* initialize VALUE */
|
||||
@@ -6191,7 +6307,7 @@ f_fgets(VALUE *vp)
|
||||
result.v_type = V_NULL;
|
||||
if (i == 0) {
|
||||
result.v_type = V_STR;
|
||||
result.v_str = makestring(str);
|
||||
result.v_str = str;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -6201,7 +6317,7 @@ static VALUE
|
||||
f_fgetstr(VALUE *vp)
|
||||
{
|
||||
VALUE result;
|
||||
char *str;
|
||||
STRING *str;
|
||||
int i;
|
||||
|
||||
/* initialize VALUE */
|
||||
@@ -6215,7 +6331,7 @@ f_fgetstr(VALUE *vp)
|
||||
result.v_type = V_NULL;
|
||||
if (i == 0) {
|
||||
result.v_type = V_STR;
|
||||
result.v_str = makestring(str);
|
||||
result.v_str = str;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -6225,7 +6341,7 @@ static VALUE
|
||||
f_fgetfield(VALUE *vp)
|
||||
{
|
||||
VALUE result;
|
||||
char *str;
|
||||
STRING *str;
|
||||
int i;
|
||||
|
||||
/* initialize VALUE */
|
||||
@@ -6239,7 +6355,32 @@ f_fgetfield(VALUE *vp)
|
||||
result.v_type = V_NULL;
|
||||
if (i == 0) {
|
||||
result.v_type = V_STR;
|
||||
result.v_str = makestring(str);
|
||||
result.v_str = str;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
f_fgetfile(VALUE *vp)
|
||||
{
|
||||
VALUE result;
|
||||
STRING *str;
|
||||
int i;
|
||||
|
||||
/* initialize VALUE */
|
||||
result.v_subtype = V_NOSUBTYPE;
|
||||
|
||||
if (vp->v_type != V_FILE)
|
||||
return error_value(E_FGETFILE1);
|
||||
i = readid(vp->v_file, 0, &str);
|
||||
if (i == 1)
|
||||
return error_value(E_FGETFILE2);
|
||||
if (i == 3)
|
||||
return error_value(E_FGETFILE3);
|
||||
result.v_type = V_NULL;
|
||||
if (i == 0) {
|
||||
result.v_type = V_STR;
|
||||
result.v_str = str;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -8076,6 +8217,8 @@ static CONST struct builtin builtins[] = {
|
||||
"set or read calc_errno"},
|
||||
{"error", 0, 1, 0, OP_NOP, 0, f_error,
|
||||
"generate error value"},
|
||||
{"estr", 1, 1, 0, OP_NOP, 0, f_estr,
|
||||
"exact text string representation of value"},
|
||||
{"euler", 1, 1, 0, OP_NOP, 0, f_euler,
|
||||
"Euler number"},
|
||||
{"eval", 1, 1, 0, OP_NOP, 0, f_eval,
|
||||
@@ -8106,6 +8249,8 @@ static CONST struct builtin builtins[] = {
|
||||
"read next char from file"},
|
||||
{"fgetfield", 1, 1, 0, OP_NOP, 0, f_fgetfield,
|
||||
"read next white-space delimited field from file"},
|
||||
{"fgetfile", 1, 1, 0, OP_NOP, 0, f_fgetfile,
|
||||
"read to end of file"},
|
||||
{"fgetline", 1, 1, 0, OP_NOP, 0, f_fgetline,
|
||||
"read next line from file, newline removed"},
|
||||
{"fgets", 1, 1, 0, OP_NOP, 0, f_fgets,
|
||||
@@ -8374,7 +8519,7 @@ static CONST struct builtin builtins[] = {
|
||||
"define an environment variable"},
|
||||
{"quo", 2, 3, 0, OP_NOP, 0, f_quo,
|
||||
"integer quotient of a by b, rounding type c"},
|
||||
{"quomod", 4, 4, 0, OP_QUOMOD, 0, 0,
|
||||
{"quomod", 4, 5, FA, OP_NOP, 0, f_quomod,
|
||||
"set c and d to quotient and remainder of a\n\t\t\tdivided by b"},
|
||||
{"rand", 0, 2, 0, OP_NOP, f_rand, 0,
|
||||
"additive 55 random number [0,2^64), [0,a), or [a,b)"},
|
||||
|
7
hash.c
7
hash.c
@@ -17,8 +17,8 @@
|
||||
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* @(#) $Revision: 29.8 $
|
||||
* @(#) $Id: hash.c,v 29.8 2006/05/19 15:26:10 chongo Exp $
|
||||
* @(#) $Revision: 29.10 $
|
||||
* @(#) $Id: hash.c,v 29.10 2006/06/20 10:25:45 chongo Exp $
|
||||
* @(#) $Source: /usr/local/src/cmd/calc/RCS/hash.c,v $
|
||||
*
|
||||
* Under source code control: 1995/11/23 05:13:11
|
||||
@@ -995,6 +995,9 @@ hash_value(int type, void *v, HASH *state)
|
||||
state = hash_bool(type, FALSE, state);
|
||||
}
|
||||
state = hash_str(type, value->v_config->version, state);
|
||||
state = hash_int(type, value->v_config->baseb, state);
|
||||
state = hash_bool(type, value->v_config->redecl_warn, state);
|
||||
state = hash_bool(type, value->v_config->dupvar_warn, state);
|
||||
break;
|
||||
|
||||
case V_HASH:
|
||||
|
@@ -18,8 +18,8 @@
|
||||
# received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# @(#) $Revision: 29.28 $
|
||||
# @(#) $Id: Makefile,v 29.28 2006/05/07 12:59:51 chongo Exp $
|
||||
# @(#) $Revision: 29.30 $
|
||||
# @(#) $Id: Makefile,v 29.30 2006/08/20 15:01:57 chongo Exp $
|
||||
# @(#) $Source: /usr/local/src/cmd/calc/help/RCS/Makefile,v $
|
||||
#
|
||||
# Under source code control: 1991/07/23 06:47:57
|
||||
@@ -267,15 +267,15 @@ BLT_HELP_FILES= ${BLT_HELP_FILES_3} ${BLT_HELP_FILES_5} \
|
||||
#
|
||||
DETAIL_HELP= abs access acos acosh acot acoth acsc acsch address agd append \
|
||||
appr arg argv arrow asec asech asin asinh assign atan atan2 atanh \
|
||||
avg base base2 bernoulli bit blk blkcpy blkfree blocks bround btrunc \
|
||||
calc_tty calclevel catalan ceil cfappr cfsim char cmdbuf cmp comb \
|
||||
conj cos cosh cot coth count cp csc csch ctime delete den dereference \
|
||||
det digit digits display dp epsilon errcount errmax errno error \
|
||||
euler eval exp fact factor fclose fcnt feof ferror fflush fgetc \
|
||||
fgetfield fgetline fgets fgetstr fib files floor fopen forall \
|
||||
fpathopen fprintf fputc fputs fputstr frac free freebernoulli \
|
||||
freeeuler freeglobals freeredc freestatics frem freopen fscan \
|
||||
fscanf fseek fsize ftell gcd gcdrem gd getenv hash head highbit \
|
||||
avg base base2 bernoulli bit blk blkcpy blkfree blocks bround \
|
||||
btrunc calc_tty calclevel catalan ceil cfappr cfsim char cmdbuf \
|
||||
cmp comb conj cos cosh cot coth count cp csc csch ctime delete den \
|
||||
dereference det digit digits display dp epsilon errcount errmax \
|
||||
errno error estr euler eval exp fact factor fclose fcnt feof ferror \
|
||||
fflush fgetc fgetfield fgetfile fgetline fgets fgetstr fib files \
|
||||
floor fopen forall fpathopen fprintf fputc fputs fputstr frac free \
|
||||
freebernoulli freeeuler freeglobals freeredc freestatics frem freopen \
|
||||
fscan fscanf fseek fsize ftell gcd gcdrem gd getenv hash head highbit \
|
||||
hmean hnrmod hypot ilog ilog10 ilog2 im indices inputlevel insert \
|
||||
int inverse iroot isassoc isatty isblk isconfig isdefined iserror \
|
||||
iseven isfile ishash isident isint islist ismat ismult isnull isnum \
|
||||
@@ -656,6 +656,10 @@ clobber:
|
||||
rm -f COPYING COPYING-LGPL
|
||||
rm -f ${SINGULAR_FILES} ${DETAIL_CLONE}
|
||||
|
||||
# install everything
|
||||
#
|
||||
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||
#
|
||||
install: all
|
||||
-${Q}if [ ! -d $T${CALC_SHAREDIR} ]; then \
|
||||
echo mkdir $T${CALC_SHAREDIR}; \
|
||||
@@ -705,3 +709,37 @@ install: all
|
||||
mv -f $T${HELPDIR}/obj.new $T${HELPDIR}/obj; \
|
||||
echo "installed $T${HELPDIR}/obj"; \
|
||||
fi
|
||||
|
||||
# Try to remove everything that was installed
|
||||
#
|
||||
# NOTE: Keep the uninstall rule in reverse order to the install rule
|
||||
#
|
||||
uninstall:
|
||||
-${Q}if [ -f "$T${HELPDIR}/obj" ]; then \
|
||||
rm -f "$T${HELPDIR}/obj"; \
|
||||
if [ -f "$T${HELPDIR}/obj" ]; then \
|
||||
echo "cannot uninstall $T${HELPDIR}/obj"; \
|
||||
else \
|
||||
echo "uninstalled $T${HELPDIR}/obj"; \
|
||||
fi; \
|
||||
fi
|
||||
-${Q}for i in ${SINGULAR_FILES} ${DETAIL_HELP} full builtin \
|
||||
${BLT_HELP_FILES} ${STD_HELP_FILES} /dev/null; do \
|
||||
if [ "$$i" = "/dev/null" ]; then \
|
||||
continue; \
|
||||
fi; \
|
||||
if [ -f "$T${HELPDIR}/$$i" ]; then \
|
||||
rm -f "$T${HELPDIR}/$$i"; \
|
||||
if [ -f "$T${HELPDIR}/$$i" ]; then \
|
||||
echo "cannot uninstall $T${HELPDIR}/$$i"; \
|
||||
else \
|
||||
echo "uninstalled $T${HELPDIR}/$$i"; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
-${Q}for i in ${HELPDIR} ${CALC_SHAREDIR}; do \
|
||||
if [ -d "$T$$i" ]; then \
|
||||
rmdir "$T$$i" 2>/dev/null; \
|
||||
echo "cleaned up $T$$i"; \
|
||||
fi; \
|
||||
done
|
||||
|
28
help/address
28
help/address
@@ -38,7 +38,7 @@ DESCRIPTION
|
||||
&X with that component or element depends only on the continued existence
|
||||
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
|
||||
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
|
||||
same matrix or object. For example, immediately after
|
||||
|
||||
> mat A[10]
|
||||
> p = &A[5]
|
||||
; mat A[10]
|
||||
; p = &A[5]
|
||||
|
||||
it is permitted to use expressions like p + 4, p - 5, p++ .
|
||||
|
||||
Strings defined literally have fixed addresses, e.g., after
|
||||
|
||||
> p = &"abc"
|
||||
> A = "abc"
|
||||
; p = &"abc"
|
||||
; A = "abc"
|
||||
|
||||
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.
|
||||
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
|
||||
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
|
||||
lvalue. For example, after
|
||||
|
||||
> x = 27;
|
||||
> y = 3 * 9;
|
||||
> define f(a) = 27 + a;
|
||||
; x = 27;
|
||||
; y = 3 * 9;
|
||||
; define f(a) = 27 + a;
|
||||
|
||||
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
|
||||
@@ -109,13 +109,13 @@ DESCRIPTION
|
||||
non-zero value for a will be assigned to different addresses as can be
|
||||
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
|
||||
rather than creating a new number value). Here it is clearly more
|
||||
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
|
||||
number values for A, B and C at the same address.
|
||||
@@ -160,7 +160,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
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
|
||||
## 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.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: address,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: address,v 29.5 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/address,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:34
|
||||
|
@@ -57,9 +57,10 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
delete, insert, islist, list, pop, push, remove, rsearch, search, size
|
||||
delete, insert, islist, pop, push, remove, rsearch, search,
|
||||
select, size
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -75,8 +76,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: append,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: append,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/append,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 03:13:17
|
||||
|
@@ -51,9 +51,9 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
param, usage
|
||||
param, system, usage
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -69,8 +69,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: argv,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: argv,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/argv,v $
|
||||
##
|
||||
## Under source code control: 1999/11/23 19:45:05
|
||||
|
8
help/avg
8
help/avg
@@ -41,7 +41,7 @@ EXAMPLE
|
||||
[1,1] = 6
|
||||
|
||||
LIMITS
|
||||
The number of arguments is not to exceed 100.
|
||||
The number of arguments is not to exceed 1024.
|
||||
|
||||
LINK LIBRARY
|
||||
none
|
||||
@@ -49,7 +49,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
hmean
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -65,8 +65,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: avg,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: avg,v 29.4 2006/06/22 23:49:22 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/avg,v $
|
||||
##
|
||||
## Under source code control: 1994/09/25 20:22:31
|
||||
|
23
help/blk
23
help/blk
@@ -213,12 +213,27 @@ LIMITS
|
||||
1 <= chunk < 2^31
|
||||
|
||||
LINK LIBRARY
|
||||
XXX
|
||||
BLOCK *blkalloc(int len, int chunk)
|
||||
void blk_free(BLOCK *blk)
|
||||
BLOCK *blkrealloc(BLOCK *blk, int newlen, int newchunk)
|
||||
void blktrunc(BLOCK *blk)
|
||||
BLOCK *blk_copy(BLOCK *blk)
|
||||
int blk_cmp(BLOCK *a, BLOCK *b)
|
||||
void blk_print(BLOCK *blk)
|
||||
void nblock_print(NBLOCK *nblk)
|
||||
NBLOCK *reallocnblock(int id, int len, int chunk)
|
||||
NBLOCK *createnblock(char *name, int len, int chunk)
|
||||
int findnblockid(char * name)
|
||||
int removenblock(int id)
|
||||
int countnblocks(void)
|
||||
void shownblocks(void)
|
||||
NBLOCK *findnblock(int id)
|
||||
BLOCK *copyrealloc(BLOCK *blk, int newlen, int newchunk)
|
||||
|
||||
SEE ALSO
|
||||
blocks, blkfree
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -234,8 +249,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: blk,v 29.4 2006/05/07 07:16:42 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: blk,v 29.5 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blk,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 13:07:13
|
||||
|
57
help/blkcpy
57
help/blkcpy
@@ -19,7 +19,7 @@ TYPES
|
||||
DESCRIPTION
|
||||
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
|
||||
from the source item 'src' with index 'ssi'. By default, 'num'
|
||||
@@ -27,7 +27,7 @@ DESCRIPTION
|
||||
|
||||
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.
|
||||
|
||||
@@ -40,30 +40,30 @@ DESCRIPTION
|
||||
|
||||
The following pairs of source-type, destination-type are permitted:
|
||||
|
||||
block to
|
||||
int
|
||||
block
|
||||
matrix
|
||||
file
|
||||
block to
|
||||
int
|
||||
block
|
||||
matrix
|
||||
file
|
||||
|
||||
matrix to
|
||||
block
|
||||
matrix
|
||||
list
|
||||
matrix to
|
||||
block
|
||||
matrix
|
||||
list
|
||||
|
||||
string to
|
||||
block
|
||||
file
|
||||
string to
|
||||
block
|
||||
file
|
||||
|
||||
list to
|
||||
list
|
||||
matrix
|
||||
list to
|
||||
list
|
||||
matrix
|
||||
|
||||
file to
|
||||
block
|
||||
file to
|
||||
block
|
||||
|
||||
int to
|
||||
block
|
||||
int to
|
||||
block
|
||||
|
||||
In the above table, int refers to integer values. However if a
|
||||
rational value is supplied, only the numerator is copied.
|
||||
@@ -79,11 +79,11 @@ DESCRIPTION
|
||||
sufficient memory allocated for the copying. For example, to copy
|
||||
a matrix M of size 100 to a newly created list, one may use:
|
||||
|
||||
L = makelist(100);
|
||||
copy(M, L);
|
||||
; L = makelist(100);
|
||||
; copy(M, L);
|
||||
or:
|
||||
L = makelist(100);
|
||||
blkcpy(L, M);
|
||||
; L = makelist(100);
|
||||
; blkcpy(L, M);
|
||||
|
||||
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,
|
||||
@@ -114,7 +114,6 @@ EXAMPLE
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 4
|
||||
01020304
|
||||
>
|
||||
; blkcpy(B,A)
|
||||
; B
|
||||
chunksize = 256, maxsize = 256, datalen = 8
|
||||
@@ -191,7 +190,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
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
|
||||
## 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.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: blkcpy,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: blkcpy,v 29.4 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/blkcpy,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 14:08:50
|
||||
|
@@ -13,9 +13,9 @@ DESCRIPTION
|
||||
may occur when activity is resumed by an fg command after a ctrl-Z
|
||||
interrupt, or by any of the three commands:
|
||||
|
||||
> !stty echo
|
||||
> !stty -cbreak
|
||||
> !stty echo -cbreak
|
||||
; !stty echo
|
||||
; !stty -cbreak
|
||||
; !stty echo -cbreak
|
||||
|
||||
EXAMPLE
|
||||
; calc_tty();
|
||||
@@ -26,7 +26,7 @@ LIBRARY
|
||||
SEE ALSO
|
||||
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
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -42,8 +42,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: calc_tty,v 29.2 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $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 $
|
||||
##
|
||||
## Under source code control: 2000/12/14 01:33:00
|
||||
|
@@ -26,9 +26,9 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
XXX - fill in
|
||||
argv, system
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -44,8 +44,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: cmdbuf,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: cmdbuf,v 29.3 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/cmdbuf,v $
|
||||
##
|
||||
## Under source code control: 1995/07/09 04:05:58
|
||||
|
@@ -36,9 +36,9 @@ LINK LIBRARY
|
||||
void zcomb(ZVALUE x, ZVALUE y, ZVALUE *res)
|
||||
|
||||
SEE ALSO
|
||||
fact, perm
|
||||
fact, perm, randperm
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -54,8 +54,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: comb,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: comb,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/comb,v $
|
||||
##
|
||||
## Under source code control: 1994/10/20 04:03:02
|
||||
|
296
help/command
296
help/command
@@ -19,26 +19,26 @@ Command sequence
|
||||
define function(params) { body }
|
||||
define function(params) = expression
|
||||
|
||||
This first form defines a full function which can consist
|
||||
of declarations followed by many statements which implement
|
||||
the function.
|
||||
This first form defines a full function which can consist
|
||||
of declarations followed by many statements which implement
|
||||
the function.
|
||||
|
||||
The second form defines a simple function which calculates
|
||||
the specified expression value from the specified parameters.
|
||||
The expression cannot be a statement. However, the comma
|
||||
and question mark operators can be useful. Examples of
|
||||
simple functions are:
|
||||
The second form defines a simple function which calculates
|
||||
the specified expression value from the specified parameters.
|
||||
The expression cannot be a statement. However, the comma
|
||||
and question mark operators can be useful. Examples of
|
||||
simple functions are:
|
||||
|
||||
define sumcubes(a, b) = a^3 + b^3
|
||||
define pimod(a) = a % pi()
|
||||
define printnum(a, n, p)
|
||||
{
|
||||
if (p == 0) {
|
||||
print a: "^": n, "=", a^n;
|
||||
} else {
|
||||
print a: "^": n, "mod", p, "=", pmod(a,n,p);
|
||||
}
|
||||
define sumcubes(a, b) = a^3 + b^3
|
||||
define pimod(a) = a % pi()
|
||||
define printnum(a, n, p)
|
||||
{
|
||||
if (p == 0) {
|
||||
print a: "^": n, "=", a^n;
|
||||
} else {
|
||||
print a: "^": n, "mod", p, "=", pmod(a,n,p);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
read calc commands
|
||||
@@ -48,45 +48,45 @@ Command sequence
|
||||
read 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
|
||||
value, then the value of that variable is used as a filename.
|
||||
In the 1st and 2nd forms, if var is a global variable string
|
||||
value, then the value of that variable is used as a filename.
|
||||
|
||||
The following is equivalent to read lucas.cal or read "lucas.cal":
|
||||
The following is equivalent to read lucas.cal or read "lucas.cal":
|
||||
|
||||
global var = "lucas.cal";
|
||||
read $var;
|
||||
global var = "lucas.cal";
|
||||
read $var;
|
||||
|
||||
In the 3rd or 4th forms, the filename argument is treated
|
||||
as a literal string, not a variable. In these forms, the
|
||||
name can be quoted if desired.
|
||||
In the 3rd or 4th forms, the filename argument is treated
|
||||
as a literal string, not a variable. In these forms, the
|
||||
name can be quoted if desired.
|
||||
|
||||
The calculator uses the CALCPATH environment variable to
|
||||
search through the specified directories for the filename,
|
||||
similarly to the use of the PATH environment variable.
|
||||
If CALCPATH is not defined, then a default path which is
|
||||
usually ":/usr/local/lib/calc" is used.
|
||||
The calculator uses the CALCPATH environment variable to
|
||||
search through the specified directories for the filename,
|
||||
similarly to the use of the PATH environment variable.
|
||||
If CALCPATH is not defined, then a default path which is
|
||||
usually ":/usr/local/lib/calc" is used.
|
||||
|
||||
The ".cal" extension is defaulted for input files, so that
|
||||
if "filename" is not found, then "filename.cal" is then
|
||||
searched for. The contents of the filename are command
|
||||
sequences which can consist of expressions to evaluate or
|
||||
functions to define, just like at the top level command level.
|
||||
The ".cal" extension is defaulted for input files, so that
|
||||
if "filename" is not found, then "filename.cal" is then
|
||||
searched for. The contents of the filename are command
|
||||
sequences which can consist of expressions to evaluate or
|
||||
functions to define, just like at the top level command level.
|
||||
|
||||
When -once is given, the read command acts like the regular
|
||||
read expect that it will ignore filename if is has been
|
||||
previously read.
|
||||
When -once is given, the read command acts like the regular
|
||||
read expect that it will ignore filename if is has been
|
||||
previously read.
|
||||
|
||||
The read -once form is particularly useful in a resource
|
||||
file that needs to read a 2nd resource file. By using the
|
||||
READ -once command, one will not reread that 2nd resource
|
||||
file, nor will once risk entering into a infinite READ loop
|
||||
(where that 2nd resource file directly or indirectly does
|
||||
a READ of the first resource file).
|
||||
The read -once form is particularly useful in a resource
|
||||
file that needs to read a 2nd resource file. By using the
|
||||
READ -once command, one will not reread that 2nd resource
|
||||
file, nor will once risk entering into a infinite READ loop
|
||||
(where that 2nd resource file directly or indirectly does
|
||||
a READ of the first resource file).
|
||||
|
||||
If the -m mode disallows opening of files for reading,
|
||||
this command will be disabled.
|
||||
If the -m mode disallows opening of files for reading,
|
||||
this command will be disabled.
|
||||
|
||||
|
||||
write calc commands
|
||||
@@ -94,29 +94,29 @@ Command sequence
|
||||
write $var
|
||||
write filename
|
||||
|
||||
This writes the values of all global variables to the
|
||||
specified filename, in such a way that the file can be
|
||||
later read in order to recreate the variable values.
|
||||
For speed reasons, values are written as hex fractions.
|
||||
This command currently only saves simple types, so that
|
||||
matrices, lists, and objects are not saved. Function
|
||||
definitions are also not saved.
|
||||
This writes the values of all global variables to the
|
||||
specified filename, in such a way that the file can be
|
||||
later read in order to recreate the variable values.
|
||||
For speed reasons, values are written as hex fractions.
|
||||
This command currently only saves simple types, so that
|
||||
matrices, lists, and objects are not saved. Function
|
||||
definitions are also not saved.
|
||||
|
||||
In the 1st form, if var is a global variable string
|
||||
value, then the value of that variable is used as a filename.
|
||||
In the 1st form, if var is a global variable string
|
||||
value, then the value of that variable is used as a filename.
|
||||
|
||||
The following is equivalent to write dump.out or
|
||||
write "dump.out":
|
||||
The following is equivalent to write dump.out or
|
||||
write "dump.out":
|
||||
|
||||
global var = "dump.out";
|
||||
write $var;
|
||||
global var = "dump.out";
|
||||
write $var;
|
||||
|
||||
In the 2nd form, the filename argument is treated as a literal
|
||||
string, not a variable. In this form, the name can be quoted
|
||||
if desired.
|
||||
In the 2nd form, the filename argument is treated as a literal
|
||||
string, not a variable. In this form, the name can be quoted
|
||||
if desired.
|
||||
|
||||
If the -m mode disallows opening of files for writing,
|
||||
this command will be disabled.
|
||||
If the -m mode disallows opening of files for writing,
|
||||
this command will be disabled.
|
||||
|
||||
|
||||
quit or exit
|
||||
@@ -126,36 +126,35 @@ Command sequence
|
||||
exit
|
||||
exit string
|
||||
|
||||
The action of these commands depends on where they are used.
|
||||
At the interactive level, they will cause calc it edit.
|
||||
This is the normal way to leave the calculator. In any
|
||||
other use, they will stop the current calculation as if
|
||||
an error had occurred.
|
||||
The action of these commands depends on where they are used.
|
||||
At the interactive level, they will cause calc it edit.
|
||||
This is the normal way to leave the calculator. In any
|
||||
other use, they will stop the current calculation as if
|
||||
an error had occurred.
|
||||
|
||||
If a string is given, then the string is printed as the reason
|
||||
for quitting, otherwise a general quit message is printed.
|
||||
The routine name and line number which executed the quit is
|
||||
also printed in either case.
|
||||
If a string is given, then the string is printed as the reason
|
||||
for quitting, otherwise a general quit message is printed.
|
||||
The routine name and line number which executed the quit is
|
||||
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,
|
||||
in order to stop a calculation cleanly. For example,
|
||||
for a square root routine, an error can be given if the
|
||||
supplied parameter was a negative number, as in:
|
||||
Quit is useful when a routine detects invalid arguments,
|
||||
in order to stop a calculation cleanly. For example,
|
||||
for a square root routine, an error can be given if the
|
||||
supplied parameter was a negative number, as in:
|
||||
|
||||
define mysqrt(n)
|
||||
{
|
||||
if (! isnum(n))
|
||||
quit "non-numeric argument";
|
||||
if (n < 0)
|
||||
quit "Negative argument";
|
||||
return sqrt(n);
|
||||
}
|
||||
|
||||
See 'more information about abort and quit' below for
|
||||
more information.
|
||||
define mysqrt(n)
|
||||
{
|
||||
if (! isnum(n))
|
||||
quit "non-numeric argument";
|
||||
if (n < 0)
|
||||
quit "Negative argument";
|
||||
return sqrt(n);
|
||||
}
|
||||
|
||||
See 'more information about abort and quit' below for
|
||||
more information.
|
||||
|
||||
|
||||
abort
|
||||
@@ -163,12 +162,12 @@ Command sequence
|
||||
abort
|
||||
abort string
|
||||
|
||||
This command behaves like QUIT except that it will attempt
|
||||
to return to the interactive level if permitted, otherwise
|
||||
calc exit.
|
||||
This command behaves like QUIT except that it will attempt
|
||||
to return to the interactive level if permitted, otherwise
|
||||
calc exit.
|
||||
|
||||
See 'more information about abort and quit' below for
|
||||
more information.
|
||||
See 'more information about abort and quit' below for
|
||||
more information.
|
||||
|
||||
|
||||
change current directory
|
||||
@@ -176,45 +175,45 @@ Command sequence
|
||||
cd
|
||||
cd dir
|
||||
|
||||
Change the current directory to 'dir'. If 'dir' is ommitted,
|
||||
change the current directory to the home directory, if $HOME
|
||||
is set in the environment.
|
||||
Change the current directory to 'dir'. If 'dir' is ommitted,
|
||||
change the current directory to the home directory, if $HOME
|
||||
is set in the environment.
|
||||
|
||||
|
||||
show information
|
||||
----------------
|
||||
show item
|
||||
|
||||
This command displays some information where 'item' is
|
||||
one of the following:
|
||||
This command displays some information where 'item' is
|
||||
one of the following:
|
||||
|
||||
blocks unfreed named blocks
|
||||
builtin built in functions
|
||||
config config parameters and values
|
||||
constants cache of numeric constants
|
||||
custom custom functions if calc -C was used
|
||||
errors new error-values created
|
||||
files open files, file position and sizes
|
||||
function user-defined functions
|
||||
globaltypes global variables
|
||||
objfunctions possible object functions
|
||||
objtypes defined objects
|
||||
opcodes func internal opcodes for function `func'
|
||||
sizes size in octets of calc value types
|
||||
realglobals numeric global variables
|
||||
statics unscoped static variables
|
||||
numbers calc number cache
|
||||
redcdata REDC data defined
|
||||
strings calc string cache
|
||||
literals calc literal cache
|
||||
blocks unfreed named blocks
|
||||
builtin built in functions
|
||||
config config parameters and values
|
||||
constants cache of numeric constants
|
||||
custom custom functions if calc -C was used
|
||||
errors new error-values created
|
||||
files open files, file position and sizes
|
||||
function user-defined functions
|
||||
globaltypes global variables
|
||||
objfunctions possible object functions
|
||||
objtypes defined objects
|
||||
opcodes func internal opcodes for function `func'
|
||||
sizes size in octets of calc value types
|
||||
realglobals numeric global variables
|
||||
statics unscoped static variables
|
||||
numbers calc number cache
|
||||
redcdata REDC data defined
|
||||
strings calc string 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 global
|
||||
show glob
|
||||
show globals
|
||||
show global
|
||||
show glob
|
||||
|
||||
do the same thing.
|
||||
do the same thing.
|
||||
|
||||
|
||||
calc help
|
||||
@@ -222,25 +221,24 @@ Command sequence
|
||||
help $var
|
||||
help name
|
||||
|
||||
This displays a help related to 'name' or general
|
||||
help of none is given.
|
||||
This displays a help related to 'name' or general
|
||||
help of none is given.
|
||||
|
||||
In the 1st form, if var is a global variable string
|
||||
value, then the value of that variable is used as a name.
|
||||
In the 1st form, if var is a global variable string
|
||||
value, then the value of that variable is used as a name.
|
||||
|
||||
The following is equivalent to help command or help "command":
|
||||
The following is equivalent to help command or help "command":
|
||||
|
||||
global var = "command";
|
||||
help $var;
|
||||
global var = "command";
|
||||
help $var;
|
||||
|
||||
In the 2nd form, the filename argument is treated as a literal
|
||||
string, not a variable. In this form, the name can be quoted
|
||||
if desired.
|
||||
In the 2nd form, the filename argument is treated as a literal
|
||||
string, not a variable. In this form, the name can be quoted
|
||||
if desired.
|
||||
|
||||
|
||||
=-=
|
||||
|
||||
|
||||
more information about abort and quit
|
||||
=====================================
|
||||
|
||||
@@ -291,7 +289,7 @@ Command sequence
|
||||
after statment #1
|
||||
start statment #2
|
||||
abort from a()
|
||||
> <==== calc interactive prompt
|
||||
; <==== calc interactive prompt
|
||||
|
||||
because the '-i' calc causes ABORT to drop into an
|
||||
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,
|
||||
calc will produce:
|
||||
|
||||
> print "start of myfile.cal";
|
||||
; print "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
|
||||
> define a() {abort "abort from a()"}
|
||||
; define a() {abort "abort from a()"}
|
||||
a() defined
|
||||
> x = 3;
|
||||
> {print "start #1"; if (x > 1) q()} print "after #1";
|
||||
; x = 3;
|
||||
; {print "start #1"; if (x > 1) q()} print "after #1";
|
||||
start statment #1
|
||||
quit from q()
|
||||
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
|
||||
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
|
||||
quit from 3rd statement
|
||||
|
||||
@@ -345,16 +343,14 @@ Command sequence
|
||||
The QUIT (after the if (x > 1) ...) will cause calc to exit
|
||||
because it was given at the interactive prompt level.
|
||||
|
||||
|
||||
=-=
|
||||
|
||||
|
||||
Also see the help topic:
|
||||
|
||||
statement flow control and declaration statements
|
||||
usage how to invoke the calc command and calc -options
|
||||
statement flow control and declaration statements
|
||||
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
|
||||
## 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.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: command,v 29.3 2006/05/20 10:01:33 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: command,v 29.5 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/command,v $
|
||||
##
|
||||
## Under source code control: 1991/07/21 04:37:17
|
||||
|
242
help/config
242
help/config
@@ -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
|
||||
are the accuracy of some calculations, the displayed format of results,
|
||||
the choice from possible alternative algorithms, and whether or not
|
||||
debugging information is displayed. The parameters are
|
||||
read or set using the "config" built-in function; they remain in effect
|
||||
until their values are changed by a config or equivalent instruction.
|
||||
|
||||
The following parameters can be specified:
|
||||
|
||||
"all" all configuration values listed below
|
||||
@@ -38,13 +50,13 @@ Configuration parameters
|
||||
"prompt" default interactive prompt
|
||||
"more" default interactive multi-line input prompt
|
||||
"blkmaxprint" number of block octets to print, 0 means all
|
||||
"blkverbose" TRUE=>print all lines, FALSE=>skip duplicates
|
||||
"blkverbose" TRUE => print all lines, FALSE=>skip duplicates
|
||||
"blkbase" block output base
|
||||
"blkfmt" block output format
|
||||
"calc_debug" controls internal calc debug information
|
||||
"resource_debug" controls resource file debug information
|
||||
"user_debug" for user defined debug information
|
||||
"verbose_quit" TRUE=>print message on empty quit or abort
|
||||
"verbose_quit" TRUE => print message on empty quit or abort
|
||||
"ctrl_d" The interactive meaning of ^D (Control D)
|
||||
"program" Read-only calc program or shell script path
|
||||
"basename" Read-only basename of the program value
|
||||
@@ -53,6 +65,9 @@ Configuration parameters
|
||||
"compile_custom" TRUE=>calc was compiled with custom functions
|
||||
"allow_custom" TRUE=>custom functions are enabled
|
||||
"version" Read-only calc version
|
||||
"baseb" bits in calculation base, a read-only value
|
||||
"redecl_warn" TRUE => warn when redeclaring
|
||||
"dupvar_warn" TRUE => warn when variable names collide
|
||||
|
||||
The "all" config value allows one to save/restore the configuration
|
||||
set of values. The return of:
|
||||
@@ -120,9 +135,6 @@ Configuration parameters
|
||||
config("tilde", 0) disable roundoff tilde printing
|
||||
config("tab", "off") disable leading tab printing
|
||||
|
||||
|
||||
Detailed config descriptions
|
||||
|
||||
=-=
|
||||
|
||||
config("trace", bitflag)
|
||||
@@ -254,16 +266,36 @@ Detailed config descriptions
|
||||
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
|
||||
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
|
||||
algorithm is used all the way down to single digits, which becomes
|
||||
slow since the recursion overhead is high. If a number such as
|
||||
1000000 is used, then the recursive algorithm is never used, causing
|
||||
calculations for large numbers to slow down. For a typical example
|
||||
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
|
||||
the parameter back to its default value. Usually there is no need
|
||||
to change these parameters.
|
||||
1000000 is used, then the recursive algorithm is almost never used,
|
||||
causing calculations for large numbers to slow down.
|
||||
|
||||
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("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 +309,23 @@ Detailed config descriptions
|
||||
which avoids divisions. The argument for pow2 is the size of the
|
||||
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)
|
||||
@@ -289,6 +338,23 @@ Detailed config descriptions
|
||||
O(N^1.585). The argument for redc2 is the size of the 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("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)
|
||||
@@ -364,9 +430,15 @@ Detailed config descriptions
|
||||
by the various kinds of printing to the output: bits 0, 1, 3 and 4
|
||||
are used in the same way as for the functions round and bround.
|
||||
|
||||
The C language method of modulus and integer division is:
|
||||
|
||||
config("quomod", 2)
|
||||
config("quo", 2)
|
||||
config("mod", 2)
|
||||
|
||||
=-=
|
||||
|
||||
config("leadzero", bool)
|
||||
config("leadzero", boolean)
|
||||
|
||||
The "leadzero" parameter controls whether or not a 0 is printed
|
||||
before the decimal point in non-zero fractions with absolute value
|
||||
@@ -375,7 +447,7 @@ Detailed config descriptions
|
||||
|
||||
=-=
|
||||
|
||||
config("fullzero", bool)
|
||||
config("fullzero", boolean)
|
||||
|
||||
The "fullzero" parameter controls whether or not in decimal floating-
|
||||
point printing, the digits are padded with zeros to reach the
|
||||
@@ -426,7 +498,7 @@ Detailed config descriptions
|
||||
|
||||
=-=
|
||||
|
||||
config("blkverbose", bool)
|
||||
config("blkverbose", boolean)
|
||||
|
||||
The "blkverbose" determines if all lines, including duplicates
|
||||
should be printed. If TRUE, then all lines are printed. If false,
|
||||
@@ -560,11 +632,12 @@ Detailed config descriptions
|
||||
3 During execution, allow calc standard resource files
|
||||
to output additional debugging information.
|
||||
|
||||
The value for config("resource_debug") in both oldstd and newstd is 3,
|
||||
but if calc is invoked with the -d flag, its initial value is zero.
|
||||
Thus, if calc is started without the -d flag, until config("resource_debug")
|
||||
is changed, a message will be output when a function is defined
|
||||
either interactively or during the reading of a file.
|
||||
The value for config("resource_debug") in both oldstd and newstd
|
||||
is 3, but if calc is invoked with the -d flag, its initial value
|
||||
is zero. Thus, if calc is started without the -d flag, until
|
||||
config("resource_debug") is changed, a message will be output when
|
||||
a function is defined either interactively or during the reading of
|
||||
a file.
|
||||
|
||||
The name config("lib_debug") is equivalent to config("resource_debug")
|
||||
and is included for backward compatibility.
|
||||
@@ -591,7 +664,7 @@ Detailed config descriptions
|
||||
|
||||
=-=
|
||||
|
||||
config("verbose_quit", bool)
|
||||
config("verbose_quit", boolean)
|
||||
|
||||
The "verbose_quit" controls the print of the message:
|
||||
|
||||
@@ -601,7 +674,7 @@ Detailed config descriptions
|
||||
A quit of abort without an argument does not display a message when
|
||||
invoked at the interactive level.
|
||||
|
||||
By deafult, "verbose_quit" is false.
|
||||
By default, "verbose_quit" is false.
|
||||
|
||||
=-=
|
||||
|
||||
@@ -756,7 +829,122 @@ Detailed config descriptions
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
|
||||
; 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
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -772,8 +960,8 @@ Detailed config descriptions
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.10 $
|
||||
## @(#) $Id: config,v 29.10 2004/07/27 23:45:52 chongo Exp $
|
||||
## @(#) $Revision: 29.17 $
|
||||
## @(#) $Id: config,v 29.17 2006/06/24 19:06:58 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/config,v $
|
||||
##
|
||||
## Under source code control: 1991/07/21 04:37:17
|
||||
|
58
help/define
58
help/define
@@ -30,17 +30,17 @@ DESCRIPTION
|
||||
For example, suppose a function f and a global variable A have been
|
||||
defined by:
|
||||
|
||||
define f(x) = (x = 3);
|
||||
global mat A[3];
|
||||
; define f(x) = (x = 3);
|
||||
; global mat A[3];
|
||||
|
||||
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
|
||||
value 3 to x:
|
||||
|
||||
f(`A[g()]);
|
||||
; f(`A[g()]);
|
||||
|
||||
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
|
||||
@@ -79,7 +79,7 @@ DESCRIPTION
|
||||
|
||||
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
|
||||
null value.
|
||||
@@ -105,11 +105,11 @@ DESCRIPTION
|
||||
|
||||
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:
|
||||
|
||||
undefine *
|
||||
; undefine *
|
||||
|
||||
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
|
||||
@@ -120,8 +120,8 @@ DESCRIPTION
|
||||
The identifiers used for the parameters in a function definition do
|
||||
not form part of the completed definition. For example,
|
||||
|
||||
define f(a,b) = a + b;
|
||||
define g(alpha, beta) = alpha + beta;
|
||||
; define f(a,b) = a + b;
|
||||
; define g(alpha, beta) = alpha + beta;
|
||||
|
||||
result in identical code for the functions f, g.
|
||||
|
||||
@@ -129,8 +129,8 @@ DESCRIPTION
|
||||
function are displayed on completion of its definition, parameters
|
||||
being specified by names used in the definition. For example:
|
||||
|
||||
> config("trace", 8),
|
||||
> define f(a,b) = a + b
|
||||
; config("trace", 8),
|
||||
; define f(a,b) = a + b
|
||||
0: PARAMADDR a
|
||||
2: PARAMADDR b
|
||||
4: ADD
|
||||
@@ -140,7 +140,7 @@ DESCRIPTION
|
||||
The opcodes may also be displayed later using the show opcodes command;
|
||||
parameters will be specified by indices instead of by names. For example:
|
||||
|
||||
> show opco f
|
||||
; show opco f
|
||||
0: PARAMADDR 0
|
||||
2: PARAMADDR 1
|
||||
4: ADD
|
||||
@@ -168,22 +168,22 @@ DESCRIPTION
|
||||
EXAMPLE
|
||||
; define f(a,b) = 2*a + b;
|
||||
; define g(alpha, beta)
|
||||
>> {
|
||||
>> local a, pi2;
|
||||
>>
|
||||
>> pi2 = 2 * pi();
|
||||
>> a = sin(alpha % pi2);
|
||||
>> if (a > 0.0) {
|
||||
>> return a*beta;
|
||||
>> }
|
||||
>> if (beta > 0.0) {
|
||||
>> a *= cos(-beta % pi2);
|
||||
>> }
|
||||
>> return a;
|
||||
>> }
|
||||
;; {
|
||||
;; local a, pi2;
|
||||
;;
|
||||
;; pi2 = 2 * pi();
|
||||
;; a = sin(alpha % pi2);
|
||||
;; if (a > 0.0) {
|
||||
;; return a*beta;
|
||||
;; }
|
||||
;; if (beta > 0.0) {
|
||||
;; a *= cos(-beta % pi2);
|
||||
;; }
|
||||
;; return a;
|
||||
;; }
|
||||
|
||||
LIMITS
|
||||
The number of arguments in a function-call cannot exceed 100.
|
||||
The number of arguments in a function-call cannot exceed 1024.
|
||||
|
||||
LIBRARY
|
||||
none
|
||||
@@ -191,7 +191,7 @@ LIBRARY
|
||||
SEE ALSO
|
||||
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
|
||||
## 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.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: define,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.6 $
|
||||
## @(#) $Id: define,v 29.6 2006/06/22 23:49:22 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/define,v $
|
||||
##
|
||||
##
|
||||
|
@@ -39,9 +39,10 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
append, insert, pop, push, remove, size
|
||||
append, insert, islist, pop, push, remove, rsearch, search,
|
||||
select, size
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -57,8 +58,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: delete,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: delete,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/delete,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 03:13:18
|
||||
|
@@ -33,16 +33,17 @@ DESCRIPTION
|
||||
structure rather than the structure identified by X. For example,
|
||||
suppose B has been created by
|
||||
|
||||
mat B[3] = {1,2,3}
|
||||
; mat B[3] = {1,2,3}
|
||||
|
||||
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 then become the value of A, so that the values of A and B will
|
||||
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.
|
||||
|
||||
@@ -51,9 +52,9 @@ DESCRIPTION
|
||||
The * operator may be iterated with suitable sequences of pointer-valued
|
||||
lvalues. For example, after
|
||||
|
||||
> global a, b, c;
|
||||
> b = &a;
|
||||
> c = &b;
|
||||
; global a, b, c;
|
||||
; b = &a;
|
||||
; c = &b;
|
||||
|
||||
**c returns the lvalue a; ***c returns the value of a.
|
||||
|
||||
@@ -81,7 +82,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
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
|
||||
## 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.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: dereference,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: dereference,v 29.4 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/dereference,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:34
|
||||
|
28
help/digit
28
help/digit
@@ -28,11 +28,11 @@ DESCRIPTION
|
||||
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,
|
||||
|
||||
d_2 d_1 d_0 . d_-1 d_-2
|
||||
; d_2 d_1 d_0 . d_-1 d_-2
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
|
||||
digit(b^-r * x, q, b^k)
|
||||
; digit(b^-r * x, q, b^k)
|
||||
|
||||
if r and q satisfy n = q * b + r.
|
||||
|
||||
|
||||
EXAMPLE
|
||||
> a = 123456.789
|
||||
> for (n = 6; n >= -6; n++) print digit(a, n),; print
|
||||
; a = 123456.789
|
||||
; for (n = 6; n >= -6; n++) print digit(a, n),; print
|
||||
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
|
||||
|
||||
> 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
|
||||
|
||||
> 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
|
||||
; 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
|
||||
|
||||
> print digit(10/7, -7e1000, 1e6)
|
||||
; print digit(10/7, -7e1000, 1e6)
|
||||
428571
|
||||
|
||||
LIMITS
|
||||
@@ -92,7 +92,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
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
|
||||
## 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.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: digit,v 29.4 2000/12/17 12:27:58 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: digit,v 29.5 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/digit,v $
|
||||
##
|
||||
## Under source code control: 1995/10/03 10:40:01
|
||||
|
@@ -21,7 +21,6 @@ Environment variables
|
||||
|
||||
The CALCBINDINGS file searches the CALCPATH as well.
|
||||
|
||||
|
||||
CALCRC
|
||||
|
||||
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.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: environment,v 29.4 2006/05/07 07:22:20 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: environment,v 29.5 2006/06/10 13:01:09 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/environment,v $
|
||||
##
|
||||
## Under source code control: 1991/07/23 05:47:25
|
||||
|
45
help/estr
Normal file
45
help/estr
Normal 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
|
||||
|
@@ -30,9 +30,9 @@ LINK LIBRARY
|
||||
void zfact(NUMBER x, *ret)
|
||||
|
||||
SEE ALSO
|
||||
comb, perm
|
||||
comb, perm, randperm
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -48,8 +48,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: fact,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: fact,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fact,v $
|
||||
##
|
||||
## Under source code control: 1994/10/20 04:03:02
|
||||
|
@@ -47,7 +47,8 @@ LINK LIBRARY
|
||||
FLAG zfactor(ZVALUE n, ZVALUE limit, ZVALUE *res)
|
||||
|
||||
SEE ALSO
|
||||
lfactor
|
||||
isprime, lfactor, nextcand, nextprime, prevcand, prevprime,
|
||||
pfact, pix, ptest
|
||||
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
@@ -65,8 +66,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: factor,v 29.4 2006/06/01 11:36:02 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: factor,v 29.5 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/factor,v $
|
||||
##
|
||||
## Under source code control: 1995/12/18 12:34:57
|
||||
|
@@ -7,19 +7,18 @@ SYNOPSIS
|
||||
TYPES
|
||||
fs file stream open for reading
|
||||
|
||||
return string, null or error value
|
||||
return string or null
|
||||
|
||||
DESCRIPTION
|
||||
If characters cannot be read from the file, an error value is returned.
|
||||
|
||||
Otherwise starting at the current file position, any whitespace
|
||||
Starting at the current file position, any whitespace
|
||||
characters are skipped. If the reading reaches end-of-file, the
|
||||
null value is returned. If non-whitespace is encountered, formation
|
||||
of a string begins, continuing until whitespace of '\0' or end-of-file
|
||||
is reached. The returned value is this string (terminated as usual
|
||||
by a null character). After the operation, the file position will
|
||||
be immediately after the first whitespace character of '\0' or at
|
||||
end-of-file.
|
||||
null value is returned. Otherwise the function returns the empty
|
||||
string "" if the first non-white character is '\0', and in other cases,
|
||||
the string formed by the non-white-space characters read until '\0' or
|
||||
a white-space character or te end of the file is reached. In the
|
||||
cases where the reading is stopped by '\0' or white-space character,
|
||||
the file position will be that immediately after that character.
|
||||
|
||||
EXAMPLE
|
||||
|
||||
@@ -31,7 +30,7 @@ EXAMPLE
|
||||
; fgetfield(f)
|
||||
"Beta"
|
||||
; fgetfield(f)
|
||||
>
|
||||
|
||||
; freopen(f, "w")
|
||||
; fputstr(f, " Alpha ", "Beta")
|
||||
; freopen(f, "r")
|
||||
@@ -43,15 +42,15 @@ EXAMPLE
|
||||
"Beta"
|
||||
|
||||
LIMITS
|
||||
none - XXX - is this correct?
|
||||
none
|
||||
|
||||
LINK LIBRARY
|
||||
none - XXX - is this correct?
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
fgetstr, fputstr, fgets, fputs, fopen, files, fprintf
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -67,8 +66,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: fgetfield,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.6 $
|
||||
## @(#) $Id: fgetfield,v 29.6 2006/08/20 15:01:57 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fgetfield,v $
|
||||
##
|
||||
## Under source code control: 1996/04/30 03:05:17
|
||||
|
72
help/fgetfile
Normal file
72
help/fgetfile
Normal 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/
|
11
help/fgetstr
11
help/fgetstr
@@ -36,18 +36,17 @@ EXAMPLE
|
||||
"Gamma
|
||||
Delta"
|
||||
; fgetstr(f)
|
||||
>
|
||||
|
||||
LIMITS
|
||||
none - XXX - is this correct?
|
||||
none
|
||||
|
||||
LINK LIBRARY
|
||||
none - XXX - is this correct?
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
fputstr, fgetword, fgets, fputs, fopen, files, fprintf
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -63,8 +62,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: fgetstr,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: fgetstr,v 29.5 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fgetstr,v $
|
||||
##
|
||||
## Under source code control: 1996/04/30 03:05:17
|
||||
|
8
help/fib
8
help/fib
@@ -25,9 +25,9 @@ LINK LIBRARY
|
||||
NUMBER *qfib(NUMBER *n)
|
||||
|
||||
SEE ALSO
|
||||
XXX - fill in
|
||||
fact
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -43,8 +43,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: fib,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: fib,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fib,v $
|
||||
##
|
||||
## Under source code control: 1995/10/25 04:03:45
|
||||
|
16
help/files
16
help/files
@@ -29,16 +29,16 @@ DESCRIPTION
|
||||
is assumed to be an open file opened in an unknown mode. Calc
|
||||
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
|
||||
$ calc 5<datafile
|
||||
echo "A line of text in the file on descriptor 5" > datafile
|
||||
calc 5<datafile
|
||||
|
||||
then one could do the following:
|
||||
|
||||
> files(5)
|
||||
; files(5)
|
||||
FILE 5 "descriptor[5]" (unknown_mode, pos 0)
|
||||
> fgetline(files(5))
|
||||
; fgetline(files(5))
|
||||
"A line of text in the file on descriptor 5"
|
||||
|
||||
EXAMPLE
|
||||
@@ -68,7 +68,7 @@ SEE ALSO
|
||||
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
|
||||
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -84,8 +84,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: files,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: files,v 29.4 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/files,v $
|
||||
##
|
||||
## Under source code control: 1995/03/04 11:33:19
|
||||
|
@@ -46,7 +46,7 @@ EXAMPLE
|
||||
[3] = NULL
|
||||
|
||||
LIMITS
|
||||
The number of arguments of fprintf() is not to exceed 100.
|
||||
The number of arguments of fprintf() is not to exceed 1024.
|
||||
|
||||
LINK LIBRARY
|
||||
none
|
||||
@@ -54,7 +54,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
printf, strprintf, print
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -70,8 +70,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: fprintf,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: fprintf,v 29.4 2006/06/22 23:49:22 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fprintf,v $
|
||||
##
|
||||
## Under source code control: 1996/03/12 22:50:41
|
||||
|
24
help/fputs
24
help/fputs
@@ -2,34 +2,34 @@ NAME
|
||||
fputs - write a string to a file
|
||||
|
||||
SYNOPSIS
|
||||
fputs(fd, data)
|
||||
fputs(fd, s1, s2, ...)
|
||||
|
||||
TYPES
|
||||
fd file
|
||||
data str
|
||||
fd file stream open for writing
|
||||
s1, s2, ... strings
|
||||
|
||||
return nil
|
||||
return null value
|
||||
|
||||
DESCRIPTION
|
||||
This function writes the string found in data to the file
|
||||
associated with fd.
|
||||
This function writes in succession the strings s1, s2, ..., to the
|
||||
file associated with fd.
|
||||
|
||||
EXAMPLE
|
||||
; fd = fopen("/tmp/newfile", "w")
|
||||
; fputs(fd, "chongo was here\n")
|
||||
; fputs(fd, "chongo was", " here\n")
|
||||
; fd2 = fopen("/tmp/newfile", "r")
|
||||
; fgetline(fd2)
|
||||
"chongo was here"
|
||||
|
||||
LIMITS
|
||||
fd must be associated with an open file
|
||||
The number of arguments is not to exceed 1024
|
||||
|
||||
LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
|
||||
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt
|
||||
errno, fclose, feof, ferror, fflush, fgetc, fgetfile, fgetline, fgets,
|
||||
files, fopen, fprintf, fputc, fseek, fsize, ftell, isfile
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
##
|
||||
@@ -47,8 +47,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: fputs,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: fputs,v 29.4 2006/08/20 15:01:57 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fputs,v $
|
||||
##
|
||||
## Under source code control: 1995/03/04 11:33:20
|
||||
|
12
help/fputstr
12
help/fputstr
@@ -26,20 +26,20 @@ EXAMPLE
|
||||
; fgetstr(f)
|
||||
"Beta"
|
||||
; fgetstr(f)
|
||||
>
|
||||
|
||||
; fputstr(f, "Gamma")
|
||||
Error 72
|
||||
|
||||
LIMITS
|
||||
none - XXX - is this correct?
|
||||
none
|
||||
|
||||
LINK LIBRARY
|
||||
none - XXX - is this correct?
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
fgetstr, fgetfield, fgets, fputs, fopen, files, fprintf
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -55,8 +55,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: fputstr,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: fputstr,v 29.5 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fputstr,v $
|
||||
##
|
||||
## Under source code control: 1996/04/30 03:05:18
|
||||
|
@@ -19,7 +19,6 @@ EXAMPLE
|
||||
1 2 15
|
||||
; freeredc()
|
||||
; show redc
|
||||
>
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -30,7 +29,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
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
|
||||
## 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.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: freeredc,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: freeredc,v 29.4 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/freeredc,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:35
|
||||
|
10
help/freopen
10
help/freopen
@@ -32,16 +32,16 @@ EXAMPLE
|
||||
Error 10013
|
||||
|
||||
LIMITS
|
||||
none - XXX - is this correct?
|
||||
none
|
||||
|
||||
LINK LIBRARY
|
||||
none - XXX - is this correct?
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
errno, fclose, feof, ferror, fflush, fgetc, fgetline, fgets, files, fopen,
|
||||
fprintf, fputc, fputs, fseek, fsize, ftell, isfile, printf, prompt
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -57,8 +57,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: freopen,v 29.3 2006/05/07 07:18:56 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: freopen,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/freopen,v $
|
||||
##
|
||||
## Under source code control: 1996/04/30 03:05:18
|
||||
|
10
help/fscan
10
help/fscan
@@ -30,15 +30,15 @@ EXAMPLE
|
||||
7 a-2i word 49
|
||||
|
||||
LIMITS
|
||||
none - XXX - is this correct?
|
||||
The number of arguments is not to exceed 1024.
|
||||
|
||||
LINK LIBRARY
|
||||
none - XXX - is this correct?
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
scan, strscan, fscanf, scanf, strscanf, printf, fprintf, strprintf
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -54,8 +54,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: fscan,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: fscan,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fscan,v $
|
||||
##
|
||||
## Under source code control: 1996/04/30 03:05:18
|
||||
|
10
help/fscanf
10
help/fscanf
@@ -121,15 +121,15 @@ EXAMPLE
|
||||
"mma"
|
||||
|
||||
LIMITS
|
||||
none - XXX - is this correct?
|
||||
The number of arguments is not to exceed 1024.
|
||||
|
||||
LINK LIBRARY
|
||||
none - XXX - is this correct?
|
||||
extern int fscanfid(FILEID id, char *fmt, int count, VALUE **vals);
|
||||
|
||||
SEE ALSO
|
||||
scanf, strscanf, printf, fprintf, strprintf, fscan, scan, strscan
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -145,8 +145,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: fscanf,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: fscanf,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/fscanf,v $
|
||||
##
|
||||
## Under source code control: 1996/04/30 03:05:18
|
||||
|
8
help/gcd
8
help/gcd
@@ -19,7 +19,7 @@ EXAMPLE
|
||||
6 .02 0
|
||||
|
||||
LIMITS
|
||||
The number of arguments may not to exceed 100.
|
||||
The number of arguments may not to exceed 1024.
|
||||
|
||||
LINK LIBRARY
|
||||
NUMBER *qgcd(NUMBER *x1, NUMBER *x2)
|
||||
@@ -27,7 +27,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
lcm
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -43,8 +43,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: gcd,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: gcd,v 29.4 2006/06/22 23:49:22 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/gcd,v $
|
||||
##
|
||||
## Under source code control: 1995/10/05 04:52:26
|
||||
|
@@ -29,7 +29,7 @@ EXAMPLE
|
||||
2378490456
|
||||
|
||||
LIMITS
|
||||
The number of arguments is not to exceed 100.
|
||||
The number of arguments is not to exceed 1024.
|
||||
|
||||
LINK LIBRARY
|
||||
none
|
||||
@@ -37,7 +37,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
sha, sha1, md5
|
||||
|
||||
## Copyright (C) 1999-2003 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -53,8 +53,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: hash,v 29.4 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: hash,v 29.5 2006/06/22 23:49:22 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/hash,v $
|
||||
##
|
||||
## Under source code control: 1996/03/12 23:10:01
|
||||
|
@@ -29,7 +29,7 @@ EXAMPLE
|
||||
1 4/3 18/11 48/25 0
|
||||
|
||||
LIMITS
|
||||
The number of arguments is not to exceed 100.
|
||||
The number of arguments is not to exceed 1024.
|
||||
|
||||
LINK LIBRARY
|
||||
none
|
||||
@@ -37,7 +37,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
avg
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -53,8 +53,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: hmean,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: hmean,v 29.4 2006/06/22 23:49:22 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/hmean,v $
|
||||
##
|
||||
## Under source code control: 1995/12/18 03:30:59
|
||||
|
38
help/indices
38
help/indices
@@ -26,26 +26,26 @@ DESCRIPTION
|
||||
double-bracket index of the item found.
|
||||
|
||||
EXAMPLE
|
||||
> mat M[2,3,1:5]
|
||||
; mat M[2,3,1:5]
|
||||
|
||||
> indices(M, 11)
|
||||
list (3 elements, 2 nonzero):
|
||||
[[0]] = 0
|
||||
[[1]] = 2
|
||||
[[2]] = 2
|
||||
; indices(M, 11)
|
||||
list (3 elements, 2 nonzero):
|
||||
[[0]] = 0
|
||||
[[1]] = 2
|
||||
[[2]] = 2
|
||||
|
||||
> A = assoc();
|
||||
; A = assoc();
|
||||
|
||||
> A["cat", "dog"] = "fight";
|
||||
> A[2,3,5,7] = "primes";
|
||||
> A["square", 3] = 9
|
||||
; A["cat", "dog"] = "fight";
|
||||
; A[2,3,5,7] = "primes";
|
||||
; A["square", 3] = 9
|
||||
|
||||
> indices(A, search(A, "primes"))
|
||||
list (4 elements, 4 nonzero):
|
||||
[[0]] = 2
|
||||
[[1]] = 3
|
||||
[[2]] = 5
|
||||
[[3]] = 7
|
||||
; indices(A, search(A, "primes"))
|
||||
list (4 elements, 4 nonzero):
|
||||
[[0]] = 2
|
||||
[[1]] = 3
|
||||
[[2]] = 5
|
||||
[[3]] = 7
|
||||
|
||||
LIMITS
|
||||
abs(index) < 2^31
|
||||
@@ -57,7 +57,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
assoc, mat
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -73,8 +73,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: indices,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: indices,v 29.3 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/indices,v $
|
||||
##
|
||||
## Under source code control: 1999/11/16 08:02:03
|
||||
|
@@ -56,9 +56,10 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
append, delete, islist, list, pop, push, remove, rsearch, search, size
|
||||
append, delete, islist, pop, push, remove, rsearch, search,
|
||||
select, size
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -74,8 +75,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: insert,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: insert,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/insert,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 03:13:18
|
||||
|
@@ -42,8 +42,8 @@ ABORT opcodes
|
||||
the calculation is never completed and to stop it, an interruption
|
||||
(on many systems, by ctrl-C) will be necessary.
|
||||
|
||||
> config("trace", 8),
|
||||
> define f(x) {local s; while (x) {s += x--} return s}
|
||||
; config("trace", 8),
|
||||
; define f(x) {local s; while (x) {s += x--} return s}
|
||||
0: DEBUG line 2
|
||||
2: PARAMADDR x
|
||||
4: JUMPZ 19
|
||||
@@ -68,7 +68,7 @@ ABORT opcodes
|
||||
{s += x--} loop. In interactive mode, with ^C indicating
|
||||
input of ctrl-C, the displayed output is as in:
|
||||
|
||||
> f(-1)
|
||||
; f(-1)
|
||||
^C
|
||||
[Abort level 1]
|
||||
"f": line 2: Calculation aborted at statement boundary
|
||||
@@ -77,7 +77,7 @@ ABORT opcodes
|
||||
Changing config("trace") to achieve this, and defining g(x) with
|
||||
the same definition as for f(x) gives:
|
||||
|
||||
> define g(x) {local s; while (x) {s += x--} return s}
|
||||
; define g(x) {local s; while (x) {s += x--} return s}
|
||||
0: PARAMADDR x
|
||||
2: JUMPZ 15
|
||||
4: LOCALADDR s
|
||||
@@ -94,13 +94,15 @@ ABORT opcodes
|
||||
|
||||
If g(-1) is called, two interrupts are necessary, as in:
|
||||
|
||||
> g(-1)
|
||||
; g(-1)
|
||||
^C
|
||||
[Abort level 1]
|
||||
^C
|
||||
[Abort level 2]
|
||||
"g": Calculation aborted in opcode
|
||||
|
||||
## Copyright (C) 1999-2006 David I. Bell, Landon Curt Noll and 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.
|
||||
@@ -115,8 +117,8 @@ ABORT opcodes
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: interrupt,v 29.4 2000/07/17 15:38:52 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: interrupt,v 29.5 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/interrupt,v $
|
||||
##
|
||||
## Under source code control: 1991/07/21 04:37:21
|
||||
|
@@ -34,7 +34,7 @@ LIMITS
|
||||
none
|
||||
|
||||
LINK LIBRARY
|
||||
none - XXX ???
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
blk, blocks, blkfree,
|
||||
@@ -43,7 +43,7 @@ SEE ALSO
|
||||
isobjtype, isodd, isprime, isrand, israndom, isreal, isrel,
|
||||
issimple, issq, isstr, istype
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -59,8 +59,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: isblk,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: isblk,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/isblk,v $
|
||||
##
|
||||
## Under source code control: 1997/04/06 03:03:23
|
||||
|
@@ -34,7 +34,7 @@ LIMITS
|
||||
none
|
||||
|
||||
LINK LIBRARY
|
||||
none - XXX ?
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
define, undefine,
|
||||
@@ -43,7 +43,7 @@ SEE ALSO
|
||||
isobjtype, isodd, isprime, isrand, israndom, isreal, isrel,
|
||||
issimple, issq, isstr, istype
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -59,8 +59,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: isdefined,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: isdefined,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/isdefined,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 14:10:17
|
||||
|
19
help/islist
19
help/islist
@@ -25,14 +25,15 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
append, delete, insert, islist, pop, push, remove, rsearch,
|
||||
search, size, list,
|
||||
isassoc, isatty, isblk, isconfig, isdefined, iserror, iseven, isfile,
|
||||
ishash, isident, isint, ismat, ismult, isnull, isnum, isobj,
|
||||
isobjtype, isodd, isprime, isrand, israndom, isreal, isrel,
|
||||
issimple, issq, isstr, istype
|
||||
append, delete, insert, pop, push, remove, rsearch, search,
|
||||
select, size,
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
isassoc, isatty, isblk, isconfig, isdefined, iserror, iseven, isfile,
|
||||
ishash, isident, isint, ismat, ismult, isnull, isnum, isobj,
|
||||
isobjtype, isodd, isprime, isrand, israndom, isreal, isrel,
|
||||
issimple, issq, isstr, istype
|
||||
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -48,8 +49,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: islist,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: islist,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/islist,v $
|
||||
##
|
||||
## Under source code control: 1994/03/19 03:13:19
|
||||
|
@@ -25,7 +25,7 @@ LIMITS
|
||||
none
|
||||
|
||||
LINK LIBRARY
|
||||
none - XXX ???
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
obj,
|
||||
@@ -34,7 +34,7 @@ SEE ALSO
|
||||
isodd, isprime, isrand, israndom, isreal, isrel,
|
||||
issimple, issq, isstr, istype
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -50,8 +50,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: isobjtype,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: isobjtype,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/isobjtype,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 14:10:17
|
||||
|
13
help/isprime
13
help/isprime
@@ -45,13 +45,10 @@ LINK LIBRARY
|
||||
FLAG zisprime(ZVALUE x) (return 1 if prime, 0 not prime, -1 if >= 2^32)
|
||||
|
||||
SEE ALSO
|
||||
factor, lfactor, nextprime, prevprime, pfact, pix,
|
||||
isassoc, isatty, isblk, isconfig, isdefined, iserror, iseven, isfile,
|
||||
ishash, isident, isint, islist, ismat, ismult, isnull, isnum, isobj,
|
||||
isobjtype, isodd, isrand, israndom, isreal, isrel,
|
||||
issimple, issq, isstr, istype
|
||||
factor, lfactor, nextcand, nextprime, prevcand, prevprime,
|
||||
pfact, pix, ptest
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -67,8 +64,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: isprime,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: isprime,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/isprime,v $
|
||||
##
|
||||
## Under source code control: 1994/10/21 02:21:29
|
||||
|
20
help/isptr
20
help/isptr
@@ -23,13 +23,13 @@ DESCRIPTION
|
||||
strings and real numbers.
|
||||
|
||||
EXAMPLE
|
||||
> a = "abc", b = 3, B = blk()
|
||||
> p1 = &B[1]
|
||||
> p2 = &a
|
||||
> p3 = &*a
|
||||
> p4 = &*b
|
||||
> print isptr(a), isptr(p1), isptr(p2), isptr(p3), isptr(p4)
|
||||
0 1 2 3 4
|
||||
; a = "abc", b = 3, B = blk()
|
||||
; p1 = &B[1]
|
||||
; p2 = &a
|
||||
; p3 = &*a
|
||||
; p4 = &*b
|
||||
; print isptr(a), isptr(p1), isptr(p2), isptr(p3), isptr(p4)
|
||||
0 1 2 3 4
|
||||
|
||||
LIMITS
|
||||
none
|
||||
@@ -40,7 +40,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
isnum, isstr, isblk, isoctet
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -56,8 +56,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.2 $
|
||||
## @(#) $Id: isptr,v 29.2 2000/06/07 14:02:33 chongo Exp $
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: isptr,v 29.3 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/isptr,v $
|
||||
##
|
||||
## Under source code control: 1997/09/06 20:03:35
|
||||
|
@@ -13,8 +13,6 @@ DESCRIPTION
|
||||
Determine if x is a Blum-Blum-Shub pseudo-random number generator state.
|
||||
This function will return 1 if x is a file, 0 otherwise.
|
||||
|
||||
XXX - the interface to the Blum generator has not been not written.
|
||||
|
||||
EXAMPLE
|
||||
; a = srandom(0)
|
||||
; print israndom(a), israndom(0);
|
||||
@@ -33,7 +31,7 @@ SEE ALSO
|
||||
isobjtype, isodd, isprime, isrand, isreal, isrel,
|
||||
issimple, issq, isstr, istype
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -49,8 +47,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: israndom,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: israndom,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/israndom,v $
|
||||
##
|
||||
## Under source code control: 1995/11/11 05:09:41
|
||||
|
13
help/issq
13
help/issq
@@ -16,6 +16,15 @@ DESCRIPTION
|
||||
|
||||
return 1, otherwise return 0.
|
||||
|
||||
Note that issq() works on rational values, so:
|
||||
|
||||
issq(25/16) == 1
|
||||
|
||||
If you want to test for prefect square integers, you need to exclude
|
||||
non-integer values before you test:
|
||||
|
||||
isint(curds) && issq(curds)
|
||||
|
||||
EXAMPLE
|
||||
; print issq(25), issq(3), issq(0)
|
||||
1 0 1
|
||||
@@ -52,8 +61,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: issq,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: issq,v 29.4 2006/06/04 21:12:23 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/issq,v $
|
||||
##
|
||||
## Under source code control: 1994/10/21 02:21:31
|
||||
|
8
help/lcm
8
help/lcm
@@ -21,7 +21,7 @@ EXAMPLE
|
||||
-120 79.2 2
|
||||
|
||||
LIMITS
|
||||
none
|
||||
The number of arguments is not to exceed 1024.
|
||||
|
||||
LINK LIBRARY
|
||||
NUMBER *qlcm(NUMBER *x1, NUMBER *x2)
|
||||
@@ -29,7 +29,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
gcd
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -45,8 +45,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: lcm,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: lcm,v 29.4 2006/06/22 23:49:22 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/lcm,v $
|
||||
##
|
||||
## Under source code control: 1995/10/05 04:52:26
|
||||
|
@@ -40,7 +40,8 @@ LINK LIBRARY
|
||||
FULL zlowfactor(ZVALUE z, long count)
|
||||
|
||||
SEE ALSO
|
||||
factor
|
||||
factor, isprime, nextcand, nextprime, prevcand, prevprime,
|
||||
pfact, pix, ptest
|
||||
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
@@ -58,8 +59,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: lfactor,v 29.4 2006/06/01 11:36:02 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: lfactor,v 29.5 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/lfactor,v $
|
||||
##
|
||||
## Under source code control: 1995/12/18 12:34:57
|
||||
|
157
help/mat
157
help/mat
@@ -79,10 +79,10 @@ DESCRIPTION
|
||||
simple assignments, as in A[0,0] = 1, A[0,2] = 2;
|
||||
|
||||
If the index-range is left blank but an initializer list is specified
|
||||
as in
|
||||
as in:
|
||||
|
||||
mat A[] = {1, 2 }
|
||||
B = mat[] = {1, , 3, }
|
||||
; mat A[] = {1, 2 }
|
||||
; B = mat[] = {1, , 3, }
|
||||
|
||||
the matrix created is one-dimensional. If the list contains a
|
||||
positive number n of values or blanks, the result is as if the
|
||||
@@ -92,11 +92,13 @@ DESCRIPTION
|
||||
B[2] = 3. The specification mat[] = { } creates the same as mat[1].
|
||||
|
||||
If the index-range is left blank and no initializer list is specified,
|
||||
as in mat C[] or C = mat[], the matrix assigned to C has zero
|
||||
dimension; this has one element C[]. To assign a value using "= { ...}"
|
||||
at the same time as creating C, parentheses are required as in
|
||||
(mat[]) = {value} or (mat C[]) = {value}. Later a value may be
|
||||
assigned to C[] by C[] = value or C = {value}.
|
||||
as in mat C[] or C = mat[], the matrix assigned to C has zero
|
||||
dimension; this has one element C[].
|
||||
|
||||
To assign a value using "= { ...}" at the same time as creating C,
|
||||
parentheses are required as in (mat[]) = {value} or (mat C[]) =
|
||||
{value}. Later a value may be assigned to C[] by C[] = value or
|
||||
C = {value}.
|
||||
|
||||
The value assigned at any time to any element of a matrix can be of
|
||||
any type - number, string, list, matrix, object of previously specified
|
||||
@@ -106,10 +108,11 @@ DESCRIPTION
|
||||
If an element of a matrix is a structure for which indices or an
|
||||
object element specifier is required, an element of that structure is
|
||||
referred to by appropriate uses of [ ] or ., and so on if an element
|
||||
of that element is required. For example, one may have an expressions
|
||||
like
|
||||
of that element is required.
|
||||
|
||||
A[1,2][3].alpha[2];
|
||||
For example, one may have an expressions like:
|
||||
|
||||
; A[1,2][3].alpha[2];
|
||||
|
||||
if A[1,2][3].alpha is a list with at least three elements, A[1,2][3] is
|
||||
an object of a type like obj {alpha, beta}, A[1,2] is a matrix of
|
||||
@@ -165,7 +168,7 @@ DESCRIPTION
|
||||
|
||||
So that when one defines a 2D matrix such as:
|
||||
|
||||
mat X[2,3] = {1,2,3,4,5,6}
|
||||
; mat X[2,3] = {1,2,3,4,5,6}
|
||||
|
||||
then printing X results in:
|
||||
|
||||
@@ -174,20 +177,20 @@ DESCRIPTION
|
||||
|
||||
The default printing may be restored by
|
||||
|
||||
undefine mat_print;
|
||||
; undefine mat_print;
|
||||
|
||||
The keyword "mat" followed by two or more index-range-lists returns a
|
||||
matrix with indices specified by the first list, whose elements are
|
||||
matrices as determined by the later index-range-lists. For
|
||||
example mat[2][3] is a 2-element matrix, each of whose elements has
|
||||
as its value a 3-element matrix. Values may be assigned to the
|
||||
elements of the innermost matrices by nested = {...} operations as in
|
||||
elements of the innermost matrices by nested = {...} operations as in
|
||||
|
||||
mat [2][3] = {{1,2,3},{4,5,6}}
|
||||
; mat [2][3] = {{1,2,3},{4,5,6}}
|
||||
|
||||
An example of the use of mat with a declarator is
|
||||
|
||||
global mat A B [2,3], C [4]
|
||||
; global mat A B [2,3], C [4]
|
||||
|
||||
This creates, if they do not already exist, three global variables with
|
||||
names A, B, C, and assigns to A and B the value mat[2,3] and to C mat[4].
|
||||
@@ -284,21 +287,21 @@ DESCRIPTION
|
||||
when it is a divisor), int an integer, rnd a rounding-type
|
||||
specifier integer, real a real number.
|
||||
|
||||
num * A
|
||||
A * num
|
||||
A / num
|
||||
- A
|
||||
conj(A)
|
||||
A << int, A >> int
|
||||
scale(A, int)
|
||||
round(A, int, rnd)
|
||||
bround(A, int, rnd)
|
||||
appr(A, real, rnd)
|
||||
int(A)
|
||||
frac(A)
|
||||
A // real
|
||||
A % real
|
||||
A ^ int
|
||||
num * A
|
||||
A * num
|
||||
A / num
|
||||
- A
|
||||
conj(A)
|
||||
A << int, A >> int
|
||||
scale(A, int)
|
||||
round(A, int, rnd)
|
||||
bround(A, int, rnd)
|
||||
appr(A, real, rnd)
|
||||
int(A)
|
||||
frac(A)
|
||||
A // real
|
||||
A % real
|
||||
A ^ int
|
||||
|
||||
If A and B are one-dimensional of the same size dp(A, B) returns
|
||||
their dot-product, i.e. the sum of the products of corresponding
|
||||
@@ -344,56 +347,56 @@ DESCRIPTION
|
||||
in effect they are treated as linear arrays.
|
||||
|
||||
EXAMPLE
|
||||
> obj point {x,y}
|
||||
> mat A[5] = {1, 2+3i, "ab", mat[2] = {4,5}, obj point = {6,7}}
|
||||
> A
|
||||
mat [5] (5 elements, 5 nonzero):
|
||||
[0] = 1
|
||||
[1] = 2+3i
|
||||
[2] = "ab"
|
||||
[3] = mat [2] (2 elements, 2 nonzero)
|
||||
[4] = obj point {6, 7}
|
||||
; obj point {x,y}
|
||||
; mat A[5] = {1, 2+3i, "ab", mat[2] = {4,5}, obj point = {6,7}}
|
||||
; A
|
||||
mat [5] (5 elements, 5 nonzero):
|
||||
[0] = 1
|
||||
[1] = 2+3i
|
||||
[2] = "ab"
|
||||
[3] = mat [2] (2 elements, 2 nonzero)
|
||||
[4] = obj point {6, 7}
|
||||
|
||||
> print A[0], A[1], A[2], A[3][0], A[4].x
|
||||
1 2+3i ab 4 6
|
||||
; print A[0], A[1], A[2], A[3][0], A[4].x
|
||||
1 2+3i ab 4 6
|
||||
|
||||
> define point_add(a,b) = obj point = {a.x + b.x, a.y + b.y}
|
||||
point_add(a,b) defined
|
||||
; define point_add(a,b) = obj point = {a.x + b.x, a.y + b.y}
|
||||
point_add(a,b) defined
|
||||
|
||||
> mat [B] = {8, , "cd", mat[2] = {9,10}, obj point = {11,12}}
|
||||
> A + B
|
||||
; mat [B] = {8, , "cd", mat[2] = {9,10}, obj point = {11,12}}
|
||||
; A + B
|
||||
|
||||
mat [5] (5 elements, 5 nonzero):
|
||||
[0] = 9
|
||||
[1] = 2+3i
|
||||
[2] = "abcd"
|
||||
[3] = mat [2] (2 elements, 2 nonzero)
|
||||
[4] = obj point {17, 19}
|
||||
mat [5] (5 elements, 5 nonzero):
|
||||
[0] = 9
|
||||
[1] = 2+3i
|
||||
[2] = "abcd"
|
||||
[3] = mat [2] (2 elements, 2 nonzero)
|
||||
[4] = obj point {17, 19}
|
||||
|
||||
> mat C[2,2] = {1,2,3,4}
|
||||
> C^10
|
||||
; mat C[2,2] = {1,2,3,4}
|
||||
; C^10
|
||||
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 4783807
|
||||
[0,1] = 6972050
|
||||
[1,0] = 10458075
|
||||
[1,1] = 15241882
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 4783807
|
||||
[0,1] = 6972050
|
||||
[1,0] = 10458075
|
||||
[1,1] = 15241882
|
||||
|
||||
> C^-10
|
||||
; C^-10
|
||||
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 14884.650390625
|
||||
[0,1] = -6808.642578125
|
||||
[1,0] = -10212.9638671875
|
||||
[1,1] = 4671.6865234375
|
||||
mat [2,2] (4 elements, 4 nonzero):
|
||||
[0,0] = 14884.650390625
|
||||
[0,1] = -6808.642578125
|
||||
[1,0] = -10212.9638671875
|
||||
[1,1] = 4671.6865234375
|
||||
|
||||
> mat A[4] = {1,2,3,4}, A * reverse(A);
|
||||
; mat A[4] = {1,2,3,4}, A * reverse(A);
|
||||
|
||||
mat [4] (4 elements, 4 nonzero):
|
||||
[0] = 4
|
||||
[1] = 6
|
||||
[2] = 6
|
||||
[3] = 4
|
||||
mat [4] (4 elements, 4 nonzero):
|
||||
[0] = 4
|
||||
[1] = 6
|
||||
[2] = 6
|
||||
[3] = 4
|
||||
|
||||
LIMITS
|
||||
The theoretical upper bound for the absolute values of indices is
|
||||
@@ -407,11 +410,11 @@ LINK LIBRARY
|
||||
n/a
|
||||
|
||||
SEE ALSO
|
||||
ismat, matdim, matmax, matmin, mattrans, mattrace, matsum, det, inverse,
|
||||
isident, test, config, search, rsearch, reverse, copy, blkcpy, dp, cp,
|
||||
randperm, sort
|
||||
ismat, matdim, matmax, matmin, mattrans, mattrace, matsum, matfill,
|
||||
det, inverse, isident, test, config, search, rsearch, reverse, copy,
|
||||
blkcpy, dp, cp, randperm, sort
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -427,8 +430,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: mat,v 29.4 2005/10/18 10:08:45 chongo Exp $
|
||||
## @(#) $Revision: 29.7 $
|
||||
## @(#) $Id: mat,v 29.7 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/mat,v $
|
||||
##
|
||||
## Under source code control: 1991/07/21 04:37:22
|
||||
|
10
help/matdim
10
help/matdim
@@ -24,9 +24,11 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
XXX - fill in
|
||||
mat, ismat, matmax, matmin, mattrans, mattrace, matsum, matfill,
|
||||
det, inverse, isident, test, config, search, rsearch, reverse, copy,
|
||||
blkcpy, dp, cp, randperm, sort
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -42,8 +44,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: matdim,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: matdim,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/matdim,v $
|
||||
##
|
||||
## Under source code control: 1995/10/25 04:03:45
|
||||
|
10
help/matfill
10
help/matfill
@@ -37,9 +37,11 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
XXX - fill in
|
||||
mat, ismat, matdim, matmax, matmin, mattrans, mattrace, matsum,
|
||||
det, inverse, isident, test, config, search, rsearch, reverse, copy,
|
||||
blkcpy, dp, cp, randperm, sort
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -55,8 +57,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: matfill,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: matfill,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/matfill,v $
|
||||
##
|
||||
## Under source code control: 1995/10/25 04:03:45
|
||||
|
10
help/matmax
10
help/matmax
@@ -26,9 +26,11 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
XXX - fill in
|
||||
mat, ismat, matdim, matmin, mattrans, mattrace, matsum, matfill,
|
||||
det, inverse, isident, test, config, search, rsearch, reverse, copy,
|
||||
blkcpy, dp, cp, randperm, sort
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -44,8 +46,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: matmax,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: matmax,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/matmax,v $
|
||||
##
|
||||
## Under source code control: 1995/10/25 04:03:45
|
||||
|
10
help/matmin
10
help/matmin
@@ -26,9 +26,11 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
XXX - fill in
|
||||
mat, ismat, matdim, matmax, mattrans, mattrace, matsum, matfill,
|
||||
det, inverse, isident, test, config, search, rsearch, reverse, copy,
|
||||
blkcpy, dp, cp, randperm, sort
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -44,8 +46,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: matmin,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: matmin,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/matmin,v $
|
||||
##
|
||||
## Under source code control: 1995/10/25 04:03:45
|
||||
|
10
help/matsum
10
help/matsum
@@ -25,9 +25,11 @@ LINK LIBRARY
|
||||
void matsum(MATRIX *m, VALUE *vres);
|
||||
|
||||
SEE ALSO
|
||||
XXX - fill in
|
||||
mat, ismat, matdim, matmax, matmin, mattrans, mattrace, matfill,
|
||||
det, inverse, isident, test, config, search, rsearch, reverse, copy,
|
||||
blkcpy, dp, cp, randperm, sort
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -43,8 +45,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: matsum,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: matsum,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/matsum,v $
|
||||
##
|
||||
## Under source code control: 1995/10/25 04:03:46
|
||||
|
@@ -31,9 +31,11 @@ LINK LIBRARY
|
||||
MATRIX *mattrans(MATRIX *m)
|
||||
|
||||
SEE ALSO
|
||||
XXX - fill in
|
||||
mat, ismat, matdim, matmax, matmin, mattrace, matsum, matfill,
|
||||
det, inverse, isident, test, config, search, rsearch, reverse, copy,
|
||||
blkcpy, dp, cp, randperm, sort
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -49,8 +51,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: mattrans,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: mattrans,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/mattrans,v $
|
||||
##
|
||||
## Under source code control: 1995/10/25 04:03:46
|
||||
|
8
help/max
8
help/max
@@ -62,7 +62,7 @@ EXAMPLE
|
||||
3
|
||||
|
||||
LIMITS
|
||||
The number of arguments is not to exceed 100.
|
||||
The number of arguments is not to exceed 1024.
|
||||
|
||||
LINK LIBRARY
|
||||
NUMBER *qmax(NUMBER *x1, NUMBER *x2)
|
||||
@@ -70,7 +70,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
max, obj
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -86,8 +86,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: max,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: max,v 29.4 2006/06/22 23:49:22 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/max,v $
|
||||
##
|
||||
## Under source code control: 1995/10/05 04:52:27
|
||||
|
10
help/min
10
help/min
@@ -62,15 +62,15 @@ EXAMPLE
|
||||
1
|
||||
|
||||
LIMITS
|
||||
The number of arguments is not to exceed 100.
|
||||
The number of arguments is not to exceed 1024.
|
||||
|
||||
LINK LIBRARY
|
||||
NUMBER *qmin(NUMBER *x1, NUMBER *x2)
|
||||
|
||||
SEE ALSO
|
||||
max, obj
|
||||
max, obj, sum, ssq
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -86,8 +86,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: min,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: min,v 29.4 2006/06/22 23:49:22 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/min,v $
|
||||
##
|
||||
## Under source code control: 1995/10/05 04:52:27
|
||||
|
72
help/mod
72
help/mod
@@ -23,6 +23,24 @@ TYPES
|
||||
return number
|
||||
|
||||
DESCRIPTION
|
||||
The expression:
|
||||
|
||||
x % y
|
||||
|
||||
is equivalent to call:
|
||||
|
||||
mod(x, y)
|
||||
|
||||
The function:
|
||||
|
||||
mod(x, y, rnd)
|
||||
|
||||
is equivalent to:
|
||||
|
||||
config("mod", rnd), x % y
|
||||
|
||||
except that the global config("mod") value does not change.
|
||||
|
||||
If x is real or complex and y is zero, mod(x, y, rnd) returns x.
|
||||
|
||||
If x is complex, mod(x, y, rnd) returns
|
||||
@@ -32,18 +50,16 @@ DESCRIPTION
|
||||
|
||||
If x/y is an integer mod(x, y, rnd) returns zero.
|
||||
|
||||
If x/y is not an integer, mod(x, y, rnd) returns one of the two numbers
|
||||
r for which for some integer q, x = q * v + r and abs(r) < abs(y).
|
||||
Which of the two numbers is returned is controlled by rnd.
|
||||
If x/y is not an integer, mod(x, y, rnd) returns one of the two
|
||||
values of r for which for some integer q exists such that x = q * y + r
|
||||
and abs(r) < abs(y). Which of the two values or r that is returned is
|
||||
controlled by rnd.
|
||||
|
||||
If bit 4 of rnd is set (e.g. if 16 <= rnd < 32) abs(r) <= abs(y)/2;
|
||||
this uniquely determines r if abs(r) < abs(y)/2. If bit 4 of rnd is
|
||||
set and abs(r) = abs(y)/2, or if bit 4 of r is not set, the result for
|
||||
r depends on rnd as in the following table:
|
||||
|
||||
(Blank entries indicate that the description would be complicated
|
||||
and probably not of much interest.)
|
||||
|
||||
rnd & 15 sign of r parity of q
|
||||
|
||||
0 sgn(y)
|
||||
@@ -63,26 +79,36 @@ DESCRIPTION
|
||||
14 even if x > 0, otherwise odd
|
||||
15 odd if x > 0, otherwise even
|
||||
|
||||
This dependence on rnd is consistent with quo(x, y, rnd) and
|
||||
appr(x, y, rnd) in that for any real x and y and any integer rnd,
|
||||
NOTE: Blank entries in the table above indicate that the
|
||||
description would be complicated and probably not of
|
||||
much interest.
|
||||
|
||||
x = y * quo(x, y, rnd) + mod(x, y, rnd).
|
||||
mod(x, y, rnd) = x - appr(x, y, rnd)
|
||||
The C language method of modulus and integer division is:
|
||||
|
||||
If y and rnd are fixed and mod(x, y, rnd) is to be considered as
|
||||
a canonical residue of x modulo y, bits 1 and 3 of rnd should be
|
||||
zero: if 0 <= rnd < 32, it is only for rnd = 0, 1, 4, 5, 16, 17,
|
||||
20, or 21, that the set of possible values for mod(x, y, rnd)
|
||||
form an interval of length y, and for any x1, x2,
|
||||
config("quomod", 2)
|
||||
config("quo", 2)
|
||||
config("mod", 2)
|
||||
|
||||
mod(x1, y, rnd) = mod(x2, y, rnd)
|
||||
This dependence on rnd is consistent with quo(x, y, rnd) and
|
||||
appr(x, y, rnd) in that for any real x and y and any integer rnd,
|
||||
|
||||
is equivalent to:
|
||||
x = y * quo(x, y, rnd) + mod(x, y, rnd).
|
||||
mod(x, y, rnd) = x - appr(x, y, rnd)
|
||||
|
||||
x1 is congruent to x2 modulo y.
|
||||
If y and rnd are fixed and mod(x, y, rnd) is to be considered as
|
||||
a canonical residue of x % y, bits 1 and 3 of rnd should be
|
||||
zero: if 0 <= rnd < 32, it is only for rnd = 0, 1, 4, 5, 16, 17,
|
||||
20, or 21, that the set of possible values for mod(x, y, rnd)
|
||||
form an interval of length y, and for any x1, x2,
|
||||
|
||||
This is particularly relevant when working with the ring of
|
||||
integers modulo an integer y.
|
||||
mod(x1, y, rnd) = mod(x2, y, rnd)
|
||||
|
||||
is equivalent to:
|
||||
|
||||
x1 is congruent to x2 modulo y.
|
||||
|
||||
This is particularly relevant when working with the ring of
|
||||
integers modulo an integer y.
|
||||
|
||||
EXAMPLE
|
||||
; print mod(11,5,0), mod(11,5,1), mod(-11,5,2), mod(-11,-5,3)
|
||||
@@ -111,7 +137,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
quo, quomod, //, %
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -127,8 +153,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: mod,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: mod,v 29.5 2006/06/24 19:06:58 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/mod,v $
|
||||
##
|
||||
## Under source code control: 1995/09/18 02:09:31
|
||||
|
10
help/name
10
help/name
@@ -26,19 +26,19 @@ EXAMPLE
|
||||
; name(f)
|
||||
"/tmp/beta"
|
||||
|
||||
; names(files(0))
|
||||
; name(files(0))
|
||||
"(stdin)"
|
||||
|
||||
LIMITS
|
||||
none
|
||||
|
||||
LINK LIBRARY
|
||||
none - XXX ???
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
blk, fopen
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -54,8 +54,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: name,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: name,v 29.5 2006/08/20 15:01:57 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/name,v $
|
||||
##
|
||||
## Under source code control: 1997/04/05 14:12:44
|
||||
|
@@ -44,12 +44,12 @@ EXAMPLE
|
||||
"triangle side length <= 0"
|
||||
|
||||
; define area(a,b,c) {
|
||||
>> local s;
|
||||
>> if (!(a > 0) || !(b > 0) || !(c > 0)) return e1;
|
||||
>> s = (a + b + c)/2;
|
||||
>> if (s <= a || s <= b || s <= c) return newerror("Non-triangle sides");
|
||||
>> return sqrt(s * (s - a) * (s - b) * (s - c));
|
||||
>> }
|
||||
;; local s;
|
||||
;; if (!(a > 0) || !(b > 0) || !(c > 0)) return e1;
|
||||
;; s = (a + b + c)/2;
|
||||
;; if (s <= a || s <= b || s <= c) return newerror("Non-triangle sides");
|
||||
;; return sqrt(s * (s - a) * (s - b) * (s - c));
|
||||
;; }
|
||||
"area" defined
|
||||
|
||||
; A = area(8,2,5);
|
||||
@@ -86,8 +86,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: newerror,v 29.4 2006/05/21 07:31:46 chongo Exp $
|
||||
## @(#) $Revision: 29.5 $
|
||||
## @(#) $Id: newerror,v 29.5 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/newerror,v $
|
||||
##
|
||||
## Under source code control: 1996/04/30 03:39:56
|
||||
|
@@ -74,9 +74,10 @@ LINK LIBRARY
|
||||
ZVALUE *cand)
|
||||
|
||||
SEE ALSO
|
||||
prevcand, ptest
|
||||
factor, isprime, lfactor, nextprime, prevcand, prevprime,
|
||||
pfact, pix, ptest
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -92,8 +93,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: nextcand,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: nextcand,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/nextcand,v $
|
||||
##
|
||||
## Under source code control: 1996/02/25 00:27:43
|
||||
|
@@ -33,9 +33,10 @@ LINK LIBRARY
|
||||
FULL znprime(ZVALUE z)
|
||||
|
||||
SEE ALSO
|
||||
prevprime
|
||||
factor, isprime, lfactor, nextcand, prevcand, prevprime,
|
||||
pfact, pix, ptest
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -51,8 +52,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: nextprime,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: nextprime,v 29.4 2006/06/25 22:16:55 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/nextprime,v $
|
||||
##
|
||||
## Under source code control: 1995/12/18 12:34:57
|
||||
|
@@ -66,7 +66,7 @@ EXAMPLE
|
||||
27
|
||||
|
||||
LIMITS
|
||||
The number of arguments is not to exceed 100.
|
||||
The number of arguments is not to exceed 1024.
|
||||
|
||||
LINK LIBRARY
|
||||
none
|
||||
@@ -74,7 +74,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
isnull, test
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -90,8 +90,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: null,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: null,v 29.4 2006/06/22 23:49:22 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/null,v $
|
||||
##
|
||||
## Under source code control: 1996/03/12 23:10:01
|
||||
|
16
help/param
16
help/param
@@ -32,11 +32,11 @@ DESCRIPTION
|
||||
|
||||
EXAMPLE
|
||||
; define f() {
|
||||
>> local n, v = 0;
|
||||
>> for (n = 1; n <= param(0); n++)
|
||||
>> v += param(n)^2;
|
||||
>> return v;
|
||||
>> }
|
||||
;; local n, v = 0;
|
||||
;; for (n = 1; n <= param(0); n++)
|
||||
;; v += param(n)^2;
|
||||
;; return v;
|
||||
;; }
|
||||
|
||||
; print f(), f(1), f(1,2), f(1,2,3)
|
||||
0 1 5 14
|
||||
@@ -50,7 +50,7 @@ LINK LIBRARY
|
||||
SEE ALSO
|
||||
argv, command
|
||||
|
||||
## Copyright (C) 1999 Landon Curt Noll
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
## the terms of the version 2.1 of the GNU Lesser General Public License
|
||||
@@ -66,8 +66,8 @@ SEE ALSO
|
||||
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
||||
## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## @(#) $Revision: 29.3 $
|
||||
## @(#) $Id: param,v 29.3 2006/05/07 07:25:46 chongo Exp $
|
||||
## @(#) $Revision: 29.4 $
|
||||
## @(#) $Id: param,v 29.4 2006/06/10 12:28:10 chongo Exp $
|
||||
## @(#) $Source: /usr/local/src/cmd/calc/help/RCS/param,v $
|
||||
##
|
||||
## Under source code control: 1996/03/12 23:10:01
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user