xref: /dflybsd-src/usr.bin/bc/bc.1 (revision c880cbafebe60271eeb88dac900205b845da3f25)
1db555d9aSPeter Avalos.\"	$OpenBSD: bc.1,v 1.22 2007/05/31 19:20:07 jmc Exp $
2f2d37758SMatthew Dillon.\"
3f2d37758SMatthew Dillon.\" Copyright (C) Caldera International Inc.  2001-2002.
4f2d37758SMatthew Dillon.\" All rights reserved.
5f2d37758SMatthew Dillon.\"
6f2d37758SMatthew Dillon.\" Redistribution and use in source and binary forms, with or without
7f2d37758SMatthew Dillon.\" modification, are permitted provided that the following conditions
8f2d37758SMatthew Dillon.\" are met:
9f2d37758SMatthew Dillon.\" 1. Redistributions of source code and documentation must retain the above
10f2d37758SMatthew Dillon.\"    copyright notice, this list of conditions and the following disclaimer.
11f2d37758SMatthew Dillon.\" 2. Redistributions in binary form must reproduce the above copyright
12f2d37758SMatthew Dillon.\"    notice, this list of conditions and the following disclaimer in the
13f2d37758SMatthew Dillon.\"    documentation and/or other materials provided with the distribution.
14f2d37758SMatthew Dillon.\" 3. All advertising materials mentioning features or use of this software
15f2d37758SMatthew Dillon.\"    must display the following acknowledgement:
16f2d37758SMatthew Dillon.\"	This product includes software developed or owned by Caldera
17f2d37758SMatthew Dillon.\"	International, Inc.
18f2d37758SMatthew Dillon.\" 4. Neither the name of Caldera International, Inc. nor the names of other
19f2d37758SMatthew Dillon.\"    contributors may be used to endorse or promote products derived from
20f2d37758SMatthew Dillon.\"    this software without specific prior written permission.
21f2d37758SMatthew Dillon.\"
22f2d37758SMatthew Dillon.\" USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
23f2d37758SMatthew Dillon.\" INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
24f2d37758SMatthew Dillon.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25f2d37758SMatthew Dillon.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26f2d37758SMatthew Dillon.\" IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE FOR ANY DIRECT,
27f2d37758SMatthew Dillon.\" INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28f2d37758SMatthew Dillon.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29f2d37758SMatthew Dillon.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30f2d37758SMatthew Dillon.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31f2d37758SMatthew Dillon.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32f2d37758SMatthew Dillon.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33f2d37758SMatthew Dillon.\" POSSIBILITY OF SUCH DAMAGE.
34f2d37758SMatthew Dillon.\"
35f2d37758SMatthew Dillon.\"	@(#)bc.1	6.8 (Berkeley) 8/8/91
36f2d37758SMatthew Dillon.\"
37d3d5dcf2SThomas Nikolajsen.Dd November 14, 2009
38f2d37758SMatthew Dillon.Dt BC 1
391fbe6674SSascha Wildner.Os
40f2d37758SMatthew Dillon.Sh NAME
41f2d37758SMatthew Dillon.Nm bc
42f2d37758SMatthew Dillon.Nd arbitrary-precision arithmetic language and calculator
43f2d37758SMatthew Dillon.Sh SYNOPSIS
449b5a9965SSascha Wildner.Nm
45f2d37758SMatthew Dillon.Op Fl cl
46b6d9cda5SSascha Wildner.Op Fl e Ar expression
47f2d37758SMatthew Dillon.Op Ar file ...
48f2d37758SMatthew Dillon.Sh DESCRIPTION
49f2d37758SMatthew Dillon.Nm
50f2d37758SMatthew Dillonis an interactive processor for a language which resembles
51f2d37758SMatthew DillonC but provides unlimited precision arithmetic.
52b6d9cda5SSascha WildnerIt takes input from any expressions on the command line and
53b6d9cda5SSascha Wildnerany files given, then reads the standard input.
54f2d37758SMatthew Dillon.Pp
55f2d37758SMatthew DillonOptions available:
56f2d37758SMatthew Dillon.Bl -tag -width Ds
57f2d37758SMatthew Dillon.It Fl c
58f2d37758SMatthew Dillon.Nm
59f2d37758SMatthew Dillonis actually a preprocessor for
60f2d37758SMatthew Dillon.Xr dc 1 ,
61f2d37758SMatthew Dillonwhich it invokes automatically, unless the
62f2d37758SMatthew Dillon.Fl c
63f2d37758SMatthew Dillon.Pq compile only
64f2d37758SMatthew Dillonoption is present.
65f2d37758SMatthew DillonIn this case the generated
66f2d37758SMatthew Dillon.Xr dc 1
67f2d37758SMatthew Dilloninstructions are sent to the standard output,
68f2d37758SMatthew Dilloninstead of being interpreted by a running
69f2d37758SMatthew Dillon.Xr dc 1
70f2d37758SMatthew Dillonprocess.
71b6d9cda5SSascha Wildner.It Fl e Ar expression
72b6d9cda5SSascha WildnerEvaluate
73b6d9cda5SSascha Wildner.Ar expression .
74b6d9cda5SSascha WildnerIf multiple
75b6d9cda5SSascha Wildner.Fl e
76b6d9cda5SSascha Wildneroptions are specified, they are processed in the order given,
77b6d9cda5SSascha Wildnerseparated by newlines.
78f2d37758SMatthew Dillon.It Fl l
79b6d9cda5SSascha WildnerAllow specification of an arbitrary precision math library.
80b6d9cda5SSascha WildnerThe definitions in the library are available to command line
81b6d9cda5SSascha Wildnerexpressions.
82f2d37758SMatthew Dillon.El
83f2d37758SMatthew Dillon.Pp
84f2d37758SMatthew DillonThe syntax for
85f2d37758SMatthew Dillon.Nm
86f2d37758SMatthew Dillonprograms is as follows:
87f2d37758SMatthew Dillon.Sq L
88f2d37758SMatthew Dillonmeans letter a-z;
89f2d37758SMatthew Dillon.Sq E
90f2d37758SMatthew Dillonmeans expression;
91f2d37758SMatthew Dillon.Sq S
92f2d37758SMatthew Dillonmeans statement.
93f2d37758SMatthew DillonAs a non-portable extension, it is possible to use long names
94f2d37758SMatthew Dillonin addition to single letter names.
95f2d37758SMatthew DillonA long name is a sequence starting with a lowercase letter
96f2d37758SMatthew Dillonfollowed by any number of lowercase letters and digits.
97f2d37758SMatthew DillonThe underscore character
98f2d37758SMatthew Dillon.Pq Sq _
99f2d37758SMatthew Dilloncounts as a letter.
100f2d37758SMatthew Dillon.Pp
101f2d37758SMatthew DillonComments
102f2d37758SMatthew Dillon.Bd -unfilled -offset indent -compact
103f2d37758SMatthew Dillonare enclosed in /* and */
104f2d37758SMatthew Dillonare enclosed in # and the next newline
105f2d37758SMatthew Dillon.Ed
106f2d37758SMatthew Dillon.Pp
107f2d37758SMatthew DillonThe newline is not part of the line comment,
108f2d37758SMatthew Dillonwhich in itself is a non-portable extension.
109f2d37758SMatthew Dillon.Pp
110f2d37758SMatthew DillonNames
111f2d37758SMatthew Dillon.Bd -unfilled -offset indent -compact
112f2d37758SMatthew Dillonsimple variables: L
113f2d37758SMatthew Dillonarray elements: L [ E ]
114f2d37758SMatthew DillonThe words `ibase', `obase', and `scale'
115f2d37758SMatthew DillonThe word `last' or a single dot
116f2d37758SMatthew Dillon.Ed
117f2d37758SMatthew Dillon.Pp
118f2d37758SMatthew DillonOther operands
119f2d37758SMatthew Dillon.Bd -unfilled -offset indent -compact
120f2d37758SMatthew Dillonarbitrarily long numbers with optional sign and decimal point
121f2d37758SMatthew Dillon( E )
122f2d37758SMatthew Dillonsqrt ( E )
123f2d37758SMatthew Dillonlength ( E )	number of significant decimal digits
124f2d37758SMatthew Dillonscale ( E )	number of digits right of decimal point
125f2d37758SMatthew DillonL ( E , ... , E )
126f2d37758SMatthew Dillon.Ed
127f2d37758SMatthew Dillon.Pp
128f2d37758SMatthew DillonThe sequence
129f2d37758SMatthew Dillon.Sq \e<newline><whitespace>
130f2d37758SMatthew Dillonis ignored within numbers.
131f2d37758SMatthew Dillon.Pp
132f2d37758SMatthew DillonOperators
133f2d37758SMatthew Dillon.Pp
134f2d37758SMatthew DillonThe following arithmetic and logical operators can be used.
135f2d37758SMatthew DillonThe semantics of the operators is the same as in the C language.
136f2d37758SMatthew DillonThey are listed in order of decreasing precedence.
137f2d37758SMatthew DillonOperators in the same group have the same precedence.
138*cb7e3b3cSJoris Giovannangeli.Bl -column "= += \-= *= /= %= ^=" "Associativity" "multiply, divide, modulus" -offset indent
139f2d37758SMatthew Dillon.It Sy "Operator" Ta Sy "Associativity" Ta Sy "Description"
140f2d37758SMatthew Dillon.It "++ \-\-" Ta "none" Ta "increment, decrement"
141f2d37758SMatthew Dillon.It "\-" Ta "none" Ta "unary minus"
142f2d37758SMatthew Dillon.It "^" Ta "right" Ta "power"
143f2d37758SMatthew Dillon.It "* / %" Ta "left" Ta "multiply, divide, modulus"
144f2d37758SMatthew Dillon.It "+ \-" Ta "left" Ta "plus, minus"
145f2d37758SMatthew Dillon.It "= += -= *= /= %= ^=" Ta "right" Ta "assignment"
146f2d37758SMatthew Dillon.It "== <= >= != < >" Ta "none" Ta "relational"
147f2d37758SMatthew Dillon.It "!" Ta "none" Ta "boolean not"
148f2d37758SMatthew Dillon.It "&&" Ta "left" Ta "boolean and"
149f2d37758SMatthew Dillon.It "||" Ta "left" Ta "boolean or"
150f2d37758SMatthew Dillon.El
151f2d37758SMatthew Dillon.Pp
152f2d37758SMatthew DillonNote the following:
153f2d37758SMatthew Dillon.Bl -bullet -offset indent
154f2d37758SMatthew Dillon.It
155f2d37758SMatthew DillonThe relational operators may appear in any expression.
156f2d37758SMatthew DillonThe
157f2d37758SMatthew Dillon.St -p1003.2
158f2d37758SMatthew Dillonstandard only allows them in the conditional expression of an
159f2d37758SMatthew Dillon.Sq if ,
160f2d37758SMatthew Dillon.Sq while
161f2d37758SMatthew Dillonor
162f2d37758SMatthew Dillon.Sq for
163f2d37758SMatthew Dillonstatement.
164f2d37758SMatthew Dillon.It
165f2d37758SMatthew DillonThe relational operators have a lower precedence than the assignment
166f2d37758SMatthew Dillonoperators.
167f2d37758SMatthew DillonThis has the consequence that the expression
168f2d37758SMatthew Dillon.Sy a = b < c
169f2d37758SMatthew Dillonis interpreted as
170f2d37758SMatthew Dillon.Sy (a = b) < c ,
171f2d37758SMatthew Dillonwhich is probably not what the programmer intended.
172f2d37758SMatthew Dillon.It
173f2d37758SMatthew DillonIn contrast with the C language, the relational operators all have
174f2d37758SMatthew Dillonthe same precedence, and are non-associative.
175f2d37758SMatthew DillonThe expression
176f2d37758SMatthew Dillon.Sy a < b < c
177f2d37758SMatthew Dillonwill produce a syntax error.
178f2d37758SMatthew Dillon.It
179f2d37758SMatthew DillonThe boolean operators (!, && and ||) are non-portable extensions.
180f2d37758SMatthew Dillon.It
181f2d37758SMatthew DillonThe boolean not
182f2d37758SMatthew Dillon(!) operator has much lower precedence than the same operator in the
183f2d37758SMatthew DillonC language.
184f2d37758SMatthew DillonThis has the consequence that the expression
185f2d37758SMatthew Dillon.Sy !a < b
186f2d37758SMatthew Dillonis interpreted as
187f2d37758SMatthew Dillon.Sy !(a < b) .
188f2d37758SMatthew DillonPrudent programmers use parentheses when writing expressions involving
189f2d37758SMatthew Dillonboolean operators.
190f2d37758SMatthew Dillon.El
191f2d37758SMatthew Dillon.Pp
192f2d37758SMatthew DillonStatements
193f2d37758SMatthew Dillon.Bd -unfilled -offset indent -compact
194f2d37758SMatthew DillonE
195f2d37758SMatthew Dillon{ S ; ... ; S }
196f2d37758SMatthew Dillonif ( E ) S
197f2d37758SMatthew Dillonif ( E ) S else S
198f2d37758SMatthew Dillonwhile ( E ) S
199f2d37758SMatthew Dillonfor ( E ; E ; E ) S
200f2d37758SMatthew Dillonnull statement
201f2d37758SMatthew Dillonbreak
202f2d37758SMatthew Dilloncontinue
203f2d37758SMatthew Dillonquit
204f2d37758SMatthew Dillona string of characters, enclosed in double quotes
205f2d37758SMatthew Dillonprint E ,..., E
206f2d37758SMatthew Dillon.Ed
207f2d37758SMatthew Dillon.Pp
2088a1d8d65SSascha WildnerA string may contain any character, except a double quote.
209f2d37758SMatthew DillonThe if statement with an else branch is a non-portable extension.
210f2d37758SMatthew DillonAll three E's in a for statement may be empty.
211f2d37758SMatthew DillonThis is a non-portable extension.
212f2d37758SMatthew DillonThe continue and print statements are also non-portable extensions.
213f2d37758SMatthew Dillon.Pp
214f2d37758SMatthew DillonThe print statement takes a list of comma-separated expressions.
215f2d37758SMatthew DillonEach expression in the list is evaluated and the computed
216f2d37758SMatthew Dillonvalue is printed and assigned to the variable `last'.
217f2d37758SMatthew DillonNo trailing newline is printed.
218f2d37758SMatthew DillonThe expression may also be a string enclosed in double quotes.
219f2d37758SMatthew DillonWithin these strings the following escape sequences may be used:
220f2d37758SMatthew Dillon.Sq \ea
221f2d37758SMatthew Dillonfor bell (alert),
222f2d37758SMatthew Dillon.Sq \eb
223f2d37758SMatthew Dillonfor backspace,
224f2d37758SMatthew Dillon.Sq \ef
225f2d37758SMatthew Dillonfor formfeed,
226f2d37758SMatthew Dillon.Sq \en
227f2d37758SMatthew Dillonfor newline,
228f2d37758SMatthew Dillon.Sq \er
229f2d37758SMatthew Dillonfor carriage return,
230f2d37758SMatthew Dillon.Sq \et
231f2d37758SMatthew Dillonfor tab,
232f2d37758SMatthew Dillon.Sq \eq
233f2d37758SMatthew Dillonfor double quote and
234f2d37758SMatthew Dillon.Sq \e\e
235f2d37758SMatthew Dillonfor backslash.
236f2d37758SMatthew DillonAny other character following a backslash will be ignored.
237f2d37758SMatthew DillonStrings will not be assigned to `last'.
238f2d37758SMatthew Dillon.Pp
239f2d37758SMatthew DillonFunction definitions
240f2d37758SMatthew Dillon.Bd -unfilled -offset indent
241f2d37758SMatthew Dillondefine L ( L ,..., L ) {
242f2d37758SMatthew Dillon	auto L, ... , L
243f2d37758SMatthew Dillon	S; ... S
244f2d37758SMatthew Dillon	return ( E )
245f2d37758SMatthew Dillon}
246f2d37758SMatthew Dillon.Ed
247f2d37758SMatthew Dillon.Pp
248f2d37758SMatthew DillonAs a non-portable extension, the opening brace of the define statement
249f2d37758SMatthew Dillonmay appear on the next line.
250f2d37758SMatthew DillonThe return statement may also appear in the following forms:
251f2d37758SMatthew Dillon.Bd -unfilled -offset indent
252f2d37758SMatthew Dillonreturn
253f2d37758SMatthew Dillonreturn ()
254f2d37758SMatthew Dillonreturn E
255f2d37758SMatthew Dillon.Ed
256f2d37758SMatthew Dillon.Pp
257f2d37758SMatthew DillonThe first two are equivalent to the statement
258f2d37758SMatthew Dillon.Dq return 0 .
259f2d37758SMatthew DillonThe last form is a non-portable extension.
260f2d37758SMatthew DillonNot specifying a return statement is equivalent to writing
261f2d37758SMatthew Dillon.Dq return (0) .
262f2d37758SMatthew Dillon.Pp
263f2d37758SMatthew DillonFunctions available in the math library, which is loaded by specifying the
264f2d37758SMatthew Dillon.Fl l
265f2d37758SMatthew Dillonflag on the command line
266f2d37758SMatthew Dillon.Pp
267f2d37758SMatthew Dillon.Bl -tag -width j(n,x) -offset indent -compact
268f2d37758SMatthew Dillon.It s(x)
269f2d37758SMatthew Dillonsine
270f2d37758SMatthew Dillon.It c(x)
271f2d37758SMatthew Dilloncosine
272f2d37758SMatthew Dillon.It e(x)
273f2d37758SMatthew Dillonexponential
274f2d37758SMatthew Dillon.It l(x)
275f2d37758SMatthew Dillonlog
276f2d37758SMatthew Dillon.It a(x)
277f2d37758SMatthew Dillonarctangent
278f2d37758SMatthew Dillon.It j(n,x)
279f2d37758SMatthew DillonBessel function
280f2d37758SMatthew Dillon.El
281f2d37758SMatthew Dillon.Pp
282f2d37758SMatthew DillonAll function arguments are passed by value.
283f2d37758SMatthew Dillon.Pp
284f2d37758SMatthew DillonThe value of a statement that is an expression is printed
285f2d37758SMatthew Dillonunless the main operator is an assignment.
286f2d37758SMatthew DillonThe value printed is assigned to the special variable `last'.
287f2d37758SMatthew DillonThis is a non-portable extension.
288f2d37758SMatthew DillonA single dot may be used as a synonym for `last'.
289f2d37758SMatthew DillonEither semicolons or newlines may separate statements.
290f2d37758SMatthew DillonAssignment to
291f2d37758SMatthew Dillon.Ar scale
292f2d37758SMatthew Dilloninfluences the number of digits to be retained on arithmetic
293f2d37758SMatthew Dillonoperations in the manner of
294f2d37758SMatthew Dillon.Xr dc 1 .
295f2d37758SMatthew DillonAssignments to
296f2d37758SMatthew Dillon.Ar ibase
297f2d37758SMatthew Dillonor
298f2d37758SMatthew Dillon.Ar obase
299f2d37758SMatthew Dillonset the input and output number radix respectively.
300f2d37758SMatthew Dillon.Pp
301f2d37758SMatthew DillonThe same letter may be used as an array, a function,
302f2d37758SMatthew Dillonand a simple variable simultaneously.
303f2d37758SMatthew DillonAll variables are global to the program.
304f2d37758SMatthew Dillon`Auto' variables are pushed down during function calls.
305f2d37758SMatthew DillonWhen using arrays as function arguments
306f2d37758SMatthew Dillonor defining them as automatic variables,
307f2d37758SMatthew Dillonempty square brackets must follow the array name.
308f2d37758SMatthew Dillon.Pp
309f2d37758SMatthew DillonFor example
310f2d37758SMatthew Dillon.Bd -literal -offset indent
311f2d37758SMatthew Dillonscale = 20
312f2d37758SMatthew Dillondefine e(x){
313f2d37758SMatthew Dillon	auto a, b, c, i, s
314f2d37758SMatthew Dillon	a = 1
315f2d37758SMatthew Dillon	b = 1
316f2d37758SMatthew Dillon	s = 1
317f2d37758SMatthew Dillon	for(i=1; 1==1; i++){
318f2d37758SMatthew Dillon		a = a*x
319f2d37758SMatthew Dillon		b = b*i
320f2d37758SMatthew Dillon		c = a/b
321f2d37758SMatthew Dillon		if(c == 0) return(s)
322f2d37758SMatthew Dillon		s = s+c
323f2d37758SMatthew Dillon	}
324f2d37758SMatthew Dillon}
325f2d37758SMatthew Dillon.Ed
326f2d37758SMatthew Dillon.Pp
327f2d37758SMatthew Dillondefines a function to compute an approximate value of
328f2d37758SMatthew Dillonthe exponential function and
329f2d37758SMatthew Dillon.Pp
330f2d37758SMatthew Dillon.Dl for(i=1; i<=10; i++) e(i)
331f2d37758SMatthew Dillon.Pp
332f2d37758SMatthew Dillonprints approximate values of the exponential function of
333f2d37758SMatthew Dillonthe first ten integers.
334b6d9cda5SSascha Wildner.Bd -literal -offset indent
335b6d9cda5SSascha Wildner$ bc -l -e 'scale = 500; 2 * a(2^10000)' -e quit
336b6d9cda5SSascha Wildner.Ed
337b6d9cda5SSascha Wildnerprints an approximation of pi.
338f2d37758SMatthew Dillon.Sh FILES
339f2d37758SMatthew Dillon.Bl -tag -width /usr/share/misc/bc.library -compact
340f2d37758SMatthew Dillon.It Pa /usr/share/misc/bc.library
341f2d37758SMatthew Dillonmath library, read when the
342f2d37758SMatthew Dillon.Fl l
343f2d37758SMatthew Dillonoption is specified on the command line.
344f2d37758SMatthew Dillon.El
345f2d37758SMatthew Dillon.Sh SEE ALSO
346f2d37758SMatthew Dillon.Xr dc 1
347d3d5dcf2SThomas Nikolajsen.Rs
348d3d5dcf2SThomas Nikolajsen.%A "Lorinda Cherry"
349d3d5dcf2SThomas Nikolajsen.%A "Robert Morris"
350d3d5dcf2SThomas Nikolajsen.%B "4.4BSD Users's Supplementary Documents (USD)"
351d3d5dcf2SThomas Nikolajsen.%T "BC \- An Arbitrary Precision Desk-Calculator Language"
352d3d5dcf2SThomas Nikolajsen.Re
353f2d37758SMatthew Dillon.Sh STANDARDS
354f2d37758SMatthew DillonThe
355f2d37758SMatthew Dillon.Nm
356db555d9aSPeter Avalosutility is compliant with the
357db555d9aSPeter Avalos.St -p1003.1-2004
358f2d37758SMatthew Dillonspecification.
359db555d9aSPeter Avalos.Pp
360db555d9aSPeter AvalosThe flags
361db555d9aSPeter Avalos.Op Fl ce
362db555d9aSPeter Avalosare extensions to that specification.
363f2d37758SMatthew Dillon.Sh HISTORY
364f2d37758SMatthew DillonThe
365f2d37758SMatthew Dillon.Nm
3668a1d8d65SSascha Wildnercommand first appeared in
367f2d37758SMatthew Dillon.At v6 .
368f2d37758SMatthew DillonA complete rewrite of the
369f2d37758SMatthew Dillon.Nm
370f2d37758SMatthew Dilloncommand first appeared in
371f2d37758SMatthew Dillon.Ox 3.5 .
372f2d37758SMatthew Dillon.Sh AUTHORS
373f8a0f69aSSascha Wildner.An -nosplit
374f2d37758SMatthew DillonThe original version of the
375f2d37758SMatthew Dillon.Nm
376f2d37758SMatthew Dilloncommand was written by
377f2d37758SMatthew Dillon.An Robert Morris
378f2d37758SMatthew Dillonand
379f2d37758SMatthew Dillon.An Lorinda Cherry .
380f2d37758SMatthew DillonThe current version of the
381f2d37758SMatthew Dillon.Nm
382f2d37758SMatthew Dillonutility was written by
383f2d37758SMatthew Dillon.An Otto Moerbeek .
384f2d37758SMatthew Dillon.Sh BUGS
385f2d37758SMatthew Dillon.Ql Quit
386f2d37758SMatthew Dillonis interpreted when read, not when executed.
387f2d37758SMatthew Dillon.Pp
388f2d37758SMatthew DillonSome non-portable extensions, as found in the GNU version of the
389f2d37758SMatthew Dillon.Nm
390f2d37758SMatthew Dillonutility are not implemented (yet).
391