Module Name:    src
Committed By:   wiz
Date:           Mon Apr 17 14:01:19 UTC 2017

Modified Files:
        src/external/bsd/bc/dist: bc.1

Log Message:
Convert bc(1) to mdoc.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/external/bsd/bc/dist/bc.1

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/bsd/bc/dist/bc.1
diff -u src/external/bsd/bc/dist/bc.1:1.1 src/external/bsd/bc/dist/bc.1:1.2
--- src/external/bsd/bc/dist/bc.1:1.1	Mon Apr 10 02:28:23 2017
+++ src/external/bsd/bc/dist/bc.1	Mon Apr 17 14:01:19 2017
@@ -1,9 +1,10 @@
-.\" $NetBSD: bc.1,v 1.1 2017/04/10 02:28:23 phil Exp $
+.\" $NetBSD: bc.1,v 1.2 2017/04/17 14:01:19 wiz Exp $
 .\"
-.\" bc.1 - the *roff document processor source for the bc manual
+.\" bc.1 - the bc manual
 .\"
 .\" Copyright (C) 1991-1994, 1997, 2000, 2003, 2012-2017 Free Software Foundation, Inc.
 .\" Copyright (C) 2004, 2017 Philip A. Nelson
+.\" Copyright (C) 2017 Thomas Klausner
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -32,480 +33,816 @@
 .\"
 .\"
 .\"
-.TH bc 1 .\" "Command Manual" nb1.0 "Jan 23, 2017"
-.SH NAME
-bc - An arbitrary precision calculator language
-.SH SYNTAX
-\fBbc\fR [ \fB-hlwsqv\fR ] [long-options] [ \fI file ...\fR ]
-.SH VERSION
-This man page documents bc version nb1.0.
-.SH DESCRIPTION
-\fBbc\fR is a language that supports arbitrary precision numbers
-with interactive execution of statements.  There are some similarities
-in the syntax to the C programming language. 
+.Dd April 16, 2017
+.Dt BC 1
+.Os
+.Sh NAME
+.Nm bc
+.Nd arbitrary precision calculator language
+.Sh SYNOPSIS
+.Nm
+.Op Fl hilqsvw
+.Op long-options
+.Op Ar
+.Sh DESCRIPTION
+.Nm
+is a language that supports arbitrary precision numbers
+with interactive execution of statements.
+There are some similarities
+in the syntax to the C programming language.
 A standard math library is available by command line option.
 If requested, the math library is defined before processing any files.
-\fBbc\fR starts by processing code from all the files listed
-on the command line in the order listed.  After all files have been
-processed, \fBbc\fR reads from the standard input.  All code is
-executed as it is read.  (If a file contains a command to halt the
-processor, \fBbc\fR will never read from the standard input.)
-.PP
-This version of \fBbc\fR contains several extensions beyond
-traditional \fBbc\fR implementations and the POSIX draft standard.
-Command line options can cause these extensions to print a warning 
-or to be rejected.  This 
-document describes the language accepted by this processor.
+.Nm
+starts by processing code from all the files listed
+on the command line in the order listed.
+After all files have been processed,
+.Nm
+reads from the standard input.
+All code is executed as it is read.
+(If a file contains a command to halt the processor,
+.Nm
+will never read from the standard input.)
+.Pp
+This version of
+.Nm
+contains several extensions beyond traditional
+.Nm
+implementations and the POSIX draft standard.
+Command line options can cause these extensions to print a warning
+or to be rejected.
+This document describes the language accepted by this processor.
 Extensions will be identified as such.
-.SS OPTIONS
-.IP "-h, --help"
+.Ss OPTIONS
+.Bl -tag -width "XXinteractiveXXXXXX"
+.It Fl h , Fl Fl help
 Print the usage and exit.
-.IP "-i, --interactive"
+.It Fl i , Fl Fl interactive
 Force interactive mode.
-.IP "-l, --mathlib"
+.It Fl l , Fl Fl mathlib
 Define the standard math library.
-.IP "-w, --warn"
-Give warnings for extensions to POSIX \fBbc\fR.
-.IP "-s, --standard"
-Process exactly the POSIX \fBbc\fR language.
-.IP "-v, --version"
+.It Fl q , Fl Fl quiet
+Quiet mode.
+.It Fl s , Fl Fl standard
+Process exactly the POSIX
+.Nm
+language.
+.It Fl v , Fl Fl version
 Print the version number and copyright and quit.
-.SS NUMBERS
-The most basic element in \fBbc\fR is the number.  Numbers are
-arbitrary precision numbers.  This precision is both in the integer
-part and the fractional part.  All numbers are represented internally
-in decimal and all computation is done in decimal.  (This version
-truncates results from divide and multiply operations.)  There are two
-attributes of numbers, the length and the scale.  The length is the
+.It Fl w , Fl Fl warn
+Give warnings for extensions to POSIX
+.Nm .
+.El
+.Ss NUMBERS
+The most basic element in
+.Nm
+is the number.
+Numbers are arbitrary precision numbers.
+This precision is both in the integer
+part and the fractional part.
+All numbers are represented internally
+in decimal and all computation is done in decimal.
+(This version of
+.Nm
+truncates results from divide and multiply operations.)
+There are two attributes of numbers, the length and the scale.
+The length is the
 total number of significant decimal digits in a number and the scale
-is the total number of decimal digits after the decimal point.  For
-example:
-.nf
-.RS
+is the total number of decimal digits after the decimal point.
+For example:
+.Bd -literal
  .000001 has a length of 6 and scale of 6.
  1935.000 has a length of 7 and a scale of 3.
-.RE
-.fi
-.SS VARIABLES
+.Ed
+.Ss VARIABLES
 Numbers are stored in two types of variables, simple variables and
-arrays.  Both simple variables and array variables are named.  Names
-begin with a letter followed by any number of letters, digits and
-underscores.  All letters must be lower case.  (Full alpha-numeric
-names are an extension. In POSIX \fBbc\fR all names are a single
-lower case letter.)  The type of variable is clear by the context
+arrays.
+Both simple variables and array variables are named.
+Names begin with a letter followed by any number of letters, digits and
+underscores.
+All letters must be lower case.
+(Full alpha-numeric names are an extension.
+In POSIX
+.Nm
+all names are a single lower case letter.)
+The type of variable is clear by the context
 because all array variable names will be followed by brackets ([]).
-.PP
-There are four special variables, \fBscale, ibase, obase,\fR and
-\fBlast\fR.  \fBscale\fR defines how some operations use digits after the
-decimal point.  The default value of \fBscale\fR is 0. \fBibase\fR
-and \fBobase\fR define the conversion base for input and output
-numbers.  The default for both input and output is base 10.
-\fBlast\fR (an extension) is a variable that has the value of the last
-printed number.  These will be discussed in further detail where
-appropriate.  All of these variables may have values assigned to them
+.Pp
+There are four special variables,
+.Ic scale ,
+.Ic ibase ,
+.Ic obase ,
+and
+.Ic last .
+.Ic scale
+defines how some operations use digits after the decimal point.
+The default value of
+.Ic scale
+is 0.
+.Ic ibase
+and
+.Ic obase
+define the conversion base for input and output numbers.
+The default for both input and output is base 10.
+.Ic last
+(an extension) is a variable that has the value of the last
+printed number.
+These will be discussed in further detail where appropriate.
+All of these variables may have values assigned to them
 as well as used in expressions.
