1<!--- 2 3SPDX-License-Identifier: BSD-2-Clause 4 5Copyright (c) 2018-2021 Gavin D. Howard and contributors. 6 7Redistribution and use in source and binary forms, with or without 8modification, are permitted provided that the following conditions are met: 9 10* Redistributions of source code must retain the above copyright notice, this 11 list of conditions and the following disclaimer. 12 13* Redistributions in binary form must reproduce the above copyright notice, 14 this list of conditions and the following disclaimer in the documentation 15 and/or other materials provided with the distribution. 16 17THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27POSSIBILITY OF SUCH DAMAGE. 28 29--> 30 31# Name 32 33dc - arbitrary-precision decimal reverse-Polish notation calculator 34 35# SYNOPSIS 36 37**dc** [**-hiPRvVx**] [**-\-version**] [**-\-help**] [**-\-interactive**] [**-\-no-prompt**] [**-\-no-read-prompt**] [**-\-extended-register**] [**-e** *expr*] [**-\-expression**=*expr*...] [**-f** *file*...] [**-\-file**=*file*...] [*file*...] 38 39# DESCRIPTION 40 41dc(1) is an arbitrary-precision calculator. It uses a stack (reverse Polish 42notation) to store numbers and results of computations. Arithmetic operations 43pop arguments off of the stack and push the results. 44 45If no files are given on the command-line, then dc(1) reads from **stdin** (see 46the **STDIN** section). Otherwise, those files are processed, and dc(1) will 47then exit. 48 49If a user wants to set up a standard environment, they can use **DC_ENV_ARGS** 50(see the **ENVIRONMENT VARIABLES** section). For example, if a user wants the 51**scale** always set to **10**, they can set **DC_ENV_ARGS** to **-e 10k**, and 52this dc(1) will always start with a **scale** of **10**. 53 54# OPTIONS 55 56The following are the options that dc(1) accepts. 57 58**-h**, **-\-help** 59 60: Prints a usage message and quits. 61 62**-v**, **-V**, **-\-version** 63 64: Print the version information (copyright header) and exit. 65 66**-i**, **-\-interactive** 67 68: Forces interactive mode. (See the **INTERACTIVE MODE** section.) 69 70 This is a **non-portable extension**. 71 72**-L**, **-\-no-line-length** 73 74: Disables line length checking and prints numbers without backslashes and 75 newlines. In other words, this option sets **BC_LINE_LENGTH** to **0** (see 76 the **ENVIRONMENT VARIABLES** section). 77 78 This is a **non-portable extension**. 79 80**-P**, **-\-no-prompt** 81 82: Disables the prompt in TTY mode. (The prompt is only enabled in TTY mode. 83 See the **TTY MODE** section.) This is mostly for those users that do not 84 want a prompt or are not used to having them in dc(1). Most of those users 85 would want to put this option in **DC_ENV_ARGS**. 86 87 These options override the **DC_PROMPT** and **DC_TTY_MODE** environment 88 variables (see the **ENVIRONMENT VARIABLES** section). 89 90 This is a **non-portable extension**. 91 92**-R**, **-\-no-read-prompt** 93 94: Disables the read prompt in TTY mode. (The read prompt is only enabled in 95 TTY mode. See the **TTY MODE** section.) This is mostly for those users that 96 do not want a read prompt or are not used to having them in dc(1). Most of 97 those users would want to put this option in **BC_ENV_ARGS** (see the 98 **ENVIRONMENT VARIABLES** section). This option is also useful in hash bang 99 lines of dc(1) scripts that prompt for user input. 100 101 This option does not disable the regular prompt because the read prompt is 102 only used when the **?** command is used. 103 104 These options *do* override the **DC_PROMPT** and **DC_TTY_MODE** 105 environment variables (see the **ENVIRONMENT VARIABLES** section), but only 106 for the read prompt. 107 108 This is a **non-portable extension**. 109 110**-x** **-\-extended-register** 111 112: Enables extended register mode. See the *Extended Register Mode* subsection 113 of the **REGISTERS** section for more information. 114 115 This is a **non-portable extension**. 116 117**-z**, **-\-leading-zeroes** 118 119: Makes bc(1) print all numbers greater than **-1** and less than **1**, and 120 not equal to **0**, with a leading zero. 121 122 This can be set for individual numbers with the **plz(x)**, plznl(x)**, 123 **pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see 124 the **LIBRARY** section). 125 126 This is a **non-portable extension**. 127 128**-e** *expr*, **-\-expression**=*expr* 129 130: Evaluates *expr*. If multiple expressions are given, they are evaluated in 131 order. If files are given as well (see below), the expressions and files are 132 evaluated in the order given. This means that if a file is given before an 133 expression, the file is read in and evaluated first. 134 135 If this option is given on the command-line (i.e., not in **DC_ENV_ARGS**, 136 see the **ENVIRONMENT VARIABLES** section), then after processing all 137 expressions and files, dc(1) will exit, unless **-** (**stdin**) was given 138 as an argument at least once to **-f** or **-\-file**, whether on the 139 command-line or in **DC_ENV_ARGS**. However, if any other **-e**, 140 **-\-expression**, **-f**, or **-\-file** arguments are given after **-f-** 141 or equivalent is given, dc(1) will give a fatal error and exit. 142 143 This is a **non-portable extension**. 144 145**-f** *file*, **-\-file**=*file* 146 147: Reads in *file* and evaluates it, line by line, as though it were read 148 through **stdin**. If expressions are also given (see above), the 149 expressions are evaluated in the order given. 150 151 If this option is given on the command-line (i.e., not in **DC_ENV_ARGS**, 152 see the **ENVIRONMENT VARIABLES** section), then after processing all 153 expressions and files, dc(1) will exit, unless **-** (**stdin**) was given 154 as an argument at least once to **-f** or **-\-file**. However, if any other 155 **-e**, **-\-expression**, **-f**, or **-\-file** arguments are given after 156 **-f-** or equivalent is given, dc(1) will give a fatal error and exit. 157 158 This is a **non-portable extension**. 159 160All long options are **non-portable extensions**. 161 162# STDIN 163 164If no files are given on the command-line and no files or expressions are given 165by the **-f**, **-\-file**, **-e**, or **-\-expression** options, then dc(1) 166read from **stdin**. 167 168However, there is a caveat to this. 169 170First, **stdin** is evaluated a line at a time. The only exception to this is if 171a string has been finished, but not ended. This means that, except for escaped 172brackets, all brackets must be balanced before dc(1) parses and executes. 173 174# STDOUT 175 176Any non-error output is written to **stdout**. In addition, if history (see the 177**HISTORY** section) and the prompt (see the **TTY MODE** section) are enabled, 178both are output to **stdout**. 179 180**Note**: Unlike other dc(1) implementations, this dc(1) will issue a fatal 181error (see the **EXIT STATUS** section) if it cannot write to **stdout**, so if 182**stdout** is closed, as in **dc <file> >&-**, it will quit with an error. This 183is done so that dc(1) can report problems when **stdout** is redirected to a 184file. 185 186If there are scripts that depend on the behavior of other dc(1) implementations, 187it is recommended that those scripts be changed to redirect **stdout** to 188**/dev/null**. 189 190# STDERR 191 192Any error output is written to **stderr**. 193 194**Note**: Unlike other dc(1) implementations, this dc(1) will issue a fatal 195error (see the **EXIT STATUS** section) if it cannot write to **stderr**, so if 196**stderr** is closed, as in **dc <file> 2>&-**, it will quit with an error. This 197is done so that dc(1) can exit with an error code when **stderr** is redirected 198to a file. 199 200If there are scripts that depend on the behavior of other dc(1) implementations, 201it is recommended that those scripts be changed to redirect **stderr** to 202**/dev/null**. 203 204# SYNTAX 205 206Each item in the input source code, either a number (see the **NUMBERS** 207section) or a command (see the **COMMANDS** section), is processed and executed, 208in order. Input is processed immediately when entered. 209 210**ibase** is a register (see the **REGISTERS** section) that determines how to 211interpret constant numbers. It is the "input" base, or the number base used for 212interpreting input numbers. **ibase** is initially **10**. The max allowable 213value for **ibase** is **16**. The min allowable value for **ibase** is **2**. 214The max allowable value for **ibase** can be queried in dc(1) programs with the 215**T** command. 216 217**obase** is a register (see the **REGISTERS** section) that determines how to 218output results. It is the "output" base, or the number base used for outputting 219numbers. **obase** is initially **10**. The max allowable value for **obase** is 220**DC_BASE_MAX** and can be queried with the **U** command. The min allowable 221value for **obase** is **2**. Values are output in the specified base. 222 223The *scale* of an expression is the number of digits in the result of the 224expression right of the decimal point, and **scale** is a register (see the 225**REGISTERS** section) that sets the precision of any operations (with 226exceptions). **scale** is initially **0**. **scale** cannot be negative. The max 227allowable value for **scale** can be queried in dc(1) programs with the **V** 228command. 229 230## Comments 231 232Comments go from **#** until, and not including, the next newline. This is a 233**non-portable extension**. 234 235# NUMBERS 236 237Numbers are strings made up of digits, uppercase letters up to **F**, and at 238most **1** period for a radix. Numbers can have up to **DC_NUM_MAX** digits. 239Uppercase letters are equal to **9** + their position in the alphabet (i.e., 240**A** equals **10**, or **9+1**). If a digit or letter makes no sense with the 241current value of **ibase**, they are set to the value of the highest valid digit 242in **ibase**. 243 244Single-character numbers (i.e., **A** alone) take the value that they would have 245if they were valid digits, regardless of the value of **ibase**. This means that 246**A** alone always equals decimal **10** and **F** alone always equals decimal 247**15**. 248 249# COMMANDS 250 251The valid commands are listed below. 252 253## Printing 254 255These commands are used for printing. 256 257**p** 258 259: Prints the value on top of the stack, whether number or string, and prints a 260 newline after. 261 262 This does not alter the stack. 263 264**n** 265 266: Prints the value on top of the stack, whether number or string, and pops it 267 off of the stack. 268 269**P** 270 271: Pops a value off the stack. 272 273 If the value is a number, it is truncated and the absolute value of the 274 result is printed as though **obase** is **256** and each digit is 275 interpreted as an 8-bit ASCII character, making it a byte stream. 276 277 If the value is a string, it is printed without a trailing newline. 278 279 This is a **non-portable extension**. 280 281**f** 282 283: Prints the entire contents of the stack, in order from newest to oldest, 284 without altering anything. 285 286 Users should use this command when they get lost. 287 288## Arithmetic 289 290These are the commands used for arithmetic. 291 292**+** 293 294: The top two values are popped off the stack, added, and the result is pushed 295 onto the stack. The *scale* of the result is equal to the max *scale* of 296 both operands. 297 298**-** 299 300: The top two values are popped off the stack, subtracted, and the result is 301 pushed onto the stack. The *scale* of the result is equal to the max 302 *scale* of both operands. 303 304**\*** 305 306: The top two values are popped off the stack, multiplied, and the result is 307 pushed onto the stack. If **a** is the *scale* of the first expression and 308 **b** is the *scale* of the second expression, the *scale* of the result 309 is equal to **min(a+b,max(scale,a,b))** where **min()** and **max()** return 310 the obvious values. 311 312**/** 313 314: The top two values are popped off the stack, divided, and the result is 315 pushed onto the stack. The *scale* of the result is equal to **scale**. 316 317 The first value popped off of the stack must be non-zero. 318 319**%** 320 321: The top two values are popped off the stack, remaindered, and the result is 322 pushed onto the stack. 323 324 Remaindering is equivalent to 1) Computing **a/b** to current **scale**, and 325 2) Using the result of step 1 to calculate **a-(a/b)\*b** to *scale* 326 **max(scale+scale(b),scale(a))**. 327 328 The first value popped off of the stack must be non-zero. 329 330**~** 331 332: The top two values are popped off the stack, divided and remaindered, and 333 the results (divided first, remainder second) are pushed onto the stack. 334 This is equivalent to **x y / x y %** except that **x** and **y** are only 335 evaluated once. 336 337 The first value popped off of the stack must be non-zero. 338 339 This is a **non-portable extension**. 340 341**\^** 342 343: The top two values are popped off the stack, the second is raised to the 344 power of the first, and the result is pushed onto the stack. The *scale* of 345 the result is equal to **scale**. 346 347 The first value popped off of the stack must be an integer, and if that 348 value is negative, the second value popped off of the stack must be 349 non-zero. 350 351**v** 352 353: The top value is popped off the stack, its square root is computed, and the 354 result is pushed onto the stack. The *scale* of the result is equal to 355 **scale**. 356 357 The value popped off of the stack must be non-negative. 358 359**\_** 360 361: If this command *immediately* precedes a number (i.e., no spaces or other 362 commands), then that number is input as a negative number. 363 364 Otherwise, the top value on the stack is popped and copied, and the copy is 365 negated and pushed onto the stack. This behavior without a number is a 366 **non-portable extension**. 367 368**b** 369 370: The top value is popped off the stack, and if it is zero, it is pushed back 371 onto the stack. Otherwise, its absolute value is pushed onto the stack. 372 373 This is a **non-portable extension**. 374 375**|** 376 377: The top three values are popped off the stack, a modular exponentiation is 378 computed, and the result is pushed onto the stack. 379 380 The first value popped is used as the reduction modulus and must be an 381 integer and non-zero. The second value popped is used as the exponent and 382 must be an integer and non-negative. The third value popped is the base and 383 must be an integer. 384 385 This is a **non-portable extension**. 386 387**G** 388 389: The top two values are popped off of the stack, they are compared, and a 390 **1** is pushed if they are equal, or **0** otherwise. 391 392 This is a **non-portable extension**. 393 394**N** 395 396: The top value is popped off of the stack, and if it a **0**, a **1** is 397 pushed; otherwise, a **0** is pushed. 398 399 This is a **non-portable extension**. 400 401**(** 402 403: The top two values are popped off of the stack, they are compared, and a 404 **1** is pushed if the first is less than the second, or **0** otherwise. 405 406 This is a **non-portable extension**. 407 408**{** 409 410: The top two values are popped off of the stack, they are compared, and a 411 **1** is pushed if the first is less than or equal to the second, or **0** 412 otherwise. 413 414 This is a **non-portable extension**. 415 416**)** 417 418: The top two values are popped off of the stack, they are compared, and a 419 **1** is pushed if the first is greater than the second, or **0** otherwise. 420 421 This is a **non-portable extension**. 422 423**}** 424 425: The top two values are popped off of the stack, they are compared, and a 426 **1** is pushed if the first is greater than or equal to the second, or 427 **0** otherwise. 428 429 This is a **non-portable extension**. 430 431**M** 432 433: The top two values are popped off of the stack. If they are both non-zero, a 434 **1** is pushed onto the stack. If either of them is zero, or both of them 435 are, then a **0** is pushed onto the stack. 436 437 This is like the **&&** operator in bc(1), and it is *not* a short-circuit 438 operator. 439 440 This is a **non-portable extension**. 441 442**m** 443 444: The top two values are popped off of the stack. If at least one of them is 445 non-zero, a **1** is pushed onto the stack. If both of them are zero, then a 446 **0** is pushed onto the stack. 447 448 This is like the **||** operator in bc(1), and it is *not* a short-circuit 449 operator. 450 451 This is a **non-portable extension**. 452 453## Stack Control 454 455These commands control the stack. 456 457**c** 458 459: Removes all items from ("clears") the stack. 460 461**d** 462 463: Copies the item on top of the stack ("duplicates") and pushes the copy onto 464 the stack. 465 466**r** 467 468: Swaps ("reverses") the two top items on the stack. 469 470**R** 471 472: Pops ("removes") the top value from the stack. 473 474## Register Control 475 476These commands control registers (see the **REGISTERS** section). 477 478**s**_r_ 479 480: Pops the value off the top of the stack and stores it into register *r*. 481 482**l**_r_ 483 484: Copies the value in register *r* and pushes it onto the stack. This does not 485 alter the contents of *r*. 486 487**S**_r_ 488 489: Pops the value off the top of the (main) stack and pushes it onto the stack 490 of register *r*. The previous value of the register becomes inaccessible. 491 492**L**_r_ 493 494: Pops the value off the top of the stack for register *r* and push it onto 495 the main stack. The previous value in the stack for register *r*, if any, is 496 now accessible via the **l**_r_ command. 497 498## Parameters 499 500These commands control the values of **ibase**, **obase**, and **scale**. Also 501see the **SYNTAX** section. 502 503**i** 504 505: Pops the value off of the top of the stack and uses it to set **ibase**, 506 which must be between **2** and **16**, inclusive. 507 508 If the value on top of the stack has any *scale*, the *scale* is ignored. 509 510**o** 511 512: Pops the value off of the top of the stack and uses it to set **obase**, 513 which must be between **2** and **DC_BASE_MAX**, inclusive (see the 514 **LIMITS** section). 515 516 If the value on top of the stack has any *scale*, the *scale* is ignored. 517 518**k** 519 520: Pops the value off of the top of the stack and uses it to set **scale**, 521 which must be non-negative. 522 523 If the value on top of the stack has any *scale*, the *scale* is ignored. 524 525**I** 526 527: Pushes the current value of **ibase** onto the main stack. 528 529**O** 530 531: Pushes the current value of **obase** onto the main stack. 532 533**K** 534 535: Pushes the current value of **scale** onto the main stack. 536 537**T** 538 539: Pushes the maximum allowable value of **ibase** onto the main stack. 540 541 This is a **non-portable extension**. 542 543**U** 544 545: Pushes the maximum allowable value of **obase** onto the main stack. 546 547 This is a **non-portable extension**. 548 549**V** 550 551: Pushes the maximum allowable value of **scale** onto the main stack. 552 553 This is a **non-portable extension**. 554 555## Strings 556 557The following commands control strings. 558 559dc(1) can work with both numbers and strings, and registers (see the 560**REGISTERS** section) can hold both strings and numbers. dc(1) always knows 561whether the contents of a register are a string or a number. 562 563While arithmetic operations have to have numbers, and will print an error if 564given a string, other commands accept strings. 565 566Strings can also be executed as macros. For example, if the string **[1pR]** is 567executed as a macro, then the code **1pR** is executed, meaning that the **1** 568will be printed with a newline after and then popped from the stack. 569 570**\[**_characters_**\]** 571 572: Makes a string containing *characters* and pushes it onto the stack. 573 574 If there are brackets (**\[** and **\]**) in the string, then they must be 575 balanced. Unbalanced brackets can be escaped using a backslash (**\\**) 576 character. 577 578 If there is a backslash character in the string, the character after it 579 (even another backslash) is put into the string verbatim, but the (first) 580 backslash is not. 581 582**a** 583 584: The value on top of the stack is popped. 585 586 If it is a number, it is truncated and its absolute value is taken. The 587 result mod **256** is calculated. If that result is **0**, push an empty 588 string; otherwise, push a one-character string where the character is the 589 result of the mod interpreted as an ASCII character. 590 591 If it is a string, then a new string is made. If the original string is 592 empty, the new string is empty. If it is not, then the first character of 593 the original string is used to create the new string as a one-character 594 string. The new string is then pushed onto the stack. 595 596 This is a **non-portable extension**. 597 598**x** 599 600: Pops a value off of the top of the stack. 601 602 If it is a number, it is pushed back onto the stack. 603 604 If it is a string, it is executed as a macro. 605 606 This behavior is the norm whenever a macro is executed, whether by this 607 command or by the conditional execution commands below. 608 609**\>**_r_ 610 611: Pops two values off of the stack that must be numbers and compares them. If 612 the first value is greater than the second, then the contents of register 613 *r* are executed. 614 615 For example, **0 1>a** will execute the contents of register **a**, and 616 **1 0>a** will not. 617 618 If either or both of the values are not numbers, dc(1) will raise an error 619 and reset (see the **RESET** section). 620 621**>**_r_**e**_s_ 622 623: Like the above, but will execute register *s* if the comparison fails. 624 625 If either or both of the values are not numbers, dc(1) will raise an error 626 and reset (see the **RESET** section). 627 628 This is a **non-portable extension**. 629 630**!\>**_r_ 631 632: Pops two values off of the stack that must be numbers and compares them. If 633 the first value is not greater than the second (less than or equal to), then 634 the contents of register *r* are executed. 635 636 If either or both of the values are not numbers, dc(1) will raise an error 637 and reset (see the **RESET** section). 638 639**!\>**_r_**e**_s_ 640 641: Like the above, but will execute register *s* if the comparison fails. 642 643 If either or both of the values are not numbers, dc(1) will raise an error 644 and reset (see the **RESET** section). 645 646 This is a **non-portable extension**. 647 648**\<**_r_ 649 650: Pops two values off of the stack that must be numbers and compares them. If 651 the first value is less than the second, then the contents of register *r* 652 are executed. 653 654 If either or both of the values are not numbers, dc(1) will raise an error 655 and reset (see the **RESET** section). 656 657**\<**_r_**e**_s_ 658 659: Like the above, but will execute register *s* if the comparison fails. 660 661 If either or both of the values are not numbers, dc(1) will raise an error 662 and reset (see the **RESET** section). 663 664 This is a **non-portable extension**. 665 666**!\<**_r_ 667 668: Pops two values off of the stack that must be numbers and compares them. If 669 the first value is not less than the second (greater than or equal to), then 670 the contents of register *r* are executed. 671 672 If either or both of the values are not numbers, dc(1) will raise an error 673 and reset (see the **RESET** section). 674 675**!\<**_r_**e**_s_ 676 677: Like the above, but will execute register *s* if the comparison fails. 678 679 If either or both of the values are not numbers, dc(1) will raise an error 680 and reset (see the **RESET** section). 681 682 This is a **non-portable extension**. 683 684**=**_r_ 685 686: Pops two values off of the stack that must be numbers and compares them. If 687 the first value is equal to the second, then the contents of register *r* 688 are executed. 689 690 If either or both of the values are not numbers, dc(1) will raise an error 691 and reset (see the **RESET** section). 692 693**=**_r_**e**_s_ 694 695: Like the above, but will execute register *s* if the comparison fails. 696 697 If either or both of the values are not numbers, dc(1) will raise an error 698 and reset (see the **RESET** section). 699 700 This is a **non-portable extension**. 701 702**!=**_r_ 703 704: Pops two values off of the stack that must be numbers and compares them. If 705 the first value is not equal to the second, then the contents of register 706 *r* are executed. 707 708 If either or both of the values are not numbers, dc(1) will raise an error 709 and reset (see the **RESET** section). 710 711**!=**_r_**e**_s_ 712 713: Like the above, but will execute register *s* if the comparison fails. 714 715 If either or both of the values are not numbers, dc(1) will raise an error 716 and reset (see the **RESET** section). 717 718 This is a **non-portable extension**. 719 720**?** 721 722: Reads a line from the **stdin** and executes it. This is to allow macros to 723 request input from users. 724 725**q** 726 727: During execution of a macro, this exits the execution of that macro and the 728 execution of the macro that executed it. If there are no macros, or only one 729 macro executing, dc(1) exits. 730 731**Q** 732 733: Pops a value from the stack which must be non-negative and is used the 734 number of macro executions to pop off of the execution stack. If the number 735 of levels to pop is greater than the number of executing macros, dc(1) 736 exits. 737 738**,** 739 740: Pushes the depth of the execution stack onto the stack. The execution stack 741 is the stack of string executions. The number that is pushed onto the stack 742 is exactly as many as is needed to make dc(1) exit with the **Q** command, 743 so the sequence **,Q** will make dc(1) exit. 744 745## Status 746 747These commands query status of the stack or its top value. 748 749**Z** 750 751: Pops a value off of the stack. 752 753 If it is a number, calculates the number of significant decimal digits it 754 has and pushes the result. It will push **1** if the argument is **0** with 755 no decimal places. 756 757 If it is a string, pushes the number of characters the string has. 758 759**X** 760 761: Pops a value off of the stack. 762 763 If it is a number, pushes the *scale* of the value onto the stack. 764 765 If it is a string, pushes **0**. 766 767**z** 768 769: Pushes the current depth of the stack (before execution of this command) 770 onto the stack. 771 772**y**_r_ 773 774: Pushes the current stack depth of the register *r* onto the main stack. 775 776 Because each register has a depth of **1** (with the value **0** in the top 777 item) when dc(1) starts, dc(1) requires that each register's stack must 778 always have at least one item; dc(1) will give an error and reset otherwise 779 (see the **RESET** section). This means that this command will never push 780 **0**. 781 782 This is a **non-portable extension**. 783 784## Arrays 785 786These commands manipulate arrays. 787 788**:**_r_ 789 790: Pops the top two values off of the stack. The second value will be stored in 791 the array *r* (see the **REGISTERS** section), indexed by the first value. 792 793**;**_r_ 794 795: Pops the value on top of the stack and uses it as an index into the array 796 *r*. The selected value is then pushed onto the stack. 797 798**Y**_r_ 799 800: Pushes the length of the array *r* onto the stack. 801 802 This is a **non-portable extension**. 803 804## Global Settings 805 806These commands retrieve global settings. These are the only commands that 807require multiple specific characters, and all of them begin with the letter 808**g**. Only the characters below are allowed after the character **g**; any 809other character produces a parse error (see the **ERRORS** section). 810 811**gl** 812 813: Pushes the line length set by **DC_LINE_LENGTH** (see the **ENVIRONMENT 814 VARIABLES** section) onto the stack. 815 816**gz** 817 818: Pushes **0** onto the stack if the leading zero setting has not been enabled 819 with the **-z** or **-\-leading-zeroes** options (see the **OPTIONS** 820 section), non-zero otherwise. 821 822# REGISTERS 823 824Registers are names that can store strings, numbers, and arrays. (Number/string 825registers do not interfere with array registers.) 826 827Each register is also its own stack, so the current register value is the top of 828the stack for the register. All registers, when first referenced, have one value 829(**0**) in their stack, and it is a runtime error to attempt to pop that item 830off of the register stack. 831 832In non-extended register mode, a register name is just the single character that 833follows any command that needs a register name. The only exceptions are: a 834newline (**'\\n'**) and a left bracket (**'['**); it is a parse error for a 835newline or a left bracket to be used as a register name. 836 837## Extended Register Mode 838 839Unlike most other dc(1) implentations, this dc(1) provides nearly unlimited 840amounts of registers, if extended register mode is enabled. 841 842If extended register mode is enabled (**-x** or **-\-extended-register** 843command-line arguments are given), then normal single character registers are 844used *unless* the character immediately following a command that needs a 845register name is a space (according to **isspace()**) and not a newline 846(**'\\n'**). 847 848In that case, the register name is found according to the regex 849**\[a-z\]\[a-z0-9\_\]\*** (like bc(1) identifiers), and it is a parse error if 850the next non-space characters do not match that regex. 851 852# RESET 853 854When dc(1) encounters an error or a signal that it has a non-default handler 855for, it resets. This means that several things happen. 856 857First, any macros that are executing are stopped and popped off the stack. 858The behavior is not unlike that of exceptions in programming languages. Then 859the execution point is set so that any code waiting to execute (after all 860macros returned) is skipped. 861 862Thus, when dc(1) resets, it skips any remaining code waiting to be executed. 863Then, if it is interactive mode, and the error was not a fatal error (see the 864**EXIT STATUS** section), it asks for more input; otherwise, it exits with the 865appropriate return code. 866 867# PERFORMANCE 868 869Most dc(1) implementations use **char** types to calculate the value of **1** 870decimal digit at a time, but that can be slow. This dc(1) does something 871different. 872 873It uses large integers to calculate more than **1** decimal digit at a time. If 874built in a environment where **DC_LONG_BIT** (see the **LIMITS** section) is 875**64**, then each integer has **9** decimal digits. If built in an environment 876where **DC_LONG_BIT** is **32** then each integer has **4** decimal digits. This 877value (the number of decimal digits per large integer) is called 878**DC_BASE_DIGS**. 879 880In addition, this dc(1) uses an even larger integer for overflow checking. This 881integer type depends on the value of **DC_LONG_BIT**, but is always at least 882twice as large as the integer type used to store digits. 883 884# LIMITS 885 886The following are the limits on dc(1): 887 888**DC_LONG_BIT** 889 890: The number of bits in the **long** type in the environment where dc(1) was 891 built. This determines how many decimal digits can be stored in a single 892 large integer (see the **PERFORMANCE** section). 893 894**DC_BASE_DIGS** 895 896: The number of decimal digits per large integer (see the **PERFORMANCE** 897 section). Depends on **DC_LONG_BIT**. 898 899**DC_BASE_POW** 900 901: The max decimal number that each large integer can store (see 902 **DC_BASE_DIGS**) plus **1**. Depends on **DC_BASE_DIGS**. 903 904**DC_OVERFLOW_MAX** 905 906: The max number that the overflow type (see the **PERFORMANCE** section) can 907 hold. Depends on **DC_LONG_BIT**. 908 909**DC_BASE_MAX** 910 911: The maximum output base. Set at **DC_BASE_POW**. 912 913**DC_DIM_MAX** 914 915: The maximum size of arrays. Set at **SIZE_MAX-1**. 916 917**DC_SCALE_MAX** 918 919: The maximum **scale**. Set at **DC_OVERFLOW_MAX-1**. 920 921**DC_STRING_MAX** 922 923: The maximum length of strings. Set at **DC_OVERFLOW_MAX-1**. 924 925**DC_NAME_MAX** 926 927: The maximum length of identifiers. Set at **DC_OVERFLOW_MAX-1**. 928 929**DC_NUM_MAX** 930 931: The maximum length of a number (in decimal digits), which includes digits 932 after the decimal point. Set at **DC_OVERFLOW_MAX-1**. 933 934Exponent 935 936: The maximum allowable exponent (positive or negative). Set at 937 **DC_OVERFLOW_MAX**. 938 939Number of vars 940 941: The maximum number of vars/arrays. Set at **SIZE_MAX-1**. 942 943These limits are meant to be effectively non-existent; the limits are so large 944(at least on 64-bit machines) that there should not be any point at which they 945become a problem. In fact, memory should be exhausted before these limits should 946be hit. 947 948# ENVIRONMENT VARIABLES 949 950dc(1) recognizes the following environment variables: 951 952**DC_ENV_ARGS** 953 954: This is another way to give command-line arguments to dc(1). They should be 955 in the same format as all other command-line arguments. These are always 956 processed first, so any files given in **DC_ENV_ARGS** will be processed 957 before arguments and files given on the command-line. This gives the user 958 the ability to set up "standard" options and files to be used at every 959 invocation. The most useful thing for such files to contain would be useful 960 functions that the user might want every time dc(1) runs. Another use would 961 be to use the **-e** option to set **scale** to a value other than **0**. 962 963 The code that parses **DC_ENV_ARGS** will correctly handle quoted arguments, 964 but it does not understand escape sequences. For example, the string 965 **"/home/gavin/some dc file.dc"** will be correctly parsed, but the string 966 **"/home/gavin/some \"dc\" file.dc"** will include the backslashes. 967 968 The quote parsing will handle either kind of quotes, **'** or **"**. Thus, 969 if you have a file with any number of single quotes in the name, you can use 970 double quotes as the outside quotes, as in **"some 'dc' file.dc"**, and vice 971 versa if you have a file with double quotes. However, handling a file with 972 both kinds of quotes in **DC_ENV_ARGS** is not supported due to the 973 complexity of the parsing, though such files are still supported on the 974 command-line where the parsing is done by the shell. 975 976**DC_LINE_LENGTH** 977 978: If this environment variable exists and contains an integer that is greater 979 than **1** and is less than **UINT16_MAX** (**2\^16-1**), dc(1) will output 980 lines to that length, including the backslash newline combo. The default 981 line length is **70**. 982 983 The special value of **0** will disable line length checking and print 984 numbers without regard to line length and without backslashes and newlines. 985 986**DC_SIGINT_RESET** 987 988: If dc(1) is not in interactive mode (see the **INTERACTIVE MODE** section), 989 then this environment variable has no effect because dc(1) exits on 990 **SIGINT** when not in interactive mode. 991 992 However, when dc(1) is in interactive mode, then if this environment 993 variable exists and contains an integer, a non-zero value makes dc(1) reset 994 on **SIGINT**, rather than exit, and zero makes dc(1) exit. If this 995 environment variable exists and is *not* an integer, then dc(1) will exit on 996 **SIGINT**. 997 998 This environment variable overrides the default, which can be queried with 999 the **-h** or **-\-help** options. 1000 1001**DC_TTY_MODE** 1002 1003: If TTY mode is *not* available (see the **TTY MODE** section), then this 1004 environment variable has no effect. 1005 1006 However, when TTY mode is available, then if this environment variable 1007 exists and contains an integer, then a non-zero value makes dc(1) use TTY 1008 mode, and zero makes dc(1) not use TTY mode. 1009 1010 This environment variable overrides the default, which can be queried with 1011 the **-h** or **-\-help** options. 1012 1013**DC_PROMPT** 1014 1015: If TTY mode is *not* available (see the **TTY MODE** section), then this 1016 environment variable has no effect. 1017 1018 However, when TTY mode is available, then if this environment variable 1019 exists and contains an integer, a non-zero value makes dc(1) use a prompt, 1020 and zero or a non-integer makes dc(1) not use a prompt. If this environment 1021 variable does not exist and **DC_TTY_MODE** does, then the value of the 1022 **DC_TTY_MODE** environment variable is used. 1023 1024 This environment variable and the **DC_TTY_MODE** environment variable 1025 override the default, which can be queried with the **-h** or **-\-help** 1026 options. 1027 1028**DC_EXPR_EXIT** 1029 1030: If any expressions or expression files are given on the command-line with 1031 **-e**, **-\-expression**, **-f**, or **-\-file**, then if this environment 1032 variable exists and contains an integer, a non-zero value makes dc(1) exit 1033 after executing the expressions and expression files, and a non-zero value 1034 makes dc(1) not exit. 1035 1036 This environment variable overrides the default, which can be queried with 1037 the **-h** or **-\-help** options. 1038 1039# EXIT STATUS 1040 1041dc(1) returns the following exit statuses: 1042 1043**0** 1044 1045: No error. 1046 1047**1** 1048 1049: A math error occurred. This follows standard practice of using **1** for 1050 expected errors, since math errors will happen in the process of normal 1051 execution. 1052 1053 Math errors include divide by **0**, taking the square root of a negative 1054 number, attempting to convert a negative number to a hardware integer, 1055 overflow when converting a number to a hardware integer, overflow when 1056 calculating the size of a number, and attempting to use a non-integer where 1057 an integer is required. 1058 1059 Converting to a hardware integer happens for the second operand of the power 1060 (**\^**) operator. 1061 1062**2** 1063 1064: A parse error occurred. 1065 1066 Parse errors include unexpected **EOF**, using an invalid character, failing 1067 to find the end of a string or comment, and using a token where it is 1068 invalid. 1069 1070**3** 1071 1072: A runtime error occurred. 1073 1074 Runtime errors include assigning an invalid number to any global (**ibase**, 1075 **obase**, or **scale**), giving a bad expression to a **read()** call, 1076 calling **read()** inside of a **read()** call, type errors (including 1077 attempting to execute a number), and attempting an operation when the stack 1078 has too few elements. 1079 1080**4** 1081 1082: A fatal error occurred. 1083 1084 Fatal errors include memory allocation errors, I/O errors, failing to open 1085 files, attempting to use files that do not have only ASCII characters (dc(1) 1086 only accepts ASCII characters), attempting to open a directory as a file, 1087 and giving invalid command-line options. 1088 1089The exit status **4** is special; when a fatal error occurs, dc(1) always exits 1090and returns **4**, no matter what mode dc(1) is in. 1091 1092The other statuses will only be returned when dc(1) is not in interactive mode 1093(see the **INTERACTIVE MODE** section), since dc(1) resets its state (see the 1094**RESET** section) and accepts more input when one of those errors occurs in 1095interactive mode. This is also the case when interactive mode is forced by the 1096**-i** flag or **-\-interactive** option. 1097 1098These exit statuses allow dc(1) to be used in shell scripting with error 1099checking, and its normal behavior can be forced by using the **-i** flag or 1100**-\-interactive** option. 1101 1102# INTERACTIVE MODE 1103 1104Like bc(1), dc(1) has an interactive mode and a non-interactive mode. 1105Interactive mode is turned on automatically when both **stdin** and **stdout** 1106are hooked to a terminal, but the **-i** flag and **-\-interactive** option can 1107turn it on in other situations. 1108 1109In interactive mode, dc(1) attempts to recover from errors (see the **RESET** 1110section), and in normal execution, flushes **stdout** as soon as execution is 1111done for the current input. dc(1) may also reset on **SIGINT** instead of exit, 1112depending on the contents of, or default for, the **DC_SIGINT_RESET** 1113environment variable (see the **ENVIRONMENT VARIABLES** section). 1114 1115# TTY MODE 1116 1117If **stdin**, **stdout**, and **stderr** are all connected to a TTY, then "TTY 1118mode" is considered to be available, and thus, dc(1) can turn on TTY mode, 1119subject to some settings. 1120 1121If there is the environment variable **DC_TTY_MODE** in the environment (see the 1122**ENVIRONMENT VARIABLES** section), then if that environment variable contains a 1123non-zero integer, dc(1) will turn on TTY mode when **stdin**, **stdout**, and 1124**stderr** are all connected to a TTY. If the **DC_TTY_MODE** environment 1125variable exists but is *not* a non-zero integer, then dc(1) will not turn TTY 1126mode on. 1127 1128If the environment variable **DC_TTY_MODE** does *not* exist, the default 1129setting is used. The default setting can be queried with the **-h** or 1130**-\-help** options. 1131 1132TTY mode is different from interactive mode because interactive mode is required 1133in the [bc(1) specification][1], and interactive mode requires only **stdin** 1134and **stdout** to be connected to a terminal. 1135 1136## Command-Line History 1137 1138Command-line history is only enabled if TTY mode is, i.e., that **stdin**, 1139**stdout**, and **stderr** are connected to a TTY and the **DC_TTY_MODE** 1140environment variable (see the **ENVIRONMENT VARIABLES** section) and its default 1141do not disable TTY mode. See the **COMMAND LINE HISTORY** section for more 1142information. 1143 1144## Prompt 1145 1146If TTY mode is available, then a prompt can be enabled. Like TTY mode itself, it 1147can be turned on or off with an environment variable: **DC_PROMPT** (see the 1148**ENVIRONMENT VARIABLES** section). 1149 1150If the environment variable **DC_PROMPT** exists and is a non-zero integer, then 1151the prompt is turned on when **stdin**, **stdout**, and **stderr** are connected 1152to a TTY and the **-P** and **-\-no-prompt** options were not used. The read 1153prompt will be turned on under the same conditions, except that the **-R** and 1154**-\-no-read-prompt** options must also not be used. 1155 1156However, if **DC_PROMPT** does not exist, the prompt can be enabled or disabled 1157with the **DC_TTY_MODE** environment variable, the **-P** and **-\-no-prompt** 1158options, and the **-R** and **-\-no-read-prompt** options. See the **ENVIRONMENT 1159VARIABLES** and **OPTIONS** sections for more details. 1160 1161# SIGNAL HANDLING 1162 1163Sending a **SIGINT** will cause dc(1) to do one of two things. 1164 1165If dc(1) is not in interactive mode (see the **INTERACTIVE MODE** section), or 1166the **DC_SIGINT_RESET** environment variable (see the **ENVIRONMENT VARIABLES** 1167section), or its default, is either not an integer or it is zero, dc(1) will 1168exit. 1169 1170However, if dc(1) is in interactive mode, and the **DC_SIGINT_RESET** or its 1171default is an integer and non-zero, then dc(1) will stop executing the current 1172input and reset (see the **RESET** section) upon receiving a **SIGINT**. 1173 1174Note that "current input" can mean one of two things. If dc(1) is processing 1175input from **stdin** in interactive mode, it will ask for more input. If dc(1) 1176is processing input from a file in interactive mode, it will stop processing the 1177file and start processing the next file, if one exists, or ask for input from 1178**stdin** if no other file exists. 1179 1180This means that if a **SIGINT** is sent to dc(1) as it is executing a file, it 1181can seem as though dc(1) did not respond to the signal since it will immediately 1182start executing the next file. This is by design; most files that users execute 1183when interacting with dc(1) have function definitions, which are quick to parse. 1184If a file takes a long time to execute, there may be a bug in that file. The 1185rest of the files could still be executed without problem, allowing the user to 1186continue. 1187 1188**SIGTERM** and **SIGQUIT** cause dc(1) to clean up and exit, and it uses the 1189default handler for all other signals. The one exception is **SIGHUP**; in that 1190case, and only when dc(1) is in TTY mode (see the **TTY MODE** section), a 1191**SIGHUP** will cause dc(1) to clean up and exit. 1192 1193# COMMAND LINE HISTORY 1194 1195dc(1) supports interactive command-line editing. 1196 1197If dc(1) can be in TTY mode (see the **TTY MODE** section), history can be 1198enabled. This means that command-line history can only be enabled when 1199**stdin**, **stdout**, and **stderr** are all connected to a TTY. 1200 1201Like TTY mode itself, it can be turned on or off with the environment variable 1202**DC_TTY_MODE** (see the **ENVIRONMENT VARIABLES** section). 1203 1204**Note**: tabs are converted to 8 spaces. 1205 1206# SEE ALSO 1207 1208bc(1) 1209 1210# STANDARDS 1211 1212The dc(1) utility operators are compliant with the operators in the bc(1) 1213[IEEE Std 1003.1-2017 (“POSIX.1-2017”)][1] specification. 1214 1215# BUGS 1216 1217None are known. Report bugs at https://git.yzena.com/gavin/bc. 1218 1219# AUTHOR 1220 1221Gavin D. Howard <gavin@yzena.com> and contributors. 1222 1223[1]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html 1224