TEdcAL

TEdcAL is supposed to be a cross between INTERCAL and dc (the UNIX desk calculator).

Commands (any one with no description is same as dc; commands are based on GNU dc):
 * _0123456789ABCDEF.
 * []
 * + - Can also concatenate strings.
 * -
 * *
 * /
 * %
 * ~
 * ^</tt>
 * |</tt>
 * &amp;</tt> - Does unary AND (like INTERCAL, but arbitrary precision).
 * ?</tt> - Does unary XOR (like INTERCAL, but arbitrary precision).
 * $</tt> - Performs interleave bits operation of INTERCAL, but arbitrary precision. (You can use negative numbers too, and something like 0 _1$</tt> should result in negative one third.)
 * :</tt>r
 * ;</tt>r
 * "</tt> - Follow by something resulting in one number on the stack and then another "</tt>. This is a label for a subroutine code or a target of G</tt> and g</tt> commands. (Note that labels can change simply by changing the input radix!)
 * !</tt> - Prefixes an abstained command, which causes the command to do nothing. However, if the next command is &lt;</tt> or &gt;</tt> or =</tt> then it does the reverse comparison like dc does, which means that abstaining it can change it in this way.
 * <tt>&lt;</tt>
 * <tt>&gt;</tt>
 * <tt>=</tt>
 * <tt>'</tt> - Performs select of bits (like INTERCAL, but arbitrary precision).
 * <tt>,</tt> - Performs unselect of bits, like reverse of <tt>'</tt> and all inserted bits are zeroed.
 * <tt>@</tt> - Receive one byte of input.
 * <tt>(</tt>r - Causes register to be ignored. Any further assignments are ignored and the <tt>S</tt> command saves the ignore state on its stack and <tt>L</tt> retrieves its ignore state, although <tt>S</tt> when assigning a value while ignored, will just push the same value it already has instead of the new one.
 * <tt>)</tt>r - Causes register to be not ignored anymore, if it is currently ignored.
 * <tt>G</tt> - Pops a number, find the corresponding label (in the way <tt>x</tt> does, but searches all valid levels instead of only the innermost valid one) and marks as abstained command.
 * <tt>H</tt> - Converts an entire string to a number, such that output using <tt>P</tt> command outputs this string. If value on stack is a number, then instead converts to a string, in the same way.
 * <tt>I</tt>
 * <tt>K</tt>
 * <tt>L</tt>r
 * <tt>O</tt>
 * <tt>P</tt>
 * <tt>Q</tt>
 * <tt>R</tt> - Make number output so user can read it. Output radix can be zero, causing roman numerals.
 * <tt>S</tt>r
 * <tt>U</tt>ab - Swap the meaning of the command a with b. (It is even permitted to change the meaning of digits with other digits or with commands other than digits.)
 * <tt>V</tt> - Does unary OR (like INTERCAL, but arbitrary precision).
 * <tt>W</tt> - Receive number input, so user can write a number into the computer. Input radix can be zero, requiring roman numerals.
 * <tt>X</tt>
 * <tt>Y</tt>c - Adds <tt>!</tt> prefix everywhere in current level and levels more outer on the call stack to all command that is c.
 * <tt>Z</tt>
 * <tt>a</tt>
 * <tt>b</tt> - Takes a number and forgets that many entries from the call stack, while still executing the current block.
 * <tt>c</tt>
 * <tt>d</tt>
 * <tt>g</tt> - Pops a number, find the corresponding label (in the way <tt>x</tt> does) and removes mark as abstained, if any (removes all of them if they have been multiply abstained).
 * <tt>i</tt>
 * <tt>k</tt>
 * <tt>l</tt>r
 * <tt>o</tt>
 * <tt>q</tt>
 * <tt>r</tt>
 * <tt>s</tt>r
 * <tt>x</tt> - If the argument is a number, uses a duplicate of the string the innermost currently executing block containing such a label (labels inside of <tt>[]</tt> blocks are ignored), with everything before that label deleted; if more than one such label exists, forks into multiple threads if all of those labels are at the same level of the call stack, and if none exists, it is an error. Otherwise it is like dc.
 * <tt>y</tt>c - Does reverse of <tt>Y</tt>.
 * <tt>z</tt>