Go forward to Calc Mode Line. Go backward to Language Modes. Go up to Mode Settings.

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, 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.  *Note
Conditionals in Macros::.)