groff 1.23.0 added .MR to its -man macro package. The NEWS file states
that the inclusion of the macro "was prompted by its introduction to
Plan 9 from User Space's troff in August 2020." From d32deab it seems
that the name for Plan 9 from User Space's implementation was suggested
by groff maintainer G. Brandon Robinson.
Not sure if the intention was to make these definitions compatible, but
it would be nice if they were.
Currently, Plan 9 from User Space's .MR expects its second argument to
be parenthesized. groff's .MR does not. This results in extra
parentheses appearing in manual references when viewing Plan 9 from User
Space's manual pages on a system using groff.
145 lines
2.3 KiB
Groff
145 lines
2.3 KiB
Groff
.TH HOC 1
|
|
.SH NAME
|
|
hoc \- interactive floating point language
|
|
.SH SYNOPSIS
|
|
.B hoc
|
|
[
|
|
.I file ...
|
|
]
|
|
[
|
|
.B -e
|
|
.I expression
|
|
]
|
|
.SH DESCRIPTION
|
|
.I Hoc
|
|
interprets a simple language for floating point arithmetic,
|
|
at about the level of BASIC, with C-like syntax and
|
|
functions.
|
|
.PP
|
|
The named
|
|
.I files
|
|
are read and interpreted in order.
|
|
If no
|
|
.I file
|
|
is given or if
|
|
.I file
|
|
is
|
|
.L -
|
|
.I hoc
|
|
interprets the standard input.
|
|
The
|
|
.B -e
|
|
option allows input to
|
|
.I hoc
|
|
to be specified on the command line, to be treated as if it appeared in a file.
|
|
.PP
|
|
.I Hoc
|
|
input consists of
|
|
.I expressions
|
|
and
|
|
.IR statements .
|
|
Expressions are evaluated and their results printed.
|
|
Statements, typically assignments and function or procedure
|
|
definitions, produce no output unless they explicitly call
|
|
.IR print .
|
|
.PP
|
|
Variable names have the usual syntax, including
|
|
.LR _ ;
|
|
the name
|
|
.L _
|
|
by itself contains the value of the last expression evaluated.
|
|
The variables
|
|
.BR E ,
|
|
.BR PI ,
|
|
.BR PHI ,
|
|
.BR GAMMA
|
|
and
|
|
.B DEG
|
|
are predefined; the last is 59.25..., degrees per radian.
|
|
.PP
|
|
Expressions are formed with these C-like operators, listed by
|
|
decreasing precedence.
|
|
.TP
|
|
.B ^
|
|
exponentiation
|
|
.TP
|
|
.B ! - ++ --
|
|
.TP
|
|
.B * / %
|
|
.TP
|
|
.B + -
|
|
.TP
|
|
.B > >= < <= == !=
|
|
.TP
|
|
.B &&
|
|
.TP
|
|
.B ||
|
|
.TP
|
|
.B = += -= *= /= %=
|
|
.PP
|
|
Built in functions are
|
|
.BR abs ,
|
|
.BR acos ,
|
|
.BR asin ,
|
|
.B atan
|
|
(one argument),
|
|
.BR cos ,
|
|
.BR cosh ,
|
|
.BR exp ,
|
|
.BR int ,
|
|
.BR log ,
|
|
.BR log10 ,
|
|
.BR sin ,
|
|
.BR sinh ,
|
|
.BR sqrt ,
|
|
.BR tan ,
|
|
and
|
|
.BR tanh .
|
|
The function
|
|
.B read(x)
|
|
reads a value into the variable
|
|
.B x
|
|
and returns 0 at EOF;
|
|
the statement
|
|
.B print
|
|
prints a list of expressions that may include
|
|
string constants such as
|
|
\fL"hello\en"\f1.\fP
|
|
.PP
|
|
Control flow statements are
|
|
.BR if - else ,
|
|
.BR while ,
|
|
and
|
|
.BR for ,
|
|
with braces for grouping.
|
|
Newline ends a statement.
|
|
Backslash-newline is equivalent to a space.
|
|
.PP
|
|
Functions and procedures are introduced by the words
|
|
.B func
|
|
and
|
|
.BR proc ;
|
|
.B return
|
|
is used to return with a value from a function.
|
|
.SH EXAMPLES
|
|
.EX
|
|
func gcd(a, b) {
|
|
temp = abs(a) % abs(b)
|
|
if(temp == 0) return abs(b)
|
|
return gcd(b, temp)
|
|
}
|
|
for(i=1; i<12; i++) print gcd(i,12)
|
|
.EE
|
|
.SH SOURCE
|
|
.B \*9/src/cmd/hoc
|
|
.SH "SEE ALSO"
|
|
.MR bc 1 ,
|
|
.MR dc 1
|
|
.br
|
|
B. W. Kernighan and R. Pike,
|
|
.I
|
|
The Unix Programming Environment,
|
|
Prentice-Hall, 1984
|
|
.SH BUGS
|
|
Error recovery is imperfect within function and procedure definitions.
|