-.SS COMMENTS
-Comments in \fBbc\fR start with the characters \fB/*\fR and end with
-the characters \fB*/\fR.  Comments may start anywhere and appear as a
-single space in the input.  (This causes comments to delimit other
-input items.  For example, a comment can not be found in the middle of
-a variable name.)  Comments include any newlines (end of line) between
+.Ss COMMENTS
+Comments in
+.Nm
+start with the characters
+.Dq Ic /*
+and end with the characters
+.Dq Ic */ .
+Comments may start anywhere and appear as a single space in the input.
+(This causes comments to delimit other input items.
+For example, a comment can not be found in the middle of
+a variable name.)
+Comments include any newlines (end of line) between
 the start and the end of the comment.
-.PP
-To support the use of scripts for \fBbc\fR, a single line comment has been
-added as an extension.  A single line comment starts at a \fB#\fR
-character and continues to the next end of the line.  The end of line
+.Pp
+To support the use of scripts for
+.Nm ,
+a single line comment has been added as an extension.
+A single line comment starts at a
+.Dq Ic #
+character and continues to the next end of the line.
+The end of line
 character is not part of the comment and is processed normally.
-.SS EXPRESSIONS
-The numbers are manipulated by expressions and statements.  Since
-the language was designed to be interactive, statements and expressions
-are executed as soon as possible.  There is no "main" program.  Instead,
-code is executed as it is encountered.  (Functions, discussed in
+.Ss EXPRESSIONS
+The numbers are manipulated by expressions and statements.
+Since the language was designed to be interactive, statements and expressions
+are executed as soon as possible.
+There is no
+.Dq main
+program.
+Instead, code is executed as it is encountered.
+(Functions, discussed in
 detail later, are defined when encountered.)
-.PP
-A simple expression is just a constant. \fBbc\fR converts constants
+.Pp
+A simple expression is just a constant.
+.Nm
+converts constants
 into internal decimal numbers using the current input base, specified
-by the variable \fBibase\fR. (There is an exception in functions.)
-The legal values of \fBibase\fR are 2 through 36.  (Base values
-greater than 16 are an extension.) Assigning a value outside this
-range to \fBibase\fR will result in a value of 2 or 36.  Input numbers
-may contain the characters 0-9 and A-Z. (Note: They must be capitals.
-Lower case letters are variable names.)  Single digit numbers always
+by the variable
+.Ic ibase .
+(There is an exception in functions.)
+The legal values of
+.Ic ibase
+are 2 through 36.
+(Base values greater than 16 are an extension.)
+Assigning a value outside this range to
+.Ic ibase
+will result in a value of 2 or 36.
+Input numbers may contain the characters 0-9 and A-Z.
+(Note: They must be capitals.
+Lower case letters are variable names.)
+Single digit numbers always
 have the value of the digit regardless of the value of
-\fBibase\fR. (i.e. A = 10.)  For multi-digit numbers, \fBbc\fR changes
-all input digits greater or equal to ibase to the value of
-\fBibase\fR-1.  This makes the number \fBZZZ\fR always be the largest
-3 digit number of the input base.
-.PP
+.Ic ibase .
+(i.e. A = 10.)
+For multi-digit numbers,
+.Nm
+changes all input digits greater or equal to ibase to the value of
+.Ic ibase - 1 .
+This makes the number
+.Dq ZZZ
+always be the largest 3 digit number of the input base.
+.Pp
 Full expressions are similar to many other high level languages.
 Since there is only one kind of number, there are no rules for mixing
-types.  Instead, there are rules on the scale of expressions.  Every
-expression has a scale.  This is derived from the scale of original
+types.
+Instead, there are rules on the scale of expressions.
+Every expression has a scale.
+This is derived from the scale of original
 numbers, the operation performed and in many cases, the value of the
-variable \fBscale\fR. Legal values of the variable \fBscale\fR are
-0 to the maximum number representable by a C integer.
-.PP
-In the following descriptions of legal expressions, "expr" refers to a
-complete expression and "var" refers to a simple or an array variable.
+variable
+.Ic scale .
+Legal values of the variable
+.Ic scale
+are 0 to the maximum number representable by a C integer.
+.Pp
+In the following descriptions of legal expressions,
+.Dq expr
+refers to a complete expression and
+.Dq var
+refers to a simple or an array variable.
 A simple variable is just a
-.RS
-\fIname\fR
-.RE
+.Ic name
 and an array variable is specified as
-.RS
-\fIname\fR[\fIexpr\fR]
-.RE
-Unless specifically
-mentioned the scale of the result is the maximum scale of the
+.Ic name[expr] .
+Unless specifically mentioned the scale of the result is the maximum scale of the
 expressions involved.
-.IP "- expr"
+.Bl -tag -width 15n
+.It Ic "- expr"
 The result is the negation of the expression.
-.IP "++ var"
+.It Ic "++ var"
 The variable is incremented by one and the new value is the result of
 the expression.
-.IP "-- var"
-The variable
-is decremented by one and the new value is the result of the
+.It Ic "-- var"
+The variable is decremented by one and the new value is the result of the
 expression.
-.IP "var ++"
- The result of the expression is the value of
+.It Ic "var ++"
+The result of the expression is the value of
 the variable and then the variable is incremented by one.
-.IP "var --"
+.It Ic "var --"
 The result of the expression is the value of the variable and then
 the variable is decremented by one.
-.IP "expr + expr"
+.It Ic "expr + expr"
 The result of the expression is the sum of the two expressions.
-.IP "expr - expr"
+.It Ic "expr - expr"
 The result of the expression is the difference of the two expressions.
-.IP "expr * expr"
+.It Ic "expr * expr"
 The result of the expression is the product of the two expressions.
-.IP "expr / expr"
+.It Ic "expr / expr"
 The result of the expression is the quotient of the two expressions.
 The scale of the result is the value of the variable \fBscale\fR.
-.IP "expr % expr"
-The result of the expression is the "remainder" and it is computed in the
-following way.  To compute a%b, first a/b is computed to \fBscale\fR
-digits.  That result is used to compute a-(a/b)*b to the scale of the
-maximum of \fBscale\fR+scale(b) and scale(a).  If \fBscale\fR is set
-to zero and both expressions are integers this expression is the
+.It Ic "expr % expr"
+The result of the expression is the remainder and it is computed in the
+following way:
+To compute a%b, first a/b is computed to
+.Ic scale
+digits.
+That result is used to compute a-(a/b)*b to the scale of the
+maximum of
+.Ic scale +
+scale(b) and scale(a).
+If
+.Ic scale
+is set to zero and both expressions are integers this expression is the
 integer remainder function.
-.IP "expr ^ expr"
+.It Ic "expr ^ expr"
 The result of the expression is the value of the first raised to the
-second. The second expression must be an integer.  (If the second
-expression is not an integer, a warning is generated and the
-expression is truncated to get an integer value.)  The scale of the
-result is \fBscale\fR if the exponent is negative.  If the exponent
-is positive the scale of the result is the minimum of the scale of the
-first expression times the value of the exponent and the maximum of
-\fBscale\fR and the scale of the first expression.  (e.g. scale(a^b)
-= min(scale(a)*b, max( \fBscale,\fR scale(a))).)  It should be noted
+second.
+The second expression must be an integer.
+(If the second expression is not an integer, a warning is generated and the
+expression is truncated to get an integer value.)
+The scale of the result is
+.Ic scale
+if the exponent is negative.
+If the exponent is positive, the scale of the result is the minimum of
+the scale of the first expression times the value of the exponent and
+the maximum of
+.Ic scale
+and the scale of the first expression.
+(e.g. scale(a^b) = min(scale(a)*b, max(
+.Ic scale ,
+scale(a))).)
+It should be noted
 that expr^0 will always return the value of 1.
-.IP "( expr )"
+.It Ic "( expr )"
 This alters the standard precedence to force the evaluation of the
 expression.
-.IP "var = expr"
+.It Ic "var = expr"
 The variable is assigned the value of the expression.
-.IP "var <op>= expr"
-This is equivalent to "var = var <op> expr" with the exception that
-the "var" part is evaluated only once.  This can make a difference if
-"var" is an array.
-.PP
- Relational expressions are a special kind of expression
+.It Ic "var <op>= expr"
+This is equivalent to
+.Ic "var = var <op> expr"
+with the exception that the
+.Dq Ic var
+part is evaluated only once.
+This can make a difference if
+.Dq Ic var
+is an array.
+.El
+.Pp
+Relational expressions are a special kind of expression
 that always evaluate to 0 or 1, 0 if the relation is false and 1 if
-the relation is true.  These may appear in any legal expression.
-(POSIX bc requires that relational expressions are used only in if,
-while, and for statements and that only one relational test may be
-done in them.)  The relational operators are
-.IP "expr1 < expr2"
+the relation is true.
+These may appear in any legal expression.
+(POSIX
+.Nm
+requires that relational expressions are used only in
+.Ic if ,
+.Ic while ,
+and
+.Ic for
+statements and that only one relational test may be
+done in them.)
+The relational operators are:
+.Bl -tag -width 15n
+.It Ic "expr1 < expr2"
 The result is 1 if expr1 is strictly less than expr2.
-.IP "expr1 <= expr2"
+.It Ic "expr1 <= expr2"
 The result is 1 if expr1 is less than or equal to expr2.
-.IP "expr1 > expr2"
+.It Ic "expr1 > expr2"
 The result is 1 if expr1 is strictly greater than expr2.
-.IP "expr1 >= expr2"
+.It Ic "expr1 >= expr2"
 The result is 1 if expr1 is greater than or equal to expr2.
-.IP "expr1 == expr2"
+.It Ic "expr1 == expr2"
 The result is 1 if expr1 is equal to expr2.
-.IP "expr1 != expr2"
+.It Ic "expr1 != expr2"
 The result is 1 if expr1 is not equal to expr2.
-.PP
-Boolean operations are also legal.  (POSIX \fBbc\fR does NOT have
-boolean operations). The result of all boolean operations are 0 and 1
-(for false and true) as in relational expressions.  The boolean
+.El
+.Pp
+Boolean operations are also legal.
+(POSIX
+.Nm
+does
+.Em NOT
+have boolean operations.)
+The result of all boolean operations are 0 and 1
+(for false and true) as in relational expressions.
+The boolean
 operators are:
-.IP "!expr"
+.Bl -tag -width 15n
+.It Ic "!expr"
 The result is 1 if expr is 0.
-.IP "expr && expr"
+.It Ic "expr && expr"
 The result is 1 if both expressions are non-zero.
-.IP "expr || expr"
+.It Ic "expr || expr"
 The result is 1 if either expression is non-zero.
-.PP
+.El
+.Pp
 The expression precedence is as follows: (lowest to highest)
-.nf
-.RS
+.Bl -enum -offset indent
+.It
 || operator, left associative
+.It
 && operator, left associative
+.It
 ! operator, nonassociative
+.It
 Relational operators, left associative
+.It
 Assignment operator, right associative
+.It
 + and - operators, left associative
+.It
 *, / and % operators, left associative
+.It
 ^ operator, right associative
+.It
 unary - operator, nonassociative
+.It
 ++ and -- operators, nonassociative
-.RE
-.fi
-.PP
-This precedence was chosen so that POSIX compliant \fBbc\fR programs
-will run correctly. This will cause the use of the relational and
-logical operators to have some unusual behavior when used with
-assignment expressions.  Consider the expression:
-.RS
-a = 3 < 5
-.RE
-.PP
-Most C programmers would assume this would assign the result of "3 <
-5" (the value 1) to the variable "a".  What this does in \fBbc\fR is
-assign the value 3 to the variable "a" and then compare 3 to 5.  It is
-best to use parenthesis when using relational and logical operators
+.El
+.Pp
+This precedence was chosen so that POSIX compliant
+.Nm
+programs will run correctly.
+This will cause the use of the relational and logical operators to
+have some unusual behavior when used with assignment expressions.
+Consider the expression:
+.Dl Ic a = 3 < 5
+.Pp
+Most C programmers would assume this would assign the result of
+.Dq Ic 3 < 5
+(the value 1) to the variable
+.Dq Ic a .
+What this does in
+.Nm
+is assign the value 3 to the variable
+.Dq Ic a
+and then compare 3 to 5.
+It is best to use parenthesis when using relational and logical operators
 with the assignment operators.
-.PP
-There are a few more special expressions that are provided in \fBbc\fR.
-These have to do with user defined functions and standard
-functions.  They all appear as "\fIname\fB(\fIparameters\fB)\fR".
-See the section on functions for user defined functions.  The standard
-functions are:
-.IP "length ( expression )"
+.Pp
+There are a few more special expressions that are provided in
+.Nm .
+These have to do with user defined functions and standard functions.
+They all appear as
+.Do Ar name ( Ar parameters ) Dc .
+See the section on functions for user defined functions.
+The standard functions are:
+.Bl -tag -width 20n
+.It Ic length ( Ar expression )
 The value of the length function is the number of significant digits in the
 expression.
-.IP "read ( )"
+.It Ic read ( )
 The read function (an extension) will read a number from the standard
-input, regardless of where the function occurs.   Beware, this can
-cause problems with the mixing of data and program in the standard input.
+input, regardless of where the function occurs.
+Beware, this can cause problems with the mixing of data and program in
+the standard input.
 The best use for this function is in a previously written program that
 needs input from the user, but never allows program code to be input
-from the user.  The value of the read function is the number read from
-the standard input using the current value of the variable 
-\fBibase\fR for the conversion base.
-.IP "scale ( expression )"
+from the user.
+The value of the read function is the number read from
+the standard input using the current value of the variable
+.Ic ibase
+for the conversion base.
+.It Ic scale ( Ar expression )
 The value of the scale function is the number of digits after the decimal
 point in the expression.
-.IP "sqrt ( expression )"
-The value of the sqrt function is the square root of the expression.  If
+.It Ic sqrt ( Ar expression )
+The value of the sqrt function is the square root of the expression.
+If
 the expression is negative, a run time error is generated.
-.SS STATEMENTS
+.El
+.Ss STATEMENTS
 Statements (as in most algebraic languages) provide the sequencing of
-expression evaluation.  In \fBbc\fR statements are executed "as soon
-as possible."  Execution happens when a newline in encountered and
-there is one or more complete statements.  Due to this immediate
-execution, newlines are very important in \fBbc\fR. In fact, both a
-semicolon and a newline are used as statement separators.  An
-improperly placed newline will cause a syntax error.  Because newlines
+expression evaluation.
+In
+.Nm
+statements are executed
+.Dq as soon as possible .
+Execution happens when a newline in encountered and
+there is one or more complete statements.
+Due to this immediate
+execution, newlines are very important in
+.Nm .
+In fact, both a
+semicolon and a newline are used as statement separators.
+An improperly placed newline will cause a syntax error.
+Because newlines
 are statement separators, it is possible to hide a newline by using
-the backslash character.  The sequence "\e<nl>", where <nl> is the
-newline appears to \fBbc\fR as whitespace instead of a newline.  A
-statement list is a series of statements separated by semicolons and
-newlines.  The following is a list of \fBbc\fR statements and what
-they do: (Things enclosed in brackets ([]) are optional parts of the
+the backslash character.
+The sequence
+.Dq Ic \e<nl> ,
+where <nl> is the newline appears to
+.Nm
+as whitespace instead of a newline.
+A statement list is a series of statements separated by semicolons and
+newlines.
+The following is a list of
+.Nm
+statements and what they do:
+(Things enclosed in brackets ([]) are optional parts of the
 statement.)
-.IP "expression"
-This statement does one of two things.  If the expression starts with
-"<variable> <assignment> ...", it is considered to be an assignment
-statement.  If the expression is not an assignment statement, the
-expression is evaluated and printed to the output.  After the number
-is printed, a newline is printed.  For example, "a=1" is an assignment
-statement and "(a=1)" is an expression that has an embedded
-assignment.  All numbers that are printed are printed in the base
-specified by the variable \fBobase\fR. The legal values for \fB
-obase\fR are 2 through BC_BASE_MAX.  (See the section LIMITS.)  For
-bases 2 through 16, the usual method of writing numbers is used.  For
-bases greater than 16, \fBbc\fR uses a multi-character digit method
-of printing the numbers where each higher base digit is printed as a
-base 10 number.  The multi-character digits are separated by spaces.
+.Bl -tag -width 15n
+.It Ar expression
+This statement does one of two things.
+If the expression starts with
+.Ao Ar variable Ac Ao Ar assignment Ac ... ,
+it is considered to be an assignment statement.
+If the expression is not an assignment statement, the
+expression is evaluated and printed to the output.
+After the number is printed, a newline is printed.
+For example,
+.Dq Ic a=1
+is an assignment statement and
+.Do Ic ( a=1 ) Dc
+is an expression that has an embedded assignment.
+All numbers that are printed are printed in the base
+specified by the variable
+.Ic obase .
+The legal values for
+.Ic obase
+are 2 through
+.Dv BC_BASE_MAX .
+(See the section
+.Sx LIMITS . )
+For bases 2 through 16, the usual method of writing numbers is used.
+For bases greater than 16,
+.Nm
+uses a multi-character digit method of printing the numbers where each
+higher base digit is printed as a base 10 number.
+The multi-character digits are separated by spaces.
 Each digit contains the number of characters required to represent the
-base ten value of "obase-1".  Since numbers are of arbitrary
+base ten value of
+.Dq Ic obase-1 .
+Since numbers are of arbitrary
 precision, some numbers may not be printable on a single output line.
-These long numbers will be split across lines using the "\e" as the
-last character on a line.  The maximum number of characters printed
-per line is 70.  Due to the interactive nature of \fBbc\fR, printing
-a number causes the side effect of assigning the printed value to the
-special variable \fBlast\fR. This allows the user to recover the
-last value printed without having to retype the expression that
-printed the number.  Assigning to \fBlast\fR is legal and will
-overwrite the last printed value with the assigned value.  The newly
-assigned value will remain until the next number is printed or another
-value is assigned to \fBlast\fR.  (Some installations may allow the 
+These long numbers will be split across lines using the
+.Dq \e
+as the last character on a line.
+The maximum number of characters printed
+per line is 70.
+Due to the interactive nature of
+.Nm bc ,
+printing a number causes the side effect of assigning the printed value to the
+special variable
+.Ic last .
+This allows the user to recover the last value printed without having
+to retype the expression that printed the number.
+Assigning to
+.Ic last
+is legal and will
+overwrite the last printed value with the assigned value.
+The newly assigned value will remain until the next number is printed
+or another value is assigned to
+.Ic last .
+(Some installations may allow the
 use of a single period (.) which is not part of a number as a short
-hand notation for for \fBlast\fR.)
-.IP "string"
-The string is printed to the output.  Strings start with a double quote
+hand notation for
+.Ic last . )
+.It Ar "string"
+The
+.Ar string
+is printed to the output.
+Strings start with a double quote
 character and contain all characters until the next double quote character.
-All characters are take literally, including any newline.  No newline
-character is printed after the string.
-.IP "\fBprint\fR list"
-The print statement (an extension) provides another method of output.
-The "list" is a list of strings and expressions separated by commas.
-Each string or expression is printed in the order of the list.  No
-terminating newline is printed.  Expressions are evaluated and their
-value is printed and assigned to the variable \fBlast\fR. Strings
-in the print statement are printed to the output and may contain
-special characters.  Special characters start with the backslash
-character (\e).  The special characters recognized by \fBbc\fR are
-"a" (alert or bell), "b" (backspace), "f" (form feed), "n" (newline),
-"r" (carriage return), "q" (double quote), "t" (tab), and "\e" (backslash).
-Any other character following the backslash will be ignored.  
-.IP "{ statement_list }"
-This is the compound statement.  It allows multiple statements to be
-grouped together for execution.
-.IP "\fBif\fR ( expression ) statement1 [\fBelse\fR statement2]"
-The if statement evaluates the expression and executes statement1 or
-statement2 depending on the value of the expression.  If the expression
-is non-zero, statement1 is executed.  If statement2 is present and
-the value of the expression is 0, then statement2 is executed.  (The
-else clause is an extension.)
-.IP "\fBwhile\fR ( expression ) statement"
-The while statement will execute the statement while the expression
-is non-zero.  It evaluates the expression before each execution of
-the statement.   Termination of the loop is caused by a zero
-expression value or the execution of a break statement.
-.IP "\fBfor\fR ( [expression1] ; [expression2] ; [expression3] ) statement"
-The for statement controls repeated execution of the statement.  
-Expression1 is evaluated before the loop.  Expression2 is evaluated
-before each execution of the statement.  If it is non-zero, the statement
-is evaluated.  If it is zero, the loop is terminated.  After each
-execution of the statement, expression3 is evaluated before the reevaluation
-of expression2.  If expression1 or expression3 are missing, nothing is
-evaluated at the point they would be evaluated.
-If expression2 is missing, it is the same as substituting
-the value 1 for expression2.  (The optional expressions are an
-extension. POSIX \fBbc\fR requires all three expressions.)
-The following is equivalent code for the for statement:
-.nf
-.RS
+All characters are take literally, including any newline.
+No newline character is printed after the string.
+.It Ic  print Ar list
+The
+.Ic print
+statement (an extension) provides another method of output.
+The
+.Ar list
+is a list of strings and expressions separated by commas.
+Each string or expression is printed in the order of the list.
+No terminating newline is printed.
+Expressions are evaluated and their
+value is printed and assigned to the variable
+.Ic last .
+Strings in the
+.Ic print
+statement are printed to the output and may contain special characters.
+Special characters start with the backslash character (\e).
+The special characters recognized by
+.Nm
+are
+.Sq a
+(alert or bell),
+.Sq b
+(backspace),
+.Sq f
+(form feed),
+.Sq n
+(newline),
+.Sq r
+(carriage return),
+.Sq q
+(double quote),
+.Sq t
+(tab), and
+.Sq \e
+(backslash).
+Any other character following the backslash will be ignored.
+.It { Ar statement_list }
+This is the compound statement.
+It allows multiple statements to be grouped together for execution.
+.It Ic if ( Ar expression ) Ar statement1 [ Ic else Ar statement2 ]
+The
+.Ic if
+statement evaluates the
+.Ar expression
+and executes
+.Ar statement1
+or
+.Ar statement2
+depending on the value of the
+.Ar expression .
+If the
+.Ar expression
+is non-zero,
+.Ar statement1
+is executed.
+If
+.Ar statement2
+is present and the value of the
+.Ar expression
+is 0, then
+.Ar statement2
+is executed.
+(The
+.Ic else
+clause is an extension.)
+.It Ic while ( Ar expression ) Ar statement
+The
+.Ic while
+statement will execute the
+.Ar statement
+while the
+.Ar expression
+is non-zero.
+It evaluates the
+.Ar expression
+before each execution of the
+.Ar statement .
+Termination of the loop is caused by a zero
+.Ar expression
+value or the execution of a
+.Ic break
+statement.
+.It Ic for ( [ Ar expression1 ] ; [ Ar expression2 ] ; [ Ar expression3 ] ) Ar statement
+The
+.Ic for
+statement controls repeated execution of the
+.Ar statement .
+.Ar Expression1
+is evaluated before the loop.
+.Ar Expression2
+is evaluated
+before each execution of the
+.Ar statement .
+If it is non-zero, the
+.Ar statement
+is evaluated.
+If it is zero, the loop is terminated.
+After each execution of the statement,
+.Ar expression3
+is evaluated before the reevaluation of
+.Ar expression2 .
+If
+.Ar expression1
+or
+.Ar expression3
+are missing, nothing is evaluated at the point they would be evaluated.
+If
+.Ar expression2
+is missing, it is the same as substituting the value 1 for
+.Ar expression2 .
+(The optional expressions are an
+extension.
+POSIX
+.Nm
+requires all three expressions.)
+The following is equivalent code for the
+.Ic for
+statement:
+.Bd -literal
 expression1;
 while (expression2) {
    statement;
    expression3;
 }
-.RE
-.fi
-.IP "\fBbreak\fR"
-This statement causes a forced exit of the most recent enclosing while
-statement or for statement.
-.IP "\fBcontinue\fR"
-The continue statement (an extension)  causes the most recent enclosing
-for statement to start the next iteration.
-.IP "\fBhalt\fR"
-The halt statement (an extension) is an executed statement that causes
-the \fBbc\fR processor to quit only when it is executed.  For example,
-"if (0 == 1) halt" will not cause \fBbc\fR to terminate because the halt is
-not executed.
-.IP "\fBreturn\fR"
-Return the value 0 from a function.  (See the section on functions.)
-.IP "\fBreturn\fR ( expression )"
-Return the value of the expression from a function.  (See the section on 
-functions.)  As an extension, the parenthesis are not required.
-.SS PSEUDO STATEMENTS
-These statements are not statements in the traditional sense.  They are
-not executed statements.  Their function is performed at "compile" time.
-.IP "\fBlimits\fR"
-Print the local limits enforced by the local version of \fBbc\fR.  This
-is an extension.
-.IP "\fBquit\fR"
-When the quit statement is read, the \fBbc\fR processor
-is terminated, regardless of where the quit statement is found.  For
-example, "if (0 == 1) quit" will cause \fBbc\fR to terminate.
-.IP "\fBwarranty\fR"
-Print a longer warranty notice.  This is an extension.
-.SS FUNCTIONS
+.Ed
+.It Ic break
+This statement causes a forced exit of the most recent enclosing
+.Ic while
+statement or
+.Ic for
+statement.
+.It Ic continue
+The
+.Ic continue
+statement (an extension) causes the most recent enclosing
+.Ic for
+statement to start the next iteration.
+.It Ic halt
+The
+.Ic halt
+statement (an extension) is an executed statement that causes the
+.Nm
+processor to quit only when it is executed.
+For example,
+.Dl if (0 == 1) halt
+will not cause
+.Nm
+to terminate because the halt is not executed.
+.It Ic return
+Return the value 0 from a function.
+(See the section on functions.)
+.It Ic return ( Ar expression )
+Return the value of the expression from a function.
+(See the section on  functions.)
+As an extension, the parenthesis are not required.
+.El
+.Ss PSEUDO STATEMENTS
+These statements are not statements in the traditional sense.
+They are not executed statements.
+Their function is performed at "compile" time.
+.Bl -tag -width 15n
+.It Ic limits
+Print the local limits enforced by the local version of
+.Nm
+This is an extension.
+.It Ic quit
+When the
+.Ic quit
+statement is read, the
+.Nm
+processor
+is terminated, regardless of where the quit statement is found.
+For example,
+.Dl if (0 == 1) quit
+will cause
+.Nm
+to terminate.
+.It Ic warranty
+Print a longer warranty notice.
+This is an extension.
+.El
+.Ss FUNCTIONS
 Functions provide a method of defining a computation that can be executed
-later.  Functions in 
-.B bc
-always compute a value and return it to the caller.  Function definitions
-are "dynamic" in the sense that a function is undefined until a definition
-is encountered in the input.  That definition is then used until another
-definition function for the same name is encountered.  The new definition
-then replaces the older definition.  A function is defined as follows:
-.nf
-.RS
-\fBdefine \fIname \fB( \fIparameters \fB) { \fInewline
-\fI    auto_list   statement_list \fB}\fR
-.RE
-.fi
+later.
+Functions in
+.Nm
+always compute a value and return it to the caller.
+Function definitions are "dynamic" in the sense that a function is
+undefined until a definition is encountered in the input.
+That definition is then used until another
+definition function for the same name is encountered.
+The new definition then replaces the older definition.
+A function is defined as follows:
+.Bd -literal
+define name ( parameters ) { newline
+    auto_list   statement_list }
+.Ed
 A function call is just an expression of the form
-"\fIname\fB(\fIparameters\fB)\fR".
-.PP
-Parameters are numbers or arrays (an extension).  In the function definition,
-zero or more parameters are defined by listing their names separated by
-commas.  All parameters are call by value parameters.  
+.Do Ar name ( Ar parameters ) Dc .
+.Pp
+Parameters are numbers or arrays (an extension).
+In the function definition, zero or more parameters are defined by
+listing their names separated by commas.
+All parameters are call by value parameters.
 Arrays are specified in the parameter definition by
-the notation "\fIname\fB[]\fR".   In the function call, actual parameters
-are full expressions for number parameters.  The same notation is used
-for passing arrays as for defining array parameters.  The named array is
-passed by value to the function.  Since function definitions are dynamic,
-parameter numbers and types are checked when a function is called.  Any
-mismatch in number or types of parameters will cause a runtime error.
+the notation
+.Do Ar name [ ] Dc .
+In the function call, actual parameters
+are full expressions for number parameters.
+The same notation is used
+for passing arrays as for defining array parameters.
+The named array is passed by value to the function.
+Since function definitions are dynamic,
+parameter numbers and types are checked when a function is called.
+Any mismatch in number or types of parameters will cause a runtime error.
 A runtime error will also occur for the call to an undefined function.
-.PP
-The \fIauto_list\fR is an optional list of variables that are for
-"local" use.  The syntax of the auto list (if present) is "\fBauto
-\fIname\fR, ... ;".  (The semicolon is optional.)  Each \fIname\fR is
-the name of an auto variable.  Arrays may be specified by using the
-same notation as used in parameters.  These variables have their
-values pushed onto a stack at the start of the function.  The
-variables are then initialized to zero and used throughout the
-execution of the function.  At function exit, these variables are
-popped so that the original value (at the time of the function call)
-of these variables are restored.  The parameters are really auto
-variables that are initialized to a value provided in the function
-call.  Auto variables are different than traditional local variables
+.Pp
+The
+.Ar auto_list
+is an optional list of variables that are for "local" use.
+The syntax of the auto list (if present) is
+.Do Ic auto Ar name , ... ; Dc .
+(The semicolon is optional.)
+Each
+.Ar name
+is the name of an auto variable.
+Arrays may be specified by using the
+same notation as used in parameters.
+These variables have their
+values pushed onto a stack at the start of the function.
+The variables are then initialized to zero and used throughout the
+execution of the function.
+At function exit, these variables are popped so that the original
+value (at the time of the function call) of these variables are
+restored.
+The parameters are really auto variables that are initialized to a
+value provided in the function call.
+Auto variables are different than traditional local variables
 because if function A calls function B, B may access function
 A's auto variables by just using the same name, unless function B has
-called them auto variables.  Due to the fact that auto variables and
-parameters are pushed onto a stack, \fBbc\fR supports recursive functions.
-.PP
-The function body is a list of \fBbc\fR statements.  Again, statements
-are separated by semicolons or newlines.  Return statements cause the
-termination of a function and the return of a value.  There are two
-versions of the return statement.  The first form, "\fBreturn\fR", returns
-the value 0 to the calling expression.  The second form, 
-"\fBreturn ( \fIexpression \fB)\fR", computes the value of the expression
-and returns that value to the calling expression.  There is an implied
-"\fBreturn (0)\fR" at the end of every function.  This allows a function
+called them auto variables.
+Due to the fact that auto variables and parameters are pushed onto a
+stack,
+.Nm
+supports recursive functions.
+.Pp
+The function body is a list of
+.Nm
+statements.
+Again, statements
+are separated by semicolons or newlines.
+Return statements cause the
+termination of a function and the return of a value.
+There are two
+versions of the return statement.
+The first form,
+.Dq Ic return ,
+returns the value 0 to the calling expression.
+The second form,
+.Do Ic return ( Ar expression ) Dc ,
+computes the value of the expression
+and returns that value to the calling expression.
+There is an implied
+.Do Ic return ( 0 ) Dc
+at the end of every function.
+This allows a function
 to terminate and return 0 without an explicit return statement.
-.PP
-Functions also change the usage of the variable \fBibase\fR.  All
-constants in the function body will be converted using the value of
-\fBibase\fR at the time of the function call.  Changes of \fBibase\fR
+.Pp
+Functions also change the usage of the variable
+.Ic ibase .
+All constants in the function body will be converted using the value of
+.Ic ibase
+at the time of the function call.
+Changes of
+.Ic ibase
 will be ignored during the execution of the function except for the
-standard function \fBread\fR, which will always use the current value
-of \fBibase\fR for conversion of numbers.
-.PP
-Several extensions have been added to functions.  First, the format of
-the definition has been slightly relaxed.  The standard requires the
-opening brace be on the same line as the \fBdefine\fR keyword and all
-other parts must be on following lines.  This version of \fBbc\fR will
-allow any number of newlines before and after the opening brace of the
-function.  For example, the following definitions are legal.
-.nf
-.RS
-\f(CW
+standard function
+.Ic read ,
+which will always use the current value
+of
+.Ic ibase
+for conversion of numbers.
+.Pp
+Several extensions have been added to functions.
+First, the format of the definition has been slightly relaxed.
+The standard requires the
+opening brace be on the same line as the
+.Ic define
+keyword and all other parts must be on following lines.
+This version of
+.Nm
+will allow any number of newlines before and after the opening brace of the
+function.
+For example, the following definitions are legal.
+.Bd -literal
 define d (n) { return (2*n); }
 define d (n)
   { return (2*n); }
-\fR
-.RE
-.fi
-.PP
-Functions may be defined as \fBvoid\fR.  A void
+.Ed
+.Pp
+Functions may be defined as
+.Ic void .
+A
+.Ic void
 funtion returns no value and thus may not be used in any place that needs
-a value.  A void function does not produce any output when called by itself
-on an input line.  The key word \fBvoid\fR is placed between the key word
-\fBdefine\fR and the function name.  For example, consider the following
-session.
-.nf
-.RS
-\f(CW
+a value.
+A
+.Ic void
+function does not produce any output when called by itself
+on an input line.
+The key word
+.Ic void
+is placed between the key word
+.Ic define
+and the function name.
+For example, consider the following session.
+.Bd -literal
 define py (y) { print "--->", y, "<---", "\n"; }
 define void px (x) { print "--->", x, "<---", "\n"; }
 py(1)
@@ -513,50 +850,92 @@ py(1)
 0
 px(1)
 --->1<---
-\fR
-.RE
-.fi
-Since \fBpy\fR is not a void function, the call of \fBpy(1)\fR prints
-the desired output and then prints a second line that is the value of
-the function.  Since the value of a function that is not given an
-explicit return statement is zero, the zero is printed.  For \fBpx(1)\fR,
+.Ed
+Since
+.Ar py
+is not a void function, the call of
+.Ar py ( 1 )
+prints the desired output and then prints a second line that is the value of
+the function.
+Since the value of a function that is not given an
+explicit return statement is zero, the zero is printed.
+For
+.Ar px ( 1 ) ,
 no zero is printed because the function is a void function.
-.PP
-Also, call by variable for arrays was added.  To declare
+.Pp
+Also, call by variable for arrays was added.
+To declare
 a call by variable array, the declaration of the array parameter in the
-function definition looks like "\fI*name\fB[]\fR".  The call to the
-function remains the same as call by value arrays. 
-.SS MATH LIBRARY
-If \fBbc\fR is invoked with the \fB-l\fR option, a math library is preloaded
-and the default scale is set to 20.   The math functions will calculate their
-results to the scale set at the time of their call.  
+function definition looks like
+.Do Ar name [ ] Dc .
+The call to the
+function remains the same as call by value arrays.
+.Ss MATH LIBRARY
+If
+.Nm
+is invoked with the
+.Fl l
+option, a math library is preloaded and the default scale is set to 20.
+The math functions will calculate their
+results to the scale set at the time of their call.
 The math library defines the following functions:
-.IP "s (\fIx\fR)"
+.Bl -tag -width 15n
+.It Ic s ( Ar x )
 The sine of x, x is in radians.
-.IP "c (\fIx\fR)"
+.It Ic c ( Ar x )
 The cosine of x, x is in radians.
-.IP "a (\fIx\fR)"
+.It Ic a ( Ar x )
 The arctangent of x, arctangent returns radians.
-.IP "l (\fIx\fR)"
+.It Ic l ( Ar x )
 The natural logarithm of x.
-.IP "e (\fIx\fR)"
+.It Ic e ( Ar x )
 The exponential function of raising e to the value x.
-.IP "j (\fIn,x\fR)"
+.It Ic j ( n , x )
 The Bessel function of integer order n of x.
-.SS EXAMPLES
-In /bin/sh,  the following will assign the value of "pi" to the shell
-variable \fBpi\fR.
-.RS
-\f(CW
+.El
+.Sh ENVIRONMENT
+The following environment variables are processed by
+.Nm :
+.Bl -tag -width 15n
+.It Ev POSIXLY_CORRECT
+This is the same as the
+.Fl s
+option.
+.It Dv BC_ENV_ARGS
+This is another mechanism to get arguments to
+.Nm .
+The format is the same as the command line arguments.
+These arguments are processed first, so any files listed in the
+environment arguments are processed before any command line argument
+files.
+This allows the user to set up "standard" options and files to be
+processed at every invocation of
+.Nm .
+The files in the environment variables would typically contain
+function definitions for functions the user wants defined every time
+.Nm
+is run.
+.It Dv BC_LINE_LENGTH
+This should be an integer specifying the number of characters in an
+output line for numbers.
+This includes the backslash and newline characters for long numbers.
+.El
+.Sh EXAMPLES
+In
+.Pa /bin/sh ,
+the following will assign the value of
+.Ar pi
+to the shell variable
+.Ar pi .
+.Bd -literal
 pi=$(echo "scale=10; 4*a(1)" | bc -l)
-\fR
-.RE
-.PP
+.Ed
+.Pp
 The following is the definition of the exponential function used in the
-math library.  This function is written in POSIX \fBbc\fR.
-.nf
-.RS
-\f(CW
+math library.
+This function is written in POSIX
+.Nm .
+.Bd -literal
 scale = 20
 
 /* Uses the fact that e^x = (e^(x/2))^2
@@ -571,7 +950,7 @@ define e(x) {
   if (x<0) {
     m = 1
     x = -x
-  } 
+  }
 
   /* Precondition x. */
   z = scale;
@@ -597,17 +976,14 @@ define e(x) {
     v += e
   }
 }
-\fR
-.RE
-.fi
-.PP
-The following is code that uses the extended features of \fBbc\fR to
-implement a simple program for calculating checkbook balances.  This
-program is best kept in a file so that it can be used many times 
+.Ed
+.Pp
+The following is code that uses the extended features of
+.Nm
+to implement a simple program for calculating checkbook balances.
+This program is best kept in a file so that it can be used many times
 without having to retype it at every use.
-.nf
-.RS
-\f(CW
+.Bd -literal
 scale=2
 print "\enCheck book program!\en"
 print "  Remember, deposits are negative transactions.\en"
@@ -624,195 +1000,278 @@ while (1) {
   bal /= 1
 }
 quit
-\fR
-.RE
-.fi
-.PP
+.Ed
+.Pp
 The following is the definition of the recursive factorial function.
-.nf
-.RS
-\f(CW
+.Bd -literal
 define f (x) {
   if (x <= 1) return (1);
   return (f(x-1) * x);
 }
-\fR
-.RE
-.fi
-.SS LIBEDIT OPTIONS
-\fBbc\fR is compiled using the \fBlibedit\fR library.
+.Ed
+.Ss EDITLINE OPTIONS
+.Nm
+is compiled using the
+.Xr editline 3
+library.
 This allows the user to do editing of lines before sending them
-to \fBbc\fR.  It also allows for a history of previous lines typed.
-This adds to \fBbc\fR one more special variable.
-This special variable, \fBhistory\fR is the number of lines of history
-retained.  The default value of -1 means that an unlimited
-number of history lines are retained.  Setting the value of
-\fBhistory\fR to a positive number restricts the number of history
-lines to the number given.  The value of 0 disables the history
-feature.  For more information, read the user manual for \fBlibedit\fR
+to
+.Nm .
+It also allows for a history of previous lines typed.
+This adds to
+.Nm
+one more special variable.
+This special variable,
+.Ic history
+is the number of lines of history retained.
+The default value of \-1 means that an unlimited
+number of history lines are retained.
+Setting the value of
+.Ic history
+to a positive number restricts the number of history
+lines to the number given.
+The value of 0 disables the history feature.
+For more information, read the user manual for the
+.Xr editline 3
 library.
-.SS DIFFERENCES
-This version of 
-.B bc
+.Ss DIFFERENCES
+This version of
+.Nm
 was implemented from the POSIX P1003.2/D11 draft and contains
 several differences and extensions relative to the draft and
 traditional implementations.
 It is not implemented in the traditional way using
-.I dc(1).
+.Xr dc 1 .
 This version is a single process which parses and runs a byte code
-translation of the program.  There is an "undocumented" option (-c)
+translation of the program.
+There is an "undocumented" option
+.Fl ( c )
 that causes the program to output the byte code to
-the standard output instead of running it.  It was mainly used for
+the standard output instead of running it.
+It was mainly used for
 debugging the parser and preparing the math library.
-.PP
-A major source of differences is
-extensions, where a feature is extended to add more functionality and
-additions, where new features are added. 
+.Pp
+A major source of differences is extensions, where a feature is
+extended to add more functionality and additions, where new features
+are added.
 The following is the list of differences and extensions.
-.IP "LANG environment"
+.Bl -tag -width 15n
+.It Ev LANG No environment
 This version does not conform to the POSIX standard in the processing
-of the LANG environment variable and all environment variables starting
-with LC_.
-.IP names
+of the
+.Ev LANG
+environment variable and all environment variables starting
+with
+.Ev LC_ .
+.It names
 Traditional and POSIX
-.B bc
-have single letter names for functions, variables and arrays.  They have
-been extended to be multi-character names that start with a letter and
+.Nm
+have single letter names for functions, variables and arrays.
+They have been extended to be multi-character names that start with a letter and
 may contain letters, numbers and the underscore character.
-.IP Strings
-Strings are not allowed to contain NUL characters.  POSIX says all characters
-must be included in strings.
-.IP last
-POSIX \fBbc\fR does not have a \fBlast\fR variable.  Some implementations
-of \fBbc\fR use the period (.) in a similar way.  
-.IP comparisons
-POSIX \fBbc\fR allows comparisons only in the if statement, the while
-statement, and the second expression of the for statement.  Also, only
-one relational operation is allowed in each of those statements.
-.IP "if statement, else clause"
-POSIX \fBbc\fR does not have an else clause.
-.IP "for statement"
-POSIX \fBbc\fR requires all expressions to be present in the for statement.
-.IP "&&, ||, !"
-POSIX \fBbc\fR does not have the logical operators.
-.IP "read function"
-POSIX \fBbc\fR does not have a read function.
-.IP "print statement"
-POSIX \fBbc\fR does not have a print statement .
-.IP "continue statement"
-POSIX \fBbc\fR does not have a continue statement.
-.IP "return statement"
-POSIX \fBbc\fR requires parentheses around the return expression.
-.IP "array parameters"
-POSIX \fBbc\fR does not (currently) support array parameters in full.
+.It strings
+Strings are not allowed to contain NUL characters.
+POSIX says all characters must be included in strings.
+.Ic last
+POSIX
+.Nm
+does not have a
+.Ic last
+variable.
+Some implementations
+of
+.Nm
+use the period (.) in a similar way.
+.It comparisons
+POSIX
+.Nm
+allows comparisons only in the
+.Ic if
+statement, the
+.Ic while
+statement, and the second expression of the
+.Ic for
+statement.
+Also, only one relational operation is allowed in each of those statements.
+.It Ic if No statement , Ic else No clause
+POSIX
+.Nm
+does not have an
+.Ic else
+clause.
+.It Ic for No statement
+POSIX
+.Nm
+requires all expressions to be present in the
+.Ic for
+statement.
+.It && , || , \&!
+POSIX
+.Nm
+does not have the logical operators.
+.It Ic read No function
+POSIX
+.Nm
+does not have a
+.Ic read
+function.
+.It Ic print No statement
+POSIX
+.Nm
+does not have a
+.Ic print
+statement .
+.It Ic continue No statement
+POSIX
+.Nm
+does not have a
+.Ic continue
+statement.
+.It Ic return No statement
+POSIX
+.Nm
+requires parentheses around the return expression.
+.It array parameters
+POSIX
+.Nm
+does not (currently) support array parameters in full.
 The POSIX grammar allows for arrays in function definitions, but does
-not provide a method to specify an array as an actual parameter.  (This
-is most likely an oversight in the grammar.)  Traditional implementations
-of \fBbc\fR have only call by value array parameters.
-.IP "function format"
-POSIX \fBbc\fR requires the opening brace on the same line as the 
-\fBdefine\fR key word and the \fBauto\fR statement on the next line.
-.IP "=+, =-, =*, =/, =%, =^"
-POSIX \fBbc\fR does not require these "old style" assignment operators to
-be defined.  This version may allow these "old style" assignments.  Use
-the limits statement to see if the installed version supports them.  If
-it does support the "old style" assignment operators, the statement
-"a =- 1" will decrement \fBa\fR by 1 instead of setting \fBa\fR to the
-value -1.
-.IP "spaces in numbers"
-Other implementations of \fBbc\fR allow spaces in numbers.  For example,
-"x=1 3" would assign the value 13 to the variable x.  The same statement
-would cause a syntax error in this version of \fBbc\fR.
-.IP "errors and execution"
+not provide a method to specify an array as an actual parameter.
+(This is most likely an oversight in the grammar.)
+Traditional implementations of
+.Nm
+have only call-by-value array parameters.
+.It function format
+POSIX
+.Nm
+requires the opening brace on the same line as the
+.Ic define
+key word and the
+.Ic auto
+statement on the next line.
+.It  =+ , =- , =* , =/ , =% , =^
+POSIX
+.Nm
+does not require these "old style" assignment operators to
+be defined.
+This version may allow these "old style" assignments.
+Use the
+.Ic limits
+statement to see if the installed version supports them.
+If it does support the "old style" assignment operators, the statement
+.Dq a =- 1
+will decrement
+.Ar a
+by 1 instead of setting
+.Ar a
+to the value \-1.
+.It spaces in numbers
+Other implementations of
+.Nm
+allow spaces in numbers.
+For example,
+.Dq x=1 3
+would assign the value 13 to the variable
+.Ar x .
+The same statement
+would cause a syntax error in this version of
+.Nm .
+.It errors and execution
 This implementation varies from other implementations in terms of what
 code will be executed when syntax and other errors are found in the
-program.  If a syntax error is found in a function definition, error
+program.
+If a syntax error is found in a function definition, error
 recovery tries to find the beginning of a statement and continue to
-parse the function.  Once a syntax error is found in the function, the
+parse the function.
+Once a syntax error is found in the function, the
 function will not be callable and becomes undefined.
 Syntax errors in the interactive execution code will invalidate the
-current execution block.  The execution block is terminated by an
+current execution block.
+The execution block is terminated by an
 end of line that appears after a complete sequence of statements.
-For example, 
-.nf
-.RS
+For example,
+.Bd -literal
 a = 1
 b = 2
-.RE
-.fi
+.Ed
 has two execution blocks and
-.nf
-.RS
+.Bd -literal
 { a = 1
   b = 2 }
-.RE
-.fi
-has one execution block.  Any runtime error will terminate the execution
-of the current execution block.  A runtime warning will not terminate the
-current execution block.
-.IP "Interrupts"
-During an interactive session, the SIGINT signal (usually generated by
-the control-C character from the terminal) will cause execution of the
-current execution block to be interrupted.  It will display a "runtime"
-error indicating which function was interrupted.  After all runtime
-structures have been cleaned up, a message will be printed to notify the
-user that \fBbc\fR is ready for more input.  All previously defined functions
-remain defined and the value of all non-auto variables are the value at
-the point of interruption.  All auto variables and function parameters
-are removed during the
-clean up process.  During a non-interactive
-session, the SIGINT signal will terminate the entire run of \fBbc\fR.
-.SS LIMITS
-The following are the limits currently in place for this 
-.B bc
-processor.  Some of them may have been changed by an installation.
-Use the limits statement to see the actual values.
-.IP BC_BASE_MAX
-The maximum output base is currently set at 999.  The maximum input base
-is 16.
-.IP BC_DIM_MAX
-This is currently an arbitrary limit of 65535 as distributed.  Your
-installation may be different.
-.IP BC_SCALE_MAX
-The number of digits after the decimal point is limited to INT_MAX digits.
-Also, the number of digits before the decimal point is limited to INT_MAX
+.Ed
+has one execution block.
+Any runtime error will terminate the execution
+of the current execution block.
+A runtime warning will not terminate the current execution block.
+.It interrupts
+During an interactive session, the
+.Dv SIGINT
+signal (usually generated by the control-C character from the
+terminal) will cause execution of the current execution block to be
+interrupted.
+It will display a "runtime"
+error indicating which function was interrupted.
+After all runtime structures have been cleaned up, a message will be
+printed to notify the user that
+.Nm
+is ready for more input.
+All previously defined functions remain defined and the value of all
+non-auto variables are the value at the point of interruption.
+All auto variables and function parameters are removed during the
+clean up process.
+During a non-interactive session, the
+.Dv SIGINT
+signal will terminate the entire run of
+.Nm .
+.El
+.Ss LIMITS
+The following are the limits currently in place for this
+.Nm
+processor.
+Some of them may have been changed by an installation.
+Use the
+.Ic limits
+statement to see the actual values.
+.Bl -tag -width 15n
+.It Dv BC_BASE_MAX
+The maximum output base is currently set at 999.
+The maximum input base is 16.
+.It Dv BC_DIM_MAX
+This is currently an arbitrary limit of 65535 as distributed.
+Your installation may be different.
+.It Dv  BC_SCALE_MAX
+The number of digits after the decimal point is limited to
+.Dv INT_MAX
+digits.
+Also, the number of digits before the decimal point is limited to
+.Dv INT_MAX
 digits.
-.IP BC_STRING_MAX
-The limit on the number of characters in a string is INT_MAX characters.
-.IP exponent
-The value of the exponent in the raise operation (^) is limited to LONG_MAX.
-.IP "variable names"
+.It Dv BC_STRING_MAX
+The limit on the number of characters in a string is
+.Dv INT_MAX
+characters.
+.It exponent
+The value of the exponent in the raise operation (^) is limited to
+.Dv LONG_MAX .
+.It variable names
 The current limit on the number of unique names is 32767 for each of
 simple variables, arrays and functions.
-.SH ENVIRONMENT VARIABLES
-The following environment variables are processed by \fBbc\fR:
-.IP "POSIXLY_CORRECT"
-This is the same as the \fB-s\fR option.
-.IP "BC_ENV_ARGS"
-This is another mechanism to get arguments to \fBbc\fR.  The
-format is the same as the command line arguments.  These arguments
-are processed first, so any files listed in the environment arguments
-are processed before any command line argument files.  This allows
-the user to set up "standard" options and files to be processed
-at every invocation of \fBbc\fR.  The files in the environment
-variables would typically contain function definitions for functions
-the user wants defined every time \fBbc\fR is run.
-.IP "BC_LINE_LENGTH"
-This should be an integer specifying the number of characters in an
-output line for numbers. This includes the backslash and newline characters
-for long numbers.
-.SH DIAGNOSTICS
-If any file on the command line can not be opened, \fBbc\fR will report
-that the file is unavailable and terminate.  Also, there are compile
+.El
+.Sh DIAGNOSTICS
+If any file on the command line can not be opened,
+.Nm
+will report
+that the file is unavailable and terminate.
+Also, there are compile
 and run time diagnostics that should be self-explanatory.
-.SH BUGS
-Error recovery is not very good yet.
-.SH AUTHOR
-.nf
-Philip A. Nelson
[email protected]
-.fi
-.SH ACKNOWLEDGEMENTS
+.Sh HISTORY
+This man page documents bc version nb1.0.
+.Sh AUTHORS
+.An Philip A. Nelson Aq Mt [email protected]
+.Ss ACKNOWLEDGEMENTS
 The author would like to thank Steve Sommars for his extensive help in
-testing the implementation.  Many great suggestions were given.  This
-is a much better product due to his involvement.
+testing the implementation.
+Many great suggestions were given.
+This is a much better product due to his involvement.
+.Sh BUGS
+Error recovery is not very good yet.

Reply via email to