plan9port/man/man1/hoc.1
Russ Cox 977b25a76a tmac: introduce real manual reference macro instead of overloading IR
The overloading of IR emits magic \X'...' sequences that turn into HTML manual links.
But not all such IR invocations should be manual links;
those had to be written to avoid the IR macro before.
Worse, the \X'...' ending the IR causes troff to emit only a single space after a period.

Defining a new IM macro for manual references fixes both problems.

Fixes #441.
2020-08-13 23:43:43 -04:00

144 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"
.IM bc (1) ,
.IM 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.