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 33bc - arbitrary-precision decimal arithmetic language and calculator 34 35# SYNOPSIS 36 37**bc** [**-ghilPqRsvVw**] [**-\-global-stacks**] [**-\-help**] [**-\-interactive**] [**-\-mathlib**] [**-\-no-prompt**] [**-\-no-read-prompt**] [**-\-quiet**] [**-\-standard**] [**-\-warn**] [**-\-version**] [**-e** *expr*] [**-\-expression**=*expr*...] [**-f** *file*...] [**-\-file**=*file*...] [*file*...] 38 39# DESCRIPTION 40 41bc(1) is an interactive processor for a language first standardized in 1991 by 42POSIX. (The current standard is [here][1].) The language provides unlimited 43precision decimal arithmetic and is somewhat C-like, but there are differences. 44Such differences will be noted in this document. 45 46After parsing and handling options, this bc(1) reads any files given on the 47command line and executes them before reading from **stdin**. 48 49This bc(1) is a drop-in replacement for *any* bc(1), including (and 50especially) the GNU bc(1). 51 52# OPTIONS 53 54The following are the options that bc(1) accepts. 55 56**-g**, **-\-global-stacks** 57 58 Turns the globals **ibase**, **obase**, and **scale** into stacks. 59 60 This has the effect that a copy of the current value of all three are pushed 61 onto a stack for every function call, as well as popped when every function 62 returns. This means that functions can assign to any and all of those 63 globals without worrying that the change will affect other functions. 64 Thus, a hypothetical function named **output(x,b)** that simply printed 65 **x** in base **b** could be written like this: 66 67 define void output(x, b) { 68 obase=b 69 x 70 } 71 72 instead of like this: 73 74 define void output(x, b) { 75 auto c 76 c=obase 77 obase=b 78 x 79 obase=c 80 } 81 82 This makes writing functions much easier. 83 84 However, since using this flag means that functions cannot set **ibase**, 85 **obase**, or **scale** globally, functions that are made to do so cannot 86 work anymore. There are two possible use cases for that, and each has a 87 solution. 88 89 First, if a function is called on startup to turn bc(1) into a number 90 converter, it is possible to replace that capability with various shell 91 aliases. Examples: 92 93 alias d2o="bc -e ibase=A -e obase=8" 94 alias h2b="bc -e ibase=G -e obase=2" 95 96 Second, if the purpose of a function is to set **ibase**, **obase**, or 97 **scale** globally for any other purpose, it could be split into one to 98 three functions (based on how many globals it sets) and each of those 99 functions could return the desired value for a global. 100 101 If the behavior of this option is desired for every run of bc(1), then users 102 could make sure to define **BC_ENV_ARGS** and include this option (see the 103 **ENVIRONMENT VARIABLES** section for more details). 104 105 If **-s**, **-w**, or any equivalents are used, this option is ignored. 106 107 This is a **non-portable extension**. 108 109**-h**, **-\-help** 110 111: Prints a usage message and quits. 112 113**-i**, **-\-interactive** 114 115: Forces interactive mode. (See the **INTERACTIVE MODE** section.) 116 117 This is a **non-portable extension**. 118 119**-l**, **-\-mathlib** 120 121: Sets **scale** (see the **SYNTAX** section) to **20** and loads the included 122 math library before running any code, including any expressions or files 123 specified on the command line. 124 125 To learn what is in the library, see the **LIBRARY** section. 126 127**-P**, **-\-no-prompt** 128 129: Disables the prompt in TTY mode. (The prompt is only enabled in TTY mode. 130 See the **TTY MODE** section.) This is mostly for those users that do not 131 want a prompt or are not used to having them in bc(1). Most of those users 132 would want to put this option in **BC_ENV_ARGS** (see the 133 **ENVIRONMENT VARIABLES** section). 134 135 This is a **non-portable extension**. 136 137**-R**, **-\-no-read-prompt** 138 139: Disables the read prompt in TTY mode. (The read prompt is only enabled in 140 TTY mode. See the **TTY MODE** section.) This is mostly for those users that 141 do not want a read prompt or are not used to having them in bc(1). Most of 142 those users would want to put this option in **BC_ENV_ARGS** (see the 143 **ENVIRONMENT VARIABLES** section). This option is also useful in hash bang 144 lines of bc(1) scripts that prompt for user input. 145 146 This option does not disable the regular prompt because the read prompt is 147 only used when the **read()** built-in function is called. 148 149 This is a **non-portable extension**. 150 151**-q**, **-\-quiet** 152 153: This option is for compatibility with the [GNU bc(1)][2]; it is a no-op. 154 Without this option, GNU bc(1) prints a copyright header. This bc(1) only 155 prints the copyright header if one or more of the **-v**, **-V**, or 156 **-\-version** options are given. 157 158 This is a **non-portable extension**. 159 160**-s**, **-\-standard** 161 162: Process exactly the language defined by the [standard][1] and error if any 163 extensions are used. 164 165 This is a **non-portable extension**. 166 167**-v**, **-V**, **-\-version** 168 169: Print the version information (copyright header) and exit. 170 171 This is a **non-portable extension**. 172 173**-w**, **-\-warn** 174 175: Like **-s** and **-\-standard**, except that warnings (and not errors) are 176 printed for non-standard extensions and execution continues normally. 177 178 This is a **non-portable extension**. 179 180**-e** *expr*, **-\-expression**=*expr* 181 182: Evaluates *expr*. If multiple expressions are given, they are evaluated in 183 order. If files are given as well (see below), the expressions and files are 184 evaluated in the order given. This means that if a file is given before an 185 expression, the file is read in and evaluated first. 186 187 If this option is given on the command-line (i.e., not in **BC_ENV_ARGS**, 188 see the **ENVIRONMENT VARIABLES** section), then after processing all 189 expressions and files, bc(1) will exit, unless **-** (**stdin**) was given 190 as an argument at least once to **-f** or **-\-file**, whether on the 191 command-line or in **BC_ENV_ARGS**. However, if any other **-e**, 192 **-\-expression**, **-f**, or **-\-file** arguments are given after **-f-** 193 or equivalent is given, bc(1) will give a fatal error and exit. 194 195 This is a **non-portable extension**. 196 197**-f** *file*, **-\-file**=*file* 198 199: Reads in *file* and evaluates it, line by line, as though it were read 200 through **stdin**. If expressions are also given (see above), the 201 expressions are evaluated in the order given. 202 203 If this option is given on the command-line (i.e., not in **BC_ENV_ARGS**, 204 see the **ENVIRONMENT VARIABLES** section), then after processing all 205 expressions and files, bc(1) will exit, unless **-** (**stdin**) was given 206 as an argument at least once to **-f** or **-\-file**. However, if any other 207 **-e**, **-\-expression**, **-f**, or **-\-file** arguments are given after 208 **-f-** or equivalent is given, bc(1) will give a fatal error and exit. 209 210 This is a **non-portable extension**. 211 212All long options are **non-portable extensions**. 213 214# STDOUT 215 216Any non-error output is written to **stdout**. In addition, if history (see the 217**HISTORY** section) and the prompt (see the **TTY MODE** section) are enabled, 218both are output to **stdout**. 219 220**Note**: Unlike other bc(1) implementations, this bc(1) will issue a fatal 221error (see the **EXIT STATUS** section) if it cannot write to **stdout**, so if 222**stdout** is closed, as in **bc <file> >&-**, it will quit with an error. This 223is done so that bc(1) can report problems when **stdout** is redirected to a 224file. 225 226If there are scripts that depend on the behavior of other bc(1) implementations, 227it is recommended that those scripts be changed to redirect **stdout** to 228**/dev/null**. 229 230# STDERR 231 232Any error output is written to **stderr**. 233 234**Note**: Unlike other bc(1) implementations, this bc(1) will issue a fatal 235error (see the **EXIT STATUS** section) if it cannot write to **stderr**, so if 236**stderr** is closed, as in **bc <file> 2>&-**, it will quit with an error. This 237is done so that bc(1) can exit with an error code when **stderr** is redirected 238to a file. 239 240If there are scripts that depend on the behavior of other bc(1) implementations, 241it is recommended that those scripts be changed to redirect **stderr** to 242**/dev/null**. 243 244# SYNTAX 245 246The syntax for bc(1) programs is mostly C-like, with some differences. This 247bc(1) follows the [POSIX standard][1], which is a much more thorough resource 248for the language this bc(1) accepts. This section is meant to be a summary and a 249listing of all the extensions to the standard. 250 251In the sections below, **E** means expression, **S** means statement, and **I** 252means identifier. 253 254Identifiers (**I**) start with a lowercase letter and can be followed by any 255number (up to **BC_NAME_MAX-1**) of lowercase letters (**a-z**), digits 256(**0-9**), and underscores (**\_**). The regex is **\[a-z\]\[a-z0-9\_\]\***. 257Identifiers with more than one character (letter) are a 258**non-portable extension**. 259 260**ibase** is a global variable determining how to interpret constant numbers. It 261is the "input" base, or the number base used for interpreting input numbers. 262**ibase** is initially **10**. If the **-s** (**-\-standard**) and **-w** 263(**-\-warn**) flags were not given on the command line, the max allowable value 264for **ibase** is **36**. Otherwise, it is **16**. The min allowable value for 265**ibase** is **2**. The max allowable value for **ibase** can be queried in 266bc(1) programs with the **maxibase()** built-in function. 267 268**obase** is a global variable determining how to output results. It is the 269"output" base, or the number base used for outputting numbers. **obase** is 270initially **10**. The max allowable value for **obase** is **BC_BASE_MAX** and 271can be queried in bc(1) programs with the **maxobase()** built-in function. The 272min allowable value for **obase** is **2**. Values are output in the specified 273base. 274 275The *scale* of an expression is the number of digits in the result of the 276expression right of the decimal point, and **scale** is a global variable that 277sets the precision of any operations, with exceptions. **scale** is initially 278**0**. **scale** cannot be negative. The max allowable value for **scale** is 279**BC_SCALE_MAX** and can be queried in bc(1) programs with the **maxscale()** 280built-in function. 281 282bc(1) has both *global* variables and *local* variables. All *local* 283variables are local to the function; they are parameters or are introduced in 284the **auto** list of a function (see the **FUNCTIONS** section). If a variable 285is accessed which is not a parameter or in the **auto** list, it is assumed to 286be *global*. If a parent function has a *local* variable version of a variable 287that a child function considers *global*, the value of that *global* variable in 288the child function is the value of the variable in the parent function, not the 289value of the actual *global* variable. 290 291All of the above applies to arrays as well. 292 293The value of a statement that is an expression (i.e., any of the named 294expressions or operands) is printed unless the lowest precedence operator is an 295assignment operator *and* the expression is notsurrounded by parentheses. 296 297The value that is printed is also assigned to the special variable **last**. A 298single dot (**.**) may also be used as a synonym for **last**. These are 299**non-portable extensions**. 300 301Either semicolons or newlines may separate statements. 302 303## Comments 304 305There are two kinds of comments: 306 3071. Block comments are enclosed in **/\*** and **\*/**. 3082. Line comments go from **#** until, and not including, the next newline. This 309 is a **non-portable extension**. 310 311## Named Expressions 312 313The following are named expressions in bc(1): 314 3151. Variables: **I** 3162. Array Elements: **I[E]** 3173. **ibase** 3184. **obase** 3195. **scale** 3206. **last** or a single dot (**.**) 321 322Number 6 is a **non-portable extension**. 323 324Variables and arrays do not interfere; users can have arrays named the same as 325variables. This also applies to functions (see the **FUNCTIONS** section), so a 326user can have a variable, array, and function that all have the same name, and 327they will not shadow each other, whether inside of functions or not. 328 329Named expressions are required as the operand of **increment**/**decrement** 330operators and as the left side of **assignment** operators (see the *Operators* 331subsection). 332 333## Operands 334 335The following are valid operands in bc(1): 336 3371. Numbers (see the *Numbers* subsection below). 3382. Array indices (**I[E]**). 3393. **(E)**: The value of **E** (used to change precedence). 3404. **sqrt(E)**: The square root of **E**. **E** must be non-negative. 3415. **length(E)**: The number of significant decimal digits in **E**. 3426. **length(I[])**: The number of elements in the array **I**. This is a 343 **non-portable extension**. 3447. **scale(E)**: The *scale* of **E**. 3458. **abs(E)**: The absolute value of **E**. This is a **non-portable 346 extension**. 3479. **I()**, **I(E)**, **I(E, E)**, and so on, where **I** is an identifier for 348 a non-**void** function (see the *Void Functions* subsection of the 349 **FUNCTIONS** section). The **E** argument(s) may also be arrays of the form 350 **I[]**, which will automatically be turned into array references (see the 351 *Array References* subsection of the **FUNCTIONS** section) if the 352 corresponding parameter in the function definition is an array reference. 35310. **read()**: Reads a line from **stdin** and uses that as an expression. The 354 result of that expression is the result of the **read()** operand. This is a 355 **non-portable extension**. 35611. **maxibase()**: The max allowable **ibase**. This is a **non-portable 357 extension**. 35812. **maxobase()**: The max allowable **obase**. This is a **non-portable 359 extension**. 36013. **maxscale()**: The max allowable **scale**. This is a **non-portable 361 extension**. 362 363## Numbers 364 365Numbers are strings made up of digits, uppercase letters, and at most **1** 366period for a radix. Numbers can have up to **BC_NUM_MAX** digits. Uppercase 367letters are equal to **9** + their position in the alphabet (i.e., **A** equals 368**10**, or **9+1**). If a digit or letter makes no sense with the current value 369of **ibase**, they are set to the value of the highest valid digit in **ibase**. 370 371Single-character numbers (i.e., **A** alone) take the value that they would have 372if they were valid digits, regardless of the value of **ibase**. This means that 373**A** alone always equals decimal **10** and **Z** alone always equals decimal 374**35**. 375 376## Operators 377 378The following arithmetic and logical operators can be used. They are listed in 379order of decreasing precedence. Operators in the same group have the same 380precedence. 381 382**++** **-\-** 383 384: Type: Prefix and Postfix 385 386 Associativity: None 387 388 Description: **increment**, **decrement** 389 390**-** **!** 391 392: Type: Prefix 393 394 Associativity: None 395 396 Description: **negation**, **boolean not** 397 398**\^** 399 400: Type: Binary 401 402 Associativity: Right 403 404 Description: **power** 405 406**\*** **/** **%** 407 408: Type: Binary 409 410 Associativity: Left 411 412 Description: **multiply**, **divide**, **modulus** 413 414**+** **-** 415 416: Type: Binary 417 418 Associativity: Left 419 420 Description: **add**, **subtract** 421 422**=** **+=** **-=** **\*=** **/=** **%=** **\^=** 423 424: Type: Binary 425 426 Associativity: Right 427 428 Description: **assignment** 429 430**==** **\<=** **\>=** **!=** **\<** **\>** 431 432: Type: Binary 433 434 Associativity: Left 435 436 Description: **relational** 437 438**&&** 439 440: Type: Binary 441 442 Associativity: Left 443 444 Description: **boolean and** 445 446**||** 447 448: Type: Binary 449 450 Associativity: Left 451 452 Description: **boolean or** 453 454The operators will be described in more detail below. 455 456**++** **-\-** 457 458: The prefix and postfix **increment** and **decrement** operators behave 459 exactly like they would in C. They require a named expression (see the 460 *Named Expressions* subsection) as an operand. 461 462 The prefix versions of these operators are more efficient; use them where 463 possible. 464 465**-** 466 467: The **negation** operator returns **0** if a user attempts to negate any 468 expression with the value **0**. Otherwise, a copy of the expression with 469 its sign flipped is returned. 470 471**!** 472 473: The **boolean not** operator returns **1** if the expression is **0**, or 474 **0** otherwise. 475 476 This is a **non-portable extension**. 477 478**\^** 479 480: The **power** operator (not the **exclusive or** operator, as it would be in 481 C) takes two expressions and raises the first to the power of the value of 482 the second. The *scale* of the result is equal to **scale**. 483 484 The second expression must be an integer (no *scale*), and if it is 485 negative, the first value must be non-zero. 486 487**\*** 488 489: The **multiply** operator takes two expressions, multiplies them, and 490 returns the product. If **a** is the *scale* of the first expression and 491 **b** is the *scale* of the second expression, the *scale* of the result is 492 equal to **min(a+b,max(scale,a,b))** where **min()** and **max()** return 493 the obvious values. 494 495**/** 496 497: The **divide** operator takes two expressions, divides them, and returns the 498 quotient. The *scale* of the result shall be the value of **scale**. 499 500 The second expression must be non-zero. 501 502**%** 503 504: The **modulus** operator takes two expressions, **a** and **b**, and 505 evaluates them by 1) Computing **a/b** to current **scale** and 2) Using the 506 result of step 1 to calculate **a-(a/b)\*b** to *scale* 507 **max(scale+scale(b),scale(a))**. 508 509 The second expression must be non-zero. 510 511**+** 512 513: The **add** operator takes two expressions, **a** and **b**, and returns the 514 sum, with a *scale* equal to the max of the *scale*s of **a** and **b**. 515 516**-** 517 518: The **subtract** operator takes two expressions, **a** and **b**, and 519 returns the difference, with a *scale* equal to the max of the *scale*s of 520 **a** and **b**. 521 522**=** **+=** **-=** **\*=** **/=** **%=** **\^=** 523 524: The **assignment** operators take two expressions, **a** and **b** where 525 **a** is a named expression (see the *Named Expressions* subsection). 526 527 For **=**, **b** is copied and the result is assigned to **a**. For all 528 others, **a** and **b** are applied as operands to the corresponding 529 arithmetic operator and the result is assigned to **a**. 530 531**==** **\<=** **\>=** **!=** **\<** **\>** 532 533: The **relational** operators compare two expressions, **a** and **b**, and 534 if the relation holds, according to C language semantics, the result is 535 **1**. Otherwise, it is **0**. 536 537 Note that unlike in C, these operators have a lower precedence than the 538 **assignment** operators, which means that **a=b\>c** is interpreted as 539 **(a=b)\>c**. 540 541 Also, unlike the [standard][1] requires, these operators can appear anywhere 542 any other expressions can be used. This allowance is a 543 **non-portable extension**. 544 545**&&** 546 547: The **boolean and** operator takes two expressions and returns **1** if both 548 expressions are non-zero, **0** otherwise. 549 550 This is *not* a short-circuit operator. 551 552 This is a **non-portable extension**. 553 554**||** 555 556: The **boolean or** operator takes two expressions and returns **1** if one 557 of the expressions is non-zero, **0** otherwise. 558 559 This is *not* a short-circuit operator. 560 561 This is a **non-portable extension**. 562 563## Statements 564 565The following items are statements: 566 5671. **E** 5682. **{** **S** **;** ... **;** **S** **}** 5693. **if** **(** **E** **)** **S** 5704. **if** **(** **E** **)** **S** **else** **S** 5715. **while** **(** **E** **)** **S** 5726. **for** **(** **E** **;** **E** **;** **E** **)** **S** 5737. An empty statement 5748. **break** 5759. **continue** 57610. **quit** 57711. **halt** 57812. **limits** 57913. A string of characters, enclosed in double quotes 58014. **print** **E** **,** ... **,** **E** 58115. **I()**, **I(E)**, **I(E, E)**, and so on, where **I** is an identifier for 582 a **void** function (see the *Void Functions* subsection of the 583 **FUNCTIONS** section). The **E** argument(s) may also be arrays of the form 584 **I[]**, which will automatically be turned into array references (see the 585 *Array References* subsection of the **FUNCTIONS** section) if the 586 corresponding parameter in the function definition is an array reference. 587 588Numbers 4, 9, 11, 12, 14, and 15 are **non-portable extensions**. 589 590Also, as a **non-portable extension**, any or all of the expressions in the 591header of a for loop may be omitted. If the condition (second expression) is 592omitted, it is assumed to be a constant **1**. 593 594The **break** statement causes a loop to stop iterating and resume execution 595immediately following a loop. This is only allowed in loops. 596 597The **continue** statement causes a loop iteration to stop early and returns to 598the start of the loop, including testing the loop condition. This is only 599allowed in loops. 600 601The **if** **else** statement does the same thing as in C. 602 603The **quit** statement causes bc(1) to quit, even if it is on a branch that will 604not be executed (it is a compile-time command). 605 606The **halt** statement causes bc(1) to quit, if it is executed. (Unlike **quit** 607if it is on a branch of an **if** statement that is not executed, bc(1) does not 608quit.) 609 610The **limits** statement prints the limits that this bc(1) is subject to. This 611is like the **quit** statement in that it is a compile-time command. 612 613An expression by itself is evaluated and printed, followed by a newline. 614 615## Print Statement 616 617The "expressions" in a **print** statement may also be strings. If they are, there 618are backslash escape sequences that are interpreted specially. What those 619sequences are, and what they cause to be printed, are shown below: 620 621-------- ------- 622**\\a** **\\a** 623**\\b** **\\b** 624**\\\\** **\\** 625**\\e** **\\** 626**\\f** **\\f** 627**\\n** **\\n** 628**\\q** **"** 629**\\r** **\\r** 630**\\t** **\\t** 631-------- ------- 632 633Any other character following a backslash causes the backslash and character to 634be printed as-is. 635 636Any non-string expression in a print statement shall be assigned to **last**, 637like any other expression that is printed. 638 639## Order of Evaluation 640 641All expressions in a statment are evaluated left to right, except as necessary 642to maintain order of operations. This means, for example, assuming that **i** is 643equal to **0**, in the expression 644 645 a[i++] = i++ 646 647the first (or 0th) element of **a** is set to **1**, and **i** is equal to **2** 648at the end of the expression. 649 650This includes function arguments. Thus, assuming **i** is equal to **0**, this 651means that in the expression 652 653 x(i++, i++) 654 655the first argument passed to **x()** is **0**, and the second argument is **1**, 656while **i** is equal to **2** before the function starts executing. 657 658# FUNCTIONS 659 660Function definitions are as follows: 661 662``` 663define I(I,...,I){ 664 auto I,...,I 665 S;...;S 666 return(E) 667} 668``` 669 670Any **I** in the parameter list or **auto** list may be replaced with **I[]** to 671make a parameter or **auto** var an array, and any **I** in the parameter list 672may be replaced with **\*I[]** to make a parameter an array reference. Callers 673of functions that take array references should not put an asterisk in the call; 674they must be called with just **I[]** like normal array parameters and will be 675automatically converted into references. 676 677As a **non-portable extension**, the opening brace of a **define** statement may 678appear on the next line. 679 680As a **non-portable extension**, the return statement may also be in one of the 681following forms: 682 6831. **return** 6842. **return** **(** **)** 6853. **return** **E** 686 687The first two, or not specifying a **return** statement, is equivalent to 688**return (0)**, unless the function is a **void** function (see the *Void 689Functions* subsection below). 690 691## Void Functions 692 693Functions can also be **void** functions, defined as follows: 694 695``` 696define void I(I,...,I){ 697 auto I,...,I 698 S;...;S 699 return 700} 701``` 702 703They can only be used as standalone expressions, where such an expression would 704be printed alone, except in a print statement. 705 706Void functions can only use the first two **return** statements listed above. 707They can also omit the return statement entirely. 708 709The word "void" is not treated as a keyword; it is still possible to have 710variables, arrays, and functions named **void**. The word "void" is only 711treated specially right after the **define** keyword. 712 713This is a **non-portable extension**. 714 715## Array References 716 717For any array in the parameter list, if the array is declared in the form 718 719``` 720*I[] 721``` 722 723it is a **reference**. Any changes to the array in the function are reflected, 724when the function returns, to the array that was passed in. 725 726Other than this, all function arguments are passed by value. 727 728This is a **non-portable extension**. 729 730# LIBRARY 731 732All of the functions below are available when the **-l** or **-\-mathlib** 733command-line flags are given. 734 735## Standard Library 736 737The [standard][1] defines the following functions for the math library: 738 739**s(x)** 740 741: Returns the sine of **x**, which is assumed to be in radians. 742 743 This is a transcendental function (see the *Transcendental Functions* 744 subsection below). 745 746**c(x)** 747 748: Returns the cosine of **x**, which is assumed to be in radians. 749 750 This is a transcendental function (see the *Transcendental Functions* 751 subsection below). 752 753**a(x)** 754 755: Returns the arctangent of **x**, in radians. 756 757 This is a transcendental function (see the *Transcendental Functions* 758 subsection below). 759 760**l(x)** 761 762: Returns the natural logarithm of **x**. 763 764 This is a transcendental function (see the *Transcendental Functions* 765 subsection below). 766 767**e(x)** 768 769: Returns the mathematical constant **e** raised to the power of **x**. 770 771 This is a transcendental function (see the *Transcendental Functions* 772 subsection below). 773 774**j(x, n)** 775 776: Returns the bessel integer order **n** (truncated) of **x**. 777 778 This is a transcendental function (see the *Transcendental Functions* 779 subsection below). 780 781## Transcendental Functions 782 783All transcendental functions can return slightly inaccurate results (up to 1 784[ULP][4]). This is unavoidable, and [this article][5] explains why it is 785impossible and unnecessary to calculate exact results for the transcendental 786functions. 787 788Because of the possible inaccuracy, I recommend that users call those functions 789with the precision (**scale**) set to at least 1 higher than is necessary. If 790exact results are *absolutely* required, users can double the precision 791(**scale**) and then truncate. 792 793The transcendental functions in the standard math library are: 794 795* **s(x)** 796* **c(x)** 797* **a(x)** 798* **l(x)** 799* **e(x)** 800* **j(x, n)** 801 802# RESET 803 804When bc(1) encounters an error or a signal that it has a non-default handler 805for, it resets. This means that several things happen. 806 807First, any functions that are executing are stopped and popped off the stack. 808The behavior is not unlike that of exceptions in programming languages. Then 809the execution point is set so that any code waiting to execute (after all 810functions returned) is skipped. 811 812Thus, when bc(1) resets, it skips any remaining code waiting to be executed. 813Then, if it is interactive mode, and the error was not a fatal error (see the 814**EXIT STATUS** section), it asks for more input; otherwise, it exits with the 815appropriate return code. 816 817Note that this reset behavior is different from the GNU bc(1), which attempts to 818start executing the statement right after the one that caused an error. 819 820# PERFORMANCE 821 822Most bc(1) implementations use **char** types to calculate the value of **1** 823decimal digit at a time, but that can be slow. This bc(1) does something 824different. 825 826It uses large integers to calculate more than **1** decimal digit at a time. If 827built in a environment where **BC_LONG_BIT** (see the **LIMITS** section) is 828**64**, then each integer has **9** decimal digits. If built in an environment 829where **BC_LONG_BIT** is **32** then each integer has **4** decimal digits. This 830value (the number of decimal digits per large integer) is called 831**BC_BASE_DIGS**. 832 833The actual values of **BC_LONG_BIT** and **BC_BASE_DIGS** can be queried with 834the **limits** statement. 835 836In addition, this bc(1) uses an even larger integer for overflow checking. This 837integer type depends on the value of **BC_LONG_BIT**, but is always at least 838twice as large as the integer type used to store digits. 839 840# LIMITS 841 842The following are the limits on bc(1): 843 844**BC_LONG_BIT** 845 846: The number of bits in the **long** type in the environment where bc(1) was 847 built. This determines how many decimal digits can be stored in a single 848 large integer (see the **PERFORMANCE** section). 849 850**BC_BASE_DIGS** 851 852: The number of decimal digits per large integer (see the **PERFORMANCE** 853 section). Depends on **BC_LONG_BIT**. 854 855**BC_BASE_POW** 856 857: The max decimal number that each large integer can store (see 858 **BC_BASE_DIGS**) plus **1**. Depends on **BC_BASE_DIGS**. 859 860**BC_OVERFLOW_MAX** 861 862: The max number that the overflow type (see the **PERFORMANCE** section) can 863 hold. Depends on **BC_LONG_BIT**. 864 865**BC_BASE_MAX** 866 867: The maximum output base. Set at **BC_BASE_POW**. 868 869**BC_DIM_MAX** 870 871: The maximum size of arrays. Set at **SIZE_MAX-1**. 872 873**BC_SCALE_MAX** 874 875: The maximum **scale**. Set at **BC_OVERFLOW_MAX-1**. 876 877**BC_STRING_MAX** 878 879: The maximum length of strings. Set at **BC_OVERFLOW_MAX-1**. 880 881**BC_NAME_MAX** 882 883: The maximum length of identifiers. Set at **BC_OVERFLOW_MAX-1**. 884 885**BC_NUM_MAX** 886 887: The maximum length of a number (in decimal digits), which includes digits 888 after the decimal point. Set at **BC_OVERFLOW_MAX-1**. 889 890Exponent 891 892: The maximum allowable exponent (positive or negative). Set at 893 **BC_OVERFLOW_MAX**. 894 895Number of vars 896 897: The maximum number of vars/arrays. Set at **SIZE_MAX-1**. 898 899The actual values can be queried with the **limits** statement. 900 901These limits are meant to be effectively non-existent; the limits are so large 902(at least on 64-bit machines) that there should not be any point at which they 903become a problem. In fact, memory should be exhausted before these limits should 904be hit. 905 906# ENVIRONMENT VARIABLES 907 908bc(1) recognizes the following environment variables: 909 910**POSIXLY_CORRECT** 911 912: If this variable exists (no matter the contents), bc(1) behaves as if 913 the **-s** option was given. 914 915**BC_ENV_ARGS** 916 917: This is another way to give command-line arguments to bc(1). They should be 918 in the same format as all other command-line arguments. These are always 919 processed first, so any files given in **BC_ENV_ARGS** will be processed 920 before arguments and files given on the command-line. This gives the user 921 the ability to set up "standard" options and files to be used at every 922 invocation. The most useful thing for such files to contain would be useful 923 functions that the user might want every time bc(1) runs. 924 925 The code that parses **BC_ENV_ARGS** will correctly handle quoted arguments, 926 but it does not understand escape sequences. For example, the string 927 **"/home/gavin/some bc file.bc"** will be correctly parsed, but the string 928 **"/home/gavin/some \"bc\" file.bc"** will include the backslashes. 929 930 The quote parsing will handle either kind of quotes, **'** or **"**. Thus, 931 if you have a file with any number of single quotes in the name, you can use 932 double quotes as the outside quotes, as in **"some 'bc' file.bc"**, and vice 933 versa if you have a file with double quotes. However, handling a file with 934 both kinds of quotes in **BC_ENV_ARGS** is not supported due to the 935 complexity of the parsing, though such files are still supported on the 936 command-line where the parsing is done by the shell. 937 938**BC_LINE_LENGTH** 939 940: If this environment variable exists and contains an integer that is greater 941 than **1** and is less than **UINT16_MAX** (**2\^16-1**), bc(1) will output 942 lines to that length, including the backslash (**\\**). The default line 943 length is **70**. 944 945# EXIT STATUS 946 947bc(1) returns the following exit statuses: 948 949**0** 950 951: No error. 952 953**1** 954 955: A math error occurred. This follows standard practice of using **1** for 956 expected errors, since math errors will happen in the process of normal 957 execution. 958 959 Math errors include divide by **0**, taking the square root of a negative 960 number, attempting to convert a negative number to a hardware integer, 961 overflow when converting a number to a hardware integer, and attempting to 962 use a non-integer where an integer is required. 963 964 Converting to a hardware integer happens for the second operand of the power 965 (**\^**) operator and the corresponding assignment operator. 966 967**2** 968 969: A parse error occurred. 970 971 Parse errors include unexpected **EOF**, using an invalid character, failing 972 to find the end of a string or comment, using a token where it is invalid, 973 giving an invalid expression, giving an invalid print statement, giving an 974 invalid function definition, attempting to assign to an expression that is 975 not a named expression (see the *Named Expressions* subsection of the 976 **SYNTAX** section), giving an invalid **auto** list, having a duplicate 977 **auto**/function parameter, failing to find the end of a code block, 978 attempting to return a value from a **void** function, attempting to use a 979 variable as a reference, and using any extensions when the option **-s** or 980 any equivalents were given. 981 982**3** 983 984: A runtime error occurred. 985 986 Runtime errors include assigning an invalid number to **ibase**, **obase**, 987 or **scale**; give a bad expression to a **read()** call, calling **read()** 988 inside of a **read()** call, type errors, passing the wrong number of 989 arguments to functions, attempting to call an undefined function, and 990 attempting to use a **void** function call as a value in an expression. 991 992**4** 993 994: A fatal error occurred. 995 996 Fatal errors include memory allocation errors, I/O errors, failing to open 997 files, attempting to use files that do not have only ASCII characters (bc(1) 998 only accepts ASCII characters), attempting to open a directory as a file, 999 and giving invalid command-line options. 1000 1001The exit status **4** is special; when a fatal error occurs, bc(1) always exits 1002and returns **4**, no matter what mode bc(1) is in. 1003 1004The other statuses will only be returned when bc(1) is not in interactive mode 1005(see the **INTERACTIVE MODE** section), since bc(1) resets its state (see the 1006**RESET** section) and accepts more input when one of those errors occurs in 1007interactive mode. This is also the case when interactive mode is forced by the 1008**-i** flag or **-\-interactive** option. 1009 1010These exit statuses allow bc(1) to be used in shell scripting with error 1011checking, and its normal behavior can be forced by using the **-i** flag or 1012**-\-interactive** option. 1013 1014# INTERACTIVE MODE 1015 1016Per the [standard][1], bc(1) has an interactive mode and a non-interactive mode. 1017Interactive mode is turned on automatically when both **stdin** and **stdout** 1018are hooked to a terminal, but the **-i** flag and **-\-interactive** option can 1019turn it on in other cases. 1020 1021In interactive mode, bc(1) attempts to recover from errors (see the **RESET** 1022section), and in normal execution, flushes **stdout** as soon as execution is 1023done for the current input. 1024 1025# TTY MODE 1026 1027If **stdin**, **stdout**, and **stderr** are all connected to a TTY, bc(1) turns 1028on "TTY mode." 1029 1030TTY mode is required for history to be enabled (see the **COMMAND LINE HISTORY** 1031section). It is also required to enable special handling for **SIGINT** signals. 1032 1033The prompt is enabled in TTY mode. 1034 1035TTY mode is different from interactive mode because interactive mode is required 1036in the [bc(1) specification][1], and interactive mode requires only **stdin** 1037and **stdout** to be connected to a terminal. 1038 1039# SIGNAL HANDLING 1040 1041Sending a **SIGINT** will cause bc(1) to stop execution of the current input. If 1042bc(1) is in TTY mode (see the **TTY MODE** section), it will reset (see the 1043**RESET** section). Otherwise, it will clean up and exit. 1044 1045Note that "current input" can mean one of two things. If bc(1) is processing 1046input from **stdin** in TTY mode, it will ask for more input. If bc(1) is 1047processing input from a file in TTY mode, it will stop processing the file and 1048start processing the next file, if one exists, or ask for input from **stdin** 1049if no other file exists. 1050 1051This means that if a **SIGINT** is sent to bc(1) as it is executing a file, it 1052can seem as though bc(1) did not respond to the signal since it will immediately 1053start executing the next file. This is by design; most files that users execute 1054when interacting with bc(1) have function definitions, which are quick to parse. 1055If a file takes a long time to execute, there may be a bug in that file. The 1056rest of the files could still be executed without problem, allowing the user to 1057continue. 1058 1059**SIGTERM** and **SIGQUIT** cause bc(1) to clean up and exit, and it uses the 1060default handler for all other signals. The one exception is **SIGHUP**; in that 1061case, when bc(1) is in TTY mode, a **SIGHUP** will cause bc(1) to clean up and 1062exit. 1063 1064# COMMAND LINE HISTORY 1065 1066bc(1) supports interactive command-line editing. If bc(1) is in TTY mode (see 1067the **TTY MODE** section), history is enabled. Previous lines can be recalled 1068and edited with the arrow keys. 1069 1070**Note**: tabs are converted to 8 spaces. 1071 1072# LOCALES 1073 1074This bc(1) ships with support for adding error messages for different locales 1075and thus, supports **LC_MESSAGES**. 1076 1077# SEE ALSO 1078 1079dc(1) 1080 1081# STANDARDS 1082 1083bc(1) is compliant with the [IEEE Std 1003.1-2017 (“POSIX.1-2017”)][1] 1084specification. The flags **-efghiqsvVw**, all long options, and the extensions 1085noted above are extensions to that specification. 1086 1087Note that the specification explicitly says that bc(1) only accepts numbers that 1088use a period (**.**) as a radix point, regardless of the value of 1089**LC_NUMERIC**. 1090 1091This bc(1) supports error messages for different locales, and thus, it supports 1092**LC_MESSAGES**. 1093 1094# BUGS 1095 1096None are known. Report bugs at https://git.yzena.com/gavin/bc. 1097 1098# AUTHORS 1099 1100Gavin D. Howard <gavin@yzena.com> and contributors. 1101 1102[1]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html 1103[2]: https://www.gnu.org/software/bc/ 1104[3]: https://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero 1105[4]: https://en.wikipedia.org/wiki/Unit_in_the_last_place 1106[5]: https://people.eecs.berkeley.edu/~wkahan/LOG10HAF.TXT 1107[6]: https://en.wikipedia.org/wiki/Rounding#Rounding_away_from_zero 1108