Yet Another Eval v1.0
=====================
By Peter Gordon (pete()petergordon.org.uk)
1. What is it?
--------------
YAE is another replacement for the standard AmigaOS eval command, although
it is not a direct replacement since it doesn't currently use the same
argument format.
It has the following advantages over Eval:
· Operator precedence
· Boolean operators
· Floating point mode with various trigonometry and logarithmic functions
· Integers can be expressed in decimal, hexadecimal or binary
· The source is freely available
· 64bit integer math, double precision floating point math
2. Usage
--------
YAE takes the following arguments:
EXPRESSION/A,FLOAT/S,HEX/S
The first is the expression to evaluate. If the "FLOAT" switch is specified,
the expression will be evaluated as double-precision floating point instead
of integer. If the "HEX" switch is specified, the output will be in hex
instead of decimal.
If the expression contains spaces, or an equals sign, you should enclose it
in quotes (").
3. Specifying values
--------------------
In integer mode, numbers are specified in decimal, binary, or hex:
Decimal = 100
Hex = $64 or 0x64
Binary = %1100100
Values can also be retrieved from environment variables. Simple put the
variable name, enclosed in apostrophes, into the expression. For example:
1+'myvar'
adds one to the value in the environment variable named myvar.
4. Operators
------------
YAE supports two types of operators; unary and binary.
Unary operators precede a value and affect only the value immediately after
them, such as the unary minus (swap sign):
-1 means minus one.
Brackets can be used after a unary operator, in which case it will affect
the result of the expression in the brackets:
-(2+1) means minus three.
-(-1) means 1 :)
YAE knows the following unary operators:
Operator Description Integer mode? Float mode?
------------------------------------------------------------
- Unary minus Yes Yes
ABS Absolute value Yes Yes
NOT Binary invert Yes No
~ Binary invert Yes No
SIN Sine No Yes
COS Cosine No Yes
TAN Tangent No Yes
SINH Hyperbolic Sine No Yes
COSH Hyperbolic Cosine No Yes
TANH Hyperbolic Tangent No Yes
ASIN Arcsine No Yes
ACOS Arccosine No Yes
ATAN Arctangent No Yes
SQRT Square root Yes Yes
LOG Logarithm Yes Yes
LOG10 Logarithm Yes Yes
EXP Exponential func No Yes
ROUND Round to nearest No Yes
CEIL Round up No Yes
FLOOR Round down No Yes
TRUNC Truncate No Yes
Binary operators operate on two values to provide a result (not to be
confused with bit-wise operations).
YAE knows the following binary operators:
Operator Description Precedence Integer mode? Float mode?
-------------------------------------------------------------------------
* Multiply 3 Yes Yes
× Multiply 3 Yes Yes
/ Divide 3 Yes Yes
÷ Divide 3 Yes Yes
+ Add 4 Yes Yes
- Subtract 4 Yes Yes
^ Power 3 Yes Yes
MOD Modulo 3 Yes No
XOR Exclusive or 6 Yes No
SHR Shift right 3 Yes No
>> Shift right 3 Yes No
SHL Shift left 3 Yes No
<< Shift left 3 Yes No
AND And 5 Yes No
& And 5 Yes No
OR Or 5 Yes No
| Or 5 Yes No
= Equal to 7 Yes No
> Greater than 7 Yes No
< Less than 7 Yes No
!= Not equal to 7 Yes Yes
>= Greater or equal 7 Yes Yes
<= Less than or equal 7 Yes Yes
(note: the precedence column is a bit counter-intuitive; the lower number
operators will be evaluated before the higher number ones)
examples:
1.Workbench:> yae "1=2"
0
1.Workbench:> yae sin(1.25) float
0.948985
1.Workbench:> yae $64
100
1.Workbench:> yae 2+3*4+5*6
44
and so on...
5. To Do
--------
Please feel free to tackle these yourself and pass the source changes back :)
· Better documentation
· AmigaGuide or HTML documentation
· Better output format control
· Suggestions?
| |