calc: Modes Variable
7.9 The ‘Modes’ Variable
========================
The ‘m g’ (‘calc-get-modes’) command pushes onto the stack a vector of
numbers that describes the various mode settings that are in effect.
With a numeric prefix argument, it pushes only the Nth mode, i.e., the
Nth element of this vector. Keyboard macros can use the ‘m g’ command
to modify their behavior based on the current mode settings.
The modes vector is also available in the special variable ‘Modes’.
In other words, ‘m g’ is like ‘s r Modes <RET>’. It will not work to
store into this variable; in fact, if you do, ‘Modes’ will cease to
track the current modes. (The ‘m g’ command will continue to work,
however.)
In general, each number in this vector is suitable as a numeric
prefix argument to the associated mode-setting command. (Recall that
the ‘~’ key takes a number from the stack and gives it as a numeric
prefix to the next command.)
The elements of the modes vector are as follows:
1. Current precision. Default is 12; associated command is ‘p’.
2. Binary word size. Default is 32; associated command is ‘b w’.
3. Stack size (not counting the value about to be pushed by ‘m g’).
This is zero if ‘m g’ is executed with an empty stack.
4. Number radix. Default is 10; command is ‘d r’.
5. Floating-point format. This is the number of digits, plus the
constant 0 for normal notation, 10000 for scientific notation,
20000 for engineering notation, or 30000 for fixed-point notation.
These codes are acceptable as prefix arguments to the ‘d n’
command, but note that this may lose information: For example, ‘d
s’ and ‘C-u 12 d s’ have similar (but not quite identical) effects
if the current precision is 12, but they both produce a code of
10012, which will be treated by ‘d n’ as ‘C-u 12 d s’. If the
precision then changes, the float format will still be frozen at 12
significant figures.
6. Angular mode. Default is 1 (degrees). Other values are 2
(radians) and 3 (HMS). The ‘m d’ command accepts these prefixes.
7. Symbolic mode. Value is 0 or 1; default is 0. Command is ‘m s’.
8. Fraction mode. Value is 0 or 1; default is 0. Command is ‘m f’.
9. Polar mode. Value is 0 (rectangular) or 1 (polar); default is 0.
Command is ‘m p’.
10. Matrix/Scalar mode. Default value is -1. Value is 0 for Scalar
mode, -2 for Matrix mode, -3 for square Matrix mode, or N for NxN
Matrix mode. Command is ‘m v’.
11. Simplification mode. Default is 1. Value is -1 for off (‘m O’),
0 for ‘m N’, 2 for ‘m B’, 3 for ‘m A’, 4 for ‘m E’, or 5 for ‘m U’.
The ‘m D’ command accepts these prefixes.
12. Infinite mode. Default is -1 (off). Value is 1 if the mode is
on, or 0 if the mode is on with positive zeros. Command is ‘m i’.
For example, the sequence ‘M-1 m g <RET> 2 + ~ p’ increases the
precision by two, leaving a copy of the old precision on the stack.
Later, ‘~ p’ will restore the original precision using that stack value.
(This sequence might be especially useful inside a keyboard macro.)
As another example, ‘M-3 m g 1 - ~ <DEL>’ deletes all but the oldest
(bottommost) stack entry.
Yet another example: The HP-48 “round” command rounds a number to the
current displayed precision. You could roughly emulate this in Calc
with the sequence ‘M-5 m g 10000 % ~ c c’. (This would not work for
fixed-point mode, but it wouldn’t be hard to do a full emulation with
the help of the ‘Z [’ and ‘Z ]’ programming commands.
Conditionals in Macros.)