aboutsummaryrefslogtreecommitdiff
path: root/contrib/bc/manuals/dc/ENP.1.md
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bc/manuals/dc/ENP.1.md')
-rw-r--r--contrib/bc/manuals/dc/ENP.1.md1036
1 files changed, 0 insertions, 1036 deletions
diff --git a/contrib/bc/manuals/dc/ENP.1.md b/contrib/bc/manuals/dc/ENP.1.md
deleted file mode 100644
index a2facd8d8cdd..000000000000
--- a/contrib/bc/manuals/dc/ENP.1.md
+++ /dev/null
@@ -1,1036 +0,0 @@
-<!---
-
-SPDX-License-Identifier: BSD-2-Clause
-
-Copyright (c) 2018-2021 Gavin D. Howard and contributors.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
--->
-
-# Name
-
-dc - arbitrary-precision decimal reverse-Polish notation calculator
-
-# SYNOPSIS
-
-**dc** [**-hiPRvVx**] [**-\-version**] [**-\-help**] [**-\-interactive**] [**-\-no-prompt**] [**-\-no-read-prompt**] [**-\-extended-register**] [**-e** *expr*] [**-\-expression**=*expr*...] [**-f** *file*...] [**-\-file**=*file*...] [*file*...]
-
-# DESCRIPTION
-
-dc(1) is an arbitrary-precision calculator. It uses a stack (reverse Polish
-notation) to store numbers and results of computations. Arithmetic operations
-pop arguments off of the stack and push the results.
-
-If no files are given on the command-line as extra arguments (i.e., not as
-**-f** or **-\-file** arguments), then dc(1) reads from **stdin**. Otherwise,
-those files are processed, and dc(1) will then exit.
-
-This is different from the dc(1) on OpenBSD and possibly other dc(1)
-implementations, where **-e** (**-\-expression**) and **-f** (**-\-file**)
-arguments cause dc(1) to execute them and exit. The reason for this is that this
-dc(1) allows users to set arguments in the environment variable **DC_ENV_ARGS**
-(see the **ENVIRONMENT VARIABLES** section). Any expressions given on the
-command-line should be used to set up a standard environment. For example, if a
-user wants the **scale** always set to **10**, they can set **DC_ENV_ARGS** to
-**-e 10k**, and this dc(1) will always start with a **scale** of **10**.
-
-If users want to have dc(1) exit after processing all input from **-e** and
-**-f** arguments (and their equivalents), then they can just simply add **-e q**
-as the last command-line argument or define the environment variable
-**DC_EXPR_EXIT**.
-
-# OPTIONS
-
-The following are the options that dc(1) accepts.
-
-**-h**, **-\-help**
-
-: Prints a usage message and quits.
-
-**-v**, **-V**, **-\-version**
-
-: Print the version information (copyright header) and exit.
-
-**-i**, **-\-interactive**
-
-: Forces interactive mode. (See the **INTERACTIVE MODE** section.)
-
- This is a **non-portable extension**.
-
-**-P**, **-\-no-prompt**
-
-: This option is a no-op.
-
- This is a **non-portable extension**.
-
-**-R**, **-\-no-read-prompt**
-
-: This option is a no-op.
-
- This is a **non-portable extension**.
-
-**-x** **-\-extended-register**
-
-: Enables extended register mode. See the *Extended Register Mode* subsection
- of the **REGISTERS** section for more information.
-
- This is a **non-portable extension**.
-
-**-e** *expr*, **-\-expression**=*expr*
-
-: Evaluates *expr*. If multiple expressions are given, they are evaluated in
- order. If files are given as well (see below), the expressions and files are
- evaluated in the order given. This means that if a file is given before an
- expression, the file is read in and evaluated first.
-
- If this option is given on the command-line (i.e., not in **DC_ENV_ARGS**,
- see the **ENVIRONMENT VARIABLES** section), then after processing all
- expressions and files, dc(1) will exit, unless **-** (**stdin**) was given
- as an argument at least once to **-f** or **-\-file**, whether on the
- command-line or in **DC_ENV_ARGS**. However, if any other **-e**,
- **-\-expression**, **-f**, or **-\-file** arguments are given after **-f-**
- or equivalent is given, dc(1) will give a fatal error and exit.
-
- This is a **non-portable extension**.
-
-**-f** *file*, **-\-file**=*file*
-
-: Reads in *file* and evaluates it, line by line, as though it were read
- through **stdin**. If expressions are also given (see above), the
- expressions are evaluated in the order given.
-
- If this option is given on the command-line (i.e., not in **DC_ENV_ARGS**,
- see the **ENVIRONMENT VARIABLES** section), then after processing all
- expressions and files, dc(1) will exit, unless **-** (**stdin**) was given
- as an argument at least once to **-f** or **-\-file**. However, if any other
- **-e**, **-\-expression**, **-f**, or **-\-file** arguments are given after
- **-f-** or equivalent is given, dc(1) will give a fatal error and exit.
-
- This is a **non-portable extension**.
-
-All long options are **non-portable extensions**.
-
-# STDOUT
-
-Any non-error output is written to **stdout**. In addition, if history (see the
-**HISTORY** section) and the prompt (see the **TTY MODE** section) are enabled,
-both are output to **stdout**.
-
-**Note**: Unlike other dc(1) implementations, this dc(1) will issue a fatal
-error (see the **EXIT STATUS** section) if it cannot write to **stdout**, so if
-**stdout** is closed, as in **dc <file> >&-**, it will quit with an error. This
-is done so that dc(1) can report problems when **stdout** is redirected to a
-file.
-
-If there are scripts that depend on the behavior of other dc(1) implementations,
-it is recommended that those scripts be changed to redirect **stdout** to
-**/dev/null**.
-
-# STDERR
-
-Any error output is written to **stderr**.
-
-**Note**: Unlike other dc(1) implementations, this dc(1) will issue a fatal
-error (see the **EXIT STATUS** section) if it cannot write to **stderr**, so if
-**stderr** is closed, as in **dc <file> 2>&-**, it will quit with an error. This
-is done so that dc(1) can exit with an error code when **stderr** is redirected
-to a file.
-
-If there are scripts that depend on the behavior of other dc(1) implementations,
-it is recommended that those scripts be changed to redirect **stderr** to
-**/dev/null**.
-
-# SYNTAX
-
-Each item in the input source code, either a number (see the **NUMBERS**
-section) or a command (see the **COMMANDS** section), is processed and executed,
-in order. Input is processed immediately when entered.
-
-**ibase** is a register (see the **REGISTERS** section) that determines how to
-interpret constant numbers. It is the "input" base, or the number base used for
-interpreting input numbers. **ibase** is initially **10**. The max allowable
-value for **ibase** is **16**. The min allowable value for **ibase** is **2**.
-The max allowable value for **ibase** can be queried in dc(1) programs with the
-**T** command.
-
-**obase** is a register (see the **REGISTERS** section) that determines how to
-output results. It is the "output" base, or the number base used for outputting
-numbers. **obase** is initially **10**. The max allowable value for **obase** is
-**DC_BASE_MAX** and can be queried with the **U** command. The min allowable
-value for **obase** is **2**. Values are output in the specified base.
-
-The *scale* of an expression is the number of digits in the result of the
-expression right of the decimal point, and **scale** is a register (see the
-**REGISTERS** section) that sets the precision of any operations (with
-exceptions). **scale** is initially **0**. **scale** cannot be negative. The max
-allowable value for **scale** can be queried in dc(1) programs with the **V**
-command.
-
-## Comments
-
-Comments go from **#** until, and not including, the next newline. This is a
-**non-portable extension**.
-
-# NUMBERS
-
-Numbers are strings made up of digits, uppercase letters up to **F**, and at
-most **1** period for a radix. Numbers can have up to **DC_NUM_MAX** digits.
-Uppercase letters are equal to **9** + their position in the alphabet (i.e.,
-**A** equals **10**, or **9+1**). If a digit or letter makes no sense with the
-current value of **ibase**, they are set to the value of the highest valid digit
-in **ibase**.
-
-Single-character numbers (i.e., **A** alone) take the value that they would have
-if they were valid digits, regardless of the value of **ibase**. This means that
-**A** alone always equals decimal **10** and **F** alone always equals decimal
-**15**.
-
-# COMMANDS
-
-The valid commands are listed below.
-
-## Printing
-
-These commands are used for printing.
-
-**p**
-
-: Prints the value on top of the stack, whether number or string, and prints a
- newline after.
-
- This does not alter the stack.
-
-**n**
-
-: Prints the value on top of the stack, whether number or string, and pops it
- off of the stack.
-
-**P**
-
-: Pops a value off the stack.
-
- If the value is a number, it is truncated and the absolute value of the
- result is printed as though **obase** is **UCHAR_MAX+1** and each digit is
- interpreted as an ASCII character, making it a byte stream.
-
- If the value is a string, it is printed without a trailing newline.
-
- This is a **non-portable extension**.
-
-**f**
-
-: Prints the entire contents of the stack, in order from newest to oldest,
- without altering anything.
-
- Users should use this command when they get lost.
-
-## Arithmetic
-
-These are the commands used for arithmetic.
-
-**+**
-
-: The top two values are popped off the stack, added, and the result is pushed
- onto the stack. The *scale* of the result is equal to the max *scale* of
- both operands.
-
-**-**
-
-: The top two values are popped off the stack, subtracted, and the result is
- pushed onto the stack. The *scale* of the result is equal to the max
- *scale* of both operands.
-
-**\***
-
-: The top two values are popped off the stack, multiplied, and the result is
- pushed onto the stack. If **a** is the *scale* of the first expression and
- **b** is the *scale* of the second expression, the *scale* of the result
- is equal to **min(a+b,max(scale,a,b))** where **min()** and **max()** return
- the obvious values.
-
-**/**
-
-: The top two values are popped off the stack, divided, and the result is
- pushed onto the stack. The *scale* of the result is equal to **scale**.
-
- The first value popped off of the stack must be non-zero.
-
-**%**
-
-: The top two values are popped off the stack, remaindered, and the result is
- pushed onto the stack.
-
- Remaindering is equivalent to 1) Computing **a/b** to current **scale**, and
- 2) Using the result of step 1 to calculate **a-(a/b)\*b** to *scale*
- **max(scale+scale(b),scale(a))**.
-
- The first value popped off of the stack must be non-zero.
-
-**~**
-
-: The top two values are popped off the stack, divided and remaindered, and
- the results (divided first, remainder second) are pushed onto the stack.
- This is equivalent to **x y / x y %** except that **x** and **y** are only
- evaluated once.
-
- The first value popped off of the stack must be non-zero.
-
- This is a **non-portable extension**.
-
-**\^**
-
-: The top two values are popped off the stack, the second is raised to the
- power of the first, and the result is pushed onto the stack. The *scale* of
- the result is equal to **scale**.
-
- The first value popped off of the stack must be an integer, and if that
- value is negative, the second value popped off of the stack must be
- non-zero.
-
-**v**
-
-: The top value is popped off the stack, its square root is computed, and the
- result is pushed onto the stack. The *scale* of the result is equal to
- **scale**.
-
- The value popped off of the stack must be non-negative.
-
-**\_**
-
-: If this command *immediately* precedes a number (i.e., no spaces or other
- commands), then that number is input as a negative number.
-
- Otherwise, the top value on the stack is popped and copied, and the copy is
- negated and pushed onto the stack. This behavior without a number is a
- **non-portable extension**.
-
-**b**
-
-: The top value is popped off the stack, and if it is zero, it is pushed back
- onto the stack. Otherwise, its absolute value is pushed onto the stack.
-
- This is a **non-portable extension**.
-
-**|**
-
-: The top three values are popped off the stack, a modular exponentiation is
- computed, and the result is pushed onto the stack.
-
- The first value popped is used as the reduction modulus and must be an
- integer and non-zero. The second value popped is used as the exponent and
- must be an integer and non-negative. The third value popped is the base and
- must be an integer.
-
- This is a **non-portable extension**.
-
-**G**
-
-: The top two values are popped off of the stack, they are compared, and a
- **1** is pushed if they are equal, or **0** otherwise.
-
- This is a **non-portable extension**.
-
-**N**
-
-: The top value is popped off of the stack, and if it a **0**, a **1** is
- pushed; otherwise, a **0** is pushed.
-
- This is a **non-portable extension**.
-
-**(**
-
-: The top two values are popped off of the stack, they are compared, and a
- **1** is pushed if the first is less than the second, or **0** otherwise.
-
- This is a **non-portable extension**.
-
-**{**
-
-: The top two values are popped off of the stack, they are compared, and a
- **1** is pushed if the first is less than or equal to the second, or **0**
- otherwise.
-
- This is a **non-portable extension**.
-
-**)**
-
-: The top two values are popped off of the stack, they are compared, and a
- **1** is pushed if the first is greater than the second, or **0** otherwise.
-
- This is a **non-portable extension**.
-
-**}**
-
-: The top two values are popped off of the stack, they are compared, and a
- **1** is pushed if the first is greater than or equal to the second, or
- **0** otherwise.
-
- This is a **non-portable extension**.
-
-**M**
-
-: The top two values are popped off of the stack. If they are both non-zero, a
- **1** is pushed onto the stack. If either of them is zero, or both of them
- are, then a **0** is pushed onto the stack.
-
- This is like the **&&** operator in bc(1), and it is *not* a short-circuit
- operator.
-
- This is a **non-portable extension**.
-
-**m**
-
-: The top two values are popped off of the stack. If at least one of them is
- non-zero, a **1** is pushed onto the stack. If both of them are zero, then a
- **0** is pushed onto the stack.
-
- This is like the **||** operator in bc(1), and it is *not* a short-circuit
- operator.
-
- This is a **non-portable extension**.
-
-## Stack Control
-
-These commands control the stack.
-
-**c**
-
-: Removes all items from ("clears") the stack.
-
-**d**
-
-: Copies the item on top of the stack ("duplicates") and pushes the copy onto
- the stack.
-
-**r**
-
-: Swaps ("reverses") the two top items on the stack.
-
-**R**
-
-: Pops ("removes") the top value from the stack.
-
-## Register Control
-
-These commands control registers (see the **REGISTERS** section).
-
-**s**_r_
-
-: Pops the value off the top of the stack and stores it into register *r*.
-
-**l**_r_
-
-: Copies the value in register *r* and pushes it onto the stack. This does not
- alter the contents of *r*.
-
-**S**_r_
-
-: Pops the value off the top of the (main) stack and pushes it onto the stack
- of register *r*. The previous value of the register becomes inaccessible.
-
-**L**_r_
-
-: Pops the value off the top of the stack for register *r* and push it onto
- the main stack. The previous value in the stack for register *r*, if any, is
- now accessible via the **l**_r_ command.
-
-## Parameters
-
-These commands control the values of **ibase**, **obase**, and **scale**. Also
-see the **SYNTAX** section.
-
-**i**
-
-: Pops the value off of the top of the stack and uses it to set **ibase**,
- which must be between **2** and **16**, inclusive.
-
- If the value on top of the stack has any *scale*, the *scale* is ignored.
-
-**o**
-
-: Pops the value off of the top of the stack and uses it to set **obase**,
- which must be between **2** and **DC_BASE_MAX**, inclusive (see the
- **LIMITS** section).
-
- If the value on top of the stack has any *scale*, the *scale* is ignored.
-
-**k**
-
-: Pops the value off of the top of the stack and uses it to set **scale**,
- which must be non-negative.
-
- If the value on top of the stack has any *scale*, the *scale* is ignored.
-
-**I**
-
-: Pushes the current value of **ibase** onto the main stack.
-
-**O**
-
-: Pushes the current value of **obase** onto the main stack.
-
-**K**
-
-: Pushes the current value of **scale** onto the main stack.
-
-**T**
-
-: Pushes the maximum allowable value of **ibase** onto the main stack.
-
- This is a **non-portable extension**.
-
-**U**
-
-: Pushes the maximum allowable value of **obase** onto the main stack.
-
- This is a **non-portable extension**.
-
-**V**
-
-: Pushes the maximum allowable value of **scale** onto the main stack.
-
- This is a **non-portable extension**.
-
-## Strings
-
-The following commands control strings.
-
-dc(1) can work with both numbers and strings, and registers (see the
-**REGISTERS** section) can hold both strings and numbers. dc(1) always knows
-whether the contents of a register are a string or a number.
-
-While arithmetic operations have to have numbers, and will print an error if
-given a string, other commands accept strings.
-
-Strings can also be executed as macros. For example, if the string **[1pR]** is
-executed as a macro, then the code **1pR** is executed, meaning that the **1**
-will be printed with a newline after and then popped from the stack.
-
-**\[**_characters_**\]**
-
-: Makes a string containing *characters* and pushes it onto the stack.
-
- If there are brackets (**\[** and **\]**) in the string, then they must be
- balanced. Unbalanced brackets can be escaped using a backslash (**\\**)
- character.
-
- If there is a backslash character in the string, the character after it
- (even another backslash) is put into the string verbatim, but the (first)
- backslash is not.
-
-**a**
-
-: The value on top of the stack is popped.
-
- If it is a number, it is truncated and its absolute value is taken. The
- result mod **UCHAR_MAX+1** is calculated. If that result is **0**, push an
- empty string; otherwise, push a one-character string where the character is
- the result of the mod interpreted as an ASCII character.
-
- If it is a string, then a new string is made. If the original string is
- empty, the new string is empty. If it is not, then the first character of
- the original string is used to create the new string as a one-character
- string. The new string is then pushed onto the stack.
-
- This is a **non-portable extension**.
-
-**x**
-
-: Pops a value off of the top of the stack.
-
- If it is a number, it is pushed back onto the stack.
-
- If it is a string, it is executed as a macro.
-
- This behavior is the norm whenever a macro is executed, whether by this
- command or by the conditional execution commands below.
-
-**\>**_r_
-
-: Pops two values off of the stack that must be numbers and compares them. If
- the first value is greater than the second, then the contents of register
- *r* are executed.
-
- For example, **0 1>a** will execute the contents of register **a**, and
- **1 0>a** will not.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
-**>**_r_**e**_s_
-
-: Like the above, but will execute register *s* if the comparison fails.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
- This is a **non-portable extension**.
-
-**!\>**_r_
-
-: Pops two values off of the stack that must be numbers and compares them. If
- the first value is not greater than the second (less than or equal to), then
- the contents of register *r* are executed.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
-**!\>**_r_**e**_s_
-
-: Like the above, but will execute register *s* if the comparison fails.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
- This is a **non-portable extension**.
-
-**\<**_r_
-
-: Pops two values off of the stack that must be numbers and compares them. If
- the first value is less than the second, then the contents of register *r*
- are executed.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
-**\<**_r_**e**_s_
-
-: Like the above, but will execute register *s* if the comparison fails.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
- This is a **non-portable extension**.
-
-**!\<**_r_
-
-: Pops two values off of the stack that must be numbers and compares them. If
- the first value is not less than the second (greater than or equal to), then
- the contents of register *r* are executed.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
-**!\<**_r_**e**_s_
-
-: Like the above, but will execute register *s* if the comparison fails.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
- This is a **non-portable extension**.
-
-**=**_r_
-
-: Pops two values off of the stack that must be numbers and compares them. If
- the first value is equal to the second, then the contents of register *r*
- are executed.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
-**=**_r_**e**_s_
-
-: Like the above, but will execute register *s* if the comparison fails.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
- This is a **non-portable extension**.
-
-**!=**_r_
-
-: Pops two values off of the stack that must be numbers and compares them. If
- the first value is not equal to the second, then the contents of register
- *r* are executed.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
-**!=**_r_**e**_s_
-
-: Like the above, but will execute register *s* if the comparison fails.
-
- If either or both of the values are not numbers, dc(1) will raise an error
- and reset (see the **RESET** section).
-
- This is a **non-portable extension**.
-
-**?**
-
-: Reads a line from the **stdin** and executes it. This is to allow macros to
- request input from users.
-
-**q**
-
-: During execution of a macro, this exits the execution of that macro and the
- execution of the macro that executed it. If there are no macros, or only one
- macro executing, dc(1) exits.
-
-**Q**
-
-: Pops a value from the stack which must be non-negative and is used the
- number of macro executions to pop off of the execution stack. If the number
- of levels to pop is greater than the number of executing macros, dc(1)
- exits.
-
-## Status
-
-These commands query status of the stack or its top value.
-
-**Z**
-
-: Pops a value off of the stack.
-
- If it is a number, calculates the number of significant decimal digits it
- has and pushes the result.
-
- If it is a string, pushes the number of characters the string has.
-
-**X**
-
-: Pops a value off of the stack.
-
- If it is a number, pushes the *scale* of the value onto the stack.
-
- If it is a string, pushes **0**.
-
-**z**
-
-: Pushes the current stack depth (before execution of this command).
-
-## Arrays
-
-These commands manipulate arrays.
-
-**:**_r_
-
-: Pops the top two values off of the stack. The second value will be stored in
- the array *r* (see the **REGISTERS** section), indexed by the first value.
-
-**;**_r_
-
-: Pops the value on top of the stack and uses it as an index into the array
- *r*. The selected value is then pushed onto the stack.
-
-# REGISTERS
-
-Registers are names that can store strings, numbers, and arrays. (Number/string
-registers do not interfere with array registers.)
-
-Each register is also its own stack, so the current register value is the top of
-the stack for the register. All registers, when first referenced, have one value
-(**0**) in their stack.
-
-In non-extended register mode, a register name is just the single character that
-follows any command that needs a register name. The only exception is a newline
-(**'\\n'**); it is a parse error for a newline to be used as a register name.
-
-## Extended Register Mode
-
-Unlike most other dc(1) implentations, this dc(1) provides nearly unlimited
-amounts of registers, if extended register mode is enabled.
-
-If extended register mode is enabled (**-x** or **-\-extended-register**
-command-line arguments are given), then normal single character registers are
-used *unless* the character immediately following a command that needs a
-register name is a space (according to **isspace()**) and not a newline
-(**'\\n'**).
-
-In that case, the register name is found according to the regex
-**\[a-z\]\[a-z0-9\_\]\*** (like bc(1) identifiers), and it is a parse error if
-the next non-space characters do not match that regex.
-
-# RESET
-
-When dc(1) encounters an error or a signal that it has a non-default handler
-for, it resets. This means that several things happen.
-
-First, any macros that are executing are stopped and popped off the stack.
-The behavior is not unlike that of exceptions in programming languages. Then
-the execution point is set so that any code waiting to execute (after all
-macros returned) is skipped.
-
-Thus, when dc(1) resets, it skips any remaining code waiting to be executed.
-Then, if it is interactive mode, and the error was not a fatal error (see the
-**EXIT STATUS** section), it asks for more input; otherwise, it exits with the
-appropriate return code.
-
-# PERFORMANCE
-
-Most dc(1) implementations use **char** types to calculate the value of **1**
-decimal digit at a time, but that can be slow. This dc(1) does something
-different.
-
-It uses large integers to calculate more than **1** decimal digit at a time. If
-built in a environment where **DC_LONG_BIT** (see the **LIMITS** section) is
-**64**, then each integer has **9** decimal digits. If built in an environment
-where **DC_LONG_BIT** is **32** then each integer has **4** decimal digits. This
-value (the number of decimal digits per large integer) is called
-**DC_BASE_DIGS**.
-
-In addition, this dc(1) uses an even larger integer for overflow checking. This
-integer type depends on the value of **DC_LONG_BIT**, but is always at least
-twice as large as the integer type used to store digits.
-
-# LIMITS
-
-The following are the limits on dc(1):
-
-**DC_LONG_BIT**
-
-: The number of bits in the **long** type in the environment where dc(1) was
- built. This determines how many decimal digits can be stored in a single
- large integer (see the **PERFORMANCE** section).
-
-**DC_BASE_DIGS**
-
-: The number of decimal digits per large integer (see the **PERFORMANCE**
- section). Depends on **DC_LONG_BIT**.
-
-**DC_BASE_POW**
-
-: The max decimal number that each large integer can store (see
- **DC_BASE_DIGS**) plus **1**. Depends on **DC_BASE_DIGS**.
-
-**DC_OVERFLOW_MAX**
-
-: The max number that the overflow type (see the **PERFORMANCE** section) can
- hold. Depends on **DC_LONG_BIT**.
-
-**DC_BASE_MAX**
-
-: The maximum output base. Set at **DC_BASE_POW**.
-
-**DC_DIM_MAX**
-
-: The maximum size of arrays. Set at **SIZE_MAX-1**.
-
-**DC_SCALE_MAX**
-
-: The maximum **scale**. Set at **DC_OVERFLOW_MAX-1**.
-
-**DC_STRING_MAX**
-
-: The maximum length of strings. Set at **DC_OVERFLOW_MAX-1**.
-
-**DC_NAME_MAX**
-
-: The maximum length of identifiers. Set at **DC_OVERFLOW_MAX-1**.
-
-**DC_NUM_MAX**
-
-: The maximum length of a number (in decimal digits), which includes digits
- after the decimal point. Set at **DC_OVERFLOW_MAX-1**.
-
-Exponent
-
-: The maximum allowable exponent (positive or negative). Set at
- **DC_OVERFLOW_MAX**.
-
-Number of vars
-
-: The maximum number of vars/arrays. Set at **SIZE_MAX-1**.
-
-These limits are meant to be effectively non-existent; the limits are so large
-(at least on 64-bit machines) that there should not be any point at which they
-become a problem. In fact, memory should be exhausted before these limits should
-be hit.
-
-# ENVIRONMENT VARIABLES
-
-dc(1) recognizes the following environment variables:
-
-**DC_ENV_ARGS**
-
-: This is another way to give command-line arguments to dc(1). They should be
- in the same format as all other command-line arguments. These are always
- processed first, so any files given in **DC_ENV_ARGS** will be processed
- before arguments and files given on the command-line. This gives the user
- the ability to set up "standard" options and files to be used at every
- invocation. The most useful thing for such files to contain would be useful
- functions that the user might want every time dc(1) runs. Another use would
- be to use the **-e** option to set **scale** to a value other than **0**.
-
- The code that parses **DC_ENV_ARGS** will correctly handle quoted arguments,
- but it does not understand escape sequences. For example, the string
- **"/home/gavin/some dc file.dc"** will be correctly parsed, but the string
- **"/home/gavin/some \"dc\" file.dc"** will include the backslashes.
-
- The quote parsing will handle either kind of quotes, **'** or **"**. Thus,
- if you have a file with any number of single quotes in the name, you can use
- double quotes as the outside quotes, as in **"some 'dc' file.dc"**, and vice
- versa if you have a file with double quotes. However, handling a file with
- both kinds of quotes in **DC_ENV_ARGS** is not supported due to the
- complexity of the parsing, though such files are still supported on the
- command-line where the parsing is done by the shell.
-
-**DC_LINE_LENGTH**
-
-: If this environment variable exists and contains an integer that is greater
- than **1** and is less than **UINT16_MAX** (**2\^16-1**), dc(1) will output
- lines to that length, including the backslash newline combo. The default
- line length is **70**.
-
-**DC_EXPR_EXIT**
-
-: If this variable exists (no matter the contents), dc(1) will exit
- immediately after executing expressions and files given by the **-e** and/or
- **-f** command-line options (and any equivalents).
-
-# EXIT STATUS
-
-dc(1) returns the following exit statuses:
-
-**0**
-
-: No error.
-
-**1**
-
-: A math error occurred. This follows standard practice of using **1** for
- expected errors, since math errors will happen in the process of normal
- execution.
-
- Math errors include divide by **0**, taking the square root of a negative
- number, attempting to convert a negative number to a hardware integer,
- overflow when converting a number to a hardware integer, and attempting to
- use a non-integer where an integer is required.
-
- Converting to a hardware integer happens for the second operand of the power
- (**\^**) operator.
-
-**2**
-
-: A parse error occurred.
-
- Parse errors include unexpected **EOF**, using an invalid character, failing
- to find the end of a string or comment, and using a token where it is
- invalid.
-
-**3**
-
-: A runtime error occurred.
-
- Runtime errors include assigning an invalid number to **ibase**, **obase**,
- or **scale**; give a bad expression to a **read()** call, calling **read()**
- inside of a **read()** call, type errors, and attempting an operation when
- the stack has too few elements.
-
-**4**
-
-: A fatal error occurred.
-
- Fatal errors include memory allocation errors, I/O errors, failing to open
- files, attempting to use files that do not have only ASCII characters (dc(1)
- only accepts ASCII characters), attempting to open a directory as a file,
- and giving invalid command-line options.
-
-The exit status **4** is special; when a fatal error occurs, dc(1) always exits
-and returns **4**, no matter what mode dc(1) is in.
-
-The other statuses will only be returned when dc(1) is not in interactive mode
-(see the **INTERACTIVE MODE** section), since dc(1) resets its state (see the
-**RESET** section) and accepts more input when one of those errors occurs in
-interactive mode. This is also the case when interactive mode is forced by the
-**-i** flag or **-\-interactive** option.
-
-These exit statuses allow dc(1) to be used in shell scripting with error
-checking, and its normal behavior can be forced by using the **-i** flag or
-**-\-interactive** option.
-
-# INTERACTIVE MODE
-
-Like bc(1), dc(1) has an interactive mode and a non-interactive mode.
-Interactive mode is turned on automatically when both **stdin** and **stdout**
-are hooked to a terminal, but the **-i** flag and **-\-interactive** option can
-turn it on in other cases.
-
-In interactive mode, dc(1) attempts to recover from errors (see the **RESET**
-section), and in normal execution, flushes **stdout** as soon as execution is
-done for the current input.
-
-# TTY MODE
-
-If **stdin**, **stdout**, and **stderr** are all connected to a TTY, dc(1) turns
-on "TTY mode."
-
-TTY mode is required for history to be enabled (see the **COMMAND LINE HISTORY**
-section). It is also required to enable special handling for **SIGINT** signals.
-
-TTY mode is different from interactive mode because interactive mode is required
-in the [bc(1) specification][1], and interactive mode requires only **stdin**
-and **stdout** to be connected to a terminal.
-
-# SIGNAL HANDLING
-
-Sending a **SIGINT** will cause dc(1) to stop execution of the current input. If
-dc(1) is in TTY mode (see the **TTY MODE** section), it will reset (see the
-**RESET** section). Otherwise, it will clean up and exit.
-
-Note that "current input" can mean one of two things. If dc(1) is processing
-input from **stdin** in TTY mode, it will ask for more input. If dc(1) is
-processing input from a file in TTY mode, it will stop processing the file and
-start processing the next file, if one exists, or ask for input from **stdin**
-if no other file exists.
-
-This means that if a **SIGINT** is sent to dc(1) as it is executing a file, it
-can seem as though dc(1) did not respond to the signal since it will immediately
-start executing the next file. This is by design; most files that users execute
-when interacting with dc(1) have function definitions, which are quick to parse.
-If a file takes a long time to execute, there may be a bug in that file. The
-rest of the files could still be executed without problem, allowing the user to
-continue.
-
-**SIGTERM** and **SIGQUIT** cause dc(1) to clean up and exit, and it uses the
-default handler for all other signals. The one exception is **SIGHUP**; in that
-case, when dc(1) is in TTY mode, a **SIGHUP** will cause dc(1) to clean up and
-exit.
-
-# COMMAND LINE HISTORY
-
-dc(1) supports interactive command-line editing. If dc(1) is in TTY mode (see
-the **TTY MODE** section), history is enabled. Previous lines can be recalled
-and edited with the arrow keys.
-
-**Note**: tabs are converted to 8 spaces.
-
-# SEE ALSO
-
-bc(1)
-
-# STANDARDS
-
-The dc(1) utility operators are compliant with the operators in the bc(1)
-[IEEE Std 1003.1-2017 (“POSIX.1-2017”)][1] specification.
-
-# BUGS
-
-None are known. Report bugs at https://git.yzena.com/gavin/bc.
-
-# AUTHOR
-
-Gavin D. Howard <gavin@yzena.com> and contributors.
-
-[1]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html